lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 0f29420 1/6: Import PETE examples and html do


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 0f29420 1/6: Import PETE examples and html documentation
Date: Fri, 19 Mar 2021 17:54:41 -0400 (EDT)

branch: master
commit 0f294207737e4389505ba6f24fa6ef0d9c8c7b8d
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Import PETE examples and html documentation
---
 tools/pete-2.1.1/examples/DDJ/Listing1.cpp         |   87 +
 tools/pete-2.1.1/examples/DDJ/Listing1Defs.in      |    6 +
 tools/pete-2.1.1/examples/DDJ/Listing1Operators.h  | 3106 +++++++++++
 tools/pete-2.1.1/examples/DDJ/Listing2.cpp         |  122 +
 tools/pete-2.1.1/examples/DDJ/Listing2Defs.in      |    7 +
 tools/pete-2.1.1/examples/DDJ/Listing2Operators.h  | 5620 ++++++++++++++++++++
 tools/pete-2.1.1/examples/DDJ/Listing3.cpp         |  149 +
 tools/pete-2.1.1/examples/DDJ/Listing4.cpp         |  187 +
 tools/pete-2.1.1/examples/DDJ/Makefile.user        |   74 +
 tools/pete-2.1.1/examples/DDJ/README               |   38 +
 tools/pete-2.1.1/examples/DDJ/makefile             |   74 +
 tools/pete-2.1.1/examples/Mixed/Eval.h             |  140 +
 tools/pete-2.1.1/examples/Mixed/Makefile.user      |   61 +
 tools/pete-2.1.1/examples/Mixed/Mixed.cpp          |   95 +
 tools/pete-2.1.1/examples/Mixed/MixedDefs.in       |    8 +
 tools/pete-2.1.1/examples/Mixed/MixedOperators.h   | 5620 ++++++++++++++++++++
 tools/pete-2.1.1/examples/Mixed/README             |    9 +
 tools/pete-2.1.1/examples/Mixed/makefile           |   60 +
 tools/pete-2.1.1/examples/RGB/README               |   17 +
 tools/pete-2.1.1/examples/RGB/RGB.cpp              |   43 +
 tools/pete-2.1.1/examples/RGB/RGB.h                |  180 +
 tools/pete-2.1.1/examples/RGB/RGBDefs.in           |    5 +
 tools/pete-2.1.1/examples/RGB/RGBOperators.h       | 3007 +++++++++++
 tools/pete-2.1.1/examples/RGB/makefile             |   60 +
 tools/pete-2.1.1/examples/TArray/ForEachInOrder.h  |  274 +
 tools/pete-2.1.1/examples/TArray/README            |   19 +
 tools/pete-2.1.1/examples/TArray/TArray.cpp        |   64 +
 tools/pete-2.1.1/examples/TArray/TArray.h          |  394 ++
 tools/pete-2.1.1/examples/TArray/TArrayDefs.in     |    4 +
 tools/pete-2.1.1/examples/TArray/TArrayOperators.h | 2964 +++++++++++
 tools/pete-2.1.1/examples/TArray/makefile          |   58 +
 tools/pete-2.1.1/examples/Vec3/README              |   15 +
 tools/pete-2.1.1/examples/Vec3/Vec3.cpp            |   72 +
 tools/pete-2.1.1/examples/Vec3/Vec3.h              |  214 +
 tools/pete-2.1.1/examples/Vec3/Vec3Defs.in         |    4 +
 tools/pete-2.1.1/examples/Vec3/Vec3Operators.h     | 2964 +++++++++++
 tools/pete-2.1.1/examples/Vec3/makefile            |   60 +
 tools/pete-2.1.1/examples/Vector/Eval.h            |  165 +
 tools/pete-2.1.1/examples/Vector/Makefile.user     |   62 +
 tools/pete-2.1.1/examples/Vector/README            |   39 +
 tools/pete-2.1.1/examples/Vector/Vector.cpp        |   69 +
 tools/pete-2.1.1/examples/Vector/VectorDefs.in     |    4 +
 tools/pete-2.1.1/examples/Vector/VectorOperators.h | 3106 +++++++++++
 tools/pete-2.1.1/examples/Vector/makefile          |   60 +
 tools/pete-2.1.1/examples/makefile                 |   72 +
 tools/pete-2.1.1/html/PETETutorials.pdf            | 2163 ++++++++
 tools/pete-2.1.1/html/PeteOps.html                 |  255 +
 tools/pete-2.1.1/html/background.html              |  779 +++
 tools/pete-2.1.1/html/banner.gif                   |  Bin 0 -> 5357 bytes
 tools/pete-2.1.1/html/builtin.html                 |   66 +
 tools/pete-2.1.1/html/index.html                   |   49 +
 tools/pete-2.1.1/html/introduction.html            |   80 +
 tools/pete-2.1.1/html/legal.html                   |   54 +
 tools/pete-2.1.1/html/makeoperators.html           |  450 ++
 tools/pete-2.1.1/html/stl.html                     |   97 +
 tools/pete-2.1.1/html/tree.gif                     |  Bin 0 -> 2163 bytes
 tools/pete-2.1.1/html/tut-1.html                   |  732 +++
 tools/pete-2.1.1/html/tut-2.html                   |  406 ++
 tools/pete-2.1.1/html/tut-3.html                   |  766 +++
 59 files changed, 35355 insertions(+)

diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1.cpp 
b/tools/pete-2.1.1/examples/DDJ/Listing1.cpp
new file mode 100644
index 0000000..6ec7ba1
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1.cpp
@@ -0,0 +1,87 @@
+#include <iostream.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing1Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors so that
+// operators know what to stick in the leaves of the expression tree. In this
+// case, we store a const_iterator at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+  typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+  inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin(); 
}
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class AssignOp, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const AssignOp &op, const RHS 
&rhs)
+{
+  typename vector<T, Allocator>::iterator iterLHS = lhs.begin();
+  while (iterLHS != lhs.end())
+    {
+      // The actual assignment operation is performed here.
+      // PETE operator tags all define operator() to perform the operation.
+      // (In this case op performs an assignment operation.)
+      // forEach is used to compute the rhs value.  DereferenceLeaf gets the
+      // values at each node by deferencing an iterator, and the tag 
+      // OpCombine tells forEach to use the operator tags in the expression 
+      // to combine values together.
+
+      op(*iterLHS, forEach(rhs, DereferenceLeaf(), OpCombine()));
+
+      // Increment the LHS iterator.
+      
+      iterLHS++;
+            
+      // Now, we have to increment the iterators for everything on the RHS.
+      // The results don't need to be combined so we use a NullCombiner.
+      
+      forEach(rhs, IncrementLeaf(), NullCombine());
+    }
+}
+
+int main()
+{
+  int i;
+  const int n = 10;
+  vector<double> A, C, E(n);
+  vector<int> B, D;
+
+  for (i = 0; i < n; ++i)
+    {
+      A.push_back(i);
+      B.push_back(2*i);
+      C.push_back(3*i);
+      D.push_back(i);
+    }
+
+  A += -B + 2 * C;
+  
+  assign(B, 2);
+  assign(D, A + B * C);
+  A += where(D < 30, B, C);
+
+  assign(E, C);
+  E += E - 4 / (sin(C) + 1);
+
+  for (i = 0; i < n; ++i)
+    { 
+      cout << " A[" << i << "] = " << A[i]
+          << " B[" << i << "] = " << B[i]
+          << " C[" << i << "] = " << C[i]
+          << " D[" << i << "] = " << D[i]
+          << " E[" << i << "] = " << E[i]
+          << endl;
+    }
+    
+  return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in 
b/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in
new file mode 100644
index 0000000..f158cd0
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1Defs.in
@@ -0,0 +1,6 @@
+classes
+-----
+  ARG   = "class T[n], class Allocator[n]"
+  CLASS = "vector<T[n], Allocator[n]>"
+
+  
\ No newline at end of file
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h 
b/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h
new file mode 100644
index 0000000..7b38e91
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing1Operators.h
@@ -0,0 +1,3106 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Listing1Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2, Allocator2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T2, Allocator2> >::make(l)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& assign(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator+=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator-=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator*=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator/=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator%=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator|=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator&=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator^=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator<<=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator>>=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2.cpp 
b/tools/pete-2.1.1/examples/DDJ/Listing2.cpp
new file mode 100644
index 0000000..2704aeb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2.cpp
@@ -0,0 +1,122 @@
+#include <iostream.h>
+#include <list.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing2Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors and lists
+// so that operators know what to stick in the leaves of the expression tree. 
+// In these cases, we store const_iterators at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+  typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+  inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin(); 
}
+};
+
+template<class T, class Allocator>
+struct CreateLeaf<list<T, Allocator> >
+{
+  typedef typename list<T, Allocator>::const_iterator Leaf_t;
+  inline static Leaf_t make(const list<T, Allocator> &a) { return a.begin(); }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+  for (int i = 0; i < lhs.size(); ++i)
+    {
+      // The actual assignment operation is performed here.
+      // PETE operator tags all define operator() to perform the operation.
+      // (In this case op performs an assignment operation.)
+      // forEach is used to compute the rhs value.  DereferenceLeaf gets the
+      // values at each node by deferencing an iterator, and the tag 
+      // OpCombine tells forEach to use the operator tags in the expression 
+      // to combine values together.
+
+      op(lhs[i], forEach(rhs, DereferenceLeaf(), OpCombine()));
+      
+      // Now, we have to increment the iterators for everything on the RHS.
+      // The results don't need to be combined so we use a NullCombiner.
+      
+      forEach(rhs, IncrementLeaf(), NullCombine());
+    }
+}
+
+//-----------------------------------------------------------------------------
+// Loop over list and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(list<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+  typename list<T, Allocator>::iterator i = lhs.begin();
+  while (i != lhs.end())
+    {
+      // The actual assignment operation is performed here.
+      // PETE operator tags all define operator() to perform the operation.
+      // (In this case op performs an assignment operation.)
+      // forEach is used to compute the rhs value.  DereferenceLeaf gets the
+      // values at each node by deferencing an iterator, and the tag 
+      // OpCombine tells forEach to use the operator tags in the expression 
+      // to combine values together.
+
+      op(*i++, forEach(rhs, DereferenceLeaf(), OpCombine()));
+      
+      // Now, we have to increment the iterators for everything on the RHS.
+      // The results don't need to be combined so we use a NullCombiner.
+      
+      forEach(rhs, IncrementLeaf(), NullCombine());
+    }
+}
+
+int main()
+{
+  int i;
+  const int n = 10;
+  vector<double> A, C;
+  vector<int> B;
+  list<int> D;
+  list<double> E;
+
+  for (i = 0; i < n; ++i)
+    {
+      A.push_back(i);
+      B.push_back(2*i);
+      C.push_back(3*i);
+      D.push_back(i);
+      E.push_back(0.0);
+    }
+
+  A += -B + 2 * C;
+  
+  assign(B, 2);
+  assign(D, A + B * C);
+  A += where(D < 30, B, C);
+
+  assign(E, C);
+  E += E - 4 / (sin(C) + 1);
+
+  list<int>::const_iterator di = D.begin();
+  list<double>::const_iterator ei = E.begin();
+  for (i = 0; i < n; ++i)
+    { 
+      cout << " A[" << i << "] = " << A[i]
+          << " B[" << i << "] = " << B[i]
+          << " C[" << i << "] = " << C[i]
+          << " D[" << i << "] = " << *di++
+          << " E[" << i << "] = " << *ei++
+          << endl;
+    }
+    
+  return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in 
b/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in
new file mode 100644
index 0000000..e4a3122
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2Defs.in
@@ -0,0 +1,7 @@
+classes
+-----
+  ARG   = "class T[n], class Allocator[n]"
+  CLASS = "vector<T[n], Allocator[n]>"
+-----
+  ARG   = "class T[n], class Allocator[n]"
+  CLASS = "list<T[n], Allocator[n]>"
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h 
b/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h
new file mode 100644
index 0000000..10c0712
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing2Operators.h
@@ -0,0 +1,5620 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Listing2Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+acos(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+asin(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+atan(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+ceil(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+cos(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+cosh(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+exp(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+fabs(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+floor(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+log(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+log10(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sin(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sinh(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+sqrt(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+tan(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+tanh(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator~(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+PETE_identity(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l)));
+}
+
+template<class T1, class Allocator1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> >::Expression_t
+operator!(const list<T1, Allocator1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2, Allocator2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T2, Allocator2> >::make(l)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const list<T2, Allocator2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T2, Allocator2> >::make(l)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1, class Allocator1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const list<T1, Allocator1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2, Allocator2> >::make(r)));
+}
+
+template<class T1,class T2, class Allocator2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const list<T2, Allocator2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2, Allocator2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2, Allocator2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<vector<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1, Allocator1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+
+template<class T1, class Allocator1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const list<T1, Allocator1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<list<T1, Allocator1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1, Allocator1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& assign(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& assign(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator+=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator+=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator-=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator-=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator*=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator*=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator/=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator/=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator%=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator%=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator|=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator|=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator&=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator&=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator^=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator^=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator<<=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator<<=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+vector<T1, Allocator1>& operator>>=(vector<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1, class Allocator1,class RHS>
+inline
+list<T1, Allocator1>& operator>>=(list<T1, Allocator1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing3.cpp 
b/tools/pete-2.1.1/examples/DDJ/Listing3.cpp
new file mode 100644
index 0000000..db07ef5
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing3.cpp
@@ -0,0 +1,149 @@
+#include <iostream.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing1Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for the STL vector
+// so that operators know what to stick in the leaves of the expression tree. 
+// We're going to use a different evaluation mechanism (operator[]()) so
+// store references to the vector operands at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+  typedef Reference<vector<T, Allocator> > Leaf_t;
+  inline static Leaf_t make(const vector<T, Allocator> &a) { return Leaf_t(a); 
}
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate the leaves consisting of STL vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, EvalLeaf1>
+{
+  typedef T Type_t;
+  inline static
+  Type_t apply(const vector<T, Allocator>& vec, const EvalLeaf1 &f)
+  {
+    return vec[f.val1()];
+  }
+};
+
+//-----------------------------------------------------------------------------
+// We need to write a functor that is capable of comparing the size of
+// the vector with a stored value. Then, we supply LeafFunctor specializations
+// for Scalar<T> and STL vector leaves.
+//-----------------------------------------------------------------------------
+
+class SizeLeaf
+{
+public:
+
+  SizeLeaf(int s) : size_m(s) { }
+  SizeLeaf(const SizeLeaf &model) : size_m(model.size_m) { }
+  bool operator()(int s) const { return size_m == s; }
+  
+private:
+  
+  int size_m;
+  
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, SizeLeaf>
+{
+  typedef bool Type_t;
+  inline static
+  bool apply(const Scalar<T> &, const SizeLeaf &) 
+  {
+    // Scalars always conform.
+    
+    return true;
+  }
+};
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, SizeLeaf>
+{
+  typedef bool Type_t;
+  inline static
+  bool apply(const vector<T, Allocator> &v, const SizeLeaf &s) 
+  {
+    return s(v.size());
+  }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op, const RHS &rhs)
+{
+  if (forEach(rhs, SizeLeaf(lhs.size()), AndCombine()))
+    {
+      // We get here if the vectors on the RHS are the same size as those on
+      // the LHS.
+      
+      for (int i = 0; i < lhs.size(); ++i)
+        {
+          // The actual assignment operation is performed here.
+          // PETE operator tags all define operator() to perform the operation.
+          // (In this case op performs an assignment operation.)
+          // forEach is used to compute the rhs value.  EvalLeaf1 gets the
+          // values at each node using random access, and the tag 
+          // OpCombine tells forEach to use the operator tags in the 
expression 
+          // to combine values together.
+
+          op(lhs[i], forEach(rhs, EvalLeaf1(i), OpCombine()));
+        }
+    }
+  else
+    {
+      cerr << "Error: LHS and RHS don't conform." << endl;
+      exit(1);
+    }
+}
+
+int main()
+{
+  int i;
+  const int n = 10;
+  vector<double> A, C, E(n);
+  vector<int> B, D;
+
+  for (i = 0; i < n; ++i)
+    {
+      A.push_back(i);
+      B.push_back(2*i);
+      C.push_back(3*i);
+      D.push_back(i);
+    }
+
+  A += -B + 2 * C;
+  
+  assign(B, 2);
+  assign(D, A + B * C);
+  A += where(D < 30, B, C);
+
+  assign(E, C);
+  E += E - 4 / (sin(C) + 1);
+
+  for (i = 0; i < n; ++i)
+    { 
+      cout << " A[" << i << "] = " << A[i]
+          << " B[" << i << "] = " << B[i]
+          << " C[" << i << "] = " << C[i]
+          << " D[" << i << "] = " << D[i]
+          << " E[" << i << "] = " << E[i]
+          << endl;
+    }
+    
+  return 0;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Listing4.cpp 
b/tools/pete-2.1.1/examples/DDJ/Listing4.cpp
new file mode 100644
index 0000000..4ff105e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Listing4.cpp
@@ -0,0 +1,187 @@
+#include <iostream.h>
+#include <list.h>
+#include <vector.h>
+#include <math.h>
+
+#include "PETE/PETE.h"
+#include "Listing2Operators.h"
+
+//-----------------------------------------------------------------------------
+// We need to specialize the CreateLeaf traits class for STL vectors and lists
+// so that operators know what to stick in the leaves of the expression tree. 
+// In these cases, we store const_iterators at the leaves.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+  typedef typename vector<T, Allocator>::const_iterator Leaf_t;
+  inline static Leaf_t make(const vector<T, Allocator> &a) { return a.begin(); 
}
+};
+
+template<class T, class Allocator>
+struct CreateLeaf<list<T, Allocator> >
+{
+  typedef typename list<T, Allocator>::const_iterator Leaf_t;
+  inline static Leaf_t make(const list<T, Allocator> &a) { return a.begin(); }
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize LeafFunctor to extract iterator tags. By default, 
+// it uses iterator_traits to extract the iterator tag. We also need to supply
+// a specialization for Scalar<T>, which simply returns 
+// random_access_iterator_tag because scalars don't place any constraints on
+// iteration.
+//-----------------------------------------------------------------------------
+
+struct GetIteratorTagLeaf { };
+
+template<class Iterator>
+struct LeafFunctor<Iterator, GetIteratorTagLeaf>
+{
+  typedef std::iterator_traits<Iterator>::iterator_category Type_t;
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, GetIteratorTagLeaf>
+{
+  typedef std::random_access_iterator_tag Type_t;
+};
+
+#if defined(__MWERKS__)
+template<class T>
+struct LeafFunctor<const T *, GetIteratorTagLeaf>
+{
+  typedef std::random_access_iterator_tag Type_t;
+  inline static
+  Type_t apply(const T *, const GetIteratorTagLeaf &)
+    { return Type_t(); }
+};
+#endif
+
+//-----------------------------------------------------------------------------
+// We now need to define some combiners for synthesizing an iterator tag
+// from two others. The rule is that we return the tag with the fewest
+// capabilities. We're only dealing with vectors and lists, so we need to
+// consider only bidirectional and random access tags.
+//-----------------------------------------------------------------------------
+
+struct IteratorTagCombine { };
+
+template<class Op>
+struct Combine2<std::random_access_iterator_tag, 
+                std::random_access_iterator_tag, 
+                Op, IteratorTagCombine>
+{
+  typedef std::random_access_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::bidirectional_iterator_tag, 
+                std::bidirectional_iterator_tag, 
+                Op, IteratorTagCombine>
+{
+  typedef std::bidirectional_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::random_access_iterator_tag, 
+                std::bidirectional_iterator_tag, 
+                Op, IteratorTagCombine>
+{
+  typedef std::bidirectional_iterator_tag Type_t;
+};
+
+template<class Op>
+struct Combine2<std::bidirectional_iterator_tag, 
+                std::random_access_iterator_tag, 
+                Op, IteratorTagCombine>
+{
+  typedef std::bidirectional_iterator_tag Type_t;
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate the leaves consisting of STL vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class Iterator>
+struct LeafFunctor<Iterator, EvalLeaf1>
+{
+  typedef typename std::iterator_traits<Iterator>::value_type Type_t;
+  inline static
+  Type_t apply(const Iterator &i, const EvalLeaf1 &f)
+  {
+    return *(i + f.val1());
+  }
+};
+
+#if defined(__MWERKS__)
+template<class T>
+struct LeafFunctor<const T *, EvalLeaf1>
+{
+  typedef T Type_t;
+  inline static
+  Type_t apply(const T *i, const EvalLeaf1 &f)
+  {
+    return *(i + f.val1());
+  }
+};
+#endif
+
+//-----------------------------------------------------------------------------
+// Return a particular element in the most efficient way possible. We extract
+// the most basic iterator tag from the expression and then dispatch (at
+// compile time) to a function that does the work.
+//-----------------------------------------------------------------------------
+
+template<class Expr>
+inline 
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n)
+{
+  typedef typename 
+    ForEach<Expression<Expr>, GetIteratorTagLeaf, IteratorTagCombine>::Type_t
+      IteratorTag_t;
+  
+  return elem(expr, n, IteratorTag_t());
+}
+
+template<class Expr>
+inline 
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n, 
+  const std::random_access_iterator_tag &)
+{
+  return forEach(expr, EvalLeaf1(n), OpCombine());
+}
+
+template<class Expr>
+inline 
+typename ForEach<Expression<Expr>, DereferenceLeaf, OpCombine>::Type_t
+elem(const Expression<Expr> &expr, int n, 
+  const std::bidirectional_iterator_tag &)
+{
+  for (int i = 0; i < n; ++i)
+    forEach(expr, IncrementLeaf(), NullCombine());
+    
+  return forEach(expr, DereferenceLeaf(), OpCombine());
+}
+
+int main()
+{
+  int n = 10;
+  vector<int> a, b, c;
+  list<double> d;
+
+  for (int i = 0; i < n;++i)
+    {
+      a.push_back(i);
+      b.push_back(2*i);
+      c.push_back(3*i);
+      d.push_back(4*i);
+    }
+
+  cout << elem(2.0 * a + b * c, 4) << endl;
+  cout << elem(2.5 * a + b * c + sin(d), 4) << endl;
+}
diff --git a/tools/pete-2.1.1/examples/DDJ/Makefile.user 
b/tools/pete-2.1.1/examples/DDJ/Makefile.user
new file mode 100644
index 0000000..eec7a57
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/Makefile.user
@@ -0,0 +1,74 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG = 
+
+default: Listing1 Listing2 Listing3 Listing4
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes Listing1Defs.in --assign-ops \
+       --o Listing1Operators.h
+       $(MAKEEXPR) --classes Listing2Defs.in --assign-ops \
+       --o Listing2Operators.h
+
+Listing1: Listing1.cpp Listing1Operators.h
+       $(CXX) -o Listing1 $(CXXINC) $(CXXARG) Listing1.cpp -lm
+
+Listing2: Listing2.cpp Listing2Operators.h
+       $(CXX) -o Listing2 $(CXXINC) $(CXXARG) Listing2.cpp -lm
+
+Listing3: Listing3.cpp Listing1Operators.h
+       $(CXX) -o Listing3 $(CXXINC) $(CXXARG) Listing3.cpp -lm
+
+Listing4: Listing4.cpp Listing2Operators.h
+       $(CXX) -o Listing4 $(CXXINC) $(CXXARG) Listing4.cpp -lm
+
+clean:
+       rm -rf Listing1 Listing2 Listing3 Listing4 ti_files ii_files
+
+run: Listing1 Listing2 Listing3 Listing4
+       Listing1
+       Listing2
+       Listing3
+       Listing4
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: Makefile.user,v $   $Author: swhaney $
+#  $Revision: 1.5 $   $Date: 2000/01/04 01:39:58 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/DDJ/README 
b/tools/pete-2.1.1/examples/DDJ/README
new file mode 100644
index 0000000..bae98c7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/README
@@ -0,0 +1,38 @@
+/*******************************************************************
+ *                                                                 *
+ *             Doctor Dobb's Journal Article Examples              *
+ *                                                                 *
+ *******************************************************************/
+
+The codes in this directory are the example codes used in the
+PETE article submitted to Doctor Dobb's Journal.
+(See html/ddj_article.html).
+
+Listing1.cpp illustrates how trivial it is to add expression-template
+capabilities to the STL vector class.  Iterators are stored in the
+expression tree leaves.
+
+Listing2.cpp extends the first example to evaluate expressions
+involving STL vectors and STL lists.  (It uses iterators as well.)
+
+Listing3.cpp extends the vector example to check that they conform
+(are all the same size) before evaluating the expression.  Since
+we want to extract the vector sizes, we store references to the
+vectors in the expression tree leaves.
+
+Listing4.cpp illustrates the compile-time computation of a trait
+associated with an expression.  The code generates expression
+templates for vectors and lists that store iterators at the leaves.
+A traits class is created that combines the iterator_category
+traits of all the iterators in an expression to see if they are all
+random access or if some are just bidirectional.  This trait is used
+at compile time to select the evaluation mechanism for a particular
+element.  If all the iterators are random access, then we apply a
+functor that contains an offset, otherwise we increment all the
+iterators to the desired location and then dereference them.
+
+Listing1Operators.h is generated from Listing1Defs.in and just
+contains the operators for STL vectors (used by Listin1.cpp and
+Listing3.cpp).  Listing2Operators is generated from Listing2Defs.in
+and contains operators for STL vectors and STL lists (used by
+Listing2.cpp and Listing4.cpp).
\ No newline at end of file
diff --git a/tools/pete-2.1.1/examples/DDJ/makefile 
b/tools/pete-2.1.1/examples/DDJ/makefile
new file mode 100644
index 0000000..8008db6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/DDJ/makefile
@@ -0,0 +1,74 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Listing1 Listing2 Listing3 Listing4
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes Listing1Defs.in --assign-ops \
+       > Listing1Operators.h
+       $(MAKEEXPR) --classes Listing2Defs.in --assign-ops \
+       > Listing2Operators.h
+
+Listing1: Listing1.cpp Listing1Operators.h
+       $(CXX) -o Listing1 $(CXXINC) $(CXXOPTARG) Listing1.cpp -lm
+
+Listing2: Listing2.cpp Listing2Operators.h
+       $(CXX) -o Listing2 $(CXXINC) $(CXXOPTARG) Listing2.cpp -lm
+
+Listing3: Listing3.cpp Listing1Operators.h
+       $(CXX) -o Listing3 $(CXXINC) $(CXXOPTARG) Listing3.cpp -lm
+
+Listing4: Listing4.cpp Listing2Operators.h
+       $(CXX) -o Listing4 $(CXXINC) $(CXXOPTARG) Listing4.cpp -lm
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -f Listing1 Listing2 Listing3 Listing4
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Listing1 Listing2 Listing3 Listing4
+       Listing1
+       Listing2
+       Listing3
+       Listing4
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.8 $   $Date: 2000/01/04 01:39:58 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Eval.h 
b/tools/pete-2.1.1/examples/Mixed/Eval.h
new file mode 100644
index 0000000..d3defcb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Eval.h
@@ -0,0 +1,140 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#ifndef PETE_EXAMPLES_MIXED_EVAL_H
+#define PETE_EXAMPLES_MIXED_EVAL_H
+
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+
+#include "MixedOperators.h"
+
+//-----------------------------------------------------------------------------
+// Eval.h
+//
+// This file contains several class definitions that are use to evaluate
+// expressions containing STL vectors.  The main function defined at the end
+// is evaluate(lhs,op,rhs), which allows the syntax:
+// vector<int> a,b,c;
+// evaluate(a,OpAssign(),b+c);
+//
+// evaluate() is called by all the global assignment operator functions
+// defined in MixedOperators.h
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our classes, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class T>
+struct CreateLeaf<vector<T> >
+{
+  typedef vector<T>::const_iterator Leaf_t;
+  inline static
+  Leaf_t make(const vector<T> &a) { return a.begin(); }
+};
+
+template<class T>
+struct CreateLeaf<list<T> >
+{
+  typedef list<T>::const_iterator Leaf_t;
+  inline static
+  Leaf_t make(const list<T> &a) { return a.begin(); }
+};
+
+
+//-----------------------------------------------------------------------------
+// evaluate(lhs,op,rhs) (vector on LHS)
+//
+// Loop over size and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T,class Op,class RHS>
+inline
+void evaluate(vector<T> &lhs,const Op &op,const RHS &rhs)
+{
+  for (int i = 0; i < lhs.size(); ++i)
+    {
+      // The actual assignment operation is performed here.
+      // PETE operator tags all define operator() to perform the operation.
+      // (In this case op performs an assignment operation.)
+      // forEach is used to compute the rhs value.  DereferenceLeaf gets the
+      // values at each node by deferencing an iterator, and the tag 
+      // OpCombine tells forEach to use the operator tags in the expression 
+      // to combine values together.
+
+      op(lhs[i], forEach(rhs, DereferenceLeaf(), OpCombine()));
+      
+      // Now, we have to increment the iterators for everything on the RHS.
+      // The results don't need to be combined so we use a NullCombiner.
+      
+      forEach(rhs, IncrementLeaf(), NullCombine());
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// evaluate(lhs,op,rhs) (list on LHS)
+//
+// Loop over size and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T,class Op,class RHS>
+inline
+void evaluate(list<T> &lhs,const Op &op,const RHS &rhs)
+{
+  typename list<T>::iterator i = lhs.begin();
+  while (i != lhs.end())
+    {
+      // The actual assignment operation is performed here.
+      // PETE operator tags all define operator() to perform the operation.
+      // (In this case op performs an assignment operation.)
+      // forEach is used to compute the rhs value.  DereferenceLeaf gets the
+      // values at each node, and the tag OpCombine tells forEach to use the
+      // operator tags in the expression to combine values together.
+
+      op(*i++, forEach(rhs, DereferenceLeaf(), OpCombine()));
+      
+      // Now, we have to increment the iterators for everything on the RHS.
+      
+      forEach(rhs, IncrementLeaf(), NullCombine());
+    }
+}
+
+#endif // PETE_EXAMPLES_MIXED_EVAL_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Eval.h,v $   $Author: swhaney $
+// $Revision: 1.5 $   $Date: 2000/01/04 01:40:07 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Makefile.user 
b/tools/pete-2.1.1/examples/Mixed/Makefile.user
new file mode 100644
index 0000000..356c131
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Makefile.user
@@ -0,0 +1,61 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG = 
+
+default: Mixed
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes MixedDefs.in --assign-ops --o MixedOperators.h
+
+Mixed: Mixed.cpp Eval.h MixedOperators.h
+       $(CXX) -o Mixed $(CXXINC) $(CXXARG) Mixed.cpp -lm
+
+clean:
+       rm -f Mixed
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Mixed
+       Mixed
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: Makefile.user,v $   $Author: swhaney $
+#  $Revision: 1.5 $   $Date: 2000/01/04 01:40:08 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/Mixed.cpp 
b/tools/pete-2.1.1/examples/Mixed/Mixed.cpp
new file mode 100644
index 0000000..4514ecd
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/Mixed.cpp
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include <complex.h>
+#include <list.h>
+#include <vector.h>
+
+#include "PETE/PETE.h"
+#include "Eval.h"
+
+// The current release of PETE does not provide type computation
+// support for complex, because that would require importing the definition
+// of complex into codes that don't use it.  Support for complex is easy to
+// add, just see the file TypeComputations.h to see how to support it in
+// general.  The following struct just supports the one case used in this
+// code.
+
+template<>
+struct Promote<double, complex<double> >
+{
+  typedef complex<double> Type_t;
+};
+
+int main()
+{
+  int n = 10;
+  vector<int> a,b,c,d;
+  list<double> e;
+  list<complex<double> > f;
+
+  int i;
+  for(i = 0;i < n; ++i)
+    {
+      a.push_back(i);
+      b.push_back(2*i);
+      c.push_back(3*i);
+      d.push_back(i);
+      e.push_back(0.0);
+      f.push_back(complex<double>(1.0, 1.0));
+    }
+
+  assign(b, 2);
+  assign(d, a + b * c);
+  a += where(d < 30, b, c);
+
+  assign(e, c);
+  e += e - 4 / (c + 1);
+  
+  f -= sin(0.1 * e * complex<double>(0.2, 1.2));
+
+  list<double>::const_iterator ei = e.begin();
+  list<complex<double> >::const_iterator fi = f.begin();
+  for (i = 0; i < n; ++i)
+    {
+      cout << "a(" << i << ") = " << a[i]
+        << " b(" << i << ") = " << b[i]
+        << " c(" << i << ") = " << c[i]
+        << " d(" << i << ") = " << d[i]
+        << " e(" << i << ") = " << *ei++
+        << " f(" << i << ") = " << *fi++
+        << endl;
+    }
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Mixed.cpp,v $   $Author: sa_smith $
+// $Revision: 1.5 $   $Date: 2000/08/03 00:11:03 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Mixed/MixedDefs.in 
b/tools/pete-2.1.1/examples/Mixed/MixedDefs.in
new file mode 100644
index 0000000..0d2127e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/MixedDefs.in
@@ -0,0 +1,8 @@
+classes
+-----
+  ARG   = "class T[n]"
+  CLASS = "vector<T[n]>"
+-----
+  ARG   = "class T[n]"
+  CLASS = "list<T[n]>"
+
diff --git a/tools/pete-2.1.1/examples/Mixed/MixedOperators.h 
b/tools/pete-2.1.1/examples/Mixed/MixedOperators.h
new file mode 100644
index 0000000..419d1d6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/MixedOperators.h
@@ -0,0 +1,5620 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// MixedDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+acos(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+acos(const list<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+asin(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+asin(const list<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+atan(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+atan(const list<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+ceil(const list<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cos(const vector<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+cos(const list<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+cosh(const list<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+exp(const vector<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+exp(const list<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+fabs(const list<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+floor(const vector<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+floor(const list<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log(const vector<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+log(const list<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log10(const vector<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+log10(const list<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sin(const vector<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sin(const list<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sinh(const list<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+sqrt(const list<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tan(const vector<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+tan(const list<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+tanh(const list<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator~(const list<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const list<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<list<T1> >::Leaf_t> >::Expression_t
+operator!(const list<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<list<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const list<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const list<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<list<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const list<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<list<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<list<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<list<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const list<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<list<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<list<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+template<class T1,class RHS>
+inline
+vector<T1>& assign(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& assign(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator+=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator+=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator-=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator-=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator*=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator*=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator/=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator/=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator%=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator%=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator|=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator|=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator&=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator&=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator^=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator^=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator<<=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator<<=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator>>=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+list<T1>& operator>>=(list<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/Mixed/README 
b/tools/pete-2.1.1/examples/Mixed/README
new file mode 100644
index 0000000..429a582
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/README
@@ -0,0 +1,9 @@
+/*******************************************************************
+ *                                                                 *
+ *                         Mixed example                           *
+ *                                                                 *
+ *******************************************************************/
+                            
+This example illustrates mixing STL vectors and lists in expressions.
+For another example of this combination, see Listing2.cpp and
+Listing4.cpp in examples/DDJ.
diff --git a/tools/pete-2.1.1/examples/Mixed/makefile 
b/tools/pete-2.1.1/examples/Mixed/makefile
new file mode 100644
index 0000000..2edc27c
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Mixed/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Mixed
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes MixedDefs.in --assign-ops \
+       > MixedOperators.h
+
+Mixed: Mixed.cpp Eval.h MixedOperators.h
+       $(CXX) -o Mixed $(CXXINC) $(CXXOPTARG) Mixed.cpp -lm
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -f Mixed
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Mixed
+       Mixed
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.7 $   $Date: 2000/01/04 01:40:08 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/README 
b/tools/pete-2.1.1/examples/RGB/README
new file mode 100644
index 0000000..aa1599a
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/README
@@ -0,0 +1,17 @@
+/*******************************************************************
+ *                                                                 *
+ *                           RGB example                           *
+ *                                                                 *
+ *******************************************************************/
+
+This example illustrates compile-time synthesis of types using PETE.
+See the tutorial in html/tut-3.html for a description of this example.
+
+Mathemetical operations between three `colors' (Operand<Blue>,
+Operand<Red> and Operand<Green>) are implemented.  Functors are defined
+that extract the types of the leaves.  The PETE class Combine2
+is specialized in RGB.h to tell PETE how to combine the types in
+an expression.
+
+Type computations of this sort are often used to select particular
+algorithms based on the types of the objects appearing in an expression.
diff --git a/tools/pete-2.1.1/examples/RGB/RGB.cpp 
b/tools/pete-2.1.1/examples/RGB/RGB.cpp
new file mode 100644
index 0000000..92bf7fd
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGB.cpp
@@ -0,0 +1,43 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "RGB.h"
+
+int main()
+{
+  printColor(Operand<Red>() + Operand<Green>());
+  printColor(Operand<Red>() + Operand<Green>() + Operand<Blue>());
+  printColor(Operand<Red>() + (Operand<Green>() + Operand<Blue>()));
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: RGB.cpp,v $   $Author: swhaney $
+// $Revision: 1.4 $   $Date: 2000/01/04 01:40:14 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/RGB.h 
b/tools/pete-2.1.1/examples/RGB/RGB.h
new file mode 100644
index 0000000..81bf126
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGB.h
@@ -0,0 +1,180 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//=============================================================================
+// This example shows how to use combiners to synthesize a type at compile
+// time using ForEach.
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_RGB_RGB_H
+#define PETE_EXAMPLES_RGB_RGB_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+
+#include "PETE/PETE.h"
+
+//-----------------------------------------------------------------------------
+// Tag classes representing colors. Also, a functor for getting a color from
+// a leaf and a combiner for combining colors.
+//-----------------------------------------------------------------------------
+
+struct Red { };
+struct Green { };
+struct Blue { };
+struct GetColor { };
+struct ColorCombine { };
+
+//-----------------------------------------------------------------------------
+// A few overloaded functions that print out color names given a type.
+//-----------------------------------------------------------------------------
+
+inline void calc(const Red &)
+{
+  cout << "This expression is red." << endl;
+}
+
+inline void calc(const Blue &)
+{
+  cout << "This expression is blue." << endl;
+}
+
+inline void calc(const Green &)
+{
+  cout << "This expression is green." << endl;
+}
+
+//-----------------------------------------------------------------------------
+// A function that deduces a color at compile time and calls a special
+// function based on the value.
+//
+//-----------------------------------------------------------------------------
+
+template <class Expr>
+void printColor(const Expression<Expr> &expr)
+{
+  typedef typename ForEach<Expression<Expr>, GetColor, ColorCombine>::Type_t 
+    DeducedColor_t;
+    
+  calc(DeducedColor_t());
+}
+
+//-----------------------------------------------------------------------------
+// A set of combiners that produce new colors according to some arbitrary
+// rules: red & green give blue, red & blue give green, blue and green give 
+// red.
+//-----------------------------------------------------------------------------
+
+template<class Op>
+struct Combine2<Red, Green, Op, ColorCombine>
+{
+  typedef Blue Type_t;
+};
+
+template<class Op>
+struct Combine2<Red, Blue, Op, ColorCombine>
+{
+  typedef Green Type_t;
+};
+
+template<class Op>
+struct Combine2<Green, Blue, Op, ColorCombine>
+{
+  typedef Red Type_t;
+};
+
+template<class Op>
+struct Combine2<Green, Red, Op, ColorCombine>
+{
+  typedef Blue Type_t;
+};
+
+template<class Op>
+struct Combine2<Blue, Green, Op, ColorCombine>
+{
+  typedef Red Type_t;
+};
+
+template<class Op>
+struct Combine2<Blue, Red, Op, ColorCombine>
+{
+  typedef Green Type_t;
+};
+
+template<class C1, class C2, class Op>
+struct Combine2<C1, C2, Op, ColorCombine>
+{
+  typedef C1 Type_t;
+};
+
+//-----------------------------------------------------------------------------
+// A class that has a single template parameter that specifies a color.
+//-----------------------------------------------------------------------------
+
+template<class ColorTag>
+class Operand
+{
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for Operand, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class ColorTag>
+struct CreateLeaf<Operand<ColorTag> >
+{
+  typedef Operand<ColorTag> Leaf_t;
+  inline static
+  const Leaf_t &make(const Operand<ColorTag> &a) { return a; }
+};
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the getting the "color"
+// of an operand.
+//-----------------------------------------------------------------------------
+
+template<class Color>
+struct LeafFunctor<Operand<Color>, GetColor>
+{
+  typedef Color Type_t;
+};
+
+#include "RGBOperators.h"
+
+#endif // PETE_EXAMPLES_RGB_RGB_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: RGB.h,v $   $Author: swhaney $
+// $Revision: 1.8 $   $Date: 2000/01/04 01:40:15 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/RGB/RGBDefs.in 
b/tools/pete-2.1.1/examples/RGB/RGBDefs.in
new file mode 100644
index 0000000..205a67c
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGBDefs.in
@@ -0,0 +1,5 @@
+classes
+-----
+  ARG   = "class T[n]"
+  CLASS = "Operand<T[n]>"
+
diff --git a/tools/pete-2.1.1/examples/RGB/RGBOperators.h 
b/tools/pete-2.1.1/examples/RGB/RGBOperators.h
new file mode 100644
index 0000000..26270d9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/RGBOperators.h
@@ -0,0 +1,3007 @@
+#ifndef RGBOPS_H
+#define RGBOPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// RGBDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+acos(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+asin(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+atan(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+ceil(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+cos(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+cosh(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+exp(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+fabs(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+floor(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+log(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+log10(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sin(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sinh(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+sqrt(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+tan(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+tanh(const Operand<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator~(const Operand<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Operand<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Operand<T1> >::Leaf_t> >::Expression_t
+operator!(const Operand<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Operand<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Operand<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Operand<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Operand<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Operand<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Operand<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Operand<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Operand<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Operand<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Operand<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Operand<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+#endif // RGBOPS_H
+
diff --git a/tools/pete-2.1.1/examples/RGB/makefile 
b/tools/pete-2.1.1/examples/RGB/makefile
new file mode 100644
index 0000000..29124ab
--- /dev/null
+++ b/tools/pete-2.1.1/examples/RGB/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: RGB
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes RGBDefs.in \
+       --guard RGBOPS_H > RGBOperators.h
+
+RGB: RGB.cpp RGB.h RGBOperators.h
+       $(CXX) -o RGB $(CXXINC) $(CXXOPTARG) RGB.cpp 
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -f RGB
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: RGB
+       RGB
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.5 $   $Date: 2000/01/04 01:40:15 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h 
b/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h
new file mode 100644
index 0000000..3630fa9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/ForEachInOrder.h
@@ -0,0 +1,274 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//-----------------------------------------------------------------------------
+// Classes:
+// ForEachInOrder
+// TagVisitor
+//-----------------------------------------------------------------------------
+
+#ifndef POOMA_PETE_FOREACHINORDER_H
+#define POOMA_PETE_FOREACHINORDER_H
+
+//-----------------------------------------------------------------------------
+// Overview: 
+//
+//   ForEachInOrder is like ForEach except that it traverses the parse
+//   tree "in order", meaning it visits the parts of a TBTree as follows:
+//
+//         visit left child
+//         visit value
+//         visit right child
+//
+//   In addition, it calls a start() function on the visit tag before
+//   visit(left) and a finish() function after visit(right). This
+//   additional bit of generality allows special actions to be taken,
+//   in essence, when the ForEachInOrder::apply moves down and back up
+//   the edges of the parse tree (such as printing parentheses).
+//
+//   An "in order" traversal is not what one does for evaluating
+//   expressions, so this may not be useful for much, but I wanted to
+//   do it to gain some more experience with PETE.
+//
+//   This first cut will only do TBTrees.
+//
+//   The TagFunctor and TagCombine structs from ForEach.h can be reused. 
+//
+//   TagVisitor is a new class that visits the "value" node prior,
+//   between, and after the left and right children are visited.
+//
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedefs:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Includes:
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+
+//-----------------------------------------------------------------------------
+// Forward Declarations:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+//
+// Full Description:
+//
+// The ForEachInOrder struct implements a template meta-program
+// traversal of a PETE Expression parse-tree. As explained above, this 
+// is done "in order" rather than the "post order" traversal done by
+// ForEach. 
+//
+// The ForEachInOrder struct defines:
+//
+//   typename ForEachInOrder<Expr,FTag,VTag,CTag>::Type_t
+//
+//   Type_t::apply(Expr& expr, FTag f, VTag v, CTag c) {...};
+//
+// where
+//
+//   Expr is the type of an expression tree.
+//   FTag is the type of a functor tag.
+//   VTag is the type of a visitor tag.
+//   CTag is the type of a combiner tag.
+//
+// Details:
+//
+//   Type_t::apply(Expr &e, FTag f, VTag v, CTag c) 
+//
+// function that traverses the expression tree defined by e, and for
+// each binary-tree node it does:
+//
+//     TagVisitor<...>::start(e.value_m,v);
+//
+//     left_val = ForEachInOrder<...>::apply(e.left_m,f,v,c),
+//
+//     TagVisitor<...>::visit(e.value_m,v);
+//
+//     right_val = ForEachInOrder<...>::apply(e.right_m,f,v,c),
+//
+//     retval = TagCombineInOrdere<...>::
+//               apply(left_val, right_val, e.value_m, c)
+//
+//     TagVisitor<...>::finish(e.value_m,v);
+//
+//     return retval;
+//
+// The TagFunctor is specialized to perform a specific action at the
+// leaf nodes. 
+//
+// The TagVisitor is specialized to perform specific actions both at
+// the start and finish of a new TBTree node, and to perform a
+// specific operation when it visits the "value" node of the parse
+// tree (i.e. this can be specialized to perform specific operations
+// for every type of operator). Note that the value returned by
+// TagVisitor::apply must be of the type Op. This usually means
+// that TagVisitor::apply will just return e.value_m after it does
+// its calculation.
+//
+// The TagCombiner is specialized to combine the results of visiting
+// the left, right, and value fields.
+//
+// The type of object returned is given by: 
+//
+//    typename ForEachInOrder<Expr,FTag,VTag,CTag>::Type_t 
+//
+//-----------------------------------------------------------------------------
+
+//
+// struct TagVisitor
+//
+// "Visitor" functor whose apply() method is applied to the value_m
+// field of an expression between the left-traversal and the
+// right-traversal.
+//
+// Default is "null" behavior. Just return the op. This should make
+// this equivalent to ForEach. This should probably always return the
+// unless it is ignored by everything else. But it can take other
+// actions as well.
+//
+// Also includes start() and finish() functions that are called when
+// the traversal moves down and back up an edge, respectively.
+//
+
+template <class Op, class VTag>
+struct TagVisitor 
+{
+  static void start(Op, VTag) { }
+  static void visit(Op, VTag) { }
+  static void finish(Op, VTag) { }
+};  
+
+
+// 
+// struct ForEachInOrder
+//
+// Template meta-program for traversing the parse tree.
+//
+// Default behaviour assumes you're at a leaf, in which case
+// it just applies the FTag functor
+//
+
+template<class Expr, class FTag, class VTag, class CTag>
+struct ForEachInOrder
+{
+  typedef LeafFunctor<Expr,FTag> Tag_t;
+  typedef typename Tag_t::Type_t Type_t;
+
+  static Type_t apply(const Expr &expr, const FTag &f, const VTag &v, 
+                     const CTag &c) 
+  {
+    return Tag_t::apply(expr,f);
+  }
+};
+
+//
+// The Refernce case needs to apply the functor to the wrapped object.
+//
+
+template<class T, class FTag, class VTag, class CTag>
+struct ForEachInOrder<Reference<T>,FTag,VTag,CTag>
+{
+  typedef LeafFunctor<T,FTag> Tag_t;
+  typedef typename Tag_t::Type_t Type_t;
+
+  static Type_t apply(const Reference<T> &expr, const FTag &f,
+                     const VTag &v, const CTag &c) 
+  {
+    return Tag_t::apply(expr.reference(),f);
+  }
+};
+
+//
+// struct ForEachInOrder
+//
+// Specialization for a TBTree. This just performs the recursive
+// traversal described above.
+//
+
+template<class Op, class A, class B, class FTag, class VTag, 
+  class CTag>
+struct ForEachInOrder<BinaryNode<Op, A, B>, FTag, VTag, CTag>
+{
+  typedef ForEachInOrder<A, FTag, VTag, CTag> ForEachLeft_t;
+  typedef ForEachInOrder<B, FTag, VTag, CTag> ForEachRight_t;
+  typedef TagVisitor<Op, VTag>              Visitor_t;
+
+  typedef typename ForEachLeft_t::Type_t   TypeL_t;
+  typedef typename ForEachRight_t::Type_t  TypeR_t;
+
+  typedef Combine2<TypeL_t, TypeR_t, Op, CTag> Combiner_t;
+
+  typedef typename Combiner_t::Type_t Type_t;
+
+  static Type_t apply(const BinaryNode<Op, A, B> &expr, const FTag &f, 
+    const VTag &v, const CTag &c) 
+  {
+    Visitor_t::start(expr.operation(),v);
+
+    TypeL_t left_val  = ForEachLeft_t::apply(expr.left(), f, v, c);
+
+    Visitor_t::visit(expr.operation(),v);
+
+    TypeR_t right_val = ForEachRight_t::apply(expr.right(), f, v, c);
+
+    Type_t val = Combiner_t::combine(left_val, right_val, expr.operation(), c);
+        
+    Visitor_t::finish(expr.operation(),v);
+
+    return val;
+  }
+};
+
+
+//
+// Specializations of Combine2 for NullTag()
+// (seems like something like this should be in ForEach.h)
+//
+
+struct NullTag {};
+
+template<class A,class B,class Op>
+struct Combine2<A, B, Op, NullTag>
+{
+  typedef int Type_t;
+  static Type_t combine(A, B, Op, NullTag)
+    { return 0; }
+};
+
+#endif  // PETE_PETE_FOREACHINORDER_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: ForEachInOrder.h,v $   $Author: swhaney $
+// $Revision: 1.6 $   $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/README 
b/tools/pete-2.1.1/examples/TArray/README
new file mode 100644
index 0000000..4f1174a
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/README
@@ -0,0 +1,19 @@
+/*******************************************************************
+ *                                                                 *
+ *                          TArray example                         *
+ *                                                                 *
+ *******************************************************************/
+
+This somewhat complicated example demonstrates some of the inner
+workings of PETE, by printing an expression in the order that it
+appears in the source code.
+
+PETE evaluates expressions by evaluating the leaves, and then
+combining the results.  If you were to print out the leaf values
+in LeafFunctor, and the operators during the combine operation,
+then an expression like a+b*c would get printed in postfix notation:
+a, b, c, *, +.  To print elements in order, this example defines
+a ForEachInOrder struct that generalizes PETE's ForEach.
+ForEachInOrder allows for extra operations to be performed
+between evaluation of the sub-trees and before and after.
+(See the file ForEachInOrder.h.)
diff --git a/tools/pete-2.1.1/examples/TArray/TArray.cpp 
b/tools/pete-2.1.1/examples/TArray/TArray.cpp
new file mode 100644
index 0000000..26e6898
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArray.cpp
@@ -0,0 +1,64 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "TArray.h"
+
+int main()
+{
+  TArray a(3,1,2);
+
+  TArray b;
+
+  cout << a << endl;
+  cout << b << endl;
+
+  b[0] = 7; b[1] = 33; b[2] = -99;
+
+  TArray c(a);
+
+  cout << c << endl;
+
+  a = 0;
+
+  cout << a << endl;
+  cout << b << endl;
+  cout << c << endl;
+
+  a = b + c;
+
+  cout << a << endl;
+
+  a.printAssign(b+c*(b + 3*c));
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: TArray.cpp,v $   $Author: swhaney $
+// $Revision: 1.3 $   $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/TArray.h 
b/tools/pete-2.1.1/examples/TArray/TArray.h
new file mode 100644
index 0000000..210b53b
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArray.h
@@ -0,0 +1,394 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+//=============================================================================
+// TArray.h
+//-----------------------------------------------------------------------------
+// DESCRIPTION:
+//
+// This example serves two purposes. First, it demonstrates the
+// construction of an expression-template-aware array. Second, it 
+// demonstrates the flexibility of the ForEach type of template-metaprogram.
+//
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_TARRAY_TARRAY_H
+#define PETE_EXAMPLES_TARRAY_TARRAY_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+#include "ForEachInOrder.h"
+
+#include <iostream.h>
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+
+struct PrintTag;
+
+//-----------------------------------------------------------------------------
+//
+// CLASS NAME
+//   TArray
+//
+// DESCRIPTION
+//   A "tiny" three-element expression-template (ET) array class.
+//
+//-----------------------------------------------------------------------------
+
+class TArray
+{
+public:
+
+  //---------------------------------------------------------------------------
+  // Constructors and Destructor
+  //---------------------------------------------------------------------------
+
+  TArray()
+    {
+      data[0] = data[1] = data[2] = 0;
+    }
+
+  TArray(int i, int j, int k)
+    {
+      data[0] = i; data[1] = j; data[2] = k;
+    }
+
+  TArray(const TArray &model)
+    {
+      data[0] = model.data[0];
+      data[1] = model.data[1];
+      data[2] = model.data[2];
+    }
+
+  ~TArray() {}
+
+
+  //---------------------------------------------------------------------------
+  // TArray and scalar assigment operators
+  //---------------------------------------------------------------------------
+
+  TArray &operator=(const TArray &rhs)
+    {
+      data[0] = rhs.data[0];
+      data[1] = rhs.data[1];
+      data[2] = rhs.data[2];
+
+      return *this;
+    }
+
+  TArray &operator=(int i)
+    {
+      data[0] = data[1] = data[2] = i;
+      return *this;
+    }
+
+  //---------------------------------------------------------------------------
+  // Indexing operators
+  //---------------------------------------------------------------------------
+
+  int &operator[](int i) 
+    { return data[i]; }
+
+  int operator[](int i) const 
+    { return data[i]; }
+
+  //---------------------------------------------------------------------------
+  // Print method used by operator<< free function.
+  //---------------------------------------------------------------------------
+
+  void print(ostream &os) const
+    { 
+      os << "{" << data[0] << ", " 
+                << data[1] << ", " 
+               << data[2] << "}";
+    }
+
+  //===========================================================================
+  // PETE Requirements
+  //===========================================================================
+
+  // Assignment operator taking expression:
+
+  template <class Expr>
+  TArray &operator=(const Expr &expr)
+  {
+    typedef EvalLeaf1   FTag_t;
+    typedef OpCombine      CTag_t;
+    typedef NullCombine    VTag_t;
+
+    typedef CreateLeaf<Expr>::Leaf_t Expr_t;
+    
+    typedef ForEachInOrder<Expr_t, FTag_t, VTag_t, CTag_t> ForEach_t;
+
+    const Expr_t &e = CreateLeaf<Expr>::make(expr);
+
+    data[0] = ForEach_t::apply(e, FTag_t(0), VTag_t(), CTag_t());
+    data[1] = ForEach_t::apply(e, FTag_t(1), VTag_t(), CTag_t());
+    data[2] = ForEach_t::apply(e, FTag_t(2), VTag_t(), CTag_t());
+
+    return *this;
+  }
+
+  // printAssign method performs an assignment and the traverses the
+  // parse-tree and prints the expression to cout.
+
+  template <class Expr>
+  void printAssign(const Expr &expr)
+  {
+    typedef EvalLeaf1   FTag_t;
+    typedef OpCombine      CTag_t;
+    typedef NullCombine    VTag_t;
+    
+    typedef CreateLeaf<Expr>::Leaf_t Expr_t;
+    
+    typedef ForEachInOrder<Expr_t, FTag_t, VTag_t, CTag_t> ForEach_t;
+
+    const Expr_t &e = CreateLeaf<Expr>::make(expr);
+
+    data[0] = ForEach_t::apply(e, FTag_t(0), VTag_t(), CTag_t());
+    data[1] = ForEach_t::apply(e, FTag_t(1), VTag_t(), CTag_t());
+    data[2] = ForEach_t::apply(e, FTag_t(2), VTag_t(), CTag_t());
+
+    typedef BinaryNode<OpAssign, TArray, Expr_t> Assign_t;
+
+    typedef ForEachInOrder<Assign_t, PrintTag, PrintTag, NullTag> Print_t;
+
+    OpAssign opAssign;
+    Assign_t t(opAssign, *this, e);
+
+    Print_t::apply(t, PrintTag(cout), PrintTag(cout), NullTag());
+
+    cout << endl;
+
+  }
+
+private:
+
+  // The underlying complicated data structure
+
+  int data[3];
+
+};
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+// TArray's are containers so we want to store these by reference in the
+// expression tree.
+//-----------------------------------------------------------------------------
+
+template<>
+struct CreateLeaf<TArray>
+{
+  typedef Reference<TArray> Leaf_t;
+  inline static
+  Leaf_t make(const TArray &a) { return a; }
+};
+
+//-----------------------------------------------------------------------------
+// ostream inserter for TArrays
+//-----------------------------------------------------------------------------
+
+ostream &operator<<(ostream &os, const TArray &a)
+{
+  a.print(os);
+  return os;
+}
+
+//=============================================================================
+// Functor definitions required for evaluation loop
+//=============================================================================
+
+//
+// struct LeafFunctor<TArray, EvalLeaf1
+//
+// Specialication of LeafFunctor class for applying the EvalLeaf1
+// tag to a TArray. The apply method simply returns the array
+// evaluated at the point.
+//
+
+template<>
+struct LeafFunctor<TArray, EvalLeaf1>
+{
+  typedef int Type_t;
+  static Type_t apply(const TArray &a, const EvalLeaf1 &f)
+    { return a[f.i1_m]; }
+};
+
+
+//=============================================================================
+// Functor definitions required for "print" loop
+//=============================================================================
+
+//
+// struct PrintTag
+//
+// Tag struct to carry an ostream ref through the parse tree.
+//
+
+struct PrintTag
+{
+  mutable ostream &os_m;
+  PrintTag(ostream &os) : os_m(os) {}
+};
+
+
+//
+// struct LeafFunctor<TArray, PrintTag>
+//
+// Specialization of LeafFunctor class for applying the PrintTag tag to
+// a TArray. The apply method simply prints the result to the ostream
+// carried by PrintTag.
+//
+
+template<>
+struct LeafFunctor<TArray, PrintTag>
+{
+  typedef int Type_t;
+  static int apply(const TArray &a, const PrintTag &f)
+    { 
+      f.os_m << a; 
+      return 0;
+    }
+};
+
+//
+// struct LeafFunctor<Scalar<T>, PrintTag>
+//
+// Specialication of TagFunctor class for applying the PrintTag tag to
+// a Scalar<T>. The apply method simply prints the result to the
+// ostream carried by PrintTag.
+//
+
+template<class T>
+struct LeafFunctor<Scalar<T>, PrintTag>
+{
+  typedef int Type_t;
+  static int apply(const Scalar<T> &s, const PrintTag &f)
+    { 
+      f.os_m << s.value(); 
+      return 0;
+    }
+};
+
+
+//
+// struct ParenPrinter
+//
+// Utility class to provide start and finish functions that print the
+// open paren and closed paren for an expression as the ForEach moves
+// down and back up an edge of the parse-tree.
+//
+
+template<class Op>
+struct ParenPrinter
+{
+  static void start(Op,PrintTag) {};
+
+  static void finish(Op,PrintTag) {};
+};
+
+
+// Only need to parenthesize assignment
+
+template<>
+struct ParenPrinter<OpAdd>
+{
+  static void start(OpAdd,PrintTag p)
+    { p.os_m << "("; }
+
+  static void finish(OpAdd,PrintTag p)
+    { p.os_m << ")"; }
+};
+
+//
+// struct TagVisitor<OpAdd, PrintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpAdd nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpAdd, PrintTag> : public ParenPrinter<OpAdd>
+{ 
+  static void visit(OpAdd op, PrintTag t) 
+    {
+      t.os_m << " + ";
+    }
+};
+
+//
+// struct TagVisitor<OpMultiply, rintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpMultiply nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpMultiply, PrintTag> : public ParenPrinter<OpMultiply>
+{ 
+  static void visit(OpMultiply op, PrintTag t) 
+    {
+      t.os_m << " * ";
+    }
+};
+
+//
+// struct TagVisitor<OpAssign, PrintTag>
+//
+// Specialication of TagVisitor class for applying the PrintTag
+// tag to OpAssign nodes. The visit method simply prints a symbol
+// to the ostream carried by PrintTag.
+//
+
+template <>
+struct TagVisitor<OpAssign, PrintTag> : public ParenPrinter<OpAssign>
+{ 
+  static void visit(OpAssign op, PrintTag t) 
+    {
+      t.os_m << " = ";
+    }
+};
+
+#include "TArrayOperators.h"
+
+#endif // PETE_EXAMPLES_TARRAY_TARRAY_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: TArray.h,v $   $Author: swhaney $
+// $Revision: 1.12 $   $Date: 2000/01/04 01:29:43 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/TArray/TArrayDefs.in 
b/tools/pete-2.1.1/examples/TArray/TArrayDefs.in
new file mode 100644
index 0000000..c3a43b6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArrayDefs.in
@@ -0,0 +1,4 @@
+classes
+-----
+  ARG   = ""
+  CLASS = "TArray"
diff --git a/tools/pete-2.1.1/examples/TArray/TArrayOperators.h 
b/tools/pete-2.1.1/examples/TArray/TArrayOperators.h
new file mode 100644
index 0000000..3a2431d
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/TArrayOperators.h
@@ -0,0 +1,2964 @@
+#ifndef TARRAYOPS_H
+#define TARRAYOPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// TArrayDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+inline MakeReturn<UnaryNode<FnArcCos,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+acos(const TArray & l)
+{
+  typedef UnaryNode<FnArcCos,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcSin,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+asin(const TArray & l)
+{
+  typedef UnaryNode<FnArcSin,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcTan,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan(const TArray & l)
+{
+  typedef UnaryNode<FnArcTan,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCeil,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ceil(const TArray & l)
+{
+  typedef UnaryNode<FnCeil,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCos,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+cos(const TArray & l)
+{
+  typedef UnaryNode<FnCos,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypCos,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+cosh(const TArray & l)
+{
+  typedef UnaryNode<FnHypCos,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnExp,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+exp(const TArray & l)
+{
+  typedef UnaryNode<FnExp,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFabs,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fabs(const TArray & l)
+{
+  typedef UnaryNode<FnFabs,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFloor,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+floor(const TArray & l)
+{
+  typedef UnaryNode<FnFloor,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+log(const TArray & l)
+{
+  typedef UnaryNode<FnLog,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog10,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+log10(const TArray & l)
+{
+  typedef UnaryNode<FnLog10,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSin,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sin(const TArray & l)
+{
+  typedef UnaryNode<FnSin,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypSin,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sinh(const TArray & l)
+{
+  typedef UnaryNode<FnHypSin,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSqrt,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+sqrt(const TArray & l)
+{
+  typedef UnaryNode<FnSqrt,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnTan,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+tan(const TArray & l)
+{
+  typedef UnaryNode<FnTan,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypTan,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+tanh(const TArray & l)
+{
+  typedef UnaryNode<FnHypTan,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryMinus,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const TArray & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryPlus,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const TArray & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpBitwiseNot,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator~(const TArray & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpIdentity,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+PETE_identity(const TArray & l)
+{
+  typedef UnaryNode<OpIdentity,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpNot,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!(const TArray & l)
+{
+  typedef UnaryNode<OpNot,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+peteCast(const T1&, const TArray & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l)));
+}
+
+inline MakeReturn<BinaryNode<OpAdd,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpAdd,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpSubtract,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpSubtract,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMultiply,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpMultiply,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpDivide,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpDivide,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMod,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpMod,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseAnd,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseOr,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseXor,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnLdexp,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<FnLdexp,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnPow,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<FnPow,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnFmod,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<FnFmod,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnArcTan2,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLT,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpLT,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLE,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpLE,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGT,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpGT,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGE,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpGE,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpEQ,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpEQ,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpNE,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpNE,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpAnd,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpAnd,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpOr,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpOr,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLeftShift,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpRightShift,
+  CreateLeaf<TArray >::Leaf_t,
+  CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const TArray & r)
+{
+  typedef BinaryNode<OpRightShift,
+    CreateLeaf<TArray >::Leaf_t,
+    CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const TArray & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const TArray & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+pow(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<TArray >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const TArray & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<TArray >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<TArray >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<TArray >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const TArray & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<TArray >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<TArray >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+#endif // TARRAYOPS_H
+
diff --git a/tools/pete-2.1.1/examples/TArray/makefile 
b/tools/pete-2.1.1/examples/TArray/makefile
new file mode 100644
index 0000000..d6ff6d6
--- /dev/null
+++ b/tools/pete-2.1.1/examples/TArray/makefile
@@ -0,0 +1,58 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: TArray
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes TArrayDefs.in \
+       --guard TARRAYOPS_H > TArrayOperators.h
+
+TArray: TArray.cpp TArray.h TArrayOperators.h
+       $(CXX) -o TArray $(CXXINC) $(CXXOPTARG) TArray.cpp 
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -rf TArray ii_files ti_files
+
+run: TArray
+       TArray
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.6 $   $Date: 2000/01/04 01:29:44 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/README 
b/tools/pete-2.1.1/examples/Vec3/README
new file mode 100644
index 0000000..669fddb
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/README
@@ -0,0 +1,15 @@
+/*******************************************************************
+ *                                                                 *
+ *                           Vec3 example                          *
+ *                                                                 *
+ *******************************************************************/
+
+This example illustrates the addition of expression template
+capabilities to a user-defined class.
+See the tutorial in html/tut-1.html for a description of this example.
+
+Vec3.h defines a simple vector class that contains 3 elements.
+Unlike the STL example in examples/Vector, we can add an assignment
+operator to this class that recognizes PETE expressions.  Therefore
+this example doesn't tell the MakeOperators tool to generate
+assignment operators that would call the evaluate() function.
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3.cpp 
b/tools/pete-2.1.1/examples/Vec3/Vec3.cpp
new file mode 100644
index 0000000..f1358b7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3.cpp
@@ -0,0 +1,72 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "Vec3.h"
+
+int main()
+{
+  Vec3 a, b, c;
+
+  c = 4;
+
+  b[0] = -1;
+  b[1] = -2;
+  b[2] = -3;
+
+  a = b + c;
+
+  cout << a << endl;
+
+  Vec3 d;
+  const Expression<BinaryNode<OpAdd,
+    Reference<Vec3>, Reference<Vec3> > > &expr1 = b + c;
+  d = expr1;
+  cout << d << endl;
+  
+  int num = forEach(expr1, CountLeaf(), SumCombine());
+  cout << num << endl;
+
+  const Expression<BinaryNode<OpAdd, Reference<Vec3>, 
+    BinaryNode<OpMultiply, Scalar<int>,
+    Reference<Vec3> > > > &expr2 = b + 3 * c;
+  num = forEach(expr2, CountLeaf(), SumCombine());
+  cout << num << endl;
+  
+  const Expression<BinaryNode<OpAdd, Reference<Vec3>, 
+    BinaryNode<OpMultiply, Reference<Vec3>,
+    Reference<Vec3> > > > &expr3 = b + c * d;
+  num = forEach(expr3, CountLeaf(), SumCombine());
+  cout << num << endl;
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vec3.cpp,v $   $Author: swhaney $
+// $Revision: 1.8 $   $Date: 2000/01/04 01:40:16 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3.h 
b/tools/pete-2.1.1/examples/Vec3/Vec3.h
new file mode 100644
index 0000000..31c3d67
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3.h
@@ -0,0 +1,214 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+//=============================================================================
+// Vec3.h
+//-----------------------------------------------------------------------------
+// DESCRIPTION:
+//
+// This example serves two purposes. First, it demonstrates the
+// construction of an expression-template-aware array class. Second, it 
+// demonstrates the flexibility of the ForEach type of template-metaprogram.
+//
+//=============================================================================
+
+#ifndef PETE_EXAMPLES_VEC3_VEC3_H
+#define PETE_EXAMPLES_VEC3_VEC3_H
+
+//-----------------------------------------------------------------------------
+// Include files
+//-----------------------------------------------------------------------------
+
+#include "PETE/PETE.h"
+
+#include <iostream.h>
+
+//-----------------------------------------------------------------------------
+//
+// CLASS NAME 
+//   Vec3
+//
+// DESCRIPTION
+//   A "tiny" three-element expression-template (ET) array class. 
+//
+//-----------------------------------------------------------------------------
+
+class Vec3
+{
+public:
+
+  //---------------------------------------------------------------------------
+  // Constructors and Destructor
+  //---------------------------------------------------------------------------
+
+  Vec3() { d[0] = d[1] = d[2] = 0; }
+
+  Vec3(int i, int j, int k) 
+  {
+    d[0] = i; d[1] = j; d[2] = k;
+  }
+
+  Vec3(const Vec3 &v) 
+  {
+    d[0] = v.d[0];  d[1] = v.d[1];  d[2] = v.d[2];
+  }
+
+  ~Vec3() {}
+
+
+  //---------------------------------------------------------------------------
+  // Vec3 and scalar assigment operators
+  //---------------------------------------------------------------------------
+
+  Vec3 &operator=(const Vec3 &v) 
+  {
+    d[0] = v.d[0];  d[1] = v.d[1];  d[2] = v.d[2];
+    return *this;
+  }
+
+  Vec3 &operator=(int i) 
+  {
+    d[0] = d[1] = d[2] = i;
+    return *this;
+  }
+
+  //---------------------------------------------------------------------------
+  // Assignment operator taking expression:
+  //---------------------------------------------------------------------------
+
+  template<class RHS>
+  Vec3 &operator=(const Expression<RHS> &rhs)
+  {
+    d[0] = forEach(rhs, EvalLeaf1(0), OpCombine());
+    d[1] = forEach(rhs, EvalLeaf1(1), OpCombine());
+    d[2] = forEach(rhs, EvalLeaf1(2), OpCombine());
+
+    return *this;
+  }
+
+  //---------------------------------------------------------------------------
+  // Indexing operators
+  //---------------------------------------------------------------------------
+
+  int &operator[](int i)      { return d[i]; }
+  int operator[](int i) const { return d[i]; }
+
+  //---------------------------------------------------------------------------
+  // Print method used by operator<< free function.
+  //---------------------------------------------------------------------------
+
+  void print(ostream &os) const 
+  { 
+    os << "{" << d[0] << "," << d[1] << "," << d[2] << "}";
+  }
+
+private:
+
+  // The underlying complicated data structure
+
+  int d[3];
+
+};
+
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<>
+struct CreateLeaf<Vec3>
+{
+  typedef Reference<Vec3> Leaf_t;
+  inline static
+  Leaf_t make(const Vec3 &a) { return Leaf_t(a); }
+};
+
+//-----------------------------------------------------------------------------
+// ostream inserter for Vec3s
+//-----------------------------------------------------------------------------
+
+ostream &operator<<(ostream &os, const Vec3 &a)
+{
+  a.print(os);
+  return os;
+}
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the EvalLeaf1
+// tag to a Vec3. The apply method simply returns the array
+// evaluated at the point.
+//-----------------------------------------------------------------------------
+
+template<>
+struct LeafFunctor<Vec3, EvalLeaf1>
+{
+  typedef int Type_t;
+  static Type_t apply(const Vec3 &a, const EvalLeaf1 &f)
+    { return a[f.val1()]; }
+};
+
+//-----------------------------------------------------------------------------
+// Specialization of LeafFunctor class for applying the CountLeaf
+// tag to a Vec3. The apply method simply returns 1 for a Vec3 and 0 for
+// anything else.
+//-----------------------------------------------------------------------------
+
+struct CountLeaf { };
+
+template<>
+struct LeafFunctor<Vec3, CountLeaf>
+{
+  typedef int Type_t;
+  static Type_t apply(const Vec3 &, const CountLeaf &)
+    { return 1; }
+};
+
+template<class T>
+struct LeafFunctor<T, CountLeaf>
+{
+  typedef int Type_t;
+  static Type_t apply(const T &a, const CountLeaf &)
+    { return 0; }
+};
+
+// We put this include at the end because
+// the operators can't be defined until after Vec3 and
+// CreateLeaf<Vec3> have been defined.
+// (Since Vec3 isn't templated the operators aren't just
+// templates.)
+
+#include "Vec3Operators.h"
+
+#endif // PETE_EXAMPLES_VEC3_VEC3_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vec3.h,v $   $Author: swhaney $
+// $Revision: 1.11 $   $Date: 2000/01/04 01:40:16 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in 
b/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in
new file mode 100644
index 0000000..ca64eb4
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3Defs.in
@@ -0,0 +1,4 @@
+classes
+-----
+  ARG   = ""
+  CLASS = "Vec3"
diff --git a/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h 
b/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h
new file mode 100644
index 0000000..54ceb9e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/Vec3Operators.h
@@ -0,0 +1,2964 @@
+#ifndef VEC3OPS_H
+#define VEC3OPS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// Vec3Defs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+inline MakeReturn<UnaryNode<FnArcCos,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+acos(const Vec3 & l)
+{
+  typedef UnaryNode<FnArcCos,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcSin,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+asin(const Vec3 & l)
+{
+  typedef UnaryNode<FnArcSin,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnArcTan,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan(const Vec3 & l)
+{
+  typedef UnaryNode<FnArcTan,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCeil,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ceil(const Vec3 & l)
+{
+  typedef UnaryNode<FnCeil,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnCos,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+cos(const Vec3 & l)
+{
+  typedef UnaryNode<FnCos,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypCos,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+cosh(const Vec3 & l)
+{
+  typedef UnaryNode<FnHypCos,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnExp,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+exp(const Vec3 & l)
+{
+  typedef UnaryNode<FnExp,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFabs,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fabs(const Vec3 & l)
+{
+  typedef UnaryNode<FnFabs,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnFloor,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+floor(const Vec3 & l)
+{
+  typedef UnaryNode<FnFloor,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+log(const Vec3 & l)
+{
+  typedef UnaryNode<FnLog,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnLog10,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+log10(const Vec3 & l)
+{
+  typedef UnaryNode<FnLog10,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSin,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sin(const Vec3 & l)
+{
+  typedef UnaryNode<FnSin,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypSin,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sinh(const Vec3 & l)
+{
+  typedef UnaryNode<FnHypSin,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnSqrt,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+sqrt(const Vec3 & l)
+{
+  typedef UnaryNode<FnSqrt,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnTan,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+tan(const Vec3 & l)
+{
+  typedef UnaryNode<FnTan,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<FnHypTan,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+tanh(const Vec3 & l)
+{
+  typedef UnaryNode<FnHypTan,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryMinus,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpUnaryPlus,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpBitwiseNot,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator~(const Vec3 & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpIdentity,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+PETE_identity(const Vec3 & l)
+{
+  typedef UnaryNode<OpIdentity,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<UnaryNode<OpNot,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!(const Vec3 & l)
+{
+  typedef UnaryNode<OpNot,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Vec3 & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l)));
+}
+
+inline MakeReturn<BinaryNode<OpAdd,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAdd,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpSubtract,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMultiply,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpDivide,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpDivide,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpMod,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMod,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseAnd,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseOr,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpBitwiseXor,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnLdexp,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnPow,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnPow,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnFmod,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnFmod,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<FnArcTan2,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLT,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLT,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLE,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLE,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGT,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGT,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpGE,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGE,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpEQ,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpEQ,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpNE,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpNE,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpAnd,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAnd,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpOr,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpOr,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpLeftShift,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+inline MakeReturn<BinaryNode<OpRightShift,
+  CreateLeaf<Vec3 >::Leaf_t,
+  CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    CreateLeaf<Vec3 >::Leaf_t,
+    CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Vec3 & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+
+template<class T1>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Vec3 >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Vec3 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Vec3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Vec3 >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Vec3 >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Vec3 & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Vec3 >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Vec3 >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+#endif // VEC3OPS_H
+
diff --git a/tools/pete-2.1.1/examples/Vec3/makefile 
b/tools/pete-2.1.1/examples/Vec3/makefile
new file mode 100644
index 0000000..7d74808
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vec3/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Vec3
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes Vec3Defs.in \
+       --guard VEC3OPS_H > Vec3Operators.h
+
+Vec3: Vec3.cpp Vec3.h Vec3Operators.h
+       $(CXX) -o Vec3 $(CXXINC) $(CXXOPTARG) Vec3.cpp 
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -f Vec3
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Vec3
+       Vec3
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.6 $   $Date: 2000/01/04 01:40:17 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/Eval.h 
b/tools/pete-2.1.1/examples/Vector/Eval.h
new file mode 100644
index 0000000..fe022f7
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Eval.h
@@ -0,0 +1,165 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#ifndef PETE_EXAMPLES_VECTOR_EVAL_H
+#define PETE_EXAMPLES_VECTOR_EVAL_H
+
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+
+#include <iostream.h>
+#include <vector.h>
+#include "PETE/PETE.h"
+#include "VectorOperators.h"
+
+//-----------------------------------------------------------------------------
+// This file contains several class definitions that are used to evaluate
+// expressions containing STL vectors.  The main function defined at the end
+// is evaluate(lhs,op,rhs), which allows the syntax:
+// vector<int> a,b,c;
+// evaluate(a,OpAssign(),b+c);
+//
+// evaluate() is called by all the global assignment operator functions
+// defined in VectorOperators.h
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// We need to specialize CreateLeaf<T> for our class, so that operators
+// know what to stick in the leaves of the expression tree.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct CreateLeaf<vector<T, Allocator> >
+{
+  typedef Reference<vector<T> > Leaf_t;
+  inline static
+  Leaf_t make(const vector<T, Allocator> &a) { return Leaf_t(a); }
+};
+
+//-----------------------------------------------------------------------------
+// We need to write a functor that is capable of comparing the size of
+// the vector with a stored value. Then, we supply LeafFunctor specializations
+// for Scalar<T> and STL vector leaves.
+//-----------------------------------------------------------------------------
+
+class SizeLeaf
+{
+public:
+
+  SizeLeaf(int s) : size_m(s) { }
+  SizeLeaf(const SizeLeaf &model) : size_m(model.size_m) { }
+  bool operator()(int s) const { return size_m == s; }
+  
+private:
+  
+  int size_m;
+  
+};
+
+template<class T>
+struct LeafFunctor<Scalar<T>, SizeLeaf>
+{
+  typedef bool Type_t;
+  inline static
+  bool apply(const Scalar<T> &, const SizeLeaf &) 
+  {
+    // Scalars always conform.
+    
+    return true;
+  }
+};
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>, SizeLeaf>
+{
+  typedef bool Type_t;
+  inline static
+  bool apply(const vector<T, Allocator> &v, const SizeLeaf &s) 
+  {
+    return s(v.size());
+  }
+};
+
+//-----------------------------------------------------------------------------
+// EvalLeaf1 is used to evaluate expression with vectors.
+// (It's already defined for Scalar values.)
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator>
+struct LeafFunctor<vector<T, Allocator>,EvalLeaf1>
+{
+  typedef T Type_t;
+  inline static
+  Type_t apply(const vector<T, Allocator>& vec,const EvalLeaf1 &f)
+  {
+    return vec[f.val1()];
+  }
+};
+
+//-----------------------------------------------------------------------------
+// Loop over vector and evaluate the expression at each location.
+//-----------------------------------------------------------------------------
+
+template<class T, class Allocator, class Op, class RHS>
+inline void evaluate(vector<T, Allocator> &lhs, const Op &op, 
+  const Expression<RHS> &rhs)
+{
+  if (forEach(rhs, SizeLeaf(lhs.size()), AndCombine()))
+    {
+      // We get here if the vectors on the RHS are the same size as those on
+      // the LHS.
+      
+      for (int i = 0; i < lhs.size(); ++i)
+        {
+          // The actual assignment operation is performed here.
+          // PETE operator tags all define operator() to perform the operation.
+          // (In this case op performs an assignment.) forEach is used 
+          // to compute the rhs value.  EvalLeaf1 gets the
+          // values at each node using random access, and the tag 
+          // OpCombine tells forEach to use the operator tags in the 
expression 
+          // to combine values together.
+
+          op(lhs[i], forEach(rhs, EvalLeaf1(i), OpCombine()));
+        }
+    }
+  else
+    {
+      cerr << "Error: LHS and RHS don't conform." << endl;
+      exit(1);
+    }
+}
+
+#endif // PETE_EXAMPLES_VECTOR_EVAL_H
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Eval.h,v $   $Author: swhaney $
+// $Revision: 1.11 $   $Date: 2000/01/04 01:39:17 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/Makefile.user 
b/tools/pete-2.1.1/examples/Vector/Makefile.user
new file mode 100644
index 0000000..8aa65e3
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Makefile.user
@@ -0,0 +1,62 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEDIR
+PETEDIR = /home/pete/build/pete-2.0
+endif
+ifndef PETEARCHDIR
+PETEARCHDIR = sgi64
+endif
+CXXINC = -I$(PETEDIR)/src
+MAKEEXPR = $(PETEDIR)/$(PETEARCHDIR)/bin/MakeOperators
+
+CXX = KCC
+CXXARG = 
+
+default: Vector
+
+operators: VectorDefs.in
+       $(MAKEEXPR) --classes VectorDefs.in --assign-ops \
+       --o VectorOperators.h
+
+Vector: Vector.cpp Eval.h VectorOperators.h
+       $(CXX) -o Vector $(CXXINC) $(CXXARG) Vector.cpp 
+
+clean:
+       rm -f Vector
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Vector
+       Vector
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: Makefile.user,v $   $Author: swhaney $
+#  $Revision: 1.5 $   $Date: 2000/01/04 01:39:17 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/README 
b/tools/pete-2.1.1/examples/Vector/README
new file mode 100644
index 0000000..c80d1a9
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/README
@@ -0,0 +1,39 @@
+/*******************************************************************
+ *                                                                 *
+ *                       STL vector example                        *
+ *                                                                 *
+ *******************************************************************/
+                            
+This example illustrates how simple it is to use PETE with a
+Standard Template Library (STL) container class. See the tutorial in
+html/tut-2.html for a description of this example.
+
+The four-line input file VectorDefs.in describes the STL vector class
+to the MakeOperators tool which automatically produces the 249
+operator definitions in VectorOperators.h.  (Type 'make operators'
+to rebuild VectorOperators.h.)  Including these operators in your
+code will cause arbitrary mathematical expressions involving STL
+vectors, such as a+b*sin(2+c)/d, to return expression template objects.
+
+The file Eval.h contains the components necessary to efficiently
+evaluate the resulting expression template objects.  It defines
+a CreateLeaf functor that tells PETE to store references to the
+vectors in the expression tree (to avoid unnecessary copies),
+a SizeLeaf functor that is used to check that the vectors conform,
+and an evaluate() function that will be called by the PETE global
+assignment operators, like assign(), operator+= etc.
+
+By including Eval.h, and VectorOperators.h, you can write
+high-level data-parallel code like:
+
+std::vector<double> a(100),b(100),c(100);
+...
+a = b+2*sin(c-4.0);
+
+which will be implemented by an efficient loop that involves
+no temporary arrays:
+
+for (i=0;i<a.size();++i)
+{
+  a[i] = b[i]+2*sin(c[i]-4.0);
+}
diff --git a/tools/pete-2.1.1/examples/Vector/Vector.cpp 
b/tools/pete-2.1.1/examples/Vector/Vector.cpp
new file mode 100644
index 0000000..7dc2c2f
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/Vector.cpp
@@ -0,0 +1,69 @@
+// -*- C++ -*-
+// ACL:license
+// ----------------------------------------------------------------------
+// This software and ancillary information (herein called "SOFTWARE")
+// called PETE (Portable Expression Template Engine) is
+// made available under the terms described here.  The SOFTWARE has been
+// approved for release with associated LA-CC Number LA-CC-99-5.
+// 
+// Unless otherwise indicated, this SOFTWARE has been authored by an
+// employee or employees of the University of California, operator of the
+// Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+// the U.S. Department of Energy.  The U.S. Government has rights to use,
+// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+// prepare derivative works and publicly display this SOFTWARE without 
+// charge, provided that this Notice and any statement of authorship are 
+// reproduced on all copies.  Neither the Government nor the University 
+// makes any warranty, express or implied, or assumes any liability or 
+// responsibility for the use of this SOFTWARE.
+// 
+// If SOFTWARE is modified to produce derivative works, such modified
+// SOFTWARE should be clearly marked, so as not to confuse it with the
+// version available from LANL.
+// 
+// For more information about PETE, send e-mail to pete@acl.lanl.gov,
+// or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+// ----------------------------------------------------------------------
+// ACL:license
+
+#include "Eval.h"
+
+int main()
+{
+  int i;
+  const int n = 10;
+  vector<int> a,b,c,d;
+  vector<double> e(n);
+
+  for (i = 0; i < n; ++i)
+  {
+    a.push_back(i);
+    b.push_back(2*i);
+    c.push_back(3*i);
+    d.push_back(i);
+  }
+
+  assign(b, 2);
+  assign(d, a + b * c);
+  a += where(d < 30, b, c);
+
+  assign(e, c);
+  e += e - 4 / (c + 1);
+
+  for (i = 0; i < n; ++i)
+    {
+      cout << " a(" << i << ") = " << a[i]
+          << " b(" << i << ") = " << b[i]
+          << " c(" << i << ") = " << c[i]
+          << " d(" << i << ") = " << d[i]
+          << " e(" << i << ") = " << e[i]
+          << endl;
+    }
+}
+
+// ACL:rcsinfo
+// ----------------------------------------------------------------------
+// $RCSfile: Vector.cpp,v $   $Author: swhaney $
+// $Revision: 1.8 $   $Date: 2000/01/04 01:39:17 $
+// ----------------------------------------------------------------------
+// ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/Vector/VectorDefs.in 
b/tools/pete-2.1.1/examples/Vector/VectorDefs.in
new file mode 100644
index 0000000..cbda646
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/VectorDefs.in
@@ -0,0 +1,4 @@
+classes
+-----
+  ARG   = "class T[n]"
+  CLASS = "vector<T[n]>"
diff --git a/tools/pete-2.1.1/examples/Vector/VectorOperators.h 
b/tools/pete-2.1.1/examples/Vector/VectorOperators.h
new file mode 100644
index 0000000..fd2f839
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/VectorOperators.h
@@ -0,0 +1,3106 @@
+#ifndef GENERATED_OPERATORS_H
+#define GENERATED_OPERATORS_H
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
+// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
+//
+// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
+//
+// MakeOperators
+// VectorDefs.in
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+acos(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+asin(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+atan(const vector<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+ceil(const vector<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cos(const vector<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+cosh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+exp(const vector<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+fabs(const vector<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+floor(const vector<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log(const vector<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+log10(const vector<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sin(const vector<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sinh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+sqrt(const vector<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tan(const vector<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+tanh(const vector<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator~(const vector<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const vector<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<vector<T1> >::Leaf_t> >::Expression_t
+operator!(const vector<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<vector<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const vector<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const vector<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<vector<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const vector<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<vector<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<vector<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<vector<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const vector<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<vector<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<vector<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#ifndef PETE_EXPRESSION_OPERATORS
+#define PETE_EXPRESSION_OPERATORS
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+acos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+asin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnArcTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+atan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnArcTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCeil,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+ceil(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCeil,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cos(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypCos,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+cosh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypCos,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnExp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+exp(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnExp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFabs,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+fabs(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFabs,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnFloor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+floor(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnFloor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnLog10,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+log10(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnLog10,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sin(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypSin,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sinh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypSin,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnSqrt,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+sqrt(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnSqrt,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tan(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<FnHypTan,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+tanh(const Expression<T1> & l)
+{
+  typedef UnaryNode<FnHypTan,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryMinus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryMinus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpUnaryPlus,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpUnaryPlus,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpBitwiseNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator~(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpBitwiseNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpIdentity,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+PETE_identity(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpIdentity,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1>
+inline typename MakeReturn<UnaryNode<OpNot,
+  typename CreateLeaf<Expression<T1> >::Leaf_t> >::Expression_t
+operator!(const Expression<T1> & l)
+{
+  typedef UnaryNode<OpNot,
+    typename CreateLeaf<Expression<T1> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<UnaryNode<OpCast<T1>,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+peteCast(const T1&, const Expression<T2> & l)
+{
+  typedef UnaryNode<OpCast<T1>,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T2> >::make(l)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator+(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator-(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator*(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator/(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator%(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator|(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator^(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+ldexp(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+pow(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+fmod(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+atan2(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator==(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator!=(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator&&(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator||(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator<<(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t> >::Expression_t
+operator>>(const Expression<T1> & l,const T2 & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(l),
+    CreateLeaf<T2 >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAdd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator+(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAdd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpSubtract,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator-(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpSubtract,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMultiply,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator*(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMultiply,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpDivide,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator/(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpDivide,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpMod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator%(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpMod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator|(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpBitwiseXor,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator^(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpBitwiseXor,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnLdexp,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+ldexp(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnLdexp,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnPow,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+pow(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnPow,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnFmod,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+fmod(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnFmod,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<FnArcTan2,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+atan2(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<FnArcTan2,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGT,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGT,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpGE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpGE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpEQ,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator==(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpEQ,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpNE,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator!=(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpNE,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpAnd,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator&&(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpAnd,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpOr,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator||(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpOr,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#ifdef PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpLeftShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator<<(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpLeftShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+
+template<class T1,class T2>
+inline typename MakeReturn<BinaryNode<OpRightShift,
+  typename CreateLeaf<T1 >::Leaf_t,
+  typename CreateLeaf<Expression<T2> >::Leaf_t> >::Expression_t
+operator>>(const T1 & l,const Expression<T2> & r)
+{
+  typedef BinaryNode<OpRightShift,
+    typename CreateLeaf<T1 >::Leaf_t,
+    typename CreateLeaf<Expression<T2> >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<T1 >::make(l),
+    CreateLeaf<Expression<T2> >::make(r)));
+}
+#endif // PETE_ALLOW_SCALAR_SHIFT
+
+template<class T1,class T2,class T3>
+inline typename MakeReturn<TrinaryNode<FnWhere,
+  typename CreateLeaf<Expression<T1> >::Leaf_t,
+  typename CreateLeaf<T2 >::Leaf_t,
+  typename CreateLeaf<T3 >::Leaf_t> >::Expression_t
+where(const Expression<T1> & c,const T2 & t,const T3 & f)
+{
+  typedef TrinaryNode<FnWhere,
+    typename CreateLeaf<Expression<T1> >::Leaf_t,
+    typename CreateLeaf<T2 >::Leaf_t,
+    typename CreateLeaf<T3 >::Leaf_t> Tree_t;
+  return MakeReturn<Tree_t>::make(Tree_t(
+    CreateLeaf<Expression<T1> >::make(c),
+    CreateLeaf<T2 >::make(t),
+    CreateLeaf<T3 >::make(f)));
+}
+#endif  // PETE_EXPRESSION_OPERATORS
+
+template<class T1,class RHS>
+inline
+vector<T1>& assign(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator+=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpAddAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator-=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpSubtractAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator*=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpMultiplyAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator/=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpDivideAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator%=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpModAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator|=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseOrAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator&=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseAndAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator^=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpBitwiseXorAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator<<=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpLeftShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+template<class T1,class RHS>
+inline
+vector<T1>& operator>>=(vector<T1>& lhs,const RHS& rhs)
+{
+  typedef typename CreateLeaf<RHS>::Leaf_t Leaf_t;
+  
evaluate(lhs,OpRightShiftAssign(),MakeReturn<Leaf_t>::make(CreateLeaf<RHS>::make(rhs)));
+  return lhs;
+}
+
+#endif // GENERATED_OPERATORS_H
+
diff --git a/tools/pete-2.1.1/examples/Vector/makefile 
b/tools/pete-2.1.1/examples/Vector/makefile
new file mode 100644
index 0000000..e8d4638
--- /dev/null
+++ b/tools/pete-2.1.1/examples/Vector/makefile
@@ -0,0 +1,60 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE. The public may copy, distribute,
+#  prepare derivative works and publicly display this SOFTWARE without 
+#  charge, provided that this Notice and any statement of authorship are 
+#  reproduced on all copies.  Neither the Government nor the University 
+#  makes any warranty, express or implied, or assumes any liability or 
+#  responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ../..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default: Vector
+
+operators: $(MAKEEXPR)
+       $(MAKEEXPR) --classes VectorDefs.in --assign-ops \
+       > VectorOperators.h
+
+Vector: Vector.cpp Eval.h VectorOperators.h
+       $(CXX) -o Vector $(CXXINC) $(CXXOPTARG) Vector.cpp 
+
+$(MAKEEXPR):
+       make -C$(PROJECTROOT) tools
+
+clean:
+       rm -f Vector
+       rm -rf ti_files
+       rm -rf ii_files
+
+run: Vector
+       Vector
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: swhaney $
+#  $Revision: 1.11 $   $Date: 2000/01/04 01:39:18 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/examples/makefile 
b/tools/pete-2.1.1/examples/makefile
new file mode 100644
index 0000000..2c58e2e
--- /dev/null
+++ b/tools/pete-2.1.1/examples/makefile
@@ -0,0 +1,72 @@
+# ACL:license
+#  ----------------------------------------------------------------------
+#  This software and ancillary information (herein called "SOFTWARE")
+#  called PETE (Portable Expression Template Engine) is
+#  made available under the terms described here.  The SOFTWARE has been
+#  approved for release with associated LA-CC Number LA-CC-99-5.
+#  
+#  Unless otherwise indicated, this SOFTWARE has been authored by an
+#  employee or employees of the University of California, operator of the
+#  Los Alamos National Laboratory under Contract No.  W-7405-ENG-36 with
+#  the U.S. Department of Energy.  The U.S. Government has rights to use,
+#  reproduce, and distribute this SOFTWARE, and to allow others to do so.
+#  The public may copy and use this SOFTWARE, FOR NONCOMMERCIAL USE ONLY,
+#  without charge, provided that this Notice and any statement of
+#  authorship are reproduced on all copies.  Neither the Government nor
+#  the University makes any warranty, express or implied, or assumes any
+#  liability or responsibility for the use of this SOFTWARE.
+#  
+#  If SOFTWARE is modified to produce derivative works, such modified
+#  SOFTWARE should be clearly marked, so as not to confuse it with the
+#  version available from LANL.
+#  
+#  For more information about PETE, send e-mail to pete@acl.lanl.gov,
+#  or visit the PETE web page at http://www.acl.lanl.gov/pete/.
+#  ----------------------------------------------------------------------
+# ACL:license
+
+ifndef PETEARCH
+PETEARCH = SGI64KCC
+endif
+
+PROJECTROOT = $(shell cd ..; pwd)
+include $(PROJECTROOT)/config/$(PETEARCH)
+
+default:
+       make -CRGB
+       make -CTArray
+       make -CVec3
+       make -CVector
+       make -CMixed
+       make -CDDJ
+
+operators:
+       make -CRGB operators
+       make -CTArray operators
+       make -CVec3 operators
+       make -CVector operators
+       make -CMixed operators
+       make -CDDJ operators
+
+run:
+       make -CRGB run
+       make -CTArray run
+       make -CVec3 run
+       make -CVector run
+       make -CMixed run
+       make -CDDJ run
+
+clean:
+       make -CRGB clean
+       make -CTArray clean
+       make -CVec3 clean
+       make -CVector clean
+       make -CMixed clean
+       make -CDDJ clean
+
+# ACL:rcsinfo
+#  ----------------------------------------------------------------------
+#  $RCSfile: makefile,v $   $Author: sa_smith $
+#  $Revision: 1.6 $   $Date: 1999/02/03 21:54:07 $
+#  ----------------------------------------------------------------------
+# ACL:rcsinfo
diff --git a/tools/pete-2.1.1/html/PETETutorials.pdf 
b/tools/pete-2.1.1/html/PETETutorials.pdf
new file mode 100644
index 0000000..b951801
--- /dev/null
+++ b/tools/pete-2.1.1/html/PETETutorials.pdf
@@ -0,0 +1,2163 @@
+%PDF-1.3
%����
+552 0 obj
<< 
/Linearized 1 
/O 555 
/H [ 19105 1632 ] 
/L 283029 
/E 99128 
/N 51 
/T 271870 
>> 
endobj
                                                   xref
552 926 
0000000016 00000 n
+0000018873 00000 n
+0000019035 00000 n
+0000020737 00000 n
+0000021068 00000 n
+0000021152 00000 n
+0000021259 00000 n
+0000021388 00000 n
+0000021532 00000 n
+0000021701 00000 n
+0000021869 00000 n
+0000022318 00000 n
+0000022493 00000 n
+0000022720 00000 n
+0000022885 00000 n
+0000023717 00000 n
+0000023910 00000 n
+0000024360 00000 n
+0000024541 00000 n
+0000025418 00000 n
+0000025589 00000 n
+0000026547 00000 n
+0000026703 00000 n
+0000026889 00000 n
+0000027088 00000 n
+0000027150 00000 n
+0000027212 00000 n
+0000027273 00000 n
+0000027334 00000 n
+0000027395 00000 n
+0000027456 00000 n
+0000027517 00000 n
+0000027617 00000 n
+0000027677 00000 n
+0000027738 00000 n
+0000027807 00000 n
+0000027864 00000 n
+0000027921 00000 n
+0000027982 00000 n
+0000028043 00000 n
+0000028240 00000 n
+0000028835 00000 n
+0000029015 00000 n
+0000029139 00000 n
+0000029236 00000 n
+0000029306 00000 n
+0000029430 00000 n
+0000029667 00000 n
+0000029788 00000 n
+0000029912 00000 n
+0000029970 00000 n
+0000030028 00000 n
+0000030086 00000 n
+0000030144 00000 n
+0000030202 00000 n
+0000030260 00000 n
+0000030304 00000 n
+0000030348 00000 n
+0000030392 00000 n
+0000030436 00000 n
+0000030480 00000 n
+0000030524 00000 n
+0000030582 00000 n
+0000030640 00000 n
+0000030698 00000 n
+0000030756 00000 n
+0000030826 00000 n
+0000030884 00000 n
+0000030947 00000 n
+0000031010 00000 n
+0000031073 00000 n
+0000031136 00000 n
+0000031199 00000 n
+0000031262 00000 n
+0000031325 00000 n
+0000031383 00000 n
+0000031453 00000 n
+0000031511 00000 n
+0000031569 00000 n
+0000031826 00000 n
+0000031884 00000 n
+0000031948 00000 n
+0000032013 00000 n
+0000032077 00000 n
+0000032141 00000 n
+0000032205 00000 n
+0000032269 00000 n
+0000032333 00000 n
+0000032397 00000 n
+0000032462 00000 n
+0000032526 00000 n
+0000032590 00000 n
+0000032654 00000 n
+0000032718 00000 n
+0000032782 00000 n
+0000032846 00000 n
+0000032910 00000 n
+0000032973 00000 n
+0000033061 00000 n
+0000033125 00000 n
+0000033189 00000 n
+0000033253 00000 n
+0000033317 00000 n
+0000033381 00000 n
+0000033445 00000 n
+0000033509 00000 n
+0000033573 00000 n
+0000033635 00000 n
+0000033721 00000 n
+0000033778 00000 n
+0000033847 00000 n
+0000033910 00000 n
+0000033973 00000 n
+0000034036 00000 n
+0000034099 00000 n
+0000034163 00000 n
+0000034227 00000 n
+0000034291 00000 n
+0000034400 00000 n
+0000034469 00000 n
+0000034538 00000 n
+0000034607 00000 n
+0000034676 00000 n
+0000034745 00000 n
+0000034814 00000 n
+0000034883 00000 n
+0000034951 00000 n
+0000035015 00000 n
+0000035083 00000 n
+0000035147 00000 n
+0000035215 00000 n
+0000035279 00000 n
+0000035347 00000 n
+0000035411 00000 n
+0000035479 00000 n
+0000035543 00000 n
+0000035611 00000 n
+0000035675 00000 n
+0000035743 00000 n
+0000035807 00000 n
+0000035871 00000 n
+0000035929 00000 n
+0000035987 00000 n
+0000036045 00000 n
+0000036103 00000 n
+0000036161 00000 n
+0000036219 00000 n
+0000036283 00000 n
+0000036347 00000 n
+0000036411 00000 n
+0000036475 00000 n
+0000036539 00000 n
+0000036603 00000 n
+0000036673 00000 n
+0000036743 00000 n
+0000036791 00000 n
+0000036916 00000 n
+0000037020 00000 n
+0000037117 00000 n
+0000037221 00000 n
+0000037321 00000 n
+0000037431 00000 n
+0000037528 00000 n
+0000037625 00000 n
+0000037719 00000 n
+0000037814 00000 n
+0000037870 00000 n
+0000037959 00000 n
+0000038023 00000 n
+0000038087 00000 n
+0000038151 00000 n
+0000038215 00000 n
+0000038279 00000 n
+0000038343 00000 n
+0000038407 00000 n
+0000038471 00000 n
+0000038551 00000 n
+0000038595 00000 n
+0000038659 00000 n
+0000038723 00000 n
+0000038787 00000 n
+0000038852 00000 n
+0000038972 00000 n
+0000039059 00000 n
+0000039114 00000 n
+0000039200 00000 n
+0000039268 00000 n
+0000039391 00000 n
+0000039505 00000 n
+0000039582 00000 n
+0000039751 00000 n
+0000039965 00000 n
+0000040051 00000 n
+0000040165 00000 n
+0000040270 00000 n
+0000040338 00000 n
+0000040443 00000 n
+0000040639 00000 n
+0000040871 00000 n
+0000041012 00000 n
+0000041181 00000 n
+0000041468 00000 n
+0000041527 00000 n
+0000041559 00000 n
+0000041609 00000 n
+0000041695 00000 n
+0000041946 00000 n
+0000042115 00000 n
+0000042147 00000 n
+0000042179 00000 n
+0000042284 00000 n
+0000042544 00000 n
+0000042702 00000 n
+0000042832 00000 n
+0000042919 00000 n
+0000043039 00000 n
+0000043151 00000 n
+0000043263 00000 n
+0000043294 00000 n
+0000043325 00000 n
+0000043421 00000 n
+0000043508 00000 n
+0000043595 00000 n
+0000043739 00000 n
+0000043818 00000 n
+0000043905 00000 n
+0000044196 00000 n
+0000044348 00000 n
+0000044403 00000 n
+0000044499 00000 n
+0000044976 00000 n
+0000045153 00000 n
+0000045281 00000 n
+0000045345 00000 n
+0000045409 00000 n
+0000045472 00000 n
+0000045535 00000 n
+0000045598 00000 n
+0000045661 00000 n
+0000045724 00000 n
+0000045787 00000 n
+0000045850 00000 n
+0000045907 00000 n
+0000045976 00000 n
+0000046036 00000 n
+0000046093 00000 n
+0000046198 00000 n
+0000046261 00000 n
+0000046324 00000 n
+0000046387 00000 n
+0000046445 00000 n
+0000046503 00000 n
+0000046564 00000 n
+0000046628 00000 n
+0000046691 00000 n
+0000046755 00000 n
+0000046818 00000 n
+0000046882 00000 n
+0000046945 00000 n
+0000047009 00000 n
+0000047072 00000 n
+0000047136 00000 n
+0000047199 00000 n
+0000047264 00000 n
+0000047328 00000 n
+0000047393 00000 n
+0000047457 00000 n
+0000047521 00000 n
+0000047581 00000 n
+0000047641 00000 n
+0000047701 00000 n
+0000047761 00000 n
+0000047821 00000 n
+0000047881 00000 n
+0000047985 00000 n
+0000048048 00000 n
+0000048111 00000 n
+0000048178 00000 n
+0000048241 00000 n
+0000048308 00000 n
+0000048371 00000 n
+0000048438 00000 n
+0000048501 00000 n
+0000048568 00000 n
+0000048632 00000 n
+0000048700 00000 n
+0000048764 00000 n
+0000048832 00000 n
+0000048896 00000 n
+0000048964 00000 n
+0000049028 00000 n
+0000049096 00000 n
+0000049160 00000 n
+0000049228 00000 n
+0000049292 00000 n
+0000049360 00000 n
+0000049424 00000 n
+0000049492 00000 n
+0000049556 00000 n
+0000049624 00000 n
+0000049689 00000 n
+0000049753 00000 n
+0000049817 00000 n
+0000049882 00000 n
+0000049946 00000 n
+0000050010 00000 n
+0000050074 00000 n
+0000050154 00000 n
+0000050226 00000 n
+0000050295 00000 n
+0000050445 00000 n
+0000050541 00000 n
+0000050610 00000 n
+0000050679 00000 n
+0000050748 00000 n
+0000050817 00000 n
+0000050886 00000 n
+0000050955 00000 n
+0000051024 00000 n
+0000051093 00000 n
+0000051162 00000 n
+0000051231 00000 n
+0000051300 00000 n
+0000051363 00000 n
+0000051426 00000 n
+0000051530 00000 n
+0000051593 00000 n
+0000051657 00000 n
+0000051720 00000 n
+0000051784 00000 n
+0000051844 00000 n
+0000051981 00000 n
+0000052045 00000 n
+0000052109 00000 n
+0000052214 00000 n
+0000052277 00000 n
+0000052340 00000 n
+0000052403 00000 n
+0000052466 00000 n
+0000052529 00000 n
+0000052593 00000 n
+0000052657 00000 n
+0000052721 00000 n
+0000052784 00000 n
+0000052848 00000 n
+0000052911 00000 n
+0000052975 00000 n
+0000053038 00000 n
+0000053101 00000 n
+0000053165 00000 n
+0000053229 00000 n
+0000053294 00000 n
+0000053354 00000 n
+0000053458 00000 n
+0000053521 00000 n
+0000053584 00000 n
+0000053647 00000 n
+0000053710 00000 n
+0000053773 00000 n
+0000053836 00000 n
+0000053899 00000 n
+0000053956 00000 n
+0000054033 00000 n
+0000054093 00000 n
+0000054150 00000 n
+0000054207 00000 n
+0000054267 00000 n
+0000054327 00000 n
+0000054391 00000 n
+0000054455 00000 n
+0000054518 00000 n
+0000054581 00000 n
+0000054644 00000 n
+0000054707 00000 n
+0000054770 00000 n
+0000054830 00000 n
+0000055010 00000 n
+0000055074 00000 n
+0000055137 00000 n
+0000055201 00000 n
+0000055264 00000 n
+0000055327 00000 n
+0000055390 00000 n
+0000055453 00000 n
+0000055516 00000 n
+0000055573 00000 n
+0000055650 00000 n
+0000055710 00000 n
+0000055767 00000 n
+0000055824 00000 n
+0000055884 00000 n
+0000055944 00000 n
+0000056004 00000 n
+0000056109 00000 n
+0000056172 00000 n
+0000056235 00000 n
+0000056298 00000 n
+0000056361 00000 n
+0000056424 00000 n
+0000056488 00000 n
+0000056551 00000 n
+0000056615 00000 n
+0000056679 00000 n
+0000056739 00000 n
+0000056799 00000 n
+0000056904 00000 n
+0000056967 00000 n
+0000057030 00000 n
+0000057093 00000 n
+0000057156 00000 n
+0000057219 00000 n
+0000057282 00000 n
+0000057345 00000 n
+0000057408 00000 n
+0000057471 00000 n
+0000057531 00000 n
+0000057591 00000 n
+0000057651 00000 n
+0000057711 00000 n
+0000057771 00000 n
+0000057875 00000 n
+0000057938 00000 n
+0000058001 00000 n
+0000058064 00000 n
+0000058127 00000 n
+0000058190 00000 n
+0000058253 00000 n
+0000058316 00000 n
+0000058379 00000 n
+0000058442 00000 n
+0000058506 00000 n
+0000058566 00000 n
+0000058626 00000 n
+0000058686 00000 n
+0000058746 00000 n
+0000058806 00000 n
+0000058869 00000 n
+0000058932 00000 n
+0000058995 00000 n
+0000059058 00000 n
+0000059121 00000 n
+0000059184 00000 n
+0000059247 00000 n
+0000059307 00000 n
+0000059367 00000 n
+0000059427 00000 n
+0000059487 00000 n
+0000059592 00000 n
+0000059656 00000 n
+0000059720 00000 n
+0000059784 00000 n
+0000059848 00000 n
+0000059913 00000 n
+0000059977 00000 n
+0000060041 00000 n
+0000060106 00000 n
+0000060170 00000 n
+0000060236 00000 n
+0000060301 00000 n
+0000060363 00000 n
+0000060425 00000 n
+0000060486 00000 n
+0000060551 00000 n
+0000060615 00000 n
+0000060679 00000 n
+0000060744 00000 n
+0000060808 00000 n
+0000060873 00000 n
+0000060937 00000 n
+0000061002 00000 n
+0000061066 00000 n
+0000061130 00000 n
+0000061195 00000 n
+0000061260 00000 n
+0000061326 00000 n
+0000061391 00000 n
+0000061453 00000 n
+0000061515 00000 n
+0000061577 00000 n
+0000061639 00000 n
+0000061701 00000 n
+0000061766 00000 n
+0000061831 00000 n
+0000061895 00000 n
+0000061960 00000 n
+0000062024 00000 n
+0000062089 00000 n
+0000062158 00000 n
+0000062223 00000 n
+0000062292 00000 n
+0000062357 00000 n
+0000062427 00000 n
+0000062492 00000 n
+0000062557 00000 n
+0000062623 00000 n
+0000062693 00000 n
+0000062759 00000 n
+0000062829 00000 n
+0000062895 00000 n
+0000062965 00000 n
+0000063031 00000 n
+0000063101 00000 n
+0000063167 00000 n
+0000063237 00000 n
+0000063303 00000 n
+0000063368 00000 n
+0000063433 00000 n
+0000063506 00000 n
+0000063605 00000 n
+0000063678 00000 n
+0000063751 00000 n
+0000063824 00000 n
+0000063897 00000 n
+0000063970 00000 n
+0000064051 00000 n
+0000064124 00000 n
+0000064197 00000 n
+0000064379 00000 n
+0000064444 00000 n
+0000064509 00000 n
+0000064574 00000 n
+0000064639 00000 n
+0000064704 00000 n
+0000064769 00000 n
+0000064834 00000 n
+0000064898 00000 n
+0000064958 00000 n
+0000065040 00000 n
+0000065102 00000 n
+0000065162 00000 n
+0000065222 00000 n
+0000065284 00000 n
+0000065346 00000 n
+0000065408 00000 n
+0000065472 00000 n
+0000065536 00000 n
+0000065600 00000 n
+0000065664 00000 n
+0000065728 00000 n
+0000065792 00000 n
+0000065857 00000 n
+0000065921 00000 n
+0000065985 00000 n
+0000066050 00000 n
+0000066115 00000 n
+0000066181 00000 n
+0000066246 00000 n
+0000066312 00000 n
+0000066378 00000 n
+0000066443 00000 n
+0000066508 00000 n
+0000066572 00000 n
+0000066637 00000 n
+0000066701 00000 n
+0000066765 00000 n
+0000066830 00000 n
+0000066899 00000 n
+0000066964 00000 n
+0000067033 00000 n
+0000067099 00000 n
+0000067169 00000 n
+0000067235 00000 n
+0000067305 00000 n
+0000067371 00000 n
+0000067441 00000 n
+0000067507 00000 n
+0000067572 00000 n
+0000067638 00000 n
+0000067708 00000 n
+0000067774 00000 n
+0000067844 00000 n
+0000067910 00000 n
+0000067980 00000 n
+0000068045 00000 n
+0000068118 00000 n
+0000068199 00000 n
+0000068272 00000 n
+0000068345 00000 n
+0000068418 00000 n
+0000068517 00000 n
+0000068590 00000 n
+0000068663 00000 n
+0000068736 00000 n
+0000068809 00000 n
+0000068915 00000 n
+0000068980 00000 n
+0000069045 00000 n
+0000069110 00000 n
+0000069175 00000 n
+0000069240 00000 n
+0000069304 00000 n
+0000069364 00000 n
+0000069446 00000 n
+0000069508 00000 n
+0000069568 00000 n
+0000069628 00000 n
+0000069690 00000 n
+0000069752 00000 n
+0000069896 00000 n
+0000069961 00000 n
+0000070023 00000 n
+0000070087 00000 n
+0000070152 00000 n
+0000070217 00000 n
+0000070282 00000 n
+0000070346 00000 n
+0000070411 00000 n
+0000070475 00000 n
+0000070540 00000 n
+0000070604 00000 n
+0000070668 00000 n
+0000070733 00000 n
+0000070797 00000 n
+0000070862 00000 n
+0000070927 00000 n
+0000070992 00000 n
+0000071058 00000 n
+0000071123 00000 n
+0000071189 00000 n
+0000071254 00000 n
+0000071320 00000 n
+0000071385 00000 n
+0000071450 00000 n
+0000071516 00000 n
+0000071581 00000 n
+0000071647 00000 n
+0000071717 00000 n
+0000071783 00000 n
+0000071853 00000 n
+0000071919 00000 n
+0000071989 00000 n
+0000072055 00000 n
+0000072125 00000 n
+0000072198 00000 n
+0000072288 00000 n
+0000072361 00000 n
+0000072434 00000 n
+0000072507 00000 n
+0000072569 00000 n
+0000072631 00000 n
+0000072693 00000 n
+0000072755 00000 n
+0000072817 00000 n
+0000072879 00000 n
+0000072941 00000 n
+0000073048 00000 n
+0000073112 00000 n
+0000073177 00000 n
+0000073241 00000 n
+0000073305 00000 n
+0000073370 00000 n
+0000073434 00000 n
+0000073499 00000 n
+0000073568 00000 n
+0000073633 00000 n
+0000073703 00000 n
+0000073768 00000 n
+0000073834 00000 n
+0000073899 00000 n
+0000073965 00000 n
+0000074030 00000 n
+0000074092 00000 n
+0000074154 00000 n
+0000074227 00000 n
+0000074299 00000 n
+0000074372 00000 n
+0000074434 00000 n
+0000074496 00000 n
+0000074561 00000 n
+0000074625 00000 n
+0000074689 00000 n
+0000074753 00000 n
+0000074818 00000 n
+0000074883 00000 n
+0000074947 00000 n
+0000075012 00000 n
+0000075076 00000 n
+0000075140 00000 n
+0000075206 00000 n
+0000075271 00000 n
+0000075333 00000 n
+0000075395 00000 n
+0000075500 00000 n
+0000075564 00000 n
+0000075629 00000 n
+0000075693 00000 n
+0000075758 00000 n
+0000075827 00000 n
+0000075892 00000 n
+0000075961 00000 n
+0000076026 00000 n
+0000076095 00000 n
+0000076160 00000 n
+0000076225 00000 n
+0000076291 00000 n
+0000076356 00000 n
+0000076422 00000 n
+0000076492 00000 n
+0000076558 00000 n
+0000076628 00000 n
+0000076693 00000 n
+0000076758 00000 n
+0000076823 00000 n
+0000076888 00000 n
+0000076954 00000 n
+0000077016 00000 n
+0000077089 00000 n
+0000077161 00000 n
+0000077234 00000 n
+0000077307 00000 n
+0000077388 00000 n
+0000077461 00000 n
+0000077534 00000 n
+0000077598 00000 n
+0000077662 00000 n
+0000077725 00000 n
+0000077789 00000 n
+0000077852 00000 n
+0000077916 00000 n
+0000077984 00000 n
+0000078048 00000 n
+0000078116 00000 n
+0000078180 00000 n
+0000078249 00000 n
+0000078314 00000 n
+0000078383 00000 n
+0000078448 00000 n
+0000078517 00000 n
+0000078582 00000 n
+0000078646 00000 n
+0000078710 00000 n
+0000078783 00000 n
+0000078882 00000 n
+0000078955 00000 n
+0000079028 00000 n
+0000079101 00000 n
+0000079174 00000 n
+0000079238 00000 n
+0000079301 00000 n
+0000079365 00000 n
+0000079428 00000 n
+0000079491 00000 n
+0000079555 00000 n
+0000079619 00000 n
+0000079683 00000 n
+0000079746 00000 n
+0000079806 00000 n
+0000079888 00000 n
+0000079950 00000 n
+0000080010 00000 n
+0000080070 00000 n
+0000080132 00000 n
+0000080194 00000 n
+0000080298 00000 n
+0000080361 00000 n
+0000080425 00000 n
+0000080488 00000 n
+0000080551 00000 n
+0000080613 00000 n
+0000080675 00000 n
+0000080778 00000 n
+0000080842 00000 n
+0000080905 00000 n
+0000080968 00000 n
+0000081031 00000 n
+0000081095 00000 n
+0000081158 00000 n
+0000081221 00000 n
+0000081283 00000 n
+0000081346 00000 n
+0000081410 00000 n
+0000081473 00000 n
+0000081537 00000 n
+0000081600 00000 n
+0000081663 00000 n
+0000081727 00000 n
+0000081790 00000 n
+0000081854 00000 n
+0000081916 00000 n
+0000081978 00000 n
+0000082040 00000 n
+0000082102 00000 n
+0000082207 00000 n
+0000082270 00000 n
+0000082333 00000 n
+0000082397 00000 n
+0000082460 00000 n
+0000082524 00000 n
+0000082587 00000 n
+0000082649 00000 n
+0000082711 00000 n
+0000082773 00000 n
+0000082837 00000 n
+0000082900 00000 n
+0000082964 00000 n
+0000083028 00000 n
+0000083091 00000 n
+0000083154 00000 n
+0000083217 00000 n
+0000083281 00000 n
+0000083349 00000 n
+0000083413 00000 n
+0000083482 00000 n
+0000083547 00000 n
+0000083616 00000 n
+0000083681 00000 n
+0000083750 00000 n
+0000083815 00000 n
+0000083884 00000 n
+0000083949 00000 n
+0000084018 00000 n
+0000084082 00000 n
+0000084155 00000 n
+0000084263 00000 n
+0000084336 00000 n
+0000084409 00000 n
+0000084482 00000 n
+0000084555 00000 n
+0000084628 00000 n
+0000084688 00000 n
+0000084748 00000 n
+0000084823 00000 n
+0000084883 00000 n
+0000084943 00000 n
+0000085047 00000 n
+0000085110 00000 n
+0000085174 00000 n
+0000085237 00000 n
+0000085300 00000 n
+0000085364 00000 n
+0000085432 00000 n
+0000085496 00000 n
+0000085564 00000 n
+0000085628 00000 n
+0000085697 00000 n
+0000085761 00000 n
+0000085825 00000 n
+0000085890 00000 n
+0000085954 00000 n
+0000086019 00000 n
+0000086081 00000 n
+0000086143 00000 n
+0000086216 00000 n
+0000086297 00000 n
+0000086370 00000 n
+0000086443 00000 n
+0000086505 00000 n
+0000086567 00000 n
+0000086630 00000 n
+0000086694 00000 n
+0000086757 00000 n
+0000086821 00000 n
+0000086884 00000 n
+0000086946 00000 n
+0000087008 00000 n
+0000087072 00000 n
+0000087135 00000 n
+0000087199 00000 n
+0000087262 00000 n
+0000087326 00000 n
+0000087389 00000 n
+0000087453 00000 n
+0000087516 00000 n
+0000087580 00000 n
+0000087643 00000 n
+0000087705 00000 n
+0000087767 00000 n
+0000087829 00000 n
+0000087891 00000 n
+0000087953 00000 n
+0000088016 00000 n
+0000088080 00000 n
+0000088143 00000 n
+0000088206 00000 n
+0000088269 00000 n
+0000088333 00000 n
+0000088396 00000 n
+0000088460 00000 n
+0000088523 00000 n
+0000088587 00000 n
+0000088651 00000 n
+0000088713 00000 n
+0000088775 00000 n
+0000088837 00000 n
+0000088941 00000 n
+0000089004 00000 n
+0000089068 00000 n
+0000089131 00000 n
+0000089195 00000 n
+0000089257 00000 n
+0000089319 00000 n
+0000089381 00000 n
+0000089445 00000 n
+0000089509 00000 n
+0000089572 00000 n
+0000089636 00000 n
+0000089699 00000 n
+0000089762 00000 n
+0000089807 00000 n
+0000089852 00000 n
+0000089897 00000 n
+0000089942 00000 n
+0000090057 00000 n
+0000090295 00000 n
+0000090532 00000 n
+0000090764 00000 n
+0000090997 00000 n
+0000091230 00000 n
+0000091462 00000 n
+0000091693 00000 n
+0000091934 00000 n
+0000092167 00000 n
+0000092376 00000 n
+0000092487 00000 n
+0000093337 00000 n
+0000093360 00000 n
+0000093469 00000 n
+0000093575 00000 n
+0000098365 00000 n
+0000098388 00000 n
+0000098641 00000 n
+0000098678 00000 n
+0000098702 00000 n
+0000098758 00000 n
+0000019105 00000 n
+0000020713 00000 n
+trailer
<<
/Size 1478
/Info 446 0 R 
/Root 553 0 R 
/Prev 271859 
/ID[<55bc04fb77f364292aaad31d1ab19522><55bc04fb77f364292aaad31d1ab19522>]
>>
startxref
0
%%EOF
    
553 0 obj
<< 
/Type /Catalog 
/Pages 445 0 R 
/Names 554 0 R 
/StructTreeRoot 575 0 R 
/SpiderInfo 452 0 R 
/Outlines 556 0 R 
/PageMode /UseOutlines 
>> 
endobj
554 0 obj
<< 
/IDS 450 0 R 
/URLS 451 0 R 
/Dests 405 0 R 
>> 
endobj
1476 0 obj
<< /S 834 /O 2488 /E 2504 /Filter /FlateDecode /Length 1477 0 R >> 
stream
+H��UmlSU~����
+[�m��Y��l|lj��}����Ȁ�c�$5�8#�s�1i"K:��2��hH3~05�Ec25!�_�0K��G�E���s�-�6�Y���y��=Ϲ@��H"T@�S"��X��
2@�m�@���(�نd3T��Pp �Q�
���Q{�72K_6�U{���)9C>��S;tkk�^V��t\�$����%��"�E��N@}ޓodק        
�q���A�� �F~'vu�K���p[>T3��&�l>=�;��32�{���u��r�Xϩ���5�u.ES����N�)̯M�
�i�{����gCl�;u�+NJgc������r<�w�^�n<]��E���ꢓ0��≥3�:�ҵ�䅕���$�E��X��_
+e�"�%�7[���M���,�Lݍ/ h��J{�Ȼ���\��g����W���N-�<tq%�Bl����!/r��(B�g��B�{
+)�K
b�M��-�aGp})t�� 55 <>�ˁ����/uO"��#e�����E��h2I  [vk���
�zͦ�"C#xFq���k���7
+x�U��I�@'�I�ӴR��(h2hb/n�C��g�2pQê!��r�1
+04*���C�
��Ƌ4��������׫Wd��7ž��F�mO=+_�~9$�?�P��QȈ�Ft�Ak�Ӣ�F�,8�X�꧄���ƭ�$ӢVO68�>!��AA��+��A='�뉪@D�>�%�'X�N��YIm"aE=,�|��/�cM����ȟ:l��U!_
�%�3��  �*,ӛ�iE-a.�Z �s)����Rycbة�
�xJ�s�bY-4���𗤏w܉�����+�v!ղ�C��������o[�g��Ơrykb��C���j       l�     
 ��sN}�        �"�m$�Y3�!5�B!�:UY�[�        0��V�
�I�J�.T}�G�I��֏Λ�"I�[L��6l
�|����f��f0B�HL�͓�a�bI�h`�@m�����V
�*�$��x�����CR;�!Y��.fֺ��OG*c����t:ё�Śٙ�3{j͘1
+c^̨��A!_�Qw`@���J����u<��vA+�#6�FX���$��(������L#5��-ʩ��B���
+�L��0W�B�-dBA�R�<:���Iq�&j�`�M4�f�<�
+��]�f��"tؼ��w�I����Yth���/:���.l .|f�R�Q���"+���!ru�)�(����n
1b����NF�"�av��a�L�<o�4뢑̗��?�m�]�2'���|he�5
.Z�7�4��M4~��זG�kð�D���&��T�ӖU��н��w�z�M���
d�qk�ky��d,9<��d�)0��;����3�`T�m���c1[O�z[N�"����D�j 
��V��C'�7�X%�[aY�椏Z�����#������n�_�`�1�����?6��:
endstream
endobj
1477 0 obj
1503 
endobj
555 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 468 0 R 
/StructParents 0 
/Annots 1453 0 R 
/Contents 1465 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F8 1467 0 R >> /XObject << 
/Im18 1469 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 1475 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
556 0 obj
<< 
/Count 10 
/Type /Outlines 
/First 557 0 R 
/Last 557 0 R 
>
 > 
endobj
557 0 obj
<< 
/Title (PETE Tutorials)
/Parent 556 0 R 
/First 558 0 R 
/Last 559 0 R 
/Count 9 
>> 
endobj
558 0 obj
<< 
/Title (PETE Tutorials)
/Dest [ 555 0 R /XYZ 0 792 null ] 
/SE 593 0 R 
/Parent 557 0 R 
/Next 573 0 R 
>> 
endobj
559 0 obj
<< 
/Title (PETE Tutorials: Legal Notice)
/Dest [ 286 0 R /XYZ 0 792 null ] 
/SE 560 0 R 
/Parent 557 0 R 
/Prev 561 0 R 

>> 
endobj
560 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials: Legal Notice)
/K [ 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 795 0 R 792 0 R ] 
>> 
endobj
561 0 obj
<< 
/Title (PETE Tutorials: MakeOperators man page)
/Dest [ 259 0 R /XYZ 0 792 null ] 
/SE 562 0 R 
/Parent 557 0 R 
/Prev 563 0 R 
/Next 559 0 R 
>> 
endobj
562 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials: MakeOperators man page)
/K [ 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 
900 0 R 903 0 R 902 0 R 882 0 R 878 0 R 881 0 R 880 0 R 862 0 R 
851 0 R 859 0 R 854 0 R 858 0 R
  804 0 R 824 0 R 806 0 R 823 0 R 
808 0 R 822 0 R 810 0 R 821 0 R 812 0 R 820 0 R 814 0 R 819 0 R 
816 0 R 817 0 R 818 0 R 797 0 R 798 0 R 1452 0 R 803 0 R 800 0 R 
] 
>> 
endobj
563 0 obj
<< 
/Title (PETE Tutorials: The Standard Template Library)
/Dest [ 247 0 R /XYZ 0 792 null ] 
/SE 564 0 R 
/Parent 557 0 R 
/Prev 565 0 R 
/Next 561 0 R 
>> 
endobj
564 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials: The Standard Template Library)
/K [ 919 0 R 920 0 R 921 0 R 922 0 R 926 0 R 924 0 R 925 0 R 918 0 R 905 0 R 
917 0 R 907 0 R 914 0 R 911 0 R ] 
>> 
endobj
565 0 obj
<< 
/Title (PETE Tutorial 3: Synthesizing Types)
/Dest [ 187 0 R /XYZ 0 792 null ] 
/SE 566 0 R 
/Parent 557 0 R 
/Prev 567 0 R 
/Next 563 0 R 
>> 
endobj
566 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorial 3: Synthesizing Types)
/K [ 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1065 0 R 1043 0 R 1044 0 R 
1059 0 R 1055 0 R 1056 0 R 1057 0 R 1031 0 R 1014 0 R 1015 0 R 1030 0 R 
1017 0 
 R 1029 0 R 1019 0 R 1028 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 
1027 0 R 1026 0 R 998 0 R 1012 0 R 1000 0 R 1001 0 R 1002 0 R 1011 0 R 
1004 0 R 1005 0 R 1010 0 R 1007 0 R 1008 0 R 1009 0 R 997 0 R 988 0 R 
996 0 R 990 0 R 995 0 R 992 0 R 994 0 R 971 0 R 986 0 R 973 0 R 
985 0 R 975 0 R 984 0 R 977 0 R 983 0 R 979 0 R 980 0 R 982 0 R 
956 0 R 970 0 R 958 0 R 969 0 R 960 0 R 968 0 R 962 0 R 967 0 R 
964 0 R 966 0 R 944 0 R 955 0 R 946 0 R 947 0 R 954 0 R 949 0 R 
950 0 R 951 0 R 952 0 R 953 0 R 943 0 R 928 0 R 942 0 R 930 0 R 
941 0 R 1451 0 R 938 0 R 935 0 R ] 
>> 
endobj
567 0 obj
<< 
/Title (PETE Tutorial 2: Integrating with the Standard Template Library)
/Dest [ 148 0 R /XYZ 0 792 null ] 
/SE 568 0 R 
/Parent 557 0 R 
/Prev 569 0 R 
/Next 565 0 R 
>> 
endobj
568 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorial 2: Integrating with the Standard Template Library)
/K [ 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1130 0 R 1116 0 R 
1117 0 R 1126 0 R 1124 0
  R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 
1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 
1098 0 R 1099 0 R 1084 0 R 1069 0 R 1083 0 R 1071 0 R 1082 0 R 1450 0 R 
1079 0 R 1076 0 R ] 
>> 
endobj
569 0 obj
<< 
/Title (PETE Tutorial 1: Incorporating a Simple Vector Class)
/Dest [ 81 0 R /XYZ 0 792 null ] 
/SE 570 0 R 
/Parent 557 0 R 
/Prev 571 0 R 
/Next 567 0 R 
>> 
endobj
570 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorial 1: Incorporating a Simple Vector Class)
/K [ 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1283 0 R 1279 0 R 1280 0 R 
1281 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1261 0 R 1243 0 R 1244 0 R 
1245 0 R 1246 0 R 1258 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1256 0 R 
1219 0 R 1220 0 R 1221 0 R 1222 0 R 1232 0 R 1224 0 R 1225 0 R 1231 0 R 
1227 0 R 1228 0 R 1229 0 R 1230 0 R 1218 0 R 1197 0 R 1198 0 R 1199 0 R 
1200 0 R 1217 0 R 1202 0 R 1215 0 R 1207 0 R 1213 0 R 1209 0 R 1212 0 R 
1211 0 R 1155 0 R 1156 0 R 1195 0 R 
 1158 0 R 1194 0 R 1160 0 R 1161 0 R 
1193 0 R 1163 0 R 1192 0 R 1165 0 R 1166 0 R 1191 0 R 1168 0 R 1190 0 R 
1170 0 R 1189 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1185 0 R 1152 0 R 
1153 0 R 1154 0 R 1151 0 R 1150 0 R 1148 0 R 1136 0 R 1147 0 R 1449 0 R 
1144 0 R 1141 0 R ] 
>> 
endobj
571 0 obj
<< 
/Title (PETE Tutorials: Background and Terminology)
/Dest [ 18 0 R /XYZ 0 792 null ] 
/SE 572 0 R 
/Parent 557 0 R 
/Prev 573 0 R 
/Next 569 0 R 
>> 
endobj
572 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials: Background and Terminology)
/K [ 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1442 0 R 1436 0 R 
1441 0 R 1438 0 R 1440 0 R 1421 0 R 1434 0 R 1423 0 R 1424 0 R 1425 0 R 
1426 0 R 1427 0 R 1433 0 R 1429 0 R 1432 0 R 1431 0 R 1420 0 R 1407 0 R 
1419 0 R 1409 0 R 1418 0 R 1411 0 R 1417 0 R 1413 0 R 1416 0 R 1415 0 R 
1399 0 R 1405 0 R 1401 0 R 1404 0 R 1403 0 R 1398 0 R 1376 0 R 1397 0 R 
1378 0 R 1379 0 R 1394 0 R 1386 0 R 1387 0 R 1392 0 R 1389 0 R 1391 
 0 R 
1343 0 R 1344 0 R 1372 0 R 1347 0 R 1348 0 R 1349 0 R 1364 0 R 1362 0 R 
1342 0 R 1334 0 R 1335 0 R 1341 0 R 1337 0 R 1340 0 R 1339 0 R 1320 0 R 
1332 0 R 1322 0 R 1331 0 R 1324 0 R 1325 0 R 1330 0 R 1327 0 R 1329 0 R 
1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1319 0 R 1317 0 R 1318 0 R 
1310 0 R 1305 0 R 1309 0 R 1307 0 R 1308 0 R 1303 0 R 1289 0 R 1302 0 R 
1291 0 R 1292 0 R 1299 0 R 1296 0 R ] 
>> 
endobj
573 0 obj
<< 
/Title (PETE Tutorials: Introduction)
/Dest [ 1 0 R /XYZ 0 792 null ] 
/SE 574 0 R 
/Parent 557 0 R 
/Prev 558 0 R 
/Next 571 0 R 
>> 
endobj
574 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials: Introduction)
/K [ 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 
585 0 R ] 
>> 
endobj
575 0 obj
<< 
/Type /StructTreeRoot 
/RoleMap 591 0 R 
/ParentTreeNextKey 51 
/ParentTree 592 0 R 
/K [ 593 0 R 574 0 R 572 0 R 570 0 R 568 0 R 566 0 R 564 0 R 562 0 R 560 0 R 
594 0 R ] 
>> 
endobj
576 0 obj
<< 
/S /H1 
/P 574 0 R 
/P
 g 1 0 R 
/K 0 
>> 
endobj
577 0 obj
<< 
/S /H1 
/P 574 0 R 
/Pg 1 0 R 
/K 1 
>> 
endobj
578 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K 2 
>> 
endobj
579 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K 3 
>> 
endobj
580 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K 4 
>> 
endobj
581 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K 5 
>> 
endobj
582 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K 6 
>> 
endobj
583 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 1 0 R 
/K [ 7 << /Type /MCR /Pg 9 0 R /MCID 0 >> ] 
>> 
endobj
584 0 obj
<< 
/S /Table 
/P 574 0 R 
/K 586 0 R 
>> 
endobj
585 0 obj
<< 
/S /P 
/P 574 0 R 
/Pg 9 0 R 
/K 3 
>> 
endobj
586 0 obj
<< 
/S /TR 
/P 584 0 R 
/K [ 587 0 R 588 0 R ] 
>> 
endobj
587 0 obj
<< 
/S /TD 
/P 586 0 R 
/K 590 0 R 
>> 
endobj
588 0 obj
<< 
/S /TD 
/P 586 0 R 
/K 589 0 R 
>> 
endobj
589 0 obj
<< 
/S /P 
/P 588 0 R 
/Pg 9 0 R 
/K 2 
>> 
endobj
590 0 obj
<< 
/S /P 
/P 587 0 R 
/Pg 9 0 R 
/K 1 
>> 
endobj
591 0 obj
<< 
/OL /L 
/DIR /L 
/DL /L 
/MENU /L 
/UL /L 
/DT /LI 
/DD /LI 
/H1
  /H 
/H2 /H 
/H3 /H 
/H4 /H 
/H5 /H 
/FTable /NonStruct 
/FTR /NonStruct 
/FTH /NonStruct 
/FTD /NonStruct 
>> 
endobj
592 0 obj
<< 
/Nums [ 0 733 0 R 1 734 0 R 2 735 0 R 3 736 0 R 4 737 0 R 5 738 0 R 6 739 0 R 
7 740 0 R 8 741 0 R 9 742 0 R 10 743 0 R 11 744 0 R 12 745 0 R 13 
746 0 R 14 747 0 R 15 748 0 R 16 749 0 R 17 750 0 R 18 751 0 R 19 
752 0 R 20 753 0 R 21 754 0 R 22 755 0 R 23 756 0 R 24 757 0 R 25 
758 0 R 26 759 0 R 27 760 0 R 28 761 0 R 29 762 0 R 30 763 0 R 31 
764 0 R 32 765 0 R 33 766 0 R 34 767 0 R 35 768 0 R 36 769 0 R 37 
770 0 R 38 771 0 R 39 772 0 R 40 773 0 R 41 774 0 R 42 775 0 R 43 
776 0 R 44 777 0 R 45 778 0 R 46 779 0 R 47 780 0 R 48 781 0 R 49 
782 0 R 50 783 0 R ] 
>> 
endobj
593 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (PETE Tutorials)
/K [ 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 
728 0 R 729 0 R ] 
>> 
endobj
594 0 obj
<< 
/S /Article 
/C /SpdrArt 
/P 575 0 R 
/T (Portable Expression Template Engine | Main )
/K
  595 0 R 
>> 
endobj
595 0 obj
<< 
/S /FTable 
/P 594 0 R 
/K [ 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R ] 
>> 
endobj
596 0 obj
<< 
/S /FTR 
/P 595 0 R 
/K [ 704 0 R 705 0 R ] 
>> 
endobj
597 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 296 0 R 
/K [ 10 692 0 R 12 693 0 R 14 694 0 R 695 0 R 696 0 R 697 0 R ] 
>> 
endobj
598 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 296 0 R 
/K [ 19 << /Type /MCR /Pg 370 0 R /MCID 0 >> 626 0 R 21 << /Type /MCR /Pg 370 0 
R /MCID 1 >> 
627 0 R 37 << /Type /MCR /Pg 370 0 R /MCID 2 >> 628 0 R 629 0 R 
630 0 R 631 0 R ] 
>> 
endobj
599 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 385 0 R 
/K [ 0 613 0 R 2 614 0 R 4 615 0 R 616 0 R 617 0 R 618 0 R ] 
>> 
endobj
600 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 385 0 R 
/K [ 10 601 0 R 11 602 0 R 12 603 0 R 604 0 R 605 0 R 606 0 R ] 
>> 
endobj
601 0 obj
<< 
/S /FTD 
/P 600 0 R 
/K 612 0 R 
>> 
endobj
602 0 obj
<< 
/S /FTD 
/P 600 0 R 
/K 611 0 R 
>> 
endobj
603 0 obj
<< 
/S /FTD 
/P 600 0 R 
/K 610 0 R 
>> 
endobj
604 0 obj
<< 
/S /FTD 
/P 600
  0 R 
/K 609 0 R 
>> 
endobj
605 0 obj
<< 
/S /FTD 
/P 600 0 R 
/K 608 0 R 
>> 
endobj
606 0 obj
<< 
/S /FTD 
/P 600 0 R 
/K 607 0 R 
>> 
endobj
607 0 obj
<< 
/S /P 
/P 606 0 R 
>> 
endobj
608 0 obj
<< 
/S /P 
/P 605 0 R 
>> 
endobj
609 0 obj
<< 
/S /P 
/P 604 0 R 
>> 
endobj
610 0 obj
<< 
/S /P 
/P 603 0 R 
>> 
endobj
611 0 obj
<< 
/S /P 
/P 602 0 R 
>> 
endobj
612 0 obj
<< 
/S /P 
/P 601 0 R 
>> 
endobj
613 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K 625 0 R 
>> 
endobj
614 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K 624 0 R 
>> 
endobj
615 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K 623 0 R 
>> 
endobj
616 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K 622 0 R 
>> 
endobj
617 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K [ 620 0 R 621 0 R ] 
>> 
endobj
618 0 obj
<< 
/S /FTD 
/P 599 0 R 
/K 619 0 R 
>> 
endobj
619 0 obj
<< 
/S /P 
/P 618 0 R 
/Pg 385 0 R 
/K 9 
>> 
endobj
620 0 obj
<< 
/S /P 
/P 617 0 R 
/Pg 385 0 R 
/K 7 
>> 
endobj
621 0 obj
<< 
/S /P 
/P 617 0 R 
/Pg 385 0 R 
/K 8 
>> 
endobj
622 0 obj
<< 
/S /P 
/P 616 0 R 
/Pg 38
 5 0 R 
/K 6 
>> 
endobj
623 0 obj
<< 
/S /P 
/P 615 0 R 
/Pg 385 0 R 
/K 5 
>> 
endobj
624 0 obj
<< 
/S /P 
/P 614 0 R 
/Pg 385 0 R 
/K 3 
>> 
endobj
625 0 obj
<< 
/S /P 
/P 613 0 R 
/Pg 385 0 R 
/K 1 
>> 
endobj
626 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K 691 0 R 
>> 
endobj
627 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K [ 668 0 R 669 0 R ] 
>> 
endobj
628 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K 667 0 R 
>> 
endobj
629 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K 666 0 R 
>> 
endobj
630 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K [ 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 
642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 
650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 
] 
>> 
endobj
631 0 obj
<< 
/S /FTD 
/P 598 0 R 
/K 632 0 R 
>> 
endobj
632 0 obj
<< 
/S /P 
/P 631 0 R 
/Pg 296 0 R 
/K 55 
>> 
endobj
633 0 obj
<< 
/S /H2 
/P 630 0 R 
/Pg 296 0 R 
/K 40 
>> 
endobj
634 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 41 
>> 
endobj
635 0 obj
<< 
/S /P 
/P 630 0 R 
 
/Pg 296 0 R 
/K 42 
>> 
endobj
636 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 43 
>> 
endobj
637 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 44 
>> 
endobj
638 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 45 
>> 
endobj
639 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 46 
>> 
endobj
640 0 obj
<< 
/S /H2 
/P 630 0 R 
/Pg 296 0 R 
/K 47 
>> 
endobj
641 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 48 
>> 
endobj
642 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 49 
>> 
endobj
643 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 50 
>> 
endobj
644 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 51 
>> 
endobj
645 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 52 
>> 
endobj
646 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 53 
>> 
endobj
647 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 296 0 R 
/K 54 
>> 
endobj
648 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 3 
>> 
endobj
649 0 obj
<< 
/S /Table 
/P 630 0 R 
/K [ 658 0 R 659 0 R 10 ] 
/Pg 370 0 R 
>> 
endobj
650 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
 
/K 11 
>> 
endobj
651 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 12 
>> 
endobj
652 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 13 
>> 
endobj
653 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 14 
>> 
endobj
654 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 15 
>> 
endobj
655 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 16 
>> 
endobj
656 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 17 
>> 
endobj
657 0 obj
<< 
/S /P 
/P 630 0 R 
/Pg 370 0 R 
/K 18 
>> 
endobj
658 0 obj
<< 
/S /Caption 
/P 649 0 R 
/K 665 0 R 
>> 
endobj
659 0 obj
<< 
/S /TR 
/P 649 0 R 
/Pg 370 0 R 
/K [ 5 660 0 R 7 661 0 R ] 
>> 
endobj
660 0 obj
<< 
/S /TD 
/P 659 0 R 
/K 664 0 R 
>> 
endobj
661 0 obj
<< 
/S /TD 
/P 659 0 R 
/K [ 662 0 R 663 0 R ] 
>> 
endobj
662 0 obj
<< 
/S /P 
/P 661 0 R 
/Pg 370 0 R 
/K 8 
>> 
endobj
663 0 obj
<< 
/S /P 
/P 661 0 R 
/Pg 370 0 R 
/K 9 
>> 
endobj
664 0 obj
<< 
/S /P 
/P 660 0 R 
/Pg 370 0 R 
/K 6 
>> 
endobj
665 0 obj
<< 
/S /P 
/P 658 0 R 
/Pg 370 0 R 
/K 4 
>> 
endobj
666 
 0 obj
<< 
/S /P 
/P 629 0 R 
/Pg 296 0 R 
/K 39 
>> 
endobj
667 0 obj
<< 
/S /P 
/P 628 0 R 
/Pg 296 0 R 
/K 38 
>> 
endobj
668 0 obj
<< 
/S /P 
/P 627 0 R 
/Pg 296 0 R 
/K 22 
>> 
endobj
669 0 obj
<< 
/S /UL 
/P 627 0 R 
/K [ 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R ] 
>> 
endobj
670 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 689 0 R 690 0 R ] 
>> 
endobj
671 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 687 0 R 688 0 R ] 
>> 
endobj
672 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 685 0 R 686 0 R ] 
>> 
endobj
673 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 683 0 R 684 0 R ] 
>> 
endobj
674 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 681 0 R 682 0 R ] 
>> 
endobj
675 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 679 0 R 680 0 R ] 
>> 
endobj
676 0 obj
<< 
/S /LI 
/P 669 0 R 
/K [ 677 0 R 678 0 R ] 
>> 
endobj
677 0 obj
<< 
/S /Label 
/P 676 0 R 
/Pg 296 0 R 
/K 36 
>> 
endobj
678 0 obj
<< 
/S /P 
/P 676 0 R 
/Pg 296 0 R 
/K 35 
>> 
endobj
679 0 obj
<< 
/S /Label 
/P 675 0 R 
/Pg 296 0 R 
/K 34 
>> 
endobj
680 0 obj
<< 
/S 
 /P 
/P 675 0 R 
/Pg 296 0 R 
/K 33 
>> 
endobj
681 0 obj
<< 
/S /Label 
/P 674 0 R 
/Pg 296 0 R 
/K 32 
>> 
endobj
682 0 obj
<< 
/S /P 
/P 674 0 R 
/Pg 296 0 R 
/K 31 
>> 
endobj
683 0 obj
<< 
/S /Label 
/P 673 0 R 
/Pg 296 0 R 
/K 30 
>> 
endobj
684 0 obj
<< 
/S /P 
/P 673 0 R 
/Pg 296 0 R 
/K 29 
>> 
endobj
685 0 obj
<< 
/S /Label 
/P 672 0 R 
/Pg 296 0 R 
/K 28 
>> 
endobj
686 0 obj
<< 
/S /P 
/P 672 0 R 
/Pg 296 0 R 
/K 27 
>> 
endobj
687 0 obj
<< 
/S /Label 
/P 671 0 R 
/Pg 296 0 R 
/K 26 
>> 
endobj
688 0 obj
<< 
/S /P 
/P 671 0 R 
/Pg 296 0 R 
/K 25 
>> 
endobj
689 0 obj
<< 
/S /Label 
/P 670 0 R 
/Pg 296 0 R 
/K 24 
>> 
endobj
690 0 obj
<< 
/S /P 
/P 670 0 R 
/Pg 296 0 R 
/K 23 
>> 
endobj
691 0 obj
<< 
/S /P 
/P 626 0 R 
/Pg 296 0 R 
/K 20 
>> 
endobj
692 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 703 0 R 
>> 
endobj
693 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 702 0 R 
>> 
endobj
694 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 701 0 R 
>> 
endobj
695 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 700 0 R 
>> 
e
 ndobj
696 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 699 0 R 
>> 
endobj
697 0 obj
<< 
/S /FTD 
/P 597 0 R 
/K 698 0 R 
>> 
endobj
698 0 obj
<< 
/S /P 
/P 697 0 R 
/Pg 296 0 R 
/K 18 
>> 
endobj
699 0 obj
<< 
/S /P 
/P 696 0 R 
/Pg 296 0 R 
/K 17 
>> 
endobj
700 0 obj
<< 
/S /P 
/P 695 0 R 
/Pg 296 0 R 
/K 16 
>> 
endobj
701 0 obj
<< 
/S /P 
/P 694 0 R 
/Pg 296 0 R 
/K 15 
>> 
endobj
702 0 obj
<< 
/S /P 
/P 693 0 R 
/Pg 296 0 R 
/K 13 
>> 
endobj
703 0 obj
<< 
/S /P 
/P 692 0 R 
/Pg 296 0 R 
/K 11 
>> 
endobj
704 0 obj
<< 
/S /FTD 
/P 596 0 R 
/A 706 0 R 
/K 717 0 R 
>> 
endobj
705 0 obj
<< 
/S /FTD 
/P 596 0 R 
/A 706 0 R 
/K 707 0 R 
>> 
endobj
706 0 obj
<< 
/O /Adobe 
/ColSpan 3 
>> 
endobj
707 0 obj
<< 
/S /P 
/P 705 0 R 
/K [ 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 
] 
>> 
endobj
708 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 1 
/Alt (advanced computing laboratory)
>> 
endobj
709 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 2 
/Alt (learn about 
 what we do)
>> 
endobj
710 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 3 
/Alt (explore our research projects)
>> 
endobj
711 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 4 
/Alt (information for acl users)
>> 
endobj
712 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 5 
/Alt (acl and computing related resources)
>> 
endobj
713 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 6 
/Alt (latest news and events)
>> 
endobj
714 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 7 
/Alt (find acl staff members)
>> 
endobj
715 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 8 
/Alt (search our web site)
>> 
endobj
716 0 obj
<< 
/S /Image 
/P 707 0 R 
/Pg 296 0 R 
/K 9 
/Alt (need help? look here)
>> 
endobj
717 0 obj
<< 
/S /P 
/P 704 0 R 
/K 718 0 R 
>> 
endobj
718 0 obj
<< 
/S /Image 
/P 717 0 R 
/Pg 296 0 R 
/K 0 
/Alt (go to ACL home)
>> 
endobj
719 0 obj
<< 
/S /H1 
/P 593 0 R 
/Pg 555 0 R 
/K 0 
>> 
endobj
720 0 obj
<< 
/S /H1 
/P 593 0 R 
/Pg 555 0 R 
/K 1 
>> 
endobj
721 
 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 2 
>> 
endobj
722 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 3 
>> 
endobj
723 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 4 
>> 
endobj
724 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 5 
>> 
endobj
725 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 6 
>> 
endobj
726 0 obj
<< 
/S /H2 
/P 593 0 R 
/Pg 555 0 R 
/K 7 
>> 
endobj
727 0 obj
<< 
/S /Quote 
/P 593 0 R 
/K [ 730 0 R 731 0 R 732 0 R ] 
>> 
endobj
728 0 obj
<< 
/S /P 
/P 593 0 R 
>> 
endobj
729 0 obj
<< 
/S /P 
/P 593 0 R 
/Pg 555 0 R 
/K 11 
>> 
endobj
730 0 obj
<< 
/S /H3 
/P 727 0 R 
/Pg 555 0 R 
/K 8 
>> 
endobj
731 0 obj
<< 
/S /H3 
/P 727 0 R 
/Pg 555 0 R 
/K 9 
>> 
endobj
732 0 obj
<< 
/S /H3 
/P 727 0 R 
/Pg 555 0 R 
/K 10 
>> 
endobj
733 0 obj
[ 
719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 730 0 R 
731 0 R 732 0 R 729 0 R 
]
endobj
734 0 obj
[ 
576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 
]
endobj
735 0 obj
[ 
583 0 R 590 0 R 
 589 0 R 585 0 R 
]
endobj
736 0 obj
[ 
1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1435 0 R 
]
endobj
737 0 obj
[ 
1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 
]
endobj
738 0 obj
[ 
1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 
1429 0 R 1430 0 R 1431 0 R 
]
endobj
739 0 obj
[ 
1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 
1414 0 R 1415 0 R 
]
endobj
740 0 obj
[ 
1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1375 0 R 
]
endobj
741 0 obj
[ 
1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 
1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 

]
endobj
742 0 obj
[ 
1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 
1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 
1359 0 R 1360 0 R 1361 0 R 1362 0 R 1333 0 R 
]
endobj
743 0 obj
[ 
1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 
]
endobj
744 0 obj
[ 
1320 0 R 1321 0 R 132
 2 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 
1328 0 R 1311 0 R 
]
endobj
745 0 obj
[ 
1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 
1304 0 R 
]
endobj
746 0 obj
[ 
1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 
]
endobj
747 0 obj
[ 
1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 
1296 0 R 
]
endobj
748 0 obj
[ 
1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 
1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 
1280 0 R 1281 0 R 1233 0 R 
]
endobj
749 0 obj
[ 
1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 
1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 
1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 
]
endobj
750 0 obj
[ 
1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 
1227 0 R 1228 0 R 1229 0 R 1230 0 R 1196 0 R 
]
endobj
751 0 obj
[ 
1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 120
 2 0 R 1203 0 R 
1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 

]
endobj
752 0 obj
[ 
1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 
1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 
1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 
1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 
]
endobj
753 0 obj
[ 
1152 0 R 1153 0 R 1154 0 R 1149 0 R 
]
endobj
754 0 obj
[ 
1149 0 R 
]
endobj
755 0 obj
[ 
1149 0 R 1150 0 R 1135 0 R 
]
endobj
756 0 obj
[ 
1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 
]
endobj
757 0 obj
[ 
1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 
1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 
1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 
1124 0 R 
]
endobj
758 0 obj
[ 
1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 
1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 10
 98 0 R 1099 0 R 1068 0 R 

]
endobj
759 0 obj
[ 
1068 0 R 
]
endobj
760 0 obj
[ 
1068 0 R 
]
endobj
761 0 obj
[ 
1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 
1076 0 R 
]
endobj
762 0 obj
[ 
1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 
1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 
1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 
1056 0 R 1057 0 R 
]
endobj
763 0 obj
[ 
1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 
1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 998 0 R 
]
endobj
764 0 obj
[ 
998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 
1006 0 R 1007 0 R 1008 0 R 1009 0 R 
]
endobj
765 0 obj
[ 
987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 971 0 R 
]
endobj
766 0 obj
[ 
971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 
980 0 R 981 0 R 956 0 R 
]
endobj
767 0 obj
[ 
956 0 R 957 0 R 958 0 R 
 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 
965 0 R 944 0 R 
]
endobj
768 0 obj
[ 
944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 
953 0 R 927 0 R 
]
endobj
769 0 obj
[ 
927 0 R 
]
endobj
770 0 obj
[ 
927 0 R 
]
endobj
771 0 obj
[ 
927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 

]
endobj
772 0 obj
[ 
919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 904 0 R 
]
endobj
773 0 obj
[ 
904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 
]
endobj
774 0 obj
[ 
891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 
900 0 R 901 0 R 902 0 R 883 0 R 884 0 R 885 0 R 
]
endobj
775 0 obj
[ 
885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 876 0 R 
]
endobj
776 0 obj
[ 
876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 874 0 R 875 0 R 825 0 R 
]
endobj
777 0 obj
[ 
825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 
834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 
842 0 R 843 0 R 8
 44 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 
850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 

]
endobj
778 0 obj
[ 
804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 
813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 797 0 R 
]
endobj
779 0 obj
[ 
797 0 R 798 0 R 799 0 R 800 0 R 
]
endobj
780 0 obj
[ 
784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 

]
endobj
781 0 obj
[ 
718 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 
716 0 R 597 0 R 703 0 R 597 0 R 702 0 R 597 0 R 701 0 R 700 0 R 
699 0 R 698 0 R 598 0 R 691 0 R 598 0 R 668 0 R 690 0 R 689 0 R 
688 0 R 687 0 R 686 0 R 685 0 R 684 0 R 683 0 R 682 0 R 681 0 R 
680 0 R 679 0 R 678 0 R 677 0 R 598 0 R 667 0 R 666 0 R 633 0 R 
634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 
642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 632 0 R 
]
endobj
782 0 obj
[ 
598 0 R 598 0 R 598 0 R 648 0 R 665 0 R 659 0 R 664 0 R 659 0 R 662 0 R 
663 0 R 
 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 
656 0 R 657 0 R 
]
endobj
783 0 obj
[ 
599 0 R 625 0 R 599 0 R 624 0 R 599 0 R 623 0 R 622 0 R 620 0 R 621 0 R 
619 0 R 600 0 R 600 0 R 600 0 R 
]
endobj
784 0 obj
<< 
/S /H1 
/P 560 0 R 
/Pg 286 0 R 
/K 0 
>> 
endobj
785 0 obj
<< 
/S /H1 
/P 560 0 R 
/Pg 286 0 R 
/K 1 
>> 
endobj
786 0 obj
<< 
/S /P 
/P 560 0 R 
/Pg 286 0 R 
/K 2 
>> 
endobj
787 0 obj
<< 
/S /P 
/P 560 0 R 
/Pg 286 0 R 
/K 3 
>> 
endobj
788 0 obj
<< 
/S /P 
/P 560 0 R 
/Pg 286 0 R 
/K 4 
>> 
endobj
789 0 obj
<< 
/S /P 
/P 560 0 R 
/Pg 286 0 R 
/K 5 
>> 
endobj
790 0 obj
<< 
/S /P 
/P 796 0 R 
/Pg 286 0 R 
/K 6 
>> 
endobj
791 0 obj
<< 
/S /P 
/P 793 0 R 
/Pg 286 0 R 
/K 7 
>> 
endobj
792 0 obj
<< 
/S /P 
/P 560 0 R 
/Pg 286 0 R 
/K 8 
>> 
endobj
793 0 obj
<< 
/S /TD 
/P 794 0 R 
/K 791 0 R 
>> 
endobj
794 0 obj
<< 
/S /TR 
/P 795 0 R 
/K [ 796 0 R 793 0 R ] 
>> 
endobj
795 0 obj
<< 
/S /Table 
/P 560 0 R 
/K 794 0 R 
>> 
endobj
796 0 obj
<< 
/S /TD 
/P 794 0 
 R 
/K 790 0 R 
>> 
endobj
797 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 277 0 R 
/K [ 15 << /Type /MCR /Pg 280 0 R /MCID 0 >> ] 
>> 
endobj
798 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 280 0 R 
/K 1 
>> 
endobj
799 0 obj
<< 
/S /P 
/P 801 0 R 
/Pg 280 0 R 
/K 2 
>> 
endobj
800 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 280 0 R 
/K 3 
>> 
endobj
801 0 obj
<< 
/S /FTD 
/P 802 0 R 
/K 799 0 R 
>> 
endobj
802 0 obj
<< 
/S /FTR 
/P 803 0 R 
/K 801 0 R 
>> 
endobj
803 0 obj
<< 
/S /FTable 
/P 562 0 R 
/K 802 0 R 
>> 
endobj
804 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 0 
>> 
endobj
805 0 obj
<< 
/S /P 
/P 824 0 R 
/Pg 277 0 R 
/K 1 
>> 
endobj
806 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 2 
>> 
endobj
807 0 obj
<< 
/S /P 
/P 823 0 R 
/Pg 277 0 R 
/K 3 
>> 
endobj
808 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 4 
>> 
endobj
809 0 obj
<< 
/S /P 
/P 822 0 R 
/Pg 277 0 R 
/K 5 
>> 
endobj
810 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 6 
>> 
endobj
811 0 obj
<< 
/S /P 
/P 821 0 R 
/Pg 277 0 R 
/K 7 
>> 
 
endobj
812 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 8 
>> 
endobj
813 0 obj
<< 
/S /P 
/P 820 0 R 
/Pg 277 0 R 
/K 9 
>> 
endobj
814 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 277 0 R 
/K 10 
>> 
endobj
815 0 obj
<< 
/S /P 
/P 819 0 R 
/Pg 277 0 R 
/K 11 
>> 
endobj
816 0 obj
<< 
/S /H2 
/P 562 0 R 
/Pg 277 0 R 
/K 12 
>> 
endobj
817 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 277 0 R 
/K 13 
>> 
endobj
818 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 277 0 R 
/K 14 
>> 
endobj
819 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 815 0 R 
>> 
endobj
820 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 813 0 R 
>> 
endobj
821 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 811 0 R 
>> 
endobj
822 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 809 0 R 
>> 
endobj
823 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 807 0 R 
>> 
endobj
824 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 805 0 R 
>> 
endobj
825 0 obj
<< 
/S /P 
/P 862 0 R 
/Pg 268 0 R 
/K [ 7 << /Type /MCR /Pg 274 0 R /MCID 0 >> ] 
>> 
endobj
826 0 obj
<< 
/S /P 
/P 862 0 R 
/Pg 274 0 R 
/K 1 
>> 
endobj
827 0 obj
<< 
 
/S /P 
/P 863 0 R 
/Pg 274 0 R 
/K 2 
>> 
endobj
828 0 obj
<< 
/S /Label 
/P 863 0 R 
/Pg 274 0 R 
/K 3 
>> 
endobj
829 0 obj
<< 
/S /P 
/P 864 0 R 
/Pg 274 0 R 
/K 4 
>> 
endobj
830 0 obj
<< 
/S /Label 
/P 864 0 R 
/Pg 274 0 R 
/K 5 
>> 
endobj
831 0 obj
<< 
/S /P 
/P 865 0 R 
/Pg 274 0 R 
/K 6 
>> 
endobj
832 0 obj
<< 
/S /Label 
/P 865 0 R 
/Pg 274 0 R 
/K 7 
>> 
endobj
833 0 obj
<< 
/S /P 
/P 866 0 R 
/Pg 274 0 R 
/K 8 
>> 
endobj
834 0 obj
<< 
/S /Label 
/P 866 0 R 
/Pg 274 0 R 
/K 9 
>> 
endobj
835 0 obj
<< 
/S /P 
/P 867 0 R 
/Pg 274 0 R 
/K 10 
>> 
endobj
836 0 obj
<< 
/S /Label 
/P 867 0 R 
/Pg 274 0 R 
/K 11 
>> 
endobj
837 0 obj
<< 
/S /P 
/P 868 0 R 
/Pg 274 0 R 
/K 12 
>> 
endobj
838 0 obj
<< 
/S /Label 
/P 868 0 R 
/Pg 274 0 R 
/K 13 
>> 
endobj
839 0 obj
<< 
/S /P 
/P 869 0 R 
/Pg 274 0 R 
/K 14 
>> 
endobj
840 0 obj
<< 
/S /Label 
/P 869 0 R 
/Pg 274 0 R 
/K 15 
>> 
endobj
841 0 obj
<< 
/S /P 
/P 870 0 R 
/Pg 274 0 R 
/K 16 
>> 
endobj
842 0 obj
<< 
/S /Label 
/P 87
 0 0 R 
/Pg 274 0 R 
/K 17 
>> 
endobj
843 0 obj
<< 
/S /P 
/P 871 0 R 
/Pg 274 0 R 
/K 18 
>> 
endobj
844 0 obj
<< 
/S /Label 
/P 871 0 R 
/Pg 274 0 R 
/K 19 
>> 
endobj
845 0 obj
<< 
/S /P 
/P 872 0 R 
/Pg 274 0 R 
/K 20 
>> 
endobj
846 0 obj
<< 
/S /Label 
/P 872 0 R 
/Pg 274 0 R 
/K 21 
>> 
endobj
847 0 obj
<< 
/S /P 
/P 873 0 R 
/Pg 274 0 R 
/K 22 
>> 
endobj
848 0 obj
<< 
/S /Label 
/P 873 0 R 
/Pg 274 0 R 
/K 23 
>> 
endobj
849 0 obj
<< 
/S /P 
/P 860 0 R 
/Pg 274 0 R 
/K 24 
>> 
endobj
850 0 obj
<< 
/S /Label 
/P 860 0 R 
/Pg 274 0 R 
/K 25 
>> 
endobj
851 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 274 0 R 
/K 26 
>> 
endobj
852 0 obj
<< 
/S /P 
/P 859 0 R 
/Pg 274 0 R 
/K 27 
>> 
endobj
853 0 obj
<< 
/S /P 
/P 859 0 R 
/Pg 274 0 R 
/K 28 
>> 
endobj
854 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 274 0 R 
/K 29 
>> 
endobj
855 0 obj
<< 
/S /P 
/P 858 0 R 
/Pg 274 0 R 
/K 30 
>> 
endobj
856 0 obj
<< 
/S /P 
/P 858 0 R 
/Pg 274 0 R 
/K 31 
>> 
endobj
857 0 obj
<< 
/S /P 
/P 858 0 R 
/Pg 274 0 R 
 
/K 32 
>> 
endobj
858 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K [ 855 0 R 856 0 R 857 0 R ] 
>> 
endobj
859 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K [ 852 0 R 853 0 R ] 
>> 
endobj
860 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 850 0 R 849 0 R ] 
>> 
endobj
861 0 obj
<< 
/S /UL 
/P 862 0 R 
/K [ 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 
872 0 R 873 0 R 860 0 R ] 
>> 
endobj
862 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K [ 874 0 R 875 0 R 825 0 R 826 0 R 861 0 R ] 
>> 
endobj
863 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 828 0 R 827 0 R ] 
>> 
endobj
864 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 830 0 R 829 0 R ] 
>> 
endobj
865 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 832 0 R 831 0 R ] 
>> 
endobj
866 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 834 0 R 833 0 R ] 
>> 
endobj
867 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 836 0 R 835 0 R ] 
>> 
endobj
868 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 838 0 R 837 0 R ] 
>> 
endobj
869 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 840 0 R 839 0 R ] 
>> 
endobj
870 0 obj
<< 
/S /LI 
/P 861
  0 R 
/K [ 842 0 R 841 0 R ] 
>> 
endobj
871 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 844 0 R 843 0 R ] 
>> 
endobj
872 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 846 0 R 845 0 R ] 
>> 
endobj
873 0 obj
<< 
/S /LI 
/P 861 0 R 
/K [ 848 0 R 847 0 R ] 
>> 
endobj
874 0 obj
<< 
/S /P 
/P 862 0 R 
/Pg 268 0 R 
/K 5 
>> 
endobj
875 0 obj
<< 
/S /P 
/P 862 0 R 
/Pg 268 0 R 
/K 6 
>> 
endobj
876 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K [ 6 << /Type /MCR /Pg 268 0 R /MCID 0 >> ] 
>> 
endobj
877 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 268 0 R 
/K 1 
>> 
endobj
878 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 268 0 R 
/K 2 
>> 
endobj
879 0 obj
<< 
/S /P 
/P 881 0 R 
/Pg 268 0 R 
/K 3 
>> 
endobj
880 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 268 0 R 
/K 4 
>> 
endobj
881 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 879 0 R 
>> 
endobj
882 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K [ 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 876 0 R 
877 0 R ] 
>> 
endobj
883 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 259 0 R 
/K 12 
>> 
endobj
884 
 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 259 0 R 
/K 13 
>> 
endobj
885 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 259 0 R 
/K [ 14 << /Type /MCR /Pg 265 0 R /MCID 0 >> ] 
>> 
endobj
886 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K 1 
>> 
endobj
887 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K 2 
>> 
endobj
888 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K 3 
>> 
endobj
889 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K 4 
>> 
endobj
890 0 obj
<< 
/S /P 
/P 882 0 R 
/Pg 265 0 R 
/K 5 
>> 
endobj
891 0 obj
<< 
/S /H1 
/P 562 0 R 
/Pg 259 0 R 
/K 0 
>> 
endobj
892 0 obj
<< 
/S /H1 
/P 562 0 R 
/Pg 259 0 R 
/K 1 
>> 
endobj
893 0 obj
<< 
/S /H2 
/P 562 0 R 
/Pg 259 0 R 
/K 2 
>> 
endobj
894 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 259 0 R 
/K 3 
>> 
endobj
895 0 obj
<< 
/S /H2 
/P 562 0 R 
/Pg 259 0 R 
/K 4 
>> 
endobj
896 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 259 0 R 
/K 5 
>> 
endobj
897 0 obj
<< 
/S /H2 
/P 562 0 R 
/Pg 259 0 R 
/K 6 
>> 
endobj
898 0 obj
<< 
/S /P 
/P 562 0 R 
/Pg 259 0 R 
/K 7 
>> 
endobj
899 0 ob
 j
<< 
/S /P 
/P 562 0 R 
/Pg 259 0 R 
/K 8 
>> 
endobj
900 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 259 0 R 
/K 9 
>> 
endobj
901 0 obj
<< 
/S /P 
/P 903 0 R 
/Pg 259 0 R 
/K 10 
>> 
endobj
902 0 obj
<< 
/S /H3 
/P 562 0 R 
/Pg 259 0 R 
/K 11 
>> 
endobj
903 0 obj
<< 
/S /Quote 
/P 562 0 R 
/K 901 0 R 
>> 
endobj
904 0 obj
<< 
/S /P 
/P 918 0 R 
/Pg 247 0 R 
/K [ 7 << /Type /MCR /Pg 251 0 R /MCID 0 >> ] 
>> 
endobj
905 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 251 0 R 
/K 1 
>> 
endobj
906 0 obj
<< 
/S /P 
/P 917 0 R 
/Pg 251 0 R 
/K 2 
>> 
endobj
907 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 251 0 R 
/K 3 
>> 
endobj
908 0 obj
<< 
/S /P 
/P 915 0 R 
/Pg 251 0 R 
/K 4 
>> 
endobj
909 0 obj
<< 
/S /P 
/P 916 0 R 
/Pg 251 0 R 
/K 5 
>> 
endobj
910 0 obj
<< 
/S /P 
/P 912 0 R 
/Pg 251 0 R 
/K 6 
>> 
endobj
911 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 251 0 R 
/K 7 
>> 
endobj
912 0 obj
<< 
/S /TD 
/P 913 0 R 
/K 910 0 R 
>> 
endobj
913 0 obj
<< 
/S /TR 
/P 914 0 R 
/K [ 915 0 R 916 0 R 912 0 R ] 
>> 
endobj
914 0 obj

 << 
/S /Table 
/P 564 0 R 
/K 913 0 R 
>> 
endobj
915 0 obj
<< 
/S /TD 
/P 913 0 R 
/K 908 0 R 
>> 
endobj
916 0 obj
<< 
/S /TD 
/P 913 0 R 
/K 909 0 R 
>> 
endobj
917 0 obj
<< 
/S /Quote 
/P 564 0 R 
/K 906 0 R 
>> 
endobj
918 0 obj
<< 
/S /Quote 
/P 564 0 R 
/K 904 0 R 
>> 
endobj
919 0 obj
<< 
/S /H1 
/P 564 0 R 
/Pg 247 0 R 
/K 0 
>> 
endobj
920 0 obj
<< 
/S /H1 
/P 564 0 R 
/Pg 247 0 R 
/K 1 
>> 
endobj
921 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 247 0 R 
/K 2 
>> 
endobj
922 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 247 0 R 
/K 3 
>> 
endobj
923 0 obj
<< 
/S /P 
/P 926 0 R 
/Pg 247 0 R 
/K 4 
>> 
endobj
924 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 247 0 R 
/K 5 
>> 
endobj
925 0 obj
<< 
/S /P 
/P 564 0 R 
/Pg 247 0 R 
/K 6 
>> 
endobj
926 0 obj
<< 
/S /Quote 
/P 564 0 R 
/K 923 0 R 
>> 
endobj
927 0 obj
<< 
/S /P 
/P 943 0 R 
/Pg 227 0 R 
/K [ 10 << /Type /MCR /Pg 233 0 R /MCID 0 >> << /Type /MCR /Pg 236 0 R /MCID 0 
>> 
<< /Type /MCR /Pg 239 0 R /MCID 0 >> ] 
>> 
endobj
928 0 obj
<< 
/S /H3 
/P 566 0
  R 
/Pg 239 0 R 
/K 1 
>> 
endobj
929 0 obj
<< 
/S /P 
/P 942 0 R 
/Pg 239 0 R 
/K 2 
>> 
endobj
930 0 obj
<< 
/S /H3 
/P 566 0 R 
/Pg 239 0 R 
/K 3 
>> 
endobj
931 0 obj
<< 
/S /P 
/P 941 0 R 
/Pg 239 0 R 
/K 4 
>> 
endobj
932 0 obj
<< 
/S /P 
/P 939 0 R 
/Pg 239 0 R 
/K 5 
>> 
endobj
933 0 obj
<< 
/S /P 
/P 940 0 R 
/Pg 239 0 R 
/K 6 
>> 
endobj
934 0 obj
<< 
/S /P 
/P 936 0 R 
/Pg 239 0 R 
/K 7 
>> 
endobj
935 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 239 0 R 
/K 8 
>> 
endobj
936 0 obj
<< 
/S /TD 
/P 937 0 R 
/K 934 0 R 
>> 
endobj
937 0 obj
<< 
/S /TR 
/P 938 0 R 
/K [ 939 0 R 940 0 R 936 0 R ] 
>> 
endobj
938 0 obj
<< 
/S /Table 
/P 566 0 R 
/K 937 0 R 
>> 
endobj
939 0 obj
<< 
/S /TD 
/P 937 0 R 
/K 932 0 R 
>> 
endobj
940 0 obj
<< 
/S /TD 
/P 937 0 R 
/K 933 0 R 
>> 
endobj
941 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 931 0 R 
>> 
endobj
942 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 929 0 R 
>> 
endobj
943 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 927 0 R 
>> 
endobj
944 0 obj
<< 
/S /P 
/P 566 0 R 

 /Pg 222 0 R 
/K [ 10 << /Type /MCR /Pg 227 0 R /MCID 0 >> ] 
>> 
endobj
945 0 obj
<< 
/S /P 
/P 955 0 R 
/Pg 227 0 R 
/K 1 
>> 
endobj
946 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 227 0 R 
/K 2 
>> 
endobj
947 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 227 0 R 
/K 3 
>> 
endobj
948 0 obj
<< 
/S /P 
/P 954 0 R 
/Pg 227 0 R 
/K 4 
>> 
endobj
949 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 227 0 R 
/K 5 
>> 
endobj
950 0 obj
<< 
/S /H2 
/P 566 0 R 
/Pg 227 0 R 
/K 6 
>> 
endobj
951 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 227 0 R 
/K 7 
>> 
endobj
952 0 obj
<< 
/S /H2 
/P 566 0 R 
/Pg 227 0 R 
/K 8 
>> 
endobj
953 0 obj
<< 
/S /H3 
/P 566 0 R 
/Pg 227 0 R 
/K 9 
>> 
endobj
954 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 948 0 R 
>> 
endobj
955 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 945 0 R 
>> 
endobj
956 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K [ 11 << /Type /MCR /Pg 222 0 R /MCID 0 >> ] 
>> 
endobj
957 0 obj
<< 
/S /P 
/P 970 0 R 
/Pg 222 0 R 
/K 1 
>> 
endobj
958 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 222 0 R 
/K 2 
>> 
endobj
959 
 0 obj
<< 
/S /P 
/P 969 0 R 
/Pg 222 0 R 
/K 3 
>> 
endobj
960 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 222 0 R 
/K 4 
>> 
endobj
961 0 obj
<< 
/S /P 
/P 968 0 R 
/Pg 222 0 R 
/K 5 
>> 
endobj
962 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 222 0 R 
/K 6 
>> 
endobj
963 0 obj
<< 
/S /P 
/P 967 0 R 
/Pg 222 0 R 
/K 7 
>> 
endobj
964 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 222 0 R 
/K 8 
>> 
endobj
965 0 obj
<< 
/S /P 
/P 966 0 R 
/Pg 222 0 R 
/K 9 
>> 
endobj
966 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 965 0 R 
>> 
endobj
967 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 963 0 R 
>> 
endobj
968 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 961 0 R 
>> 
endobj
969 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 959 0 R 
>> 
endobj
970 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 957 0 R 
>> 
endobj
971 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 214 0 R 
/K [ 7 << /Type /MCR /Pg 219 0 R /MCID 0 >> ] 
>> 
endobj
972 0 obj
<< 
/S /P 
/P 986 0 R 
/Pg 219 0 R 
/K 1 
>> 
endobj
973 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K 2 
>> 
endobj
974 0 obj
<< 
/S /P 
/P 985 0 
 R 
/Pg 219 0 R 
/K 3 
>> 
endobj
975 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K 4 
>> 
endobj
976 0 obj
<< 
/S /P 
/P 984 0 R 
/Pg 219 0 R 
/K 5 
>> 
endobj
977 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K 6 
>> 
endobj
978 0 obj
<< 
/S /P 
/P 983 0 R 
/Pg 219 0 R 
/K 7 
>> 
endobj
979 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K 8 
>> 
endobj
980 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 219 0 R 
/K 9 
>> 
endobj
981 0 obj
<< 
/S /P 
/P 982 0 R 
/Pg 219 0 R 
/K 10 
>> 
endobj
982 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 981 0 R 
>> 
endobj
983 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 978 0 R 
>> 
endobj
984 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 976 0 R 
>> 
endobj
985 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 974 0 R 
>> 
endobj
986 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 972 0 R 
>> 
endobj
987 0 obj
<< 
/S /P 
/P 997 0 R 
/Pg 214 0 R 
/K 0 
>> 
endobj
988 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 214 0 R 
/K 1 
>> 
endobj
989 0 obj
<< 
/S /P 
/P 996 0 R 
/Pg 214 0 R 
/K 2 
>> 
endobj
990 0 obj
<< 
/S /P 
/P 566 0 R 

 /Pg 214 0 R 
/K 3 
>> 
endobj
991 0 obj
<< 
/S /P 
/P 995 0 R 
/Pg 214 0 R 
/K 4 
>> 
endobj
992 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 214 0 R 
/K 5 
>> 
endobj
993 0 obj
<< 
/S /P 
/P 994 0 R 
/Pg 214 0 R 
/K 6 
>> 
endobj
994 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 993 0 R 
>> 
endobj
995 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 991 0 R 
>> 
endobj
996 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 989 0 R 
>> 
endobj
997 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 987 0 R 
>> 
endobj
998 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K [ 14 << /Type /MCR /Pg 209 0 R /MCID 0 >> ] 
>> 
endobj
999 0 obj
<< 
/S /P 
/P 1012 0 R 
/Pg 209 0 R 
/K 1 
>> 
endobj
1000 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 2 
>> 
endobj
1001 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 3 
>> 
endobj
1002 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 4 
>> 
endobj
1003 0 obj
<< 
/S /P 
/P 1011 0 R 
/Pg 209 0 R 
/K 5 
>> 
endobj
1004 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 6 
>> 
endobj
1005 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/
 K 7 
>> 
endobj
1006 0 obj
<< 
/S /P 
/P 1010 0 R 
/Pg 209 0 R 
/K 8 
>> 
endobj
1007 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 9 
>> 
endobj
1008 0 obj
<< 
/S /H2 
/P 566 0 R 
/Pg 209 0 R 
/K 10 
>> 
endobj
1009 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 209 0 R 
/K 11 
>> 
endobj
1010 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1006 0 R 
>> 
endobj
1011 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1003 0 R 
>> 
endobj
1012 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 999 0 R 
>> 
endobj
1013 0 obj
<< 
/S /P 
/P 1031 0 R 
/Pg 204 0 R 
/K 0 
>> 
endobj
1014 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 1 
>> 
endobj
1015 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 2 
>> 
endobj
1016 0 obj
<< 
/S /P 
/P 1030 0 R 
/Pg 204 0 R 
/K 3 
>> 
endobj
1017 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 4 
>> 
endobj
1018 0 obj
<< 
/S /P 
/P 1029 0 R 
/Pg 204 0 R 
/K 5 
>> 
endobj
1019 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 6 
>> 
endobj
1020 0 obj
<< 
/S /P 
/P 1028 0 R 
/Pg 204 0 R 
/K 7 
>> 
endobj
1021 0 obj
<< 
/S /P
  
/P 566 0 R 
/Pg 204 0 R 
/K 8 
>> 
endobj
1022 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 9 
>> 
endobj
1023 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 10 
>> 
endobj
1024 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 11 
>> 
endobj
1025 0 obj
<< 
/S /P 
/P 1027 0 R 
/Pg 204 0 R 
/K 12 
>> 
endobj
1026 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 204 0 R 
/K 13 
>> 
endobj
1027 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1025 0 R 
>> 
endobj
1028 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1020 0 R 
>> 
endobj
1029 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1018 0 R 
>> 
endobj
1030 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1016 0 R 
>> 
endobj
1031 0 obj
<< 
/S /Quote 
/P 566 0 R 
/K 1013 0 R 
>> 
endobj
1032 0 obj
<< 
/S /H1 
/P 566 0 R 
/Pg 187 0 R 
/K 0 
>> 
endobj
1033 0 obj
<< 
/S /H1 
/P 566 0 R 
/Pg 187 0 R 
/K 1 
>> 
endobj
1034 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 2 
>> 
endobj
1035 0 obj
<< 
/S /H2 
/P 566 0 R 
/Pg 187 0 R 
/K 3 
>> 
endobj
1036 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 4 
>> 
en
 dobj
1037 0 obj
<< 
/S /P 
/P 1066 0 R 
/Pg 187 0 R 
/K 5 
>> 
endobj
1038 0 obj
<< 
/S /Label 
/P 1066 0 R 
/Pg 187 0 R 
/K 6 
>> 
endobj
1039 0 obj
<< 
/S /P 
/P 1067 0 R 
/Pg 187 0 R 
/K 7 
>> 
endobj
1040 0 obj
<< 
/S /Label 
/P 1067 0 R 
/Pg 187 0 R 
/K 8 
>> 
endobj
1041 0 obj
<< 
/S /P 
/P 1064 0 R 
/Pg 187 0 R 
/K 9 
>> 
endobj
1042 0 obj
<< 
/S /Label 
/P 1064 0 R 
/Pg 187 0 R 
/K 10 
>> 
endobj
1043 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 11 
>> 
endobj
1044 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 12 
>> 
endobj
1045 0 obj
<< 
/S /P 
/P 1060 0 R 
/Pg 187 0 R 
/K 13 
>> 
endobj
1046 0 obj
<< 
/S /Label 
/P 1060 0 R 
/Pg 187 0 R 
/K 14 
>> 
endobj
1047 0 obj
<< 
/S /P 
/P 1061 0 R 
/Pg 187 0 R 
/K 15 
>> 
endobj
1048 0 obj
<< 
/S /Label 
/P 1061 0 R 
/Pg 187 0 R 
/K 16 
>> 
endobj
1049 0 obj
<< 
/S /P 
/P 1062 0 R 
/Pg 187 0 R 
/K 17 
>> 
endobj
1050 0 obj
<< 
/S /Label 
/P 1062 0 R 
/Pg 187 0 R 
/K 18 
>> 
endobj
1051 0 obj
<< 
/S /P 
/P 1063 0 R 
/Pg 187 0 R 
/K 
 19 
>> 
endobj
1052 0 obj
<< 
/S /Label 
/P 1063 0 R 
/Pg 187 0 R 
/K 20 
>> 
endobj
1053 0 obj
<< 
/S /P 
/P 1058 0 R 
/Pg 187 0 R 
/K 21 
>> 
endobj
1054 0 obj
<< 
/S /Label 
/P 1058 0 R 
/Pg 187 0 R 
/K 22 
>> 
endobj
1055 0 obj
<< 
/S /H2 
/P 566 0 R 
/Pg 187 0 R 
/K 23 
>> 
endobj
1056 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 24 
>> 
endobj
1057 0 obj
<< 
/S /P 
/P 566 0 R 
/Pg 187 0 R 
/K 25 
>> 
endobj
1058 0 obj
<< 
/S /LI 
/P 1059 0 R 
/K [ 1054 0 R 1053 0 R ] 
>> 
endobj
1059 0 obj
<< 
/S /UL 
/P 566 0 R 
/K [ 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1058 0 R ] 
>> 
endobj
1060 0 obj
<< 
/S /LI 
/P 1059 0 R 
/K [ 1046 0 R 1045 0 R ] 
>> 
endobj
1061 0 obj
<< 
/S /LI 
/P 1059 0 R 
/K [ 1048 0 R 1047 0 R ] 
>> 
endobj
1062 0 obj
<< 
/S /LI 
/P 1059 0 R 
/K [ 1050 0 R 1049 0 R ] 
>> 
endobj
1063 0 obj
<< 
/S /LI 
/P 1059 0 R 
/K [ 1052 0 R 1051 0 R ] 
>> 
endobj
1064 0 obj
<< 
/S /LI 
/P 1065 0 R 
/K [ 1042 0 R 1041 0 R ] 
>> 
endobj
1065 0 obj
<< 
/S /UL 
/P 566 0 R 
/K [ 106
 6 0 R 1067 0 R 1064 0 R ] 
>> 
endobj
1066 0 obj
<< 
/S /LI 
/P 1065 0 R 
/K [ 1038 0 R 1037 0 R ] 
>> 
endobj
1067 0 obj
<< 
/S /LI 
/P 1065 0 R 
/K [ 1040 0 R 1039 0 R ] 
>> 
endobj
1068 0 obj
<< 
/S /P 
/P 1084 0 R 
/Pg 166 0 R 
/K [ 15 << /Type /MCR /Pg 173 0 R /MCID 0 >> << /Type /MCR /Pg 176 0 R /MCID 0 
>> 
<< /Type /MCR /Pg 179 0 R /MCID 0 >> ] 
>> 
endobj
1069 0 obj
<< 
/S /H3 
/P 568 0 R 
/Pg 179 0 R 
/K 1 
>> 
endobj
1070 0 obj
<< 
/S /P 
/P 1083 0 R 
/Pg 179 0 R 
/K 2 
>> 
endobj
1071 0 obj
<< 
/S /H3 
/P 568 0 R 
/Pg 179 0 R 
/K 3 
>> 
endobj
1072 0 obj
<< 
/S /P 
/P 1082 0 R 
/Pg 179 0 R 
/K 4 
>> 
endobj
1073 0 obj
<< 
/S /P 
/P 1080 0 R 
/Pg 179 0 R 
/K 5 
>> 
endobj
1074 0 obj
<< 
/S /P 
/P 1081 0 R 
/Pg 179 0 R 
/K 6 
>> 
endobj
1075 0 obj
<< 
/S /P 
/P 1077 0 R 
/Pg 179 0 R 
/K 7 
>> 
endobj
1076 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 179 0 R 
/K 8 
>> 
endobj
1077 0 obj
<< 
/S /TD 
/P 1078 0 R 
/K 1075 0 R 
>> 
endobj
1078 0 obj
<< 
/S /TR 
/P 1079 0 R 
/K [ 1080 0 R 10
 81 0 R 1077 0 R ] 
>> 
endobj
1079 0 obj
<< 
/S /Table 
/P 568 0 R 
/K 1078 0 R 
>> 
endobj
1080 0 obj
<< 
/S /TD 
/P 1078 0 R 
/K 1073 0 R 
>> 
endobj
1081 0 obj
<< 
/S /TD 
/P 1078 0 R 
/K 1074 0 R 
>> 
endobj
1082 0 obj
<< 
/S /Quote 
/P 568 0 R 
/K 1072 0 R 
>> 
endobj
1083 0 obj
<< 
/S /Quote 
/P 568 0 R 
/K 1070 0 R 
>> 
endobj
1084 0 obj
<< 
/S /Quote 
/P 568 0 R 
/K 1068 0 R 
>> 
endobj
1085 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 0 
>> 
endobj
1086 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 1 
>> 
endobj
1087 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 2 
>> 
endobj
1088 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 3 
>> 
endobj
1089 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 4 
>> 
endobj
1090 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 5 
>> 
endobj
1091 0 obj
<< 
/S /H2 
/P 568 0 R 
/Pg 166 0 R 
/K 6 
>> 
endobj
1092 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 7 
>> 
endobj
1093 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 8 
>> 
endobj
1094 0 obj
<< 
/S /H2 
 
/P 568 0 R 
/Pg 166 0 R 
/K 9 
>> 
endobj
1095 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 10 
>> 
endobj
1096 0 obj
<< 
/S /H2 
/P 568 0 R 
/Pg 166 0 R 
/K 11 
>> 
endobj
1097 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 166 0 R 
/K 12 
>> 
endobj
1098 0 obj
<< 
/S /H2 
/P 568 0 R 
/Pg 166 0 R 
/K 13 
>> 
endobj
1099 0 obj
<< 
/S /H3 
/P 568 0 R 
/Pg 166 0 R 
/K 14 
>> 
endobj
1100 0 obj
<< 
/S /H1 
/P 568 0 R 
/Pg 148 0 R 
/K 0 
>> 
endobj
1101 0 obj
<< 
/S /H1 
/P 568 0 R 
/Pg 148 0 R 
/K 1 
>> 
endobj
1102 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 148 0 R 
/K 2 
>> 
endobj
1103 0 obj
<< 
/S /H2 
/P 568 0 R 
/Pg 148 0 R 
/K 3 
>> 
endobj
1104 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 148 0 R 
/K 4 
>> 
endobj
1105 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 148 0 R 
/K 5 
>> 
endobj
1106 0 obj
<< 
/S /P 
/P 1131 0 R 
/Pg 148 0 R 
/K 6 
>> 
endobj
1107 0 obj
<< 
/S /Label 
/P 1131 0 R 
/Pg 148 0 R 
/K 7 
>> 
endobj
1108 0 obj
<< 
/S /P 
/P 1132 0 R 
/Pg 148 0 R 
/K 8 
>> 
endobj
1109 0 obj
<< 
/S /Label 
/P 1132 0 R 
/
 Pg 148 0 R 
/K 9 
>> 
endobj
1110 0 obj
<< 
/S /P 
/P 1133 0 R 
/Pg 148 0 R 
/K 10 
>> 
endobj
1111 0 obj
<< 
/S /Label 
/P 1133 0 R 
/Pg 148 0 R 
/K 11 
>> 
endobj
1112 0 obj
<< 
/S /P 
/P 1134 0 R 
/Pg 148 0 R 
/K 12 
>> 
endobj
1113 0 obj
<< 
/S /Label 
/P 1134 0 R 
/Pg 148 0 R 
/K 13 
>> 
endobj
1114 0 obj
<< 
/S /P 
/P 1129 0 R 
/Pg 148 0 R 
/K 14 
>> 
endobj
1115 0 obj
<< 
/S /Label 
/P 1129 0 R 
/Pg 148 0 R 
/K 15 
>> 
endobj
1116 0 obj
<< 
/S /H2 
/P 568 0 R 
/Pg 148 0 R 
/K 16 
>> 
endobj
1117 0 obj
<< 
/S /P 
/P 568 0 R 
/Pg 148 0 R 
/K 17 
>> 
endobj
1118 0 obj
<< 
/S /P 
/P 1127 0 R 
/Pg 148 0 R 
/K 18 
>> 
endobj
1119 0 obj
<< 
/S /Label 
/P 1127 0 R 
/Pg 148 0 R 
/K 19 
>> 
endobj
1120 0 obj
<< 
/S /P 
/P 1128 0 R 
/Pg 148 0 R 
/K 20 
>> 
endobj
1121 0 obj
<< 
/S /Label 
/P 1128 0 R 
/Pg 148 0 R 
/K 21 
>> 
endobj
1122 0 obj
<< 
/S /P 
/P 1125 0 R 
/Pg 148 0 R 
/K 22 
>> 
endobj
1123 0 obj
<< 
/S /Label 
/P 1125 0 R 
/Pg 148 0 R 
/K 23 
>> 
endobj
1124 0 obj
<< 
/S /P 
 
/P 568 0 R 
/Pg 148 0 R 
/K 24 
>> 
endobj
1125 0 obj
<< 
/S /LI 
/P 1126 0 R 
/K [ 1123 0 R 1122 0 R ] 
>> 
endobj
1126 0 obj
<< 
/S /UL 
/P 568 0 R 
/K [ 1127 0 R 1128 0 R 1125 0 R ] 
>> 
endobj
1127 0 obj
<< 
/S /LI 
/P 1126 0 R 
/K [ 1119 0 R 1118 0 R ] 
>> 
endobj
1128 0 obj
<< 
/S /LI 
/P 1126 0 R 
/K [ 1121 0 R 1120 0 R ] 
>> 
endobj
1129 0 obj
<< 
/S /LI 
/P 1130 0 R 
/K [ 1115 0 R 1114 0 R ] 
>> 
endobj
1130 0 obj
<< 
/S /UL 
/P 568 0 R 
/K [ 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1129 0 R ] 
>> 
endobj
1131 0 obj
<< 
/S /LI 
/P 1130 0 R 
/K [ 1107 0 R 1106 0 R ] 
>> 
endobj
1132 0 obj
<< 
/S /LI 
/P 1130 0 R 
/K [ 1109 0 R 1108 0 R ] 
>> 
endobj
1133 0 obj
<< 
/S /LI 
/P 1130 0 R 
/K [ 1111 0 R 1110 0 R ] 
>> 
endobj
1134 0 obj
<< 
/S /LI 
/P 1130 0 R 
/K [ 1113 0 R 1112 0 R ] 
>> 
endobj
1135 0 obj
<< 
/S /P 
/P 1148 0 R 
/Pg 137 0 R 
/K [ 2 << /Type /MCR /Pg 140 0 R /MCID 0 >> ] 
>> 
endobj
1136 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 140 0 R 
/K 1 
>> 
endobj
1137 0 obj
<< 
/S 
 /P 
/P 1147 0 R 
/Pg 140 0 R 
/K 2 
>> 
endobj
1138 0 obj
<< 
/S /P 
/P 1145 0 R 
/Pg 140 0 R 
/K 3 
>> 
endobj
1139 0 obj
<< 
/S /P 
/P 1146 0 R 
/Pg 140 0 R 
/K 4 
>> 
endobj
1140 0 obj
<< 
/S /P 
/P 1142 0 R 
/Pg 140 0 R 
/K 5 
>> 
endobj
1141 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 140 0 R 
/K 6 
>> 
endobj
1142 0 obj
<< 
/S /TD 
/P 1143 0 R 
/K 1140 0 R 
>> 
endobj
1143 0 obj
<< 
/S /TR 
/P 1144 0 R 
/K [ 1145 0 R 1146 0 R 1142 0 R ] 
>> 
endobj
1144 0 obj
<< 
/S /Table 
/P 570 0 R 
/K 1143 0 R 
>> 
endobj
1145 0 obj
<< 
/S /TD 
/P 1143 0 R 
/K 1138 0 R 
>> 
endobj
1146 0 obj
<< 
/S /TD 
/P 1143 0 R 
/K 1139 0 R 
>> 
endobj
1147 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1137 0 R 
>> 
endobj
1148 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1135 0 R 
>> 
endobj
1149 0 obj
<< 
/S /P 
/P 1151 0 R 
/Pg 131 0 R 
/K [ 3 << /Type /MCR /Pg 134 0 R /MCID 0 >> << /Type /MCR /Pg 137 0 R /MCID 0 
>> 
] 
>> 
endobj
1150 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 137 0 R 
/K 1 
>> 
endobj
1151 0 obj
<< 
/S /Quote 
/P 570 0
  R 
/K 1149 0 R 
>> 
endobj
1152 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 131 0 R 
/K 0 
>> 
endobj
1153 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 131 0 R 
/K 1 
>> 
endobj
1154 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 131 0 R 
/K 2 
>> 
endobj
1155 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 122 0 R 
/K 0 
>> 
endobj
1156 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 1 
>> 
endobj
1157 0 obj
<< 
/S /P 
/P 1195 0 R 
/Pg 122 0 R 
/K 2 
>> 
endobj
1158 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 3 
>> 
endobj
1159 0 obj
<< 
/S /P 
/P 1194 0 R 
/Pg 122 0 R 
/K 4 
>> 
endobj
1160 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 5 
>> 
endobj
1161 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 6 
>> 
endobj
1162 0 obj
<< 
/S /P 
/P 1193 0 R 
/Pg 122 0 R 
/K 7 
>> 
endobj
1163 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 8 
>> 
endobj
1164 0 obj
<< 
/S /P 
/P 1192 0 R 
/Pg 122 0 R 
/K 9 
>> 
endobj
1165 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 10 
>> 
endobj
1166 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 11 
>> 
endobj

 1167 0 obj
<< 
/S /P 
/P 1191 0 R 
/Pg 122 0 R 
/K 12 
>> 
endobj
1168 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 13 
>> 
endobj
1169 0 obj
<< 
/S /P 
/P 1190 0 R 
/Pg 122 0 R 
/K 14 
>> 
endobj
1170 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 15 
>> 
endobj
1171 0 obj
<< 
/S /P 
/P 1189 0 R 
/Pg 122 0 R 
/K 16 
>> 
endobj
1172 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 17 
>> 
endobj
1173 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 18 
>> 
endobj
1174 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 122 0 R 
/K 19 
>> 
endobj
1175 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 122 0 R 
/K 20 
>> 
endobj
1176 0 obj
<< 
/S /P 
/P 1186 0 R 
/Pg 122 0 R 
/K 21 
>> 
endobj
1177 0 obj
<< 
/S /Label 
/P 1186 0 R 
/Pg 122 0 R 
/K 22 
>> 
endobj
1178 0 obj
<< 
/S /P 
/P 1187 0 R 
/Pg 122 0 R 
/K 23 
>> 
endobj
1179 0 obj
<< 
/S /Label 
/P 1187 0 R 
/Pg 122 0 R 
/K 24 
>> 
endobj
1180 0 obj
<< 
/S /P 
/P 1188 0 R 
/Pg 122 0 R 
/K 25 
>> 
endobj
1181 0 obj
<< 
/S /Label 
/P 1188 0 R 
/Pg 122 0 R 
/K 26 
>> 
endobj

 1182 0 obj
<< 
/S /P 
/P 1184 0 R 
/Pg 122 0 R 
/K 27 
>> 
endobj
1183 0 obj
<< 
/S /Label 
/P 1184 0 R 
/Pg 122 0 R 
/K 28 
>> 
endobj
1184 0 obj
<< 
/S /LI 
/P 1185 0 R 
/K [ 1183 0 R 1182 0 R ] 
>> 
endobj
1185 0 obj
<< 
/S /UL 
/P 570 0 R 
/K [ 1186 0 R 1187 0 R 1188 0 R 1184 0 R ] 
>> 
endobj
1186 0 obj
<< 
/S /LI 
/P 1185 0 R 
/K [ 1177 0 R 1176 0 R ] 
>> 
endobj
1187 0 obj
<< 
/S /LI 
/P 1185 0 R 
/K [ 1179 0 R 1178 0 R ] 
>> 
endobj
1188 0 obj
<< 
/S /LI 
/P 1185 0 R 
/K [ 1181 0 R 1180 0 R ] 
>> 
endobj
1189 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1171 0 R 
>> 
endobj
1190 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1169 0 R 
>> 
endobj
1191 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1167 0 R 
>> 
endobj
1192 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1164 0 R 
>> 
endobj
1193 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1162 0 R 
>> 
endobj
1194 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1159 0 R 
>> 
endobj
1195 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1157 0 R 
>> 
endobj
1196 0 obj
<< 
/S /P 
/P 1218 0 R 
/Pg 113 0 
 R 
/K [ 12 << /Type /MCR /Pg 116 0 R /MCID 0 >> ] 
>> 
endobj
1197 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 1 
>> 
endobj
1198 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 116 0 R 
/K 2 
>> 
endobj
1199 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 3 
>> 
endobj
1200 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 4 
>> 
endobj
1201 0 obj
<< 
/S /P 
/P 1217 0 R 
/Pg 116 0 R 
/K 5 
>> 
endobj
1202 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 6 
>> 
endobj
1203 0 obj
<< 
/S /P 
/P 1216 0 R 
/Pg 116 0 R 
/K 7 
>> 
endobj
1204 0 obj
<< 
/S /Label 
/P 1216 0 R 
/Pg 116 0 R 
/K 8 
>> 
endobj
1205 0 obj
<< 
/S /P 
/P 1214 0 R 
/Pg 116 0 R 
/K 9 
>> 
endobj
1206 0 obj
<< 
/S /Label 
/P 1214 0 R 
/Pg 116 0 R 
/K 10 
>> 
endobj
1207 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 11 
>> 
endobj
1208 0 obj
<< 
/S /P 
/P 1213 0 R 
/Pg 116 0 R 
/K 12 
>> 
endobj
1209 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 116 0 R 
/K 13 
>> 
endobj
1210 0 obj
<< 
/S /P 
/P 1212 0 R 
/Pg 116 0 R 
/K 14 
>> 
endobj
1211 0 obj
<< 
/S 
 /P 
/P 570 0 R 
/Pg 116 0 R 
/K 15 
>> 
endobj
1212 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1210 0 R 
>> 
endobj
1213 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1208 0 R 
>> 
endobj
1214 0 obj
<< 
/S /LI 
/P 1215 0 R 
/K [ 1206 0 R 1205 0 R ] 
>> 
endobj
1215 0 obj
<< 
/S /UL 
/P 570 0 R 
/K [ 1216 0 R 1214 0 R ] 
>> 
endobj
1216 0 obj
<< 
/S /LI 
/P 1215 0 R 
/K [ 1204 0 R 1203 0 R ] 
>> 
endobj
1217 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1201 0 R 
>> 
endobj
1218 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1196 0 R 
>> 
endobj
1219 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 113 0 R 
/K 0 
>> 
endobj
1220 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 1 
>> 
endobj
1221 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 2 
>> 
endobj
1222 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 3 
>> 
endobj
1223 0 obj
<< 
/S /P 
/P 1232 0 R 
/Pg 113 0 R 
/K 4 
>> 
endobj
1224 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 113 0 R 
/K 5 
>> 
endobj
1225 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 6 
>> 
endobj
1226 0 obj
<< 
/S /P 
/P 1231 0 R
  
/Pg 113 0 R 
/K 7 
>> 
endobj
1227 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 8 
>> 
endobj
1228 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 9 
>> 
endobj
1229 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 113 0 R 
/K 10 
>> 
endobj
1230 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 113 0 R 
/K 11 
>> 
endobj
1231 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1226 0 R 
>> 
endobj
1232 0 obj
<< 
/S /Quote 
/P 570 0 R 
/K 1223 0 R 
>> 
endobj
1233 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 81 0 R 
/K [ 18 << /Type /MCR /Pg 107 0 R /MCID 0 >> ] 
>> 
endobj
1234 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 1 
>> 
endobj
1235 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 107 0 R 
/K 2 
>> 
endobj
1236 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 3 
>> 
endobj
1237 0 obj
<< 
/S /P 
/P 1262 0 R 
/Pg 107 0 R 
/K 4 
>> 
endobj
1238 0 obj
<< 
/S /Label 
/P 1262 0 R 
/Pg 107 0 R 
/K 5 
>> 
endobj
1239 0 obj
<< 
/S /P 
/P 1263 0 R 
/Pg 107 0 R 
/K 6 
>> 
endobj
1240 0 obj
<< 
/S /Label 
/P 1263 0 R 
/Pg 107 0 R 
/K 7 
>> 
endobj
1241 0 obj
<< 
/
 S /P 
/P 1260 0 R 
/Pg 107 0 R 
/K 8 
>> 
endobj
1242 0 obj
<< 
/S /Label 
/P 1260 0 R 
/Pg 107 0 R 
/K 9 
>> 
endobj
1243 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 10 
>> 
endobj
1244 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 11 
>> 
endobj
1245 0 obj
<< 
/S /H3 
/P 570 0 R 
/Pg 107 0 R 
/K 12 
>> 
endobj
1246 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 13 
>> 
endobj
1247 0 obj
<< 
/S /P 
/P 1259 0 R 
/Pg 107 0 R 
/K 14 
>> 
endobj
1248 0 obj
<< 
/S /Label 
/P 1259 0 R 
/Pg 107 0 R 
/K 15 
>> 
endobj
1249 0 obj
<< 
/S /P 
/P 1257 0 R 
/Pg 107 0 R 
/K 16 
>> 
endobj
1250 0 obj
<< 
/S /Label 
/P 1257 0 R 
/Pg 107 0 R 
/K 17 
>> 
endobj
1251 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 18 
>> 
endobj
1252 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 19 
>> 
endobj
1253 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 20 
>> 
endobj
1254 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 107 0 R 
/K 21 
>> 
endobj
1255 0 obj
<< 
/S /P 
/P 1256 0 R 
/Pg 107 0 R 
/K 22 
>> 
endobj
1256 0 obj
<< 
/S /Q
 uote 
/P 570 0 R 
/K 1255 0 R 
>> 
endobj
1257 0 obj
<< 
/S /LI 
/P 1258 0 R 
/K [ 1250 0 R 1249 0 R ] 
>> 
endobj
1258 0 obj
<< 
/S /OL 
/P 570 0 R 
/K [ 1259 0 R 1257 0 R ] 
>> 
endobj
1259 0 obj
<< 
/S /LI 
/P 1258 0 R 
/K [ 1248 0 R 1247 0 R ] 
>> 
endobj
1260 0 obj
<< 
/S /LI 
/P 1261 0 R 
/K [ 1242 0 R 1241 0 R ] 
>> 
endobj
1261 0 obj
<< 
/S /OL 
/P 570 0 R 
/K [ 1262 0 R 1263 0 R 1260 0 R ] 
>> 
endobj
1262 0 obj
<< 
/S /LI 
/P 1261 0 R 
/K [ 1238 0 R 1237 0 R ] 
>> 
endobj
1263 0 obj
<< 
/S /LI 
/P 1261 0 R 
/K [ 1240 0 R 1239 0 R ] 
>> 
endobj
1264 0 obj
<< 
/S /H1 
/P 570 0 R 
/Pg 81 0 R 
/K 0 
>> 
endobj
1265 0 obj
<< 
/S /H1 
/P 570 0 R 
/Pg 81 0 R 
/K 1 
>> 
endobj
1266 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 81 0 R 
/K 2 
>> 
endobj
1267 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 81 0 R 
/K 3 
>> 
endobj
1268 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 81 0 R 
/K 4 
>> 
endobj
1269 0 obj
<< 
/S /P 
/P 1284 0 R 
/Pg 81 0 R 
/K 5 
>> 
endobj
1270 0 obj
<< 
/S /Label 
/P 1284 0 R 
/Pg 81 0 R 
/K 6
  
>> 
endobj
1271 0 obj
<< 
/S /P 
/P 1285 0 R 
/Pg 81 0 R 
/K 7 
>> 
endobj
1272 0 obj
<< 
/S /Label 
/P 1285 0 R 
/Pg 81 0 R 
/K 8 
>> 
endobj
1273 0 obj
<< 
/S /P 
/P 1286 0 R 
/Pg 81 0 R 
/K 9 
>> 
endobj
1274 0 obj
<< 
/S /Label 
/P 1286 0 R 
/Pg 81 0 R 
/K 10 
>> 
endobj
1275 0 obj
<< 
/S /P 
/P 1287 0 R 
/Pg 81 0 R 
/K 11 
>> 
endobj
1276 0 obj
<< 
/S /Label 
/P 1287 0 R 
/Pg 81 0 R 
/K 12 
>> 
endobj
1277 0 obj
<< 
/S /P 
/P 1282 0 R 
/Pg 81 0 R 
/K 13 
>> 
endobj
1278 0 obj
<< 
/S /Label 
/P 1282 0 R 
/Pg 81 0 R 
/K 14 
>> 
endobj
1279 0 obj
<< 
/S /H2 
/P 570 0 R 
/Pg 81 0 R 
/K 15 
>> 
endobj
1280 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 81 0 R 
/K 16 
>> 
endobj
1281 0 obj
<< 
/S /P 
/P 570 0 R 
/Pg 81 0 R 
/K 17 
>> 
endobj
1282 0 obj
<< 
/S /LI 
/P 1283 0 R 
/K [ 1278 0 R 1277 0 R ] 
>> 
endobj
1283 0 obj
<< 
/S /UL 
/P 570 0 R 
/K [ 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1282 0 R ] 
>> 
endobj
1284 0 obj
<< 
/S /LI 
/P 1283 0 R 
/K [ 1270 0 R 1269 0 R ] 
>> 
endobj
1285 0 obj
<<
  
/S /LI 
/P 1283 0 R 
/K [ 1272 0 R 1271 0 R ] 
>> 
endobj
1286 0 obj
<< 
/S /LI 
/P 1283 0 R 
/K [ 1274 0 R 1273 0 R ] 
>> 
endobj
1287 0 obj
<< 
/S /LI 
/P 1283 0 R 
/K [ 1276 0 R 1275 0 R ] 
>> 
endobj
1288 0 obj
<< 
/S /P 
/P 1303 0 R 
/Pg 71 0 R 
/K 0 
>> 
endobj
1289 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 71 0 R 
/K 1 
>> 
endobj
1290 0 obj
<< 
/S /P 
/P 1302 0 R 
/Pg 71 0 R 
/K 2 
>> 
endobj
1291 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 71 0 R 
/K 3 
>> 
endobj
1292 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 71 0 R 
/K 4 
>> 
endobj
1293 0 obj
<< 
/S /P 
/P 1300 0 R 
/Pg 71 0 R 
/K 5 
>> 
endobj
1294 0 obj
<< 
/S /P 
/P 1301 0 R 
/Pg 71 0 R 
/K 6 
>> 
endobj
1295 0 obj
<< 
/S /P 
/P 1297 0 R 
/Pg 71 0 R 
/K 7 
>> 
endobj
1296 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 71 0 R 
/K 8 
>> 
endobj
1297 0 obj
<< 
/S /TD 
/P 1298 0 R 
/K 1295 0 R 
>> 
endobj
1298 0 obj
<< 
/S /TR 
/P 1299 0 R 
/K [ 1300 0 R 1301 0 R 1297 0 R ] 
>> 
endobj
1299 0 obj
<< 
/S /Table 
/P 572 0 R 
/K 1298 0 R 
>> 
endobj
1300 0 obj
<< 

 /S /TD 
/P 1298 0 R 
/K 1293 0 R 
>> 
endobj
1301 0 obj
<< 
/S /TD 
/P 1298 0 R 
/K 1294 0 R 
>> 
endobj
1302 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1290 0 R 
>> 
endobj
1303 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1288 0 R 
>> 
endobj
1304 0 obj
<< 
/S /P 
/P 1310 0 R 
/Pg 65 0 R 
/K [ 8 << /Type /MCR /Pg 68 0 R /MCID 0 >> ] 
>> 
endobj
1305 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 68 0 R 
/K 1 
>> 
endobj
1306 0 obj
<< 
/S /P 
/P 1309 0 R 
/Pg 68 0 R 
/K 2 
>> 
endobj
1307 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 68 0 R 
/K 3 
>> 
endobj
1308 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 68 0 R 
/K 4 
>> 
endobj
1309 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1306 0 R 
>> 
endobj
1310 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1304 0 R 
>> 
endobj
1311 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K [ 9 << /Type /MCR /Pg 65 0 R /MCID 0 >> ] 
>> 
endobj
1312 0 obj
<< 
/S /H2 
/P 572 0 R 
/Pg 65 0 R 
/K 1 
>> 
endobj
1313 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 65 0 R 
/K 2 
>> 
endobj
1314 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 65 0 R 
/K 3 
>> 
e
 ndobj
1315 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 65 0 R 
/K 4 
>> 
endobj
1316 0 obj
<< 
/S /P 
/P 1319 0 R 
/Pg 65 0 R 
/K 5 
>> 
endobj
1317 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 65 0 R 
/K 6 
>> 
endobj
1318 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 65 0 R 
/K 7 
>> 
endobj
1319 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1316 0 R 
>> 
endobj
1320 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K 0 
>> 
endobj
1321 0 obj
<< 
/S /P 
/P 1332 0 R 
/Pg 60 0 R 
/K 1 
>> 
endobj
1322 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K 2 
>> 
endobj
1323 0 obj
<< 
/S /P 
/P 1331 0 R 
/Pg 60 0 R 
/K 3 
>> 
endobj
1324 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K 4 
>> 
endobj
1325 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K 5 
>> 
endobj
1326 0 obj
<< 
/S /P 
/P 1330 0 R 
/Pg 60 0 R 
/K 6 
>> 
endobj
1327 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 60 0 R 
/K 7 
>> 
endobj
1328 0 obj
<< 
/S /P 
/P 1329 0 R 
/Pg 60 0 R 
/K 8 
>> 
endobj
1329 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1328 0 R 
>> 
endobj
1330 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 13
 26 0 R 
>> 
endobj
1331 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1323 0 R 
>> 
endobj
1332 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1321 0 R 
>> 
endobj
1333 0 obj
<< 
/S /P 
/P 1342 0 R 
/Pg 45 0 R 
/K [ 20 << /Type /MCR /Pg 57 0 R /MCID 0 >> ] 
>> 
endobj
1334 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 57 0 R 
/K 1 
>> 
endobj
1335 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 57 0 R 
/K 2 
>> 
endobj
1336 0 obj
<< 
/S /P 
/P 1341 0 R 
/Pg 57 0 R 
/K 3 
>> 
endobj
1337 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 57 0 R 
/K 4 
>> 
endobj
1338 0 obj
<< 
/S /P 
/P 1340 0 R 
/Pg 57 0 R 
/K 5 
>> 
endobj
1339 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 57 0 R 
/K 6 
>> 
endobj
1340 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1338 0 R 
>> 
endobj
1341 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1336 0 R 
>> 
endobj
1342 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1333 0 R 
>> 
endobj
1343 0 obj
<< 
/S /H2 
/P 572 0 R 
/Pg 45 0 R 
/K 0 
>> 
endobj
1344 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 45 0 R 
/K 1 
>> 
endobj
1345 0 obj
<< 
/S /P 
/P 1374 0 R 
/Pg 45 0 R 
/K 2 
>> 
 
endobj
1346 0 obj
<< 
/S /P 
/P 1370 0 R 
/Pg 45 0 R 
/K 3 
>> 
endobj
1347 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 45 0 R 
/K 4 
>> 
endobj
1348 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 45 0 R 
/K 5 
>> 
endobj
1349 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 45 0 R 
/K 6 
>> 
endobj
1350 0 obj
<< 
/S /P 
/P 1365 0 R 
/Pg 45 0 R 
/K 7 
>> 
endobj
1351 0 obj
<< 
/S /Label 
/P 1365 0 R 
/Pg 45 0 R 
/K 8 
>> 
endobj
1352 0 obj
<< 
/S /P 
/P 1366 0 R 
/Pg 45 0 R 
/K 9 
>> 
endobj
1353 0 obj
<< 
/S /Label 
/P 1366 0 R 
/Pg 45 0 R 
/K 10 
>> 
endobj
1354 0 obj
<< 
/S /P 
/P 1367 0 R 
/Pg 45 0 R 
/K 11 
>> 
endobj
1355 0 obj
<< 
/S /Label 
/P 1367 0 R 
/Pg 45 0 R 
/K 12 
>> 
endobj
1356 0 obj
<< 
/S /P 
/P 1368 0 R 
/Pg 45 0 R 
/K 13 
>> 
endobj
1357 0 obj
<< 
/S /Label 
/P 1368 0 R 
/Pg 45 0 R 
/K 14 
>> 
endobj
1358 0 obj
<< 
/S /P 
/P 1369 0 R 
/Pg 45 0 R 
/K 15 
>> 
endobj
1359 0 obj
<< 
/S /Label 
/P 1369 0 R 
/Pg 45 0 R 
/K 16 
>> 
endobj
1360 0 obj
<< 
/S /P 
/P 1363 0 R 
/Pg 45 0 R 
/K 17 
>> 
endobj
1361
  0 obj
<< 
/S /Label 
/P 1363 0 R 
/Pg 45 0 R 
/K 18 
>> 
endobj
1362 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 45 0 R 
/K 19 
>> 
endobj
1363 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1361 0 R 1360 0 R ] 
>> 
endobj
1364 0 obj
<< 
/S /UL 
/P 572 0 R 
/K [ 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R 1363 0 R ] 
>> 
endobj
1365 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1351 0 R 1350 0 R ] 
>> 
endobj
1366 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1353 0 R 1352 0 R ] 
>> 
endobj
1367 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1355 0 R 1354 0 R ] 
>> 
endobj
1368 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1357 0 R 1356 0 R ] 
>> 
endobj
1369 0 obj
<< 
/S /LI 
/P 1364 0 R 
/K [ 1359 0 R 1358 0 R ] 
>> 
endobj
1370 0 obj
<< 
/S /TD 
/P 1371 0 R 
/K 1346 0 R 
>> 
endobj
1371 0 obj
<< 
/S /TR 
/P 1372 0 R 
/K 1370 0 R 
>> 
endobj
1372 0 obj
<< 
/S /Table 
/P 572 0 R 
/K [ 1373 0 R 1371 0 R ] 
>> 
endobj
1373 0 obj
<< 
/S /TR 
/P 1372 0 R 
/K 1374 0 R 
>> 
endobj
1374 0 obj
<< 
/S /TD 
/P 1373 0 R 
/K 1345 0 R 
>> 
endobj
1375 0 
 obj
<< 
/S /P 
/P 1398 0 R 
/Pg 39 0 R 
/K [ 5 << /Type /MCR /Pg 42 0 R /MCID 0 >> ] 
>> 
endobj
1376 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 1 
>> 
endobj
1377 0 obj
<< 
/S /P 
/P 1397 0 R 
/Pg 42 0 R 
/K 2 
>> 
endobj
1378 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 3 
>> 
endobj
1379 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 4 
>> 
endobj
1380 0 obj
<< 
/S /P 
/P 1395 0 R 
/Pg 42 0 R 
/K 5 
>> 
endobj
1381 0 obj
<< 
/S /Label 
/P 1395 0 R 
/Pg 42 0 R 
/K 6 
>> 
endobj
1382 0 obj
<< 
/S /P 
/P 1396 0 R 
/Pg 42 0 R 
/K 7 
>> 
endobj
1383 0 obj
<< 
/S /Label 
/P 1396 0 R 
/Pg 42 0 R 
/K 8 
>> 
endobj
1384 0 obj
<< 
/S /P 
/P 1393 0 R 
/Pg 42 0 R 
/K 9 
>> 
endobj
1385 0 obj
<< 
/S /Label 
/P 1393 0 R 
/Pg 42 0 R 
/K 10 
>> 
endobj
1386 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 11 
>> 
endobj
1387 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 12 
>> 
endobj
1388 0 obj
<< 
/S /P 
/P 1392 0 R 
/Pg 42 0 R 
/K 13 
>> 
endobj
1389 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 42 0 R 
/K 14 
>> 

 endobj
1390 0 obj
<< 
/S /P 
/P 1391 0 R 
/Pg 42 0 R 
/K 15 
>> 
endobj
1391 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1390 0 R 
>> 
endobj
1392 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1388 0 R 
>> 
endobj
1393 0 obj
<< 
/S /LI 
/P 1394 0 R 
/K [ 1385 0 R 1384 0 R ] 
>> 
endobj
1394 0 obj
<< 
/S /OL 
/P 572 0 R 
/K [ 1395 0 R 1396 0 R 1393 0 R ] 
>> 
endobj
1395 0 obj
<< 
/S /LI 
/P 1394 0 R 
/K [ 1381 0 R 1380 0 R ] 
>> 
endobj
1396 0 obj
<< 
/S /LI 
/P 1394 0 R 
/K [ 1383 0 R 1382 0 R ] 
>> 
endobj
1397 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1377 0 R 
>> 
endobj
1398 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1375 0 R 
>> 
endobj
1399 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 39 0 R 
/K 0 
>> 
endobj
1400 0 obj
<< 
/S /P 
/P 1405 0 R 
/Pg 39 0 R 
/K 1 
>> 
endobj
1401 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 39 0 R 
/K 2 
>> 
endobj
1402 0 obj
<< 
/S /P 
/P 1404 0 R 
/Pg 39 0 R 
/K 3 
>> 
endobj
1403 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 39 0 R 
/K 4 
>> 
endobj
1404 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1402 0 R 
>> 
endob
 j
1405 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1400 0 R 
>> 
endobj
1406 0 obj
<< 
/S /P 
/P 1420 0 R 
/Pg 36 0 R 
/K 0 
>> 
endobj
1407 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 36 0 R 
/K 1 
>> 
endobj
1408 0 obj
<< 
/S /P 
/P 1419 0 R 
/Pg 36 0 R 
/K 2 
>> 
endobj
1409 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 36 0 R 
/K 3 
>> 
endobj
1410 0 obj
<< 
/S /P 
/P 1418 0 R 
/Pg 36 0 R 
/K 4 
>> 
endobj
1411 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 36 0 R 
/K 5 
>> 
endobj
1412 0 obj
<< 
/S /P 
/P 1417 0 R 
/Pg 36 0 R 
/K 6 
>> 
endobj
1413 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 36 0 R 
/K 7 
>> 
endobj
1414 0 obj
<< 
/S /P 
/P 1416 0 R 
/Pg 36 0 R 
/K 8 
>> 
endobj
1415 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 36 0 R 
/K 9 
>> 
endobj
1416 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1414 0 R 
>> 
endobj
1417 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1412 0 R 
>> 
endobj
1418 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1410 0 R 
>> 
endobj
1419 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1408 0 R 
>> 
endobj
1420 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1406 0 R 
 
>> 
endobj
1421 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 0 
>> 
endobj
1422 0 obj
<< 
/S /P 
/P 1434 0 R 
/Pg 30 0 R 
/K 1 
>> 
endobj
1423 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 2 
>> 
endobj
1424 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 3 
>> 
endobj
1425 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 4 
>> 
endobj
1426 0 obj
<< 
/S /H2 
/P 572 0 R 
/Pg 30 0 R 
/K 5 
>> 
endobj
1427 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 6 
>> 
endobj
1428 0 obj
<< 
/S /P 
/P 1433 0 R 
/Pg 30 0 R 
/K 7 
>> 
endobj
1429 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 8 
>> 
endobj
1430 0 obj
<< 
/S /P 
/P 1432 0 R 
/Pg 30 0 R 
/K 9 
>> 
endobj
1431 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 30 0 R 
/K 10 
>> 
endobj
1432 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1430 0 R 
>> 
endobj
1433 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1428 0 R 
>> 
endobj
1434 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1422 0 R 
>> 
endobj
1435 0 obj
<< 
/S /P 
/P 1442 0 R 
/Pg 18 0 R 
/K [ 6 << /Type /MCR /Pg 27 0 R /MCID 0 >> ] 
>> 
endo
 bj
1436 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 27 0 R 
/K 1 
>> 
endobj
1437 0 obj
<< 
/S /P 
/P 1441 0 R 
/Pg 27 0 R 
/K 2 
>> 
endobj
1438 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 27 0 R 
/K 3 
>> 
endobj
1439 0 obj
<< 
/S /P 
/P 1440 0 R 
/Pg 27 0 R 
/K 4 
>> 
endobj
1440 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1439 0 R 
>> 
endobj
1441 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1437 0 R 
>> 
endobj
1442 0 obj
<< 
/S /Quote 
/P 572 0 R 
/K 1435 0 R 
>> 
endobj
1443 0 obj
<< 
/S /H1 
/P 572 0 R 
/Pg 18 0 R 
/K 0 
>> 
endobj
1444 0 obj
<< 
/S /H1 
/P 572 0 R 
/Pg 18 0 R 
/K 1 
>> 
endobj
1445 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 18 0 R 
/K 2 
>> 
endobj
1446 0 obj
<< 
/S /H2 
/P 572 0 R 
/Pg 18 0 R 
/K 3 
>> 
endobj
1447 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 18 0 R 
/K 4 
>> 
endobj
1448 0 obj
<< 
/S /P 
/P 572 0 R 
/Pg 18 0 R 
/K 5 
>> 
endobj
1449 0 obj
<< 
/S /P 
/P 570 0 R 
>> 
endobj
1450 0 obj
<< 
/S /P 
/P 568 0 R 
>> 
endobj
1451 0 obj
<< 
/S /P 
/P 566 0 R 
>> 
endobj
1452 0 obj
<< 
/S /P 
/P 562 0 R 
>> 

 endobj
1453 0 obj
[ 
1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 
1462 0 R 1463 0 R 
]
endobj
1454 0 obj
<< 
/Subtype /Link 
/Rect [ 50 539.00391 189.99036 564 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 1 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/introduction.html)>> 
>> 
endobj
1455 0 obj
<< 
/Subtype /Link 
/Rect [ 50 495.00391 390.05286 520 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>> 
>> 
endobj
1456 0 obj
<< 
/Subtype /Link 
/Rect [ 50 451.00391 462.12463 476 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>> 
>> 
endobj
1457 0 obj
<< 
/Subtype /Link 
/Rect [ 50 407.00391 494.06812 432 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://ww
 w-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>> 
>> 
endobj
1458 0 obj
<< 
/Subtype /Link 
/Rect [ 50 378.00391 131.35925 403 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>> 
>> 
endobj
1459 0 obj
<< 
/Subtype /Link 
/Rect [ 50 334.00391 274.0625 359 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 187 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html)>> 
>> 
endobj
1460 0 obj
<< 
/Subtype /Link 
/Rect [ 86 254.00391 351.06577 273 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 247 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)>> 
>> 
endobj
1461 0 obj
<< 
/Subtype /Link 
/Rect [ 86 218.00391 306.06659 237 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 259 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/makeoperators.html)>> 
>> 
en
 dobj
1462 0 obj
<< 
/Subtype /Link 
/Rect [ 86 182.00391 193.02716 201 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 286 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)>> 
>> 
endobj
1463 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 114.00391 451.7252 129 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
1464 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Helvetica-Bold 
/Encoding /WinAnsiEncoding 
>> 
endobj
1465 0 obj
<< /Filter /FlateDecode /Length 1466 0 R >> 
stream
+H��T�n�0���<B%���UU��(څB#x(�Ԥ��𦬖��I�٤U��jG���3g<�fGG�jqq����lA~��B�g����t�Rp���
%$�% /J��&���jA��
��      ��N��C$��
+��ݢ.j����y
+>'�K���|Ǐ���m��"�Ľ6C��I
II�]�'�ܵd����9OvR� �Rz����e
+6��0��7p���
�.9��iC�+�Ր�r�׆K�SF���]T��o��6��yebP�[��R�҈�1�#}�E��ujӟ����x%Ηy��f�yf9e���,�j��1�(�f�־�=�����U^6���.Ţ����'�M%�x/�Ȁ*��ج&��M��B{��E#��@A�u;�Y�z__�yFF��96��ȶ̿y��UM�B4<������t���V��:��e�l����\�=��F��'M㪛<}'8=���
 Z�d �b��ăAU�������?k�w��
+&z�d�,0��^��tXL�UP�*�$�S񐜋�|e�w��cR�5����fn���        
-�|�ey���-��H�t�-�mݢ�S��=�~R�@��p�h�F�+�,��
+�=�c;�𥾟�����        �X�^ɢn�>�n[��#�z
'�-qyk��2��[��f���}�7��� 
7=�錊5}b�kp�A�����m�6�a��l^���u6-��VE�տÿk�u]bۇ�k]׌�܄] �>Ķ�\}�Lv��`�S
endstream
endobj
1466 0 obj
768 
endobj
1467 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Times-Italic 
/Encoding /WinAnsiEncoding 
>> 
endobj
1468 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Helvetica 
/Encoding /WinAnsiEncoding 
>> 
endobj
1469 0 obj
<< /Type /XObject /Subtype /Image /Width 432 /Height 108 /BitsPerComponent 8 
/ColorSpace 1474 0 R /Filter /FlateDecode /Length 1473 0 R /ID 1472 0 R >> 
stream
+H��Wmv�
+�ov�d�{��[@ 
��3��XyϷGBT�������Z�m?������P/)�*3��?��1K���)]FGӨpڥ1#��uߥ�%o�rJ����^��N��4�k�Qi��d9E�-KV>E��z�����>ࣼ
+b%v(2�{�t���-蓱#���D`�)\��z� ��y���)Ž?�zu�L�
+a��1�72qRBY�(iT��JG�I�l3�U��5�+-%�u�M�#�W�$�VŶN��\��{�z��@�a������+�zq/�0��E��JN��%��O��Nu�j>���%�Ke
 j(�ǿ��KB�j+�T��-�_�4³^1�����W��6 7��o)١�q�����z�Q�I�f�T�5Ԫ&��H��
\����)����Cw�_�L�g=���X�;1�&�^�2��
�`4#μ��)�8k-�D,��]_�j��|�^�����k�JzV]V�W�����ڌe���v8on����r�7"���>��,�i(���Iu4�{�n����?���Ќ�c}����Q/x��CY`3��2��T�⡯��^i�@"٨�
+l����b�����E����G�40JA�����~�������k�At<����;2�&
�I�"�,h|���o�b���?����z.j�f}1�nC;N^��� 
�#�z:�_k8*`�}�����`�!__��.I���E8C�4�^      
�ӫQ�j0���t&z�j�L0fʣ�쥣����R���(�)a��z
Qb�S�&�2�+��kYk^B:��Pz�N���L]3G�J��     
e��`u�p�q0B�MDQ���Pp�)J:�,;7�`���}��@op���
��q�֔�V:�д|�|��u���W���Qhui��s��и@׍X�L�'�M���r>Km��d|O�]�J�.���k=�*庌g����sr]���6�mQ�?�3�me��-��ko�k��%?��^�����=z����z�]0֫����s`�7�$��I�$�KgoT��ܟ
-R����G�����?Z��C�/�����WK<������0-�U�*o���Wᦲ)sK3�^�,����x��_��O�
 �WM��A�˩�?@�����R/tI��� :��m�\�X����E�3�f�'�
+�S�Zgx=-��x�z��
+���e�0���W�����^%=r�e�E8p
������
�S)E\7��,���`��WN�%Q�Q�pi�\h�5�Pj��V@i�� ���Bb#z����o��ۯ 
/A�U<%G�+��j�\X�XR��t�LP/�<����+x�����=�K��*r����&�t�^�M��~~�&�W%^k�0i}�|�q�M�n�{��EK\��w��P�4<\������
   
R�q�ԏ֦�/���e�5W#<���^Ϸ���v�8�I=�-�W�ȵV�u�ob�m!�-���K�)OS�^�׌���J���'�"^m���U�ˊ{�
�����'mm)�g������by��z�E�/�k1�)?�\�Y�۾�Fo|��fz�
%�q�l�x������nwi�UwW�f��HWnHM��(�e,X�U��%~
+�+��@bo��`Wj��4dO�>���s돟+��:B��K��`zI&����ÓE�Y�^��8QܦO�G��
EͿ��D�q��HkA/Gi���n��[,��(T�&�
��1k��4p��?�v6���6�8�D���3GM�]�Kt�NKza
+�zY,�0,o*$�/����H�ԫب��C�̏4^_n�+2�P���      �YX�K�Z�ѫD�[d���V�O 
`�d��М�W�;LӒ���
�5�?�G7/��tĸ�#�ϯ�B��%��(|��X�������:�)T��2�����izx�         
�~���]��þJ0GG����V����"J�+�`,���f��xC��v3D���������fi6iO�%�ʀpl/�����h�W��x
�*�k��֦�ޒXm��fT-d�f<�:��%{r��zE[J`M�bƍ�Vf�F���v�굔–T8�F<_�כ��R�V������]r�z���n��\�&�(xI��)��;'ܻ^YnWzIu��=�g�/vƨ���K�p�Z

�\~�L�*\z�B�V�>s��Lr�Μc*�����}�W�ڟ�7An��g��\z�P�9�����1���6��c��<����"7��{�CNS�ڋ\
       ��2W�|?Դ{�1N}�  �4̫����sE!�#��?�^�jq���g�s3��`����Sbq
+&3�
+�/�"��x�9v��\3!ԟ��n��+�,��(O1RA��[�E��b}���
�h�
+zM��r(�z���e�+�rNzD�RJ$�i�1�~�]�l����U.Y�<m���~����Q�g\�r@��O����V��t.��Z#d�'�
 ���G�����_o��@���3g�
�L�h��C�i�.bm̕���������E�g<~�$~.]����W
p���9����^�m�׫�*3;[����х6��\���U�:����^��?__�k#����^ϣ�7�/l��k�����[�z�^u�?V���\�5^w�^���.S���u������3�r�MR<
+<�Fr��+�K{�+�Ҫ�E@I���~A|�����0ӫz�꫒�\Ł����_
M_����;c�،>
�d_M�"�!<��O�fQU�0�˦ᛧG��2W�0�?�^��j�M�NA�YȚ`���{��Q�q��$�d 
BYA�F�t?�A-���v�y3Z�11���j�5\_���S
+�z��Z��\���e��w����R!6���gÐ!K����X�{
+�^�����+�ˁ{��O�y>w��>'��-%L9����   oA�~dHH��cO���U5|
W]����¸��W8���WG�Ym}��F�������u3f�X^G[f4��ޤחq�h�����W���~��YM��
�b�~2hv��w��nDc;Gv���}��c�F���n/\6��@1�<6�����q� 
��XY�L��Q��s��'�굃��K����y�v�~��K�[x!tǣ�m�C���_EU��`14�'�m�Q(�%���@_^ 
    @|�$�>��Կ��
�"��lȝ�B�s����� �(��������8����%�}{�V��i|�)��x)�ZC�����(��^���   
L�DK�K܃t*|w
+�{�g�\�kz
P����,i=��}�7 ���5�i��t��c��t�;Ϟ���k��I����/����>̶ 
�����3��Ax��#��l�ឞ�R]O:��b��DGf�%w�
+|�P7��U�k��k�W�L��KM��
!8�R�B//�*�r}���4����5����E�e��Mc&Z�5��}e�u���ݘ6�Y�����*+�h�M��
+?��q�
�}�I=[�J�4�9��Hu�
�U��:�ڡ^��6
+����^�&���A��R�r �
+7G6Ȧ�+"���?��/pb���M���D3��\�̙�gT�@P�>.V�ʞWC���ڇ~�T��s�r��� ��A�q���
+�a߅^��R��8K��Xϸ�>�� 
��YB����*)�-L�Vƈ�J�O��D���:�c�js[�a����%�胔�t�Z�m�7���H)[�^/�Q�_83��o),B�[���-K�E�Ӧ��.;[�ɪ^��~����1���N_a�
�dq4f�g��5Ij�T�*�.Y�_zq�u�FX�� 
��*�����v�ғ��đezIX$�0d<���@��GY#���Z���R1�YWB���lĠ�JS�G�kEMss�F�2"�2�����>�"LzE>�ٙ�1s�
t��J쌑��,�)���GL�a׮ȱ����<�+��N�n�
M/�����V/�^�5�=��S仫�.���I��5��p5�E����P��N/�
+:�!��b?"���>A�uy;���/�*��ʗ�1sYҲ��!�~�
+���UMO���]��yH�^v$O� ���
+V`�p����Ud�Zf��K2���wK
`�����9�wu@G�PPוO�E�s���d�Ε��j/��u�V9����/l��S�"��
���I�X�\F#��({Y~R����/��[��������5��/����7�ߧW-Q_7ſ�հ�����f{��d��ok��v�
�-�����]�=��)��\��c��fczaz��u    r�5r�&v�
�7q��2��7��YF[N�����P�)v�XN(l's_�F���o�Bc�;rT�N���ڜ�H,�Q���ğ4��X�jt�J@:/�,B����ѹ��
vW휆�]Q���Cϙ�jd����ne�K�gb&C���#�/Q�a�-\m�a`Bi�/�@0�L�!�`�|
D�pVw��^��Y����^�����+�t!�\��n*��T�1���w��bp�[Il:ʱK)H�cQ̪�6�H���z#W�ף�`a��d���S�v�������k?��`B���
endstream
endobj
1470 0 obj
192 
endobj
1471 0 obj
<< /Length 1470 0
  R >> 
stream
+�������������������������������ϳ����Ť�����������������w�����h�����Y�����J�����;�y��x+�p��o�f��e
���f
endstream
endobj
1472 0 obj
(�;f �/J�!'�)
endobj
1473 0 obj
4599 
endobj
1474 0 obj
[ 
/Indexed /DeviceRGB 63 1471 0 R 
]
endobj
1475 0 obj
(�������ݛ��B:�U)
endobj
1 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 468 0 R 
/StructParents 1 
/Annots 2 0 R 
/Contents 6 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F17 395 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 8 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
2 0 obj
[ 
3 0 R 4 0 R 5 0 R 
]
endobj
3 0 obj
<< 
/Subtype /Link 
/Rect [ 388.6705 287.00391 427.54776 
 302 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 286 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)>> 
>> 
endobj
4 0 obj
<< 
/Subtype /Link 
/Rect [ 344.78015 227.00391 416.71152 242 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete)>> 
/Border [ 0 0 0 ] 
>> 
endobj
5 0 obj
<< 
/Subtype /Link 
/Rect [ 251.0524 77.00391 319.10565 92 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>> 
>> 
endobj
6 0 obj
<< /Filter /FlateDecode /Length 7 0 R >> 
stream
+H��Wێ�F��C!/'ER7rp���Y��$,�`�"[R'M6��Y/��9��m��
�s�4��N�s�8�g����wo)�~���E��iB�/�hVdde���D�i2�p,�4ɩHh6�PYG��:�魉~��?�E�����Q����(�"���I�m�����$��ѻ��b�Ë������h�߀oiQ��d�ҴH�y:�iQG7���{Zt�
  �^/���x6�a���Ut��xk����4|�~�g�xL8�H���L�tҗ=�aA�y^����rT���e� ?���E�8�    
  �je�ݓY��w�Q��s����/#Y�@����ܐ�$C�����f�6�a+-�V����  
�JS��,>��mU�%�qs���y4֋��ˈV:w@�Y��!�o6����   
���Q�;I��eE���]~�ggI�s��<�s����'<�x<-��y�HjU��CW�
���U�ᧆ�4�Ίy�cH�ȶ���P8CʱL��I�(���G6����p%�o��XQ/#��ZI�
+�^�Rq_��p���w��)��SOB》_d���M�(�g
+����Nmd��) '�T�}�'Q�;��'�!�7ZԆ��)�!�U-��
+�@�W8^=1�*�
�����i��N^F܊'I;�����������ʶՠ&g���6Γ|�hR��]�*�AJP��:���&�����~g�I)�K|*���V��dS�m
+R�Yt~k�{E]SI��u"���r�ic��p�U�����-
��UC�l�UЅ��QÁ!5����j�e
@i��ˈ�_a��kL���x��Jtݘf��
+Jx���7*�1�Mgɋ/�&��z(4S���PU�B����m���Y|<��p_)$�x���
�ekI,q�ϱ8�RH�F�Z��u�f�L-Ѩ�(fժ2��t�+Mzi9�_      
?�P+�aw�o�p�~�z�QS���o( 
��((�P;�.������o�'Ta��y<�'S��"��tLu4���t2�ϟ���U{�"=���VgcP��1��&�?}
�z�脁�Ō�&qZ$GGŭ�q�x"L�,��g'
��?���zu�Y\���=�|:�*C�h���2#�_cd6��K��F��u`F�����O�����Xz�B�0���T�~��|��61������[�u-�����d��$�,;7'�a���g/6g|��x�!ț�>=�>}
9_���<w�e�|ސ4N������!T�yޕ)v�cׂ�x�� �#ǝ1*�2泯b��ϕ�A����-�R�T�S��l�
s�I��5����s����֫�����F�0W.E��qMװNy�3�;`���
����]S����B��
+�z߇bԞ=|^���F:��'�[��2b�[˳���\gs�=�~����v�+����9T�Մ�`v��#��$��.�6 b�d
�������$Nm�����#��S�t�Z(��IY�P�Ǫ�h����5�}��9n9��:.sp�U�%�.l�'j�
t�y�Ap��lkU�        
t���2��GVgSQ6��I�c��i]������rߖ�2վW���-oG<�I7���Yr�JA�8ewZ�Oҝ���T�+ȟ 
;�V�ׯ����`�( ���si��,�������hn�Sއ�1���8^N�hA0@�o:�۟��{��^~�*�!{�
�P����|�j���V�}{;�v�!�h��3���ht�1O��:�W�#�Vz9�|1����oR@�ٝ-_�oi2ʊ�DA��,��f����C�
  0�q
endstream
endobj
7 0 obj
1809 
endobj
8 0 obj
(�v�[�™�٪�G*)
endobj
9 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 468 0 R 
/StructParents 2 
/Annots 10 0 R 
/Contents 16 0 R 
/Resou
 rces << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 8 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
10 0 obj
[ 
11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 
]
endobj
11 0 obj
<< 
/Subtype /Link 
/Rect [ 324.91556 711.00391 358.36124 726 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete)>> 
/Border [ 0 0 0 ] 
>> 
endobj
12 0 obj
<< 
/Subtype /Link 
/Rect [ 50 645.00391 192.79782 660 ] 
/A << /S /URI /URI (mailto:pete@acl.lanl.gov)>> 
/Border [ 0 0 0 ] 
>> 
endobj
13 0 obj
<< 
/Subtype /Link 
/Rect [ 264.46063 605.00391 308 620 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
14 0 obj
<< 
/Subtype /Link 
/Rect [ 311 605.00391 347.53937 620 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>> 
>> 
endobj
15 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 579.00391 451
 .7252 594 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
16 0 obj
<< /Filter /FlateDecode /Length 17 0 R >> 
stream
+H��T�r�6��þ�N,��L����ȉs�ӱ2H�$� ����ۻ����R]x�e���s޽yގo� 
��o���8���e����xm�
+"�_�� A�U(��k��l�3rF���j��������@@�!� �)�󢄪     �z+̨
ي�[+�������G7n����W�-�i+@�� `�z��{�����M��y�=��ҧ��� "YY��-~��Gx�A
A�R�4��Ƅ4�&�ӂ��0��{_��      ���D�7���W��9�?u
�WV�Zڕ�Li�7p7��,��´$Y��nupvw]]劉0#�v�bV:m��j�k7뗰�?we�G�����(&����h��
+ji罵R��Y���߈�uF���iL; 
�J�n�S�u��l����g\8hY���0���Wg��7/���ҳ�/>�޴\�Y�K��q7��!
|�{����K���P(��ax�·k�[       �A�׭Ҽ��rX�ZǕ�o>�tJpTRå ؔ�jH�P*�YR�(�
+T-�˼8��q� � 
ݺ�J��$qTd�J:�į|���"K����G#4"�kv�r��v};ƒ����},KH�EdQ~3�=���������(��u#�����1�O𒜤q�<=bmw��|?��0�I��ϑfayR@ZP���!f�R����v���YSN�G
+c�m�\�LYJa�-�S���'�u����2
��������%{��,�%��"h
6�z�x�\��ޟH�(2���ʹ�2����,���-���l#�*�R�I4�r�����qlz4
+Y�d!�d�%���vߧC~�P
endstream
endobj
17 0 obj
863 
endobj
18 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 468 0 R 
/PZ 1.16928 
/StructParents 3 
/Annots 19 0 R 
/Contents 24 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F10 1464 0 R /F4 397 0 R 
/F18 398 0 R /F15 396 0 R /F17 395 0 R 
/F12 1468 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
19 0 obj
[ 
20 0 R 21 0 R 22 0 R 23 0 R 
]
endobj
20 0 obj
<< 
/Subtype /Link 
/Rect [ 54.73438 538.81657 113.92923 551.6416 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#intro)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�intro)>> 
/Border [ 0 0 0 ] 
>> 
endobj
21 0 obj
<< 
/Subtype /Link 
/Rect [ 54.73438 523.42253 104.61375 536.24756 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#template\
s)>> 
/A << /S /GoTo /D (     ���gW��+��s�
 s�templates)>> 
/Border [ 0 0 0 ] 
>> 
endobj
22 0 obj
<< 
/Subtype /Link 
/Rect [ 54.73438 508.02849 176.42741 520.85352 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#parsetre\
es)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�parsetrees)>> 
/Border [ 0 0 0 ] 
>> 
endobj
23 0 obj
<< 
/Subtype /Link 
/Rect [ 54.73438 492.63445 129.55391 505.45947 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#lookahea\
d)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�lookahead)>> 
/Border [ 0 0 0 ] 
>> 
endobj
24 0 obj
<< /Filter /FlateDecode /Length 25 0 R >> 
stream
+H��W�n�6}���5�mL�ԷWh�t��`i'l?�b`$�f+�*E����w����R��f��@��{ι�辦O��g'o^�Ϟ���'�'`$�(�
 $~3YD�8!�(aQ��v���$c� 
e8?�2���0��Iy�o*��K�sN�N�&3�2���_H/�A��%7r-NT�����2-��0.���Yn6�G��B�<�3��CCDc�B�*���4;��3�,/�G�'g擐%0����Y�����V]]�o&t%k������P��T�*�}
JI��G4=O�aDX��XH'�6�6�|\���?9   �$�
`�g8�   �?�� 
ű�0�0�OR������uE�}P�C&�G�`�����d����D���VE����5.T���������؈�Z���XLh��Qe�j�?��'$/ť#j!�hmo�
      bl��!��-�,�%�s�
+t��� 

+�#d)��7c� �����V�����Ŷ�_����]�zӑC��0Zp|��y�]�p����v
+n��^�
|�����\|��a�#ݢ���ˎ/E��,����8>b-J�T8o���p�h��T��
��������.�&����8nÜo!{|�/Z�y_Tf�
�Th�Zj^UB������R�,01�j0��v��4}R@,�YK�̘O�!�B��O{��D!s
���������R�6�,�B �w��1��W�Ў����Y���6WX��p��N��N��-�v��G        
�|6l0�0��ʱU�1�]�(D107��·I�    �䄘�A����
�Vz�2���4M�������Sº�jm����/g���������F���f������+����<�A|�B�L4�E���zƘ���я����N\%SS�$N�hd���+
J�2�n�����0c�%x��nؑ���=�{e���ۏ���[��m_�Cs���xpnYK�� 
J�o9=�B@���I��.��(���I6€`}8/��ؚŁt�$��62�mg���B)x
]�o?�X
+��|����b8�aN�8�d]��6�f%�յQ����dP��v7�����Z�WN��C<��v�d<��awv�]%nM�0�Ļ�Z2��7�o���F�2����f��!B׼$</
 ���d����VҬ�F�^\�MV�*aqD�HC]?P�e�K����Y2�����Ǒ���j~�
endstream
endobj
25 0 obj
1247 
endobj
26 0 obj
(       ���gW��+��s�s�)
endobj
27 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 468 0 R 
/PZ 1.16928 
/StructParents 4 
/Contents 28 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
28 0 obj
<< /Filter /FlateDecode /Length 29 0 R >> 
stream
+H��Wo�F�|��뚟�Y������rR���V��G]E6f[���%NZ]?{g׋��$u�JW"9��{�v�-v�OOݫ�>�޿���'�$z���ÈBH�$����G�0�d��P;�3�'�x��qbU�����|Ɣ�9H��<Hoqq�독���xI"�3i���'a���?"�GHg����������ua?�M#�KD��$J��,�=Bj���-�[!�Ul�jec,K�
:���Ą��������� =0�?�\a61g2Û����eEq�d�a=�
S�xWz��Eݨ��;�Z��)�J�?a�EQ����kr�&Mfm���z��Q�a�5�l���4������J��i��Y��O�#�C��ִT&�l�N�odiD+s��R(f��n�j�x��b��IO���/o�d�<SU��ri1�$�E��M�
�W#�e�\^]8�ʙ�Ι�m1EdS���ʹ�1I|jl�w�L¢Ě�l>gu�_X
��XUb���Q8[�   �7��Y��֌z)ѧ��(uV�1�~l8�~�?��&�x'[
�-�Gb+�]&y6�v
 W<��藢1�Jm��\����Za�;��k����~� ,���:ڢ�4u�XOߠ�8����w�P�$�V�lu����
+\�f/�I��
��U��q�        �E$     hGl�4 ]��X
�>r��s�U�[O�{��c�?�]�M��ݩJ���B�C��γ9�=jG 
�4yVU��I�'_n�uQTy�X�k�K���Bf�a)���f�ߺ���ί�Eq 
|�5Bb��D7�kf�_�o���o�n<6d�Nc�*�k�X�@lKj�Xs�ն�F�il�l���tB��5�ߔ����c�{Cơ�˜>y�yiL
     !O��f�q��F�o����xO�lp�t<�c��   
��S��G�{�8<�˷�c,}9z���Kb�a�{�DP2���}�'k_Ϻ�[���I��uҵ:��:;v+��U��Nq�V�����<����C��$&AXu�|]_����X.�H3��,�}*E�>��*er�k�>h:�P�l1�R��.�c�I4)�����"Sq���d7
��;g���UnR�Y��A������7pi�y��G4��_�
+01á�
endstream
endobj
29 0 obj
1131 
endobj
30 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 467 0 R 
/PZ 1.16928 
/StructParents 5 
/Annots 31 0 R 
/Contents 34 0 R 
/Resources << /Font << /F10 1464 0 R /F18 398 0 R /F15 396 0 R /F17 395 0 R 
/F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
31 0 obj
[ 
32 0 R 33 0 R 
]
endobj
32 0 obj
<< 
/Subtype /Link 
/Rect [ 42.76123 442.82095 88.65366 455.64598 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#template\
s)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�templates)>> 
/Border [ 0 0 0 ] 
>> 
endobj
33 0 obj
<< 
/Subtype /Link 
/Rect [ 411.52954 442.82095 462.39038 455.64598 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#parsetre\
es)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�parsetrees)>> 
/Border [ 0 0 0 ] 
>> 
endobj
34 0 obj
<< /Filter /FlateDecode /Leng
 th 35 0 R >> 
stream
+H��W�n�F}��(�آ$R$E;-�8N7��M�폲0F�H���phE-�g�CҒ,ű�+�%��9��s?���E�����4�~�W�/�ߜ��F�УQ��a�Q��(��C�
���t~zN��j��������       
�n�e��Z��h��VN��0�!M�X<I�m�o���Ѝ#h�t����p�4ɝ��L
+�m�H��,UE+].��i-*Zke�,Ht���H1�rN���gX-񯥤�,W���e��h)n%M%��e>U����(f����Wg�G^L�w4y~b�%��J-�nejJ]��T�
+a��w\M����N�.��.��B4!8�s��(�)�qn�������g�:�����}��`}�Yw�ۙs⺮*�Q"S�������J�W�:��3�yɉ*
���^ܳ�Aw4qx'��Y�3��8��utz��g��7�(���C��_�
��٭�yi�^���9yF�4����ҝ�ɳ��ƟG�����`�S_8�A_��   4T��n"Y!       ~�����Q�b+��
��
+�\�r&I%N���TT�b��k�ԭ�$�.���rS6��T��Te UVlZ~V��%�p.u
+��q�2��+���b�R�8y.6ȑ�2��!
�Hz��r�{֝m�n,�g����S��$��Á;�4>/N���vM�Ѯ*�LAQ�iE�%�YU"�b���u�#j@ْ�(�+CR��i��>�Vh�(Z*��#Zp��kҼ�
+��m�%8Ƕ�9;�U��҄Y\��d =Ŧ�@9�1��2%oY�p%"�Gbi�'��,��R�"2��T1�X��'�)�ѢH�� 
�p�QM�;�~Hȁ���{�����'�e�e�f��Tq-�D���5a�z.6�Y��2��*��Z�Y�kS�W�+VGY�� 
+�
+15u�H���n1�wz�5)kC�H��K�%�
dž�59�aR$VTuf��t[r���þ�ς���f��KBjM������w 8q��
+:�c�=ekzV��;�ܪc�9�=+��Խ��(Ţ8EV�Y=��Q8p�Q�Y�ߢ��{YR]�2,�e���_/7
i���Y���g��H2�6��n�ƺUs�B�?:(��8�5
�_����ϿhFۙb4��8����0��W��������݅�����h��h��e�A��a�4��]|w�{wE       
��,��?V�l&4Jߴ)�A\�I�8�–�μE��)è���7�M�������z���&6h����{��Z���GU��'&��-|z��Ǡ+
�}�u�~ 
1��.��46����M3~�"E�s�q>�81�陲͍��E��@&C���8�(D|��'�@wJ��]$�ʑ��2��,��2%���zť��Ӊ�)k���4�������c���5�Wh^�A(m[��31]wD���Sr�K6�>ð]6�Jq߈����Z52F��G?���.0gĎ���|9��
'mH�ϲ��gY�Nj�f~�G{���w/?\�\�|���?&'��
Z�f%o�V�����{�[�yh$iK��
 
l�1�U=�p:��������C[/^�Sw�P!�e��7��k���A�qw\�b)�37-}��AQ��A���!�obm��n�c���js
���*�9��z���Ss�@���|Y*_"R����M��F 
_B�H �����__���K�k
+�÷��^>o��Ϻxs��%w�'}-@^��㧏C��� 
nf�%F^�0Pn��钚z��p����&~z��1&���~�ɼ-�5�����gM�ؖ7�c�M��6��O�U���k[�K�J�4�C
��v��X1�������p7p��n ���9��q׹,�R�\��Bc��kB?)���McF�b�Т��b�𤆸�Ȫsz%�O
]�B`���Թ*p�b�pơ��Նti���_��=��1��"�\�u��(o�U��1��W����ζ�4y����!h�8��������<�����\_������
���
endstream
endobj
35 0 obj
2020 
endobj
36 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 467 0 R 
/PZ 1.16928 
/StructParents 6 
/Contents 37 0 R 
/Resources << /Font << /F8 1467 0 R /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 
1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
37 0 obj
<< /Filter /FlateDecode /Length 38 0 R >> 
stream
+H��V�n�F����%�yy'E��C�4i* 
U�ɕ�1��,WR�"���.I��Ď"4%.�vΜ��Օ����+���^��q�8Q@�� 
�I���AB�4�!�|$q�9��p^�̟��
���J�����R*�`Z�w��~>��xx����\8�O�4��>
Ie!�AH�^��x�i���8��KZ��j:�T��|���������{ʕy�?�����w%4�����lr~    
�}\�;�ưI�      b�fYb�(���M�ԐKQk�̵T��6m�{�
_{�KJ6Ճ���h�d?��~����5��>ֲ����m�?i��qi.��c�v��]q����o��4N�h[�g��x~�/�s��4��l�����r�����
  ��t���RR�\�b�mv��i��tyRL
ik��؏��%��ع}{�[��;�B=Bik☲t�{�͌���
��f-U{a�$�ì��S��L�'2�vg@���A�M7.*^2�_�n~�ʔS!���퉢����f59���5�b��A
+����Hh�iJ�4�
+��ņ鋥�r-�@d@#4>Ι����*3���h
��Ə԰S�(�q.�����.�5�^�������q�禥�x�9��|��#��,�B���FE�11����P�9bY�#�$M�a
g7Ez�����T�h>��(�*7\��0�缆9���R�"�Ӳ܌L\
�       ��>��y3E
����H�^JI��]H��0qT�]�|�@K�Üm1hn��`���*�\���@MM"���N�p/����̄� ]̗��d
{E*���ˏ�G�c���ŧ�.�2�'��V(l�-ki�}Yc�#�7
fL0�M�"��9�NFj/x���$����i%y��V���Y�����
�7�mؙ��P�/
���0�u?=Z��tx?"^8�l-ޙ��3ʭ.`ovX��.co"Vk�����g������o>�֘8����\j�p�T�^
+p�ܷ½S_�{��k�dT�8���1�T?/i0Ǿ²�|>��a�E����韨V�h~?���B�@�Hk� 
��t����a�$~�V��        ʑ�vw���r(�^�t���д��Փ�)�ƭ~'��j�4�������I���;      
�V�����3���~�JG��2Ձ�o��%(�W��ݲo֩#%�Hz� �~�M��9Ҹ�W�|&L� 
+��C?���$C��+�+�h?X�EQ��
+��g�-�\1�V\k&&��L�i��Y���V�`��mU9q�5��,�) 
���k����2-L)�H����g��fx��q?0�_�b7���/�6گ��-hrÜrsY��'�2�ї�f˺��7���#x��7Sri+`�Ԃ
t0ۘp�          
��6�\�j������)AKB�T�d&W~�X�b��w[�d�%Br�'@���{n���#�Q�����U�_��(V
endstream
endobj
38 0 obj
1489 
endobj
39 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 467 0 R 
/PZ 1.16928 
/StructParents 7 
/Contents 40 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
40 0 obj
<< /Filter /FlateDecode /Length 41 0 R >> 
stream
+H��W[o�H���JZ_�1&i��R�����C�{��=�x������17AM��ɘ��\p?����/߾..���K�$�����`L�8�
 
�|��1(���*�U�x`>j��T�5��B*^2�x�;�?�9���m�M���$�G��=w�#���Qi�|�����N�/Fj�Ju"2����,��fC��$;���4;#%IG9�`Ơ�ޤb0����*��˯+�x�@�
�F��}a�n@KX�5vK���bk)Z2�q����2��c�MokF E��Bn�Tņ��k.+��.�!        
��I>m�hU��ՂY��T�Xc��j�wb��k^����O��ē��5��HR+NM��/��U��j�Tc
���Z��FO���Թz�{x��2}�$?F��d=����&_��Fd��\�%��u�!@��_,����n]H 
}�������|��D��6������ڳ������ޜ�l%�_�|�|���     ~�N���t��c��:Mt��
+�،o�*�B)&��u(�!���$=a�ń�
+����
�MNW
���bhV�q�\�-�̱Efkv֖�ﵖ�a����6r��8cX�:.��D�`�oY1l��i��Tm�0[i($RV��E�t����c�Z$^USbkʮ���C�����=����(��c�}��[�b����3�x�-�%��:|��j&��N{�둛^qG/���1���8Iƻ�c��JhS�V�Ny��a�0�l6��k@�+&E��<d�Eԯ�_s�WT����a���`���>��������l}3�@;��ks=��ZY珅����.���af<֕n���N����������o�S���m
���e���1�پ�>�]`E[����[֠Mt����ݜ=6   �ƹ��d|;;�ç*?Ip��+�[�(�t�s
+�kiBl�93�j�p1��`.UI�׎bM+�F��륙S���M�6%Y23���D�{���Q;h�[p���ִ���G�6��#mvy˜Ms|VDO�~�p�iV�a:�����Ku���7!�]a��΀������
�ߞm��\��M�*��Qk�H����c��c$V@X"�ij��x�^A�B
8�'SxE�J�`�۔��W�`�5�L�$L�l��Z�S��l6C��(\���d!�����ٔ���5�̝�e��.�02h�3'�N����
 q}����d�����.
+�
+0t��
endstream
endobj
41 0 obj
1264 
endobj
42 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 467 0 R 
/PZ 1.16928 
/StructParents 8 
/Contents 43 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
43 0 obj
<< /Filter /FlateDecode /Length 44 0 R >> 
stream
+H��Wko������imJ��t�����Q�Fh?\^\�ȕ�͒˻\JQ��wf����K�)���9s汓�w�&w7�>�޿�o��;��Ƒ�C��(�!�#7�����Q���?@�|�;S�?����7.�~��Ң�F��p&?{!x0_��9]�t��x���3�n3��37
�~�n��ͼt.������Νۻg2��܈�ĝ���~�:��B��k^�Ys�UY
�54�7��m8�e����j�ns��%4m��\���C
+��48%�Da����+/~�d��Gf�|W�K�O?�o�=,�n�[��^�0��?\L&@��d2�tb�p.D%�`R|�訊���ƚU
+cx�/_����F�d
G����n��y{����C�7����#|�Զ��i�.F�\J��gmUp-w�ZA�(� 
�!�j�'�o`�E��JV��E���XU@ά4_*͡Ph.鹪�(6�� �\�����"�
ӂ-$wϒ��a���i'��Z�J4��@M�
+#;D��&g
Iv�+�+c=�Ֆ�e+/a��gNk�Ao*�T���_\��ֵB��'� 
⁇{&t�~����4�%�dM�Zm+�LK�Ʌ���9�UY�ju�Q��*�5Ƿ��5��r����~�D���   
���.�h�U�{h�V]�|7H��Sz�U� �@�]?�g?�Y�����h\�V�$E�o�l��u�#
�~xql�a�ՠ٪c�4�"�Ar���f������Q���\H�g���&�#GH<�_�K����ڷ��9��%f_E�5/0���G߂ҏ:��ԙC��cΤ/uƟ��4�a%�}���P��^`uڧs�Ϥ
j��J��"�`�9k%�B�%
�XQ{ӗ:w������1>�*��Q*t
�+�Xm��J�
+��
�;�L�Fo)��_�n�*�����?͜���ؔ����֨�����B}�d��>'��E��˥�[iD��MA1�(�� 
���k"9s�z���V��o>;`�l(�:��w
+��<�r�66�͏?�e�����ǰ/V��i�`5R��uW��������>�Ģ��(V]�E��v[bIP���v)Vk
�J�E�E����2��E�����W�59��[�3R��x��y�K5�m=J�٨   
�'�Q�<u��V����c�6`M�6���Vd�'ϵ*0��jqG֌�a��*�%�:����1���p�Q#lĐ���'(��(�Em��9�����^�[;�cG��v�"���Ks&It��9vc*�]���ʨƟ4����3�Ǘ����RI�3��6��^?��b<5x�gc�!?@u��_�h�v!q����(��q�<�}�Ѝ�t��SFy}0ş�ÂÁ���mZ&��'�<�Y���'a<���#o����<�Je�~��������<��
fU�D�u?FV���H�E�}�}??�{���}:s�0I�#Ǫe�`�Y����8���⿾�u��M��T1&�V<�
��<ǂ�
5�m�_�����   u:��~���J|[�h�9-V��á�K>��k��2��
 ��G2|}Bza�z���s��1Ҏ����>�ܵD�O&���K�~n2
{�9�0��=��"tj��+��L~㘆b�o�T���DiAV��
+n��eK�r���(�dj       �����nx��5|���J��J>�ϹƁ
�v'�\?}D���ד�v��BƸ��tY.]�*��f�w��ה��I�3�d1��M)!��Hi^�����7���Ķ�ٵ�\�1����g���>
endstream
endobj
44 0 obj
1783 
endobj
45 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 467 0 R 
/PZ 1.16928 
/StructParents 9 
/Annots 46 0 R 
/Contents 49 0 R 
/Resources << /Font << /F10 1464 0 R /F14 399 0 R /F15 396 0 R /F17 395 0 R 
/F12 1468 0 R >> 
/XObject << /Im10 56 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
46 0 obj
[ 
47 0 R 48 0 R 
]
endobj
47 0 obj
<< 
/Subtype /Link 
/Rect [ 110.26509 643.09718 150.50655 655.92223 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#fig-simp\
le-parse-tree)>> 
>> 
endobj
48 0 obj
<< 
/Subtype /Link 
 
/Rect [ 521.94516 428.20865 552.52385 441.03368 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#performa\
nce-advantages)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�performance-advantages)>> 
/Border [ 0 0 0 ] 
>> 
endobj
49 0 obj
<< /Filter /FlateDecode /Length 50 0 R >> 
stream
+H��W�r�6}�~m�ĢH��d2;ɶ;�4M�鏪�Q���-�;�g�@ʒ,g��:�I|���`�=}�j|}��[�ׯ���+�S?KCJ�ďҌ���~�e
       
ɂЧi�ɽ_��ƻ�x1���x㏼bZ��j�����$Rx��a@B2Y��Ii>6�C�~B��n3\dQ�gAP�I�}�k�o�h�����}�ճ�g���{w}�?
�C8p�3g�C�Ȣ��w�]Jg�����INʶ�ۦڒN�9�m��ZT\*�[�t�g�����"
�t'�6h��j;Yr󋑵l���>���    
�Ø��d����lA�v�^��;g`�QBi����U�z�V����X��ؒ��M�rE�"7L
+6�8iXm����j�ʰ�؆E��f�V֡=�ߙ�5�5�
�y�JA6lk�D:f�S�ѫo߰��ʸᜀz@�r�7�m�\"�5sbn�dI_��OӸ0`�{g�r�?0Ԕ���HնkD�A�[V�+d��ָ�D�c?6�w�.�
B�srud&90S�]�T8X�!{=*-���z@v�'dC��X����"�����e`+$)z.���^�� 
M��*��0�Ʃ�Gyn1l�V�1�09oЬHj�
���N�)���d/�5�^�A����d)%4���$Y��4�HY{�j����~>�*�k�s�
+�F�iJ���a�6"�)      
/��I����I��=�_K\�~����o�7���Vw��|`�w�ݡ�~msn�YM=�H4m32]$0��.-څV����%��h�+-;�U�c+i����V\�?�NJ8�y�σ�����4}"�Y̛GFQn�O��z����B��k�"���g/
�g#�u9}�~=7_�|\a�ّ3蒰(�~�d��G<�S?+rj
��iR�?L����04W������X�F�E+k֔v"�;;��6h|�h�yf�����{�_9S_��
��=2?�ޯ�%)�?�_���ύ�_��ע�]�|�'��J�u����0B�|E��{����#���WĽ��;F��#�9���W�y5�7��5�O�o7���sW�a���[�D-�����F�۩gJy���]����h4�
 ����`�>���P�$N�H�0I#0q�PȒ(�[{�� 
rLl�!��sC�,�ծa�PM��Kt���o�n�"��a��z�sPM#L�so�
Uv�Ȓ��?���K<g�\OX�ETI44�M��'Yb���
 ��If�`�A�܈��zm��hl�� o��Ӑ�č��7�[��L��]1@[3      Y�� 1�T�hJ      
P;]�J��d�{�"'� }$Dy���:��l
(D%��ڔ�����     ֍�� 
ڥ�_��$��`|&q�(�EDp؝i�n�͞<�:�������}�?���������|�s��L!9�<=�"����x���}�,z4���N
     ��b�W���-g76p�s�,�������\��/򘼄�������   �p��e�>2���
q��F65F���=y8��b
�O���/~��r��r��i����}gNC��4�"�!���4��R�:=�N��=�ꋩ�:c��̡�7L·#�a������p�ҧf�
 
����}C��pL�a�ʶ�x������A�j01��[�2�?�������}As��"(���|�\6�DF�@(�lP����x��1�K'$w��'
L�YgedC'
CvzP�|kňB���[k�D&H]�%�s�Y�����f�Q����;uLWF�l׻����
 
��j�7�Sihj��9���V������������Gu�uk}AHlPJe�FB�V�D>�PUV2s�lcB�A4��M(��������hp$��q���ʚ3�
����^���;\!)�8$�� 
|�v3�y��{zV�?=���q������"���w6�`�[��/����_�ei��s��88����LL*v�2 
�x�����j�V
+�V")Lƨ��gi>6�C���%�<����n�L:�_�J]�KV���m`pL��a`�5��TG��;��z}1o6���Ȗ
�|VV~Ś�_�7��*�oU���5�|<���t]��3�p�Q��oa0�����D4���p�{�����
endstream
endobj
50 0 obj
2129 
endobj
51 0 obj
768 
endobj
52 0 obj
<< /Length 51 0 R >> 
stream
+��������������������������������������������������ϥ�������������ǟ�ƞ�������������꼼���������ᴴ������ڭ�ت�������������ѧ�П�ǟ������Ɲ�Ę����������������r��r��q�����p�����������������i���{{{{{byyyyyax��ss\r��rrrrr[qqqqqZp��p��i��hhhhhSb{{ayy__L^^^]]K[rrZqqUUUUUDUUCTTCShhSSCRffL__K^^EVVDUUCTTCCCCC6=LL;JJ::.99977,6CC00000'.::.99...,77'00&00&&&$$$&&$$
                        
+
+
endstream
endobj
53 0 obj
[ 
/Indexed /DeviceRGB 255 52 0 R 
]
endobj
54 0 obj
1135 
endobj
55 0 obj
(���E����ق�#\\)
endobj
56 0 obj
<< /Type /XObject /Subtype /Image /Width 134 /Height 72 /BitsPerComponent 8 
/ColorSpace 53 0 R /Filter /FlateDecode /Length 54 0 R /ID 55 0 R >> 
stream
+H���{E�s%��R�hkQK)zA�`CE��������J.ZE΀
        )��j���ݽ�\����}���<��f潙�ٙX�yE�w'1�6�\Z��1��q�0D�
!��Q4�5p�1����PL�:w�B��\�T$y/�Q�~�IqJ,[�xP�bI)9�a���{2�
�Y�U��DBQ�ն�z
�EQp�h�̕#��1��a��X@C<�?o;��х�,���ˁK��q!b��eYɗ���
+��D�0���FW/����>����1$퇋!m=L��a(Y�_�XV����8Ne^�{���w�`�7�83�Tz�
P�q����M������P4���<��(u;�b��      c       ك���,�jc=�ČuhC� ۲�ň�����
`U���MPV��������U�`$�C����Ӓ
xQ|�>>��W�����>J����a�k_fU��au�N;7��צ0���5���� 
�1��yٸ���gB��Y_���ח{k{{P����6�����51z�;�������AC�3�������ah�G�c�]�ich��-��@C{N�Go�3ۿ�R�B#E��
 
�0ƒP�B#\��†�z1|��yi;�;��ׁ����Ɠ�WCbXs��u�6j���`��<���.TۯI��L"2/o+Q4�x�)�t]em:
     �#ӶM:��H�~��d�M��4 .�@���M*`IZ
u�"OH���O�h��Ijqik#b
2�q�!���¤�QM��2�%��B6n��^��`J���IlrE�U�%�E�e�
 ���.ҢF��jQ�I��Oٟ4\b����2,�\���/N3]��:.����ud),�$���
�͇���jS-�p7Y�4(ƫ��T)��;͌�&&�NE�"�:Q�j����*<�E��t⧿>l&r�������3��1��~�(����fu9At��8n1�_N�����KS�#7
    ���Y�\w��<k֬�[|o�B(��3���;�Ӡ�Hovf�����
���Ԍ=s��
+
����    ��vU'��������mM�c�����]�f`T�]K�%���H�KHN������X�IZ�%��:E}{�/
0J��
endstream
endobj
57 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 473 0 R 
/PZ 1.16928 
/StructParents 10 
/Contents 58 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
58 0 obj
<< /Filter /FlateDecode /Length 59 0 R >> 
stream
+H��W�n�6~���U8�MYw�
,i�X֮3��P�2m��%���xE��;��Qd7Kf���9�wn��_\ط�o��./��͵���$
+��xa�B�ď���C�0A2�sȭ��5�kp��LP���u!
+ɷLK�������n�g�3    ��$�ZL7�<�����1�[k��l��r��    
�����4ޗ��,�j!в�t�����+l��0�ܧgFn+�Kol>��J�p��[�ڎ�֓.q� 
j��m0shp��:��֥5"��|    ��"DZ�w3�nn�-�@���࢐�r����I��
L����0��bU?�����N��Af ��rJ�*���Z$"I��QW�����:�B������j�&�b���q�        
�S���J*��*��cs��     ��1L�QX_���%[�J�/�Y!���,ʦ�
�s�$�ݨU�D�y��q��p{l<EA{����`�*�B�
+�!fT�e�>�s�+�S�W��I�.l��c�
+]     �{UQ���)�c�
+�p�.��;��_[ՙp�X�d�"��֢�Y�����.��Y�[��!�p�^��O�P#��{�
��[���eG�cXT0��L���V��ՠ��w�}�n�d��+�a*r�[�+T�C�}Is��ϼ��'
rQ8�6,59�a�Mt?���]Ȍ��
+��zc��v�g0�OLG���l(�>����ף��lB�;4>�o6����eFEV՜�QQ��ɕLv�\�,Cg@my�d���c�*�0->S��u����L9]�:g��Z-����<�7�_��
�*%�����I�Nx�Ǿ�S~x��Tԣ�忼*:!V����ޮ�)wJ'l�]
2�t+u�&k��~��?��w�(CD�����A�5���G�xd��xoܦ'0&I��4��.�a�     
�Ŭfg�*��$�ܰ�֦J�}l6�3#,+�%L�b����C8D��J��R9N��jRs݅��m%ޕ�Cejޗ騞7�`]����u�5h)���
p�k�nj�;,zy��8�0��ޡX��K]zn�@�Z�i='�
�5%���V&�l�M:��4�Z������QGVy�C��o��]���q2�=D0��g̐�;L�u�T,>!W�.<�I�t���V������dx
-j���%����ue�Y���_�e\��\�Z@X,�xZ��f~�
+��cg<�+�}^ˢ 5�;G�y���R���O�97Z�3���v���     
�4d]������\o�Q��d���Ql`qR��2��3��Įk�7s�v��o�jQ�W�G��
endstream
endobj
59 0 obj
1347 
endobj
60 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 473 0 R 
/PZ 1.16928 
/StructParents 11 
/Annots 61 0 R 
/Contents 63 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
61 0 obj
[ 
62 0 R 
]
endobj
62 0 obj
<< 
/Subtype /Link 
/Rect [ 440.48114 47.34973 518.62904 60.17476 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html#ineffici\
ent-loops)>> 
/A << /S /GoTo /D (     ���gW��+��s�s�inefficient-loops)>> 
/Border [ 0 0 0 ] 
>> 
endobj
63 0 obj
<< /Filter /FlateDecode /Length 64 0 R >> 
stream
+H��Wے����C?�{�q��6���)oI�Yփ�J͂CrdCc��h����$�%�R��%�A_O�>���?=~�5�����~t~qB�%��C�
 N|����IA�z̏�*�|���y=q\��?Hp��E��܊GU�J���d�t���`2�Ó��jz���<�%�g�t��� 
aQ��0Y9�;0
+
+xQ�YJ
�R��B�&K�Ե�/W�,�S���/�0�_6�8��ԩA
����ݬ�,M!�m�Z3xT��3Q]N>:�B?�ɷ0��������ע�P/E�1��j]Ȝ1�i�N�T%�g�K)4�$�Q
���]��nu���k�/��f�Z(�J���)��V�FU@7b���Ҏ�}���
+=s.x�k��eq�
��r��-dɋ^,_a5����~3q�<=:�=j�5����=Mjeq�1?AXQO_��j�v}��ޮGGE�����=�����Ӧ@���/<
�x�^�ї�^<� �^N/���M/�����"�/��|��c/bY�ƶ�r;9/�
��u�P�%ᡡ�Ȧ~�^��=�|��/\P���˲�5����B/��k��&�Y"
�Xh��|]�<�q��F,�¬5<W���Ǻ<pPպTrM�v���O�6��.x.��ܕ�p���W?d^w��?���(M�)fM�ج
o���M����,
�I;tj�*���JQÖ�O�Kp��DQ�������P�Ν�����Ȱ _�w 
��~�m����kVS�oE�0�AWi��;���
�o����MW���}3��������M�<����N���td,qݤ�ik��"��p�Bya��~F��0R�ݙn�H�E1�C0�׊�n(�>������ʍ���K@S�~حEGI�/h`�+��^T�?)󹬴^-6vQ�z9b/d��&ˋ�����
 
��i�l�80Ҳ��?o�Ji�D2���3ҁ�۔���(C��e�_���ԲŁcd�UŖ�0��H@����z��T�4cY�\�A5W$N��E�
+��Py�k�      �k�rG�H�M{�J��#�S�b+����ɭƑ�   =��Q�r��v ���
��@Pm�Z��D".vdC��y� R7v���#9g�C�U�ώt**i�u����1�D��0�a5���-e�a�(,
���Ӷ������%�h �!��^B�spu���%�-KyJT����8��19ڻ(�:�v9
u�ԃ��)���s&0)d&�K��?E�M2�c�Fd��,�I�tY���vY�7�o#�9Q�N��*�מ?b�T�Ls�t_��0t7H_���_���o�?
:�z����a�pi`!J��VȎ�^��}�9�l�󕍟���<KBݾ��
�H]L�(��^�=����`Å鋟�vy�~�D,����z�$X(��Q�d���+�܏�^ML
����_���ϕ0��lo���I�9��0����x1���31��%U�j�]#�����i 
���sQ�a�D�b��:ny��wG(�a����c̆�
���xaH�t�߽O(.9\�3\�ʺ�l����$ei5FOx�#���
 ��3$�G#����$��ᮉ�aw�p�?�m����l�HF�X���.,a!�U�`4��\���hRIS     
�<�B�7�U�>�tl����=ݝu�l�"?�өu�+�w@y�� 
���܊GU�J"W2�JR9��h-����*T��@��$um!޽���   ���v [...]
+^l����h�o���Q�����Ҭ
+䘌6�7u|�d?z���Ɩ1�[?��x��S[��
+0�3YP
endstream
endobj
64 0 obj
1854 
endobj
65 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 473 0 R 
/PZ 1.16928 
/StructParents 12 
/Contents 66 0 R 
/Resources << /Font << /F8 1467 0 R /F10 1464 0 R /F18 398 0 R /F15 396 0 R 
/F17 395 0 R 
/F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
66 0 obj
<< /Filter /FlateDecode /Length 67 0 R >> 
stream
+H��W�r�6}������!��H��f&q���$m�j�����$$���em���{.@ʲ�$���e  �_��s/�_���~�
��Kz��u�9'"K��1J��&I*�Y6�l�$��dU��wTG�gѐ��]፦h�AU��[um*c�F9�
�:�g�l�ó�_v�b)�c�g�؛���d�T�i<��&z������fkE�nkU�hS�;|b�j�h-�]*�
��֪$];C����ɺ�G�̒$9��"Z�(*�4�[�F��oճ��(�8�i��f�=UuaJ�xGf�,r45�4�P����nTy�R���m�Q��G�!:��H�j��3d,�m�q��3��O/�P��j}��N��#�B���Ś*��2,՝�����X9���eiV��
�
+�$
+U�*�����r�ԝ*Z����,�yw
���D�{�|�:
�F�PL����ؿ�aL�X��ģ�֘O�J��J��LL:�h�U���D�I���K*Lku0/�$��%~�z�֏C��ـ۟[���#*�R׺��:�/��rQ�{�d=O6Ɵ�]x�p-�����Y���?·ڴ�T�CЏ@�8i瑻
 ��L�
+�"���ۦ���ֵ����ݡ�Jc��yޝ�Pk�*�c��'����$�K|��dq��;��>�R]����h:�v�~�%cO���}4��8�~��fUS�9|jz(��i�����됧{��h����z��vVn�b!�D���Ì}V,'
 }�m_
�i�$]Z���N�h����:&�)H�|҃��$GQ'8p�rm`Un�'�K,Z�[�>pF=�t�'!p�杬�겐Uev
AM�'Q+��K�����        ��;��њ���n�`�{������ƙv�Qva
�Uot]�_xJ��}�x�d�U�i,|�<b�zz.<�Z赪��N#�Y�J��W��
s�ģ�2:�����$��8NGAHj��6*b6��%�g�s\K�����������Ld�C;�
+�:�dzh�Wt8���̮��E�5O�a��#�CY;��
�t򹧱�}́��Gǝn����ހ=���ދf��������^�5O(qF�W�i]
2�Q���B�s��}:�-Tɪ%c���]:l�>ϣV��~V.��T�n��+<
+S��<���/qO/��8��{V`Lj�M�]]�  i�<Z"
֒�O�@[ݫ��mk�պ�݁�<P��p��"���ga�6��*�s��9�p����U�ycVR"!Oʎw�J�Z\��.�RmgʲNK��B���_��5c
�`l+���<���8�s����׊m]�$�X��x�8���CT�C��Z��ߵ�B5���7�F:ĺ���u@�U��a#�p:u���
j��6XDW.P��u��5��[b��8���*��c�;�s���‰ʏ�p���� �i��x�N7����?�Z�]������Q
+M�K���K�e��h��"·�gSы 2a�>�=|qJ�a�G����]I������9��}��s~��d����}��
���o9Oү:;������3���ee$�1"��t�����Y����iigڪ�V��%o��ï2�OΈ9�8�0'�c�?K�=���u�]�7�8?P�[l}�
�T���/8+��>,eX�&�${��e66��Ug   
K�`v���4��r�G"�ĩ��oNKY�J�=4���-���"���F��-X���g�x�`X�^x`
b���N��Q[9���ڭ1ܑ��#��oMuBYhh;�����;����ø��2��K�i�)��y:�2/�GB��%�t���ǩ�t�J�׵��׵�XL�<<}zӳ�{n�Q'5��S��ԉ<�UK4mx�A���K26�7L��"]~��3����h�<`�]��X�>\���JB\����X�ro
 '$�M�>a?�g-���^���
+pf�gXLt
+�@2ME��.�s۫�`��]�����E%*YWben�k��
�9�*���m�v�
+�R<d:Σ8�?���A�b&��*�^��߿�wW��0:
i
endstream
endobj
67 0 obj
2026 
endobj
68 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 473 0 R 
/PZ 1.16928 
/StructParents 13 
/Contents 69 0 R 
/Resources << /Font << /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
69 0 obj
<< /Filter /FlateDecode /Length 70 0 R >> 
stream
+H��W]o�6���iKڄ��o7�C�(�m!��P06-k�E���x���wIJ�-m��b     "uyϹ�����
����k���^_{z1%YR�����$β� 
$4MR����Z��0�›<�o�����h��\�z���_�B(g8��������!)�(�a��,"I\Dx�H��M��N���x!
   cZ@��'�����.���(
+}���RoF�
+�x�m2\�
K�T}����.9�{��_c���L���I֭|�jH�nɺ� �`.�\��p     
3u7��$�5~qy�p�0���,�M;Ӻ�.0��j'�/�Ր�q����,�O�U7��PL�
+I2@����
N��w"�<��G r1�Y��я-S�;+uSz7�מ�������6�q�ޓ� 
&y`�AG��a�Zl�5�{.'b�d��?=�pWWW�\H��E���/�'@�k���J�Zׄ5�ƙ�8�   
)�D�Nb���lt
+�a�����(r��<�
+��i�E�E�����[>�Fr��j�˺WP7����ju�b��1�Ȝ�?A���G�%|&�u|zD
��l�K������(��e�IiZ2��`���a�5���� NI�I@�������Z#f$�i�荃p�=     
LV�o5*ˈu��.1r��g�U=g�}-�Dŭ&�0�f��Q��ń�Tke:#B��k�,u-,z���b�$�S�%���zH�m"y����(
+�=DG��P�m:��,ha�R�10�.��0��y       �ڀZ�I͚�/�� ^J�8�g�v� 
j�{̀�%��E����_0�M}'����3�w7�u-͑��^�iH�,�SxK��m�5�f�c���g��vi�mk6�:��d\����*�j2��%6���q�I4�a�}�uv�}I7�~�%[Lq
 �m�3���$�<���Y�[��m�����E��vM�eY����f 
:�8�|�~�-p~�l6F,�K��&z�9�@�̸�0kv���Q�Ҧ�zn���� 
_��9�we(��Y[�)9���7�����9���>�GL�ڞ�nǔ���ɑ�
C=n{�9a��;�������łqޛ~w��l��1[�8 q��{U�����b|b       
�N���葡,�{_��R���(w���j�h�
+��%���+��e$-���>��rxC�I�g7��+��Ԉ�RΝUX�!�ʝp��?����)�=<�w!=����
+�so�Vi�;K<�ILT��M>WR�Z��K.�T�N������Z/G��^��qCDSb
a��4�mH%�����        �5�ﶱ�\/,Z��-p|
+���O�R�h>�������_�`<�
endstream
endobj
70 0 obj
1347 
endobj
71 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 473 0 R 
/PZ 1.16928 
/StructParents 14 
/Annots 72 0 R 
/Contents 79 0 R 
/Resources << /Font << /F8 1467 0 R /F18 398 0 R /F15 396 0 R /F17 395 0 R /F12 
1468 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 26 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
72 0 obj
[ 
73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 
]
endobj
73 0 obj
<< 
/Subtype /Link 
/Rect [ 309.29195 346.77188 366.16383 359.59691 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>> 
>> 
endobj
74 0 obj
<< 
/Subtype /Link 
/Rect [ 292.49399 317.69424 422.17358 330.51927 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 247 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)>> 
>> 
endobj
75 0 obj
<< 
/Subtype /Link 
/Rect [
  254.23145 269.80167 284.15189 282.62669 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 1 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/introduction.html)>> 
>> 
endobj
76 0 obj
<< 
/Subtype /Link 
/Rect [ 286.71756 269.80167 323.95349 282.62669 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
77 0 obj
<< 
/Subtype /Link 
/Rect [ 326.51917 269.80167 357.76854 282.62669 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>> 
>> 
endobj
78 0 obj
<< 
/Subtype /Link 
/Rect [ 181.37221 247.56583 430.62776 260.39085 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
79 0 obj
<< /Filter /FlateDecode /Length 80 0 R >> 
stream
+H��Wms�8��;|�i�Qb����@��q�r��} 
��j"�K����p���v�����đ׻����J�9:�����Ft|L/~=�>{!gI�s
+#�    ���,L�����xŤ���c��coD�O�q�����0�J��E�U)�V3����#�i|  
��̾��&��Y��s�_'��,���,N��ƥ�7��������<���I���P���^MIώ��ξ��
�x�C��nj,��+���e�Ə�f�h_/�i5�sU͏�s��a���$�
lsyكx+�Ua>��ք3�FI��7e�Ѭ�C�����r��0+�4��7�u���q{���=���y�Z�YHM.C�ذF��U�@����Q@c=�����ox��W
+؇��w���^IQ� �ZMMY,i��e�
K_.���u&U]ֺ��N�6����"�9�A����%�L^������/�}5��Ak�Z�<wJy>�k��v�
�{��š����*��+CGG�@čB`'��x�����S��������������<�]1_U4��Ԣ8 uI�֍� 
*�����P�j��Z�        2Z(��r�����.��Օ����\h[�D)��%��j�6u����V
"ÿ�s)����)EˉW�e��Ք��Wm��ŵ}�,T���bmsTH���0$�lщ�
+����
b�R9.ruy�l+�|;SQ5k�H�P\R�����~^����v�n��wA��4I�F�P�L�Z��(�����
+֚P     𶔠�P_EK���ꓤ;ӕ�,�i�͘m�v����gY��!���'@���U    
}��򎏐%[>�״�k3R�us>v�zU�VП�WV*`}`{rU�C!���LU�ޜ�O7�9Y6j�Y�X�x`P�%�V�:^\���oވEYњ��c�#���w�G���2�3?�
 LY�g�^�̏�t�Vx�Kh�8~9B���n4�����WJCK'O�w.I�Lm��
�w�h�h�lQc��F�QO��[�hH�7t>(74�z�ެ��m6zsS4^e���r$�|I���@���@v=z%g|�]pciat��6H̚����F��e����I�c�g��YH���8%�>��Io�~�S�
 �Z
+j�ė�U�Ya@����&�8��1���=
+FE�)�0��
�q�mљ�j4�-6|<M�tL�.�g��V�+���.��*M��乛���Y�J�G�����������G!�O|+��i��u�Y�
+z���ny�xЎ�wo��z�C|�!��:82nax��-r���ۡ��:�C8'#S~+t�@#鏅�r����bv�N��A�b�x~�
 ��B�Y�D�X̓t�ց�L��7�"\����9����XA��Y���B��x-:���i��sMv�oA��~�7���!s2 
�$9Xn^��apH/���\�+��Jx,5=�]ۀc�Ww�X�<�����       
����U�����F|hJ�[�Ki�pz�-LY���<�|>٧w�hȳ���C��ޜ��+��7�
endstream
endobj
80 0 obj
1538 
endobj
81 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 474 0 R 
/PZ 1.37515 
/StructParents 15 
/Annots 82 0 R 
/Contents 104 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F4 397 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
82 0 obj
[ 
83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91
  0 R 92 0 R 
93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 
102 0 R 103 0 R 
]
endobj
83 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 574.02612 96.87277 584.93109 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#intro)>> 
/A << /S /GoTo /D ({A�钷�M����intro)>> 
/Border [ 0 0 0 ] 
>> 
endobj
84 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 560.93674 121.20433 571.84171 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#starting-poin\
t)>> 
/A << /S /GoTo /D ({A�钷�M����starting-point)>> 
/Border [ 0 0 0 ] 
>> 
endobj
85 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 547.84735 218.44836 558.75232 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#integration)>> 
/A << /S /GoTo /D ({A�钷�M����integration)>> 
/Border [ 0 0 0 ] 
>> 
endobj
86 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 534.75797 194.96141 545.66293 ] 
/PA << /S /URI
  /URI (http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#make-leaf)>> 
/A << /S /GoTo /D ({A�钷�M����make-leaf)>> 
/Border [ 0 0 0 ] 
>> 
endobj
87 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 521.66858 141.53438 532.57355 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#leaf-functor)>> 
/A << /S /GoTo /D ({A�钷�M����leaf-functor)>> 
/Border [ 0 0 0 ] 
>> 
endobj
88 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 508.57919 142.685 519.48416 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#assignment)>> 
/A << /S /GoTo /D ({A�钷�M����assignment)>> 
/Border [ 0 0 0 ] 
>> 
endobj
89 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 495.48981 128.82939 506.39478 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#counting)>> 
/A << /S /GoTo /D ({A�钷�M����counting)>> 
/Border [ 0 0 0 ] 
>> 
endobj
90 0 obj
<< 
/Subtype /Link 
/
 Rect [ 46.54004 482.40042 120.89845 493.30539 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#make-expr-ope\
rators)>> 
/A << /S /GoTo /D ({A�钷�M����make-expr-operators)>> 
/Border [ 0 0 0 ] 
>> 
endobj
91 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 469.31104 146.07492 480.216 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#using)>> 
/A << /S /GoTo /D ({A�钷�M����using)>> 
/Border [ 0 0 0 ] 
>> 
endobj
92 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 456.22165 86.13228 467.12662 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#summary)>> 
/A << /S /GoTo /D ({A�钷�M����summary)>> 
/Border [ 0 0 0 ] 
>> 
endobj
93 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 443.13226 97.15752 454.03723 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#source-files)>> 
/A << /S /GoTo /D ({A�钷�M����source
 -files)>> 
/Border [ 0 0 0 ] 
>> 
endobj
94 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 430.04288 93.37039 440.94785 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-h)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
95 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 416.95349 123.91182 427.85846 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3defs-in)>> 
/A << /S /GoTo /D ({A�钷�M����vec3defs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
96 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 403.86411 105.58696 414.76907 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-cpp)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
97 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 322.37074 99.1879 333.27573 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-h)>> 
/
 A << /S /GoTo /D ({A�钷�M����vec3-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
98 0 obj
<< 
/Subtype /Link 
/Rect [ 387.54094 309.23022 412.4221 320.13521 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#integration)>> 
/A << /S /GoTo /D ({A�钷�M����integration)>> 
/Border [ 0 0 0 ] 
>> 
endobj
99 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 293.23492 129.72932 304.13991 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3defs-in)>> 
/A << /S /GoTo /D ({A�钷�M����vec3defs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
100 0 obj
<< 
/Subtype /Link 
/Rect [ 320.93994 280.09441 345.82111 290.99939 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#make-expr-ope\
rators)>> 
/A << /S /GoTo /D ({A�钷�M����make-expr-operators)>> 
/Border [ 0 0 0 ] 
>> 
endobj
101 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 226.14046 111.40446 237.04544 ] 
/PA <<
  /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-cpp)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
102 0 obj
<< 
/Subtype /Link 
/Rect [ 336.36948 156.28212 373.0192 167.18709 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-h)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
103 0 obj
<< 
/Subtype /Link 
/Rect [ 339.20078 77.60092 375.85049 88.50591 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-h)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
104 0 obj
<< /Filter /FlateDecode /Length 105 0 R >> 
stream
+H��W�r�8����a�&.$�lj�fg�SIM6��>�y�%��"�����m�Wɲ"�!
�@�>}����޼9�p~����_�ooσo�����$�Q�H$�q�BCed
)m�ߟH|#�I�d$�uH����aRSÕ$����l�].�&o��_�Ň��l8�u�6
B�Qy���g�l���=/��L�.�)���
���/Og����(I��,��6�3���X�T1��t�|��^��ƾIFث�_�DRmˆLeB2�'���(�E      
�I��t��,����Kr�%U�>��6���]��.u�N6`R��]��;Қj�c���k����vs���� �Q�
Y�s������KH�$�1����h�9'���T+���,�� b�HJQ��5����C��B���W]�լN���ނ�9�
�,���P�a�E�'/��c��izo��:)}?i^o"�1�8�TJ=Z;
+Y�hȵ>����L�[{�橋XE>�o���srv!���1��eS���$c*��̌�&�c�tb��x؅x�
x{��W��6y��]#����(Gk�qsA��q�����Q�9j5z9�?��-�"o�oCő\D�C娞hX:
+)cT���:�U���k]�³
V�d��ꂌp'���1h��4VL��y��}`7�6��ڢaGg�ET���p�F�Qk-S��?��BT�b>�1
�4��Q���ộ�׿+��)�&�HAǕ<�7q1,�.B;���b����h��Jk��(��2,��    
wp8�bU�,y�f}��T���&C-Ny���E�rX:
+��)���셋��ݵ�
+����U�e����am�-[��B-v�KP��M��]���CW����"����4���=[.���wޙ3��q�2`
+>E�Oh�;�B�Ϛ&�;�Φ�.�0������KZ��s��}��~�N����•V�+�9;
+w�,�&�
+�����^yMEv_��_�t�TMUݺ�j[8���竐�'Ii_}���Ke��=��t��l5�WIs��]F����7m>�ݪ3����.�*c�����|$�mc&�Q������E��j���;cu�w.S�0�d���sME�q�~i��mJ�Jְ%�6z:��.�
8������)=��[�Wf��pq*F�jR��Og�~�.sH�MRٹ��]�H�UE8R]-�
�J����hj�����#�m�@h�."x��ֱ����qΆ�6�{��>b����ZG�
^o
/�{#�����~`x�b��|��i���5[�s�ig�c��
olV�7R��dw��}��;ƛ�/��PZ1�U����B#6�Bv2[u�ͯ�)7�*��h5���^Hr�)R��Y>j      
���z�!�       4m>K��������b ���:�c�>~���R�d����F�p�5�8
+��2��flX;��\����P��Y3�9w�K02Hɻ¹�
���v�E�=Gh���y)���|��γ�6��D�XQ����序P���i�
+4쎏.�>�|�2�obs|��:5v�����4Ǩݱ����jjv���{)��H��w�ؿԴ����O�԰h|���mt���C�����Z����j<�r
+��ߒڗߤ�
+%�p�j�T�U�֙�d1}ı{P��ʧ      
��m��k�6�K��@��:F�$�?!5r���m~X����V���Z���}�k��؏6N�B
k/�Chh\�zp[���Մ6x��Y����;�5ܰ�3�i]���+8�\��]U�Do1rND�C�K�w�uqg�����qD�ϓx��2׻x�w^@�\��+����7�4�Wc����ˎ!m_v��X���!3����Ԗ|��ҏO
8��Q�p��a�4FC��aP��S\�֒��)�o�e���-�aL�gô      |;���u���6|���83�����
%��n6��G���'h��AX^�]$���%�D H1T��P���N.�1)�1�1��C`s
�h��O(��IY&~X���?�/���m�����1��SOZ��$[�_
+����MTnb�_��W'y�Ov�:s
�B4��u�>xG� K���
+��N��!!%�b���&���� W)�)I������._X@�N���j��]� 
u���ŦNuH��ӱwˋ澔�Ksg�OI�.�ѽ�:�}"{`rw�����%
Ѹ+y��-��ﻦ�p�2��:Hw@��d]���U�4���>8��IE����-K������c#�
Ht1w���4�B����P3��7o����˳?IY�P�
�@�u�*�8�āz�,fE���U���������X4a���¦aC{        
�^���ű�5��0�tK{�N�tH�`�pyK�𐼨�s���˲��Ǿ�����Ͻ��������G���x!;��ГuZݻ���Y��dQ�Ƿ�"�RT�5�
     ��(�������3��-���e]�O��*�Kv�L��C־�J� ;��^�\�mD�Sj��� 
>U/��S�֎3�uiR>"���kS�܀�(�E��(��D
:A������4V�
+�0��a��FShի�
+}�K-%H��h$s�w7F{�3�3�|�$Zg��d)v�5��3P����h����6��j�*�/� 
-O��хJB�Xda�B�z���WpZcGC����+� �\���      ����(��scŘ�~GbQ
S��T�A�_3��$>S��Q:�9d�s��f�2e��W�$�%j��x�.�w��/� �d
endstream
endobj
105 0 obj
2786 
endobj
106 0 obj
({A�钷�M����)
endobj
107 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 474 0 R 
/PZ 1.37515 
/StructParents 16 
/Annots 108 0 R 
/Contents 111 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
108 0 obj
[ 
109 0 R 110 0 R 
]
endobj
109 0 obj
<< 
/Subtype /Link 
/Rect [ 73.68098 716.40727 98.56215 727.31226 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#assignment)>> 
/A << /S /GoTo /D ({A�钷�M����assign
 ment)>> 
/Border [ 0 0 0 ] 
>> 
endobj
110 0 obj
<< 
/Subtype /Link 
/Rect [ 442.65392 661.04724 479.41565 671.95222 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pooma)>> 
/Border [ 0 0 0 ] 
>> 
endobj
111 0 obj
<< /Filter /FlateDecode /Length 112 0 R >> 
stream
+H��W�n�H��C=M�n��}   ����F2        
2�釸�(�%�b.J�dE��sn��BI��,ha��r�9����Ջ���a.{��������1�,d����EA����Y�f<���i�������e�O��b΋/�F=��l����*gZ9/~���
OrzYыf��r/uc{��~�? }�EQ�&�s1�KV5�a�Z4ڈڰf��\����    
v'k�E�VZ,R�\��,���7�>�w|��Y���sq�c�e۪�~�����I��!��9��&�ִ�4����x>����S
��WS�ѡ��^��py���V�< ��D]���
+S��n��<�Il���S��<�9�mPOa��k��f� �J�]��F-�%N�cFV�Y�"QS��t�������1논d��d�'< 
�5`r؁d�oZ����t��ؗߨdn����>��o���}��ex�z,�R��A�*'Ky�;_�ο    
Ə���x���Ea;���Rڴ�0�~\�m�T��j��0������x<K���<��MD���R?H�� 
E�����7�jR^�f��X�����C?\������B�^J8��(�w�M�P%��J�u�Y�E� 
���A�+���ʕ2s<�+����PID�o���k�ņ�����hJ�&<
+C�6��|֢yS��PZ�`���m������qڗ��_$��h�9��ј�5#��O�x�ã��9.���m���/�h�ˌ�C�!��p��^��[��萫�
�p�0,�)�9�
+x���oD���������m�#L�������s�Je�ׂ��=��d�K~��}7=�R�
��1�ű�גB�@׼(�~׳�n��br��     ��E���m[����h��%
�4L�2�s���V��ܪB��:<�r6���'㙛������7{�v��
q�j�����j\�Hz�e���MQ�O��
��.d�D��Gr�H:��H���&�]���)�i>���b��x��r��������Vߗ_�AX��_/:�Rh"FjG
�P]��f�PĆ36�fz�d�}�0(�F��O�U�%{P�,�M��yS��6k6m
+%A�8�r
�V1�s}a��9�ݱ�el�M~�za4S@��M��_�^���pReS���,�a0qB�����0Hd ��� �@��0| 
�� ������nN}B�Z�������?p���݀�;�N��G����щ@�n�vtn~-�/Tye,*���KE�c�9y_y(��x 
����L.�|J׃���S�Ѕ1���%��P�_��)��#`qA�t       ��*b��둖�b�/��>��9
+R�E �$p���-m��ª^��    � 
)��v�i���F06C��Q����G�qƎ���3̣�i��J��Y�p��N�z��c�I�P�C�O�0=��k��[�ݨ�S5Hϭ�kƣ�Yꮶ�����}��cw�ٹE�
;8U�=��E.��e�j���ږ@ @�p��DI��mk�O8�s�g�F�
g���l՛�C��@i�ͪex�=)
+�_X��T�x���ʐ�j'��D����Z��e��Y����zYM�̶��\�s����䃳��S�`P���[��B�=�5E�
sǵ���(��|�������;�#q� �.���ͪx����S�����S 
�����S9#mF9���$[�ƭs��w�����+@�B�~���3�AH�A��?HA{u��,4�90�c�oh�*��=6*<Y��2m���w0��f߹&�ID<�
  F�f��c~�q��b�,��@�������
+������[�����        
��}�GL'{�ș1Z���GW�+R�U�`[�&�˭w�ނ�y�����k��W���<ɕ޹��w�I��Ε�      
y�{d�5+;�.\   U�*�{��U�t������{�T@�)      F 
�"�A4�?�)�����t薭�{u�:@.ج��I��B���c?�5Q�����"f�2���Y�8�y��4úŕ�
!�r���x��q�     �c�Q3��3+W�Ǔ0����VNf�:���!�N\����,���)��6AY!#���� 
�����M��!�y��et�הD�Yw6�o��}CI�Tὖ�u'-�b�m��t��@U�NA��:� 
���)v�w��`�+;��u�cr�(l�����)�N>��c
�����-��[(o���DVZ,�K8@e���-.�v�����p�9C]����$mLR�:o�@�L,Ks�y[���ͨ�z
 ��v��0���C�?K�n�@�d�[�ySB�    |��/Kc��
+�p5K<P7��M�|��ߙ|�L�$+����Y�)�<���f<I"ϲ�'bed`��
��C8Թ���lo�VZ#k�f=��pA�T��p��3x5y���Q*�������� 
�K��&�!)�>��F߳��{����jM;�2�NsR����E���V�e�u�
b�!���_��>�^�x�j�i���/�   IٮG��\�Y��$iyE�     �yS��+����p����<EgĨ    
��)8�h��+�;�x�Ž�n����_����z���/�ا6���ml�*UyM�6�T�c,8���6AQ����ޝ��8� 
����ٙY��(G�/��np�1Y��6�\�,�ݻ�V���r��-�TF��΀�M�ϔR2p��G���]�z);���o��ƶQ��.|�Kq7�X��>]�X�:��E���T�ާ�)ȃ�Z4�+q�4`�~x:)ܰ�|�(�+q�`�b
shP&�^�S޽��ƞ)�”��(��&ݟ{���׌.���9T)ϧ�k�=O��V���so1C�l�        l�
 ���y�  �|M����Z��}WHa�*�oV[�����\�:���9n���u�vĕáϋ�ȉ��0>;ʶ�Kbئ����\9=�
v?,� �M����Ug����C���8QNj;�
<g��ʇ���������d0���XG��덚kKk���7��k�~9�̆n�[I�zj�t|2��F[�&!`����Bv��YKc�0�8$z�9"��E�Z�g>r۔oe��_�|�Z�T[H�/N��'z�꤮Z^��9������{@�$�Ց0�k|te���J<�UQ����Z0���E����5�R.��;���Ln�=�
�"w6gU��j5����
��)��,u��8�<��7m�����p��lA�Ҭ���,�u�d�m�?��i��6��}
�m�m���q�$�痻�rl/�%����M?���H�`�?�/
endstream
endobj
112 0 obj
3329 
endobj
113 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 474 0 R 
/PZ 1.37515 
/StructParents 17 
/Contents 114 0 R 
/Resources << /Font << /F12 1
 468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
114 0 obj
<< /Filter /FlateDecode /Length 115 0 R >> 
stream
+H��W�r�8|�~��Y���ś��׹\*[�ڨ.?��$�/���V��zP�(E%')G�`0�����Mx}������<��%{�����(Lx��|�,sd~�R/�Q��L���g����<F�
+6z��,ES�˛��U���*�L��}��lr��'s��@?�!�2�E�t������q`�z4~��
+{WKVW��R_L�;���n��=����������;�=�g^b�q�w��BwL�X%�5��
+4kj�Q�}��L��ew�b�Nn���QR뢮�[X�ļa��l���؝�׌bD�
#�y�$�d1�[�C�Bg�#���l�B+a��I��+Ɋ
+q,e%)����5+��FWa�3����~$�ѧ�tL1�ob�)���(��l.*ԲiU�
$�b-m�L���5( }�eBI���ӑ*��=��R��w�,tc�Axb>G:�kT�.WlV,
+%�
2$.<��ˋϓ�#
+-��O�����Z#Q-�يyx�Y�:b�E���
+�/�7 �L��)�$i��8�
L?k��l�zT�����J�v�Q�k��ӥ�T���y!���MG�y��<�B��D<
�1��붚#c�\$��re@J;����������G�Yxn�a[��(��� 
�X�߁�R��xF�;�ء��Ad1#��=@񧬧�
+����m!��V��B����L�[�iՆ~����U#
+���Ȥ!yF�^4�RJ���Jʅ&��j<ى'�ު�p6�D��,\18yE],+Qj�j\vQ��r{e��5��[�$��W�y�f�W��i��P
+�j7t�a)=��A>�3=Y���QB��*�A� 2���u���ud�%�Ө}\��
e�p�dJ$��еZBc_J7��h���M��HG�X�eAw��
+ � �+�&�^&��?� Ȱ$g$��؋C^?��n�n����M��^���       
�ô{Ul6�v:���q��I?�B�]�,C4
+���Ұ!�"��V�.Բ]˪!�Z��y%�^Nm��N�
+�A��H�/�v���(�sz�?��;���   �<������K�     �/�_��Ww
�2���V��k
+���2xla��߇�C������,_yէW-��[�A��
� 
�O��_wѰ��,v��������������~dI�����?Z�x?�^��2J3F�M�o���0��U�v�q�t�  
      �<�o'fhM
R)7Č��B������Y�ƴ�+4�
J3+�ic�o����4<5��"/=�Xca�ℚ0)j�ov�pb&�(��9!�3~]�������H
+|�a?�rPo����>��_���[#ٛ���n^o�΍�k�OhRgv�tfG����$���m��_o>r�Kbz��iw�e��]�j��Z�#�����1�{Ijy���}f�0na�c�ӓ��؛^\���c%�rzq(
ڙ��?���vy�]pr���R�ۑ��=� �3r����~��U ��V}?ܩ���5�U
ergu�؁���¹=��� � 
�&��>4$xA�q���ٮ����0��\�-J�P$�1;oB���&�yFg�>@��Ԍ����n��$k)*wo7�l0X*3ʭE��t�%�&3�5i�����A�9Y�A�Զ���ݏ�J����4��)�[�P޷C�k��N?�ē揃2�A��9�bֈ:��aq�Vxi����@r)������@0Y�
��cbX�؃�M�
�^�o�pӪ9�t�O�P���B��?��omռա/��%��Ay1�-
��{��@��s��T��ܵj��^;�?ؖ*��g����̑(�Q4/        v�q��̋�IN7O9vvG��M���
�;����()��
 �E�U��7�4ɽ)�kf`���6
$;�B��Чq#��nHI�m}�u�f�i���"A��A����v�I��k7�iڷ�����c���[�
ҮT��N|��j}ī�<zL�~!�+�\R(I�8��8&�b.\�㠽���K�c����=J�kflus�h�q�P�'���t�M��t7����/����N'}~�<��?���θ$r�

,f5�����n�tr��ֺw�BYG�b�[��M��.R�M��}\A7�w�O�L�YCRۙJ��}yP��gq֕n�dN�[8[���c��Yj�Y����
?�'���k�pf�`�s�ז�|Ad 0{���%�ɿ�-�    ���xO7j-U,W�U����C�٩Ġ������9/�Л�
+���oۭ�q&�xOm����v�F�!BLA�u��9s�aw��� 
���Q^��Q����ͤ�ܨ&�$_��P��f��kv��/�[u���&���&욌��V�%z��%x�>w
Ǐ`XS\��M��L��6�������n�� 
�YfO�4�HV�-Q̦�X<�z�ŹSK-��5��x�<X}���)fEY4�����CQ��ZU�W4le�KV�ӏ�EXA��
5�4Ehծg8b��ٙ"��E߱;��_�BA�l�_hGm��f~\�I�F�<��������J�v����n�'��n��nT;o��'�?�ղ�0
���ЦѶ���<�n*J�@lK�A�۝�E
!ٝ��ٹ���ea�ǢÈ���d��|��7���  9�B�$���E=�*@]��ҕQ�8�`,��0�r^Z^
��]���q�;��<l.��P�AJ�L[W�%�֊ɧ��ؤqb��1:H'k�T��m��)��d�=-K���x4�МQ���      
  {� ��=kHf��!�Dn�]�a"\��a�I���{��t
+<�
endstream
endobj
115 0 obj
2840 
endobj
116 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 474 0 R 
/PZ 1.37515 
/StructParents 18 
/Annots 117 0 R 
/Contents 120 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R 
/F18 398 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
117 0 obj
[ 
118 0 R 119 0 R 
]
endobj
118 0 obj
<< 
/Subtype /Link 
/Rect [ 70.85092 461.84599 138.04208 472.75098 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3defs-in)>> 
/A << /S /GoTo /D ({A�钷�M����vec3defs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
119 0 obj
<< 
/Subtype /Link 
/Rect [ 438.39905 113.86092 477.69583 124.7659 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 259 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/makeoperators.html)>> 
>> 
endobj
120 0 obj
<< /Filter /FlateDecode /Length 121 0 R >> 
st
 ream
+H��Wko�F�� �M
+{D�n6@�8i6����C45���C%�R�E���ÇH�v�UA�F3�qιgf_���\��Lx�~xwi�a�����b��,�2�
C(���w�?�
�O����'�DJ��e��L�*d
�4f�-,��p�<��=�`X&���۴�=�\;��B׵a�/-�����7�b��C�_��;|���a+�b2S0��_��K}ZZ*
1nVA��&���8�J��؆gP��2�2u-��X���-��롪"�{�{bY��D0�        
0���\D��2��q�%��L,�GQ�
+(��U��x=?;=�+{�����
+��7*8��#��z'�3'���m�����ͥ1� k��E N�ű8��A��.*�q�׸4\f��mD��x  ��(l�:��֠[q�M^
+ȳ�۪��p��A.E��
+o���(�Byc/`/�
����8@^)��
'�p��z�὎���1w#��њs'�\8����^PnE,�D�G,��c�*/N�ǂ9��W!��.W�Q*��6":�����neK]�����t�����9?��dm��%�l�w\��ץ_��Y
       ��2��qJW�6Y�-oP�}m�p���rY�wA=��I\�@b,��l˰��� �bj���h(�� 
T�>~�-x���6�G��n͌�s�
��d,G3�&����Y�7/�I���C�#��3nb��_l�%��m��8K��4ǎ��(u�j)�x5��L�e��y��H�ka(""�i�f��sQ�B�klS��G"�$6�UR8QR�
      �:
Hx
�ɫ�@��L���:�^6
+�D��W�e�4ʫ�$}�#���w��P#�i���z��RyJJ%D�"O+����̐ܩ����vO�      
>}@�&�=v
n��o��_���      
K0|�.B��fzH�԰쀙�����[LkC߫x��Ъ���@B�����X�Lf�z�Y?��%��#��b����r�[��J,��A���)�8gf�B��Z�N���;]�yBm��yo��Y7�SȂ�k���7�!��T����X��|�9�
 `@�Iշ���ZdF��]��>g_��('M!�q]2�i)�Ri5�uI˜舩/e���M��J��b���%"�H��
+��A{9�XQ* *�U�Ӕ2�p构b]�.t��w��D>�zIܡ��b�i3
&��Nws�%�e2w���Ǻ���Љe�?2E��
+��!��g~`�5���$�ݡ^��uk��3�Af[M�ΨF�@oL}�9�&���ܽ����    ϞM�о�����-� 
�?���{�̱m�Zq�9좤��GǪ"��
+�(�@��6O�|���EO�g��W���O��m#��:b,�        
r,�2�68;1�UI���:-�4)t;��#t���Hbc3�N       
a���<0>{>p,�83:~>��Y$Z���>�2z��UC= (}m��M
+�\����G�H�C���������]�(��^>�0��Wnqd��Ê#���N�t�2�'n����\���ӓ:�:���˱���g��[':���t����:�؜��N$-�!�.b?�-��棋x7C{H��i���ә�C���������a{����$�����|ѿ=1�A\�&lYOW_����6��Nޔz�M)h%�!hx;�|��j��uJfۊns
�?�w�?�f���ނ�^�[;zF����X�/W���o���Or�������z��t7
��nvb��u�X/����:��|'WxH��Y��>ۦ4�{xL�o�l'�W��D�W�&Z�EJ- 
�{R�ڂ���p�N�OnU��{��L6Q���{��<��V� J�����*C� ��_y�L��
+�Xx�b6kk��c,�3��3���G'�8����x-x.��\n<8u�~g�PLi�Q2ivb�,�e.�15���A����=�Ֆ�ӈ���*�#E�jEPÎ���gw׹�ߤ�5M��t����388
3�a���e$��'�za���>��h-WH�       �뿁�ҭ3A�1�$�qȝ�̓���P��������bz��[�7�6 
��jtلy����̺���8/�9փ�K�2%� �I/I{(��c_
�6Jm/f��~��E%,��DY���n��2�Z�8�g[��LU
+��Qi���/\�����0g<��K�}��o�4���6�N�
endstream
endobj
121 0 obj
2209 
endobj
122 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 474 0 R 
/PZ 1.37515 
/StructParents 19 
/Annots 123 0 R 
/Contents 129 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
123 0 obj
[ 
124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 
]
endobj
124 0 obj
<< 
/Subtype /Link 
/Rect [ 70.85092 697.59981 119.71722 708.50479 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-cpp)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
125 0 obj
<< 
/Subtype /Link 
/Rect [ 144.08978 396.39906 192.95607 407.30405 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-cpp)>> 
/A << /S /GoTo /D ({A�钷�M����vec
 3-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
126 0 obj
<< 
/Subtype /Link 
/Rect [ 521.09448 281.45221 547.0952 292.35719 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#counting)>> 
/A << /S /GoTo /D ({A�钷�M����counting)>> 
/Border [ 0 0 0 ] 
>> 
endobj
127 0 obj
<< 
/Subtype /Link 
/Rect [ 150.02501 180.95822 198.89131 191.8632 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3-cpp)>> 
/A << /S /GoTo /D ({A�钷�M����vec3-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
128 0 obj
<< 
/Subtype /Link 
/Rect [ 119.80377 55.737 199.2115 66.64198 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#make-expr-ope\
rators)>> 
/A << /S /GoTo /D ({A�钷�M����make-expr-operators)>> 
/Border [ 0 0 0 ] 
>> 
endobj
129 0 obj
<< /Filter /FlateDecode /Length 130 0 R >> 
stream
+H��W�r�8���vm�F�ɤj�xf2�L�&ޝ�(    
[���BRV���>�E�,;��6�P8}��i<�U�|�����7�e�^��o��r/H|�.#x   
���,r�I�j��u�*����2���q�3����Pm~��Ma��m����?�       
vy���)]�t��#"�);�p?�y����9�O�W��r���諼���T�����ťs���y���b��t�-�ӹa�V?�%$��ص���SE��E�0�j��½fku{�֚��b�Y�u���)\��o�Z7
�/�ղ6L��F�~#���i#��s�_�z��a��K��)SUċ[f*����k
3�6/��6U�+Sc�Ca�c���s��+{����o��g�ẻ\n��$�V:B$<��<+��ჸ�.�<WXܐv�]��>@�i�܋�d7O��a��@�y�$�`�,̺a�)������tÉ���e��yPtǐ���U~�h��Z�3'c*�,y,�
+�\W�������R��B�/~���$����c���OlΞ����E��    >�>ʒVY/�t��fU �UkJTa
+߲98R��A]���C�ب&�u�ߨ��T�������+DW����b������—    
�|�.O0FtcD7F�#�1�#?�G28� 
x��~Oa�L�/���-�m��睹�uaT<w�$B/�)k��V���͎f�;�`��k]�PL8��K��
t�a�{l�C?u�3m�U2�1RN3�Lx�<� 
�gr��8N�;S�3�uUN�C�ݔbfI4Rs����*�������M~6*�R�"��DBX�B���B��o�|Z��ٴ9t]3Zshk��2E5�˥����_�˜%t�C]��w(9�E�쯞���
       ���EK��|��������I:;�O��p��I���g      
I��$�IL%��_N&jrB��}�2�%�Q_N��-9}K�[����>����xx �І �ꎪ����X���]�9�/nψ�] 
B�A��TWu6sP����U�Z�Ċ��i���� �뺋��Zy[jE�+|<�ǢR��x�\gd�V�d'Ck�U͝ 
[...]
�_��o4$������i�gڃ�='�3;�
+ULU�O;AF�dJ�͕���w��t<2��oΎ���r8׺�����n   
f���x�m>2v#z��Q���-i��J��9{��fM�736�.@T�u��?�+k��E��-�j�4K��W]#mo�cߞ�6פ]
ȣ�S6'�_��.���]����o��0F��ʢ�ڭ6�hR�z�$A@�[V��9�G��$4ԙӢ�m��s����fw��5�;��`�
e�Gc�)�e�/_ۚ��d���3�B��+�ڜx�Ŋ'�XO���]I�m8���M�4@Wh6��H���u��깐&�
zx�'C�6�{]&J��ٚ9�0�~�d�]� 2��Y 7�z�y$82�y�yQ�e�*CT[0
�A-��X�
+���Q+�kXe�c_F}���.��w����S�Ʃw�[
9�w?�ܬ���VWM8��-��?�Ъ.r]oi%�x�=U��RDٖ"�*~����=�z{îf��*�M���l9�zku��98%�U*�x-(���+jͩn��14u#�Tl;�B��%I/�F��'�qO=��׃�a�C��փ�T0}�b�-�S6&�Xs�6���{�Rt�PHp��E�w���Z��
y��x�,�p��ql�A�{A8;����Vf�j��:R�J�|[ȫ��;�������3DzZ���a85J���
�������SXU�V6��8���
��|�����"����M�����*�6�}���ݽ���M���v��Z�VhܪU��Y1�'��Yp,x
˻Ǯ��;X�:┊\���i����T��4��:E��G�����'�PWb���T�
e��-p|�C)br�q0��=����1�����%u�;,�=�R�h�ղ^�b�&d�hӶA�U���
�a�t���#b$����K���
 ��i�O8�A�yy֌|B>�@����E�Y�u�p�o5*�ʌ59媯'�0m����M�P��
+��צ�r
+s������m�=eQ^���kF'���-n�1[}������V/���*�ɠ�zǐb�CmB�����Q�ZnU��i;�
+P)���s+L{y�l�c �8�m��n�V>�xj�u[kH�4�wj��1��> 
�#a��o�x��h���;��0�1w��"��3Y��@5Y*Dql��j�P�y�,{WX��W�3A�����k��h���R����FׅQُ�2K�*5�O?R2P3c�A.
Ѵ̨u�B��4�m*Μ�lp���/c���Ph���评Hx�z1"��HdU¥VãǝI���0��V
��K�}M*��s�Q����OHs_���UkLAp_�J[��OH`�Ӆ���,{��y��?��ea��_���.L��J�u�BPqgEJ
     ��ڒ�v�;3����pn�{�����-<��_��"D�&�o:�sWί
͘OY�oI������tT��(��5h"eg�Ek��we��f��
���8b.S����d�=�-J`y�k�Ԉ�4�0뱥a��o`�i�gB�s7���&�����!�"˭��يS��K��
+9��x#�M�r�+�`J����Q�R�2"�lj���zu���
+0�-G
endstream
endobj
130 0 obj
2782 
endobj
131 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 478 0 R 
/PZ 1.37515 
/StructParents 20 
/Contents 132 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R 
/F16 400 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
132 0 obj
<< /Filter /FlateDecode /Length 133 0 R >> 
stream
+H��W�n�6~��!�4�)�������Ϋ�n@�L�Ldɥ�xY�>���U'��Xa��|��ǻ#yv�''�eop��«����#�i%,��O
     K(��KI�)(��v��*s<0u�        
��N\�{ѫ�Jɹ�J栤㾦1PȦ(��Y�F�C=B/j`�qk?6���9��'�eU�=�5�F#��zV���]��C�r�~����B�)p�����,�;��Mm$s^�K$,�KQCU��B��F+���w�������֡�,����C�[H�ت$���hwKi%������!�Qؐ���s1vV���kQL�T�P�D-�4����51���ӿ�9�ֆ��!�@�����c�X�v�fܺ4JC�L��Q�T��ײ�
~k�=��|�%��X،�Z�E
�{��d��k��O��ؒ
#��0������
��Q��䴜�i�����g�Ë���}�篛7����1TC̄�R�,o����g�<�Ȳ�
ʼXNL�p}#�Ll�Db��!x`뚆�,��
�w�p"�w��٩E�Z�^
 �O}c����]��F���o��$������q�v���
�����d}Z�x�������R?:�:Z�͡7>�g�������� 
���΋y{�8���a��;��0N�-�1L���B�ǖC�%
�X�.3^��^Ub�/s�I���:�ܢ�쇜u��l�y|���&�+x�]w�t^���Z��-�Ĵ�/�t����Xt|�c��@�lX�nK��r��Z�B�d�Y)�[ʹ
     ]3�g�v��.�������R6s���vή,�o����q��mm���/��yA���W�v��l�
+p�˛�l�Bq�[,��ٻ��R�63�Y���I� 
ݑ$��c�$�k%�R�pd���:�W��ڞ�k��H/�8񚺭)|��J�Ǧ��ԢB�`�
Fo'a܃2�3'�!�D��Y�L�ű�V��B�� 
</H�˂�T�_�s�g�Bh�bYޡd��^zTSH�����\��4�?5�1K��˫�'�`9^�
endstream
endobj
133 0 obj
1048 
endobj
134 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 478 0 R 
/PZ 1.37515 
/StructParents 21 
/Contents 135 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
135 0 obj
<< /Filter /FlateDecode /Length 136 0 R >> 
stream
+H��Wmo�6���~(� �D�zK���a,K��C�|��ȢG�v� ��;JV�"�6�3�eZ�G��������9��{
.������O�m?HF0�A�'�
"7�GA��B���֛�r���+�R��c��r�YIU.Q��UZ��"霌��|l͇K���ݰ�鿇��1=p��I��.��x@�n��a
      [������
��ud��‡�r�*�R��e��̆܂�,�en�Ўم{        
��"��g.�+fA�-P�ת��(�,~ʡ�s(t������Yg�cD���iʫz��>~��벾��RH�e}�x��'���ͺ�劈��ʛ��p˜,A
+Y7����jx�M6d@�'HFߐf.�4/ـpa�ɫ���E6p��!�������l�
�!Õ0���w��3���.��<���r�g�A�T]Gl���^��2xW��!}ϑ�1����
HK
�k�4���*t��0�(/_��Nz�+���,b����;�3e�M��B�`��
>�ܻ5�\!�|]���f����w��%�F�3X?��l��|I�m�S��딈���"�9�������d�����v�uӻL��O\1{p%D
+reC���`��Lk*AUݘ",$){Y�f�΁b�.���`����z��.�Kƻ$`�Qx�8k�&���ϏD����G�) 
ZB�¢̫�/�    
�F��qzb$�ZA{"B#A/�]�g+k�u[��Znak��tY\S�h9B����v��+",>.,�}�E��������p������q����m�P߬p�s8�9*�
�P�~ҏI$ܨ�dE�,�Z�1j��Àe~�}�ҵ09iý@wVـ~�tZ�   �f!8�b?i�WC�^�ʺA�Q��5>�
����tb�������>� CDg�y�8��SH�TTG 
��(�ZI:<���$�ّ�'�������h�Yh�:v��v{DR���+;/*���ʾ���&��,K�pV���k}$�^V�
"SQ     ��Bd��x�#*u�؋��N/w��G�I�R
endstream
endobj
136 0 obj
1033 
endobj
137 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 478 0 R 
/PZ 1.37515 
/StructParents 22 
/Contents 138 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R /F16 400 0 R >> /ProcSet [ 
/PDF /Text ] >> 
 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
138 0 obj
<< /Filter /FlateDecode /Length 139 0 R >> 
stream
+H��W�n�6��á��h(Q�d)5���H�l�Up2��%M�dE��;J��&�4�(�B����{��}6�٧�w�����>�[Z"`<�8s����!wa�D��e}x��:�0?�%r���T!u~��UQ5�Z�&O��-�
��C��q��׵y5`q���        
z�q��!n�,��kk�s`���I��O�����\�����@��U�%װWժ��jf�d�v�}       
iU�ޫT��L&L��>��M^j��L^V��j����,"����]�:�˟�O�5��y��\�_������ٛ�L�HH
ٶ��H�uq����W
+W�0f����D�
+dO:���������k�i ��Ae����n�I�� 
uo^WF��OC_@�F+<z:;"��T���R�K�̐��UjaD&�pL��Z-UH�8��D
+nL[�qN7VCH��o�1�e�
�e�d���e�|�1c��'����+*���W�5R��i)�����Jm����{�����q��{|Y��qG�"� 
�'!�#o2�o�}����K����y�i�%��'�����7}��F5ݞ���'�E��|�~��7dpLp�$���
��d��͠���x�6�~p�?��ϟ�
!�_�����35'o�@i�-�X�*��ʮU���p��ؘ����'�k��K�fx���i�lUO`�=̱���������B4U�x�

�>�?G�հI�7��X�qR6�|��k5�)�-���7z�>R��8�˸'[=#��`�#�yf�8[ċ���?���,�/�/�bx�5
��8�[�[1v�|즱G��7�_�
��Y���f<vۑÄ�M�k|>VY��r۬����#�ʹ0�4��q0νRU{�����޿������t��`+;
��C,��"�CxW�USW/So$����瓩�s�q,���qz�u}h����x����i�
+Y첺��n�E���ʮ�V���g+�.0aCS��d9�Aۍl�9��
��N?m��G��`�
endstream
endobj
139 0 obj
1052 
endobj
140 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 478 0 R 
/PZ 1.37515 
/StructParents 23 
/Annots 141 0 R 
/Contents 146 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F16 400 0 R /F8 
1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 106 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
141 0 obj
[ 
142 0 R 143 0 R 144 0 R 145 0 R 
]
endobj
142 0 obj
<< 
/Subtype /Link 
/Rect [ 261.98177 243.32596 287.42278 254.23094 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 18 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)>> 
>> 
endobj
143 0 obj
<< 
/Subtype /Link 
/Rect [ 289.60434 243.32596 321.26566 254.23094 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
144 0 obj
<< 
/Subtype /Lin
 k 
/Rect [ 323.44722 243.32596 350.01822 254.23094 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>> 
>> 
endobj
145 0 obj
<< 
/Subtype /Link 
/Rect [ 200.03035 224.41907 411.96962 235.32405 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
146 0 obj
<< /Filter /FlateDecode /Length 147 0 R >> 
stream
+H��Vio�6���-P$�C����5�x�Ga�i,�⠐e%�BWe9�`���JV���l}�4�f���#�j8�f�o��ho��O"]*e�ͩ����
+�
𘢶�T1��rr�]��$b]�iX'�H�*��J"�b��p�Dz����>s7��ԑ>���w!��c�u~�ǟ�͛����BA0���F����F�G�AM2����Av��.YL��-7�%e>&ސ��;1<�RO�-�Fe�����x������p���>S�]�G�v�iе)]`XE����,L�����,�ò����
 �rя�k��i�E�M6��Fi��
�E�Sn��E�!L�"D��&�Q#�l����1On���b[�p��8��*5�u�ޓ�+��ߺ�75L>�U��$E>�H�z�,V���|�4�q#�>F,?�L#�
+
Ҁ����@b��ܰ.��x�6�HwE5  ���     
9�q���i��=9��6�2�c�ql�$��������48p�y���m�:)�GL"
+Ӱbң�j��!���pb��h6�A-�Mj��PK�k(���K�z�ܶ{�d�qQ(ӡ��_d��"�|Ŧ����ox����]��     
�v
���3\��ߟ���a"��T�x��m�D@F��Q[�祔̻~�u?���h=�.���s�\U�í���Q��.�e����]��'c�g�~�E�;]`)$�mO�;��'�K�y?�e��6v���O->���0��)�KQ}9��t����'a���ue������u���J��5,��aZl�<
3����"S��ˢ
+�z���Q�^�D%�OT�q�7�糆��$�@�Š 2�g�1����<���<��4�G10N��F�"x��b]��e�v�S���
+��a��4�Sz_<Xm�?6YR��2�c��֧���,�ő����n��0K(Kg�L����YWĿ�E�
endstream
endobj
147 0 obj
969 
endobj
148 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 478 0 R 
/PZ 1.38889 
/StructParents 24 
/Annots 149 0 R 
/Contents 163 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F4 397 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 165 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
149 0 obj
[ 
150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 
159 0 R 160 0 R 161 0 R 162 0 R 
]
endobj
150 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 576.00249 95.91537 586.79968 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#intro)>> 
/A << /S /GoTo /D (�!��%�+�����Qintro)>> 
/Border [ 0 0 0 ] 
>> 
endobj
151 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 563.04247 130.912
 58 573.83966 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#definitions)>> 
/A << /S /GoTo /D (�!��%�+�����Qdefinitions)>> 
/Border [ 0 0 0 ] 
>> 
endobj
152 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 550.08244 142.10124 560.87964 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#conform)>> 
/A << /S /GoTo /D (�!��%�+�����Qconform)>> 
/Border [ 0 0 0 ] 
>> 
endobj
153 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 537.12242 151.0723 547.91962 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#using)>> 
/A << /S /GoTo /D (�!��%�+�����Qusing)>> 
/Border [ 0 0 0 ] 
>> 
endobj
154 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 524.1624 85.28102 534.95959 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#summary)>> 
/A << /S /GoTo /D (�!��%�+�����Qsummary)>> 
/Border [ 0 0 0 ] 
>> 
end
 obj
155 0 obj
<< 
/Subtype /Link 
/Rect [ 46.08008 511.20238 96.1973 521.99957 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#source-files)>> 
/A << /S /GoTo /D (�!��%�+�����Qsource-files)>> 
/Border [ 0 0 0 ] 
>> 
endobj
156 0 obj
<< 
/Subtype /Link 
/Rect [ 56.1601 498.24236 92.4476 509.03955 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#eval-h)>> 
/A << /S /GoTo /D (�!��%�+�����Qeval-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
157 0 obj
<< 
/Subtype /Link 
/Rect [ 56.1601 485.28233 134.78302 496.07953 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#vectordefs-in\
)>> 
/A << /S /GoTo /D (�!��%�+�����Qvectordefs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
158 0 obj
<< 
/Subtype /Link 
/Rect [ 56.1601 472.32231 116.63927 483.11951 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#vector-cpp)>> 
/A <<
  /S /GoTo /D (�!��%�+�����Qvector-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
159 0 obj
<< 
/Subtype /Link 
/Rect [ 61.9201 326.73862 98.20761 337.53583 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#eval-h)>> 
/A << /S /GoTo /D (�!��%�+�����Qeval-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
160 0 obj
<< 
/Subtype /Link 
/Rect [ 61.9201 310.89859 140.54303 321.6958 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#vectordefs-in\
)>> 
/A << /S /GoTo /D (�!��%�+�����Qvectordefs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
161 0 obj
<< 
/Subtype /Link 
/Rect [ 206.28447 297.88795 254.16409 308.68515 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 148 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#tut-1.html#ma\
ke-expr-operators)>> 
>> 
endobj
162 0 obj
<< 
/Subtype /Link 
/Rect [ 61.9201 244.46724 122.39928 255.26443 ] 
/PA << /
 S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#vector-cpp)>> 
/A << /S /GoTo /D (�!��%�+�����Qvector-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
163 0 obj
<< /Filter /FlateDecode /Length 164 0 R >> 
stream
+H��W�r�F���T�C�����U�^;eW�67�`�G"b�P������B$-R�Tم�`ϙ�ݧO_��/_^}�~��   
�������Ͳ=.��̑\8̵C�?�
<H<���,��1[�'�ů�}�{��tw��g�os|�xe]�_ɀ�έ[o>^[W��e{�/3K�@�f]}�iT%��:O�"Y�HbV$��[)��->���ז�*��$�L
�ǥ��s���ʺ����
�m*��R�.gYS��n6�\ڶ�f
��}V��gwl�TKV-5�\E�"*l�Wk���CrSD�#Ey3���{{5ջ��[��lI�E`@�O-�n(���u�㳪|�6��O��w��-~�>��_��+��`
f9P(�wVle�.��:�W����#���!�nh���C�jPH�$�kΊ|���$��$��^` 
I[��v�L]��"���D��MR�{�o�,!`��+���$d�)�ڽ;�kse+�td�K��B�o�be�#��T�
����ݻ��9�+���S�?t�)�ڧ��S.��\�7'CS�;yi�7�ծ�:(R��
 1PB*�޽:�t�힅%��fo�T�%%�-b�,8H]1�=Mq��ݫ��        
�m�z�w���ݦ�U���}��e��E�>$۠�����޽�<A8� 
���M��:D��<�Ƹ}����-=�١�{���Q4'p�����N���>4�v�͒>��i�:��My�y@q�3�̠�P��.$��\̖IɪvT
 [...]
+^�%��_��e�]����i��0���MV�}M�Z�f�m��6){U=�Pנ8۬L�kr��6�#�Z�7�Q��Iep�t.t���GMh��j����&����~�4.�c�"R��Usk��>��n�����8�70"B�Q��얦�I�iA���4�X���t�@�L�F�AqE�H�˫?�O@E�v��>z$�)����P$7R6ӿe�`^���^ܓ<TtK��ȕa�\
     L��Uo<�|L�.\���l7G
��d���sQ���
�V�;Sj*'���*_R�ݘu�����UJ�Ct�Ӗ=8)�uŃ674dC�P*R���|{��6!\,Ym(�c�^='�-��س
     ����O�5���k���PaB*�4���|M��W�V�.�(�ڸ��0��院Pyg,���R�C�b�Ua�a�=p�\1ϑ�w
�G��lqT�͠!vx����{��P{����.�
+����ۤ(�N�yrv_Mj��v�����G���H�=�A���[���A ]yJ9�M ��R#��9�x��g�I�D��      
,� �Su��[A��ך4tzr'�/�ض�
�#F���3Ũ�֨K��]����     ��Uװ{�Q;9�?�7�+���c��F��Q;7
+#�j��������ٳ������N��Oޢ�L�iM%*b�"�-"��zS�sL���߹�ӔM�c�\��>�!��
+�-*8����i�?����,�9
=���ژ��n��u��M��Y��v���}�����^�
W�C�2՛�-uE��Y]{{ށn�W�Z�-�eX`b6�htc<u'�H5�)��|T�
+`     �bS��N����;�+��\��9�+�L�Uh�D���{jt��^`A��$) 
��X��\�=�}8�K�S]PoT��C5�4O� C�a�&����U�a.G&�?�ew�����S>��
+�/�������v���
+K#�l�������F�x�ڞ>7%U9�VK&�m 
����L�{��ܳ�<��t!�6ZEIV����>SD�텄c�Ao��I����ÈXp��I��*��c@�����U@�ZC���"�gN�d�!e�
      ��p[��T�_�/G��ބ�I�dP,)�TbQ�6�c~�
�n��Y��]S�J?&[�
+]e�;:�BgP�/g��4�c*�W�y&�m����a�}\����ݙ��(N�Y$j������<M�n�b{G������v�}xT��8Mu��H�!:��%�v9V�u��&�%��
Kb�I��Z,�o�3+���g���}�Y�b���}ՙ��;�o7e�-��w4�����~�H���r�c��]�˜�;
K�ZO{�l�L⥑W(7td%wY-�f���F��{���
+c�W���~|����À��p�xVU?tMP�g�"��
;DHWd'��.���g�;��nR���
+}tF�-�?WX)�2�q���}��8n��������I�d��ƅrS���Wy���&�A��'�^&���*a�M[Q�m�5Q��$�d
 ;A���1N�
+
�c潏��3dwpa�8�h
+)ZW������)�O�Ld���z�d9��<����p��l��$l����"D���A<�Š�5�>���'��t/�B��saD"_��
w����Ѵ
K�fIIʖ���/
+�8nn�<�Mۆ(��BU�!2�E��5W��
m20��5~�K�!��!�+)�iJ�p  
Эͬl�����w�Seyҟ|����-�Z��ސ�o�&ɥZɂ[�R%���iE�`�%��
endstream
endobj
164 0 obj
2908 
endobj
165 0 obj
(�!��%�+�����Q)
endobj
166 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 482 0 R 
/PZ 1.38889 
/StructParents 25 
/Annots 167 0 R 
/Contents 171 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R 
/F16 400 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 165 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
167 0 obj
[ 
168 0 R 169 0 R 170 0 R 
]
endobj
168 0 obj
<< 
/Subtype /Link 
/Rect [ 439.9321 693.84081 464.56735 704.63802 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html#conform)>> 
/A << /S /GoTo /D (�!��%�+�����Qconform)>> 
/Border [ 0 0 0 ] 
>> 
endobj
169 0 obj
<< 
/Subtype /Link 
/Rect [ 82.1964 459.84323 148
 .55261 470.64043 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D ({A�钷�M����vec3defs-in)>> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#vec3defs-in)>> 
>> 
endobj
170 0 obj
<< 
/Subtype /Link 
/Rect [ 101.22731 252.10318 161.7065 262.90039 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/vector-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
171 0 obj
<< /Filter /FlateDecode /Length 172 0 R >> 
stream
+H��W]s�6��x��J
�I�f3�u�&�dۉ=ۇ*0I�)R(+����AK���ģ����8��s_�����OWް��~�~zs���řAȒ���3�?,�!�%��`��Ӎ0��V�
 ���x+��US5JnD�dɔ�^�s��%ߔ�cO?���
+c�~ro�I�GY�;��f-�R*ݲv-����J&Sk�K�Y���»����V�/�ݹ���aϱE#4���kQ��0o�l5k�Z���z�ķ�Z˦feS/��0�
�����
�4��=�*Q�ڵ�>��*�������z����4
�͂MC?L��8A6~{{�-wu��C��r?���ex��������]3�vZ��B,e-��F
�é8͋���K||��ܵ� � A'~Gy掫�X}�$��
+Σ$��g7�;��N�z`|
+D�Q��R����(+riK�Y�d�<�:M#w�^�����d8�ϗd���B�UB�
o�0}�6}�����'&s���� �-���q���|:F
��hM���Fԭ�Ȱ��_}\y1%~���~�4��X��Oܹ�ԋ�fs��=        ���+b$�J{%ջ
+}���M=5٫���h��5j!�)���rL�>��~���
+�      _~ſ_�_��wDS1#��~R)�xI��i�'��U�5��?�N6��>� 
�Qr�n�k0�T˅`����6��xU�Q����W�9�X0�yM=�j*� 
�1����!x,�.w!t�f��Qҟ�U�w�6��I��wY}���{ٳ�����䙟��͇�!��av��gg�F��d���&�+%��f��+��N*�$Z�j�m�4[ͽ0�
+%iw�b�^�ol�)^���Q@��G]5��y(
�>{����]q�T�<��Q�Pri��&߭0O��X��P��B�8(ڪ�
��dX���1s����9F��Y��"{ziRۀL6������|�����[8ȁYEp��MkLO@�u)\�O;7�>�X6�
+^��Mu?Fvɣ���'3'�~uRDK�����E|[?`b���G�}Ǖ#�)q�u���o�蜆�b?ì�@���ɥ�V�����C�"
+5��7�Ί�A�Q���A�<�!�������O���gI���J       �{�ێ��
�d~E�S�켳�``.;t�2���]��6}����͢�4N'��R
+���%�F��
`U�ð�s�����l��h��4A)�$��F�:�hQ�p���Q�IS߁�G[|��"�4��h;��h���gV�sظ~�e�a�8�0��[P9>��}݋l:K����F��*m�n������@_�DAЦ���!�z'p���N�%�%g�fq�"|�;�_
        ��1�d���(� 
SV��CZ�%���W���L:�B}����0e�FV\�˰VB��̛���x�8?���|���������PM���m�yA��
+C�a�K�s��v�4JL��lGs�L��k�d�ϞS7�    
�"H��l$M�����v���v�ԧ>&HU?�e]��ǭ|R��U�le���N���1�.�8>u͹�V#��=L���Z~�mm�ώR
 ��V���=�G��K�"��B�m�.�����xƂڑ��>�;�G���&��(<��]>�S�5�N���S3��M�y��)�5& 
u7�Ni���T�lcc��I�h�K��a)jM��ӦMY
����hO+�+,�Jl+^2A���hS�m��;=QP�#�,���sS��6��#J������g
�8�4ʎt��ٮ��ı=��0h�"�+�KYJ����8��gPi�'~�����w�F?L��*Z�>����Ծ�����Ph 
H��o%j�v�"�.�Z�j�ߧ�$m���V&�gYz�h���r�"`WN;6�H\�~��%�W���
�S�J�]�]?��,��Ȥ�Dz�P�8S+�1%[�-@�^6;@b�Gw4�����      DP)�v [...]
+�ׅ��PD�D���gA��Q�
�e~�����ɦW�LӴv^J�q���M��qg�ٽ$���b2��A.7��z衶�#dB�R�iҰ3����G4'�Q�-W$��7���ҧ��'�$s�l���[�xBP�!�U��12
�8�6�h�{B�9�w
��η�۱����Mv@7�<�k�o�`�g�մ��Z�fp\5�I$4�i��#=n��'�"�g��_w���Pbb6���;*#A�854m%@�+�s�ط��"Ɔd���@nD�%�.K�t
�Α��`F���-G�a��mǀ�:C�;       
7_H��'���u�u*���Q����Cܶ��jg�.�4<3ڋ\�fw����5\��9��ԝ:�f#�4\���$����A��C�篟��F�T�1
 cH��V* 菋_        {��>&]��f�yg[
�d�-�G�,�{$�I�t4Y      H*#X���M��*���.�]Mwח��o/����
���Gv�p���(#�%j�B�ڞ&1��$^�/��|76�8>�0�ۯ8�M<�X9�4�I
+��x|d�s��@�v���?O�U�i��#��|���ug%�6��v-� �t�;�D5F~F�c�h�n�s�Oy���
�/�?��j]V�-Ї\H�4NC!.F�׶�,��l�/���ّd�RC��fv�m�@�-F��6�-���!��u�h�3�^�Q���}K�bל�
{͘��`S߭�U,{KΘ
+�;R�D�D����tH����V@�'$�O9���)�N��W�y���jt���9Ig�_L�>�0�\���mS�
y2��lM8=�W�MdL�t��ge�����
Sps�e��B2��يa�xȣ���?O�s�+)չO��ʻ�,ZC���xq��OF{ؖ�s�/q��(�(Q�>��q�SKP��
+y>��# �M�"K1/W7pc�`Dz*xA��Yrƽ��Ҁqe�
E��%�4^S�e3���K�];[j0���X��X�nSWM��J��ᾦj9��&Bf��༁+���T'��� 
��qX�����塤a0�u��Oj`���        
����.e~��X?ϣ#�{(B�`�X���8��yq��<�����Uԩ63m��O�O*���B⪕��KE��w�5h��=ب�@�*�
O�tA�_�°�?��%����/��n��~/J��P�l�����I�M�G��H���"L�&?3�gel��qV�"�.3'Ax��R�����LW���]4�+df�b�c,�P����̆4��<�e���OA�>R��q,^�*C���=�.o��{��nU^����OU���}�|��K��xu�e�x�[
 ������O���ESl�S�Q�����m0z�_?~{���nG_�ŭ�2M��X�z����F
�Naj��1$]�Z^�1�#��Z���2��ۆ�e3U Р��o�)�+ΉK�&)$�C��6��
 X�}�*D9ݼ(�����l��Bf  ?�z&�>K���<�T6�������X��� �r��gk�1
)�})||i�w��C�'����
endstream
endobj
172 0 obj
3562 
endobj
173 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 482 0 R 
/PZ 1.38889 
/StructParents 26 
/Contents 174 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 165 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
174 0 obj
<< /Filter /FlateDecode /Length 175 0 R >> 
stream
+H��Wko�6��8���_��MS�@�f��~����i�-i$e7+�߾KJq���0�N K�}��s��z:
��?������s�O/�aF�F~�� ����(ēO�>���{�y!�?��^�KfĆ�W�Rb͍(��D�-�8+�ak
+�(�ñҞ
#c�Q���0F�����8�Ë�(�'�]B�WS� 8����ۿ"�l�P��sM
SLjl��'��SQi�8[��3�t�o�ᅩi�{�/�/�����
�6ڷ���Xs��[�1uQr�&F3��������4L�4�`�
+ɴ�9_�RQ�/f�0š�|���=&f8��E�R+����R�r      
7h�6^��UpX�/�h���j�b�{�r����x
|�֑��J����V:?��v%�0)��vq�=��唈5r�ڢ��4g���~�0�������7x��2�a���E~L�M����8|/?��T`�؂ٽ�����
'�\�5/
T�l�r��� 
&ʇM��Tl�|N�A���F����9�����y!�q8G1����4;�6�jTK�>誥���H�o�yWV[D"Z�Fwvv���
�P-Z��(^�'�Ӗ19�����6>m�!�w2�VX(*� �Q���췴#F���7b�+����r�k���O|�/�
����5��:�R"�4ܪ�(�FmT�;�%
+�6@V~Đ�_��4��P���{߈舼oTiC���a枌�a����ZaF8�;m��w
DnQ�k���;}E���ѝ�9�����'P)Lg��v3(Q�1TS�����}�޲3�?�3Z��bj�z�
+�X9��r:��J���9%w�Qٲ��ho��II6�����IQ;[JB*Yx?d�{��n�p�Fx��{�!��n:�ѵ���5��9�?�r+~w�\ԉ�:�*����N���6͎cm4x�4ɰAh��8�Z�
+ѬA��W'��KPw�>����\��*K��`��=�Lw����A9OH
�}Mu����a�/$t�F�,�wP���у�&"����/2�������{WL�wM\�    �3�h��,��Y��D����x
_" ��9ɲvcPT��C�
.�L1uok�?]�+c�� �n�' �J&}VH_�R��j��٭^c���1'��2k  y/�;����^ē 
�/��i<�����k�?X�ӊ
endstream
endobj
175 0 obj
1204 
endobj
176 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 482 0 R 
/PZ 1.38889 
/StructParents 27 
/Contents 177 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 165 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
177 0 obj
<< /Filter /FlateDecode /Length 178 0 R >> 
stream
+H��W�n�6~����9�#��MJ�k�$k�G�L�dQ%i{Y�=�i�q��ۀ(�M�r��w\�F����{��޽?��z݁�!�������
Jx��@�K�쟚�/�$Jn��8��T�BU�
+/���� ���4�k���c��N�f4`~��a��G��,�v8�{��s^r���k~�!��T�����1����sH����
�2ج(a������5�{�
1NSJ�00bQc`�(/�֐v`3��,e΍T'�9�Ѵ������*Ǎ��p_(��p�����Eɉ��]띹��DL�N�R����
]�,*�6a�sb���뺼�ژm�2Z�l���CKgT�\�(��������(,kg��E�B>�   ��8��3
����d��/BM��>^�҆�A�a�����K��?k%�.d��̛Xk�q׉��g��%��0���   
�^�-��2z��y����(�<�v����$
+�d�F��JŸ�P�즍���eg;���������@����H(�f�8f�tK��{�HI�&R2�2�_NI�.e
r%TJ���Hf��L܀��\�q� ��W���T
b�L���e�}�x��,�v�\��!(XP��]���x_�В(��@�`sؑ�Zj�����A����S,^X�Ƙ����
�֑�Ѥ�ڏ�V�S��C�63���@ilZ��g3a`.��FX�4e)�':\m@��?��:�pJj���{����s��0�n{���횭�Y��
^�~���F��cx������",��-M�R��%�.�)�U
�Ze-�#��R8�72l+6f�O��D��872��g�C�Mw�-X?l�k�C�ٰ�TS�zOa��)C#sn�Ro���j�!l�`
=�<��K(�?Q���rQ/���0�4T�*4�I�eB���M7�գJN�RT3PX��s�#�:��Y�<�����u�,#e�w΢��*<v����-�UIBOL��)j\1�G`P���,
+�e�ڱ������j��/�ր��M   
�K!�������(zyɡX���c��c�8�������ޗ"�})q�P�jߎ}�%�@ZFGpV1��@��{���A�p5��ip^�)�����i�S�z�>Ě"T�K��_��gr����@�A-���F��,JdX��H��ya%�/�ݣ(����m��
+k��
endstream
endobj
178 0 obj
1219 
endobj
179 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 482 0 R 
/PZ 1.38889 
/StructParents 28 
/Annots 180 0 R 
/Contents 185 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F16 400 0 R /F8 
1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 165 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
180 0 obj
[ 
181 0 R 182 0 R 183 0 R 184 0 R 
]
endobj
181 0 obj
<< 
/Subtype /Link 
/Rect [ 262.41679 110.8817 287.60638 121.67889 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>> 
>> 
endobj
182 0 obj
<< 
/Subtype /Link 
/Rect [ 289.76639 110.8817 321.11478 121.67889 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
183 0 obj
<< 
/Subtype /Link 
/Rect [ 323.27478 110.8817 349.58318 121.67889 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 187 0 R /XYZ 0 792
  null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html)>> 
>> 
endobj
184 0 obj
<< 
/Subtype /Link 
/Rect [ 201.07765 92.16167 410.9223 102.95886 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
185 0 obj
<< /Filter /FlateDecode /Length 186 0 R >> 
stream
+H��V�R�F~�C�#�͡�T�ƻl�lV�Ta�%K��]�,�Rɳ�G�@�q� ��z����n׼�}�
+gg��g�a�PJX�Pl�p)..Ji�v��!0(��r���F�a�<�^�e�ɪL"(���l`< 
8��k�^%���F�+���o��;u2�ø
�'�e    �.��˲(O`p9�0��?�"������2#{
+&�8=���0�� 
8@{NcO~O�Q���u(w��K���RA�a$��&\����������?��{�/7����`|�T��ѿ��h2Ú� 
�H��&�`���z�d�A
+=w����QU��aA��m�9���u���#/�uxm\y�(

���5��X=����������^m���~O���78���PW����|���v|�R<a/|�h>גe�Y���O���ֻ$��e,��>�)��6���%yY���h_Oӟq]8J5�>��e���jL�
3�֕���g���#�up����$�g G�\Wf���2F��cu���b�B~
+���n��)
���8$��b6���74�
��5t҆�`kӐ�`���_���ѷ�\��&�'����p�M�
�� �C��DZ8��G�{X�d����{A�)׫0����ʝ�5�Ry�p�%fb�#
P۔)�42��i���Ҵ�qiz�*�eU�4�:�e�����UR��.��X�����';�'zu��z�C=Ҫ
�F=ޡ���u�C]���+u��K��u�Ram�[��nZo�f��A�M�+lYp�¯��3��S���فX��a��9Vkfp�%u�Yj
�)��){�����
Zyr�~w]��{m�N0��q�n3Cp�7���P�ܾ(��^�Իu����Z��Ol��_n[�m�_��J��{N�l�`V� 
    u]|A|�f���}�߈6�͏�.ڟ��D�M�b�T&�Y#n38O�?���Y�a
+�pR�!�?O�#�ߊ�W�����W�6��`ףuXj��`�N����缒S�"ɧ�J�T3   �
+�հ�!���J$�2,�T��C8>�r�U���4W��1^��č�0JI�)���ߋp��в9��4�eu�ɬ�Rl�6`c�ޱ�AM'��_��j��:���
endstream
endobj
186 0 obj
1133 
endobj
187 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 482 0 R 
/PZ 1.37515 
/StructParents 29 
/Annots 188 0 R 
/Contents 201 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F4 397 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
188 0 obj
[ 
189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 
198 0 R 199 0 R 200 0 R 
]
endobj
189 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 574.02612 96.87277 584.93109 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#intro)>> 
/A << /S /GoTo /D (���6b'��<���rintro)>> 
/Border [ 0 0 0 ] 
>> 
endobj
190 0 o
 bj
<< 
/Subtype /Link 
/Rect [ 46.54004 560.93674 107.60255 571.84171 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#surface)>> 
/A << /S /GoTo /D (���6b'��<���rsurface)>> 
/Border [ 0 0 0 ] 
>> 
endobj
191 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 547.84735 112.13316 558.75232 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#details)>> 
/A << /S /GoTo /D (���6b'��<���rdetails)>> 
/Border [ 0 0 0 ] 
>> 
endobj
192 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 534.75797 86.13228 545.66293 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#summary)>> 
/A << /S /GoTo /D (���6b'��<���rsummary)>> 
/Border [ 0 0 0 ] 
>> 
endobj
193 0 obj
<< 
/Subtype /Link 
/Rect [ 46.54004 521.66858 97.15752 532.57355 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#source-files)>> 
/A << /S /GoTo /D (���6b'�
 �<���rsource-files)>> 
/Border [ 0 0 0 ] 
>> 
endobj
194 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 508.57919 87.2621 519.48416 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-h)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
195 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 495.48981 117.80353 506.39478 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgbdefs-in)>> 
/A << /S /GoTo /D (���6b'��<���rrgbdefs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
196 0 obj
<< 
/Subtype /Link 
/Rect [ 56.72067 482.40042 99.47867 493.30539 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-cpp)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
197 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 300.5551 93.07961 311.46008 ] 
/PA << /S /URI /URI (http://www-internal.acl.lanl.gov/~sa_smi
 th/pete/tut-3.html#rgb-h)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
198 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 284.55696 123.62103 295.46194 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgbdefs-in)>> 
/A << /S /GoTo /D (���6b'��<���rrgbdefs-in)>> 
/Border [ 0 0 0 ] 
>> 
endobj
199 0 obj
<< 
/Subtype /Link 
/Rect [ 62.53818 207.28186 105.29617 218.18684 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-cpp)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
200 0 obj
<< 
/Subtype /Link 
/Rect [ 166.69002 48.70656 197.23146 59.61154 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-h)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
201 0 obj
<< /Filter /FlateDecode /Length 202 0 R >> 
stream
+H��W�r�F��CW�b��D7�J*�v�]N,�d��@�I���n����|���
� 
EiHWRA-����s�������w���~���|u�|q��{A�3_p��K���d��p?H����w�r�0O�\����]�<�B�  
      ?扌|F��ċXV:�w��٫���y����/��/'�k
�r�?�"m�u[��K��<c:w�o���&s�<��׆~i�H�c��L�,e��X��wy$"�&�s����k6Y����{1��\�D2`#���yl2s��U�TM�W^-�d�R
��zb����A|��-6G�\Į�?��
�Ǿ
�ۺjU�67�q�����������?��g��.�1�yCQ��XJV:I��H���¹��Dt�(�ҍ,�{��Bfa!;���輫Z]��Y��U�J$�R�ƈ�.ݝu�v�~S��<�NJ!c�n��i�Q�
 ����JHJ�ܟ]�*ܕq|>�U3�
��u=;D�� PqL�۝\ɋx���lHw�L����'���)���?���y\��^�L�7y�k
 
0�{.m��<B]��D�OE�RC)�G��c����,\4R�5����%_v�{�>b�A`�,����c�g6���<����@�R���1�����>�G�
+<@��wE;[��3��쇰w�H�T� ~��n.�w(��c
+x剱v8���q^<4�]0Y�
k{�i���a��ښ��
7�y���%��j��]�A�5�S���;��X�V�^�di����T_eu�BGͮYZ�X^�U�a`]�����2a��l��Uw}��b�� 
 1���!-�x�n��
+���}��φ5+��|3c��X���b�5��.ꔾk8�`�P%��ej
�Eo�K��ݜf<�hF��&��We���7�<[�T+�}�W@t�YVkZ{M���5�������+��^�<��RP4[@�`�ox�NU��R/Ѝq$�}�#'p��1v|t~}���'����za���t%�ؕ��Oz�|�'�G�i%��ġ3p�?�p/�cxߓ�q���
 
�c������L-�tuk����wm{Ee�*�B}J3��(��YJO4YП5fF������h������Sֶ{�_��+���fͣ��ٿ�gh�Y��
?�zj緈�xDA7+ѮV�I0�Dx�񠾦��)y��2S�BA�����,�t6c�I�b����}��r�2L�-��Ƭ�̳�Aاk�f�5=4
 
9=MĎ�vU�JE.����n�����᳅�z�����;]r��%O�^ް��cTv�6oi��oS1]@�`c�jEE�}��vc�/���J��d�|����[n���-]BaG�$y+
 kIA1�R4�#��@W��|p"��r�ٰ�
 ��P%>K�b��"5Q�Ѩ�Sk����:�����b��IQ�Q��v���8�
|R����}��:�A�H��*����1�ꊾ��nڝ蹶-l_hH
d�3p�T��<�����������QGm]�����&>�od�Yh�\��4��L�^L���t���Yun�hXtu�����AD�ް�l.���L�e;
       
wߜ�iJ)�m‡��8�A�D��/�~��р?���8��lFXj����td3���*�.�4��Q~������q!ikzkd 
[...]
(Jn��A��v���
+{�D�hA:�
�{��z��Z���2����7[klN��,C�%+"�2�t��Œ� 8O&J��Ǧ�Ic%�X&L�乾��ܙ��b�
e�3��K�=�t��[�3�v���L��{H'ő1����Z��L�����"$���`��&m�2���y�T�l�t襁���W_[�Y�_4���;�1
4����*ՐB�"��V�m�4+�����e�ϠI�j�H�S��������Bմe��9���6�}夰�
+m�/M30Q�eLj������5�1���ۑ=D��U��JJV�Ʋq�]�����a����r�?-2��
�ګ��*�=N��%7�Ӭ��w�k5��ܫ���W����C�i���;���W���dp�\v"#������vn��i��օ 
     ��τs��2Śf��Ӡig�l�U��)�p�:łkq���+���q�T�j����ml(��Wk��?rS�s�
fs��jQlG�V�}�f[�;uAc�����
��jڴjs�%\lծ�'�;�&�a�0�0����Ĭ#%��_��sA��=X�����.�nkc[��${ZzDo�Ǯ����)���͠X~e=o��]�3g�I�<�[JR^�V��9ْ�
e�kC�4sc 
!9��~M�M�y7�n[��&��B<A^����')`��m���7�͈6(]�O��iU�E�0�o���)�v9^�V��Ɍ<�l˂�_  
   ���dh�0�1���7��ו�VFV����9@���
endstream
endobj
202 0 obj
2564 
endobj
203 0 obj
(���6b'��<���r)
 
endobj
204 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 483 0 R 
/PZ 1.37515 
/StructParents 30 
/Annots 205 0 R 
/Contents 207 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F18 398 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
205 0 obj
[ 
206 0 R 
]
endobj
206 0 obj
<< 
/Subtype /Link 
/Rect [ 85.84723 655.4229 116.38866 666.32788 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-h)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
207 0 obj
<< /Filter /FlateDecode /Length 208 0 R >> 
stream
+H��W��F}�C�
+��i��(��      ����G�Ji�-FR;Rk�     
�}�=�[�eY3�wc{Z�}�=��sg_������'f�W��럮�?,/�^���w���K�;.���A��ZX_~d��znٌ��k�ə5�$�T��J��K��<cun�~v��
+�����f�cs'�C�M�>ty��8�s������SۉkT�f�}K���������p�w6��?bQ�_���oY�_��h�~՛�����5ۣ��
 V� &oݣ�     ��|}�m�ği�-[�U^����ɫ5�X�U�d}���(����D<񒘀ZZO�
+�Q��7�y� %f
g��1�h�^�ȍ6px���A�����Ao�XZ�����0
�ѳ.�q�#"f9�(��eE�4���ĥ���0`�:��^�W�J�I�+���ن��`�V�,�T�<`�Z�
+鸾C�궪�-���NK>��g����Qxv�����˯��O��o6[2+x�G.���^��r�'���w���H� 
ӂ���j��R�t��U.+���Js�������5��
�n�!A�䞹�����[���{�0�{~�d^��{�r�.�7H+����*��YWiA��F�L�ۼ@��&Ul����\DH9e܍�HoF���Ō����)6�Wl�t%�E�x�Q��[A���eS��%
�h�|�ޱb(F�s�C
+�s탂up����~�����?_̂8��Q�`��V�i�)@�14ay�d�$x%�k|�n�B�*!��\X�U)���PVb'���mD$���A>lE
�9х�X#�[�Z�5j����N
"��:�n��k�B�49@�m-������a۶��FP���W 
���ԫ�YO���o)PЫ�z�DQ\�TrH�1(��ćBv����.�E��R`�XQ:��̋��kd-*A�����AX��.��0�n�f�zt�`�
���t�7
+�y��� Ӳd��S��tdx���y�g�6͜�:����< ��z���
+���!X�E��\�����Z܈�ah
+ʱ�C��I�4wҥ<OׯN
+�q�0�q��a�N�e�g6끋��y-�w���—���~_�w� �|�����KM�6
+�|�P6�L��V�����v���mJ�
+E�*D�"ꑟ8T���1�T�?ڼ]}pM3#:���ٸ3���1hWڽ�C,/;^�dS����2��=�C�h��Nt���+9�G�UA��!��&��(Cq�n'�C�ވ�S���y?�h�ߐ��p:/�����1>��Z�����J�����d�B�2*�Ѩ�ۈ]���>:Q
M"|���a�O��ig��^�%��¸�nF   t�61�V��}�?��mJ]Z�YPx��        
�1.��>��š������v��~�jZԟ1w�����Z
<�\�c�(VqwI1��P��$���H�i��(� o C��ޤE#��
+����ԮԾ���[�c�(#�T�3����>i$S�`�P�Mw��Gf�r�7
y�9g��4=�P��0�Gؠ��0�4{yp�t�+�HR�ޗ�n*�\���4�vt�
������P���n��8�6�m���An�0Co�i���{^<{L�Z��� �C�d�E�u*S-tR^�,�9KK
0>.e��,-�
�656���8$�2�f�u       W��^�ר���
+},�`B� �DC*�s�1��  
�C/0�綢�st��({'V���q<�o��hL���˖leN0�M/���Q^�!�&���YF�H��h����w��K 
�Apfl������^p_ҭa��k4�\�2"��j���W�>�N�*�(����z�a�N[ǡ�<��sO\B�K�Q6}���o�$Mq�,�y�g�
 Rw�
�{���<���|�IR�|�Q�&��'��t�9�G��1�#?�%�h�C�HZ�Yz�>i�T{��߄wN�(�Rp������H��K0�Z��Rw�cU6U�s$��q�Q�
T#3�ߎ����i�[���{��q���L�������c��<����;=vL���9        
=:^]�>ܩ���6=��l�O������|���w�8����1�v}��^rf�����v���m�4~I���{�@�a��$����J.,�Y�j��:���{�D/?�+c��ˮ����h�MO@�]񤦙��K��P
       ����ڥ����me-\����/z��$[K��
 ��Ԗ�j���ଘ�v�P,&.�s����Z,e�D�FֲWU���О�L�^��QC��s
+.�}G3��Ņ�͍�U��`�e9v�S��Ixۇ)������S$�����Hj+�6cLU.��j�j�8�=��=:rȌa�`��?On�E����){+�F�Z%�'+H�7�e�Z�7rM/77�4=�@��g*b911�A���(G��N�ƛ�Y�O�8y+�΀��Z"��=�UF/;z����
�ŶΧ�q��0��w�n�:$^���!w��i�F����l��]��Y�<�
+^�U���v��&��)�hf[t�4���U��.��؋g��h7s����?�<~|�[��,�;�
endstream
endobj
208 0 obj
2595 
endobj
209 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 483 0 R 
/PZ 1.37515 
/StructParents 31 
/Annots 210 0 R 
/Contents 212 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R 
/F18 398 0 R 
/F8 1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
210 0 obj
[ 
211 0 R 
]
endobj
211 0 obj
<< 
/Subtype /Link 
/Rect [ 115.53349 62.71913 158.2915 73.62411 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-cpp)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-cpp)>> 
/Border [ 0 0 0 ] 
>> 
endobj
212 0 obj
<< /Filter /FlateDecode /Length 213 0 R >> 
stream
+H��Wko�V��h�V��&�6��(��j�QQ��u�TIʊZ��3���H)�
,��z���3g.~����p��Y���|ue�i����S�<�tB�ݩ�D�C�55=:�R�~O��rfX���;|�d\܈,�彸*���+Q�2�R��l�-px��ۖ�J2l˴#+Pb����s̩�4[�8O�|���(�6�����)�ț��*O��
 Y=���3��Õq�9n��ÝC�'
�w#D��Љ�aV��b����2�⪢����6mϙ��=;�9����MR�U����p.oD:&e��I��{J�O�����U��"
z�m�����ǣ��_m0��_�0XyQ#�nd)�A�C�>*�<���
yO���v�DD�V�:��ժ��Dj>z(���of���L�\�)s���h~��7S�߯j���<�eN�����m
+�]�e���;��EQ��X� Zy��m�
 �3�_���� nSv
L브\���S
���q
+�d���(E՘b<~G2�ܨ�b'�;���?�SuQҢ,Vm���k�J�v)��zF|Y���d��6�()LIi>�68�+C�CN\7l����W�>�}��;]�����j��v!�
+���g�pL�J� 
�rƤ=I�n���ӔvO�      
M/P�Q�4B�e&J>��Y�Q)�)���(E^F�^ƹ�V���Hd;��bn$r!Ej�;}$�+�)������cug!˪�z[�L�[f0R�>�m�S+!bwZ
 #J�8�
���L�H(�z_<Tɻ<�*6��|���֊`�@�IR��*����m�bw��Sn2Q�4c�dՄ@�9�G)��(
+�
���A�{
��U���#%�����J����_� �2����n���(�kc�
+6-�E���}X�)��mz^�  
����F.!�׉Cg�mT��4�|wL+�2���[Yoe�ꢏ7cn�L,j��rQ#�2�T�9���y:    ��
>�}�o"w�¾&k(?�x�!���^�*�X��V�bG ����    
҃s3��A��;�8]aJ&:���C��pa���]S�-굸�!b`��q�����%'k��
�ܲHu5h}�,-pu����U& '��.�tx`TX�8m/x|dtLz/?��zQ{����7y�)0:�|3\�
�5q&�҅�����{��>1��Teb��}|HI�]�&P��r)���(��y[l9�l�3�[�*�P0

����d��^_.�q5͊M�RV�)�I����4�����m�=�m��6��q�|�*�Hʋ-��A�-gpU�T�W���k)�|��Gq���K�?���E%s�T�G�t�+���.�(���n�th�����6^'`|���P�F
=@�Ogb����X�Fտ�m���Aɺ���Wγ�J�T���ޭ���V��V�j���ٮ��LI������;���
 ���|:�%�^    ����f���U!^�y�7E�fǻ��Z
�=r4x:�uC�t�(��m�b*���ˬ�y:U�ik�e[�"ډ�9F�
יx��#�ޠ�-��_d���?�<=�!9�G$r�
[^D��oo��-�0�L�r�f�ݱ  
gJ��-��!�U-�Cp�ܜ�����Sx���sTs–��F<�+���B9��^���'�aL�� �U
�}�>�Z]S�������j2)@Z��S����Z�2è%P�؁U����X#�  ���so�ƒ;�?��ci)Wr�Ʋ�
HE�a2١�� 
_����bEV��ĄvSg�wJ��jm��s��Ih��AI=#0v�y�@N@�5�o�E&F�4�FOQg��x�Q|�����F�^#��T@{X�n���^���;��)������ی�L-���`�뢼����P�����a�̍ϟk�F'�8�^�tY��O`����=5%T��B8���S�������ǂa��,�{W�X�e�T$J�+u�P�(��.0�ۺ���Qe;�n��(欗�.qa��
 ��(��/u'���j]��C�7��Ǜ��<�|U�Ln�
+M�%��KU���h]���]w�WW��fv���eSw�e�[����ZnZ^oj5����&��p-�j|=azP�jXz� 
M��u\�
�7e����qɛ%&�ry��m��Ԅ^��a9~-�b��d"�-�1q 
�ҙ�4&�\\y�O��\"/RQu[Tœ}��:$!k�)m֝��p$�)o�L��d����:�L�C�2+|
;�{�ո�c�\�Fź�!4�W�:��[�e��@\d���SL�qr_v"渌���ޔ\FXQ�0�+���;�����:`9w�קZ��ç��{�xg[}��Z����������0�ф�?y*4s}[�IL��jb.:z�5�0�2^�0K��"��
�*��w��       ,|[�C��k����<��f+�q�^9b��!7��2�L   
�hb����7(v�g֖c����O��7�RN��A�<`e�~d:S{)3~�'��f�M5q�||�uW�+.P�IT�F)4ðc�7o^��zݞ���'�����ؼ��$7���PA�+��H��,��!(�-��dL��)�+�+Wxh�l\�qF�s�e�
 ýJ�OU�R<V�Z����())�� [...]
cP�34��T�������>���VFV�<�7�s�&�'�
endstream
endobj
213 0 obj
2744 
endobj
214 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 483 0 R 
/PZ 1.37515 
/StructParents 32 
/Annots 215 0 R 
/Contents 217 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R >> /ProcSet [ 
/PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
215 0 obj
[ 
216 0 R 
]
endobj
216 0 obj
<< 
/Subtype /Link 
/Rect [ 209.81496 709.18369 258.1725 720.08867 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D ({A�钷�M����make-expr-operators)>> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html#make-expr-ope\
rators)>> 
>> 
endobj
217 0 obj
<< /Filter /FlateDecode /Length 218 0 R >> 
stream
+H��Wmo�6���is����4ФY�!Y�D@?�E�H��T/E����HI�c;M�݀-F�&�w�=�9x{p08?~�l8<�����/�׏=�BC�ݘ�ȡ�1��8ɭw/������c|`
.y���U^IQp%E
+RX�HF89I�c�,�&Nd�L�P�n�Q��
Ia�l���JQ*c~ػ�r����g���pv�:���fp��r'��N����,�u�x1
+t/l���O�GH=b{�o�9���jŤ��PPl��HY�/�ƼDoϠ�n�JBu�e^�L��D   
ڵO�X4$~����]�]�
k2i�v�Fč1��>�'"��R�͞�7�^�ᛈ��Բ�oG1�1>8��[����!C0��b��PXԏ�ҕ�ܺja��C�����}�r��bUU9d�N���x-
�^҄�����-     
Y+P�)X��3��H跳$he%0¼��!"����%ow�[�������3z�g���}y$�����/�XY� 
�Y]C���z�7u����3H^��\��b�KVpа_r5����(�\�Te��b�*�����Km���0ꌳ�AW_�s���z�Zm��<j�>b�j
W�;?Z\�Q��f�ɯS��ZT�ڲʅe��{iU"%V�����(գr��Ś���a�.�#x
+��W#>��c�F��5T�k�r��Xϖ�7�j�N�
{��aoӀk7>oc!�lq�u^MWVK��ίY@���,��˿oc;r�Ȕ�E��܏�(�Z�PwE
9ƕ��3�&��F�
+�Um4�/8�w\���%F�+��P�
+H�b:S�G������.U��3��,�fr�V7Fњ���+�~�9��-�b\���V7'�ZؕЏ��>.d&�.��ѺJ�����n�S�:��%��q���WF����ĺ��LH��qΡfs`7���N�SVs��h��`"?�,�Y��#ΊZ���h<H���Xdz����a�!>���[#s�����
 
ʷmsɦӦ��rm�=�"��U4�����A�&��!�H�F+�W(3!yj(��Leu'2t�1�ÝKV\ֈ�D�E3.k������H;���2��\sN4�w0�ۛ��6���uC۹Ny
   �@֋Ѣ�3�
-�=�p��7\ϵ�M��߮(�uE��#=�TµY�q���u��?��Q/"T�'V��aq)u�߰�s�i�m[�p�l;�<�������Z��ɱ�
i
H����Yo7��S����m;����8Z:��o.v�vc���k�z3iۮn��ՍR�o|����j��=.W&�o�Xڡ-�ո�U�!t�d�a|�E�e��r�j�U�~��K�
��Qe)\x��ГЋ�睕*}(09F�jΛ��@!
 \WAY�U�����?I\M��9-ڬ��v'���7���W��
+v?���6��1���7x�3*,p)R�B;BGЁT?��!����P���6`�=IN �!1��݇�E�~��7
q�5cNyQ��˼��D���`0����
pY���4'9+s2����.P6S��@�ԞK&��1PO����x?D84�n���h����C�_����
endstream
endobj
218 0 obj
1587 
endobj
219 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 483 0 R 
/PZ 1.37515 
/StructParents 33 
/Contents 220 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R >> /ProcSet [ 
/PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
220 0 obj
<< /Filter /FlateDecode /Length 221 0 R >> 
stream
+H��W�n�F��C=�ʉ����1�=N� �gy��A�lY��H�ٲF   
�o�*6)�6��}]�e�X��:�T���������`��\��2~7�9^�k1;ω�Z6f�\/�@
+㗯�0.c����%cq'r��GqU��6B�,��o�,�Wh'�    
�e2+4��M��}��,�<�1K�B����I��\zڥ�2�İ�aj�6�?b9[�46�k
�a�
$�.O�j'�dJH�J        
壐�_\>�6�Ply�;��m,�zW��Hʍ��T�f��3�����^z�7W��Y��,����}�yN���|ء>�oEY���A���7x̻:��ˬ���c�����4�S�\;�������
    
�sKg(��;�^LY]�o�Ť�Mf?a.���N�b�pggן�RTUV��Ss����Y�^@��y��oH]΁G�ω��GyJ�
+^��%�        �f_�O�
����z;a�u��NY��X�h��r��)˓  OV�I�}�@�%��G,t|��`\j�g� 
�`��j-��6;�Y�*�L|Vd
+��jHV�a��
��;�Ǣ_�>\������wC�5���+��+�����n����i�I�Α� ���,a�IΫ
+�Q�,�T)�K�O?0
��m9Q�O�;�/���1<,��FH*�B�L�"����1�ᨈ�x�.gx�F��)��d���#��\F��X��r���4�ЉmХلtu�
    9���&�a
D�m�zE�0x��[O:���};Ƭ0Yh�C?<u����u�|��u�{]���+\��!F���r+3�8&��!��$a�P  
��]Q,
�`
+Pz�p�S��Z�ð<ņ��rQ_�T"įX��g'&�g���o��c�x���k���=Mї�M�J�$g{ɷYSP(�?���
�J�G����v��{�n�Ge�[Om��@�Jh>��9f��g��`��O}BF6�.ʳz��\�x�7m 
+�L�9���V��Sѻ6�d���+�FE ��"�]Ed8e��0����C��6������ry���<���F�w]g����
�i�4%��\���k��!�x�FՂC�k�τc��^eN����:�u(#��N
+�3�ɵ�.�Rn�b�
Χ�3��tnoo�i�����Q�5`�s\fڶ���NJ~��=�+���))o��:u�{����S���t�HjO6n�ֱ�?!�l6~G?��0��CJ��>�,UE��
&�����L7�c�ţ���^��%t�f�������y���?��������օ��TDq�hN�����,��5�kqC�[#�4��
 
��!�.�vE�4H>�uY���*�ݫhl�k��!m<Xn+^r���6]��!QP�o�����2=L�,z!�l{��6<�Ժ�*�F�̑R
+��6'�h����cá�PWe^ʉq��e���V1?��&n5��
� 
9^La�Xf)t���퀸~ސxOp���)����0�-&��������[�#�C����㊰4p2��i\&^bk���.i��AM�!���.]Ox�,g}'T�)����%�Z�뉊�s�f0�-�n�9l��l�q�
   Y�-��$����50����qw�,��a�뎝��t���
(�����s�s�C�D4^
cjͺ1u����E��W�iǟ~�_aw,&=��#+U�����P���j��Z���9�'u�-ƛ��{Y��[C�a~z'�i��>�gz
+��o�n� 4ñ)Ӥ�*_Lio�"�m��^���
+="6��:�ғ.��Ģ�6����4�5��,�y��6i���E�v�b�Y�J>��ŝ@��E��  
$�+G>m�}%����D`��fM�:�xGC?2�9���g&-�(��g6�4��Vj{�X���S�R!
�3��,�E������Xm�-�z�v��ak��q��cZ&.Q�.Q-v��k���*χ�ߚ��W�0�Bp
endstream
endobj
221 0 obj
1982 
endobj
222 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 483 0 R 
/PZ 1.37515 
/StructParents 34 
/Annots 223 0 R 
/Contents 225 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R >> /ProcSet [ 
/PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
223 0 obj
[ 
224 0 R 
]
endobj
224 0 obj
<< 
/Subtype /Link 
/Rect [ 521.25851 47.70384 551.79996 58.60883 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#rgb-h)>> 
/A << /S /GoTo /D (���6b'��<���rrgb-h)>> 
/Border [ 0 0 0 ] 
>> 
endobj
225 0 ob
 j
<< /Filter /FlateDecode /Length 226 0 R >> 
stream
+H��W�r�6~�ùj��m�'e2���N;��m�^�N�1�56�����#�f�1i�E/�n@`��~�|G������߀
WWp�ͭ���gI%^�O�S"7!K����+(���qA��3\p��ȔX�۪��Xp%ER8�{�t���\�m�����nhĴ�Vx�����9�95��qXT��z�s1E�L�sQ�`§�JT%���<��ܥ�ݻ[g�s��n��h�V��z��1�M�#70f�
 P|�DG�(/���tvq�f�v}��+m%4�H�B��j%W���J�e�|t��R�F�G�ՠr�x�G��     
�Km�C`>�l�w����)n�E�����8�jq�,D��ZLi޳��M��l�,�㳼*11��bT�#m|1@�<�/{�֜���}�|��'",�"$W+Y�Dc�6��������|���Ĵ�?{
 :���y�!����]R�"ﺆ
�r��祆8���$�h[bU��.�����"j�g�U�R��і��ދ��`�c-N�3�fGk�G|5`�*sS^�3��*
��F�
 
|�%d�ZeE��'9.��h�>��B��1�B#2�sɧ��mr�z��o+tp��k��(�Ze���$�Z�-b�,��TYiv�0TPV
+�ԟ�F�{�o.u[������5�ʠ���汭����=�6�`���g���Kl*x�bڔ�0G�pml$&�>�q�bsN�=XE�K�c;�g��c'��
    �j�
C���0v��gJ|�ƴ=��K#��5�`67L��GQx�+�P���x�cIB��ZnD����Մ��/�'���%������j��似<*D����O���-F�$a;�Sm�g�gY��(80\�5;��$@�|}�i������s#2�ZC�wY������vq�.�P���e)7~Fr)h(���OT��ީ�"�]'��^ƣ�Ey7������z��V�'�ި�dЊ��?�>v�
   ���Lp:�4&I�9��j��-�YUM@��[)����Ȣ�F�U+�V�C�&�gU�c�e�c�O�?�(���@�+��iZ��
++�pe\L��h��o���z`�1p��]�����a��/��D�%
�<<��(pqh�8JͲ�y3?���G�VŚ�Rk@<�'t���LI�qͱ�o��WK��Z��ϔ���K��
M���������&X�OG�e&��
+{�
+�)3Tc���6��|ϲ�I8�遢g�����7�N�
p�a��\�]V����W^�܈u{HϞ����(�m�oy6��cs%G֘�W]���?Z��%@ㄸF̔��j�����)K3#)]G8�j,)=�<[s$�o�Ӳ�%ƞ[l���U軖0�ݵd/�+ƒ��$��㎘L�57eQ3iz���
+~&��~@&��2T�}c�����1�O[��\}2�Tu����RF���<�q\�%�F?{�?~Ŀ�য়]�`�(�X� 
HHB�ڱp�'�}/��jo���8������*(�y4�-���]��io�Ej;Q��ܰA��������>k
�>1����Nif��l�=RL&���%�x��A�1BC�����Ʋ�k|�[w׶�B��^j~��       
8���Eo2��")�<��Ca�~��7��M# �&
+Q��~�K� ]!Z5����-��Z|���(2}'��1;s�����f�����
+��)�� �j=���~�B͇K���؅O�jQ��,�)���~#�^24=ؿ��K��w?7��-�<-�
endstream
endobj
226 0 obj
1785 
endobj
227 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 487 0 R 
/PZ 1.37515 
/Annots 228 0 R 
/StructParents 35 
/Contents 231 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R 
/F16 400 0 R 
/F8 1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
228 0 obj
[ 
229 0 R 230 0 R 
]
endobj
229 0 obj
<< 
/Subtype /Link 
/Rect [ 352.91161 739.77388 378.91234 750.67886 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#leaf-functor)>> 
/A << /S /GoTo /D (���6b'��<���rleaf-functor)>> 
/Border [ 0 0 0 ] 
>> 
endobj
230 0 obj
<< 
/Subtype /Link 
/Rect [ 354.11366 611.64391 380.11438 622.54887 ] 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html#combine-2)>> 
/A << /S
  /GoTo /D (���6b'��<���rcombine-2)>> 
/Border [ 0 0 0 ] 
>> 
endobj
231 0 obj
<< /Filter /FlateDecode /Length 232 0 R >> 
stream
+H��W�n�F��Ål�֦�_�a 
v�G��YG@��`L��I�P��o����;$e���.����>�=��������ū_ȡ�3:������C��1�]ۋ(�ۋ]�"'��A��������|���

�(r���Z�������_��G�fd��d&ju#/ʬ�*��V)ie��g'�Rec�sˏb�y��Zf���'F�Cza���4O�x��|Y�E��:�;������Dc�
+�&�uX������sz2��2�V��c7HX��:|-��yS�u��m�j+��~���*]�ZT$����Fj�f3Y���H�#�˵�J���6~��Ml'��N�:SR�;�Ǟ
÷u�����qFӒ�ݓ�ێ�{~_I-��=1c��)��x�q��~��t
�$N`�ϕ�j�oW��^4�,8Ōꥼ��e�m��B�1{ڣ-���Q�Ţ��*������k
+���N��}����w�5�sU�Z���>7�Ŧl�F�M�    �ؾ�w�FD�X�g-�T����քaK�> 
aj�{S���R��31ת���r��%]���rb]���F��w��G�m���0�c��ĵ'j+�u"�Z�Q��3��.{    
  M^��'����Z7iM���ƶ�`���g��Q���+9;�<��RgG�\y~;���|"gG{*Zԣ�̿�2G�E      
џ���8���u�{ld�-G�iڑr҂��O�־h��z:��� 
��Q����D#��x�-t,����.t�v�ul7��2_�Ljb�rQ��|�J�Jd��r�0=��8=Q�z�:�e�.v�·W��P��Rq�ͤM�eS˵�]��s���oGa��E5�j5��G�,R39
 ɷ���v��*�+��mY��d�a���>��q��C�
+� G,Mm��^�L�� ����&�������Ƀ�g8��ۜ�[2��?v�0B�
�y-ߕM�]�\Ó{��-z�A���A��}�o��)S_�_(+kNT~�D0��������g�˦�S�\K�kn��
̮�e�5ʯ���d_�Iϛ���*S�-=��sXΟ|���[�o/'�']
+T��2����O��!��+�jDt-8o@���@�*.ǩe�mӳ,�ނ��mj�9�د���w���H�
��R�tr޳��EWe[M7B��هc��^�+ 7@��
+����”r��"ѢbCHkĜ��u��`M-�����vl��o���,B.������`���Q7"c`�� 
LǏo���č\C�z��U�@�t��L7��ѝ_�C�2U���r����N�fJg��?8-�8C�� ��(S.��S:0��
+(����~+�Y�t@D��8�`7����ƾg�q��:�W]�
+�z���NXl���M���6/�
+B�{��h�&^��������-�|���w��l�uWӻ�ʼ���gC�����u܇j�[�
+�(�P�Kֲ�����#H7E�C�,Uj����+
+ԕe]1��IaZ�ҙ���;ړsCrs�*T�>ә���ȗ^��p7�N��H/h3�����'���\�5y\�$z<J� 
�c��%u�Z���9�Tp�����M/�0r˾�`2�hM��f�6o�߆���e\~S���e�ҽ2�E�VM��xA+�+�@�V�'/}��;e[�Y��d�����9��-�f�k��zYBP!1ʚCN�ͦ'�S��vq��%�m��n�E��K]6
3=*ꪇ��a4� ++U�c�W#XZ����h'Q��3�9�w������P3+1�0}׸Ĕ�?��8ODt
�s�]�h�{
ɮ��n�r�d�j��7B�.�5\�8����3��M��y
[ю����j8'�.�����ח�>A��{���,?��G|���W�F���ojm?
�       X
�*Ҭ���T��~c�����Йw�J̘R��r`p��5�����Ȉ/��``�;��}�]ߤ��:�d�b6A�h9M�Ϝ]{�H�c�B�u��RL���v���
 �G})��@�I������aK݀����#X����g
 3�g�'��t���I\�)k���"kt%�E�H3���Z��Ӂ��f��/k�h�# 
!L�Q�0t<�;�B���Ƒ��eM�ġ���Y�����h�^��1���Ef�4�3Qd�������G��J�r��z���:�hz�$�:�'�a
+�y����?���훏��0A��
endstream
endobj
232 0 obj
2208 
endobj
233 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 487 0 R 
/PZ 1.37515 
/StructParents 36 
/Contents 234 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
234 0 obj
<< /Filter /FlateDecode /Length 235 0 R >> 
stream
+H��Wmo�H���~�BE��~�(RChU��z���|�6f���[/�Ҫ��]J�!��$��0;;����,��x�\M�]�
��pq9���Xd�0
 �l?�����x>�nja���ǗP[����|S��|W坘4U#˕P�,@������l��Y�_6�E�并���     
��>��%�a�ی%)d+����N�u�������� 
���l/���7�^�[�s���‗�~&�I�����4n�fu[�����8���}rk��M����0h>3���B�M݁Zr�,k�ZAaP�|%:X���A��V+l"zxa�ʺ�E�k��*��)��O����0#;�#��^d˲�o+E�a�?I1�_�/E=��fȜ/��#l���
7��#3g��2�ŐO�ҩ5gOԼW�;]u�˪/t�'��D��(\
؃�
+���[()��J[�e%@aK^�rVڣkE�[%��轜w�oy�\7��p}��"�R��"1aCJ(�jq0�:��ٟ�H�6ӣL�}��tǖ�Y
'�?C��`�i
+��V����׍�4rʋ������X>j��u>e��F���4���7� 
sȴa�En��8H~���uH�:��‚0��8h���tr7�
jSF!(��h䬬��-y��P��{b��l ו�F�a�I�@�3}p�5����8
{���B��n��{Dn�N�K�(����Dľ�i���-��(ػ����c�þ{q�cbS!BRIQ��$3�zA䌐q�5)J[�<d�{م9�g�=X����Ad1���a
��,������-��%���i�4��W�w�o7z��ѧ&@
+x_���ݯ������6�?�kc]�Ik^g��<������T�9�f�9�i d�+��]�͝��7ݪTK�J8j�Θ�T�
+��D7���g��1?u�������,�Wm�`��WC
endstream
endobj
235 0 obj
972 
endobj
236 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 487 0 R 
/PZ 1.37515 
/StructParents 37 
/Contents 237 0 R 
/Resources << /Font << /F12 1468 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
237 0 obj
<< /Filter /FlateDecode /Length 238 0 R >> 
stream
+H����n�Hǟ��0�IUZ{`��BӪR��RK�㨪=��/f��KhZ���f
I���N�Hh=���g���DW�At1z�
+�p�j|d/���B����T�H��>Sa7V
+j|x68K�S�p�C]�B��֌ʢ��qu�A��k�t������W
g!OX�us?�0�    n�!��Ep��
+������yW(H�A��%��qg���B7
\VCb�h\�����_�5b�6�v��L:��-��Wʅ�F��������L�XH�哣�=d=��"Y�K�Oс
�S����6�i?��4��M>�����)S1����j��d�=d       
aS;d#ށ�H܏(Z��.�_���3N�r&�QG|/'g���K�0�Qt��q��Fl������v0�
hhr;+�C��ҵ�"d����2Y>͍����#�����
+g�P|~S=#r�H�2��b���dV�$l݃ă�������u�t�50�
����A:�iY�w�)��-��aV�p��̍-W��{�g7�[\n�0�uQN�7�M��%��e�       
?�H8!�K"[��G7�<,j)��v�z���DH�0��*<6
+1��7��6n�     �-��m��=����
���-���J߰\�ް\&�"i%��^��
+�S�^�̡����z�UU�ayk�93�m���2�#b�n�>�]�?�вd���      
Z˄�|�V�+y�ݍq{=tI=���]��e���6��o�͊��������u���pNdK*o;O��Q��Zw-��Z���  
k�����%e���Y�Q�����m�Lz��gs��s�i�V����}ju�m�pV�F�4�S���<���ҝ�p����W 
g�/�s��~$T��D�T$��u�qC���5$
endstream
endobj
238 0 obj
918 
endobj
239 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 487 0 R 
/PZ 1.37515 
/StructParents 38 
/Annots 240 0 R 
/Contents 245 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F16 400 0 R /F8 
1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 203 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
240 0 obj
[ 
241 0 R 242 0 R 243 0 R 244 0 R 
]
endobj
241 0 obj
<< 
/Subtype /Link 
/Rect [ 261.98177 463.77475 287.42278 474.67972 ] 
/Border [ 0 0 0 ] 
/A << /S 
 /GoTo /D [ 148 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)>> 
>> 
endobj
242 0 obj
<< 
/Subtype /Link 
/Rect [ 289.60434 463.77475 321.26566 474.67972 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
243 0 obj
<< 
/Subtype /Link 
/Rect [ 323.44722 463.77475 350.01822 474.67972 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 247 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)>> 
>> 
endobj
244 0 obj
<< 
/Subtype /Link 
/Rect [ 200.03035 444.86786 411.96962 455.77283 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
245 0 obj
<< /Filter /FlateDecode /Length 246 0 R >> 
stream
+H��Uo�0�������_q�1*m]��Z(m$��i
+���II����sI�-�01Rō.�{���lo���
����A��G]�HM�o(NE��T. `�*�Z���Rr�/�‡�7rIT�7��%Y/\��S�c�s8��89��úr 
�Qn��`�g-�/
����ls���t_�����.z�~o|1:9��ӝ�3酤7��Tֹ�:7T�R�F
+�2�yV�w�u�h��
7B����&��u�wx��$5m$�,�<c`�D��[��r%,�}��K�[^-�$�u0:��lU���[-sU9��?�˹�.���~9���n�|�mZ(���k��t�l�L=�3�2�ゼ��Y�N�뙃��iޖ4z�n[����t�=�i7�{K�/=\��q��'۵�#7�P���I�\Z';/[��a5��ɵ�L���`x��cB�]�,�Gk����U1atB�~�Z`���?����̀ͩ5܀�>UqD��*!����}�����������z��g��ݜ��ֵha,v��M9R����9��M��l�ک��Z
+I�
+�o�>���O�
�&�[��h�6����p�     %��R�� 
�(BqtS[����NJ���Eʔ���n����y�F?[�A-��-�!Y%Џ>eyTd�-pkmC�{x��#�O[X�V�*��4FrƷi1w��[�^Ax����FS!ʣ��yQ,�<o�^�b����h��$Jz��x?W��jso�
+��Ů��b�`b3d�h6ބ�q�  ��"�0{�i�A]�_(�o
endstream
endobj
246 0 obj
804 
endobj
247 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 487 0 R 
/StructParents 39 
/Contents 248 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F17 395 0 R /F15 396 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 250 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
248 0 obj
<< /Filter /FlateDecode /Length 249 0 R >> 
stream
+H��Wێ�F���Z���f]�$��" i���.�Yil+�4�h�΢h�����4)Z�؋e���C򐚾�<���y�\x�
���q>93���!J}P���j�����\��R� ��r��*/��y�ܾ�q��^o���q͝j�o
+p�?����A��R��Z�™�yh+<���ώ�(pk�yi�7�`��,���3z{���E��/���g�čf0�,rg��x�y�s��BT[�!�uq��z��n6��}�Q�.��/�T��*D'�B.�E�'k���m���WZBNN7��s�}�ұ��
 �_�fC  }���6|�.�S��rEV2Yk^�B5�5m��� 2��t        
e���,�`�d�\#�zS5g����:/��*���
Yj��x��b@��NWA��D�q*ٮ7K�D��Bn�wI�j�dƔrLV��H�=��Ywfl31?Mc�j���m
+�KJ��6\e6��4)�sbw�!
@�t��%WG��a���j����Ϩ�xx�[^�~��|odsL?�X\�Qq�T�>T�B�9�W��dS�BW�,�!��9^*��D��`��D5�`�(�
 ��UJԙ��"9�������
ݱ*%�,O���5�mu���/�v��s��8�^�7�,r��'r�Y�Or�ޗ�|g!aJ�'��Z
��:����O_���󾼠�<�x�b1�ٽ��_��W�
�-]�h~�h�*P����8{�7���H��dȏ���8����l����~�v-dy9�Y��' hF �
��:�/Kl�q��&��A�,>اz�v� ��P�������� 
�}G�V�k;n�8d8��=��N��������Ei�g�,�(�!,
����X���������-Wc?d�0�O��
+z`>=Ie��Gm��T��FpV�D�*�
+��3Z|��i��׶�YL��%�zI�@Wm��Bb�)h��^��}���Ժ%3���m�^>�N��l�}�;�"]��(�ۨ�:��~�F[��B�
�+ʨX      �C�`9�2ߋ�i$����A�3��9��+�@Q(s��>��X����q��Y6��`_��3#>O
͒c9Dkt�wq��=]p�xV�     
ּ���#����.jY��E3憑�z�V��<8�6e6$�v����6f����֘�^]>���mo��
ُl;�k!rS�ن�k�����2���K��2����!)E�
�E�9dD�,SÒ���%��%�R'�c"7�Lw<6��㏴
�c
+�}q|]�/��7�iĒ0H.����lq86vim�п����_~�I���*N��6s��SL�s_]����t��Mpi
+Տ�d%�K���?�[S�;�
+-��.�FW%*�G�䣪��ӥ�SS\��O����7�v�%�Br�]
endstream
endobj
249 0 obj
1440 
endobj
250 0 obj
(�\(��\r��G��Wo:'\()
endobj
251 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 491 0 R 
/StructParents 40 
/Annots 252 0 R 
/Contents 257 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F18 398 0 R /F8 
1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 250 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
252 0 obj
[ 
253 0 R 254 0 R 255 0 R 256 0 R 
]
endobj
253 0 obj
<< 
/Subtype /Link 
/Rect [ 245.4679 408.87109 280.45337 423.86719 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 81 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)>> 
>> 
endobj
254 0 obj
<< 
/Subtype /Link 
/Rect [ 283.45337 408.87109 326.99274 423.86719 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
255 0 obj
<< 
/Subtype /Li
 nk 
/Rect [ 329.99274 408.87109 366.5321 423.86719 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 286 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)>> 
>> 
endobj
256 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 382.87109 451.7252 397.86719 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
257 0 obj
<< /Filter /FlateDecode /Length 258 0 R >> 
stream
+H��Umo�6���is����w/
�����)�F�>D�@[���"=���o�Q�c56���d덺����=�wwy��^�{>\]��7������$g`��y]��,��}��z+��Ԧn�5�LM��A
4.��s$��x�HÀ�>>
A,jU��-��ҙX֪�gЏ�ս[n�–g?��I@���PL�8�"�Ɩ�s�����7��r#7���&�3��
,�I�����$ixH��v���Z����ؕ0�U�Vu��ѐe���"#���X�6{Ĉy��&`5H>���\+�k%
8Wdd%(mW�ZB�^�����m��O�.�#�WG���rB���j�|��������$�}M^|Dr�0L#�����t؊���қ�Wp�/|)�����Tf����
 �֞��'�6f�eq�9ou]���������">��Qj_N�cg2��0_��˓����BQ�R%A7��J�Z��6
Wsz�MY�ة��]-�s���[Q'O�6�m�/  2=�X4�����(嵮���}1�
 ��x+�'�9W�jQ3���NzNZ�Ghj�Q�J�1�K\��)        
�YO�-=IC����>�D|��y;|����x���O>T@XSd%�(p    
g4�e>��0:�Ir�_P��H��j��~:�_�Ϗe����,�y��#���m��n�i�d��EpLp�Y�
�����ӞL�g�&!�N�ħ,�2���q8�)��a���fG�;0��k�~4�re�dqS��7x����V\”�t��Gp� 
�_�����wr��-��.�����
��\�p2����pSA!�5b��3�ͣ�(K(ãW������v��%#�A�\Rɕ�K���n��m�b���
+����l#�1'aV��C�{%a���F�eT���~��`�-�
endstream
endobj
258 0 obj
928 
endobj
259 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 491 0 R 
/PZ 1.2477 
/StructParents 41 
/Annots 260 0 R 
/Contents 262 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F4 397 0 R /F17 395 0 R /F15 396 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
260 0 obj
[ 
261 0 R 
]
endobj
261 0 obj
<< 
/Subtype /Link 
/Rect [ 305.27892 325.81979 412.49034 337.83867 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/builtin.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
262 0 obj
<< /Filter /FlateDecode /Length 263 0 R >> 
stream
+H��W�n�6~��Aik�"u���v�6m]�G�L��$ѕ����=�I�W�Kg 
-����\8�������W���9��;��%n���{$�#<J��c�>��j���*�;x~H��S<�B� 
��#q�CJ�� 
+��UIc����z쌶��U�j�ZP��E��#/R���(D��\�yu�^S�M�y�������a>q}_K閌�ď]B�&�sr���߯x�JQ7�&ߜ�Ig�v��h�nL˵k�R��$
+���KK�+��J�v��^��z�R�"��v���#��~{���أ�`��J�
r�At`�V��E����@L+h�1��H��7x"�Z���SgU��C kΛ4�l���\B�Vʊa�{H   
�1�ʂ;m�g���O��[^(�B��Ⱥ�$,
+q���EU�JZ��N�@ZͶn�t�TC�c��lI���!?B�0
�J����
a�/<xD�(&�D�1�/���[�Xqɷ�l@��y^�[e�E�-L���.��$Vj�F:p
ZТM�\���|q����/zE5YZ�u����N�        
�I%�%�~bb��[6�Hm7�|.�-����U+�=�l�����0ף�
�du�RY��h_~��zaD+��Q�8�T(��,�)p�n��i^���lCٴS'�#
t9nI�a��A�%���|��R�?�p�(�F���Q��Ӊ�J`�en�l����\a     �B~pS   
`�Do�O��~'s��ʓ��.��j�ʓ
}dC߃�
+aj�q�����^�np��x���G��K(��N 
��G��.�]�����qN�>�q\�nk@&_��o��;|�ua���č�<lY!����)#>�m�p>���3~��x,4�M�*���7�%��0
vѝ����b��ف�r>�6�X�JEߴ��8��<$I�J'�]�r�W[����'8H���{�##Aܣ��E������+
�=B�����ׇ,qg}MS4�$��i���
F��c��Q\��4Y�\��l�GEMz+I�;7�$<,�%��<2e�T�Z4�ؙ��t�zVG�/��'��f���:�V��VdzO����2p���F��W����VI�������V�~Pe�d�����N��p���i�8�a��e��-���Q��ls�3�"]
+�n�E�_���dc���e.��Z���r�Z�������>�X{W����
�f��`5y��l����A� ���)��;�;sM�E��t���7��x���(T�T�v�F�XkD]�Ҳ 
ר),zL�uW�O��t�1k"���Տ���yQtӈ�$�ʐ��)Ff��
rP4����hQ{1=�>;���;.����̹���]�:폅���Ԇ%ILSQ���PuBf�(D�|�&��
;?���d���B>��Aeo�f�Rй|�lu���{4`�=�XO��=��Wτ�i�׏���p����(뿎&Z@4�(vM       
T�fҢ�yZ4��+���&-tA�Cc��K)W���z���U�I��iU����ݤ_,ˑ*�#u
�tW��e�~S��l!��/��dD�S�z.�\�v�#���lb
endstream
endobj
263 0 obj
1605 
endobj
264 0 obj
(uhS�5�.��-�=)
endobj
265 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 491 0 R 
/PZ 1.2477 
/StructParents 42 
/Contents 266 0 R 
/Resources << /Font <
 < /F12 1468 0 R /F4 397 0 R /F17 395 0 R /F15 396 0 R >> /ProcSet [ /PDF /Text 
] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
266 0 obj
<< /Filter /FlateDecode /Length 267 0 R >> 
stream
+H��Wmo�6���~(�.�%�=��iZh���u102��E������w$%�o-�n�
4��=w�܋F���F��o_��1�|u�}�"��iA�$J!��!�ԏH�' 
���94�����|�5.*�Fx�tu��E-d��ZV%���b����4?+�#�
B)�i���IFr���0'iQ(��_ϊ�^@���P������%��ge͔�"8��[��kQ2-$� 
O��L*Zr��V6��|�l�Xrin�erT�Fi�OoQ��s�K|v�J7��sz�?�v�Ke[j 
~��@����m���SX�����?f��..Ͻњ�AOf�(r/u��!����%����r      
Z��N�9�8���54�O�9yӈ������v��,�!���8MS�S��I(0s�?pbLN{l��'�m�e1���]��n��L����u�v�Ad=�>�C�ǻ*ė���B��?bl��3#$ALcguf�;����)�UM�+�5�*|�m=5�׬j���h%�U���������y��$
 �����j�d'�
 s�z/>�A��
+}�>7_v����<���G#�{وn
+�I}����ј�>
����]5׻��HҞS�j7�����W�֬�#��/�Ր}*XzJ��\��`д�+L�����'V�i�:e'              

�M]��[��j\B�0X�Bi��[��{������;pkLH���a��%�t�>ە��ă�$���a��ry�[�{6�ch���x8'y����rb7Ͱ��M+�5oU}|0}6�6�J�@-�
��
?�9��3'L}��I�2g�$Q�I��C�G�<T#}�F�c�����#��n��i���)V�m�����S%����N�a 
�g�ﻥ/~|�
��DIfi�i�X���L/�3�I����i�ow�RL��5SS��;-L���e��m�B��"a���D���#�=й��'qgJ�2,��b�P��Ɇ�?�)I��sl�S4̀f���ڴ

�ԕ�?{3BF�,��.�7"��`c���}S�fp/ZX1,��9�i�@���4!~�3�n+�*,ڥ�n����&�n�8�o]����X��z��[����ǰ%y�a��xǰ���&N84��yά{3�T�)�
 ����c|�0X�\q���@��?�=����~J4��mz�v��9ڌP����F������
�̷�zQ\@Ѣ��)lufX`Z�kn�d r��.
�Z/OG��juR��$򑰲&5kjr-nG+��Z 'GK��h��-y�5
+b�� �<�ρ?��Ⱥ#<��i����/��`��#�
endstream
endobj
267 0 obj
1311 
endobj
268 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 491 0 R 
/PZ 1.2477 
/StructParents 43 
/Annots 269 0 R 
/Contents 272 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F17 395 0 R /F15 396 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
269 0 obj
[ 
270 0 R 271 0 R 
]
endobj
270 0 obj
<< 
/Subtype /Link 
/Rect [ 149.0062 406.23582 256.21762 418.2547 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/builtin.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
271 0 obj
<< 
/Subtype /Link 
/Rect [ 354.99069 406.29218 489.63524 418.31107 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/PeteOps.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
272 0 obj
<< /Filter /FlateDecode /Length 273 0 R >> 
stream
+H��Wms۸��;��\,���43�Ϲ�S_�X�v�tӁHH…oG�ֹ�ۻ
��Hɾ��m2Q4��}v����7o�w7�޾����X?[�������X�Gx�υ��Yd�P
��@a�_Z6��z�_$X��"�J>��2+k�U�ji�?88����eB{���r�h����Ø-���b��˭�L6
+E��x��7���^j�T� 
~Q5��a֚J$r�j'���,WV��?�K�q�rc����L���L�%�J��s�B�����`��a�Ed"����
�j-�6S���Ff�e�����,�Q#Re��Z�����Os�����/púUP�R���,��o.ծl�`��?>۔      
W�T��h�d�dm��J��pbe��tw�P��Q�m�=�\��$R}�y�d³��
+��_k�&J��ȼʞ ��„B߆��^�x�K��>�v��f���y-�2��6"et�vi���X�ޝ�ޱ�_*�0Y�E�.BL7�X�
*^#�tP6�5�k���S�?��/���l�C
5���e�3�ۂ�������
+�0#�}��^W�.E�gA��ƥ�f��KnKt_���?tb�6�㧮��7�^U��X:\\Yf��d�C'��aj�D��LE}�ڪ����ۋZP];pP�h������-|�l�w�Y��@0��y|��̏ܩ�������.2Й�y3l}`r7�-t�.������r�S�i���>
   �c����/x
���4���r���r���0�O��Q�uz�#̥�h&6�8g��y�Rj19��e]�����4�UCGŴ�m6�W
�!A��L�'�絤��:���r�]}Ĉ�{����MY�'��δ�h�P�-·t_�
��rY#
+eP�T0�<A�=�s��2���4>��e>u�gaO��T���V:��ܶ�Ӕ]Lf�U�C�5�]���ؑ�8L
����7��yCj�ѻ�����n��QйB��mV�™]e2�
+y�+�   t�/����}���˰M!�Yt���]��lG�WP�����fu�cNj�a#�C��     
,�����h��A�<;wp� =��5�IY(���I3�x���1$�d�Y���y     
rFG���8#�k0^�%����S%�)�~���뇬{4d��9�
}3o���\�̏Ʌ��X   e��V��8;ǽ�G=��H�#�-�P�� 
0�;�E|�UFw!�{��w��H�{$1��R��ըw����!t?bN<D~p�z6��7D�,t]��?v��Xga�4I-+S���
o��0�\�;��+˨뢗`(
+H��(�������@;���l�������?�?�?ڐPf��3;t �� d��-���Yh���� M�HTv��O:��
To�{���������&���r���w�@�     >�2/���vy��&35à�
��Ki�����\'��8�<��|�Ad���N�˲̚��PX�
���fD1�E|��
_�>7�C)rR-�=(�T��L�P}j�������V�H��8�=�8��.1����l��.��.��q���9'����ɯ�w߁��{�P|{qfˇ�|����{�ҏ�s�n�v��7�c�dsv���+�i�s�X�~N
 ~���ӓ�g�)�zNu��#?><�sPWM���\5t���.5��
����B�\��I�s\'�f>�,�2|��
.%M��[y��W�o?e�>2���N�;�p����/ͣ~����X�痋Oջ4�F7~���{�eAZbb�)�������GO�����(�h{t�]��I�������W�Ԋ
+_Aea��|�,�CŌZa$6�)C�!�iD�߽a�E�d�$�8����C��B�Xuu�rlq<L�i�>��N�ң�H��@=��X8c��r��n�<k�/F��b�D"72�W�;r��3+��t኷_���0A�'���u���z�j��C�O䨧L�8�z���u��<�}mk��iN��"q����)a�k�Y
 ��GqSfe-s�%PK2�sh+��=}Ԙdm`N
Qlk~�a٢�_$������V�n�z�%�1�)U]������u�3Ɠ�e��ض|����oPt���y�v�Sy��-�7�^��=ws]\޵_{6����a�/��tA
endstream
endobj
273 0 obj
2165 
endobj
274 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 491 0 R 
/PZ 1.2477 
/StructParents 44 
/Contents 275 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F4 397 0 R /F14 399 0 R 
/F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
275 0 obj
<< /Filter /FlateDecode /Length 276 
 0 R >> 
stream
+H��W�n�H��C!
왨�n^�H�pd�ıǣ`�X-��Ԓ�C���F/��[ݼ��H9|�P�Y]u�Ꜫ�Û7���0��;x31�2l���e�m����(���g��3]H���/阮
 �o�‡��E|��8��`#�$�C��
+�%����^}$`PJC��L����3�8�|��tc\��W�
��������?ʦ��4\�pΕŅqAԏ�S��nb���h:}�N��3_�9]KXK��U
+ŝE�C\��3;l%m9�?:����I�ڻ���2���x+��        ��R�]��(����8
�=:�:�^U�(#��>�(�6s��t���I&W���n�v�_��#��)��Ƕ�Fp��p�M[�لyex0�4�lC       
�p�{
+�u�J��l�D:Rh*6�~��.�lf�z_ij�8�F�
�#�o�:�����2�m�@'<�px<�������"_������"+��&zCw�^w�7twx�G�o���'"ͺCg���l'B,���B$v���
 I3,��n�
�
+e��d1�2S'fF��t;�����m��0�S�VfR�6�$��z�a����?V�     
��{�������Xn;���B�4������9=� =���(H�oe����
+���+�#��H�-t���q�~�V"E8������o��f�� �"{�
"����-$�83m0��%����ɭ'�7���]��/G���O�;�ӓv��m$�����&�&V�����C��f��8���s��M�:&;��
L�M�`�V]Q��&-��Moe�#:X�q�8\�{(����E.;)ٲ,��V�/�s�&+j>��`�j�ߏ�p�rF�r��c�8�
�G\����Z\Q*M��P�F��PW'�Y�z�
+�N�`uiq�.�����#��MI�eV���ۖ]t��{��<���]4W9��b��n�#�R��k�#3�u�.Ff/�빕��0������5�]�;���ʼn�9�i�Y��P͓���E��M$B�E�%�\��W=G��gõ��8�ST�v�Y�#�8/�n'��!m2����`��$_���'�jد��Zg�r
 �In#�r��%W����aёz�����>-�ң�4��:ۀ�?��u�v�7�\EѾ��,��c�N�]߲�_�\��hW
w�elKh#�~l�K�m����R��h�W�x��/'�[��w��p4h�.T5�2�Ϯ�W�Dُ�`�n�F��Un�4NʅS�j��r�l���,��1��6=��m�؟��%�ޙ��X�����$����[��X5}
TL�tk4�Rz��Q/p$�9$S�&jF��i!�ylui,q(G�[�|
ϻ�8+^�9ADXF�\�L�Q�+�ӕ��c��� 
By{����N+�!��>Hץ֪R�����'�gF�e��攺�������7p����wq[�}�
 ��ԫЬ�W2E
+{��+Ү�8�w����[���5W�P����:�Dz���׃��&E%׿<���]Cq���=�م
|֫���e�aN�DRc{�]��9�>    
��e�ʹy�܉?�}���h"�c=>��FL�z?���eej��f�*2�z���ډd���t��x��������zz���ӧ�ţڈ���u��C%Yw��a#>���ж�Ҕ�Q�篓/�nn�>~�~��̥e'&Ɛ�\'W��Z�
��]�<�8r3��72��Ek��<�!A��&NUu�1��PC*��d��i}R�^l|H��ʵ��ʥ7�M~
+��s
+l#�?���)�]h�V1F����Ԓ����l���_�0̦:��
+� -(   ��&�2�j�8]�\Z%���ƾ���        
Q�T�j���m�٪昏�_U���<�Z�=S0E�~US�Pa˸6wsusSb{�"Ύ�G����� l�ZKן��O����T��
+TJٔMDKeDW~�4:JfK���(u���=�k�ΧE�KJ�,˯@�;�իs�X��~U����d��G��b�]N�0N����tI�
�� �����Hp2�8P<��e�~�CZ    D�^ASbPa+V��j�5$o�u�m����~?
+�L&����$QHV���S�"������u�        ��m5�,��]¿�9f|��b��WH�w�.0��2c\
endstream
endobj
276 0 obj
2161 
endobj
277 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/PZ 1.2477 
/StructParents 45 
/Contents 278 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F4 397 0 R /F17 395 0 R 
/F15 396 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
278 0 obj
<< /Filter /FlateDecode /Length 279 0 R >> 
stream
+H��W�n�:~�/����OQH�t[�A����X/
+Z�m�H�W�쓛}����,�4mG�ř�7�|3���~�z��������ݝ�_˷�y>�=�
+<ǁ���qd���ַ���ޮ-ɟj
Y�/4'5;�;����X�*f��;6r�z/�S�q���n�+3�����;A�ua�,�"%9�ċ��~m�?�Y�G�c����Y��Y��]"V���0Ɖ�m�)���D��
 ď5�%��cE-��e���_   ������iN���2Cmp
���Q�5)�0Z�l����Q�֟���M#����)�n�T�c�M3�UFEZ1m��4�
�{��(��f�6��-�F��$Iڗ�|����*Q���Վ�gyx�F���-e�n�Nv��eM��J#W��Y���W|Qs�����"Rlپa��bT`�Q_��E�cN�刲e�r
V�vMK�+��B�U�ϼ�3���le�d��0(
+��H��C��<�����Ar���w����Z.�˅��
+r�M��} 
�v,��o�60xscA4���G^��������.�Ւ���������������P5���Rz�z�AS�?i��Ì��I��xX������My���C;�q��m�ӿ�
y}!��% �}�ْ�ϕV��ˬ�#؝Q(��u�����݅H��IY�:I+Jj*�     b#�tG�
<��N�7�'2x�՟PU\�ȅ�������ymX��e��4��
+��A��(�Z"�� 
�"��,���Wx`G��Xs��I?���@��s����R�d����q5�T�����KsT���K��J{[gKCp��|�Rnh"�E��
z��������m@5�f{�t��82�_7;�. �uS���S���ڍ�1��E5͔�A/J94
)�J�e�t�0�71$�@0���a�
T/t�������R�����-4Ɗ�/���*�"v�KW��`�`��6m�<Pcө�߂B��\�g@�&�fc9�ܬUj
+��g�ûlUE��4
+���c\KyR:m2�7/�$�r�G:A|���ocS���ا��{��+�>��}'�^?�rl_.�q^�狾�8i=��j�����iwr��W%��iۻ��mp:�y8v�e=�f9���)��/�+����

l;��I~\�d?�Z�����tZ�1DQ�i��)��J872V5s���c�@t���|��iۆ����]є���ѝ&oU�g�S�FӍՏ<��;�o�o�8Nd��K����}C�l~e���ōB
2�w���,���Ȁ�%�a*��N$���&z��W�        Y! k���Ajw
+����N��F�������_H��u���"�G��)�V!����J�BԤL%�`*''�2���Xh
+�х+�;c5Wɛ��^3i�L�� iŕ��>}����ƺ��t����߯������/�:`��'ݐvI�8       
��]�$-�A�i�Ћ�����Y�fLN�J�Jʤ�^i�
+V�iRcユ�clԺ�<|�e��e�2���ŵM!����(�gSzN�b������R2�{�3v��:�j`����L�Ԣl�!���rz��N��
 
��j�1B��I�ex��F�3�~���)��!$(ɒ���'�(im�[(#�҄R��-�<��)>�����]�ب�?Z�t~z�������|l�o��(�\�{@�́��b���h%6!!q�)VG�s��,��2�$f�̜�ɚ��tYR�C�O:�
    4�d��MR��Έ҄��P��5-<�ꭡG��     
���i(z"O��P�f6���'c�R���X�%�o1�ZA^�l=�����u�����j     
��7�Q���������T���6H0(�����q�8���s0�]ݪZ�T�}���0zt��y�[=���G7  
h����F-�ܠG��̯D���n0���U�6����h��r2Kr)a�Fˁ>��i*0pb��#�1#�g�-�DRJl���V_h1���y�
+ZW,E�\����,?*���@�`Јb[��RH�
8���XX��
+����%v�����|>�մM�$�qN���i�?A����Hk�*�n?��"��2@|c�P+�{�&+�c�Wn�ʳ���Z
�/�+A�
endstream
endobj
279 0 obj
2168 
endobj
280 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/PZ 1.2477 
/StructParents 46 
/Annots 281 0 R 
/Contents 284 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R /F15 396 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text ] >> 
/ID 264 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
281 0 obj
[ 
282 0 R 283 0 R 
]
endobj
282 0 obj
<< 
/Subtype /Link 
/Rect [ 288.55228 468.59065 323.44769 480.60954 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
283 0 obj
<< 
/Subtype /Link 
/Rect [ 189.20592 447.75249 422.79405 459.77138 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
284 0 obj
<< /Filter /FlateDecode /L
 ength 285 0 R >> 
stream
+H�ܕ�n�8����0�N��H�:0(��{X�k��XDE�ڴ�VU����>{)�v���f{�6L�Cr��3�П=�OFo_��
x�r��"N0�<��!
(N€AL8�I�B?��H��ۮ�Kȟ�R��F�t�ۢR�-��Ec�����t�5ۮiQ�s>;7����q 
p�pi��`��
+��Q�
+l�`6NǠ�J�[��ax[�+�im]U�^�g��%�CA,�       
K�d����Z8ӽ+��f��e8"�������Ƃ��`�1s���QL9���6�VE����U��d
�.�T���h<!��
�φ���cъD�I���Ek"����E)�QfZWr���E���l�0�N'���|>�箝���a:�����Ȳ���# 
����~�x^�=��i�1����m+ođa�x�ੀ����L����ceG�A����        
^u�Y�6N��7�m�_��oDכ����a<rB�yf�!YJ��.qq�t��5��&<�s�
���O+�_#��%0q����'\}$�t�(Ip�xL0���
+,����D��u�vu��8�(GN&"�}u�z�+��$tp��!�+������9w��G���Xpzoہ���Gp�]��&����-ֹ���.��a)+����&��%\�O���-P!��;�o�;}�ށp�'��ꯕt�-di�����nh�Zu(I��1����͹�o�[���j?����.�Z��ߍ�6Uas�QV�����J��
� ����     ��
�9K���>}?!�
endstream
endobj
285 0 obj
787 
endobj
286 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/StructParents 47 
/Annots 287 0 R 
/Contents 293 0 R 
/Resources << /XObject << /Im18 1469 0 R >> /Font << /F12 1468 0 R /F10 1464 0 
R /F17 395 0 R /F8 1467 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 295 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
287 0 obj
[ 
288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 
]
endobj
288 0 obj
<< 
/Subtype /Link 
/Rect [ 332.69977 245.00391 434.24057 260 ] 
/A << /S /URI /URI (mailto:pet
 e@acl.lanl.gov)>> 
/Border [ 0 0 0 ] 
>> 
endobj
289 0 obj
<< 
/Subtype /Link 
/Rect [ 120.36295 227.00391 280.18524 242 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
290 0 obj
<< 
/Subtype /Link 
/Rect [ 265.23758 187.00391 300.22305 202 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 247 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)>> 
>> 
endobj
291 0 obj
<< 
/Subtype /Link 
/Rect [ 303.22305 187.00391 346.76242 202 ] 
/A << /S /URI /URI 
(http://www-internal.acl.lanl.gov/~sa_smith/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
292 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 161.00391 451.7252 176 ] 
/Border [ 0 0 0 ] 
/A << /S /GoTo /D [ 296 0 R /XYZ 0 792 null ] >> 
/PA << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
293 0 obj
<< /Filter /FlateDecode /Length 294 0 R >> 
stream
+H��Vm��8���~�V�N���۲l��nwSU��:�Ā�$�������;�@�>��/Ȍg�y�>:o�F��`ûw��vD~�����.HF������s��ǎ
 �!�|�J2�/�n�L�#2�\:���        ��M����T�
�BH^2%y������!��q��?[�G��ωc˳C�ض��AR���q2�d��-���b[A��w,��<Hrr5a
Z�T(�1m2N�O-d�2b6X��7��
1�&l��5�b��T2�U��/
+*w����%�)*H��L2^AF�������.�z�<~���g)ѧ: �
!�.�@��*�zR�Y�`��J���V��C<��b���4G�
c��r&A-(&˔Ԑ�:�|��4�,V��-2X�f�U@W+)6x   �A=��
�\-�ֵ�8��ar��`�.gLj����e�8�1��q?h���X#�ba��œT����_���)�-G���y����$�Bnk���vX:Ь�]J!��i�e
C�
�_*�����-8RTq��b��[ˉ�ᦠ%��ҔhQ��,��΄���o$*%i�P�|�};菧�^����^,�e+*U�*�#�d\1��Y�=�b.|����\�dH�X���u�zXe,y���u�kl���v�cJ����J�A��mS
+�6�'�ֳ���;��jg<`����������q:z|x?��o&��e
��ɟ=C�X+ȖT.�,ϱ�jIU�i�}��dw�V����F���@w�����07���ڂ)�:GS��Ӕ'�0���w�)�O��v��C�J�z��G�G�q�]����.���3�#���\�x}%������78
�F�G$_n6���͍�����];��#r>�q{�p�H�1��B��{P��egj�=��Y`W2�p��B�%j2j�d 
�JG�D5׉q���aWWI”�Q8���5�\�8h36����aG��mx�?���6丌<������9���|���;+��9�����ʔ8|N6NԱ��*C��~�y�d�V3q�����n���+��4+��V�����,]
 ����ӆ�
[��AN��h�q��a�(p���iyG�ز��[M�B,�
ZK�V׃�v���qt&'���õ�����a`��0':��ٶ�"��l��X�Kw�X�ߞ$�|�y�F�l�(��a��g����
 ���E�.�R�B�I���3�        =ˏ]W�1p�!ּ;�>��G�v�'�Y
+���s����G�
+e�����}��G_l�H
#��;�~�E!҉�6S�Y�W�Bԧj����%N��A��YKU�ͱn<Љ���k7�����C[��+%�
endstream
endobj
294 0 obj
1357 
endobj
295 0 obj
(&ZS�$A�㧶\\�6)
endobj
296 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/PZ 1.19119 
/Annots 297 0 R 
/StructParents 48 
/Contents 319 0 R 
/Resources << /Font << /F12 1468 0 R /F10 1464 0 R /F14 399 0 R /F17 395 0 R 
/F15 396 0 R 
/F8 1467 0 R >> 
/XObject << /Im13 326 0 R /Im8 329 0 R /Im6 335 0 R /Im17 341 0 R /Im1 344 0 R 
/Im2 350 0 R /Im14 353 0 R /Im19 356 0 R /Im12 359 0 R /Im15 365 0 R 
/Im5 368 0 R >> 
/ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 369 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
297 0 obj
[ 
298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 
307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 
315 0 R 316 0 R 317 0 R 318 0 R 
]
endobj
298 0 obj
<< 
/Subtype /Link 
/Rect [
  41.97464 713.55652 167.89856 747.13623 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
299 0 obj
<< 
/Subtype /Link 
/Rect [ 167.89856 713.55652 209.03371 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/about/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
300 0 obj
<< 
/Subtype /Link 
/Rect [ 209.03371 713.55652 263.60074 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/research/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
301 0 obj
<< 
/Subtype /Link 
/Rect [ 263.60074 713.55652 315.64929 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/users/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
302 0 obj
<< 
/Subtype /Link 
/Rect [ 315.64929 713.55652 373.5743 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/resources/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
303 0 obj
<< 
/Subtype /Link 
/Rect [ 373.5743 713.55652 415.54893 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/news/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
304 0 obj
<< 
/Subtype /Link 
/Rect [ 415
 .54893 713.55652 461.72104 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/scripts/ldap.acl)>> 
/Border [ 0 0 0 ] 
>> 
endobj
305 0 obj
<< 
/Subtype /Link 
/Rect [ 461.72104 713.55652 512.9301 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/search)>> 
/Border [ 0 0 0 ] 
>> 
endobj
306 0 obj
<< 
/Subtype /Link 
/Rect [ 512.9301 713.55652 545.67032 726.14891 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/help)>> 
/Border [ 0 0 0 ] 
>> 
endobj
307 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 625.41306 136.55823 636.32318 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
308 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 608.6232 113.89192 619.53333 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/credits.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
309 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 591.83334 126.75623 602.74347 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/download.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
310 0 ob
 j
<< 
/Subtype /Link 
/Rect [ 84.78877 575.04349 116.69276 585.95361 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/support.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
311 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 558.25363 134.60388 569.16376 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/presentations.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
312 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 541.46378 121.16528 552.3739 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/html/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
313 0 obj
<< 
/Subtype /Link 
/Rect [ 84.78877 524.67392 157.854 535.58405 ] 
/A << /S /URI /URI (mailto:pete@acl.lanl.gov)>> 
/Border [ 0 0 0 ] 
>> 
endobj
314 0 obj
<< 
/Subtype /Link 
/Rect [ 274.12726 586.79639 383.15756 599.3855 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/presentations.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
315 0 obj
<< 
/Subtype /Link 
/Rect [ 274.44432 514.60001 320.79741 527.18912 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/
 download.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
316 0 obj
<< 
/Subtype /Link 
/Rect [ 293.37779 368.52826 335.81689 381.11737 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pooma)>> 
/Border [ 0 0 0 ] 
>> 
endobj
317 0 obj
<< 
/Subtype /Link 
/Rect [ 358.66435 368.52826 394.78062 381.11737 ] 
/A << /S /URI /URI (http://monet.uwaterloo.ca/blitz/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
318 0 obj
<< 
/Subtype /Link 
/Rect [ 406.98042 286.25797 445.50607 298.84708 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/html/index.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
319 0 obj
<< /Filter /FlateDecode /Length 320 0 R >> 
stream
+H��Wks�������:����]��LmYn݉7��΄�+1�HE���,���C͈Z����q�w_���w��_��z��|��z�����ɀEZ�$%3�0��a��5i�3����z?}E����X�E��}�)iZ�*T�̽��!�)�y��ܷ���p6
   ��ցi��"��f&2�!��z@~�oaK T�����o�
�!@�T��Po�q?b��1�9'Gp���lᅂ����D��P#!j
O��2;x�^��6�[��eZ��Cxz��j��        ��v�;�`3�7`��#�0`��x�^4b gZ�|Oa   
  p��v���硘|&��՝�SFދl7��^�yYes�TYBU6ԝ�}p,�
+&������05����F�o�j@�[|�$���}T���]��כs%h�'s�ٔK��ɯ��d�=~���46��.!���}�3s@?�Jy��ե}n�S�
 �ꨕ�T+G�G���#��xk�:
O?�gc�<�<���`�+sz^�y�j;R��b<�p�Լ�����O�Ƀ�$�\s������uZ�
ӡTkn��R�Й^^�z�*���~�;LT���)�{l����Ͽ�����kc�\Cy�U�^ BȘ᛽��q 
��|ݷ��zdX��.ӯn�eC�'��@~��|0X�(�i��
%��K����p��������9����#�+��D`ݰ��׍ZwT2&�sU�4k��>���<>�����*Bo��2�$�B>l�鱊�H���)���.��]�:��ю�:d�G?riY��޹NkÄ��-?.��j�,���i>��9�v|a0Hݖ1$ׇ��޹>c^RAdZ[>,o�,��R��-����;��q\�NMt�Ts�;�qȸ�Q��2Y6�������+��I���Q2�Z�T:�1�%
 7[�:
я$��3ea��8�Y9�+W��?_ҶN|����
+��̶n���v��Cz4����vtN؜�:���n�cA��~o+Ǩ*�i��k!9&.�.��J�������{m���
3`�C��[�nu�v�/��of��p���T_�o�M���C�h��b�����   
4�w���u\?��o���54�&v������Ί�vV��ff��=����u�P���WϮ����_P\P\5Y��C�N���*��T޶�mU�)�em+Zت^����h6��u~0�����
 
4G���D��ф��7{}����|&�~b����EY76���rY��7�F���$����N�3}@,l�l:�P<�:\?O��β�Y��,�
     �P�-��c\QgpEI�y=��n�)he58�۸����շT���}\�
ʊ$_������Z�-��eq�����|F��$+���]�OY������������Ǻz�
��}u����0٨1P��q���D�� o�+�xgyK����(!����o ����8�ȍ�QqrPnFB�����i���
 ��U2<r3��gv�R��¬�0:�{�+��3�]�
~O�4��<�-��Q��o�U�M,�,��6/��g��d�lz��&�"�����*.jP�Te�ln!`�y��We��z 
�z\U��e�}����`�����͒jAyY.j7Te�8��3؏zH����4� 
�6e�ں��fPk��=Љ��Bu]�̲�Y�0:�n�d�:��Ń��Ўr�&�P�����G(�0�D1~2r��n?�T�      
L;��q�0Q��T9�i�Uk�S�����������:Zl����u�5�?��uL}��},��fY 
��C�����U�KtQ�#C�("�t�"ZBbѷRd���e�Ck��p���.�Y�1��Y�l,8�Dq��������WV�䍭*�?��4���B��ޮ�֌~�Z�j�&`ae��vbZ�{�����xn���S�C����u!���a�Q��'���H\׌s&Wv3�U���$���q�hcTg����w#�����}�l�̻��h2C�q�
      B�2��   8�9So��'�G5�$�
 qe���D3T [...]
+7�B�7gR�Lf�^�`�#�S:"�����.�D��t���������s��70��:oΘ�e�u}ˑ�E����Pq�s�v�+az���2��������ߝT~^����F��탂��=�o���X��|����FŻ䷌��2kkR�Ǝ4q�c.TϩX�e����
  c���f�fPl_�]&�\�_�S����>��f     D�[TXgNȝ     
��T�+���'��Ĵ���~��lO��]V��]t��,�[��������
+�@Ɵ�w�WwU�k砺f�M��ŵ͔���1$����]��o�1��9B�hrUs;�l����sZ�|�<&�o~�-N"�7���s`��xVw�����?����¤�
+@3�5��RI���F����ؑD �
�gh�΂�P�2ҟ���T[`uM�H���g*/I����MHٓg0�ʑ�t����r���6�����
��t�诘���]IUH��.uT&�X��/� W
endstream
endobj
320 0 obj
2733 
endobj
321 0 obj
12 
endobj
322 0 obj
<< /Length 321 0 R >> 
stream
+������
endstream
endobj
323 0 obj
[ 
/Indexed /DeviceRGB 3 322 0 R 
]
endobj
324 0 obj
92 
endobj
325 0 obj
(����4+�O�i��s)
endobj
326 0 obj
<< /Type /XObject /Subtype /Image /Width 69 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 324 0 R /ID 325 0 R >> 
stream
+H�b`$�i�����0������09��0"tA
eD"�8�]�7
+]#�5��
A���K�*        �       #���@��u       �`��`�}
endstream
endobj
327 0 obj
96 
endobj
328 0 obj
(�����a��@UǟA�Z)
endobj
329 0 obj
<< /Type /XObject /Subtype /Image /Width 65 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 327 0 R /ID 328 0 R >> 
stream
+H�b``�4�
`��1���@�`g�g�8�N��0b�����u�}P[F2f9�3�w�J$�C\��n�����Dx
endstream
endobj
330 0 obj
96 
endobj
331 0 obj
<< /Length 330 0 R >> 
stream
+fff������333�������̙�3�3��3�33�ff̙�f�ff�f��f����ff�����f��f��f��3��3�33ff33f3
endstream
endobj
332 0 obj
[ 
/Indexed /DeviceRGB 31 331 0 R 
]
endobj
333 0 obj
615 
endobj
334 0 obj
(dv\r��|��6v�k�)
endobj
335 0 obj
<< /Type /XObject /Subtype /Image /Width 150 /Height 40 /BitsPerComponent 8 
/ColorSpace 332 0 R /Filter /FlateDecode /Length 333 0 R /ID 334 0 R >> 
stream
+H����r� `r.;w�m����ƀilv�դ�      
v��V(@?I`�z�0OhB*��f>Jk����h��t"��L�g��<v����C�LcIN�v����Ls������Q�Ԩ�}+

�@�[��,Rն�i|�K�n���4�!�Ƃ�PUOS%jd5SUQ��$!$����*2U�>1Un�j��nUt~Jj�,|m���ʆ�5KQ�?wdUH�;?����0V٪��dUT��x<
 �!Q��zy5)��v{:5V%��0i/%+��z��~Ke��}kQ�͹�*Ο5�vC�C��\�����U'���g�DA+�]T��
+VY�U�:[SkU[ߜ���TFq��U��-T�{mn��i�
+�j����
k�(WY�~���*Ի�k+�W�΀��6���o^�:�FY�(��_|��8��*��,`�KU�:
+�J~fp�xq�
+�R�OB�s-����U��P�@ʇv�/*}W%��,�4�����\�w��N��ۃ�R�g�w�W���aU��O@�.��br���NRO�^���bs�m�?�hx_�n(r�u6��fE7|�Q��2_r]ŗ�+�a�#K�jR[f����f�;�!Qo�o�;z�T���s��~m�1�
    0`��
endstream
endobj
336 0 obj
6 
endobj
337 0 obj
<< /Length 336 0 R >> 
stream
+���333
endstream
endobj
338 0 obj
[ 
/Indexed /DeviceRGB 1 337 0 R 
]
endobj
339 0 obj
110 
endobj
340 0 obj
(UfP��퐽���H���)
endobj
341 0 obj
<< /Type /XObject /Subtype /Image /Width 61 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 339 0 R /ID 340 0 R >> 
stream
+H�Ԓ�
+� ��������Z��       f^�)i�ss��*�)S�(>��cu;��h�*�T����>��I��ФmĖe��     
�#�a^�5��K@3sۧM.ɋ-�Z.�\�
endstream
endobj
342 0 obj
75 
endobj
343 0 obj
(���l?m��yV�7��)
endobj
344 0 obj
<< /Type /XObject /Subtype /Image /Width 39 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 342 0 R /ID 343 0 R >> 
stream
+H�b`쀑�BC1�BQƯ�M�lF�(��,� � �`�A�bQ��H���Lc����6����22@�C.=
endstream
endobj
345 0 obj
96 
endobj
346 0 obj
<< /Length 345 0 R >> 
stream
+fff�������������3��3��f�3��3��3��ff3��f��f����ff�f��f��f��3
endstream
endobj
347 0 obj
[ 
/Indexed /DeviceRGB 31 346 0 R 
]
endobj
348 0 obj
799 
endobj
349 0 obj
(�������*�ڃ�4)
endobj
350 0 obj
<< /Type /XObject /Subtype /Image /Width 450 /Height 25 /BitsPerComponent 8 
/ColorSpace 347 0 R /Filter /FlateDecode /Length 348 0 R /ID 349 0 R >> 
stream
+H�얉�� @�p�8M�����
+H`�&^چ)�I������&Rp��K{";��Ev�͋�[�        �.�l]�3g�.�uUw嵛Y������       
��NU��cUw�^*. K�����AU�����0 _�W�9��z���\�蝠�j�s3Y�i��Fũ"A^�����>H��
b��6M��;�##�W�25���,�$�??�T�eN�Z���MqV�lo�
Zm5��=9���ڝ�|S�А�4⃻A^�1l2�*U�h�
pޮ�CLV��"�@�^V�K     �Ԑ���Q�W{d{���g@蕇]��A���c��Am���2�ڕ@%j7u%w�)
o7�cC�M�X�@,G�&tqF��䳃R(�Dp��)ҍEf����m㵇�r�٥�!VQLOMp�dUĩ�
כ�+$����f-O� 
�{�BHb��b3�-�������rk`)�.��O�;A�`�,�>���?�7O̖|�/�"3������Z�e���d�`,x��|�
 ������!���5�L���@�,4T��9�bȯ����>$ئ���8sk��Hw�t�2i=]��Q��(��*Rh
 �x    J�m�D0�G���������9�������Y���J��h4�d�[ȯ����G3m�4�?We
+d��>6cb�Q��2��<n"�H*c��b���q�dQjDNR��|��`��
E�t)�eFP�`�����R�@���kg_�����R.��?#�d�
+vV*�`{�sP�Z��D�K��vɤl]:�֥l].p�Ҷ�`~�
endstream
endobj
351 0 obj
73 
endobj
352 0 obj
(�&�#/���lWp�p�)
endobj
353 0 obj
<< /Type /XObject /Subtype /Image /Width 49 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 351 0 R /ID 352 0 R >> 
stream
+H�b`�1`��F8�.�]#X�t
����Ūj<#T'#��S###iH���� L�~ 
+B
v�X
endstream
endobj
354 0 obj
80 
endobj
355 0 obj
(�1t����P�)
endobj
356 0 obj
<< /Type /XObject /Subtype /Image /Width 62 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 354 0 R /ID 355 0 R >> 
stream
+H�b`0�4Xt3B1*`�`��S�nFF0� �#T�n�B3"h�v�m"S7�HЍ� ԛh����d0tu3�?k
endstream
endobj
357 0 obj
100 
endobj
358 0 obj
(j_�tIw{��T�i�)
endobj
359 0 obj
<< /Type /XObject /Subtype /Image /Width 55 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 357 0 R /ID 358 0 R >> 
stream
+H�ĒQ� Cy����p8\��Y2�� ��A��
+�a������H�)�+ZF��9��Wce�0�AN�*2�IM��Y�9��tG���uj�������ok
endstream
endobj
360 0 obj
768 
endobj
361 0 obj
<< /Length 360 0 R >> 
stream
+�����������f��3���������̙��f��3�������������f��3���f��f��f��ff�f3�f�3��3��3��3f�33�3�������f�3������������f��3���������̙��f��3��̙�̙�̙�̙f̙3̙�f��f��f��ff�f3�f�3��3��3��3f�33�3�������f�3������̙����f��3�������̙̙��f��3�������̙����f��3���f��f̙f��ff�f3�f�3��3̙3��3f�33�3���̙��f�3�f��f��f��f�ff�3f�f��f��f̙f�ff�3f�f��f��f��f�ff�3f�ff�ff�ff�fffff3fff3�f3�f3�f3ff33f3f�f�f�fff3f3��3��3��3�f3�33�3��3��3̙3�f3�33�3��3��3��3�f3�33�3f�3f�3f�3ff3f3
 3f33�33 [...]
endstream
endobj
362 0 obj
[ 
/Indexed /DeviceRGB 255 361 0 R 
]
endobj
363 0 obj
1161 
endobj
364 0 obj
(Y@�a�H����-�Z��)
endobj
365 0 obj
<< /Type /XObject /Subtype /Image /Width 120 /Height 70 /BitsPerComponent 8 
/ColorSpace 362 0 R /Filter /FlateDecode /Length 363 0 R /ID 364 0 R >> 
stream
+H��V9v�H
-$#��Dr4R'R�YGd䋈�N2�S�:��P��Zm����!ds)��>�)m��&�l���X0!�K�;�YA��?]R=H�P�=��p�+Vm��I�S�YyD�T�_��4NZ�5X����'S�@߲H��ui�&}�
�{��X�%�v|�K��T�\t��>�͒���/�v-��eGvD��&XЩ�w5PB=+��9�:yj
R��y�S��X/����qg�¶iͰB����9^.g�|o
+%PI{z��1n�璲=�|���r�CMs?xA'Bn/ ����(�W���iǒ�\�PU2tZq�
�9Љ�%�+�٭��~2��h��t�s�Z����ąp�9�gL����<o��Nˌ\�C�o�2��*j�1�|e^�H��5GA�2S`2`�p˴�I��ր����¯�d��
=j>�+�/ǎ(�Z��t2h5��1�����7-�5�^B��<M���u3�W�E��
+��S5�wW�g�N�"|��*���AzWS=�)� 
p)e��n��@�LP�;���ᗀ��4��#{����<��`�t7�A�i������������ms뚮��n�Y���Dg�v�
+i�Ҫ�2'e�Dy�����ota_�g���f�>G�V΁b(_F�y�
d������XRYtn3���ev�7�IAA76��@�׊��ʻ'�3�v�o�~AC�r?[0?7I1b�*!��/�
囷Z���6t��}'�{Y�KK�N�l�(��|�
+�ϼq�_"��y^�40~Y�A^�#g���,��o�+�c|��D�y��}WBd9��2_  
V��d�lO�h����Od�p�#o�^� �m��o�w�9���Q�z�7L��ob��+��^<��[P%ݸ1�y�!~�4*_�
+�/#��[Hi��$�v�˿2Y][:6m�vޠq���b�!,����X6��U��&�l�yH�~(Js����7�4��f�O�;
9�|��G~"*)�;7���Z����ʐ]�!�ej�|G�R��Q�ރ���˟��#�i����M�     
����\�tQ}�|��?��e�����=!�%'�'ϯsd-���;y�\NV�_�o���Gq@�D}ln��:U=y�3��A̋����Y6+~?�4����of�%��������k3_É�|V���'��يq
endstream
endobj
366 0 obj
72 
endobj
367 0 obj
($����+�|��Nct)
endobj
368 0 obj
<< /Type /XObject /Subtype /Image /Width 50 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 366 0 R /ID 367 0 R >> 
stream
+H�b`�9`��F(&A#�:`�ÈO��Vb�h"#�X�fF"t�X��3�a�LoD�D@�taU
endstream
endobj
369 0 obj
(c$�5�v^V�wO4hB�)
endobj
370 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/PZ 1.19119 
/StructParents 49 
/Annots 371 0 R 
/Contents 377 0 R 
/Resources << /Font << /F12 1468 0 R /F19 401 0 R /F3 403 0 R /F17 395 0 R /F15 
396 0 R 
/F8 1467 0 R >> 
/XObject << /Im57 384 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> 
/ID 369 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
371 0 obj
[ 
372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 
]
endobj
372 0 obj
<< 
/Subtype /Link 
/Rect [ 467.31534 102.75665 545.20088 115.34576 ] 
/A << /S /URI /URI (http://www.doe.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
373 0 obj
<< 
/Subtype /Link 
/Rect [ 186.8369 87.64578 309.61772 100.23489 ] 
/A << /S /URI /URI (http://www.doe.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
374 0 obj
<< 
/Subtype /Link 
/Rect [ 313.13179 87.64578 370.53191 100.23489 
 ] 
/A << /S /URI /URI (http://www.mcs.anl.gov/DOE2000/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
375 0 obj
<< 
/Subtype /Link 
/Rect [ 441.02473 87.64578 551.07726 100.23489 ] 
/A << /S /URI /URI (http://www.lanl.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
376 0 obj
<< 
/Subtype /Link 
/Rect [ 261.78979 72.53491 322.57486 85.12402 ] 
/A << /S /URI /URI (http://www.lanl.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
377 0 obj
<< /Filter /FlateDecode /Length 378 0 R >> 
stream
+H��W�r�8���
��l��3��8�$���(4YL(B!)k������.d��]�����>}�1�u��ŋ��՛��e/_�W���o�'xz�<*b����!
]�e(=Vj�g�p\��S�;.˘3������M��u]f)+�^m�rW(Ʉ�~eAr!� 
�K���ʙ�%:�|��A����\(O�`�춋@���W�q������f�m~5������*Bx5[��YJ�=J��C_�va�."�Q�PE\�8f��sv��M��*3��z�x��L���=��Ԉ_q?aI�R��d�f5
  A������/��ƒ��[6{vVjҨ���f�����Ԛ�%mԽMήLQe
]ڕK��f�}��-P�`Y]��\$qŒCS����_Ϯٽ.t��͝�@ws��$�����;�;�7����\�q�<�U�q|�3�%~��\A:f
����]�b�L���_��C��q�`����B.� f~p�7��˂ �Q+�;JIEqt*Ca)+s}|�c/���Q
+������V��ue��CCC뽬w2q|�P�����ՠ|���g<�
+,�%�}Hߦs.=��� �0�
�$�biD�{ʍ�t�\I��<���kg�f��q�8Mn�dr�"҉������D�>P��H�Š�0:��R>��H��~&�CC�� �C��
�N�ɞLn4�ܱ��Hrоf�(ⷖ"�� 
B����P!�%�C�����5�*+���Y���K��}1�yr��,���rŽ,?������~��j¬�W/�w���#o�y�m���_���c��I�"�;E��u��%��g&w����/�$���l�J˛�,@��D��R\J?:�I�0��1�C�����

�Q�@�'���Fj}hh���N�#����89,-!~����Ь&D3]�3u�j�2;�߫�ܦ������h�UL)Ѓ�^�/�Ǎ��cm�Ѷ���U����,��-��6�;�Gf6TզlU4����u����+Z?П�8��9?��銦�R/u
    w1+�v����Fe�Y���
+y+s�AW��b����0���ƕŤ_6�y��T�e�fyVg�
+{u�<貢b�����>�(��L�غn��ei֝�psb#�I���7x���N]��ۢ���T5�Vz�͏>}X�l��|��at��ٛe�?��-����%w��"�H���d�1W.�p3`��vA��Ѳ�/ɝJy֜��8�Bτ�3D_�r�£�`�A��t5�nM�5���l~>a��+�=?����wD;��0�wD���-�f��P4%nAHn����1wTV��c�A��M����}��!���5K�Ԕ
��j�z\�pC�J�ꪨB��!mq 
��Ն[p���)�{��tE�[�dEm����Fzf�H�~���O�g;���v���w���D��G\�I�$��[֢�O�X�Jgyb���6��Tb���E9A
 �|��r�PM�X)�B/�ʅ�r��޵Fx��oY�r�`|��R�K��I�C;R�Ȗ�Vk�s���V��   �2lpF;ٜ
XfJ���/KP@�G�x.�x}d�I��M�%yVYj�7�4O�ʞ��)QɎ:�/��� [...]
��췜K^�
������r[̝�5�oq�Y�}'��O���H�����U��k-x�J�:�N������
+��~�-�=T?�uP
+FR�en?g�Am,+L�@����N�b����{E]��\(�k^�n���)7n�Lл���&(9�9�j2�"q�7�8�Yv�2��؅
S`�m
+1A�Zf�4��e4"�ۑ�i     lpp�à�
ppfck��g�������Sc�
����N=��6��-�t4v!$w��Qh���䩭N,dڈM�BӕN�K�1
ca7C��I��(��k�lJt1F����E��i�F�%;�A��%i��l�l�����]B#4U��
��UR&h�%�\Z��<:����&k>��*k~�R��1��.J�����n 
������g�-���+0�p=�ŀ�K�ϥ���e�����K
+E�.� ڷ���;��^tp/,�7��)�.(t��sܖ��*�k�����&�i;���E�X�P�}�ƨmt�ND�+�@
+��:�}%�u�'�+��`��C��h�w�u'�=~s�{��]u�%����c6�B\U��/���\������!1��f\#���ޗ�zB�q���1e�Y��`���<{gA��m<e��Dq�B��0�')q���^�����a/hf���:���
�E�7��S�N��
�����Fv{
.˘3���w�}erSf��K��eF�%��DJ�=J�4.S�X�
J����|���Y�Ґ�{j2�a74͓?Ȳ�O[����<�Nw�OҜ�I��{�0��ZOQ��Үp��$ܩ���_���}�    
�����!@��h�X
endstream
endobj
378 0 obj
2500 
endobj
379 0 obj
768 
endobj
380 0 obj
<< /Length 379 0 R >> 
stream
+���'00���.::=LL;JJShh���i��x�����������ss\{{{qqZ�㶩��yyy��qqq.99,77��iDUU���Zqq�ϥUUU���p�����������CCCAAA���UUD���999&&$$���&00hhS������K^^������r��p��{{b��������������ƭ�ؼ��
                 
��q�ƞ��䴴�������77,���ayy���__L��������ń����˧�Ѷ��::.���rr[���������
+
+rrrSSChhh���EVV00'CTTRff^^^[rrCC6���yya��������������ڎ�rTTC��파p000...6CC��&&&L__$$$b{{q��������x��������]]K��Ǐ�rUUC�ǟ������
endstream
endobj
381 0 obj
[ 
/Indexed /DeviceRGB 255 380 0 R 
]
endobj
382 0 obj
1526 
endobj
383 0 obj
(}l9���@�\\�ޑze��)
endobj
384 0 obj
<< /Mask [ 110 110 ] /Type /XObject /Subtype /Image /Width 134 /Height 97 
/BitsPerComponent 8 /ColorSpace 381 0 R /Filter /FlateDecode /Length 382 0 R 
/ID 383 0 R >> 
stream
+H���[Gǿ��)����4-�Tc
+����U
+4xR�A)�X��Q��j�������{�\.��ݻ�./�}�<��f���ٙ|���.��[>+
�lS����v#�6���BİA��$�E
b�9�4���xS(�d�>�q=�5����a��Ҋa,$�BO�X����"��y�)�����X &X'�̀�˷�
���c��d�N1�S�L���1�7����(н�x0W4�G�y(��/B�q���0�     ���0D\��!��g
��}�_�G����h��v�;�al֖w��1۩�ڔ�ڜ�����"�}�&�#KQ{�{�(��
T.��mԴ@^��1��-���Y�h��Ә6����)v
+s?�Ø'R�.j7�Zc�r��f�@|��V��V��!����1�7�tR�xRP�!b��.h�G��3����83�ud��(ҸNב&Ҡ7��W����S$jvd���#��6�<McD���ٹ�^(�C
 ����1��q�I��^(vX0�+��
+�;v͊����� ���a���|��Vz��5a�b�7D���G�BK�C�[�b��d
Dvs���Xx�(�+uNU��2l�˚�q���K�$��d���o#�������:�Wpz
+
+���`0z        C���B��\�_���ĐX�?���/�#�wUK���c���F>�
��_s���l��1b��o�r[��f��J��+�>��
�V�v��c����Z���SYk,۝��,>��k[�u��[��֭��Ғ��W�!��Ŗ�����C���`�8C��!:"�jO�w?�W�4S����A��I.7m�����������_g�x�Ư�g�\XWe�Ԏ�dL����Xy���
w��*K6�~���M����j��_�p���LO�5/��[�5�A�9��|���}dyt܅��k�ws�_���
+�u���\`����%���4�?�~AHa�!��'�0�����
!���kf�r���Q7�*=&s7��b�հ�
��m�:�k���5��s�`O��5�i�m�5�"�BD�k�E
+-afHC2c�E�)��Ѝ*�B�[U��T���4�|�S(�5a3��b|CbD�r�T(��8|��H�P,���!�p��e���:�ۥ����[�Y̓�{,���y�
+S�(�an���pJ��yYe�����
+F��U� DE!Fx(._c%�Ă!6�����qS�+_|�l�W9��#�qQ
+Y��9��.l�ڦ3�Bf�rA�v��,E��"���#4�
=O�R��K�N��N��6����t����l�"KY�o,���,�R�ͥ����:DG��,/g��vR��%�迩i���K�
S�#�~a����\c���k���|3���_�D(����z�.?��N���Ů��7�Z���1R�E�,�3�$[��X�h�>�U�j���b�������s-5�}
        Zc����!Y9.W�[�nl�5��X���W�
+0��C
endstream
endobj
385 0 obj
<< 
/Type /Page 
/MediaBox [ 0 0 612 792 ] 
/Parent 535 0 R 
/PZ 1.19119 
/StructParents 50 
/Annots 386 0 R 
/Contents 393 0 R 
/Resources << /Font << /F12 1468 0 R /F17 395 0 R >> /ProcSet [ /PDF /Text ] >> 
/ID 369 0 R 
/CropBox [ 0 0 612 792 ] 
/Rotate 0 
>> 
endobj
386 0 obj
[ 
387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 
]
endobj
387 0 obj
<< 
/Subtype /Link 
/Rect [ 184.68842 718.59676 388.24384 726.9884 ] 
/A << /S /URI /URI (http://www.lanl.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
388 0 obj
<< 
/Subtype /Link 
/Rect [ 234.83321 708.52284 307.44014 716.91449 ] 
/A << /S /URI /URI (http://labs.ucop.edu/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
389 0 obj
<< 
/Subtype /Link 
/Rect [ 331.14886 708.52284 410.25336 716.91449 ] 
/A << /S /URI /URI (http://www.doe.gov/)>> 
/Border [ 0 0 0 ] 
>> 
endobj
390 0 obj
<< 
/Subtype /Link 
/Rect [ 184.68842 689.21451 243.89198 697.60616 ] 
/A << /S /URI /URI (mailto:acl-www@lanl.gov)>> 
/Border [ 0 0 0 ] 
>>
  
endobj
391 0 obj
<< 
/Subtype /Link 
/Rect [ 249.18076 689.21451 316.83936 697.60616 ] 
/A << /S /URI /URI (http://www.lanl.gov/misc/copyright.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
392 0 obj
<< 
/Subtype /Link 
/Rect [ 322.12813 689.21451 355.28081 697.60616 ] 
/A << /S /URI /URI (http://www.lanl.gov/misc/disclaimer.html)>> 
/Border [ 0 0 0 ] 
>> 
endobj
393 0 obj
<< /Filter /FlateDecode /Length 394 0 R >> 
stream
+H��U�N�@���<�J�����!@�*!4����&9N�X�H��Ά�8Rmd�wϜ9s���������|����w�8z�

(��HZ8d�Y�L��BA�E��B1tЬj1�!��Y���]֟�*�fu�_B����Y�R��'4�Ѱ�ut4�G�iC�7�?�sK_�kzM.��2�Uq�V
�:�<7V-WH��M��s�؛�6:J
vt��'�i���y�K�{����~�5�k)�(r#�2�I*����k)��;I�����΢��?ai�lǝB�+<jf<H��W+�����Ǖ%"����-��-�/���+�b1�By�F�9�r��+��F�!e�V+g֏�B��e0:
���o'����7h���Ѹ���?����*QJAj1�D�2�J1�n�Rr����9EOBK�q��]�P���
���Y���\�C}�A�֊b�H"�\E{�J*�j���0��~Z�׳������l�H��:�TR}��
�yZ�Ӭ��Q�U�����%������R�ǭ�ře�{Pr
 C�{�y������Z�ظ��x���st�A��x�\.?iY�dv����ԭN7"s�/�����'75�
+�>p���C�����e�R׮�j�_�ҴD!�{uS�셮֎
n(���pH���Ek'Gӷ��M��y���=�X�ԧ׿†&�G!�0�}�=�H
��sl%�鬪Ӌ"��?�*[,�Y      I6�4핓��(��4/WAu���ޟ y�wS���8��B�3lr,�gu���
�$���O�b��6 �%�'�N�����'�o�w
endstream
endobj
394 0 obj
812 
endobj
395 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Times-Roman 
/Encoding /WinAnsiEncoding 
>> 
endobj
396 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Courier 
/Encoding /WinAnsiEncoding 
>> 
endobj
397 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Times-Bold 
/Encoding /WinAnsiEncoding 
>> 
endobj
398 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Courier-Oblique 
/Encoding /WinAnsiEncoding 
>> 
endobj
399 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /ZapfDingbats 
>> 
endobj
400 0 obj
<< 
/Type /Font 
/Subtype /Type1 
/BaseFont /Courier-Bold 
/Encoding /WinAnsiEncoding 
>> 

 endobj
401 0 obj
<< 
/Type /Font 
/Subtype /TrueType 
/BaseFont /Arial,Bold 
/FirstChar 0 
/LastChar 255 
/Encoding /WinAnsiEncoding 
/FontDescriptor 402 0 R 
/Widths [ 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 
750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 
333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 
556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 
722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 
778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 
556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 
611 389 556 333 611 556 778 556 556 500 389 280 389 584 750 556 
750 278 556 500 1000 556 556 333 1000 667 333 1000 750 611 750 750 
278 278 500 500 350 556 1000 333 1000 556 333 944 750 500 667 278 
333 556 556 556 556 280 556 333 737 370 556 584 333 737 552 400 
549 333 333 333 576 556 278 333 333 365 556 834 834 834 611 722 
722 722 722 722 722 1000 722 667 667 66
 7 667 278 278 278 278 722 
722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 
556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 
611 611 611 611 611 611 549 611 611 611 611 611 556 611 556 ] 
>> 
endobj
402 0 obj
<< 
/Type /FontDescriptor 
/FontName /Arial,Bold 
/FontBBox [ -167 -376 1075 1048 ] 
/Flags 32 
/CapHeight 715 
/Ascent 1048 
/Descent -376 
/StemV 144 
/ItalicAngle 0 
/XHeight 518 
>> 
endobj
403 0 obj
<< 
/Type /Font 
/Subtype /TrueType 
/BaseFont /ComicSansMS 
/FirstChar 0 
/LastChar 255 
/Encoding /WinAnsiEncoding 
/FontDescriptor 404 0 R 
/Widths [ 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 
500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 299 
238 424 843 693 820 654 388 366 366 530 480 277 417 249 512 610 
450 610 610 610 610 610 610 610 610 299 299 381 510 381 524 931 
731 630 603 722 625 607 680 768 546 665 611 551 883 797 798 521 
876 628 693 680 737 650 1040 724 635 693 376 550 376 581 627 556 
512 
 593 514 587 548 508 531 578 280 403 540 274 777 523 526 535 
520 480 487 471 520 486 684 590 521 538 366 421 366 598 500 610 
500 299 427 412 675 597 597 556 1241 693 381 1194 500 693 500 500 
180 180 394 394 387 441 883 556 883 403 381 897 500 538 635 299 
238 623 793 612 636 404 635 556 795 527 578 480 417 795 627 409 
480 651 651 556 520 694 249 556 651 449 578 651 651 651 524 731 
731 731 731 731 731 1087 603 625 625 625 625 546 546 546 546 722 
797 798 798 798 798 798 480 798 737 737 737 737 635 521 443 512 
512 512 512 512 512 912 514 548 548 548 548 280 280 280 280 509 
523 526 526 526 526 526 480 526 520 520 520 520 521 535 431 ] 
>> 
endobj
404 0 obj
<< 
/Type /FontDescriptor 
/FontName /ComicSansMS 
/FontBBox [ -93 -312 1187 1102 ] 
/Flags 34 
/CapHeight 742 
/Ascent 1102 
/Descent -312 
/StemV 76 
/ItalicAngle 0 
/XHeight 539 
>> 
endobj
405 0 obj
<< 
/Names [ (      ���gW��+��s�s�inefficient-loops)407 0 R (      ���gW��+��
s�s�intro)
406 0 R (       
 ���gW��+��s�s�lookahead)411 0 R (     ���gW��+��s�s�parsetrees)
410 0 R (       ���gW��+��s�s�performance-advantages)409 0 R ( ���gW��+��
s�s�templates)
408 0 R ({A�钷�M����assignment)417 0 R ({A�钷�M����counting)
418 0 R ({A�钷�M����integration)414 0 R ({A�钷�M����intro)
412 0 R ({A�钷�M����leaf-functor)416 0 R ({A�钷�M����make-expr-operators)
419 0 R ({A�钷�M����make-leaf)415 0 R ({A�钷�M����source-files)
422 0 R ({A�钷�M����starting-point)413 0 R ({A�钷�M����summary)
421 0 R ({A�钷�M����using)420 0 R ({A�钷�M����vec3-cpp)
425 0 R ({A�钷�M����vec3-h)423 0 R ({A�钷�M����vec3defs-in)
424 0 R (�!��%�+�����Qconform)428 0 R (�!��%�+�����Qdefinitions
 )
427 0 R (�!��%�+�����Qeval-h)432 0 R (�!��%�+�����Qintro)426 0 R 
(�!��%�+�����Qsource-files)431 0 R (�!��%�+�����Qsummary)430 0 R 
(�!��%�+�����Qusing)429 0 R (�!��%�+�����Qvector-cpp)434 0 R 
(�!��%�+�����Qvectordefs-in)433 0 R (���6b'��<���rcombine-2)
438 0 R (���6b'��<���rdetails)439 0 R (���6b'��<���rintro)
435 0 R (���6b'��<���rleaf-functor)437 0 R (���6b'��<���rrgb-cpp)
444 0 R (���6b'��<���rrgb-h)442 0 R (���6b'��<���rrgbdefs-in)
443 0 R (���6b'��<���rsource-files)441 0 R (���6b'��<���rsummary)
440 0 R (���6b'��<���rsurface)436 0 R ] 
>> 
endobj
406 0 obj
[ 
18 0 R /XYZ 0 491.77588 null 
]
endobj
407 0 obj
[ 
27 0 R /XYZ 0 342.83318 null 
]
endobj
4
 08 0 obj
[ 
30 0 R /XYZ 0 441.96239 null 
]
endobj
409 0 obj
[ 
39 0 R /XYZ 0 209.07738 null 
]
endobj
410 0 obj
[ 
42 0 R /XYZ 0 113.53944 null 
]
endobj
411 0 obj
[ 
65 0 R /XYZ 0 693.02092 null 
]
endobj
412 0 obj
[ 
81 0 R /XYZ 0 403.13406 null 
]
endobj
413 0 obj
[ 
81 0 R /XYZ 0 209.364 null 
]
endobj
414 0 obj
[ 
107 0 R /XYZ 0 613.72888 null 
]
endobj
415 0 obj
[ 
107 0 R /XYZ 0 459.32356 null 
]
endobj
416 0 obj
[ 
107 0 R /XYZ 0 70.28076 null 
]
endobj
417 0 obj
[ 
113 0 R /XYZ 0 498.68829 null 
]
endobj
418 0 obj
[ 
113 0 R /XYZ 0 167.96541 null 
]
endobj
419 0 obj
[ 
116 0 R /XYZ 0 558.60745 null 
]
endobj
420 0 obj
[ 
116 0 R /XYZ 0 113.13373 null 
]
endobj
421 0 obj
[ 
122 0 R /XYZ 0 180.2282 null 
]
endobj
422 0 obj
[ 
131 0 R /XYZ 0 722.28728 null 
]
endobj
423 0 obj
[ 
131 0 R /XYZ 0 689.56381 null 
]
endobj
424 0 obj
[ 
137 0 R /XYZ 0 110.52608 null 
]
endobj
425 0 obj
[ 
140 0 R /XYZ 0 726.90321 null 
]
endobj
426 0 obj
[ 
148 0 R /XYZ 0 471.59949 null 
]
endobj
4
 27 0 obj
[ 
148 0 R /XYZ 0 216.33656 null 
]
endobj
428 0 obj
[ 
166 0 R /XYZ 0 435.98756 null 
]
endobj
429 0 obj
[ 
166 0 R /XYZ 0 306.10046 null 
]
endobj
430 0 obj
[ 
166 0 R /XYZ 0 228.24471 null 
]
endobj
431 0 obj
[ 
166 0 R /XYZ 0 151.92458 null 
]
endobj
432 0 obj
[ 
166 0 R /XYZ 0 119.52452 null 
]
endobj
433 0 obj
[ 
179 0 R /XYZ 0 681.83984 null 
]
endobj
434 0 obj
[ 
179 0 R /XYZ 0 589.67969 null 
]
endobj
435 0 obj
[ 
187 0 R /XYZ 0 481.67038 null 
]
endobj
436 0 obj
[ 
187 0 R /XYZ 0 178.87039 null 
]
endobj
437 0 obj
[ 
204 0 R /XYZ 0 192.88297 null 
]
endobj
438 0 obj
[ 
209 0 R /XYZ 0 739.04669 null 
]
endobj
439 0 obj
[ 
209 0 R /XYZ 0 128.93871 null 
]
endobj
440 0 obj
[ 
227 0 R /XYZ 0 407.15916 null 
]
endobj
441 0 obj
[ 
227 0 R /XYZ 0 318.44221 null 
]
endobj
442 0 obj
[ 
227 0 R /XYZ 0 285.71875 null 
]
endobj
443 0 obj
[ 
239 0 R /XYZ 0 737.92181 null 
]
endobj
444 0 obj
[ 
239 0 R /XYZ 0 644.84174 null 
]
endobj
445 0 obj
<< 
/Type /Pages 
/Kids [ 468 0 R 
 467 0 R 473 0 R 474 0 R 478 0 R 482 0 R 483 0 R 487 0 R 491 0 R 
535 0 R ] 
/Count 51 
>> 
endobj
446 0 obj
<< 
/ModDate (D:19991029153308-06'00')
/CreationDate (D:19991029152825)
/Producer (Acrobat Web Capture 4.0)
/Title (PETE Tutorials)
>> 
endobj
447 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/banner.gif)
endobj
448 0 obj
<< 
/S /SIS 
/ID 1472 0 R 
/TS (D:19991029212825)
/O [ 1469 0 R ] 
/R [ 498 0 R ] 
/SI 449 0 R 
>> 
endobj
449 0 obj
<< 
/AU 447 0 R 
/TS (D:19991029212825)
>> 
endobj
450 0 obj
<< 
/Names [ 26 0 R 470 0 R 106 0 R 476 0 R 355 0 R 512 0 R 367 0 R 518 0 R 295 0 R 
496 0 R 340 0 R 524 0 R 364 0 R 530 0 R 369 0 R 538 0 R 334 0 R 
500 0 R 358 0 R 521 0 R 264 0 R 493 0 R 383 0 R 533 0 R 349 0 R 
503 0 R 250 0 R 489 0 R 343 0 R 527 0 R 325 0 R 515 0 R 1475 0 R 
459 0 R 165 0 R 480 0 R 1472 0 R 448 0 R 328 0 R 509 0 R 8 0 R 462 0 R 
203 0 R 485 0 R 55 0 R 465 0 R 352 0 R 506 0 R ] 
>> 
endobj
451 0 obj
<< 
/Names [ 458 0 R 459 0 R 469 0 R 470 0 R 447 0 R 448
  0 R 461 0 R 462 0 R 495 0 R 
496 0 R 492 0 R 493 0 R 488 0 R 489 0 R 464 0 R 465 0 R 475 0 R 
476 0 R 479 0 R 480 0 R 484 0 R 485 0 R 505 0 R 506 0 R 508 0 R 
509 0 R 511 0 R 512 0 R 514 0 R 515 0 R 517 0 R 518 0 R 520 0 R 
521 0 R 523 0 R 524 0 R 526 0 R 527 0 R 499 0 R 500 0 R 502 0 R 
503 0 R 537 0 R 538 0 R 529 0 R 530 0 R 532 0 R 533 0 R ] 
>> 
endobj
452 0 obj
<< 
/V 1 
/C 457 0 R 
>> 
endobj
453 0 obj
<< 
/URL (http://www-internal.acl.lanl.gov/~sa_smith/pete/)
/L 2 
/F 3 
/S 454 0 R 
>> 
endobj
454 0 obj
<< 
/G 455 0 R 
/C << /ADBE:HTML2PDF:HTML 456 0 R >> 
>> 
endobj
455 0 obj
<< 
/CB 0 
/AH 0 
/PO 0 
/S 0 
/AL 0 
/AT 70 
/AS 0 
/SU 1 
/PS [ 792 612 ] 
/M [ 50.39999 50.39999 50.39999 50.39999 ] 
>> 
endobj
456 0 obj
<< 
/AC [ 1 0 0 ] 
/I 0 
/UL 0 
/PR 0 
/LC [ 0 0 1 ] 
/CF 1 
/PBC 0 
/PBI 0 
/TBC 1 
/EF 0 
/PHF << /F (Helvetica)/S 14 >> 
/PTF << /F (Times-Roman)/S 14 >> 
/JE 0 
/JBF 1 
/JHF 0 
/JPF 1 
/HJBX 1 
/HJHX 1 
/WT 720 
/TC [ 0 0 0 ] 
/BC [ 1 1 1 ] 
/FF << /F (Couri
 er)/S 14 >> 
>> 
endobj
457 0 obj
[ 
453 0 R 536 0 R 
]
endobj
458 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/)
endobj
459 0 obj
<< 
/S /SPS 
/ID 1475 0 R 
/T (PETE Tutorials)
/CT (text/html)
/TS (D:19991029212825)
/O [ 555 0 R ] 
/SI 460 0 R 
>> 
endobj
460 0 obj
<< 
/AU 458 0 R 
/TS (D:19991029212825)
>> 
endobj
461 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/introduction.html)
endobj
462 0 obj
<< 
/S /SPS 
/ID 8 0 R 
/T (PETE Tutorials: Introduction)
/CT (text/html)
/TS (D:19991029212826)
/O [ 1 0 R 9 0 R ] 
/SI 463 0 R 
>> 
endobj
463 0 obj
<< 
/AU 461 0 R 
/TS (D:19991029212826)
>> 
endobj
464 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tree.gif)
endobj
465 0 obj
<< 
/S /SIS 
/ID 55 0 R 
/TS (D:19991029212826)
/O [ 56 0 R ] 
/R [ 472 0 R ] 
/SI 466 0 R 
>> 
endobj
466 0 obj
<< 
/AU 464 0 R 
/TS (D:19991029212826)
>> 
endobj
467 0 obj
<< 
/Type /Pages 
/Kids [ 30 0 R 36 0 R 39 0 R 42 0 R 45 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
468 0 obj

 << 
/Type /Pages 
/Kids [ 555 0 R 1 0 R 9 0 R 18 0 R 27 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
469 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/background.html)
endobj
470 0 obj
<< 
/S /SPS 
/ID 26 0 R 
/T (PETE Tutorials: Background and Terminology)
/CT (text/html)
/TS (D:19991029212827)
/O [ 18 0 R 27 0 R 30 0 R 36 0 R 39 0 R 42 0 R 45 0 R 57 0 R 60 0 R 65 0 R 
68 0 R 71 0 R ] 
/SI 471 0 R 
>> 
endobj
471 0 obj
<< 
/AU 469 0 R 
/TS (D:19991029212827)
>> 
endobj
472 0 obj
1 
endobj
473 0 obj
<< 
/Type /Pages 
/Kids [ 57 0 R 60 0 R 65 0 R 68 0 R 71 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
474 0 obj
<< 
/Type /Pages 
/Kids [ 81 0 R 107 0 R 113 0 R 116 0 R 122 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
475 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-1.html)
endobj
476 0 obj
<< 
/S /SPS 
/ID 106 0 R 
/T (PETE Tutorial 1: Incorporating a Simple Vector Class)
/CT (text/html)
/TS (D:19991029212828)
/O [ 81 0 R 107 0 R 113 0 R 116 0 R 122 0 R 131 0 R 13
 4 0 R 137 0 R 140 0 R 
] 
/SI 477 0 R 
>> 
endobj
477 0 obj
<< 
/AU 475 0 R 
/TS (D:19991029212828)
>> 
endobj
478 0 obj
<< 
/Type /Pages 
/Kids [ 131 0 R 134 0 R 137 0 R 140 0 R 148 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
479 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-2.html)
endobj
480 0 obj
<< 
/S /SPS 
/ID 165 0 R 
/T (PETE Tutorial 2: Integrating with the Standard Template Library)
/CT (text/html)
/TS (D:19991029212828)
/O [ 148 0 R 166 0 R 173 0 R 176 0 R 179 0 R ] 
/SI 481 0 R 
>> 
endobj
481 0 obj
<< 
/AU 479 0 R 
/TS (D:19991029212828)
>> 
endobj
482 0 obj
<< 
/Type /Pages 
/Kids [ 166 0 R 173 0 R 176 0 R 179 0 R 187 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
483 0 obj
<< 
/Type /Pages 
/Kids [ 204 0 R 209 0 R 214 0 R 219 0 R 222 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
484 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/tut-3.html)
endobj
485 0 obj
<< 
/S /SPS 
/ID 203 0 R 
/T (PETE Tutorial 3: Synthesizing Types)
/CT (text/html)
/TS (D:19
 991029212829)
/O [ 187 0 R 204 0 R 209 0 R 214 0 R 219 0 R 222 0 R 227 0 R 233 0 R 236 0 R 
239 0 R ] 
/SI 486 0 R 
>> 
endobj
486 0 obj
<< 
/AU 484 0 R 
/TS (D:19991029212829)
>> 
endobj
487 0 obj
<< 
/Type /Pages 
/Kids [ 227 0 R 233 0 R 236 0 R 239 0 R 247 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
488 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/stl.html)
endobj
489 0 obj
<< 
/S /SPS 
/ID 250 0 R 
/T (PETE Tutorials: The Standard Template Library)
/CT (text/html)
/TS (D:19991029212829)
/O [ 247 0 R 251 0 R ] 
/SI 490 0 R 
>> 
endobj
490 0 obj
<< 
/AU 488 0 R 
/TS (D:19991029212829)
>> 
endobj
491 0 obj
<< 
/Type /Pages 
/Kids [ 251 0 R 259 0 R 265 0 R 268 0 R 274 0 R ] 
/Count 5 
/Parent 445 0 R 
>> 
endobj
492 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/makeoperators.html)
endobj
493 0 obj
<< 
/S /SPS 
/ID 264 0 R 
/T (PETE Tutorials: MakeOperators man page)
/CT (text/html)
/TS (D:19991029212830)
/O [ 259 0 R 265 0 R 268 0 R 274 0 R 277 0 R 280 0 R ] 
/SI
  494 0 R 
>> 
endobj
494 0 obj
<< 
/AU 492 0 R 
/TS (D:19991029212830)
>> 
endobj
495 0 obj
(http://www-internal.acl.lanl.gov/~sa_smith/pete/legal.html)
endobj
496 0 obj
<< 
/S /SPS 
/ID 295 0 R 
/T (PETE Tutorials: Legal Notice)
/CT (text/html)
/TS (D:19991029212830)
/O [ 286 0 R ] 
/SI 497 0 R 
>> 
endobj
497 0 obj
<< 
/AU 495 0 R 
/TS (D:19991029212830)
>> 
endobj
498 0 obj
9 
endobj
499 0 obj
(http://www.acl.lanl.gov/include/images/acl-reg-gr.gif)
endobj
500 0 obj
<< 
/S /SIS 
/ID 334 0 R 
/TS (D:19991029213041)
/O [ 335 0 R ] 
/R [ 542 0 R ] 
/SI 501 0 R 
>> 
endobj
501 0 obj
<< 
/AU 499 0 R 
/TS (D:19991029213041)
>> 
endobj
502 0 obj
(http://www.acl.lanl.gov/include/images/acl_title-gr.gif)
endobj
503 0 obj
<< 
/S /SIS 
/ID 349 0 R 
/TS (D:19991029213041)
/O [ 350 0 R ] 
/R [ 545 0 R ] 
/SI 504 0 R 
>> 
endobj
504 0 obj
<< 
/AU 502 0 R 
/TS (D:19991029213041)
>> 
endobj
505 0 obj
(http://www.acl.lanl.gov/include/images/01_off.gif)
endobj
506 0 obj
<< 
/S /SIS 
/ID 352 0 R 
/T
 S (D:19991029213041)
/O [ 353 0 R ] 
/R [ 546 0 R ] 
/SI 507 0 R 
>> 
endobj
507 0 obj
<< 
/AU 505 0 R 
/TS (D:19991029213041)
>> 
endobj
508 0 obj
(http://www.acl.lanl.gov/include/images/02_off.gif)
endobj
509 0 obj
<< 
/S /SIS 
/ID 328 0 R 
/TS (D:19991029213041)
/O [ 329 0 R ] 
/R [ 541 0 R ] 
/SI 510 0 R 
>> 
endobj
510 0 obj
<< 
/AU 508 0 R 
/TS (D:19991029213041)
>> 
endobj
511 0 obj
(http://www.acl.lanl.gov/include/images/03_off.gif)
endobj
512 0 obj
<< 
/S /SIS 
/ID 355 0 R 
/TS (D:19991029213041)
/O [ 356 0 R ] 
/R [ 547 0 R ] 
/SI 513 0 R 
>> 
endobj
513 0 obj
<< 
/AU 511 0 R 
/TS (D:19991029213041)
>> 
endobj
514 0 obj
(http://www.acl.lanl.gov/include/images/04_off.gif)
endobj
515 0 obj
<< 
/S /SIS 
/ID 325 0 R 
/TS (D:19991029213041)
/O [ 326 0 R ] 
/R [ 540 0 R ] 
/SI 516 0 R 
>> 
endobj
516 0 obj
<< 
/AU 514 0 R 
/TS (D:19991029213041)
>> 
endobj
517 0 obj
(http://www.acl.lanl.gov/include/images/05_off.gif)
endobj
518 0 obj
<< 
/S /SIS 
/ID 367 0 R 
/TS (D:199910292130
 41)
/O [ 368 0 R ] 
/R [ 550 0 R ] 
/SI 519 0 R 
>> 
endobj
519 0 obj
<< 
/AU 517 0 R 
/TS (D:19991029213041)
>> 
endobj
520 0 obj
(http://www.acl.lanl.gov/include/images/06_off.gif)
endobj
521 0 obj
<< 
/S /SIS 
/ID 358 0 R 
/TS (D:19991029213041)
/O [ 359 0 R ] 
/R [ 548 0 R ] 
/SI 522 0 R 
>> 
endobj
522 0 obj
<< 
/AU 520 0 R 
/TS (D:19991029213041)
>> 
endobj
523 0 obj
(http://www.acl.lanl.gov/include/images/07_off.gif)
endobj
524 0 obj
<< 
/S /SIS 
/ID 340 0 R 
/TS (D:19991029213041)
/O [ 341 0 R ] 
/R [ 543 0 R ] 
/SI 525 0 R 
>> 
endobj
525 0 obj
<< 
/AU 523 0 R 
/TS (D:19991029213041)
>> 
endobj
526 0 obj
(http://www.acl.lanl.gov/include/images/08_off.gif)
endobj
527 0 obj
<< 
/S /SIS 
/ID 343 0 R 
/TS (D:19991029213041)
/O [ 344 0 R ] 
/R [ 544 0 R ] 
/SI 528 0 R 
>> 
endobj
528 0 obj
<< 
/AU 526 0 R 
/TS (D:19991029213041)
>> 
endobj
529 0 obj
(http://www.acl.lanl.gov/pete/pete-small.gif)
endobj
530 0 obj
<< 
/S /SIS 
/ID 364 0 R 
/TS (D:19991029213041)
/O [ 365 0 R ] 
/R 
 [ 549 0 R ] 
/SI 531 0 R 
>> 
endobj
531 0 obj
<< 
/AU 529 0 R 
/TS (D:19991029213041)
>> 
endobj
532 0 obj
(http://www.acl.lanl.gov/pete/tree.gif)
endobj
533 0 obj
<< 
/S /SIS 
/ID 383 0 R 
/TS (D:19991029213041)
/O [ 384 0 R ] 
/R [ 551 0 R ] 
/SI 534 0 R 
>> 
endobj
534 0 obj
<< 
/AU 532 0 R 
/TS (D:19991029213041)
>> 
endobj
535 0 obj
<< 
/Type /Pages 
/Kids [ 277 0 R 280 0 R 286 0 R 296 0 R 370 0 R 385 0 R ] 
/Count 6 
/Parent 445 0 R 
>> 
endobj
536 0 obj
<< 
/URL (http://www.acl.lanl.gov/pete/)
/H (Referer: http://www-internal.acl.lanl.gov/~sa_smith/pete/\r\n)
/S 454 0 R 
>> 
endobj
537 0 obj
(http://www.acl.lanl.gov/pete/)
endobj
538 0 obj
<< 
/S /SPS 
/ID 369 0 R 
/T (Portable Expression Template Engine | Main )
/CT (text/html)
/TS (D:19991029213041)
/O [ 296 0 R 370 0 R 385 0 R ] 
/SI 539 0 R 
>> 
endobj
539 0 obj
<< 
/AU 537 0 R 
/TS (D:19991029213041)
>> 
endobj
540 0 obj
1 
endobj
541 0 obj
1 
endobj
542 0 obj
1 
endobj
543 0 obj
1 
endobj
544 0 obj
1 
endobj
545 0 obj

 1 
endobj
546 0 obj
1 
endobj
547 0 obj
1 
endobj
548 0 obj
1 
endobj
549 0 obj
1 
endobj
550 0 obj
1 
endobj
551 0 obj
1 
endobj
xref
0 552 
0000000000 65535 f
+0000098795 00000 n
+0000099128 00000 n
+0000099167 00000 n
+0000099403 00000 n
+0000099559 00000 n
+0000099797 00000 n
+0000101682 00000 n
+0000101703 00000 n
+0000101737 00000 n
+0000102025 00000 n
+0000102082 00000 n
+0000102239 00000 n
+0000102385 00000 n
+0000102566 00000 n
+0000102802 00000 n
+0000103009 00000 n
+0000103950 00000 n
+0000103971 00000 n
+0000104347 00000 n
+0000104397 00000 n
+0000104645 00000 n
+0000104904 00000 n
+0000105165 00000 n
+0000105424 00000 n
+0000106749 00000 n
+0000106771 00000 n
+0000106806 00000 n
+0000107093 00000 n
+0000108302 00000 n
+0000108324 00000 n
+0000108641 00000 n
+0000108677 00000 n
+0000108935 00000 n
+0000109197 00000 n
+0000111295 00000 n
+0000111317 00000 n
+0000111617 00000 n
+0000113184 00000 n
+0000113206 00000 n
+0000113493 00000 n
+0000114835 00000 n
+0000114857 00000 n
+0000115144 00000 n
+0000117005 00000 n
+0000117027 00000 n
+0000117388 00000 n
+0000117424 00000 n
+0000117696 00000 n
+0000117982 00000 n
+0000120189 00000 n
+0000120211 00000 n
+0000120232 00000 n
+0000121057 00000 n
+0000121110 00000 n
+0000121132 00000 n
+0000121168 00000 n
+0000122485 00000 n
+0000122773 00000 n
+0000124198 00000 n
+0000124220 00000 n
+0000124524 00000 n
+0000124553 00000 n
+0000124827 00000 n
+0000126759 00000 n
+0000126781 00000 n
+0000127097 00000 n
+0000129201 00000 n
+0000129223 00000 n
+0000129511 00000 n
+0000130936 00000 n
+0000130958 00000 n
+0000131275 00000 n
+0000131339 00000 n
+0000131582 00000 n
+0000131824 00000 n
+0000132073 00000 n
+0000132266 00000 n
+0000132509 00000 n
+0000132724 00000 n
+0000134340 00000 n
+0000134362 00000 n
+0000134741 00000 n
+0000134916 00000 n
+0000135159 00000 n
+0000135423 00000 n
+0000135679 00000 n
+0000135931 00000 n
+0000136189 00000 n
+0000136441 00000 n
+0000136691 00000 n
+0000136965 00000 n
+0000137207 00000 n
+0000137454 00000 n
+0000137711 00000 n
+0000137956 00000 n
+0000138212 00000 n
+0000138462 00000 n
+0000138706 00000 n
+0000138962 00000 n
+0000139218 00000 n
+0000139494 00000 n
+0000139745 00000 n
+0000139992 00000 n
+0000140238 00000 n
+0000143104 00000 n
+0000143127 00000 n
+0000143163 00000 n
+0000143472 00000 n
+0000143511 00000 n
+0000143765 00000 n
+0000143930 00000 n
+0000147339 00000 n
+0000147362 00000 n
+0000147667 00000 n
+0000150587 00000 n
+0000150610 00000 n
+0000150946 00000 n
+0000150985 00000 n
+0000151242 00000 n
+0000151494 00000 n
+0000153783 00000 n
+0000153806 00000 n
+0000154128 00000 n
+0000154191 00000 n
+0000154442 00000 n
+0000154694 00000 n
+0000154945 00000 n
+0000155196 00000 n
+0000155467 00000 n
+0000158329 00000 n
+0000158352 00000 n
+0000158657 00000 n
+0000159785 00000 n
+0000159808 00000 n
+0000160072 00000 n
+0000161185 00000 n
+0000161208 00000 n
+0000161485 00000 n
+0000162617 00000 n
+0000162640 00000 n
+0000162961 00000 n
+0000163016 00000 n
+0000163265 00000 n
+0000163459 00000 n
+0000163704 00000 n
+0000163920 00000 n
+0000164969 00000 n
+0000164991 00000 n
+0000165372 00000 n
+0000165500 00000 n
+0000165744 00000 n
+0000166001 00000 n
+0000166250 00000 n
+0000166494 00000 n
+0000166741 00000 n
+0000166998 00000 n
+0000167242 00000 n
+0000167504 00000 n
+0000167758 00000 n
+0000168003 00000 n
+0000168264 00000 n
+0000168542 00000 n
+0000168796 00000 n
+0000171784 00000 n
+0000171807 00000 n
+0000171843 00000 n
+0000172165 00000 n
+0000172212 00000 n
+0000172461 00000 n
+0000172717 00000 n
+0000172910 00000 n
+0000176552 00000 n
+0000176575 00000 n
+0000176839 00000 n
+0000178123 00000 n
+0000178146 00000 n
+0000178410 00000 n
+0000179709 00000 n
+0000179732 00000 n
+0000180053 00000 n
+0000180108 00000 n
+0000180351 00000 n
+0000180544 00000 n
+0000180788 00000 n
+0000181002 00000 n
+0000182215 00000 n
+0000182238 00000 n
+0000182619 00000 n
+0000182739 00000 n
+0000182983 00000 n
+0000183232 00000 n
+0000183481 00000 n
+0000183729 00000 n
+0000183987 00000 n
+0000184230 00000 n
+0000184485 00000 n
+0000184733 00000 n
+0000184976 00000 n
+0000185231 00000 n
+0000185480 00000 n
+0000185724 00000 n
+0000188368 00000 n
+0000188391 00000 n
+0000188427 00000 n
+0000188735 00000 n
+0000188766 00000 n
+0000189010 00000 n
+0000191685 00000 n
+0000191708 00000 n
+0000192044 00000 n
+0000192075 00000 n
+0000192322 00000 n
+0000195146 00000 n
+0000195169 00000 n
+0000195463 00000 n
+0000195494 00000 n
+0000195769 00000 n
+0000197436 00000 n
+0000197459 00000 n
+0000197736 00000 n
+0000199798 00000 n
+0000199821 00000 n
+0000200115 00000 n
+0000200146 00000 n
+0000200390 00000 n
+0000202254 00000 n
+0000202277 00000 n
+0000202613 00000 n
+0000202652 00000 n
+0000202912 00000 n
+0000203166 00000 n
+0000205454 00000 n
+0000205477 00000 n
+0000205741 00000 n
+0000206793 00000 n
+0000206815 00000 n
+0000207079 00000 n
+0000208077 00000 n
+0000208099 00000 n
+0000208420 00000 n
+0000208475 00000 n
+0000208720 00000 n
+0000208914 00000 n
+0000209157 00000 n
+0000209373 00000 n
+0000210257 00000 n
+0000210279 00000 n
+0000210617 00000 n
+0000212137 00000 n
+0000212160 00000 n
+0000212199 00000 n
+0000212507 00000 n
+0000212562 00000 n
+0000212805 00000 n
+0000212999 00000 n
+0000213243 00000 n
+0000213457 00000 n
+0000214465 00000 n
+0000214487 00000 n
+0000214853 00000 n
+0000214884 00000 n
+0000215080 00000 n
+0000216765 00000 n
+0000216788 00000 n
+0000216824 00000 n
+0000217112 00000 n
+0000218503 00000 n
+0000218526 00000 n
+0000218834 00000 n
+0000218873 00000 n
+0000219067 00000 n
+0000219263 00000 n
+0000221508 00000 n
+0000221531 00000 n
+0000221848 00000 n
+0000224089 00000 n
+0000224112 00000 n
+0000224415 00000 n
+0000226663 00000 n
+0000226686 00000 n
+0000226993 00000 n
+0000227032 00000 n
+0000227226 00000 n
+0000227442 00000 n
+0000228309 00000 n
+0000228331 00000 n
+0000228673 00000 n
+0000228736 00000 n
+0000228890 00000 n
+0000229100 00000 n
+0000229337 00000 n
+0000229525 00000 n
+0000229733 00000 n
+0000231170 00000 n
+0000231193 00000 n
+0000231230 00000 n
+0000231749 00000 n
+0000231942 00000 n
+0000232101 00000 n
+0000232267 00000 n
+0000232436 00000 n
+0000232602 00000 n
+0000232771 00000 n
+0000232935 00000 n
+0000233111 00000 n
+0000233276 00000 n
+0000233439 00000 n
+0000233613 00000 n
+0000233788 00000 n
+0000233965 00000 n
+0000234141 00000 n
+0000234323 00000 n
+0000234501 00000 n
+0000234658 00000 n
+0000234840 00000 n
+0000235018 00000 n
+0000235183 00000 n
+0000235351 00000 n
+0000235531 00000 n
+0000238344 00000 n
+0000238367 00000 n
+0000238388 00000 n
+0000238459 00000 n
+0000238512 00000 n
+0000238533 00000 n
+0000238569 00000 n
+0000238846 00000 n
+0000238867 00000 n
+0000238903 00000 n
+0000239184 00000 n
+0000239205 00000 n
+0000239360 00000 n
+0000239414 00000 n
+0000239436 00000 n
+0000239473 00000 n
+0000240274 00000 n
+0000240294 00000 n
+0000240359 00000 n
+0000240412 00000 n
+0000240434 00000 n
+0000240470 00000 n
+0000240765 00000 n
+0000240786 00000 n
+0000240822 00000 n
+0000241082 00000 n
+0000241103 00000 n
+0000241258 00000 n
+0000241312 00000 n
+0000241334 00000 n
+0000241370 00000 n
+0000242355 00000 n
+0000242376 00000 n
+0000242412 00000 n
+0000242670 00000 n
+0000242691 00000 n
+0000242727 00000 n
+0000242992 00000 n
+0000243014 00000 n
+0000243050 00000 n
+0000243335 00000 n
+0000243357 00000 n
+0000244184 00000 n
+0000244239 00000 n
+0000244262 00000 n
+0000244298 00000 n
+0000245645 00000 n
+0000245666 00000 n
+0000245702 00000 n
+0000245959 00000 n
+0000245995 00000 n
+0000246374 00000 n
+0000246437 00000 n
+0000246592 00000 n
+0000246745 00000 n
+0000246911 00000 n
+0000247066 00000 n
+0000247220 00000 n
+0000249800 00000 n
+0000249823 00000 n
+0000249845 00000 n
+0000250672 00000 n
+0000250727 00000 n
+0000250750 00000 n
+0000250787 00000 n
+0000252518 00000 n
+0000252799 00000 n
+0000252870 00000 n
+0000253025 00000 n
+0000253182 00000 n
+0000253337 00000 n
+0000253496 00000 n
+0000253671 00000 n
+0000253847 00000 n
+0000254739 00000 n
+0000254761 00000 n
+0000254868 00000 n
+0000254971 00000 n
+0000255077 00000 n
+0000255188 00000 n
+0000255268 00000 n
+0000255376 00000 n
+0000256597 00000 n
+0000256801 00000 n
+0000258021 00000 n
+0000258224 00000 n
+0000259660 00000 n
+0000259712 00000 n
+0000259764 00000 n
+0000259816 00000 n
+0000259868 00000 n
+0000259920 00000 n
+0000259972 00000 n
+0000260024 00000 n
+0000260074 00000 n
+0000260127 00000 n
+0000260180 00000 n
+0000260232 00000 n
+0000260285 00000 n
+0000260338 00000 n
+0000260391 00000 n
+0000260444 00000 n
+0000260496 00000 n
+0000260549 00000 n
+0000260602 00000 n
+0000260655 00000 n
+0000260708 00000 n
+0000260761 00000 n
+0000260814 00000 n
+0000260867 00000 n
+0000260920 00000 n
+0000260973 00000 n
+0000261026 00000 n
+0000261079 00000 n
+0000261132 00000 n
+0000261185 00000 n
+0000261238 00000 n
+0000261291 00000 n
+0000261344 00000 n
+0000261397 00000 n
+0000261450 00000 n
+0000261503 00000 n
+0000261556 00000 n
+0000261609 00000 n
+0000261662 00000 n
+0000261715 00000 n
+0000261857 00000 n
+0000262010 00000 n
+0000262088 00000 n
+0000262205 00000 n
+0000262266 00000 n
+0000262690 00000 n
+0000263116 00000 n
+0000263159 00000 n
+0000263264 00000 n
+0000263339 00000 n
+0000263481 00000 n
+0000263777 00000 n
+0000263816 00000 n
+0000263884 00000 n
+0000264020 00000 n
+0000264081 00000 n
+0000264166 00000 n
+0000264317 00000 n
+0000264378 00000 n
+0000264454 00000 n
+0000264567 00000 n
+0000264628 00000 n
+0000264740 00000 n
+0000264851 00000 n
+0000264934 00000 n
+0000265173 00000 n
+0000265234 00000 n
+0000265254 00000 n
+0000265366 00000 n
+0000265482 00000 n
+0000265560 00000 n
+0000265797 00000 n
+0000265858 00000 n
+0000265975 00000 n
+0000266053 00000 n
+0000266269 00000 n
+0000266330 00000 n
+0000266447 00000 n
+0000266564 00000 n
+0000266642 00000 n
+0000266871 00000 n
+0000266932 00000 n
+0000267049 00000 n
+0000267125 00000 n
+0000267299 00000 n
+0000267360 00000 n
+0000267477 00000 n
+0000267563 00000 n
+0000267762 00000 n
+0000267823 00000 n
+0000267901 00000 n
+0000268050 00000 n
+0000268111 00000 n
+0000268131 00000 n
+0000268204 00000 n
+0000268319 00000 n
+0000268380 00000 n
+0000268455 00000 n
+0000268570 00000 n
+0000268631 00000 n
+0000268700 00000 n
+0000268815 00000 n
+0000268876 00000 n
+0000268945 00000 n
+0000269060 00000 n
+0000269121 00000 n
+0000269190 00000 n
+0000269305 00000 n
+0000269366 00000 n
+0000269435 00000 n
+0000269550 00000 n
+0000269611 00000 n
+0000269680 00000 n
+0000269795 00000 n
+0000269856 00000 n
+0000269925 00000 n
+0000270040 00000 n
+0000270101 00000 n
+0000270170 00000 n
+0000270285 00000 n
+0000270346 00000 n
+0000270415 00000 n
+0000270530 00000 n
+0000270591 00000 n
+0000270654 00000 n
+0000270769 00000 n
+0000270830 00000 n
+0000270887 00000 n
+0000271002 00000 n
+0000271063 00000 n
+0000271188 00000 n
+0000271329 00000 n
+0000271378 00000 n
+0000271558 00000 n
+0000271619 00000 n
+0000271639 00000 n
+0000271659 00000 n
+0000271679 00000 n
+0000271699 00000 n
+0000271719 00000 n
+0000271739 00000 n
+0000271759 00000 n
+0000271779 00000 n
+0000271799 00000 n
+0000271819 00000 n
+0000271839 00000 n
+trailer
<<
/Size 552
/ID[<55bc04fb77f364292aaad31d1ab19522><55bc04fb77f364292aaad31d1ab19522>]
>>
startxref
173
%%EOF
13 0 obj
<< 
/Subtype /Link 
/Rect [ 264.46063 605.00391 308 620 ] 
/A 1481 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
76 0 obj
<< 
/Subtype /Link 
/Rect [ 286.71756 269.80167 323.95349 282.62669 ] 
/A 1479 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
143 0 obj
<< 
/Subtype /Link 
/Rect [ 289.60434 243.32596 321.26566 254.23094 ] 
/A 1483 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
182 0 obj
<< 
/Subtype /Link 
/Rect [ 289.76639 110.8817 321.11478 121.67889 ] 
/A 1485 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
242 0 obj
<< 
/Subtype /Link 
/Rect [ 289.60434 463.77475 321.26566 474.67972 ] 
/A 1487 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
254 0 obj
<< 
/Subtype /Link 
/Rect [ 283.45337 408.87109 326.99274 423.86719 ] 
/A 1489 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
282 0 obj
<< 
/Subtype /Link 
/Rect [ 288.55228 468.59065 323.44769 480.60954 ] 
/A 1491 0 R 
/Border [ 0 0 
 0 ] 
/H /I 
>> 
endobj
446 0 obj
<< 
/ModDate (D:19991029154251-06'00')
/CreationDate (D:19991029152825)
/Producer (Acrobat Web Capture 4.0)
/Title (PETE Tutorials)
>> 
endobj
1478 0 obj
<< 
/S /GoTo 
/D [ 71 0 R /FitH 796 ] 
>> 
endobj
1479 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1480 0 obj
<< 
/S /GoTo 
/D [ 9 0 R /FitH 796 ] 
>> 
endobj
1481 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1482 0 obj
<< 
/S /GoTo 
/D [ 140 0 R /FitH 745 ] 
>> 
endobj
1483 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1484 0 obj
<< 
/S /GoTo 
/D [ 179 0 R /FitH 745 ] 
>> 
endobj
1485 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1486 0 obj
<< 
/S /GoTo 
/D [ 239 0 R /FitH 745 ] 
>> 
endobj
1487 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1488 0 obj
<< 
/S /GoTo 
/D [ 251 0 R /FitH 796 ] 
>> 
endobj
1489 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1490 0 obj
<< 
/S /GoTo 
/D [ 280 0 R /FitH 796 ] 
>> 
endobj
1491 0 obj
<< 
/S 
 /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
xref
0 1 
0000000000 65535 f
+13 1 
0000283029 00000 n
+76 1 
0000283147 00000 n
+143 1 
0000283277 00000 n
+182 1 
0000283408 00000 n
+242 1 
0000283538 00000 n
+254 1 
0000283669 00000 n
+282 1 
0000283800 00000 n
+446 1 
0000283931 00000 n
+1478 14 
0000284084 00000 n
+0000284145 00000 n
+0000284207 00000 n
+0000284267 00000 n
+0000284329 00000 n
+0000284391 00000 n
+0000284453 00000 n
+0000284515 00000 n
+0000284577 00000 n
+0000284639 00000 n
+0000284701 00000 n
+0000284763 00000 n
+0000284825 00000 n
+0000284887 00000 n
+trailer
<<
/Size 1492
/Info 446 0 R 
/Root 553 0 R 
/Prev 173 
/ID[<55bc04fb77f364292aaad31d1ab19522><9db6f9c3ec73a4f44f528a599da4a85c>]
>>
startxref
284949
%%EOF
15 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 579.00391 451.7252 594 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
78 0 obj
<< 
/Subtype /Link 
/Rect [ 181.37221 247.56583 430.62776 260.39085 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
145 0 obj
<< 
/Subtype /Link 
/Rect [ 200.03035 224.41907 411.96962 235.32405 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
184 0 obj
<< 
/Subtype /Link 
/Rect [ 201.07765 92.16167 410.9223 102.95886 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
244 0 obj
<< 
/Subtype /Link 
/Rect [ 200.03035 444.86786 411.96962 455.77283 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
256 0 obj
<< 
/Subtyp
 e /Link 
/Rect [ 160.2748 382.87109 451.7252 397.86719 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
283 0 obj
<< 
/Subtype /Link 
/Rect [ 189.20592 447.75249 422.79405 459.77138 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
289 0 obj
<< 
/Subtype /Link 
/Rect [ 120.36295 227.00391 280.18524 242 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
291 0 obj
<< 
/Subtype /Link 
/Rect [ 303.22305 187.00391 346.76242 202 ] 
/A 1493 0 R 
/Border [ 0 0 0 ] 
/H /I 
>> 
endobj
292 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 161.00391 451.7252 176 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
326 0 obj
<< /Type /XObject /Subtype /Image /Width 69 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 324 0 R >> 
stream
+H�b`$�i�����0������09��0"tA
eD"�8�]�7
+]#�5��
A���K�*        �       #���@��u       �`��`�}
endstream
endobj
329 0 obj
<< /Type /XObject /Subtype /Image /Width 65 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 327 0 R >> 
stream
+H�b``�4�
`��1���@�`g�g�8�N��0b�����u�}P[F2f9�3�w�J$�C\��n�����Dx
endstream
endobj
335 0 obj
<< /Type /XObject /Subtype /Image /Width 150 /Height 40 /BitsPerComponent 8 
/ColorSpace 332 0 R /Filter /FlateDecode /Length 333 0 R >> 
stream
+H����r� `r.;w�m����ƀilv�դ�      
v��V(@?I`�z�0OhB*��f>Jk����h��t"��L�g��<v����C�LcIN�v����Ls������Q�Ԩ�}+

�@�[��,Rն�i|�K�n���4�!�Ƃ�PUOS%jd5SUQ��$!$����*2U�>1Un�j��nUt~Jj�,|m���ʆ�5KQ�?wdUH�;?����0V٪��dUT��x<
 �!Q��zy5)��v{:5V%��0i/%+��z��~Ke��}kQ�͹�*Ο5�vC�C��\�����U'���g�DA+�]T��
+VY�U�:[SkU[ߜ���TFq��U��-T�{mn��i�
+�j����
k�(WY�~���*Ի�k+�W�΀��6���o^�:�FY�(��_|��8��*��,`�KU�:
+�J~fp�xq�
+�R�OB�s-����U��P�@ʇv�/*}W%��,�4�����\�w��N��ۃ�R�g�w�W���aU��O@�.��br���NRO�^���bs�m�?�hx_�n(r�u6��fE7|�Q��2_r]ŗ�+�a�#K�jR[f����f�;�!Qo�o�;z�T���s��~m�1�
    0`��
endstream
endobj
341 0 obj
<< /Type /XObject /Subtype /Image /Width 61 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 339 0 R >> 
stream
+H�Ԓ�
+� ��������Z��       f^�)i�ss��*�)S�(>��cu;��h�*�T����>��I��ФmĖe��     
�#�a^�5��K@3sۧM.ɋ-�Z.�\�
endstream
endobj
344 0 obj
<< /Type /XObject /Subtype /Image /Width 39 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 342 0 R >> 
stream
+H�b`쀑�BC1�BQƯ�M�lF�(��,� � �`�A�bQ��H���Lc����6����22@�C.=
endstream
endobj
350 0 obj
<< /Type /XObject /Subtype /Image /Width 450 /Height 25 /BitsPerComponent 8 
/ColorSpace 347 0 R /Filter /FlateDecode /Length 348 0 R >> 
stream
+H�얉�� @�p�8M�����
+H`�&^چ)�I������&Rp��K{";��Ev�͋�[�        �.�l]�3g�.�uUw嵛Y������       
��NU��cUw�^*. K�����AU�����0 _�W�9��z���\�蝠�j�s3Y�i��Fũ"A^�����>H��
b��6M��;�##�W�25���,�$�??�T�eN�Z���MqV�lo�
Zm5��=9���ڝ�|S�А�4⃻A^�1l2�*U�h�
pޮ�CLV��"�@�^V�K     �Ԑ���Q�W{d{���g@蕇]��A���c��Am���2�ڕ@%j7u%w�)
o7�cC�M�X�@,G�&tqF��䳃R(�Dp��)ҍEf����m㵇�r�٥�!VQLOMp�dUĩ�
כ�+$����f-O� 
�{�BHb��b3�-�������rk`)�.��O�;A�`�,�>���?�7O̖|�/�"3������Z�e���d�`,x��|�
 ������!���5�L���@�,4T��9�bȯ����>$ئ���8sk��Hw�t�2i=]��Q��(��*Rh
 �x    J�m�D0�G���������9�������Y���J��h4�d�[ȯ����G3m�4�?We
+d��>6cb�Q��2��<n"�H*c��b���q�dQjDNR��|��`��
E�t)�eFP�`�����R�@���kg_�����R.��?#�d�
+vV*�`{�sP�Z��D�K��vɤl]:�֥l].p�Ҷ�`~�
endstream
endobj
353 0 obj
<< /Type /XObject /Subtype /Image /Width 49 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 351 0 R >> 
stream
+H�b`�1`��F8�.�]#X�t
����Ūj<#T'#��S###iH���� L�~ 
+B
v�X
endstream
endobj
356 0 obj
<< /Type /XObject /Subtype /Image /Width 62 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 354 0 R >> 
stream
+H�b`0�4Xt3B1*`�`��S�nFF0� �#T�n�B3"h�v�m"S7�HЍ� ԛh����d0tu3�?k
endstream
endobj
359 0 obj
<< /Type /XObject /Subtype /Image /Width 55 /Height 15 /BitsPerComponent 8 
/ColorSpace 338 0 R /Filter /FlateDecode /Length 357 0 R >> 
stream
+H�ĒQ� Cy����p8\��Y2�� ��A��
+�a������H�)�+ZF��9��Wce�0�AN�*2�IM��Y�9��tG���uj�������ok
endstream
endobj
365 0 obj
<< /Type /XObject /Subtype /Image /Width 120 /Height 70 /BitsPerComponent 8 
/ColorSpace 362 0 R /Filter /FlateDecode /Length 363 0 R >> 
stream
+H��V9v�H
-$#��Dr4R'R�YGd䋈�N2�S�:��P��Zm����!ds)��>�)m��&�l���X0!�K�;�YA��?]R=H�P�=��p�+Vm��I�S�YyD�T�_��4NZ�5X����'S�@߲H��ui�&}�
�{��X�%�v|�K��T�\t��>�͒���/�v-��eGvD��&XЩ�w5PB=+��9�:yj
R��y�S��X/����qg�¶iͰB����9^.g�|o
+%PI{z��1n�璲=�|���r�CMs?xA'Bn/ ����(�W���iǒ�\�PU2tZq�
�9Љ�%�+�٭��~2��h��t�s�Z����ąp�9�gL����<o��Nˌ\�C�o�2��*j�1�|e^�H��5GA�2S`2`�p˴�I��ր����¯�d��
=j>�+�/ǎ(�Z��t2h5��1�����7-�5�^B��<M���u3�W�E��
+��S5�wW�g�N�"|��*���AzWS=�)� 
p)e��n��@�LP�;���ᗀ��4��#{����<��`�t7�A�i������������ms뚮��n�Y���Dg�v�
+i�Ҫ�2'e�Dy�����ota_�g���f�>G�V΁b(_F�y�
d������XRYtn3���ev�7�IAA76��@�׊��ʻ'�3�v�o�~AC�r?[0?7I1b�*!��/�
囷Z���6t��}'�{Y�KK�N�l�(��|�
+�ϼq�_"��y^�40~Y�A^�#g���,��o�+�c|��D�y��}WBd9��2_  
V��d�lO�h����Od�p�#o�^� �m��o�w�9���Q�z�7L��ob��+��^<��[P%ݸ1�y�!~�4*_�
+�/#��[Hi��$�v�˿2Y][:6m�vޠq���b�!,����X6��U��&�l�yH�~(Js����7�4��f�O�;
9�|��G~"*)�;7���Z����ʐ]�!�ej�|G�R��Q�ރ���˟��#�i����M�     
����\�tQ}�|��?��e�����=!�%'�'ϯsd-���;y�\NV�_�o���Gq@�D}ln��:U=y�3��A̋����Y6+~?�4����of�%��������k3_É�|V���'��يq
endstream
endobj
368 0 obj
<< /Type /XObject /Subtype /Image /Width 50 /Height 15 /BitsPerComponent 8 
/ColorSpace 323 0 R /Filter /FlateDecode /Length 366 0 R >> 
stream
+H�b`�9`��F(&A#�:`�ÈO��Vb�h"#�X�fF"t�X��3�a�LoD�D@�taU
endstream
endobj
384 0 obj
<< /Mask [ 110 110 ] /Type /XObject /Subtype /Image /Width 134 /Height 97 
/BitsPerComponent 8 /ColorSpace 381 0 R /Filter /FlateDecode /Length 382 0 R >> 
stream
+H���[Gǿ��)����4-�Tc
+����U
+4xR�A)�X��Q��j�������{�\.��ݻ�./�}�<��f���ٙ|���.��[>+
�lS����v#�6���BİA��$�E
b�9�4���xS(�d�>�q=�5����a��Ҋa,$�BO�X����"��y�)�����X &X'�̀�˷�
���c��d�N1�S�L���1�7����(н�x0W4�G�y(��/B�q���0�     ���0D\��!��g
��}�_�G����h��v�;�al֖w��1۩�ڔ�ڜ�����"�}�&�#KQ{�{�(��
T.��mԴ@^��1��-���Y�h��Ә6����)v
+s?�Ø'R�.j7�Zc�r��f�@|��V��V��!����1�7�tR�xRP�!b��.h�G��3����83�ud��(ҸNב&Ҡ7��W����S$jvd���#��6�<McD���ٹ�^(�C
 ����1��q�I��^(vX0�+��
+�;v͊����� ���a���|��Vz��5a�b�7D���G�BK�C�[�b��d
Dvs���Xx�(�+uNU��2l�˚�q���K�$��d���o#�������:�Wpz
+
+���`0z        C���B��\�_���ĐX�?���/�#�wUK���c���F>�
��_s���l��1b��o�r[��f��J��+�>��
�V�v��c����Z���SYk,۝��,>��k[�u��[��֭��Ғ��W�!��Ŗ�����C���`�8C��!:"�jO�w?�W�4S����A��I.7m�����������_g�x�Ư�g�\XWe�Ԏ�dL����Xy���
w��*K6�~���M����j��_�p���LO�5/��[�5�A�9��|���}dyt܅��k�ws�_���
+�u���\`����%���4�?�~AHa�!��'�0�����
!���kf�r���Q7�*=&s7��b�հ�
��m�:�k���5��s�`O��5�i�m�5�"�BD�k�E
+-afHC2c�E�)��Ѝ*�B�[U��T���4�|�S(�5a3��b|CbD�r�T(��8|��H�P,���!�p��e���:�ۥ����[�Y̓�{,���y�
+S�(�an���pJ��yYe�����
+F��U� DE!Fx(._c%�Ă!6�����qS�+_|�l�W9��#�qQ
+Y��9��.l�ڦ3�Bf�rA�v��,E��"���#4�
=O�R��K�N��N��6����t����l�"KY�o,���,�R�ͥ����:DG��,/g��vR��%�迩i���K�
S�#�~a����\c���k���|3���_�D(����z�.?��N���Ů��7�Z���1R�E�,�3�$[��X�h�>�U�j���b�������s-5�}
        Zc����!Y9.W�[�nl�5��X���W�
+0��C
endstream
endobj
445 0 obj
<< 
/Type /Pages 
/Kids [ 468 0 R 467 0 R 473 0 R 474 0 R 478 0 R 482 0 R 483 0 R 487 0 R 491 0 R 
535 0 R ] 
/Count 48 
>> 
endobj
446 0 obj
<< 
/ModDate (D:19991029154639-06'00')
/CreationDate (D:19991029152825)
/Producer (Acrobat Web Capture 4.0)
/Title (PETE Tutorials)
>> 
endobj
450 0 obj
<< 
/Names [ 26 0 R 470 0 R 106 0 R 476 0 R 295 0 R 496 0 R 264 0 R 493 0 R 250 0 R 
489 0 R 1475 0 R 459 0 R 165 0 R 480 0 R 1472 0 R 448 0 R 8 0 R 
462 0 R 203 0 R 485 0 R 55 0 R 465 0 R ] 
>> 
endobj
451 0 obj
<< 
/Names [ 458 0 R 459 0 R 469 0 R 470 0 R 447 0 R 448 0 R 461 0 R 462 0 R 495 0 
R 
496 0 R 492 0 R 493 0 R 488 0 R 489 0 R 464 0 R 465 0 R 475 0 R 
476 0 R 479 0 R 480 0 R 484 0 R 485 0 R ] 
>> 
endobj
500 0 obj
<< 
/S /SIS 
/ID 334 0 R 
/TS (D:19991029213041)
/SI 501 0 R 
/R [ 1496 0 R ] 
>> 
endobj
503 0 obj
<< 
/S /SIS 
/ID 349 0 R 
/TS (D:19991029213041)
/SI 504 0 R 
/R [ 1499 0 R ] 
>> 
endobj
506 0 obj
<< 
/S /SIS 
/ID 352 0 R 
/TS (D:199
 91029213041)
/SI 507 0 R 
/R [ 1500 0 R ] 
>> 
endobj
509 0 obj
<< 
/S /SIS 
/ID 328 0 R 
/TS (D:19991029213041)
/SI 510 0 R 
/R [ 1495 0 R ] 
>> 
endobj
512 0 obj
<< 
/S /SIS 
/ID 355 0 R 
/TS (D:19991029213041)
/SI 513 0 R 
/R [ 1501 0 R ] 
>> 
endobj
515 0 obj
<< 
/S /SIS 
/ID 325 0 R 
/TS (D:19991029213041)
/SI 516 0 R 
/R [ 1494 0 R ] 
>> 
endobj
518 0 obj
<< 
/S /SIS 
/ID 367 0 R 
/TS (D:19991029213041)
/SI 519 0 R 
/R [ 1504 0 R ] 
>> 
endobj
521 0 obj
<< 
/S /SIS 
/ID 358 0 R 
/TS (D:19991029213041)
/SI 522 0 R 
/R [ 1502 0 R ] 
>> 
endobj
524 0 obj
<< 
/S /SIS 
/ID 340 0 R 
/TS (D:19991029213041)
/SI 525 0 R 
/R [ 1497 0 R ] 
>> 
endobj
527 0 obj
<< 
/S /SIS 
/ID 343 0 R 
/TS (D:19991029213041)
/SI 528 0 R 
/R [ 1498 0 R ] 
>> 
endobj
530 0 obj
<< 
/S /SIS 
/ID 364 0 R 
/TS (D:19991029213041)
/SI 531 0 R 
/R [ 1503 0 R ] 
>> 
endobj
533 0 obj
<< 
/S /SIS 
/ID 383 0 R 
/TS (D:19991029213041)
/SI 534 0 R 
/R [ 1505 0 R ] 
>> 
endobj
535 0 obj
<< 
/Type /Pages 
/Kids [ 277 0 R
  280 0 R 286 0 R ] 
/Count 3 
/Parent 445 0 R 
>> 
endobj
538 0 obj
<< 
/S /SPS 
/ID 369 0 R 
/T (Portable Expression Template Engine | Main )
/CT (text/html)
/TS (D:19991029213041)
/O [ ] 
/SI 539 0 R 
>> 
endobj
597 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 296 0 R 
/K [ 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R ] 
>> 
endobj
598 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 296 0 R 
/K [ 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R ] 
>> 
endobj
599 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 385 0 R 
/K [ 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R ] 
>> 
endobj
600 0 obj
<< 
/S /FTR 
/P 595 0 R 
/Pg 385 0 R 
/K [ 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R ] 
>> 
endobj
619 0 obj
<< 
/S /P 
/P 618 0 R 
>> 
endobj
620 0 obj
<< 
/S /P 
/P 617 0 R 
>> 
endobj
621 0 obj
<< 
/S /P 
/P 617 0 R 
>> 
endobj
622 0 obj
<< 
/S /P 
/P 616 0 R 
>> 
endobj
623 0 obj
<< 
/S /P 
/P 615 0 R 
>> 
endobj
624 0 obj
<< 
/S /P 
/P 614 0 R 
>> 
endobj
625 0 obj
<< 
/S /P 
/P 613 0 R 
>> 
endobj
632 0 obj
<< 
/
 S /P 
/P 631 0 R 
>> 
endobj
633 0 obj
<< 
/S /H2 
/P 630 0 R 
>> 
endobj
634 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
635 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
636 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
637 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
638 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
639 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
640 0 obj
<< 
/S /H2 
/P 630 0 R 
>> 
endobj
641 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
642 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
643 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
644 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
645 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
646 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
647 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
648 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
649 0 obj
<< 
/S /Table 
/P 630 0 R 
/K [ 658 0 R 659 0 R ] 
/Pg 370 0 R 
>> 
endobj
650 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
651 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
652 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
653 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
6
 54 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
655 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
656 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
657 0 obj
<< 
/S /P 
/P 630 0 R 
>> 
endobj
659 0 obj
<< 
/S /TR 
/P 649 0 R 
/Pg 370 0 R 
/K [ 660 0 R 661 0 R ] 
>> 
endobj
662 0 obj
<< 
/S /P 
/P 661 0 R 
>> 
endobj
663 0 obj
<< 
/S /P 
/P 661 0 R 
>> 
endobj
664 0 obj
<< 
/S /P 
/P 660 0 R 
>> 
endobj
665 0 obj
<< 
/S /P 
/P 658 0 R 
>> 
endobj
666 0 obj
<< 
/S /P 
/P 629 0 R 
>> 
endobj
667 0 obj
<< 
/S /P 
/P 628 0 R 
>> 
endobj
668 0 obj
<< 
/S /P 
/P 627 0 R 
>> 
endobj
677 0 obj
<< 
/S /Label 
/P 676 0 R 
>> 
endobj
678 0 obj
<< 
/S /P 
/P 676 0 R 
>> 
endobj
679 0 obj
<< 
/S /Label 
/P 675 0 R 
>> 
endobj
680 0 obj
<< 
/S /P 
/P 675 0 R 
>> 
endobj
681 0 obj
<< 
/S /Label 
/P 674 0 R 
>> 
endobj
682 0 obj
<< 
/S /P 
/P 674 0 R 
>> 
endobj
683 0 obj
<< 
/S /Label 
/P 673 0 R 
>> 
endobj
684 0 obj
<< 
/S /P 
/P 673 0 R 
>> 
endobj
685 0 obj
<< 
/S /Label 
/P 672 0 R 
>> 
endobj
686 0 obj
<< 
/S
  /P 
/P 672 0 R 
>> 
endobj
687 0 obj
<< 
/S /Label 
/P 671 0 R 
>> 
endobj
688 0 obj
<< 
/S /P 
/P 671 0 R 
>> 
endobj
689 0 obj
<< 
/S /Label 
/P 670 0 R 
>> 
endobj
690 0 obj
<< 
/S /P 
/P 670 0 R 
>> 
endobj
691 0 obj
<< 
/S /P 
/P 626 0 R 
>> 
endobj
698 0 obj
<< 
/S /P 
/P 697 0 R 
>> 
endobj
699 0 obj
<< 
/S /P 
/P 696 0 R 
>> 
endobj
700 0 obj
<< 
/S /P 
/P 695 0 R 
>> 
endobj
701 0 obj
<< 
/S /P 
/P 694 0 R 
>> 
endobj
702 0 obj
<< 
/S /P 
/P 693 0 R 
>> 
endobj
703 0 obj
<< 
/S /P 
/P 692 0 R 
>> 
endobj
708 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (advanced computing laboratory)
>> 
endobj
709 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (learn about what we do)
>> 
endobj
710 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (explore our research projects)
>> 
endobj
711 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (information for acl users)
>> 
endobj
712 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (acl and computing related resources)
>> 
endobj
713 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (latest news an
 d events)
>> 
endobj
714 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (find acl staff members)
>> 
endobj
715 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (search our web site)
>> 
endobj
716 0 obj
<< 
/S /Image 
/P 707 0 R 
/Alt (need help? look here)
>> 
endobj
718 0 obj
<< 
/S /Image 
/P 717 0 R 
/Alt (go to ACL home)
>> 
endobj
781 0 obj
[ 
null null null null null null null null null null null null null 
null null null null null null null null null null null null null 
null null null null null null null null null null null null null 
null null null null null null null null null null null null null 
null null null null 
]
endobj
782 0 obj
[ 
null null null null null null null null null null null null null 
null null null null null null 
]
endobj
783 0 obj
[ 
null null null null null null null null null null null null null 

]
endobj
1463 0 obj
<< 
/Subtype /Link 
/Rect [ 160.2748 114.00391 451.7252 129 ] 
/Border [ 0 0 0 ] 
/A << /S /URI /URI (http://www.acl.lanl.gov/pete/)>> 
>> 
endobj
1492
  0 obj
<< 
/S /GoTo 
/D [ 286 0 R /FitH 796 ] 
>> 
endobj
1493 0 obj
<< 
/S /GoTo 
/D [ 555 0 R /FitH 792 ] 
>> 
endobj
1494 0 obj
0 
endobj
1495 0 obj
0 
endobj
1496 0 obj
0 
endobj
1497 0 obj
0 
endobj
1498 0 obj
0 
endobj
1499 0 obj
0 
endobj
1500 0 obj
0 
endobj
1501 0 obj
0 
endobj
1502 0 obj
0 
endobj
1503 0 obj
0 
endobj
1504 0 obj
0 
endobj
1505 0 obj
0 
endobj
xref
0 1 
0000000385 65535 f
+15 1 
0000285645 00000 n
+78 1 
0000285801 00000 n
+145 1 
0000285965 00000 n
+184 1 
0000286130 00000 n
+244 1 
0000286293 00000 n
+256 1 
0000286458 00000 n
+283 1 
0000286621 00000 n
+289 1 
0000286786 00000 n
+291 2 
0000286945 00000 n
+0000287070 00000 n
+296 1 
0000000000 00001 f
+326 1 
0000287227 00000 n
+329 1 
0000287492 00000 n
+335 1 
0000287761 00000 n
+341 1 
0000288550 00000 n
+344 1 
0000288833 00000 n
+350 1 
0000289081 00000 n
+353 1 
0000290054 00000 n
+356 1 
0000290300 00000 n
+359 1 
0000290553 00000 n
+365 1 
0000290826 00000 n
+368 1 
0000292161 00000 n
+370 1 
0000000296 00001 f
+384 2 
0000292406 00000 n
+0000000370 00001 f
+445 2 
0000294124 00000 n
+0000294266 00000 n
+450 2 
0000294419 00000 n
+0000294632 00000 n
+500 1 
0000294847 00000 n
+503 1 
0000294947 00000 n
+506 1 
0000295047 00000 n
+509 1 
0000295147 00000 n
+512 1 
0000295247 00000 n
+515 1 
0000295347 00000 n
+518 1 
0000295447 00000 n
+521 1 
0000295547 00000 n
+524 1 
0000295647 00000 n
+527 1 
0000295747 00000 n
+530 1 
0000295847 00000 n
+533 1 
0000295947 00000 n
+535 1 
0000296047 00000 n
+538 1 
0000296148 00000 n
+597 4 
0000296304 00000 n
+0000296419 00000 n
+0000296534 00000 n
+0000296649 00000 n
+619 7 
0000296764 00000 n
+0000296808 00000 n
+0000296852 00000 n
+0000296896 00000 n
+0000296940 00000 n
+0000296984 00000 n
+0000297028 00000 n
+632 26 
0000297072 00000 n
+0000297116 00000 n
+0000297161 00000 n
+0000297205 00000 n
+0000297249 00000 n
+0000297293 00000 n
+0000297337 00000 n
+0000297381 00000 n
+0000297425 00000 n
+0000297470 00000 n
+0000297514 00000 n
+0000297558 00000 n
+0000297602 00000 n
+0000297646 00000 n
+0000297690 00000 n
+0000297734 00000 n
+0000297778 00000 n
+0000297822 00000 n
+0000297907 00000 n
+0000297951 00000 n
+0000297995 00000 n
+0000298039 00000 n
+0000298083 00000 n
+0000298127 00000 n
+0000298171 00000 n
+0000298215 00000 n
+659 1 
0000298259 00000 n
+662 7 
0000298341 00000 n
+0000298385 00000 n
+0000298429 00000 n
+0000298473 00000 n
+0000298517 00000 n
+0000298561 00000 n
+0000298605 00000 n
+677 15 
0000298649 00000 n
+0000298697 00000 n
+0000298741 00000 n
+0000298789 00000 n
+0000298833 00000 n
+0000298881 00000 n
+0000298925 00000 n
+0000298973 00000 n
+0000299017 00000 n
+0000299065 00000 n
+0000299109 00000 n
+0000299157 00000 n
+0000299201 00000 n
+0000299249 00000 n
+0000299293 00000 n
+698 6 
0000299337 00000 n
+0000299381 00000 n
+0000299425 00000 n
+0000299469 00000 n
+0000299513 00000 n
+0000299557 00000 n
+708 9 
0000299601 00000 n
+0000299686 00000 n
+0000299764 00000 n
+0000299849 00000 n
+0000299930 00000 n
+0000300021 00000 n
+0000300099 00000 n
+0000300177 00000 n
+0000300252 00000 n
+718 1 
0000300328 00000 n
+781 3 
0000300398 00000 n
+0000300705 00000 n
+0000300824 00000 n
+1463 1 
0000300913 00000 n
+1492 14 
0000301071 00000 n
+0000301133 00000 n
+0000301195 00000 n
+0000301216 00000 n
+0000301237 00000 n
+0000301258 00000 n
+0000301279 00000 n
+0000301300 00000 n
+0000301321 00000 n
+0000301342 00000 n
+0000301363 00000 n
+0000301384 00000 n
+0000301405 00000 n
+0000301426 00000 n
+trailer
<<
/Size 1506
/Info 446 0 R 
/Root 553 0 R 
/Prev 284949 
/ID[<55bc04fb77f364292aaad31d1ab19522><6686af3afff68817419d22a0316779b7>]
>>
startxref
301447
%%EOF
\ No newline at end of file
diff --git a/tools/pete-2.1.1/html/PeteOps.html 
b/tools/pete-2.1.1/html/PeteOps.html
new file mode 100644
index 0000000..1b9055e
--- /dev/null
+++ b/tools/pete-2.1.1/html/PeteOps.html
@@ -0,0 +1,255 @@
+<!-- introduction.html : introduction to PETE tutorials -->
+<!-- $Id: PeteOps.html,v 1.1 1999/01/09 00:53:05 sa_smith Exp $ -->
+
+<html>
+  <head>
+    <title>PeteOps.in</title>
+  </head>
+
+  <body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+    <h1>PeteOps.in</h1>
+    <pre>
+unaryOps
+-----
+  TAG = "FnArcCos"
+  FUNCTION = "acos"
+  EXPR = "(acos(a))"
+-----
+  TAG = "FnArcSin"
+  FUNCTION = "asin"
+  EXPR = "(asin(a))"
+-----
+  TAG = "FnArcTan"
+  FUNCTION = "atan"
+  EXPR = "(atan(a))"
+-----
+  TAG = "FnCeil"
+  FUNCTION = "ceil"
+  EXPR = "(ceil(a))"
+-----
+  TAG = "FnCos"
+  FUNCTION = "cos"
+  EXPR = "(cos(a))"
+-----
+  TAG = "FnHypCos"
+  FUNCTION = "cosh"
+  EXPR = "(cosh(a))"
+-----
+  TAG = "FnExp"
+  FUNCTION = "exp"
+  EXPR = "(exp(a))"
+-----
+  TAG = "FnFabs"
+  FUNCTION = "fabs"
+  EXPR = "(fabs(a))"
+-----
+  TAG = "FnFloor"
+  FUNCTION = "floor"
+  EXPR = "(floor(a))"
+-----
+  TAG = "FnLog"
+  FUNCTION = "log"
+  EXPR = "(log(a))"
+-----
+  TAG = "FnLog10"
+  FUNCTION = "log10"
+  EXPR = "(log10(a))"
+-----
+  TAG = "FnSin"
+  FUNCTION = "sin"
+  EXPR = "(sin(a))"
+-----
+  TAG = "FnHypSin"
+  FUNCTION = "sinh"
+  EXPR = "(sinh(a))"
+-----
+  TAG = "FnSqrt"
+  FUNCTION = "sqrt"
+  EXPR = "(sqrt(a))"
+-----
+  TAG = "FnTan"
+  FUNCTION = "tan"
+  EXPR = "(tan(a))"
+-----
+  TAG = "FnHypTan"
+  FUNCTION = "tanh"
+  EXPR = "(tanh(a))"
+-----
+  TAG = "OpUnaryMinus"
+  FUNCTION = "operator-"
+  EXPR = "(-a)"
+-----
+  TAG = "OpUnaryPlus"
+  FUNCTION = "operator+"
+  EXPR = "(+a)"
+-----
+  TAG = "OpBitwiseNot"
+  FUNCTION = "operator~"
+  EXPR = "(~a)"
+-----
+  TAG = "OpIdentity"
+  FUNCTION = "PETE_identity"
+  EXPR = "(a)"
+
+unaryBoolOps
+-----
+  TAG = "OpNot"
+  FUNCTION = "operator!"
+  EXPR = "(!a)"
+
+unaryCastOps
+-----
+  TAG = "OpCast"
+  FUNCTION = "peteCast"
+  EXPR = "T1(a)"
+
+binaryOps
+-----
+  TAG = "OpAdd"
+  FUNCTION = "operator+"
+  EXPR = "(a + b)"
+-----
+  TAG = "OpSubtract"
+  FUNCTION = "operator-"
+  EXPR = "(a - b)"
+-----
+  TAG = "OpMultiply"
+  FUNCTION = "operator*"
+  EXPR = "(a * b)"
+-----
+  TAG = "OpDivide"
+  FUNCTION = "operator/"
+  EXPR = "(a / b)"
+-----
+  TAG = "OpMod"
+  FUNCTION = "operator%"
+  EXPR = "(a % b)"
+-----
+  TAG = "OpBitwiseAnd"
+  FUNCTION = "operator&"
+  EXPR = "(a & b)"
+-----
+  TAG = "OpBitwiseOr"
+  FUNCTION = "operator|"
+  EXPR = "(a | b)"
+-----
+  TAG = "OpBitwiseXor"
+  FUNCTION = "operator^"
+  EXPR = "(a ^ b)"
+-----
+  TAG = "FnLdexp"
+  FUNCTION = "ldexp"
+  EXPR = "(ldexp(a,b))"
+-----
+  TAG = "FnPow"
+  FUNCTION = "pow"
+  EXPR = "(pow(a,b))"
+-----
+  TAG = "FnFmod"
+  FUNCTION = "fmod"
+  EXPR = "(fmod(a,b))"
+-----
+  TAG = "FnArcTan2"
+  FUNCTION = "atan2"
+  EXPR = "(atan2(a,b))"
+
+binaryBoolOps
+-----
+  TAG = "OpLT"
+  FUNCTION = "operator&lt;"
+  EXPR = "(a &lt; b)"
+-----
+  TAG = "OpLE"
+  FUNCTION = "operator&lt;="
+  EXPR = "(a &lt;= b)"
+-----
+  TAG = "OpGT"
+  FUNCTION = "operator&gt;"
+  EXPR = "(a &gt; b)"
+-----
+  TAG = "OpGE"
+  FUNCTION = "operator&gt;="
+  EXPR = "(a &gt;= b)"
+-----
+  TAG = "OpEQ"
+  FUNCTION = "operator=="
+  EXPR = "(a == b)"
+-----
+  TAG = "OpNE"
+  FUNCTION = "operator!="
+  EXPR = "(a != b)"
+-----
+  TAG = "OpAnd"
+  FUNCTION = "operator&&"
+  EXPR = "(a && b)"
+-----
+  TAG = "OpOr"
+  FUNCTION = "operator||"
+  EXPR = "(a || b)"
+
+binaryLeftOps
+-----
+  TAG = "OpLeftShift"
+  FUNCTION = "operator&lt;&lt;"
+  EXPR = "(a &lt;&lt; b)"
+-----
+  TAG = "OpRightShift"
+  FUNCTION = "operator&gt;&gt;"
+  EXPR = "(a &gt;&gt; b)"
+
+assignOp
+-----
+  TAG = "OpAssign"
+  FUNCTION = "assign"
+  EXPR = "(a = b)"
+
+binaryAssignOps
+-----
+  TAG = "OpAddAssign"
+  FUNCTION = "operator+="
+  EXPR = "(a += b)"
+-----
+  TAG = "OpSubtractAssign"
+  FUNCTION = "operator-="
+  EXPR = "(a -= b)"
+-----
+  TAG = "OpMultiplyAssign"
+  FUNCTION = "operator*="
+  EXPR = "(a *= b)"
+-----
+  TAG = "OpDivideAssign"
+  FUNCTION = "operator/="
+  EXPR = "(a /= b)"
+-----
+  TAG = "OpModAssign"
+  FUNCTION = "operator%="
+  EXPR = "(a %= b)"
+-----
+  TAG = "OpBitwiseOrAssign"
+  FUNCTION = "operator|="
+  EXPR = "(a |= b)"
+-----
+  TAG = "OpBitwiseAndAssign"
+  FUNCTION = "operator&="
+  EXPR = "(a &= b)"
+-----
+  TAG = "OpBitwiseXorAssign"
+  FUNCTION = "operator^="
+  EXPR = "(a ^= b)"
+-----
+  TAG = "OpLeftShiftAssign"
+  FUNCTION = "operator&lt;&lt;="
+  EXPR = "(a &lt;&lt;= b)"
+-----
+  TAG = "OpRightShiftAssign"
+  FUNCTION = "operator&gt;&gt;="
+  EXPR = "(a &gt;&gt;= b)"
+
+trinaryOps
+-----
+  TAG = "FnWhere"
+  FUNCTION = "where"
+  EXPR = "(a ? b : c)"
+    </pre>
+  </body>
+</html>
diff --git a/tools/pete-2.1.1/html/background.html 
b/tools/pete-2.1.1/html/background.html
new file mode 100644
index 0000000..75bb216
--- /dev/null
+++ b/tools/pete-2.1.1/html/background.html
@@ -0,0 +1,779 @@
+<!-- background.html : preparatory material for PETE tutorials -->
+<!-- $Id: background.html,v 1.9 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorials: Background and Terminology</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorials<br>Background and Terminology</h1></center>
+
+<p><b>Contents:</b>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#templates">Templates</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#parsetrees">Representing Parse Trees</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#lookahead">Looking Ahead</a>
+
+<a name="intro"><h2>Introduction</h2></a>
+
+<p>Object-oriented languages like C++ make development easier, but
+performance tuning harder.  The same abstractions that allow
+programmers to express their ideas compactly also make it hard for
+compilers to re-order operations, predict how many times a loop will
+be executed, or re-use memory instead of copying values.
+
+<p>For example, suppose that a program uses a <tt>Vector</tt>
+class to represent vectors of floating-point values:
+
+<blockquote><pre>
+class Vector
+{
+  public :
+    Vector();                           // <em>default constructor</em>
+
+    Vector(                             // <em>value constructor</em>
+        int size,                       // <em>..size of vector</em>
+        float val                       // <em>..initial element value</em>
+    );
+
+    Vector(                             // <em>copy constructor</em>
+        const Vector &amp; v                // <em>..what to copy</em>
+    );
+
+    virtual ~Vector();                  // <em>clean up</em>
+
+    float getAt(                        // <em>get an element</em>
+        int index                       // <em>..which element to get</em>
+    ) const;
+
+    void setAt(                         // <em>change an element</em>
+        int index,                      // <em>..which element to set</em>
+        float val                       // <em>..new value for element</em>
+    );
+
+    Vector operator+(                   // <em>add, creating a new vector</em>
+        const Vector &amp; right            // <em>..thing being added</em>
+    );
+
+    Vector operator*(                   // <em>multiply (create result)</em>
+        const Vector &amp; right            // <em>..thing being 
multiplied</em>
+    );
+
+    Vector &amp; operator=(                 // <em>assign, returning 
target</em>
+        const Vector &amp; right            // <em>..source</em>
+    );
+
+  protected :
+    int len_;                           // <em>current length</em>
+    float * val_;                       // <em>current values</em>
+};
+</pre></blockquote>
+
+<p>Consider what happens when the following statement is executed:
+
+<blockquote><pre>
+Vector x, a, b, c;
+// <em>variable initialization omitted</em>
+x = a + b * c;
+</pre></blockquote>
+
+<p><tt>b*c</tt> creates a new <tt>Vector</tt>, and fills it with
+the elementwise product of <tt>b</tt> and <tt>c</tt> by looping over
+the values that those two vectors encapsulate.  The call to the
+addition operator creates another temporary, and executes another loop
+to fill it.  Finally, the call to the assignment operator doesn't
+create a third temporary, but it does execute a third loop.  Thus,
+this simple statement is equivalent to:
+
+<blockquote><a name="inefficient-loops"><pre>
+Vector x, a, b, c;
+
+// <em>...initialization...</em>
+
+Vector temp_1;
+for (int i=0; i&lt;<em>vectorLength</em>; ++i)
+{
+    temp_1.setAt(i, b.getAt(i) * c.getAt(i));
+}
+
+Vector temp_2;
+for (int i=0; i&lt;<em>vectorLength</em>; ++i)
+{
+    temp_2.setAt(i, a.getAt(i) + temp_1.getAt(i));
+}
+
+for (int i=0; i&lt;<em>vectorLength</em>; ++i)
+{
+    x.setAt(i, temp_2.getAt(i));
+}
+</pre></blockquote>
+
+<p>Clearly, if this program was written in C instead of C++, the three
+loops would have been combined, and the two temporary vectors
+eliminated:
+
+<blockquote><pre>
+Vector x, a, b, c;
+// <em>...initialization...</em>
+for (int i=0; i&lt;<em>vectorLength</em>; ++i)
+{
+    x.setAt(i, a.getAt(i) + b.getAt(i) * c.getAt(i));
+}
+</pre></blockquote>
+
+<p>The optimizations required to turn the three-loop version of this
+code into its single-loop equivalent are beyond the capabilities of
+existing commercial compilers.  Because operations may involve
+aliasing---i.e., because an expression like <tt>x=a+b*c</tt> can
+assign to a vector while also reading from it---optimizers must err on
+the side of caution, and neither eliminate temporaries nor fuse loops.
+This has led many programmers to believe that C++ is intrinsically
+less efficient than C or Fortran&nbsp;77.
+
+<p>Luckily, this conclusion is wrong.  By using templates in a
+highly-structured way, PETE exposes opportunities for optimization to
+compilers without sacrificing readability or portability.  The result
+is that modern C++ compilers can deliver the same performance for
+PETE-based programs as C or Fortran compilers do for equivalent
+programs written in those lower-level languages.
+
+<p>In order to understand how and why PETE does what it does, it is
+necessary to understand what C++ <a href="#templates">templates</a>
+are, and how PETE (and similar libraries) use templates to encode <a
+href="#parsetrees">parse trees</a>.
+
+<a name="templates"><h2>Templates</h2></a>
+
+<p>Templates were a late addition to C++, but they have increased the
+power of the language significantly.  One way to look at templates is
+as an improvement over macros.  Suppose that you wanted to create a
+set of classes to store pairs of <tt>int</tt>s, pairs of
+<tt>float</tt>s, and so on.  Without templates, you might define a
+macro:
+
+<blockquote><pre>
+#define DECLARE_PAIR_CLASS(name_, type_)                            \
+class name_                                                         \
+{                                                                   \
+  public :                                                          \
+    name_();                            // <em>default constructor      \</em>
+    name_(type_ left, type_ right);     // <em>value constructor        \</em>
+    name_(const name_ &amp; right);         // <em>copy constructor         
\</em>
+    virtual ~name_();                   // <em>destructor               \</em>
+    type_ &amp; left();                     // <em>access left element      
\</em>
+    type_ &amp; right();                    // <em>access right element     
\</em>
+                                                                    \
+  protected :                                                       \
+    type_ left_, right_;                // <em>value storage            \</em>
+};
+</pre></blockquote>
+
+<p>then use it to create each class in turn:
+
+<blockquote><pre>
+DECLARE_PAIR_CLASS(IntPair, int)
+DECLARE_PAIR_CLASS(FloatPair, float)
+</pre></blockquote>
+
+<p>A better way to do this is to declare a template class:
+
+<blockquote><pre>
+template&lt;class DataType&gt;
+class Pair
+{
+  public :
+    Pair();                             // <em>default constructor</em>
+    Pair(DataType left,                 // <em>value constructor</em>
+         DataType right);
+    Pair(const Pair&lt;DataType&gt; &amp; right);           // <em>copy 
constructor</em>
+    virtual ~Pair();                    // <em>destructor</em>
+    DataType &amp; left();                  // <em>access left element</em>
+    DataType &amp; right();                 // <em>access right element</em>
+
+  protected :
+    DataType left_, right_;             // <em>value storage</em>
+};
+</pre></blockquote>
+
+<p>The keyword <tt>template</tt> tells the compiler that the class
+cannot be compiled right away, since it depends on an as-yet-unknown
+data type.  When the declarations:
+
+<blockquote><pre>
+Pair&lt;int&gt;   pairOfInts;
+Pair&lt;float&gt; pairOfFloats;
+</pre></blockquote>
+
+<p>are seen, the compiler instantiates <tt>Pair&lt;&gt;</tt> once for
+each underlying data type.  This happens automatically: the programmer
+does <em>not</em> have to create the actual pair classes explicitly by
+saying:
+
+<blockquote><pre>
+typedef Pair&lt;int&gt; IntPair;              // <em>incorrect!</em>
+IntPair pairOfInts;
+</pre></blockquote>
+
+<p>Templates can also be used to define generic functions, as in:
+
+<blockquote><pre>
+template&lt;class DataType&gt;
+void swap(DataType &amp; left, DataType &amp; right)
+{
+    DataType tmp(left);
+    left  = right;
+    right = tmp;
+}
+</pre></blockquote>
+
+<p>Once again, this function can be called with two objects of any
+matching type, without any further work on the programmer's part:
+
+<blockquote><pre>
+int   i, j;
+swap(i, j);
+
+Shape back, front;
+swap(back, front);
+</pre></blockquote>
+
+<p>Note that the implementation of <tt>swap()</tt> depends on the
+actual data type of its arguments having both a copy constructor (so
+that <tt>tmp</tt> can be initialized with the value of <tt>left</tt>)
+and an assignment operator (so that <tt>left</tt> and <tt>right</tt>
+can be overwritten).  If the actual data type does not provide either
+of these, the compiler will report an error.
+
+<p>Note also that <tt>swap()</tt> can be made more flexible by not
+requiring the two objects to have exactly the same type.  The
+following re-definition of <tt>swap()</tt> will exchange the values of
+any two objects, provided appropriate assignment and conversion
+operators exist:
+
+<blockquote><pre>
+template&lt;class LeftType, class RightType&gt;
+void swap(LeftType &amp; left, RightType &amp; right)
+{
+    LeftType tmp(left);
+    left  = right;
+    right = tmp;
+}
+</pre></blockquote>
+
+<p>Finally, the word <tt>class</tt> appears in template definitions
+because other values, such as integers, can also be used.  The code
+below defines a small fixed-size vector class, but does not fix either
+its size or underlying data type:
+
+<blockquote><pre>
+template&lt;class DataType, int FixedSize&gt;
+class FixedVector
+{
+  public :
+    FixedVector();                      // <em>default constructor</em>
+    FixedVector(DataType filler);       // <em>value constructor</em>
+    virtual ~FixedVector();             // <em>destructor</em>
+
+    FixedVector(                        // <em>copy constructor</em>
+        FixedVector&lt;DataType, FixedSize&gt; right
+    );
+
+    FixedVector&lt;DataType&gt;               // <em>assignment</em>
+    operator=(
+        const FixedVector&lt;DataType, FixedSize&gt; &amp; right
+    );
+
+    DataType &amp; operator[](int index);   // <em>element access</em>
+
+  protected :
+    DataType storage[FixedSize];        // <em>fixed-size storage</em>
+};
+</pre></blockquote>
+
+<p>It is at this point that the possible <a
+name="performance-advantages">performance advantages</a> of templated
+classes start to become apparent.  Suppose that the copy constructor
+for this class is implemented as follows:
+
+<blockquote><pre>
+template&lt;class DataType, int FixedSize&gt;
+FixedVector::FixedVector(
+    FixedVector&lt;DataType, FixedSize&gt; right
+){
+    for (int i=0; i&lt;FixedSize; ++i)
+    {
+        storage[i] = right.storage[i];
+    }
+}
+</pre></blockquote>
+
+<p>When the compiler sees a use of the copy constructor, such as:
+
+<blockquote><pre>
+FixedVector&lt;DataType, FixedSize&gt; first;
+// <em>initialization of first vector omitted</em>
+FixedVector&lt;DataType, FixedSize&gt; second(first);
+</pre></blockquote>
+
+<p>it knows the size as well as the underlying data type of the
+objects being manipulated, and can therefore do more optimization than
+it could if the size was variable.
+
+<p>Automatic instantiation of templates is convenient and powerful,
+but does have one drawback.  Suppose the <tt>Pair&lt;&gt;</tt> class
+shown earlier is instantiated in one source file to create a pair of
+<tt>int</tt>s, and in another source file to create a pair of
+<tt>Shape</tt>s.  The compiler and linker could:
+
+<ol>
+
+<li>treat the two instantiations as completely separate classes;
+
+<li>detect and eliminate redundant instantiations; or
+
+<li>avoid redundancy by not instantiating templates until the program as
+a whole was being linked.
+
+</ol>
+
+<p>The first of these can lead to very large programs, as a
+commonly-used template class may be expanded dozens of times.  The
+second is difficult to do, as it involves patching up compiled files
+as they are being linked.  Most recent versions of C++ compilers are
+therefore taking the third approach, but POOMA&nbsp;II users should be
+aware that older versions might still produce much larger executables
+than one would expect.
+
+<p>The last use of templates that is important to this discussion is
+template methods.  Just as templated functions are instantiated for
+different types of arguments, so too are templated methods
+instantiated for a class when and as they are used.  Suppose a class
+called <tt>Example</tt> is defined as follows:
+
+<blockquote><pre>
+class Example
+{
+  public :
+    Example();                          // <em>default constructor</em>
+    virtual ~Example();                 // <em>destructor</em>
+
+    template&lt;class T&gt;
+    void foo(T object)
+    {
+        // <em>some operation on object</em>
+    }
+};
+</pre></blockquote>
+
+<p>Whenever the method <tt>Example::foo()</tt> is called with an
+object of a particular type, the compiler instantiates it for that
+type.  Thus, both of the following calls are legal:
+
+<blockquote><pre>
+Example e;
+Shape box;
+e.foo(5);                               // <em>instantiate for int</em>
+e.foo(box);                             // <em>instantiate for Shape</em>
+</pre></blockquote>
+
+<a name="parsetrees"><h2>Representing Parse Trees</h2></a>
+
+<p>Parse trees are commonly used by compilers to store the essential
+features of the source of a program.  The leaf nodes of a parse tree
+consist of atomic symbols in the language, such as variable names or
+numerical constants.  The parse tree's intermediate nodes represent
+ways of combining those values, such as arithmetic operators and
+<tt>while</tt> loops.  For example, the expression <tt>-B + 2 * C</tt>
+could be represented by the parse tree shown in <a
+href="#fig-simple-parse-tree">Figure&nbsp;1</a>
+
+<center><table>
+<tr><td align=center><img src="tree.gif"></td></tr>
+<tr><td align=center>Figure 1: A Simple Parse Tree</td></tr>
+</table></center>
+
+<p>Parse trees are often represented textually using prefix notation,
+in which the non-terminal combiner and its arguments are strung
+together in a parenthesized list.  For example, the expression
+<tt>-B + 2 * C</tt> can be represented as
+<tt>(+&nbsp;(-&nbsp;B)&nbsp;(*&nbsp;2&nbsp;C))</tt>.
+
+<p>What makes all of this relevant to high-performance computing is
+that the expression <tt>(+&nbsp;(-&nbsp;B)&nbsp;(*&nbsp;2&nbsp;C))</tt> could
+equally easily be written
+<tt>BinaryOp&lt;Add,&nbsp;UnaryOp&lt;Minus,&nbsp;B&gt;,&nbsp;BinaryOp&lt;Multiply,&nbsp;Scalar&lt;2&gt;,&nbsp;C&gt;&gt;</tt>:
+it's just a different notation.  However, this notation is very
+similar to the syntax of C++ templates --- so similar, in fact, that
+it can actually be implemented given a careful enough set of template
+definitions.  As discussed <a
+href="#performance-advantages">earlier</a>, by providing more
+information to the optimizer as programs are being compiled, template
+libraries can increase the scope for performance optimization.
+
+<p>Any facility for representing expressions as trees must provide:
+
+<ul>
+
+<li>a representation for leaf nodes (operands);
+
+<li>a way to represent operations to be performed at the leaves
+(i.e. functions on individual operands);
+
+<li>a representation for non-leaf nodes (operators);
+
+<li>a way to represent operations to be performed at non-leaf nodes
+(i.e. combiners);
+
+<li>a way to pass information (such as the function to be performed at
+the leaves) downward in the tree; and
+
+<li>a way to collect and combine information moving up the tree.
+
+</ul>
+
+<p>C++ templates were not designed with these requirements in mind,
+but it turns out that they can satisfy them.  The central idea is to
+use the compiler's representation of type information in an
+instantiated template to store operands and operators.  For example,
+suppose that a set of classes have been defined to represent the basic
+arithmetic operations:
+
+<blockquote><pre>
+struct AddOp
+{
+    static inline double apply(const double &amp; left, const double &amp; y)
+    {
+        return x + y;
+    }
+};
+
+struct MulOp
+{
+    static inline double apply(const double &amp; left, const double &amp; y)
+    {
+        return x * y;
+    }
+};
+
+// <em>...and so on...</em>
+</pre></blockquote>
+
+<p>Note the use of the keyword <tt>struct</tt>; this simply signals
+that everything else in these classes---in particular, their
+default constructors and their destructors---are <tt>public</tt>.
+
+<p>Now suppose that a templated class <tt>BinaryOp&lt;&gt;</tt> has
+been defined as follows:
+
+<blockquote><pre>
+template&lt;class Operator, class RHS&gt;
+class BinaryOp
+{
+  public :
+    // <em>empty constructor will be optimized away, but triggers</em>
+    // <em>type identification needed for template expansion</em>
+    BinaryOp(
+        Operator op,
+        const Vector &amp; leftArg,
+        const RHS    &amp; rightArg
+    ) : left_(leftArg),
+        right_(rightArg)
+    {}
+
+    // <em>empty destructor will be optimized away</em>
+    ~BinaryOp()
+    {}
+
+    // <em>calculate value of expression at specified index by recursing</em>
+    inline double apply(int i)
+    {
+        return Operator::apply(leftArg.apply(i), rightArg.apply(i));
+    }
+
+  protected :
+    const Vector &amp; left_;
+    const RHS    &amp; right_;
+};
+</pre></blockquote>
+
+<p>If <tt>b</tt> and <tt>c</tt> have been defined as <tt>Vector</tt>,
+and if <tt>Vector::apply()</tt> returns the vector element at the
+specified index, then when the compiler sees the following expression:
+
+<blockquote><pre>
+BinaryOp&lt;MulOp, Vector, Vector&gt;(MulOp(), b, c).apply(3)
+</pre></blockquote>
+
+<p>it translates the expression into
+<tt>b.apply(3)&nbsp;*&nbsp;c.apply(3)</tt>.  The creation of the
+intermediate instance of <tt>BinaryOp&lt;&gt;</tt> is optimized away
+completely, since all that object does is record a couple of
+references to arguments.
+
+<p>Why to go all this trouble?  The answer is rather long, and
+requires a few seemingly-pointless steps.  Consider what happens when
+the complicated expression above is nested inside an even more
+complicated expression, which adds an element of another vector
+<tt>a</tt> to the original expression's result:
+
+<blockquote><pre>
+BinaryOp&lt; AddOp,
+          Vector,
+          BinaryOp&lt; MulOp, Vector, Vector &gt;
+        &gt;(a, BinaryOp&lt; MulOp, Vector, Vector &gt;(b, c)).apply(3);
+</pre></blockquote>
+
+<p>This expression calculates
+<tt>a.apply(3)&nbsp;+&nbsp;(b.apply(3)&nbsp;*c.apply(3))</tt>.  If the
+expression was wrapped in a <tt>for</tt> loop, and the loop's index
+was used in place of the constant <tt>3</tt>, the expression would
+calculate an entire vector's worth of new values:
+
+<blockquote><pre>
+BinaryOp&lt; AddOp,
+          Vector,
+          BinaryOp&lt; MulOp, Vector, Vector &gt; &gt;
+        expr(a, BinaryOp&lt; MulOp, Vector, Vector &gt;(b, c));
+for (int i=0; i<<em>vectorLength</em>; ++i)
+{
+  double tmp = expr.apply(i);
+}
+</pre></blockquote>
+
+<p>The possible nesting of <tt>BinaryOp&lt;&gt;</tt> inside itself is
+the reason that the <tt>BinaryOp&lt;&gt;</tt> template has two type
+parameters.  The first argument to a <tt>BinaryOp&lt;&gt;</tt> is
+always a <tt>Vector</tt>, but the second may be either a
+<tt>Vector</tt> or an expression involving <tt>Vector</tt>s.
+
+<p>The code above is not something any reasonable person would want to
+write.  However, having a compiler create this loop and its contained
+expression automatically is entirely plausible.  The first step is to
+overload addition and multiplication for vectors, so that
+<tt>operator+(Vector,Vector)</tt> (and
+<tt>operator*(Vector,Vector)</tt>) instantiates
+<tt>BinaryOp&lt;&gt;</tt> with <tt>AddOp</tt> (and <tt>MulOp</tt>) as
+its first type argument, and invokes the <tt>apply()</tt> method of
+the instantiated object.  The second step is to overload the
+assignment operator <tt>operator=(Vector,Vector)</tt> so that it
+generates the loop shown above:
+
+<blockquote><pre>
+template&lt;class Op, T&gt;
+Vector &amp operator=(
+    Vector &amp; target,
+    BinaryOp&lt;Op&gt; &amp; expr
+){
+    for (int i=0; i&lt;<em>vectorLength</em>; ++i)
+    {
+        target.set(i, expr.apply(i));
+    }
+    return target;
+}
+</pre></blockquote>
+
+<p>With these operator definitions in play, the simple expression:
+
+<blockquote><pre>
+Vector x, a, b, c;
+// <em>...initialization...</em>
+x = a + b * c;
+</pre></blockquote>
+
+<p>is automatically translated into the efficient loop shown above,
+rather than into the <a href="#inefficient-loops">inefficient
+loops</a> shown earlier.  The expression on the right hand side is
+turned into an instance of a templated class whose type encodes the
+operations to be performed, while the implementation of the assignment
+operator causes that expression to be evaluated exactly once for each
+legal index.  No temporaries are created, and only a single loop is
+executed.
+
+<a name="lookahead"><h2>Looking Ahead</h2></a>
+
+<p>Of course, an industrial-strength implementation of these ideas
+requires definitions that are considerably more complicated than the
+ones shown in the previous section.  For a start,
+<tt>BinaryOp&lt;&gt;</tt> and its kin are not defined directly on any
+one class <tt>Vector</tt>.  It isn't even defined for
+<tt>Vector&lt;T&gt;</tt>, but rather for a wrapper class
+<em>UNDONE</em>.  This class expects nothing from its contained class
+except an <tt>apply</tt> method capable of turning an index into a
+value.  This allows users to integrate their own classes with PETE
+simply by providing the required method.  Similarly, the classes that
+PETE defines to represent unary and binary operators are considerably
+more flexible than the ones shown above.
+
+<p>One of the idioms used by PETE that hasn't been shown above is the
+<em>tag class</em>.  A tag class has no methods, and contains no data;
+its only reason for existing is as a flag to the C++ compiler during
+template expansion.  A mutually exclusive set of tag classes is
+therefore the compile-time equivalent of an enumeration.  PETE uses
+tag classes to identify operators, the way in which operands are
+referenced (i.e. directly or through iterators and other
+intermediators), and so on.
+
+<p>Another idiom used in PETE is the traits class, which depends on a
+feature of ANSI C++ called partial specialization.  When a C++
+compiler instantiates a template, it tries to choose the best possible
+match for the arguments it is given.  For example, suppose that both
+of the following definitions are in scope when the objects
+<tt>fred</tt> and <tt>jane</tt> are created:
+
+<blockquote><pre>
+template&lt;class T&gt;
+class Example
+{
+    enum { tag = 123; }
+};
+
+template&lt;&gt;
+class Example&lt;int&gt;
+{
+    enum { tag = 456; }
+};
+
+Example&lt;int&gt;   fred;
+Example&lt;float&gt; jane;
+</pre></blockquote>
+
+<p>As you would expect, <tt>fred</tt>'s <tt>tag</tt> has the value
+456, while <tt>jane</tt>'s has the generic value 123: the compiler
+chooses the most specific type possible.
+
+<p>This facility can be used to create lookup tables.  For example,
+suppose we want to encode the types of the results of arithmetic
+operations involving an arbitrary mix of <tt>int</tt> and
+<tt>double</tt> arguments.  The following definitions do the trick:
+
+<blockquote><pre>
+// <em>generic case</em>
+template&lt;class Left, class Right&gt;
+class TypeEncoding
+{
+    // <em>empty: no generic result possible</em>
+};
+
+// <em>int op int => int</em>
+template&lt;&gt;
+class TypeEncoding&lt;int, int&gt;
+{
+    typedef int Result_t;
+};
+
+// <em>int op double => double</em>
+template&lt;&gt;
+class TypeEncoding&lt;int, double&gt;
+{
+    typedef double Result_t;
+};
+
+// <em>double op int => double</em>
+template&lt;&gt;
+class TypeEncoding&lt;double, int&gt;
+{
+    typedef double Result_t;
+};
+
+// <em>double op double => double</em>
+template&lt;&gt;
+class TypeEncoding&lt;double, double&gt;
+{
+    typedef double Result_t;
+};
+</pre></blockquote>
+
+<p>We can now overcome one of the biggest shortcomings of C++
+templates, and automatically generate the correct result type of a
+templated expression:
+
+<blockquote><pre>
+template&lt;class Left, class Right&gt;
+TypeEncoding&lt;Left, Right&gt;::Result_t
+add(const Left &amp; left, const Right &amp; right)
+{
+    return left + right;
+}
+</pre></blockquote>
+
+<p>If <tt>add()</tt> is called with two <tt>int</tt> arguments, the
+compiler will know that that particular instantiation is going to
+return an <tt>int</tt>.  If it is called with one or two
+<tt>double</tt> arguments, the compiler will know it is going to
+return a <tt>double</tt>.  By specializing
+<tt>TypeEncoding&lt;&gt;</tt> for other mixes of types, a library like
+PETE can tell the compiler the result type of any expression over any
+mix of types.  In particular, if a new class such as <tt>Complex</tt>,
+<tt>Quaternion</tt>, or <tt>Color</tt> is added, the compiler can be
+told what the result of (for example) multiplying a <tt>Color</tt> by
+a <tt>float</tt> is, without anything else in the library having to be
+changed.
+
+<p><tt>TypeEncoding&lt;&gt;</tt> is an example of a traits class.
+Each specialization of the class defines a <tt>typedef</tt> with a
+particular name (in this case, <tt>Result_t</tt>).  The class designer
+could also specify that <tt>TypeEncoding&lt;&gt;</tt>'s
+specializations had to define such things as constant strings:
+
+<blockquote><pre>
+// <em>int op double => double</em>
+template&lt;&gt;
+class TypeEncoding&lt;int, double&gt;
+{
+    typedef double Result_t;
+
+    static const char * const Signature = "{int,double}=>double";
+};
+
+// <em>other classes contain similar definitions</em>
+</pre></blockquote>
+
+<p>to help programs print debugging information:
+
+<blockquote><pre>
+template&lt;class Left, class Right&gt;
+TypeEncoding&lt;Left, Right&gt;::Result_t
+add(const Left &amp; left, const Right &amp; right)
+{
+    cout &lt;&lt; TypeEncoding&lt;Left, Right&gt;::Signature &lt;&lt; endl;
+    return left + right;
+}
+</pre></blockquote>
+
+<p>In general, if the classes in the set associated with a trait all
+adhere to some conventions regarding name definitions, then traits
+classes can be used to implement compile-time polymorphism.  Another
+way to think of this is that each class in a set of traits classes
+provides different set of answers to a pre-defined set of questions.
+
+<p>Since writing a dozen or more specializations of classes like
+<tt>TypeEncoding&lt;&gt;</tt> and <tt>BinaryOp&lt;&gt;</tt> by hand
+would be tedious, time-consuming, and error-prone, PETE provides some
+simple command-line tools that can generate the required C++ code
+automatically.  The <a href="tut-1.html">first tutorial</a> shows how
+to use these tools to integrate a simple 3-element vector class into
+PETE.  Subsequent tutorials show the steps required to integrate more
+complex classes, such as the vectors and lists of the <a
+href="stl.html">Standard Template Library</a> (STL), and how to
+provide additional operators and combiners.
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="introduction.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       <td><a href="tut-1.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/banner.gif b/tools/pete-2.1.1/html/banner.gif
new file mode 100644
index 0000000..bf45afd
Binary files /dev/null and b/tools/pete-2.1.1/html/banner.gif differ
diff --git a/tools/pete-2.1.1/html/builtin.html 
b/tools/pete-2.1.1/html/builtin.html
new file mode 100644
index 0000000..dd3c89a
--- /dev/null
+++ b/tools/pete-2.1.1/html/builtin.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>PETE Built-In Operators</title>
+  </head>
+  <BODY BGCOLOR="#ffffff">
+
+  <body>
+    <h1>PETE Built-In Operators</h1>
+
+    <h2>Unary operators</h2>
+    <ul>
+      <li><TT>operator+()</TT></li>
+      <li><TT>operator-()</TT></li>
+      <li><TT>operator~()</TT></li>
+      <li><TT>operator!()</TT></li>
+      <li><TT>acos()</TT></li>
+      <li><TT>asin()</TT></li>
+      <li><TT>atan()</TT></li>
+      <li><TT>ceil()</TT></li>
+      <li><TT>cos()</TT></li>
+      <li><TT>cosh()</TT></li>
+      <li><TT>exp()</TT></li>
+      <li><TT>fabs()</TT></li>
+      <li><TT>floor()</TT></li>
+      <li><TT>log()</TT></li>
+      <li><TT>log10()</TT></li>
+      <li><TT>sin()</TT></li>
+      <li><TT>sinh()</TT></li>
+      <li><TT>sqrt()</TT></li>
+      <li><TT>tan()</TT></li>
+      <li><TT>tanh()</TT></li>
+      <li><TT>PETE_identity()</TT></li>
+      <li><TT>peteCast()</TT></li>
+    </ul>
+    <h2>Binary Operators</h2>
+    <ul>
+      <li><TT>operator+()</TT></li>
+      <li><TT>operator-()</TT></li>
+      <li><TT>operator*()</TT></li>
+      <li><TT>operator/()</TT></li>
+      <li><TT>operator%()</TT></li>
+      <li><TT>operator&()</TT></li>
+      <li><TT>operator|()</TT></li>
+      <li><TT>operator^()</TT></li>
+      <li><TT>operator<()</TT></li>
+      <li><TT>operator>()</TT></li>
+      <li><TT>operator<=()</TT></li>
+      <li><TT>operator>=()</TT></li>
+      <li><TT>operator==()</TT></li>
+      <li><TT>operator!=()</TT></li>
+      <li><TT>operator&&()</TT></li>
+      <li><TT>operator||()</TT></li>
+      <li><TT>operator<<()</TT></li>
+      <li><TT>operator>>()</TT></li>
+      <li><TT>ldexp()</TT></li>
+      <li><TT>pow()</TT></li>
+      <li><TT>fmod()</TT></li>
+      <li><TT>atan2()</TT></li>
+    </ul>
+    <h2>Trinary Operators</h2>
+    <ul>
+      <li><TT>where()</TT></li>
+    </ul>
+  </body>
+</html>
diff --git a/tools/pete-2.1.1/html/index.html b/tools/pete-2.1.1/html/index.html
new file mode 100644
index 0000000..44ad677
--- /dev/null
+++ b/tools/pete-2.1.1/html/index.html
@@ -0,0 +1,49 @@
+<!-- index.html : entry point for PETE tutorials -->
+<!-- $Id: index.html,v 1.10 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorials</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h4>Download </i><a href="PETETutorials.pdf">PETETutorials.pdf</a><i>
+(printable/viewable PDF document containing all tutorials).</i></h4></center>
+
+<h1>PETE Tutorials</h1>
+
+<a href="introduction.html"><h2>Introduction</h2></a>
+
+<a href="background.html"><h2>Background and Terminology</h2></a>
+
+<a href="tut-1.html"><h2>Incorporating a Simple Vector Class</h2></a>
+
+<a href="tut-2.html"><h2>Integrating with the Standard Template 
Library</h2></a>
+
+<a href="tut-3.html"><h2>Synthesizing Types</h2></a>
+
+<h2>Appendices</h2>
+
+       <blockquote>
+
+       <a href="stl.html"><h3>The Standard Template Library</h3></a>
+
+       <a href="makeoperators.html"><h3>MakeOperators man page</h3></a>
+
+       <a href="legal.html"><h3>Legal Notice</h3></a>
+
+       </blockquote>
+
+<br>
+<br>
+<center>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/introduction.html 
b/tools/pete-2.1.1/html/introduction.html
new file mode 100644
index 0000000..1df925b
--- /dev/null
+++ b/tools/pete-2.1.1/html/introduction.html
@@ -0,0 +1,80 @@
+<!-- introduction.html : introduction to PETE tutorials -->
+<!-- $Id: introduction.html,v 1.7 2000/08/03 22:28:14 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorials: Introduction</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorials<br>Introduction</h1></center>
+
+<p>This document is an introduction to PETE, a library of C++ classes
+and templates for high-performance numerical computation.  PETE, which
+stands for "Portable Expression Template Engine", uses a technique
+called <em>expression templates</em> to eliminate data copying and the
+creation of temporary variables.  As a result, PETE-based programs can
+be as efficient as their C or Fortran equivalents.
+
+<p>PETE was designed and implemented by scientists working at the Los
+Alamos National Laboratory's Advanced Computing Laboratory.  These
+scientists have written and tuned large applications on almost every
+kind of microprocessor built in the last two decades.  PETE therefore
+encapsulates its authors' understanding of how to get good performance
+out of modern pipelined architectures and their multi-level memory
+hierarchies.
+
+<p>PETE is free for non-commercial use (i.e. your tax dollars have
+already paid for it).  You can read its source, extend it to handle
+platforms or problem domains that the core distribution doesn't cater
+for, or integrate it with other libraries and your current
+application, at no cost.  For more information, please see the <a
+href="legal.html">license</a> information included in the appendix.
+
+<p>Of course, nothing is perfect.  As of October 1998, some C++
+compilers still do not support the full ANSI/ISO C++ standard.  Please
+see PETE's <a href="http://www.acl.lanl.gov/pete";>support page</a> for
+a list of those that do.
+
+<p>A second compiler-related problem is that most compilers produce
+very long, and very cryptic, error messages if they encounter an error
+while expanding templated functions and classes, particularly if those
+functions and classes are nested.  Since PETE uses templates
+extensively, it is not uncommon for a single error to result in
+several pages of complaints from a compiler.  Programs that use
+templates extensively are also still sometimes slower to compile than
+programs that do not, and the executables produced by some compilers
+can be surprisingly large.
+
+<p>The body of this tutorial starts with <a href="background.html">a
+discussion</a> of the two key concepts behind PETE: C++ templates, and
+parse trees.  The tutorials that follow show how to apply PETE to
+user-defined classes, and to third-party classes such as those in the
+C++ Standard Template Library (STL). You may also wish to look at the
+<a href="http://www.acl.lanl.gov/pete";>PETE</a> web site for updates,
+bug fixes, and general discussion.
+As well, an introductory article on PETE appeared in the October 1999
+issue of Dr. Dobb's Journal.
+If you have any questions about
+PETE or its terms of use, or if you need help downloading or
+installing PETE, please mail us at <a
+href="mailto:pete-devel@lanl.gov";><tt>pete-devel@lanl.gov</tt></a>.
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="index.html">[Home]</a>
+       <td><a href="background.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/legal.html b/tools/pete-2.1.1/html/legal.html
new file mode 100644
index 0000000..21c931d
--- /dev/null
+++ b/tools/pete-2.1.1/html/legal.html
@@ -0,0 +1,54 @@
+<!-- legal.html : legal notice for PETE tutorials -->
+<!-- $Id: legal.html,v 1.8 2000/08/03 22:22:04 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorials: Legal Notice</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorials<br>Legal Notice</h1></center>
+
+<p>This software and ancillary information (herein called "SOFTWARE")
+called PETE (Portable Expression Template Engine) is made available
+under the terms described here.  The SOFTWARE has been approved for
+release with associated LA-CC Number <em>LA-CC-99-5</em>.
+
+<p>Unless otherwise indicated, this SOFTWARE has been authored by an
+employee or employees of the University of California, operator of the
+Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
+the U.S. Department of Energy.  The U.S. Government has rights to use,
+reproduce, and distribute this SOFTWARE, and to allow others to do so.
+The public may copy, distribute, prepare derivative works and publicly
+display this SOFTWARE without  charge, provided that this Notice and
+any statement of authorship are reproduced on all copies.  Neither the
+Government nor the University  makes any warranty, express or implied,
+or assumes any liability or responsibility for the use of this SOFTWARE.
+
+<p>If SOFTWARE is modified to produce derivative works, such modified
+SOFTWARE should be clearly marked, so as not to confuse it with the
+version available from LANL.
+
+<p>For more information about PETE, send e-mail to
+<a href="mailto:pete-devel@lanl.gov";>pete-devel@lanl.gov</a>,
+or visit the PETE web page at
+<a href="http://www.acl.lanl.gov/pete/";>http://www.acl.lanl.gov/pete</a>.
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="stl.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/makeoperators.html 
b/tools/pete-2.1.1/html/makeoperators.html
new file mode 100644
index 0000000..1ff5d2b
--- /dev/null
+++ b/tools/pete-2.1.1/html/makeoperators.html
@@ -0,0 +1,450 @@
+<!-- introduction.html : introduction to PETE tutorials -->
+<!-- $Id: makeoperators.html,v 1.7 2000/08/03 22:22:04 sa_smith Exp $ -->
+
+<html>
+  <head>
+    <title>PETE Tutorials: MakeOperators man page</title>
+  </head>
+  <body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+    <h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+       border="0" naturalsizeflag="3"></CENTER>
+  </h1>
+
+    <center>
+      <h1>MakeOperators</h1>
+    </center>
+
+    <h2>Name</h2>
+
+    <p>
+      <b>MakeOperators</b> - make the operator functions for a given set of 
classes
+      that return expression trees, so that PETE can be used with those 
classes.
+      Also can construct global assignment operators and operator tag structs.
+    </p>
+
+    <h2>Synopsis</h2>
+
+    <pre>
+MakeOperators [--help] [--pete-help] [--classes classfile]
+[--operators opfile [--pete-ops] ] [--guard INCLUDE_GUARD]
+[--scalars] [--extra-classes] [--no-expression] [--assign-ops]
+[--op-tags] [--no-shift-guard] [--o outputfile]
+    </pre>
+
+    <h2>Description</h2>
+
+    <p>
+      In order to use PETE with a given set of container classes,
+      operators such as <TT>+, -, *, /</TT> etc. must be defined to return 
expression
+      template parse trees when given those classes.
+      Operators must be defined for combining the container classes,
+      <TT>B + C</TT>, for combining the container classes with scalars,
+      <TT>2 * C</TT>, and for combining parse trees with other objects,
+      <TT>B + (C + D) + 2</TT>.
+      To generate the <a href="builtin.html">PETE built-in operators</a>
+      requires over 200 different templated operator functions to interface
+      PETE with a single container class such as the STL vector.
+     </p>
+
+    <p>
+      Command line options are:
+     </p>
+
+    <h3>--help<br>--pete-help</h3>
+    <blockquote>
+      <p>
+       Print a simple summary of the command options.
+      </p>
+    </blockquote>
+
+    <h3>--classes classfile</h3>
+    <blockquote>
+      <p>
+       Input the class definitions from the file "classfile".
+       Omitting this option causes no operator functions to be produced,
+       which can be useful if you only want to produce operator tags.
+      </p>
+      <p>
+       To understand the format of the input file, consider the STL vector.
+       <b>MakeOperators</b> will output definitions for <TT>operator+()</TT>
+       between vectors and vectors and between vectors and scalars:
+      </p>
+      <pre>
+template&lt;class T1,class Allocator1,class T2,class Allocator2&gt;
+(parse tree return type)
+operator+(const vector&lt;T1,Allocator1&gt; &v1,const 
vector&lt;T2,Allocator2&gt; &v2)
+{
+  (construct parse tree)
+}
+template&lt;class T1,class T2,class Allocator2&gt;
+(parse tree return type)
+operator+(const T1 &v1,const vector&lt;T2,Allocator2&gt; &v2)
+{
+  (construct parse tree)
+}
+template&lt;class T1,class Allocator1,class T2&gt;
+(parse tree return type)
+operator+(const vector&lt;T1,Allocator1&gt;& v1,const T2 &v2)
+{
+  (construct parse tree)
+}
+      </pre>
+      <p>
+       In order to construct the operator, the tool needs to know the
+       template arguments <TT>"class T,class Allocator"</TT> and the
+       templated form of the class <TT>"vector&lt;T,Allocator&gt;"</TT>.
+       For the STL vector example the class definitions file would contain
+       the four lines:
+      </p>
+      <pre>
+classes
+-----
+  ARG   = "class T[n],class Allocator[n]"
+  CLASS = "vector&lt;T[n],Allocator[n]&gt;"
+      </pre>
+      <p>
+       The string <TT>[n]</TT> needs to be attached to each template
+       argument and represents a number that allows
+       <b>MakeOperators</b> to uniquely
+       identify each argument in binary and trinary operators.
+       For classes with no template arguments, use <TT>ARG  = ""</TT>.
+       In general, the class definition definition file can look like:
+      </p>
+      <pre>
+classes
+-----
+  ARG   = (class 1 args)
+  CLASS = (class 1 definition)
+-----
+  ARG   = (class 2 args)
+  CLASS = (class 2 definition)
+...
+
+extraClasses
+-----
+  ARG   = (extra class 1 args)
+  CLASS = (extra class 1 definition)
+...
+scalars
+-----
+  ARG   = (scalar 1 args)
+  CLASS = (scalar 1 definition)
+...
+      </pre>
+      <p>
+       When multiple classes are listed, operators are produced for all
+       combinations of those classes with each other, with scalars and
+       with expression objects.
+      </p>
+      <p>
+       The second optional list starting with
+       the word <TT>extraClasses</TT> is used if you want to extend
+       a previously created file.  For example, if you produced a file
+       defining all the operators for <TT>vector&lt;T&gt;</TT> and
+       wanted to extend your implementation to operations between
+       vectors and <TT>list&lt;T&gt;</TT>, then you would list vector
+       as a class and list under extraClasses and specify the option
+       <TT>--extra-classes</TT>.  The resulting file would define
+       operations between lists and lists, and between lists and
+       vectors, but omit those between vectors and vectors, so that
+       you could include both the new file and your previously
+       generated file.
+       Typically, it would be better to simply create a new file
+       with all the operators, so extraClasses should rarely be
+       used.
+      </p>
+      <p>
+       The final part of this list that begins
+       with the word <TT>scalars</TT> will only rarely need to be used.
+       By the rules of partial specialization, if any class does not appear
+       in the classes list, it will be treated as a scalar.  Suppose you
+       were to define a tensor class <TT>Tensor&lt;T&gt;</TT>, then
+       <TT>Tensor&lt;T&gt;() + vector&lt;Tensor&lt;T&gt &gt;()</TT> would
+       invoke the right function: <TT>T1 + vector&lt;T2&gt;</TT> (which
+       means treat the tensor on the left as a scalar and add it to each
+       of the tensors in the vector of tensors).
+       A problem arises if you also define scalar operations with tensors
+       of the form <TT>Tensor&lt;T1&gt; + T2</TT> to represent adding a
+       scalar to each of the tensor components.
+       In this case
+       <TT>Tensor&lt;T&gt;() + vector&lt;Tensor&lt;T&gt &gt;()</TT>
+       is ambiguous as it matches the function for adding scalars to
+       vectors and the function for addint tensors to scalars.
+       To resolve this case, we must explicitly define
+       <TT>Tensor&lt;T&gt; + vector&lt;Tensor&lt;T&gt &gt;</TT>,
+       which will happen if we add <TT>Tensor&lt;T&gt;</TT> to the list
+       of scalars.  (So the list of scalars only needs to contain classes
+       that act like scalars but that also define operations between
+       themselves and classes of arbitrary type.)
+      </p>
+    </blockquote>
+
+    <h3>--o outputfile</h3>
+    <blockquote>
+      <p>
+       Send MakeOperators output to outputfile; otherwise write to stdout.
+      </p>
+    </blockquote>
+
+    <h3>--operators opfile</h3>
+    <blockquote>
+      <p>
+       Include the operator descriptions from the file "opfile".
+       Typically this option should be omitted, in which case
+       the set of 45 <a href="builtin.html">PETE built-in operators</a>
+       are used.  See the file
+       <a href="PeteOps.html"><TT>src/Tools/PeteOps.in</TT></a>
+       in the PETE distribution to see operator descriptors for all the
+       PETE built-in operators.
+       The general format of an operator descriptor file is:
+      </p>
+      <pre>
+type1
+-----
+  TAG      = "tag"
+  FUNCTION = "function"
+  EXPR     = "expression"
+-----
+  TAG      = "tag"
+  FUNCTION = "function"
+  EXPR     = "expression"
+...
+
+type2
+-----
+  TAG      = "tag"
+  FUNCTION = "function"
+  EXPR     = "expression"
+...
+      </pre>
+      <p>
+       The string <TT>"tag"</TT> is the name of a tag class that is used
+       in expression template nodes to differentiate between the different
+       operators.  For example, <TT>"OpAdd"</TT> is used for binary
+       <TT>operator+()</TT>,  <TT>"OpSubtract"</TT> is used for binary
+       <TT>operator-()</TT>, and so on.
+       The string <TT>"function"</TT> is the name of the operator funtion,
+       <TT>"operator+"</TT> for example.
+       The string <TT>"expression"</TT> contains the body of a function that
+       evaluates the operator on specific elements.  The string should
+       use the names a, b, and c to represent the arguments to the function.
+       For example the definition of binary <TT>operator+()</TT> sets
+       <TT>EXPR  = "return (a + b);"</TT>.
+      </p>
+      <p>
+       The headings <TT>type1</TT>, <TT>type2</TT>, etc. are operator types.
+       Currently the following operator types are supported:
+      </p>
+      <ul>
+       <li><b>unaryOps</b> - simple unary operators whose return
+         type is the same as their input type
+       </li>
+       <li><b>unaryBoolOps</b> - unary operators that return a bool</li>
+       <li><b>unaryCastOps</b> - actually binary operators where the first
+         argument is used to set the return type (like peteCast).
+       </li>
+       <li><b>unarySpecialOp</b> - unary operators that use the type 
computation
+         system to compute their return type.
+         For example <TT>real(Complex&lt;T&gt;)</TT> returns <TT>T</TT>.
+       </li>
+       <li><b>binaryOps</b> - simple binary operators that compute their
+         return type by promotion.
+       </li>
+       <li><b>binaryBoolOps</b> - binary operators that return a bool
+         (like <TT>&lt;</TT>).
+       </li>
+       <li><b>binaryLeftOps</b> - binary operators that return the type of
+         the left argument.
+       </li>
+       <li><b>binarySpecialOps</b> - unary operators that use the type 
computation
+         system to compute their return type.
+       </li>
+       <li><b>binaryAssignOps</b> - assignment operators like <TT>+=</TT>.
+         If operator functions are produced for these operators then they call
+         <TT>evaluate()</TT> instead of returning an expression tree.
+       </li>
+       <li><b>binaryAssignBoolOps</b> - assignment operators that always return
+         a bool, like <TT>andAssign</TT> which emulates the mythical 
<TT>&&=</TT>.
+       </li>
+       <li><b>assignOp</b> - <TT>operator=()</TT>.
+       </li>
+       <li><b>trinaryOps</b> - trinary operators like <TT>where()</TT> which
+         emulates <TT>?:</TT>.
+       </li>
+      </ul>
+    </blockquote>
+
+    <h3>--pete-ops</h3>
+    <blockquote>
+      <p>
+       Using the <TT>--operators</TT> causes the tool to use operator
+       descriptors from a file, but not to use any of the pre-defined
+       PETE operators.
+       If you wish produce operators for BOTH operators read from a
+       file AND the pre-defined PETE operators, the use
+       <TT>--pete-ops</TT> as well as the <TT>--operators</TT>
+       option.
+       For example, the first two commands in the POOMA example below
+       could be simplified to produce one file:
+      </p>
+      <pre>
+MakeOperators --classes PoomaClass.in \
+              --operators PoomaOps.in --pete-ops \
+              --guard POOMA_ARRAY_ARRAYOPERATORS_H \
+              --no-expression --o ArrayOperators.h
+      </pre>
+    </blockquote>
+
+    <h3>--guard INCLUDE_GUARD</h3>
+    <blockquote>
+      <p>
+       The code output by <b>MakeOperators</b> includes ifdefs to guard against
+       multiple inclusion of the form:
+      </p>
+      <pre>
+#ifndef INCLUDE_GUARD
+#define INCLUDE_GUARD
+ (code goes here)
+#endif // INCLUDE_GUARD
+      </pre>
+      <p>
+       If this option is omitted then <TT>INCLUDE_GUARD</TT> will
+       default to either <TT>GENERATED_OPERATORS_H</TT> if the
+       <TT>--classes</TT> option is present, or
+       <TT>OPERATOR_TAGS_H</TT> otherwise.
+       If you wish to omit the include guards from the output file,
+       then use the option <TT>--guard ""</TT>.
+      </p>
+    </blockquote>
+
+    <h3>--scalars</h3>
+    <blockquote>
+      <p>
+       When this option is present, only operations between classes and
+       scalars are produced.  This option is useful in the situation
+       mentioned in the description of <TT>--classes</TT>, where operators
+       must be defined between containers and user defined scalars in order
+       to resolve ambiguities.  In the example of a user defined tensor class,
+       the user would probably only define a small set of operations with 
general
+       scalars, like +, -, *, and /.  To produce smaller operator files,
+       you could produce all the operators without tensors and then produce the
+       operators between containers and tensors just for the smaller set of
+       operators.  See the example section for an example of this case.
+      </p>
+    </blockquote>
+
+    <h3>--extra-classes</h3>
+    <blockquote>
+      <p>
+       When this option is present, only operations involving extraClasses
+       are produced.  This option is useful if you want to create an
+       operator file that extends a previously created operator file.
+       See the <TT>--classes</TT> option for a description of
+       extraClasses.
+      </p>
+    </blockquote>
+
+    <h3>--no-expression</h3>
+    <blockquote>
+      <p>
+       <b>MakeOperators</b> needs to define operations between parse
+       tree objects and containers and scalars.
+       In the expression <TT>A + ( B + C )</TT>,
+       the subexpression <TT>( B + C )</TT> returns a parse tree object which
+       must then be combined with the container <TT>A</TT>.
+       Some users of PETE, like POOMA, wrap the result of operators inside
+       their own container class, so there is no need to define such operators.
+       (The sum of two POOMA arrays is an array containing an expression.)
+       This flag turns off generation of operations with parse tree objects.
+      </p>
+    </blockquote>
+
+    <h3>--assign-ops</h3>
+    <blockquote>
+      <p>
+       Generate global assignment operators that call the function
+       <TT>evaluate()</TT>.
+      </p>
+    </blockquote>
+
+    <h3>--op-tags</h3>
+    <blockquote>
+      <p>
+       Produce definitions of the operator tag classes.  PETE already contains
+       definitions of all the PETE built-in operators, so this flag only needs
+       to be used for user defined operators.
+      </p>
+    </blockquote>
+
+    <h3>--no-shift-guard</h3>
+    <blockquote>
+      <p>
+       It is typical to define the operator <TT>ostream &lt;&lt; 
container</TT>,
+       which can get confused with the operator <TT>T &lt;&lt; container</TT>
+       under some circumstances.
+       To avoid this problem, PETE only defines the shift operators between
+       scalars and containers if the macro PETE_ALLOW_SCALAR_SHIFT is defined.
+       If <TT>--no-shift-guard</TT> is selected, then the ifdefs that implement
+       this guard are eliminated and shift operators between scalars and
+       containers are always defined.
+      </p>
+    </blockquote>
+
+    <h2>Examples</h2>
+
+    <p>
+      Here we build operators to use STL vectors with PETE.
+      The flag <TT>--assign-ops</TT> is present because we
+      cannot define the assignment member functions for STL vectors.
+    </p>
+
+    <pre>MakeOperators --classes vectorDefs.in --assign-ops > 
VectorOperators.h</pre>
+
+    <p>
+      For POOMA, we create the built-in PETE operators, some special POOMA 
operators
+      like <TT>real()</TT>, and finally operators between POOMA arrays and the 
POOMA
+      Vector and Tensor scalars to disambiguate them.
+      The flag <TT>--no-expression</TT> is used because POOMA wraps expressions
+      inside POOMA arrays.
+      The flag <TT>--assign-ops</TT> not used because POOMA arrays define 
assignment
+      member functions.
+      In the second command, <TT>--op-tags</TT> is used because the POOMA 
operator
+      tag classes need to be defined.
+      In the third command, <TT>--scalars</TT> is used because the first 
command
+      has already defined operations between POOMA arrays for the operators in
+      <TT>PoomaVectorOps.in</TT> (which is a subset of the PETE operators).
+      In the fourth command, <TT>--o VectorOperators.h</TT> sends output to 
that
+      file rather than stdout.
+    </p>
+
+    <pre>
+MakeOperators --classes PoomaClass.in --guard POOMA_ARRAY_ARRAYOPERATORS_H \
+              --no-expression &gt; ArrayOperators.h
+
+MakeOperators --classes PoomaClass.in --operators PoomaOps.in \
+              --guard POOMA_POOMA_POOMAOPERATORS_H --no-expression \
+              --op-tags &gt; PoomaOperators.h
+
+MakeOperators --classes PoomaVectorClass.in --operators PoomaVectorOps.in \
+              --guard POOMA_POOMA_VECTOROPERATORS_H --no-expression --scalars \
+              &gt; VectorOperators.h
+
+MakeOperators --classes PoomaVectorClass.in --operators PoomaVectorOps.in \
+              --guard POOMA_POOMA_VECTOROPERATORS_H --no-expression --scalars \
+              --o VectorOperators.h
+    </pre>
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="index.html">[Home]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/stl.html b/tools/pete-2.1.1/html/stl.html
new file mode 100644
index 0000000..08f6a3f
--- /dev/null
+++ b/tools/pete-2.1.1/html/stl.html
@@ -0,0 +1,97 @@
+<!-- stl.html : PETE appendix on the Standard Template Library -->
+<!-- $Id: stl.html,v 1.6 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorials: The Standard Template Library</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorials<br>The Standard Template Library</h1></center>
+
+<p>The best-known use of templates to date has been the Standard
+Template Library, or STL.  The STL uses templates to separate
+containers (such as vectors and lists) from algorithms (such as
+finding, merging, and sorting).  The two are connected through the use
+of <em>iterators</em>, which are classes that know how to read or
+write particular containers, without exposing the actual type of those
+containers.
+
+<p>For example, consider the following code fragment, which finds the
+first occurrence of a particular value in a vector of floating-point
+numbers:
+
+<blockquote><pre>
+void findValue(vector&lt;double&gt; &amp; values, double target)
+{
+    vector&lt;double&gt;::iterator loc =
+        find(values.begin(), values.end(), target);
+    assert(*loc == target);
+}
+</pre></blockquote>
+
+<p>The STL class <tt>vector&lt;&gt;</tt> declares another class called
+<tt>iterator</tt>, whose job it is to traverse a
+<tt>vector&lt;&gt;</tt>.  The two methods <tt>begin()</tt> and
+<tt>end()</tt> return instances of <tt>vector&lt;&gt;::iterator</tt>
+marking the beginning and end of the vector.  STL's <tt>find()</tt>
+function iterates from the first of its arguments to the second,
+looking for a value that matches the one specified.  Finally,
+dereferencing (<tt>operator*</tt>) is overloaded for
+<tt>vector&lt;&gt;::iterator</tt>, so that <tt>*loc</tt> returns the
+value at the location specified by <tt>loc</tt>.
+
+<p>If we decide later to store our values in a list instead of in a
+vector, only the declaration of the container type needs to change,
+since <tt>list&lt;&gt;</tt> defines a nested iterator class, and
+<tt>begin()</tt> and <tt>end()</tt> methods, in exactly the same way
+as <tt>vector&lt;&gt;</tt>:
+
+<blockquote><pre>
+void findValue(list&lt;double&gt; &amp; values, double target)
+{
+    list&lt;double&gt;::iterator loc =
+        find(values.begin(), values.end(), target);
+    assert(*loc == target);
+}
+</pre></blockquote>
+
+<p>If we go one step further, and use a <tt>typedef</tt> to label our
+container type, then nothing in <tt>findValue()</tt> needs to change
+at all:
+
+<blockquote><pre>
+typedef vector&lt;double&gt; Storage;
+// <em>typedef list&lt;double&gt; Storage;</em>
+
+void findValue(Storage &amp; values, double target)
+{
+    Storage::iterator loc =
+        find(values.begin(), values.end(), target);
+    assert(*loc == target);
+}
+</pre></blockquote>
+
+<p>The performance of this code will change as the storage mechanism
+changes, but that's the point: STL-based code can often be tuned using
+only minor, non-algorithmic changes.
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="tut-1.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       <td><a href="legal.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/tree.gif b/tools/pete-2.1.1/html/tree.gif
new file mode 100644
index 0000000..e0696d7
Binary files /dev/null and b/tools/pete-2.1.1/html/tree.gif differ
diff --git a/tools/pete-2.1.1/html/tut-1.html b/tools/pete-2.1.1/html/tut-1.html
new file mode 100644
index 0000000..2b63045
--- /dev/null
+++ b/tools/pete-2.1.1/html/tut-1.html
@@ -0,0 +1,732 @@
+<!-- tut-1.html : first PETE tutorial -->
+<!-- $Id: tut-1.html,v 1.15 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorial 1: Incorporating a Simple Vector Class</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorial 1<br>Incorporating a Simple Vector 
Class</h1></center>
+
+<p><b>Contents:</b>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#starting-point">The Starting Point</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#integration">Extra Definitions Required 
for Integration</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#make-leaf">Making Leaves for the Parse Tree</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#leaf-functor">Operating on Leaves</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#assignment">Assigning to Vectors</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#counting">Counting Vectors</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#make-expr-operators">Making Operators</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#using">Using These Definitions</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#summary">Summary</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#source-files">Source Files</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#vec3-h"><tt>Vec3.h</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#vec3defs-in"><tt>Vec3Defs.in</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#vec3-cpp"><tt>Vec3.cpp</tt></a>
+
+<!---------------------------------------------------------------------->
+<a name="intro"><h2>Introduction</h2></a>
+
+<p>This tutorial shows how to integrate a simple class representing
+3-element vectors into PETE.  The source files for this example are
+included in the <tt>examples/Vec3</tt> directory of the PETE
+distribution.  These files are:
+
+<ul>
+
+<li><a href="#vec3-h"><tt>Vec3.h</tt></a>: defines the <tt>Vec3</tt>
+class on which the example is based.  This file also defines or
+specializes the template classes needed to integrate <tt>Vec3</tt>
+with PETE.  These extra definitions will be discussed <a
+href="#integration">below</a>.
+
+<li><a href="#vec3defs-in"><tt>Vec3Defs.in</tt></a>: definitions
+needed to automatically generate the template classes required to
+integrate <tt>Vec3</tt> into PETE.  This file is processed by the
+<tt>MakeOperators</tt> tool discussed <a
+href="#make-expr-operators">below</a>.
+
+<li><tt>Vec3Operators.h</tt>: the file generated by
+<tt>MakeOperators</tt> based on the definitions in
+<tt>Vec3Defs.in</tt>.  The vector class definition file
+<tt>Vec3.h</tt> <tt>#include</tt>s this file, so that PETE-based
+programs only need to <tt>#include</tt> <tt>Vec3.h</tt>, rather than
+both <tt>Vec3.h</tt> and <tt>Vec3Operators.h</tt>.
+
+<li><a href="#vec3-cpp"><tt>Vec3.cpp</tt></a>: a short program that
+shows how to construct expressions using <tt>Vec3</tt> and PETE
+together.
+
+<li><tt>makefile</tt>: rebuilds the example.
+
+</ul>
+
+<!---------------------------------------------------------------------->
+<a name="starting-point"><h2>The Starting Point</h2></a>
+
+<p>The starting point for this tutorial is the 3-element vector class
+defined in <a href="#vec3-h"><tt>Vec3.h</tt></a>.  Most of this
+class's declaration is unremarkable.  Each instance of the class
+contains a 3-element array of integers; the class's default
+constructor initializes their values to 0, while a non-default
+constructor can be used to give them particular initial values.  A
+copy constructor is also provided, as are assignment operators taking
+either scalar or vector values.  Finally, two versions of
+<tt>operator[]</tt> are provided, so that both constant and
+non-constant vectors can be indexed, and a <tt>print()</tt> method is
+defined for <tt>operator&lt;&lt;</tt> and other I/O routines to use.
+<tt>operator&lt;&lt;</tt> is overloaded further down, on lines
+115-119.
+
+<p>If you do not understand all of the definitions on lines 22-58 and
+78-94 of <a href="#vec3-h"><tt>Vec3.h</tt></a>, you may wish to
+become more familiar with C++ before proceeding with these tutorials.
+
+<p>In order to understand the particulars of this tutorial, it is
+necessary to know about some of the indirection classes that PETE
+uses.  The most important of these is a general wrapper called
+<tt>Expression&lt;&gt</tt>.  It exists to wrap
+<tt>UnaryNode&lt;&gt;</tt>, <tt>BinaryNode&lt;&gt;</tt> and
+<tt>TrinaryNode&lt;&gt;</tt> so that they can all be captured during
+template expansion by a single type, namely
+<tt>Expression&lt;T&gt;</tt>.  As we shall see <a
+href="#assignment">below</a>, the <tt>Expression&lt;&gt;</tt> template
+also serves to distinguish PETE expressions from other expressions, so
+that the compiler will not inadvertently mix PETE expressions with
+normal arithmetic.
+
+<p>PETE's second indirection class is called
+<tt>MakeReturn&lt;&gt;</tt>.  For any type <tt>T</tt>,
+<tt>MakeReturn&lt;T&gt;::Expression_t</tt> is a <tt>typedef</tt> that
+produces the type of value returned by expressions on <tt>T</tt>.  In
+the general case, this is simply Expression&lt;T&gt;,
+i.e. <tt>MakeReturn&lt;&gt;</tt> just wraps the expression produced by
+an operator so that it can be used inside other operators.  The <a
+href="http://www.acl.lanl.gov/pooma";>POOMA</a> library overrides
+<tt>MakeReturn&lt;T&gt;</tt> (by specializing it explicitly) so that
+expressions involving POOMA arrays generate new arrays.  This
+technique is similar to the standard C++ idiom of having a framework
+define one or more virtual methods with empty bodies, and call them at
+specified times, so that users can derive from the framework classes
+and override those virtual methods to insert their own code in the
+framework's processing stream.
+
+<!---------------------------------------------------------------------->
+<a name="integration"><h2>Extra Definitions Required for Integration</h2></a>
+
+<p>In order to use <tt>Vec3</tt> with PETE, we must provide three
+things:
+<ol>
+<li>A description of the <tt>Vec3</tt> class.
+<li>A way to extract values from instances of <tt>Vec3</tt>.
+<li>A way to assign to a <tt>Vec3</tt> from a PETE expression.
+</ol>
+These three issues are discussed in order below.
+
+<p>In addition, this example shows how to add new capabilities to PETE
+by creating a mechanism for counting the number of instances of
+<tt>Vec3</tt> involved in an expression.  The same kind of mechanism
+can be used to (for example) check that all of the vectors in an
+expression have the same length before starting evaluation of that
+expression.
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="make-leaf"><h3>Making Leaves for the Parse Tree</h3></a>
+
+<p>PETE uses a traits class called <tt>CreateLeaf&lt;&gt;</tt> to
+record information about the leaf types on which it operates.  Each
+specialization of <tt>CreateLeaf&lt;&gt;</tt> must be able to
+answer two questions:
+<ol>
+<li>What is the type of the leaf?
+<li>How can the program make an instance of this leaf?
+</ol>
+
+<p>The first question is answered by providing a <tt>typedef</tt> for
+the name <tt>Leaf_t</tt>.  In our example, we want to have access to
+<tt>Vec3</tt>'s member functions. However, <tt>Vec3</tt> has deep copy
+semantics so we don't want store actual <tt>Vec3</tt> objects at the leaves,
+thereby making copies and negating most of the benefit of expression
+templates.
+Instead, we store a <tt>Vec3&amp;</tt>. This is accomplished by wrapping
+the <tt>Vec3</tt> class in a <tt>Reference&lt;&gt;</tt> wrapper.
+By default, PETE stores leaves by value, which is appropriate
+for leaves that hold iterators. In this case we would not have to
+make use of the <tt>Reference&lt;&gt;</tt> wrapper.
+Once we have done
+this, the rest of PETE can be written using expressions like
+<tt>CreateLeaf&lt;T&gt;::Leaf_t</tt>.  This allows PETE to work with
+classes that are added later, in the same way that making a function
+<tt>virtual</tt> allows programs that use a library to add new
+functionality without re-writing old code.
+
+<p>Making a leaf is a little bit trickier.  Every
+specialization of <tt>CreateLeaf&lt;&gt;</tt> must define a
+<tt>static</tt> method called <tt>make()</tt> that takes something of
+the specialization's input type as an argument, and returns something
+of its leaf type.  This method must be <tt>static</tt> so that
+it can be called without an instance of
+<tt>CreateLeaf&lt;Vec3&gt;</tt> ever having been created; as with most
+traits classes, the specializations of <tt>CreateLeaf&lt;&gt;</tt>
+exist only to answer questions.  In this example, the input to
+<tt>make()</tt> is a constant reference to a <tt>Vec3</tt>, which the
+function simply returns wrapped in a <tt>Reference&lt;Vec3&gt;</tt> object.  
+In the case of an STL list, the argument
+would have type <tt>List&lt;T&gt;</tt>, but the return type
+<tt>Leaf_t</tt> might be an iterator type.
+
+<blockquote><pre>
+103  template&lt;&gt;
+104  struct CreateLeaf&lt;Vec3&gt;
+105  {
+106    typedef Reference&lt;Vec3&gt; Leaf_t;
+107    inline static
+108    Leaf_t make(const Vec3 &amp;a) { return Leaf_t(a); }
+109  };
+</pre></blockquote>
+
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="leaf-functor"><h3>Operating on Leaves</h3></a>
+
+<p>Our next task is to provide a way for PETE expressions to extract
+values from <tt>Vec3</tt>s.  This has to be done in a generic way, so
+that (for example) scalars can return the same value each time they
+are queried, while STL lists are accessed through bidirectional
+iterators and <tt>Vec3</tt>s are accessed by integer indexing.
+
+<p>PETE's solution to this problem is to require programmers to
+specialize the traits class <tt>LeafFunctor&lt;&gt;</tt> for the
+combination of their leaf class and a tag class called
+<tt>EvalLeaf1</tt>.  <tt>EvalLeaf1</tt> is a simple class
+defined by PETE, whose only purpose is to contain the single
+index that PETE wants to evaluate an expression at.  (<tt>EvalLeaf2</tt>
+signals that a doubly-indexed expression is being evaluated, and so
+on up to <tt>EvalLeaf7</tt>.)
+
+<p>The specialization of <tt>LeafFunctor&lt;&gt;</tt>, shown below,
+does two things.  First, it defines the type of the result of the
+expression as <tt>Type_t</tt>.  Second, it defines a <tt>static</tt>
+method called <tt>apply()</tt>, which uses the index stored in its
+<tt>EvalLeaf1</tt> argument and returns the corresponding element
+of the <tt>Vec3</tt>:
+
+<blockquote><pre>
+127  template&lt;&gt;
+128  struct LeafFunctor&lt;Vec3, EvalLeaf1&gt;
+129  {
+130    typedef int Type_t;
+131    static Type_t apply(const Vec3 &amp;a, const EvalLeaf1 &amp;f)
+132      { return a[f.val1()]; }
+133  };
+</pre></blockquote>
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="assignment"><h3>Assigning to Vectors</h3></a>
+
+<p>The last step in making <tt>Vec3</tt> PETE-compatible is to provide
+a way for PETE to assign to a <tt>Vec3</tt> from an arbitrary
+expression.  This is done by overloading <tt>operator=</tt> to take a
+PETE expression as input, and copy values into its owner:
+
+<blockquote><pre>
+064    template&lt;class RHS&gt;
+065    Vec3 &amp;operator=(const Expression&lt;RHS&gt; &amp;rhs)
+066    {
+067      d[0] = forEach(rhs, EvalLeaf1(0), OpCombine());
+068      d[1] = forEach(rhs, EvalLeaf1(1), OpCombine());
+069      d[2] = forEach(rhs, EvalLeaf1(2), OpCombine());
+070  
+071      return *this;
+072    }
+</pre></blockquote>
+
+<p>The first thing to notice about this method is that it is templated
+on an arbitrary class <tt>RHS</tt>, but its single formal parameter
+has type <tt>Expression&lt;RHS&gt;</tt>.  This combination means that
+the compiler can match it against anything that is wrapped in the
+generic PETE template <tt>Expression&lt;&gt;</tt>, and <em>only</em>
+against things that are wrapped in that way.  The compiler cannot
+match against <tt>int</tt>, <tt>complex&lt;short&gt;</tt>, or
+<tt>GreatAuntJane_t</tt>, since these do not have the form
+<tt>Expression&lt;RHS&gt;</tt> for some type <tt>RHS</tt>.
+
+<p>The <tt>forEach</tt> function is used to traverse expression trees.
+The first argument is the expression. The second argument is the leaf
+tag denoting the operation applied at the leaves. 
+The third argument is a combiner tag,
+which is used to combine results at non-leaf nodes. By passing
+<tt>EvalLeaf1(0)</tt> in line 67, we are indicating that we want the
+<tt>Vec3</tt>s at the leaves to return the element at index 0. The
+<tt>LeafFunctor&lt;Scalar&lt;T&gt;, EvalLeaf1&gt;</tt> (defined
+inside of PETE) ensures that scalars return their value no matter the
+index. While <tt>EvalLeaf1</tt> obtains values from the leaves,
+<tt>OpCombine</tt> takes these values and combines them according to the
+operators present at the non-leaf nodes. The result is that line 67
+evaluates the expression on the right side of the assignment operator at
+index 0. Line 68 does this at index 1, and so on. Once evaluation is complete,
+<tt>operator=</tt> returns the <tt>Vec3</tt> to which values have been
+assigned, in keeping with normal C++ conventions.
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="counting"><h3>Counting Vectors</h3></a>
+
+<p>We could stop at this point, but in order to show off PETE's
+flexibility, we will finish by defining a new leaf tag that counts the
+number of <tt>Vec3</tt>s in an arbitrary expression.  The required
+definitions, on lines 152-168 of <tt>Vec3.h</tt>, are:
+
+<blockquote><pre>
+141  struct CountLeaf { };
+142  
+143  template&lt;&gt;
+144  struct LeafFunctor&lt;Vec3, CountLeaf&gt;
+145  {
+146    typedef int Type_t;
+147    static Type_t apply(const Vec3 &amp;, const CountLeaf &amp;)
+148      { return 1; }
+149  };
+150  
+151  template&lt;class T&gt;
+152  struct LeafFunctor&lt;T, CountLeaf&gt;
+153  {
+154    typedef int Type_t;
+155    static Type_t apply(const T &amp;a, const CountLeaf &amp;)
+156      { return 0; }
+157  };
+</pre></blockquote>
+
+<p><tt>CountLeaf</tt> is an empty tag class, whose only purpose is
+to identify the operation we wish to carry out.
+<tt>LeafFunctor&lt;&gt;</tt> is then specialized separately for
+<tt>CountLeaf</tt> on both <tt>Vec3</tt> and the generic type
+<tt>T</tt>.  Applying the first specialization returns 1, since it
+wraps a single <tt>Vec3</tt>.  Applying the second specialization
+returns 0, since nothing else counts as a vector.
+
+<!---------------------------------------------------------------------->
+<a name="make-expr-operators"><h2>Making Operators</h2></a>
+
+<p>We have now provided almost everything that PETE needs in order to
+operate on our <tt>Vec3</tt> class.  All that remains is several
+thousand lines of templated operator and function definitions.
+Luckily, these can be generated automatically from a few lines of
+information.
+
+<p>The file <a href="#vec3defs-in"><tt>Vec3Defs.in</tt></a> stores
+exactly that information, and is used by PETE's
+<tt>MakeOperators</tt> tool to generate the 3740 lines of
+<tt>Vec3Operators.h</tt>.  The special notation <tt>"[n]"</tt> is
+replaced by the digits 1, 2, and so on to distinguish multiple uses of
+the same argument.  Thus, <tt>"class&nbsp;T[n]"</tt> becomes
+<tt>"class&nbsp;T1"</tt>, <tt>"class&nbsp;T2"</tt>, and so on as
+needed.  The entire specification file is:
+
+<blockquote><pre>
+001  classes
+002  -----
+003    ARG   = ""
+004    CLASS = "Vec3"
+</pre></blockquote>
+
+<p>Two values are specified for each of the classes for which
+definitions are to be generated:
+
+<ul>
+
+<li><tt>ARG</tt>: how to make the template arguments needed to define
+instances of this class.  <tt>Vec3</tt>'s <tt>ARG</tt> field is empty,
+since it is not a templated class.  Giving <tt>class&nbsp;T[n]</tt>
+for the <tt>ARG</tt> field for a general <tt>Expression&lt;&gt;</tt>
+causes instances of <tt>Expression&lt;&gt;</tt> to be filled in with
+<tt>class&nbsp;T1</tt>, <tt>class&nbsp;T2</tt>, and so on.
+
+<li><tt>CLASS</tt>: the name of the class itself.
+
+</ul>
+
+<p>The command used to build an operator definition file from this
+input specification is:
+
+<blockquote><pre>
+MakeOperators --classes Vec3Defs.in --guard VEC3OPS_H --o Vec3Operators.h
+</pre></blockquote>
+
+<p><tt>Vec3Defs.in</tt> is the file shown above. The symbol <tt>VEC3OPS_H</tt> 
is
+copied into the output to guard against multiple inclusion, so that
+the output file has the form:
+
+<blockquote><pre>
+#ifndef VEC3OPS_H
+#define VEC3OPS_H
+
+// <em>...contents of file...</em>
+
+#endif // VEC3OPS_H
+</pre></blockquote>
+
+<p>Further information about <tt>MakeOperators</tt> and its command-line
+argument can be found on its <a href="makeoperators.html">man page</a>.
+
+<!---------------------------------------------------------------------->
+<a name="using"><h2>Using These Definitions</h2></a>
+
+<p>With all this out of the way, we can now write arithmetic
+expressions that use <tt>Vec3</tt>, and rely on PETE to optimize them
+for us.  The file <a href="#vec3-cpp"><tt>Vec3.cpp</tt></a> shows some
+of the possibilities.  The simplest example is straightforward
+addition and assignment:
+
+<blockquote><pre>
+013    a = b + c;
+</pre></blockquote>
+
+<p>which would automatically be translated into something equivalent
+to:
+
+<blockquote><pre>
+a[0] = b[0] + c[0];
+a[1] = b[1] + c[1];
+a[2] = b[2] + c[2];
+</pre></blockquote>
+
+<p> This snippet would make use of the overloaded <tt>operator+()</tt>
+generated by the <tt>MakeOperators</tt> tool in the <tt>Vec3Operators.h</tt>
+file and the assignment operator defined above.
+
+<p>This expression could be made much more complex, and PETE would
+still eliminate redundant temporaries or loops.  One such expression
+is:
+
+<blockquote><pre>
+a = sqrt(b*b + c*c);
+</pre></blockquote>
+
+<p>which would automatically be translated into something equivalent
+to:
+
+<blockquote><pre>
+a[0] = sqrt(b[0]*b[0] + c[0]*c[0]);
+a[1] = sqrt(b[1]*b[1] + c[1]*c[1]);
+a[2] = sqrt(b[2]*b[2] + c[2]*c[2]);
+</pre></blockquote>
+
+<p>since PETE provides appropriately-templated overloadings of the
+standard mathematical functions like <tt>sqrt()</tt> and
+<tt>acos()</tt> as well as overloadings of unary and binary operators.
+
+<p>The next two examples in <a href="#vec3-cpp"><tt>Vec3.cpp</tt></a>
+make use of an expression (in this case, the addition of <tt>b</tt>
+and <tt>c</tt>) that has been recorded for delayed evaluation.  In
+order to do this, the programmer must explicitly specify the type of
+the expression being stored, but once this has been done, that
+expression can be re-used any number of times.  The statement that
+creates the expression is:
+
+<blockquote><pre>
+018    const Expression&lt;BinaryNode&lt;OpAdd, Vec3, Vec3&gt; &gt; &amp;expr1 
= b + c;
+</pre></blockquote>
+
+<p>Its first use is as a source for assignment:
+
+<blockquote><pre>
+019    d = expr1;
+</pre></blockquote>
+
+<p>It can also be passed to PETE's explicit evaluation function,
+called <tt>forEach()</tt>, along with the <tt>CountLeaf</tt>
+defined <a href="#counting">earlier</a>, and PETE's built-in
+<tt>SumCombine</tt> tag class, in order to count the number of
+instances of <tt>Vec3</tt> that appear in the expression:
+
+<blockquote><pre>
+022    int num = forEach(expr1, CountLeaf(), SumCombine());
+</pre></blockquote>
+
+<p>Note the parentheses after <tt>CountLeaf</tt> and
+<tt>SumCombine</tt>.  C++ does not allow raw type names to be used to
+instantiate templates; instead, the program must create an unnamed
+instance of each tag class by invoking their default constructors.
+Since these classes contain no data, and their instances are not used
+inside <tt>forEach()</tt>, the compiler optimizes away all of the
+associated code.
+
+<p>The remaining examples in <a href="#vec3-cpp"><tt>Vec3.cpp</tt></a>
+use <tt>CountLeaf</tt> to inspect more complicated expressions.
+
+<!---------------------------------------------------------------------->
+<a name="summary"><h2>Summary</h2></a>
+
+<p>This tutorial has shown how to integrate a simple class into PETE's
+expression template framework, so that compilers can optimize
+expressions involving instances of that class.  The steps required
+are:
+<ul>
+
+<li>specializing <tt>CreateLeaf&lt;&gt;</tt> to tell PETE how to store
+instances of the user class in parse trees;
+
+<li>specializing <tt>LeafFunctor&lt;&gt;</tt> to extract information
+from these leaf nodes;
+
+<li>overloading <tt>operator=</tt> to read values from expressions and
+assign them to instances of the user-defined class; and
+
+<li>using PETE's <a
+href="#make-expr-operators"><tt>MakeOperators</tt></a> tool to
+generate specialized overloadings of C++'s unary, binary, and ternary
+operators to work with the user-defined class.
+
+</ul>
+
+<p>In addition, this tutorial showed how to extend PETE's leaf and
+combiner tags to calculate values on expression trees during compilation.
+The next tutorial will look at how to extend the PETE framework itself
+to synthesize new types.
+
+<!---------------------------------------------------------------------->
+<a name="source-files"><h2>Source Files</h2></a>
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="vec3-h"><h3><tt>Vec3.h</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #ifndef PETE_EXAMPLES_VEC3_VEC3_H
+002  #define PETE_EXAMPLES_VEC3_VEC3_H
+003  
+004  
//-----------------------------------------------------------------------------
+005  // Include files
+006  
//-----------------------------------------------------------------------------
+007  
+008  #include "PETE/PETE.h"
+009  
+010  #include &lt;iostream.h&gt;
+011  
+012  
//-----------------------------------------------------------------------------
+013  //
+014  // CLASS NAME 
+015  //   Vec3
+016  //
+017  // DESCRIPTION
+018  //   A "tiny" three-element expression-template (ET) array class. 
+019  //
+020  
//-----------------------------------------------------------------------------
+021  
+022  class Vec3
+023  {
+024  public:
+025  
+026    
//---------------------------------------------------------------------------
+027    // Constructors and Destructor
+028    
//---------------------------------------------------------------------------
+029  
+030    Vec3() { d[0] = d[1] = d[2] = 0; }
+031  
+032    Vec3(int i, int j, int k) 
+033    {
+034      d[0] = i; d[1] = j; d[2] = k;
+035    }
+036  
+037    Vec3(const Vec3 &amp;v) 
+038    {
+039      d[0] = v.d[0];  d[1] = v.d[1];  d[2] = v.d[2];
+040    }
+041  
+042    ~Vec3() {}
+043  
+044    
//---------------------------------------------------------------------------
+045    // Vec3 and scalar assigment operators
+046    
//---------------------------------------------------------------------------
+047  
+048    Vec3 &amp;operator=(const Vec3 &amp;v) 
+049    {
+050      d[0] = v.d[0];  d[1] = v.d[1];  d[2] = v.d[2];
+051      return *this;
+052    }
+053  
+054    Vec3 &amp;operator=(int i) 
+055    {
+056      d[0] = d[1] = d[2] = i;
+057      return *this;
+058    }
+059  
+060    
//---------------------------------------------------------------------------
+061    // Assignment operator taking expression:
+062    
//---------------------------------------------------------------------------
+063  
+064    template&lt;class RHS&gt;
+065    Vec3 &amp;operator=(const Expression&lt;RHS&gt; &amp;rhs)
+066    {
+067      d[0] = forEach(rhs, EvalLeaf1(0), OpCombine());
+068      d[1] = forEach(rhs, EvalLeaf1(1), OpCombine());
+069      d[2] = forEach(rhs, EvalLeaf1(2), OpCombine());
+070  
+071      return *this;
+072    }
+073  
+074    
//---------------------------------------------------------------------------
+075    // Indexing operators
+076    
//---------------------------------------------------------------------------
+077  
+078    int &amp;operator[](int i)      { return d[i]; }
+079    int operator[](int i) const { return d[i]; }
+080  
+081    
//---------------------------------------------------------------------------
+082    // Print method used by operator&lt;&lt; free function.
+083    
//---------------------------------------------------------------------------
+084  
+085    void print(ostream &amp;os) const 
+086    { 
+087      os &lt;&lt; "{" &lt;&lt; d[0] &lt;&lt; "," &lt;&lt; d[1] &lt;&lt; "," 
&lt;&lt; d[2] &lt;&lt; "}";
+088    }
+089  
+090  private:
+091  
+092    // The underlying complicated data structure
+093  
+094    int d[3];
+095  
+096  };
+097  
+098  
//-----------------------------------------------------------------------------
+099  // We need to specialize CreateLeaf&lt;T&gt; for our class, so that 
operators
+100  // know what to stick in the leaves of the expression tree.
+101  
//-----------------------------------------------------------------------------
+102  
+103  template&lt;&gt;
+104  struct CreateLeaf&lt;Vec3&gt;
+105  {
+106    typedef Reference&lt;Vec3&gt; Leaf_t;
+107    inline static
+108    Leaf_t make(const Vec3 &amp;a) { return Leaf_t(a); }
+109  };
+110  
+111  
//-----------------------------------------------------------------------------
+112  // ostream inserter for Vec3s
+113  
//-----------------------------------------------------------------------------
+114  
+115  ostream &amp;operator&lt;&lt;(ostream &amp;os, const Vec3 &amp;a)
+116  {
+117    a.print(os);
+118    return os;
+119  }
+120  
+121  
//-----------------------------------------------------------------------------
+122  // Specialization of LeafFunctor class for applying the EvalLeaf1
+123  // tag to a Vec3. The apply method simply returns the array
+124  // evaluated at the point.
+125  
//-----------------------------------------------------------------------------
+126  
+127  template&lt;&gt;
+128  struct LeafFunctor&lt;Vec3, EvalLeaf1&gt;
+129  {
+130    typedef int Type_t;
+131    static Type_t apply(const Vec3 &amp;a, const EvalLeaf1 &amp;f)
+132      { return a[f.val1()]; }
+133  };
+134  
+135  
//-----------------------------------------------------------------------------
+136  // Specialization of LeafFunctor class for applying the CountLeaf
+137  // tag to a Vec3. The apply method simply returns 1 for a Vec3 and 0 for
+138  // anything else.
+139  
//-----------------------------------------------------------------------------
+140  
+141  struct CountLeaf { };
+142  
+143  template&lt;&gt;
+144  struct LeafFunctor&lt;Vec3, CountLeaf&gt;
+145  {
+146    typedef int Type_t;
+147    static Type_t apply(const Vec3 &amp;, const CountLeaf &amp;)
+148      { return 1; }
+149  };
+150  
+151  template&lt;class T&gt;
+152  struct LeafFunctor&lt;T, CountLeaf&gt;
+153  {
+154    typedef int Type_t;
+155    static Type_t apply(const T &amp;a, const CountLeaf &amp;)
+156      { return 0; }
+157  };
+158  
+159  // We put this include at the end because
+160  // the operators can't be defined until after Vec3 and
+161  // CreateLeaf&lt;Vec3&gt; have been defined.
+162  // (Since Vec3 isn't templated the operators aren't just
+163  // templates.)
+164  
+165  #include "Vec3Operators.h"
+166  
+167  #endif // PETE_EXAMPLES_VEC3_VEC3_H
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="vec3defs-in"><h3><tt>Vec3Defs.in</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  classes
+002  -----
+003    ARG   = ""
+004    CLASS = "Vec3"
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="vec3-cpp"><h3><tt>Vec3.cpp</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #include "Vec3.h"
+002  
+003  int main()
+004  {
+005    Vec3 a, b, c;
+006  
+007    c = 4;
+008  
+009    b[0] = -1;
+010    b[1] = -2;
+011    b[2] = -3;
+012  
+013    a = b + c;
+014  
+015    cout &lt;&lt; a &lt;&lt; endl;
+016  
+017    Vec3 d;
+018    const Expression&lt;BinaryNode&lt;OpAdd, Vec3, Vec3&gt; &gt; &amp;expr1 
= b + c;
+019    d = expr1;
+020    cout &lt;&lt; d &lt;&lt; endl;
+021    
+022    int num = forEach(expr1, CountLeaf(), SumCombine());
+023    cout &lt;&lt; num &lt;&lt; endl;
+024  
+025    const Expression&lt;BinaryNode&lt;OpAdd, Vec3, 
+026      BinaryNode&lt;OpMultiply, Scalar&lt;int&gt;, Vec3&gt; &gt; &gt; 
&amp;expr2 = b + 3 * c;
+027    num = forEach(expr2, CountLeaf(), SumCombine());
+028    cout &lt;&lt; num &lt;&lt; endl;
+029    
+030    const Expression&lt;BinaryNode&lt;OpAdd, Vec3, 
+031      BinaryNode&lt;OpMultiply, Vec3, Vec3&gt; &gt; &gt; &amp;expr3 = b + c 
* d;
+032    num = forEach(expr3, CountLeaf(), SumCombine());
+033    cout &lt;&lt; num &lt;&lt; endl;
+034  }
+</pre></blockquote><!-- end-line-numbering -->
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="background.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       <td><a href="tut-2.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>
diff --git a/tools/pete-2.1.1/html/tut-2.html b/tools/pete-2.1.1/html/tut-2.html
new file mode 100644
index 0000000..d8724a2
--- /dev/null
+++ b/tools/pete-2.1.1/html/tut-2.html
@@ -0,0 +1,406 @@
+<!-- tut-2.html : second PETE tutorial -->
+<!-- $Id: tut-2.html,v 1.12 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorial 2: Integrating with the Standard Template Library</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorial 2<br>Integrating with the Standard Template 
Library</h1></center>
+
+<p><b>Contents:</b>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#definitions">Required Definitions</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#conform">Checking Conformance</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#using">Using Vectors with PETE</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#summary">Summary</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#source-files">Source Files</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#eval-h"><tt>Eval.h</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#vectordefs-in"><tt>VectorDefs.in</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#vector-cpp"><tt>Vector.cpp</tt></a>
+
+<!---------------------------------------------------------------------->
+<a name="intro"><h2>Introduction</h2></a>
+
+<p>This tutorial shows how to use PETE to manipulate expressions
+involving classes taken from pre-existing libraries---in this case,
+from the C++ Standard Template Library (STL).  The STL's
+<tt>vector&lt;&gt;</tt> class is a generic resizeable one-dimensional
+array, which provides fast, constant-time element access in exchange
+for making extension expensive.  Like the STL's other container
+classes, <tt>vector&lt;&gt;</tt> is used both as-is, and as a basis
+for more specialized data structures, such as fixed-size queues and
+stacks.  This tutorial will show how to use PETE to improve the
+performance of elementwise expressions on numeric vectors, and how to
+automatically determine whether two or more vectors conform (i.e. have
+the same length).
+
+<p>The source files for this example are included in the
+<tt>examples/Vector</tt> directory of the PETE distribution.  These
+files are:
+
+<ul>
+
+<li><a href="#eval-h"><tt>Eval.h</tt></a>: extends PETE's standard
+definitions to accommodate expressions involving
+<tt>vector&lt;&gt;</tt>s.
+
+<li><a href="#vectordefs-in"><tt>VectorDefs.in</tt></a>: definitions
+needed to automatically generate the overloaded operators required to
+integrate <tt>vector&lt;&gt;</tt>s into PETE.  As in the <a
+href="#tut-1.html#make-expr-operators">first tutorial</a>, this file
+is processed by the <tt>MakeOperators</tt> tool to create a header
+file.
+
+<li><tt>VectorOperators.h</tt>: the file generated by
+<tt>MakeOperators</tt> based on the definitions in
+<tt>VectorDefs.in</tt>.  The file <tt>Eval.h</tt> <tt>#include</tt>s
+<tt>VectorOperators.h</tt>, so that PETE-based programs only need to
+<tt>#include</tt> <tt>Eval.h</tt>, rather than both <tt>Eval.h</tt>
+and <tt>VectorOperators.h</tt>.
+
+<li><a href="#vector-cpp"><tt>Vector.cpp</tt></a>: a short program
+that shows how to use the definitions in the header files described
+above to create values during compilation.
+
+<li><tt>makefile</tt>: rebuilds the example.
+
+</ul>
+
+<!---------------------------------------------------------------------->
+<a name="definitions"><h2>Required Definitions</h2></a>
+
+<p>Most of the definitions required to integrate
+<tt>vector&lt;&gt;</tt> with PETE are generated automatically by
+<tt>MakeOperators</tt> using the information in
+<tt>VectorDefs.in</tt>.  The file <tt>Eval.h</tt> contains the few
+extra definitions that must be written by hand.  Of these, the most
+important is the function <tt>evaluate()</tt>, on lines 102-128.  This
+function's arguments are:
+
+<ul>
+
+<li>a <tt>vector&lt;T, Allocator&gt;</tt> (for some type <tt>T</tt> and
+some allocator <tt>Allocator</tt>);
+
+<li>an operator specified by an instance of a PETE operator tag class;
+and
+
+<li>a wrapped PETE expression, called <tt>rhs</tt>, the values of which are to 
be
+assigned to the elements of the given <tt>vector&lt;&gt;</tt>.
+
+</ul>
+
+<p>The overloaded assignment operators in <tt>VectorOperators.h</tt>
+must be able to find an <tt>evaluate()</tt> to match
+every assignment in the user's program.  PETE's protocol therefore
+requires that every class used on the left-hand-side (LHS) in assignment
+expressions define a function with this name and signature.
+
+<p>The first thing <tt>evaluate()</tt> does is check that its target
+and expression conform, i.e. have the same length.  It does this by
+applying the PETE function <tt>forEach()</tt> with a user-defined
+functor <tt>SizeLeaf()</tt> to the expression <tt>rhs</tt> on
+line&nbsp;115. This functor returns <tt>true</tt> if the size of each
+<tt>vector&lt;&gt;</tt> at a leaf of PETE's expression tree matches the
+size of the LHS vector, which is passed as a contructor argument to the
+<tt>SizeLeaf</tt>. We use an <tt>AndCombine</tt> object to
+combine results at non-leaf nodes. In order for the right-hand-side (RHS)
+to conform, all leaves must agree. The definition of <tt>SizeLeaf</tt>
+is discussed <a href="#conform">below</a>.
+
+<p>If its expression and target conform, <tt>evaluate()</tt> carries
+out the required assignment by looping over their mutual index range
+(line&nbsp110).  For each index value, <tt>forEach()</tt> is used to
+evaluate the expression, and the given assignment operator's
+overloaded <tt>operator()</tt> method is used to transfer those values
+to the target vector.  Note that a direct assignment is not used,
+since the assignment could involve <tt>+=</tt>, <tt>|=</tt>, or any
+one of C++'s other combine-and-assign operators.
+
+<p>The two other definitions that must be present for PETE to work
+with <tt>vector&lt;&gt;</tt> are specializations of
+<tt>CreateLeaf&lt;&gt;</tt> and 
+<tt>LeafFunctor&lt;&gt;</tt>.  The first one of these
+specializations, on lines 29-35, specifies that we store
+references to the <tt>vector&lt;&gt;</tt> objects themselves at the
+leaves of the PETE expression tree.
+
+<p>The specialization of <tt>LeafFunctor&lt;&gt;</tt> for
+<tt>vector&lt;&gt;</tt> and <tt>EvalLeaf1</tt> on lines 86-95 is
+what tells PETE how to extract elements from a
+<tt>vector&lt;&gt;</tt>. The '1' in <tt>EvalLeaf1</tt> indicates
+that the class is used to access singly-indexed structures; similar
+classes called <tt>EvalLeaf2</tt>, <tt>EvalLeaf3</tt>, and so on
+are used to access more complex classes.
+
+<p>Given an instance of <tt>EvalLeaf1</tt>, and a
+<tt>vector&lt;&gt;</tt>, this specialization of
+<tt>LeafFunctor&lt;&gt;</tt> defines a <tt>inline</tt> <tt>static</tt>
+method called <tt>apply()</tt>, which takes the index value stored in
+the <tt>EvalLeaf1</tt> and fetches the corresponding
+<tt>vector&lt;&gt;</tt> element.  Making this method <tt>static</tt>
+means that instances of <tt>LeafFunctor&lt;&gt;</tt> never have to be
+created, while making it <tt>inline</tt> ensures that the compiler
+will replace uses of it with its body.  Thus, specializations of
+<tt>LeafFunctor&lt;&gt;</tt> present container element access to
+compilers in a uniform way, without any efficiency cost.
+
+<p>Finally, the <tt>VectorDefs.in</tt> file, which is used to generate
+the standard operator overloadings for <tt>vector&lt;&gt;</tt>, is
+identical to the one used in the <a
+href="tut-1.html#vec3defs-in">previous tutorial</a>, except for a
+substitution of <tt>vector&lt;T[n]&gt;</tt> for <tt>Vec3</tt>.
+(Recall that the <tt>[n]</tt> notation is a placeholder for an
+automatically generated index, so that if <tt>vector&lt;&gt;</tt> is
+used as a formal parameter two or more times, the instances will be
+labeled <tt>vector&lt;T1&gt;</tt>, <tt>vector&lt;T2&gt;</tt>, and so
+on.)
+
+<!---------------------------------------------------------------------->
+<a name="conform"><h2>Checking Conformance</h2></a>
+
+<p>Our only remaining task is to implement the conformance checking
+used by <tt>evaluate()</tt>.  The first step is to write a simple
+functor that holds a size to compare against and contains a method
+to return whether an argument matches this value. This is the
+<tt>Sizefunctor</tt> class appearing in lines 43-55 of <tt>Eval.h</tt>.
+
+<p>Once we've created the functor class, we then need to tell PETE
+how to apply it at the leaves of the expression tree. We know that
+these leaves can consist of either <tt>Scalar&lt;&gt;</tt> or 
+<tt>vector&lt;&gt;</tt> objects. We therefore need to supply two
+<tt>LeafFunctor&lt;&gt;</tt> specializations. The first, in lines 57-68
+works for scalars and always returns <tt>true</tt> since scalars always
+conform. The second, in lines 70-79, uses <tt>SizeLeaf</tt>'s 
+<tt>operator()</tt> function to compare the size of the 
+<tt>vector&lt;&gt;</tt> object stored at a leaf with the reference value.
+
+
+<!---------------------------------------------------------------------->
+<a name="using"><h2>Using Vectors with PETE</h2></a>
+
+<p>The program in <a href="vector-cpp"><tt>Vector.cpp</tt></a> shows
+how to use the definitions given above.  The program starts by
+creating and initializing five vectors.  It then calls PETE's
+<tt>assign()</tt> function to evaluate expressions involving vectors
+and scalars, and copy their values into other vectors.  Note that
+<tt>assign()</tt> must be called by name because the STL pre-defines
+<tt>operator=</tt> for all of its types.
+
+<!---------------------------------------------------------------------->
+<a name="summary"><h2>Summary</h2></a>
+
+<p>This tutorial has shown how to extend PETE so that it can handle
+expressions involving classes taken from a pre-existing library---in
+this case, the Standard Template Library.  The definitions required to
+do this are simple and well-defined, as are the definitions required
+to perform other calculations (in this case, conformance checking) on
+those pre-defined classes.
+
+<!---------------------------------------------------------------------->
+<a name="source-files"><h2>Source Files</h2></a>
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="eval-h"><h3><tt>Eval.h</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #ifndef PETE_EXAMPLES_VECTOR_EVAL_H
+002  #define PETE_EXAMPLES_VECTOR_EVAL_H
+003  
+004  
//-----------------------------------------------------------------------------
+005  // Includes
+006  
//-----------------------------------------------------------------------------
+007  
+008  #include &lt;iostream.h&gt;
+009  #include &lt;vector.h&gt;
+010  #include "PETE/PETE.h"
+011  #include "VectorOperators.h"
+012  
+013  
//-----------------------------------------------------------------------------
+014  // This file contains several class definitions that are used to evaluate
+015  // expressions containing STL vectors.  The main function defined at the 
end
+016  // is evaluate(lhs,op,rhs), which allows the syntax:
+017  // vector&lt;int&gt; a,b,c;
+018  // evaluate(a,OpAssign(),b+c);
+019  //
+020  // evaluate() is called by all the global assignment operator functions
+021  // defined in VectorOperators.h
+022  
//-----------------------------------------------------------------------------
+023  
+024  
//-----------------------------------------------------------------------------
+025  // We need to specialize CreateLeaf&lt;T&gt; for our class, so that 
operators
+026  // know what to stick in the leaves of the expression tree.
+027  
//-----------------------------------------------------------------------------
+028  
+029  template&lt;class T, class Allocator&gt;
+030  struct CreateLeaf&lt;vector&lt;T, Allocator&gt; &gt;
+031  {
+032    typedef Reference&lt;vector&lt;T&gt; &gt; Leaf_t;
+033    inline static
+034    Leaf_t make(const vector&lt;T, Allocator&gt; &amp;a) { return 
Leaf_t(a); }
+035  };
+036  
+037  
//-----------------------------------------------------------------------------
+038  // We need to write a functor that is capable of comparing the size of
+039  // the vector with a stored value. Then, we supply LeafFunctor 
specializations
+040  // for Scalar&lt;T&gt; and STL vector leaves.
+041  
//-----------------------------------------------------------------------------
+042  
+043  class SizeLeaf
+044  {
+045  public:
+046  
+047    SizeLeaf(int s) : size_m(s) { }
+048    SizeLeaf(const SizeLeaf &amp;model) : size_m(model.size_m) { }
+049    bool operator()(int s) const { return size_m == s; }
+050    
+051  private:
+052    
+053    int size_m;
+054    
+055  };
+056  
+057  template&lt;class T&gt;
+058  struct LeafFunctor&lt;Scalar&lt;T&gt;, SizeLeaf&gt;
+059  {
+060    typedef bool Type_t;
+061    inline static
+062    bool apply(const Scalar&lt;T&gt; &amp;, const SizeLeaf &amp;) 
+063    {
+064      // Scalars always conform.
+065      
+066      return true;
+067    }
+068  };
+069  
+070  template&lt;class T, class Allocator&gt;
+071  struct LeafFunctor&lt;vector&lt;T, Allocator&gt;, SizeLeaf&gt;
+072  {
+073    typedef bool Type_t;
+074    inline static
+075    bool apply(const vector&lt;T, Allocator&gt; &amp;v, const SizeLeaf 
&amp;s) 
+076    {
+077      return s(v.size());
+078    }
+079  };
+080  
+081  
//-----------------------------------------------------------------------------
+082  // EvalLeaf1 is used to evaluate expression with vectors.
+083  // (It's already defined for Scalar values.)
+084  
//-----------------------------------------------------------------------------
+085  
+086  template&lt;class T, class Allocator&gt;
+087  struct LeafFunctor&lt;vector&lt;T, Allocator&gt;,EvalLeaf1&gt;
+088  {
+089    typedef T Type_t;
+090    inline static
+091    Type_t apply(const vector&lt;T, Allocator&gt;&amp; vec,const EvalLeaf1 
&amp;f)
+092    {
+093      return vec[f.val1()];
+094    }
+095  };
+096  
+097  
//-----------------------------------------------------------------------------
+098  // Loop over vector and evaluate the expression at each location.
+099  
//-----------------------------------------------------------------------------
+100  
+101  template&lt;class T, class Allocator, class Op, class RHS&gt;
+102  inline void evaluate(vector&lt;T, Allocator&gt; &amp;lhs, const Op 
&amp;op, 
+103    const Expression&lt;RHS&gt; &amp;rhs)
+104  {
+105    if (forEach(rhs, SizeLeaf(lhs.size()), AndCombine()))
+106      {
+107        // We get here if the vectors on the RHS are the same size as those 
on
+108        // the LHS.
+109        
+110        for (int i = 0; i &lt; lhs.size(); ++i)
+111          {
+112            // The actual assignment operation is performed here.
+113            // PETE operator tags all define operator() to perform the 
operation.
+114            // (In this case op performs an assignment.) forEach is used 
+115            // to compute the rhs value.  EvalLeaf1 gets the
+116            // values at each node using random access, and the tag 
+117            // OpCombine tells forEach to use the operator tags in the 
expression 
+118            // to combine values together.
+119  
+120            op(lhs[i], forEach(rhs, EvalLeaf1(i), OpCombine()));
+121          }
+122      }
+123    else
+124      {
+125        cerr &lt;&lt; "Error: LHS and RHS don't conform." &lt;&lt; endl;
+126        exit(1);
+127      }
+128  }
+129  
+130  #endif // PETE_EXAMPLES_VECTOR_EVAL_H
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="vectordefs-in"><h3><tt>VectorDefs.in</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  classes
+002  -----
+003    ARG   = "class T[n]"
+004    CLASS = "vector&lt;T[n]&gt;"
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="vector-cpp"><h3><tt>Vector.cpp</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #include "Eval.h"
+002
+003  int main()
+004  {
+005    int i;
+006    const int n = 10;
+007    vector&lt;int&gt; a, b, c, d;
+008    vector&lt;double&gt; e(n);
+009
+010    for (i = 0; i &lt; n; ++i)
+011    {
+012      a.push_back(i);
+013      b.push_back(2*i);
+014      c.push_back(3*i);
+015      d.push_back(i);
+016    }
+017
+018    assign(b, 2);
+019    assign(d, a + b * c);
+020    a += where(d &lt; 30, b, c);
+021
+022    assign(e, c);
+023    e += e - 4 / (c + 1);
+024
+025    for (i = 0;i &lt; n; ++i)
+026      {
+027        cout &lt;&lt; " a(" &lt;&lt; i &lt;&lt; ") = " &lt;&lt; a[i]
+028          &lt;&lt; " b(" &lt;&lt; i &lt;&lt; ") = " &lt;&lt; b[i]
+029          &lt;&lt; " c(" &lt;&lt; i &lt;&lt; ") = " &lt;&lt; c[i]
+030          &lt;&lt; " d(" &lt;&lt; i &lt;&lt; ") = " &lt;&lt; d[i]
+031          &lt;&lt; " e(" &lt;&lt; i &lt;&lt; ") = " &lt;&lt; e[i]
+032          &lt;&lt; endl;
+033      }
+034  }
+</pre></blockquote><!-- end-line-numbering -->
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="tut-1.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       <td><a href="tut-3.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
diff --git a/tools/pete-2.1.1/html/tut-3.html b/tools/pete-2.1.1/html/tut-3.html
new file mode 100644
index 0000000..66cf324
--- /dev/null
+++ b/tools/pete-2.1.1/html/tut-3.html
@@ -0,0 +1,766 @@
+<!-- tut-3.html : third PETE tutorial -->
+<!-- $Id: tut-3.html,v 1.7 1999/10/29 22:30:29 sa_smith Exp $ -->
+
+<html>
+<head>
+<title>PETE Tutorial 3: Synthesizing Types</title>
+</head>
+<body bgcolor="#ffffff" link="#0099cc" alink="#0099cc" vlink="#cc6600">
+
+<h1><center><img src="banner.gif" width="432" height="108" align="BOTTOM"
+border="0" naturalsizeflag="3"></CENTER></h1>
+
+<center><h1>PETE Tutorial 3<br>Synthesizing Types</h1></center>
+
+<p><b>Contents:</b>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#surface">On the Surface</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#details">Under the Hood</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#summary">Summary</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#source-files">Source Files</a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#rgb-h"><tt>RGB.h</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#rgbdefs-in"><tt>RGBDefs.in</tt></a>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a 
href="#rgb-cpp"><tt>RGB.cpp</tt></a>
+
+<!---------------------------------------------------------------------->
+<a name="intro"><h2>Introduction</h2></a>
+
+<p>This tutorial shows how to use PETE to perform non-arithmetic
+operations on a program as it is being compiled, and in particular how
+to synthesize new types and values by extending PETE's specialized
+templates and operator overloadings.  The problem domain is the three
+primary colors---red, green, and blue---which are combined according
+to three simple rules:
+<ul>
+<li>red and green give blue;
+<li>red and blue give green; and
+<li>green and blue give red.
+</ul>
+While these rules are trivial, the techniques shown below can be used
+to make compilers optimize much more complex expressions on more
+complicated domains.
+
+<p>The source files for this example are included in the
+<tt>examples/RGB</tt> directory of the PETE distribution.  These files
+are:
+
+<ul>
+
+<li><a href="#rgb-h"><tt>RGB.h</tt></a>: defines the tag classes used
+in the example to represent colors, and the rules used to combine
+them.
+
+<li><a href="#rgbdefs-in"><tt>RGBDefs.in</tt></a>: definitions needed
+to automatically generate the overloaded operators required to
+integrate the color classes into PETE.  As in the <a
+href="#tut-1.html#make-expr-operators">first tutorial</a>, this file
+is processed by the <tt>MakeOperators</tt> tool to create a header
+file.
+
+<li><tt>RGBOperators.h</tt>: the file generated by
+<tt>MakeOperators</tt> based on the definitions in
+<tt>RGBDefs.in</tt>.  The file <tt>RGB.h</tt> <tt>#include</tt>s
+<tt>RGBOperators.h</tt>, so that PETE-based programs only need to
+<tt>#include</tt> <tt>RGB.h</tt>, rather than both <tt>RGB.h</tt> and
+<tt>RGBOperators.h</tt>.
+
+<li><a href="#rgb-cpp"><tt>RGB.cpp</tt></a>: a short program that
+shows how to use the definitions in the header files described above
+to create values during compilation.
+
+<li><tt>makefile</tt>: rebuilds the example.
+
+</ul>
+
+<!---------------------------------------------------------------------->
+<a name="surface"><h2>On the Surface</h2></a>
+
+<p>PETE was created to make it easy for programmers to extend
+expression templates.  In particular, PETE lets programmers specify a
+wide range of computations that are to be carried out as the program
+is being compiled.  To do this, the programmer must provide three
+things: the type(s) of object(s) to be operated on, the functor(s) to
+be used to extract values from those objects, and the combiner(s) to
+be used to process those values.
+
+<p>In our example, the values being manipulated are the three primary
+colors red, green, and blue.  Each color is represented by an empty
+tag class, whose only purpose is to act as a strongly-typed
+placeholder as the compiler is instantiating templates.  The three
+classes are defined at the top of <a href="#rgb-h"><tt>RGB.h</tt></a>:
+
+<blockquote><pre>
+017  struct Red { };
+018  struct Green { };
+019  struct Blue { };
+</pre></blockquote>
+
+<p>Our example defines a single functor, called <tt>GetColor</tt>.
+Like <tt>Red</tt>, <tt>Green</tt>, and <tt>Blue</tt>,
+<tt>GetColor</tt> is an empty class, no instances of which are ever
+actually created by a running program.
+
+<p>In addition, <a href="#rgb-h"><tt>RGB.h</tt></a> defines one more
+empty tag class, called <tt>ColorCombine</tt>.  This tag is used to
+signal to the compiler that we are combining colors, rather than (for
+example) adding vectors.  The two definitions are:
+
+<blockquote><pre>
+020  struct GetColor { };
+021  struct ColorCombine { };
+</pre></blockquote>
+
+<p>We have one more empty class to define in order to begin building
+our computational framework.  The class <tt>Operand&lt;&gt;</tt>
+serves as a wrapper around color expressions; its purpose is to
+identify those expressions by giving them a well-known overall type.
+<tt>Operand&lt;&gt;</tt> is therefore similar to the generic PETE
+expression class <tt>Expression&lt;&gt;</tt>, which is used to
+distinguish PETE expressions from other types of expressions.  In our
+case, the <tt>Operand&lt;&gt;</tt> class is used only to wrap up a
+color expression:
+
+<blockquote><pre>
+109  template&lt;class ColorTag&gt;
+110  struct Operand
+111 {
+       // <em>body is empty</em>
+112  };
+</pre></blockquote>
+
+<p>We must now tell PETE how to store an <tt>Operand&lt;&gt;</tt>
+value in the leaf of an expression tree.  The required definition is:
+
+<blockquote><pre>
+119  template&lt;class ColorTag&gt;
+120  struct CreateLeaf&lt;Operand&lt;ColorTag&gt; &gt;
+121  {
+122    typedef Operand&lt;ColorTag&gt; Leaf_t;
+123    inline static
+124    const Leaf_t &amp;make(const Operand&lt;ColorTag&gt; &amp;a) { return 
a; }
+125  };
+</pre></blockquote>
+
+<p>Note how the formal class name used in the template header,
+<tt>ColorTag</tt>, appears as an argument to <tt>Operand&lt;&gt;</tt>
+in the formal parameter list of the <tt>CreateLeaf&lt;&gt;</tt>
+specialization.  This ensures that our definition only applies to
+properly-formed <tt>Operand&lt;&gt;</tt>s.
+
+<p>Note also the <tt>typedef</tt> inside this specialization of
+<tt>CreateLeaf&lt;&gt;</tt>.  PETE's template specialization rules
+require every specialization of <tt>CreateLeaf&lt;&gt;</tt> to have a
+<tt>typedef</tt> called <tt>Leaf_t</tt>, which specifies the type of
+the leaf node.  This is also the declared return type of the
+<tt>static</tt> method <tt>make()</tt>, which constructs a leaf node
+given an actual object (in this case, a color class instance).
+
+<p><tt>CreateLeaf&lt;&gt;</tt> tells PETE how to store values in leaf
+nodes; specializations of <tt>LeafFunctor&lt;&gt;</tt> tell PETE how
+to apply a user-defined functor to those nodes to obtain a value.  As
+before, we template our specialization of <tt>LeafFunctor&lt;&gt;</tt>
+on a formal parameter that will be filled in with a color class, but
+then nest that formal parameter inside <tt>Operand&lt;&gt;</tt> in
+order to ensure that the compiler only tries to use this
+specialization of <tt>LeafFunctor&lt;&gt;</tt> on the right kinds of
+expressions.
+
+<p><tt>LeafFunctor&lt;&gt;</tt> takes a second template parameter,
+which is the functor that is being applied to the leaf node.  In our
+case, we have defined only one functor on colors, namely
+<tt>GetColor</tt>.  Our specialization is therefore:
+
+<blockquote><a name="leaf-functor"><pre>
+132  template&lt;class Color&gt;
+133  struct LeafFunctor&lt;Operand&lt;Color&gt;, GetColor&gt;
+134  {
+135    typedef Color Type_t;
+136  };
+</pre></blockquote>
+
+<p>Unlike the <tt>LeafFunctor&lt;&gt;</tt> specializations in previous
+tutorials, notice that this version does not have an <tt>apply()</tt> 
+method. The reason is that we're using this functor only for compile-time
+type calculations. We're never going to call <tt>apply()</tt> so we
+therefore don't need to go to the trouble of defining it.
+
+<p>Our last task is to define some specializations of
+<tt>Combine2&lt;&gt;</tt>, the combiner that PETE uses to operate on
+values in binary expressions.  Six specializations are defined, for
+each possible ordered combination of different color values.  The
+combiner for <tt>Red</tt> and <tt>Green</tt> is:
+
+<blockquote><a name="combine-2"><pre>
+063  template&lt;class Op&gt;
+064  struct Combine2&lt;Red, Green, Op, ColorCombine&gt;
+065  {
+066    typedef Blue Type_t;
+       // <em>not required</em>  inline static
+       // <em>not required</em>  Type_t combine(Red, Green, Op, ColorCombine)
+       // <em>not required</em>  {
+       // <em>not required</em>    return Blue();
+       // <em>not required</em>  }
+067  };
+</pre></blockquote>
+
+<p>The generic form of <tt>Combine2&lt;&gt;</tt> takes four template
+parameters: the classes of its operands, a tag identifying the C++
+operator from which the expression was created (such as <tt>OpAdd</tt>
+or <tt>OpMultiply</tt>), and a user-defined tag, which can be used to force
+the compiler to calculate a different expression than the one
+apparently specified.  In the case of this example, the first two
+parameters specify the colors being combined, while the last parameter
+signals that these values are being combined according to our own
+rules.  This is the only use for <tt>ColorCombine</tt>.  The formal
+template parameter <tt>Op</tt> is not referenced anywhere in this
+class, so that <em>any</em> binary operation on colors, including
+addition, multiplication, bitwise OR, or left shift, will use the
+user-defined rules.
+
+<p>Combiners typically have two elements: a type <tt>Type_t</tt> that
+gives the type of object formed by combining the operands and a
+<tt>combine</tt> methods that takes the operands and does whatever
+is necessary to produce a <tt>Type_t</tt> object. Like the 
+<tt>LeafFunctor&lt;&gt;</tt> specialization above, we don't need the
+<tt>combine</tt> method here since we're synthesizing types. However,
+we've shown what this function would look like if it were necessary to
+define it.
+
+<p>We can now test that our definitions do the right thing by defining
+three functions to print out the color of an expression involving
+colors.  The function for <tt>Red</tt> takes a constant reference to a
+<tt>Red</tt> object, and prints a simple string:
+
+<blockquote><pre>
+027  inline void calc(const Red &amp;)
+028  {
+029    cout &lt;&lt; "This expression is red." &lt;&lt; endl;
+030  }
+</pre></blockquote>
+
+<p>The other two overloadings of this function, which are defined on
+lines 32-40 for the tag classes <tt>Green</tt> and <tt>Blue</tt>,
+print out "green" and "blue" instead of "red".
+
+<p>Finally, the templated function <tt>printColor&lt;&gt;()</tt> takes
+an expression, evaluates it <em>during compilation</em> by forcing the
+compiler to expand the expression using our <tt>GetColor</tt> and
+<tt>ColorCombine</tt> tags, and then uses the deduced color of the
+expression to select a version of <tt>calc()</tt>, which prints out
+that color's name.  The whole definition is:
+
+<blockquote><pre>
+048  template &lt;class Expr&gt;
+049  void printColor(const Expression&lt;Expr&gt; &amp;expr)
+050  {
+051    typedef typename ForEach&lt;Expression&lt;Expr&gt;, GetColor, 
ColorCombine&gt;::Type_t 
+052      DeducedColor_t;
+053    
+054    calc(DeducedColor_t());
+055  }
+</pre></blockquote>
+
+<p>It is worth looking at this function definition closely.  The
+expansion of <tt>CreateLeaf&lt;&gt::Leaf_t</tt> extracts and formats
+the type of the expression according to our color-based evaluation
+rules.  The expansion of the PETE-defined template
+<tt>ForEach&lt;&gt;</tt> does most of the work.  During its expansion,
+the functor and combiner tags are passed down the parse tree. They are
+used to extract types from the leaves of the parse tree. These types
+are combined at non-leaf nodes to produce new types, which are passed
+up the parse tree. The result is a type---<tt>Red</tt>, <tt>Green</tt>,
+or <tt>Blue</tt>---that is labelled by <tt>DeducedColor_t</tt>. This
+type, in turn, triggers instantiation of an appropriate version of
+<tt>calc()</tt>.
+
+<!---------------------------------------------------------------------->
+<a name="details"><h2>Under the Hood</h2></a>
+
+<p>Let's take a closer look at exactly what happens when
+<tt>printColor()</tt> is instantiated with a color expression, as it
+is at the start of the test program in <a
+href="#rgb-cpp"><tt>RGB.cpp</tt></a>:
+
+<blockquote><pre>
+005    printColor(Operand&lt;Red&gt;() + Operand&lt;Green&gt;());
+</pre></blockquote>
+
+<p>Let's start with the automatically-generated operator overloadings
+in <tt>RGBOperators.h</tt>, which are created using the
+<tt>MakerOperators</tt> tool described in the <a
+href="tut-1.html#make-expr-operators">first tutorial</a>.  The
+overloading for <tt>operator+</tt> is:
+
+<blockquote><pre>
+618  template&lt;class T1,class T2&gt;
+619  inline typename MakeReturn&lt;BinaryNode&lt;OpAdd,
+620    typename CreateLeaf&lt;Operand&lt;T1&gt; &gt;::Leaf_t,
+621    typename CreateLeaf&lt;Operand&lt;T2&gt; &gt;::Leaf_t,
+622    StoreByRefTag&gt; &gt;::Expression_t
+623  operator+(const Operand&lt;T1&gt; &amp; l,const Operand&lt;T2&gt; &amp; r)
+624  {
+625    typedef BinaryNode&lt;OpAdd,
+626      typename CreateLeaf&lt;Operand&lt;T1&gt; &gt;::Leaf_t,
+627      typename CreateLeaf&lt;Operand&lt;T2&gt; &gt;::Leaf_t,
+628      StoreByRefTag&gt; Tree_t;
+629    return MakeReturn&lt;Tree_t&gt;::make(Tree_t(
+630      CreateLeaf&lt;Operand&lt;T1&gt; &gt;::make(l),
+631      CreateLeaf&lt;Operand&lt;T2&gt; &gt;::make(r)));
+632  }
+</pre></blockquote>
+
+<p>Once again, there is less going on here than first meets the eye.
+We are trying to perform computations using C++ template notation, a
+job for which that notation was not designed.  The first things to
+look at are the uses of <tt>CreateLeaf&lt;&gt;::Leaf_t</tt>.  As we
+saw above, in the case of an <tt>Operand&lt;&gt;</tt> with a color
+type argument, <tt>Leaf_t</tt> is just the color type argument wrapped
+in an <tt>Operand&lt;&gt;</tt> type; the
+<tt>CreateLeaf&lt;&gt;</tt> indirection is provided to give
+programmers a hook for doing other things if they so desire.  This
+means that we can simplify the code above as:
+
+<blockquote><pre>
+618  template&lt;class T1,class T2&gt;
+619  inline typename MakeReturn&lt;BinaryNode&lt;OpAdd,
+620    Operand&lt;T1&gt;,
+621    Operand&lt;T2&gt;,
+622    StoreByRefTag&gt; &gt;::Expression_t
+623  operator+(const Operand&lt;T1&gt; &amp; l,const Operand&lt;T2&gt; &amp; r)
+624  {
+625    typedef BinaryNode&lt;OpAdd,
+626      Operand&lt;T1&gt;,
+627      Operand&lt;T2&gt;,
+628      StoreByRefTag&gt; Tree_t;
+629    return MakeReturn&lt;Tree_t&gt;::make(Tree_t(
+630      CreateLeaf&lt;Operand&lt;T1&gt; &gt;::make(l),
+631      CreateLeaf&lt;Operand&lt;T2&gt; &gt;::make(r)));
+632  }
+</pre></blockquote>
+
+<p>By referring back to the arguments of <tt>printColor()</tt>, we can
+replace <tt>T1</tt> with <tt>Red</tt>, and <tt>T2</tt> with
+<tt>Green</tt>:
+
+<blockquote><pre>
+619  inline typename MakeReturn&lt;BinaryNode&lt;OpAdd,
+620    Operand&lt;Red&gt;,
+621    Operand&lt;Green&gt;,
+622    StoreByRefTag&gt; &gt;::Expression_t
+623  operator+(const Operand&lt;Red&gt; &amp; l,const Operand&lt;Green&gt; 
&amp; r)
+624  {
+625    typedef BinaryNode&lt;OpAdd,
+626      Operand&lt;Red&gt;,
+627      Operand&lt;Green&gt;,
+628      StoreByRefTag&gt; Tree_t;
+629    return MakeReturn&lt;Tree_t&gt;::make(Tree_t(
+630      CreateLeaf&lt;Operand&lt;Red&gt; &gt;::make(l),
+631      CreateLeaf&lt;Operand&lt;Green&gt; &gt;::make(r)));
+632  }
+</pre></blockquote>
+
+<p>Looking back at <tt>CreateLeaf&lt;&gt;</tt> once more, we see that
+its <tt>make()</tt> method simply returns its argument.  (In the case
+of STL containers, <tt>make()</tt> could return an iterator over its
+argument.)  Our operator thus becomes simpler still:
+
+<blockquote><pre>
+619  inline typename MakeReturn&lt;BinaryNode&lt;OpAdd,
+620    Operand&lt;Red&gt;,
+621    Operand&lt;Green&gt;,
+622    StoreByRefTag&gt; &gt;::Expression_t
+623  operator+(const Operand&lt;Red&gt; &amp; l,const Operand&lt;Green&gt; 
&amp; r)
+624  {
+625    typedef BinaryNode&lt;OpAdd,
+626      Operand&lt;Red&gt;,
+627      Operand&lt;Green&gt;,
+628      StoreByRefTag&gt; Tree_t;
+629    return MakeReturn&lt;Tree_t&gt;::make(Tree_t(l, r));
+632  }
+</pre></blockquote>
+
+<p>To simplify this further, we must turn to the definition of
+<tt>MakeReturn&lt;&gt;</tt> in PETE's <tt>CreateLeaf.h</tt>:
+
+<blockquote><pre>
+136  template&lt;class T&gt;
+137  struct MakeReturn
+138  {
+139    typedef Expression&lt;T&gt; Expression_t;
+140    inline static
+141    Expression_t make(const T &amp;a) { return Expression_t(a); }
+142  };
+</pre></blockquote>
+
+<p>The default expansion of <tt>MakeReturn&lt;T&gt;::Expression_t</tt>
+is simply <tt>Expression&lt;T&gt;</tt>, and
+<tt>MakeReturn&lt;&gt;</tt>'s <tt>make()</tt> method just returns its
+argument, appropriately typed.  This may seem unnecessary, but as the
+PETE header files themselves explain:
+
+<blockquote>
+<tt>MakeReturn&lt;&gt;</tt> is used to wrap expression objects
+(<tt>UnaryNode&lt;&gt;</tt>, <tt>BinaryNode&lt;&gt;</tt> etc.) inside
+an <tt>Expression&lt;&gt;</tt> object.  Usually this indirection is
+unnecessary, but the indirection allows users to specify their own
+approach to storing trees.  By specializing
+<tt>MakeReturn&lt;UnaryNode&lt;&gt;&gt;</tt>,
+<tt>MakeReturn&lt;BinaryNode&lt;&gt;&gt;</tt>, etc. you could cause
+the expression trees to be stored in another format.  For example,
+POOMA stores expressions inside <tt>Array</tt>s, so the result of
+<tt>Array+Array</tt> is another <tt>Array</tt>.
+</blockquote>
+
+<p>We can now expand our operator one more level:
+
+<blockquote><pre>
+623  operator+(const Operand&lt;Red&gt; &amp; l,const Operand&lt;Green&gt; 
&amp; r)
+624  {
+625    typedef BinaryNode&lt;OpAdd,
+626      Operand&lt;Red&gt;,
+627      Operand&lt;Green&gt;,
+628      StoreByRefTag&gt; Tree_t;
+629    return Expression&lt;Tree_t&gt;(Tree_t(l, r));
+632  }
+</pre></blockquote>
+
+<p>Note that we are no longer bothering to show the return type of the
+function, since it is the same as the type of the <tt>return</tt>
+statement inside the function body.
+
+<p>With this in hand, let's return to <tt>printColor()</tt>:
+
+<blockquote><pre>
+048  template &lt;class Expr&gt;
+049  void printColor(const Expression&lt;Expr&gt; &amp;expr)
+050  {
+051    typedef typename ForEach&lt;Expression&lt;Expr&gt;, GetColor, 
ColorCombine&gt;::Type_t 
+052      DeducedColor_t;
+053    
+054    calc(DeducedColor_t());
+055  }
+</pre></blockquote>
+
+<p>The formal parameter <tt>expr</tt> is an instance of
+<tt>Expression&lt;BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;
 &gt;</tt>,
+with an <tt>Operand&lt;Red&gt;</tt> and a <tt>Operand&lt;Green&gt;</tt> as its 
left and right
+members. This type is passed to PETE's <tt>ForEach</tt> class. We this class 
rather than
+the <tt>forEach</tt> function because we are synthesizing types. Referring to 
the PETE 
+header file <tt>ForEach.h</tt>, we see that the most specific matching 
definition is:
+
+<blockquote><pre>
+146  template&lt;class T, class FTag, class CTag&gt;
+147  struct ForEach&lt;Expression&lt;T&gt;, FTag, CTag&gt;
+148  {
+149    typedef typename ForEach&lt;T, FTag, CTag&gt;::Type_t Type_t;
+150    inline static
+151    Type_t apply(const Expression&lt;T&gt; &amp;expr, const FTag &f, 
+152                 const CTag &amp;c) 
+153    {
+154      return ForEach&lt;T, FTag, CTag&gt;::apply(expr.expression(), f, c);
+155    }
+156  };
+</pre></blockquote>
+
+<p> As we've mentioned, we are synthesizing types in this example so the 
<tt>apply</tt>
+function (lines 150-155) will never actually be called. Therefore, in 
subsequent 
+definitions, we'll omit this for brevity. The important thing to note is that
+the <tt>typedef</tt> of <tt>Type_t</tt> is generated by extracting the type
+wrapped by the <tt>Expression&lt;&gt;</tt> object and using that in another
+<tt>ForEach</tt>. Recall that this wrapped type in our example is
+<tt>BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;</tt>.
+This means that the relevant <tt>ForEach</tt> definition is
+ 
+<blockquote><pre>
+107  template&lt;class Op, class A, class B, class ST, class FTag, class 
CTag&gt;
+108  struct ForEach&lt;BinaryNode&lt;Op, A, B, ST&gt;, FTag, CTag &gt;
+109  {
+110    typedef typename ForEach&lt;A, FTag, CTag&gt;::Type_t TypeA_t;
+111    typedef typename ForEach&lt;B, FTag, CTag&gt;::Type_t TypeB_t;
+112    typedef typename Combine2&lt;TypeA_t, TypeB_t, Op, CTag&gt;::Type_t 
Type_t;
+122  };
+</pre></blockquote>
+
+<p> Now is a good time to perform some type substitutions. The result is
+
+<blockquote><pre>
+107  template&lt;&gt;
+108  struct 
ForEach&lt;BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;,
 OpAdd, GetColor, ColorCombine&gt;
+109  {
+110    typedef ForEach&lt;Operand&lt;Red&gt;, GetColor, 
ColorCombine&gt;::Type_t TypeA_t;
+111    typedef ForEach&lt;Operand&lt;Green&gt;, GetColor, 
ColorCombine&gt;::Type_t TypeB_t;
+112    typedef Combine2&lt;TypeA_t, TypeB_t, OpAdd, ColorCombine&gt;::Type_t 
Type_t;
+122  };
+</pre></blockquote>
+
+<p> To proceed, we need to resolve the <tt>ForEach</tt> types in lines 110 and 
111. 
+Looking through <tt>ForEach.h</tt>, we see that the only partial 
specialization that
+matches is the most general version of <tt>ForEach</tt>:
+
+<blockquote><pre>
+074  template&lt;class Expr, class FTag, class CTag&gt;
+075  struct ForEach
+076  {
+077    typedef typename LeafFunctor&lt;Expr, FTag&gt;::Type_t Type_t;
+083  };
+</pre></blockquote>
+
+<p> This version of <tt>ForEach</tt> is meant to be used for leaves. It simply 
+passes the task to the <tt>LeafFunctor</tt> class. Substituting this above 
gives:
+
+<blockquote><pre>
+107  template&lt;&gt;
+108  struct 
ForEach&lt;BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;,
 OpAdd, GetColor, ColorCombine&gt;
+109  {
+110    typedef LeafFunctor&lt;Operand&lt;Red&gt;, GetColor&gt;::Type_t TypeA_t;
+111    typedef LeafFunctor&lt;Operand&lt;Green&gt;, GetColor&gt;::Type_t 
TypeB_t;
+112    typedef Combine2&lt;TypeA_t, TypeB_t, OpAdd, ColorCombine&gt;::Type_t 
Type_t;
+122  };
+</pre></blockquote>
+
+<p>This is starting to look promising: we now have some invocations of
+<tt>Combine2&lt;&gt;</tt>, the combiner that was overridden in <a
+href="#rgb-h"><tt>RGB.h</tt></a>, and some uses of
+<tt>LeafFunctor&lt;&gt;</tt>, which was also overridden.  In fact, as
+we saw <a href="#leaf-functor">earlier</a>, when
+<tt>LeafFunctor&lt;&gt;</tt> has an <tt>Operand&lt;&gt;</tt> as 
+its first type argument, and the <tt>GetColor</tt> functor tag as its 
+second argument, its <tt>Type_t</tt> definition is just its color 
+argument.  We can therefore simplify the definition of 
<tt>ForEach&lt;&gt;</tt> on
+binary nodes to be:
+
+<blockquote><pre>
+107  template&lt;&gt;
+108  struct 
ForEach&lt;BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;,
 OpAdd, GetColor, ColorCombine&gt;
+109  {
+112    typedef Combine2&lt;Red, Green, OpAdd, ColorCombine&gt;::Type_t Type_t;
+122  };
+</pre></blockquote>
+
+<p> The compiler can now match the specialized definition of
+<tt>Combine2&lt;&gt;</tt> shown <a href="#combine-2">earlier</a>
+against this code. Thus, the return type of the expansion of 
<tt>ForEach&lt;&gt;</tt>
+inside of <tt>printColor</tt> is <tt>Blue</tt>. This, in turn, is used to 
select
+the <tt>calc<Blue>()</tt> function, which simply prints out the word "blue".
+
+<p> This may seem like a lot of work simply to print out a different word.
+However, it illustrates an extremely powerful capability of PETE: selecting
+custom algorithms at compile time based on the a synthesized type. All of the
+type computations outlined above are performed at compile-time. Also, the
+various <tt>calc</tt> functions are inlined. This means that the compiler
+will generate a custom <tt>printColor</tt> function for our expression that
+is equivalent to
+
+<blockquote><pre>
+048  template &lt&gt;
+049  void printColor(const 
Expression&lt;BinaryNode&lt;OpAdd,Operand&lt;Red&gt;,Operand&lt;Green&gt;,StoreByRefTag&gt;
 &gt; &amp;expr)
+050  {
+054    cout &lt;&lt; "This expression is blue." &lt;&lt; endl;
+055  }
+</pre></blockquote>
+
+<p> This is an example of <em>compile-time polymorphism</em>. We've used the 
C++ compiler
+to generate special code based on the types we pass into a function rather 
than making
+a run-time choice of a function to call. This can lead to the generation of 
extremely
+efficient code.
+
+<!---------------------------------------------------------------------->
+<a name="summary"><h2>Summary</h2></a>
+
+<p>This tutorial has shown how to extend PETE to synthesize type
+information during compilation by performing symbolic manipulations on
+parse trees.  The user-level definitions required are more complex
+than those needed to use PETE simply to optimize expression
+evaluation, but tracing through their operation shows how PETE
+exploit's the C++ compiler's pattern matching and type expansion
+facilities to do what it does.
+
+<!---------------------------------------------------------------------->
+<a name="source-files"><h2>Source Files</h2></a>
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="rgb-h"><h3><tt>RGB.h</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #ifndef PETE_EXAMPLES_RGB_RGB_H
+002  #define PETE_EXAMPLES_RGB_RGB_H
+003
+004  
//-----------------------------------------------------------------------------
+005  // Include files
+006  
//-----------------------------------------------------------------------------
+007
+008  #include &lt;iostream.h&gt;
+009
+010  #include "PETE/PETE.h"
+011
+012  
//-----------------------------------------------------------------------------
+013  // Tag classes representing colors. Also, a functor for getting a color 
from
+014  // a leaf and a combiner for combining colors.
+015  
//-----------------------------------------------------------------------------
+016
+017  struct Red { };
+018  struct Green { };
+019  struct Blue { };
+020  struct GetColor { };
+021  struct ColorCombine { };
+022
+023  
//-----------------------------------------------------------------------------
+024  // A few overloaded functions that print out color names given a type.
+025  
//-----------------------------------------------------------------------------
+026
+027  inline void calc(const Red &amp;)
+028  {
+029    cout &lt;&lt; "This expression is red." &lt;&lt; endl;
+030  }
+031
+032  inline void calc(const Blue &amp;)
+033  {
+034    cout &lt;&lt; "This expression is blue." &lt;&lt; endl;
+035  }
+036
+037  inline void calc(const Green &amp;)
+038  {
+039    cout &lt;&lt; "This expression is green." &lt;&lt; endl;
+040  }
+041
+042  
//-----------------------------------------------------------------------------
+043  // A function that deduces a color at compile time and calls a special
+044  // function based on the value.
+045  //
+046  
//-----------------------------------------------------------------------------
+047
+048  template &lt;class Expr&gt;
+049  void printColor(const Expression&lt;Expr&gt; &amp;expr)
+050  {
+051    typedef typename ForEach&lt;Expression&lt;Expr&gt;, GetColor, 
ColorCombine&gt;::Type_t 
+052      DeducedColor_t;
+053    
+054    calc(DeducedColor_t());
+055  }
+056
+057  
//-----------------------------------------------------------------------------
+058  // A set of combiners that produce new colors according to some arbitrary
+059  // rules: red &amp; green give blue, red &amp; blue give green, blue and 
green give 
+060  // red.
+061  
//-----------------------------------------------------------------------------
+062
+063  template&lt;class Op&gt;
+064  struct Combine2&lt;Red, Green, Op, ColorCombine&gt;
+065  {
+066    typedef Blue Type_t;
+067  };
+068
+069  template&lt;class Op&gt;
+070  struct Combine2&lt;Red, Blue, Op, ColorCombine&gt;
+071  {
+072    typedef Green Type_t;
+073  };
+074
+075  template&lt;class Op&gt;
+076  struct Combine2&lt;Green, Blue, Op, ColorCombine&gt;
+077  {
+078    typedef Red Type_t;
+079  };
+080
+081  template&lt;class Op&gt;
+082  struct Combine2&lt;Green, Red, Op, ColorCombine&gt;
+083  {
+084    typedef Blue Type_t;
+085  };
+086
+087  template&lt;class Op&gt;
+088  struct Combine2&lt;Blue, Green, Op, ColorCombine&gt;
+089  {
+090    typedef Red Type_t;
+091  };
+092
+093  template&lt;class Op&gt;
+094  struct Combine2&lt;Blue, Red, Op, ColorCombine&gt;
+095  {
+096    typedef Green Type_t;
+097  };
+098
+099  template&lt;class C1, class C2, class Op&gt;
+100  struct Combine2&lt;C1, C2, Op, ColorCombine&gt;
+101  {
+102    typedef C1 Type_t;
+103  };
+104
+105  
//-----------------------------------------------------------------------------
+106  // A class that has a single template parameter that specifies a color.
+107  
//-----------------------------------------------------------------------------
+108
+109  template&lt;class ColorTag&gt;
+110  struct Operand
+111  {
+112  };
+113
+114  
//-----------------------------------------------------------------------------
+115  // We need to specialize CreateLeaf&lt;T&gt; for Operand, so that 
operators
+116  // know what to stick in the leaves of the expression tree.
+117  
//-----------------------------------------------------------------------------
+118
+119  template&lt;class ColorTag&gt;
+120  struct CreateLeaf&lt;Operand&lt;ColorTag&gt; &gt;
+121  {
+122    typedef Operand&lt;ColorTag&gt; Leaf_t;
+123    inline static
+124    const Leaf_t &amp;make(const Operand&lt;ColorTag&gt; &amp;a) { return 
a; }
+125  };
+126
+127  
//-----------------------------------------------------------------------------
+128  // Specialization of LeafFunctor class for applying the getting the 
"color"
+129  // of an operand.
+130  
//-----------------------------------------------------------------------------
+131
+132  template&lt;class Color&gt;
+133  struct LeafFunctor&lt;Operand&lt;Color&gt;, GetColor&gt;
+134  {
+135    typedef Color Type_t;
+136  };
+137
+138  #include "RGBOperators.h"
+139
+140  #endif // PETE_EXAMPLES_RGB_RGB_H
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="rgbdefs-in"><h3><tt>RGBDefs.in</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  classes
+002  -----
+003    ARG   = "class T[n]"
+004    CLASS = "Operand&lt;T[n]&gt;"
+</pre></blockquote><!-- end-line-numbering -->
+
+<! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->
+<a name="rgb-cpp"><h3><tt>RGB.cpp</tt></h3></a>
+
+<blockquote><pre><!-- start-line-numbering -->
+001  #include "RGB.h"
+002  
+003  int main()
+004  {
+005    printColor(Operand&lt;Red&gt;() + Operand&lt;Green&gt;());
+006    printColor(Operand&lt;Red&gt;() + Operand&lt;Green&gt;() + 
Operand&lt;Blue&gt;());
+007    printColor(Operand&lt;Red&gt;() + (Operand&lt;Green&gt;() + 
Operand&lt;Blue&gt;()));
+008  }
+</pre></blockquote><!-- end-line-numbering -->
+
+<br>
+<br>
+<center>
+<table>
+<tr>   <td><a href="tut-2.html">[Prev]</a>
+       <td><a href="index.html">[Home]</a>
+       <td><a href="stl.html">[Next]</a>
+       </tr>
+</table>
+<em>
+<a href="http://www.acl.lanl.gov/pete/";>Copyright &copy; Los Alamos National 
Laboratory 1999</a>
+</em>
+</center>
+
+</body>
+</html>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]