toon-members
[Top][All Lists]
Advanced

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

[Toon-members] TooN TooN.h Doxyfile Makefile.in doc/documentat...


From: Edward Rosten
Subject: [Toon-members] TooN TooN.h Doxyfile Makefile.in doc/documentat...
Date: Tue, 18 Aug 2009 14:15:40 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        09/08/18 14:15:39

Modified files:
        .              : TooN.h Doxyfile Makefile.in 
        doc            : documentation.h 
Added files:
        .              : make_data_functions.awk 
        internal       : data_functions.hh data.hh 
        test           : test_data.cc 

Log message:
        Fill matrices from data in a less objectionable way.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/TooN.h?cvsroot=toon&r1=1.50&r2=1.51
http://cvs.savannah.gnu.org/viewcvs/TooN/Doxyfile?cvsroot=toon&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/TooN/Makefile.in?cvsroot=toon&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/TooN/make_data_functions.awk?cvsroot=toon&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/data_functions.hh?cvsroot=toon&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/data.hh?cvsroot=toon&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/TooN/test/test_data.cc?cvsroot=toon&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/documentation.h?cvsroot=toon&r1=1.32&r2=1.33

Patches:
Index: TooN.h
===================================================================
RCS file: /cvsroot/toon/TooN/TooN.h,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- TooN.h      27 Jul 2009 16:39:43 -0000      1.50
+++ TooN.h      18 Aug 2009 14:15:39 -0000      1.51
@@ -260,6 +260,9 @@
 
 #include <TooN/internal/diagmatrix.h>
 
+#include <TooN/internal/data.hh>
+#include <TooN/internal/data_functions.hh>
+
 #include <TooN/helpers.h>
 
 #endif

Index: Doxyfile
===================================================================
RCS file: /cvsroot/toon/TooN/Doxyfile,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- Doxyfile    27 Jul 2009 16:39:42 -0000      1.9
+++ Doxyfile    18 Aug 2009 14:15:39 -0000      1.10
@@ -245,7 +245,7 @@
 # to NO (the default) then the documentation will be excluded. 
 # Set it to YES to include the internal documentation.
 
-INTERNAL_DOCS          = YES
+INTERNAL_DOCS          = NO
 
 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
 # file names in lower-case letters. If set to YES upper-case letters are also 
@@ -412,7 +412,7 @@
 # excluded from the INPUT source files. This way you can easily exclude a 
 # subdirectory from a directory tree whose root is specified with the INPUT 
tag.
 
-EXCLUDE                =  wls_cholesky.h lapack.h internal/make_vector.hh 
internal/builtin_typeof.h
+EXCLUDE                =  wls_cholesky.h lapack.h internal/make_vector.hh 
internal/builtin_typeof.h internal/data_functions.hh
 
 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
directories 
 # that are symbolic links (a Unix filesystem feature) are excluded from the 
input.

Index: Makefile.in
===================================================================
RCS file: /cvsroot/toon/TooN/Makefile.in,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- Makefile.in 24 Jul 2009 15:03:24 -0000      1.8
+++ Makefile.in 18 Aug 2009 14:15:39 -0000      1.9
@@ -20,6 +20,8 @@
        cp -r optimization $(hdr)/
        cp -r internal $(hdr)/
 
+internal/data_functions.hh:  make_data_functions.awk
+       awk -f make_data_functions.awk > $@
 internal/make_vector.hh:  make_make_vector.awk
        awk -f make_make_vector.awk > $@
 

Index: doc/documentation.h
===================================================================
RCS file: /cvsroot/toon/TooN/doc/documentation.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- doc/documentation.h 27 Jul 2009 16:39:43 -0000      1.32
+++ doc/documentation.h 18 Aug 2009 14:15:39 -0000      1.33
@@ -247,10 +247,15 @@
                @endcode
                note that you need to specify the size in the dynamic case.
 
+               Matrices can be filled from data in row-major order:
+               @code
+                       Matrix<3> m = data(1, 2, 3, 4, 5, 6, 7, 8, 9);
+               @endcode
+
                A less general, but visually more pleasing syntax can also be 
used:
                @code
                        Vector<5> v;
-                       Fill(v) v = 1,2,3,4,5; 
+                       Fill(v) = 1,2,3,4,5; 
 
                        Matrix<3,3> m;
                        Fill(m) = 1, 2, 3, 

Index: make_data_functions.awk
===================================================================
RCS file: make_data_functions.awk
diff -N make_data_functions.awk
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ make_data_functions.awk     18 Aug 2009 14:15:39 -0000      1.1
@@ -0,0 +1,35 @@
+BEGIN{
+       N=100
+       print "//Mechanically generate code. Do not edit."
+       print "namespace TooN {"
+       print "//modify make_data.awk and run make internal/data_functions.hh"
+       for(i=1; i <= N; i++)
+       {
+               printf "inline Operator<Internal::Data<" i ", double> > 
Data(double x1"
+               
+               for(j=2; j<= i; j++)
+                       printf ", double x"j
+
+               print "){"
+               print  "  Operator<Internal::Data<"i", double> > d;"
+               for(j=1; j<= i; j++)
+                       print "  d.vals["j-1"] = x"j";"
+
+               print "  return d;"
+               print "}"
+
+               printf "template<typename Precision> inline 
Operator<Internal::Data<" i ", Precision> > Data(const Precision& x1"
+               
+               for(j=2; j<= i; j++)
+                       printf ", const Precision& x"j
+
+               print "){"
+               print  "  Operator<Internal::Data<"i", Precision> > d;"
+               for(j=1; j<= i; j++)
+                       print "  d.vals["j-1"] = x"j";"
+
+               print "  return d;"
+               print "}"
+       }
+       print "}"
+}

Index: internal/data_functions.hh
===================================================================
RCS file: internal/data_functions.hh
diff -N internal/data_functions.hh
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ internal/data_functions.hh  18 Aug 2009 14:15:39 -0000      1.1
@@ -0,0 +1,10904 @@
+//Mechanically generate code. Do not edit.
+namespace TooN {
+//modify make_data.awk and run make internal/data_functions.hh
+inline Operator<Internal::Data<1, double> > Data(double x1){
+  Operator<Internal::Data<1, double> > d;
+  d.vals[0] = x1;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<1, Precision> > 
Data(const Precision& x1){
+  Operator<Internal::Data<1, Precision> > d;
+  d.vals[0] = x1;
+  return d;
+}
+inline Operator<Internal::Data<2, double> > Data(double x1, double x2){
+  Operator<Internal::Data<2, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<2, Precision> > 
Data(const Precision& x1, const Precision& x2){
+  Operator<Internal::Data<2, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  return d;
+}
+inline Operator<Internal::Data<3, double> > Data(double x1, double x2, double 
x3){
+  Operator<Internal::Data<3, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<3, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3){
+  Operator<Internal::Data<3, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  return d;
+}
+inline Operator<Internal::Data<4, double> > Data(double x1, double x2, double 
x3, double x4){
+  Operator<Internal::Data<4, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<4, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4){
+  Operator<Internal::Data<4, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  return d;
+}
+inline Operator<Internal::Data<5, double> > Data(double x1, double x2, double 
x3, double x4, double x5){
+  Operator<Internal::Data<5, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<5, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5){
+  Operator<Internal::Data<5, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  return d;
+}
+inline Operator<Internal::Data<6, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6){
+  Operator<Internal::Data<6, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<6, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6){
+  Operator<Internal::Data<6, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  return d;
+}
+inline Operator<Internal::Data<7, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7){
+  Operator<Internal::Data<7, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<7, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7){
+  Operator<Internal::Data<7, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  return d;
+}
+inline Operator<Internal::Data<8, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8){
+  Operator<Internal::Data<8, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<8, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8){
+  Operator<Internal::Data<8, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  return d;
+}
+inline Operator<Internal::Data<9, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9){
+  Operator<Internal::Data<9, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<9, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9){
+  Operator<Internal::Data<9, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  return d;
+}
+inline Operator<Internal::Data<10, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10){
+  Operator<Internal::Data<10, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<10, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10){
+  Operator<Internal::Data<10, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  return d;
+}
+inline Operator<Internal::Data<11, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11){
+  Operator<Internal::Data<11, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<11, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11){
+  Operator<Internal::Data<11, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  return d;
+}
+inline Operator<Internal::Data<12, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12){
+  Operator<Internal::Data<12, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<12, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12){
+  Operator<Internal::Data<12, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  return d;
+}
+inline Operator<Internal::Data<13, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13){
+  Operator<Internal::Data<13, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<13, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13){
+  Operator<Internal::Data<13, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  return d;
+}
+inline Operator<Internal::Data<14, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14){
+  Operator<Internal::Data<14, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<14, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14){
+  Operator<Internal::Data<14, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  return d;
+}
+inline Operator<Internal::Data<15, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15){
+  Operator<Internal::Data<15, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<15, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15){
+  Operator<Internal::Data<15, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  return d;
+}
+inline Operator<Internal::Data<16, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16){
+  Operator<Internal::Data<16, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<16, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16){
+  Operator<Internal::Data<16, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  return d;
+}
+inline Operator<Internal::Data<17, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17){
+  Operator<Internal::Data<17, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<17, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17){
+  Operator<Internal::Data<17, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  return d;
+}
+inline Operator<Internal::Data<18, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18){
+  Operator<Internal::Data<18, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<18, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18){
+  Operator<Internal::Data<18, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  return d;
+}
+inline Operator<Internal::Data<19, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19){
+  Operator<Internal::Data<19, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<19, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19){
+  Operator<Internal::Data<19, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  return d;
+}
+inline Operator<Internal::Data<20, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20){
+  Operator<Internal::Data<20, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<20, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20){
+  Operator<Internal::Data<20, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  return d;
+}
+inline Operator<Internal::Data<21, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21){
+  Operator<Internal::Data<21, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<21, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21){
+  Operator<Internal::Data<21, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  return d;
+}
+inline Operator<Internal::Data<22, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22){
+  Operator<Internal::Data<22, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<22, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22){
+  Operator<Internal::Data<22, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  return d;
+}
+inline Operator<Internal::Data<23, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23){
+  Operator<Internal::Data<23, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<23, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23){
+  Operator<Internal::Data<23, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  return d;
+}
+inline Operator<Internal::Data<24, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24){
+  Operator<Internal::Data<24, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<24, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24){
+  Operator<Internal::Data<24, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  return d;
+}
+inline Operator<Internal::Data<25, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25){
+  Operator<Internal::Data<25, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<25, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25){
+  Operator<Internal::Data<25, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  return d;
+}
+inline Operator<Internal::Data<26, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26){
+  Operator<Internal::Data<26, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<26, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26){
+  Operator<Internal::Data<26, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  return d;
+}
+inline Operator<Internal::Data<27, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27){
+  Operator<Internal::Data<27, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<27, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27){
+  Operator<Internal::Data<27, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  return d;
+}
+inline Operator<Internal::Data<28, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28){
+  Operator<Internal::Data<28, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<28, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28){
+  Operator<Internal::Data<28, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  return d;
+}
+inline Operator<Internal::Data<29, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29){
+  Operator<Internal::Data<29, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<29, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29){
+  Operator<Internal::Data<29, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  return d;
+}
+inline Operator<Internal::Data<30, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30){
+  Operator<Internal::Data<30, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<30, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30){
+  Operator<Internal::Data<30, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  return d;
+}
+inline Operator<Internal::Data<31, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31){
+  Operator<Internal::Data<31, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<31, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31){
+  Operator<Internal::Data<31, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  return d;
+}
+inline Operator<Internal::Data<32, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32){
+  Operator<Internal::Data<32, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<32, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32){
+  Operator<Internal::Data<32, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  return d;
+}
+inline Operator<Internal::Data<33, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33){
+  Operator<Internal::Data<33, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<33, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33){
+  Operator<Internal::Data<33, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  return d;
+}
+inline Operator<Internal::Data<34, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34){
+  Operator<Internal::Data<34, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<34, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34){
+  Operator<Internal::Data<34, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  return d;
+}
+inline Operator<Internal::Data<35, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35){
+  Operator<Internal::Data<35, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<35, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35){
+  Operator<Internal::Data<35, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  return d;
+}
+inline Operator<Internal::Data<36, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36){
+  Operator<Internal::Data<36, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<36, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36){
+  Operator<Internal::Data<36, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  return d;
+}
+inline Operator<Internal::Data<37, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37){
+  Operator<Internal::Data<37, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<37, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37){
+  Operator<Internal::Data<37, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  return d;
+}
+inline Operator<Internal::Data<38, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38){
+  Operator<Internal::Data<38, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<38, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38){
+  Operator<Internal::Data<38, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  return d;
+}
+inline Operator<Internal::Data<39, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39){
+  Operator<Internal::Data<39, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<39, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39){
+  Operator<Internal::Data<39, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  return d;
+}
+inline Operator<Internal::Data<40, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40){
+  Operator<Internal::Data<40, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<40, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40){
+  Operator<Internal::Data<40, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  return d;
+}
+inline Operator<Internal::Data<41, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41){
+  Operator<Internal::Data<41, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<41, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41){
+  Operator<Internal::Data<41, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  return d;
+}
+inline Operator<Internal::Data<42, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42){
+  Operator<Internal::Data<42, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<42, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42){
+  Operator<Internal::Data<42, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  return d;
+}
+inline Operator<Internal::Data<43, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43){
+  Operator<Internal::Data<43, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<43, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43){
+  Operator<Internal::Data<43, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  return d;
+}
+inline Operator<Internal::Data<44, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44){
+  Operator<Internal::Data<44, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<44, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44){
+  Operator<Internal::Data<44, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  return d;
+}
+inline Operator<Internal::Data<45, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45){
+  Operator<Internal::Data<45, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<45, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45){
+  Operator<Internal::Data<45, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  return d;
+}
+inline Operator<Internal::Data<46, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46){
+  Operator<Internal::Data<46, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<46, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46){
+  Operator<Internal::Data<46, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  return d;
+}
+inline Operator<Internal::Data<47, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47){
+  Operator<Internal::Data<47, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<47, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47){
+  Operator<Internal::Data<47, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  return d;
+}
+inline Operator<Internal::Data<48, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48){
+  Operator<Internal::Data<48, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<48, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48){
+  Operator<Internal::Data<48, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  return d;
+}
+inline Operator<Internal::Data<49, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49){
+  Operator<Internal::Data<49, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<49, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49){
+  Operator<Internal::Data<49, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  return d;
+}
+inline Operator<Internal::Data<50, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50){
+  Operator<Internal::Data<50, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<50, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50){
+  Operator<Internal::Data<50, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  return d;
+}
+inline Operator<Internal::Data<51, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51){
+  Operator<Internal::Data<51, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<51, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51){
+  Operator<Internal::Data<51, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  return d;
+}
+inline Operator<Internal::Data<52, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52){
+  Operator<Internal::Data<52, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<52, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52){
+  Operator<Internal::Data<52, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  return d;
+}
+inline Operator<Internal::Data<53, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53){
+  Operator<Internal::Data<53, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<53, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53){
+  Operator<Internal::Data<53, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  return d;
+}
+inline Operator<Internal::Data<54, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54){
+  Operator<Internal::Data<54, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<54, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54){
+  Operator<Internal::Data<54, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  return d;
+}
+inline Operator<Internal::Data<55, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55){
+  Operator<Internal::Data<55, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<55, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55){
+  Operator<Internal::Data<55, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  return d;
+}
+inline Operator<Internal::Data<56, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56){
+  Operator<Internal::Data<56, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<56, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56){
+  Operator<Internal::Data<56, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  return d;
+}
+inline Operator<Internal::Data<57, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57){
+  Operator<Internal::Data<57, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<57, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57){
+  Operator<Internal::Data<57, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  return d;
+}
+inline Operator<Internal::Data<58, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58){
+  Operator<Internal::Data<58, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<58, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58){
+  Operator<Internal::Data<58, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  return d;
+}
+inline Operator<Internal::Data<59, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59){
+  Operator<Internal::Data<59, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<59, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59){
+  Operator<Internal::Data<59, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  return d;
+}
+inline Operator<Internal::Data<60, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60){
+  Operator<Internal::Data<60, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<60, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60){
+  Operator<Internal::Data<60, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  return d;
+}
+inline Operator<Internal::Data<61, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61){
+  Operator<Internal::Data<61, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<61, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61){
+  Operator<Internal::Data<61, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  return d;
+}
+inline Operator<Internal::Data<62, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62){
+  Operator<Internal::Data<62, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<62, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62){
+  Operator<Internal::Data<62, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  return d;
+}
+inline Operator<Internal::Data<63, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63){
+  Operator<Internal::Data<63, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<63, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63){
+  Operator<Internal::Data<63, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  return d;
+}
+inline Operator<Internal::Data<64, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64){
+  Operator<Internal::Data<64, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<64, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64){
+  Operator<Internal::Data<64, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  return d;
+}
+inline Operator<Internal::Data<65, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65){
+  Operator<Internal::Data<65, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<65, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65){
+  Operator<Internal::Data<65, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  return d;
+}
+inline Operator<Internal::Data<66, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66){
+  Operator<Internal::Data<66, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<66, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66){
+  Operator<Internal::Data<66, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  return d;
+}
+inline Operator<Internal::Data<67, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67){
+  Operator<Internal::Data<67, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<67, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67){
+  Operator<Internal::Data<67, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  return d;
+}
+inline Operator<Internal::Data<68, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68){
+  Operator<Internal::Data<68, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<68, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68){
+  Operator<Internal::Data<68, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  return d;
+}
+inline Operator<Internal::Data<69, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69){
+  Operator<Internal::Data<69, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<69, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69){
+  Operator<Internal::Data<69, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  return d;
+}
+inline Operator<Internal::Data<70, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70){
+  Operator<Internal::Data<70, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<70, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70){
+  Operator<Internal::Data<70, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  return d;
+}
+inline Operator<Internal::Data<71, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71){
+  Operator<Internal::Data<71, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<71, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71){
+  Operator<Internal::Data<71, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  return d;
+}
+inline Operator<Internal::Data<72, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72){
+  Operator<Internal::Data<72, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<72, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72){
+  Operator<Internal::Data<72, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  return d;
+}
+inline Operator<Internal::Data<73, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73){
+  Operator<Internal::Data<73, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<73, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73){
+  Operator<Internal::Data<73, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  return d;
+}
+inline Operator<Internal::Data<74, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74){
+  Operator<Internal::Data<74, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<74, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74){
+  Operator<Internal::Data<74, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  return d;
+}
+inline Operator<Internal::Data<75, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75){
+  Operator<Internal::Data<75, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<75, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75){
+  Operator<Internal::Data<75, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  return d;
+}
+inline Operator<Internal::Data<76, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76){
+  Operator<Internal::Data<76, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<76, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76){
+  Operator<Internal::Data<76, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  return d;
+}
+inline Operator<Internal::Data<77, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77){
+  Operator<Internal::Data<77, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<77, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77){
+  Operator<Internal::Data<77, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  return d;
+}
+inline Operator<Internal::Data<78, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78){
+  Operator<Internal::Data<78, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<78, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78){
+  Operator<Internal::Data<78, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  return d;
+}
+inline Operator<Internal::Data<79, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79){
+  Operator<Internal::Data<79, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<79, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79){
+  Operator<Internal::Data<79, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  return d;
+}
+inline Operator<Internal::Data<80, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80){
+  Operator<Internal::Data<80, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<80, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80){
+  Operator<Internal::Data<80, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  return d;
+}
+inline Operator<Internal::Data<81, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81){
+  Operator<Internal::Data<81, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<81, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81){
+  Operator<Internal::Data<81, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  return d;
+}
+inline Operator<Internal::Data<82, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82){
+  Operator<Internal::Data<82, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<82, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82){
+  Operator<Internal::Data<82, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  return d;
+}
+inline Operator<Internal::Data<83, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83){
+  Operator<Internal::Data<83, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<83, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83){
+  Operator<Internal::Data<83, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  return d;
+}
+inline Operator<Internal::Data<84, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84){
+  Operator<Internal::Data<84, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<84, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84){
+  Operator<Internal::Data<84, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  return d;
+}
+inline Operator<Internal::Data<85, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85){
+  Operator<Internal::Data<85, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<85, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85){
+  Operator<Internal::Data<85, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  return d;
+}
+inline Operator<Internal::Data<86, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86){
+  Operator<Internal::Data<86, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<86, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86){
+  Operator<Internal::Data<86, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  return d;
+}
+inline Operator<Internal::Data<87, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87){
+  Operator<Internal::Data<87, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<87, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87){
+  Operator<Internal::Data<87, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  return d;
+}
+inline Operator<Internal::Data<88, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88){
+  Operator<Internal::Data<88, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<88, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88){
+  Operator<Internal::Data<88, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  return d;
+}
+inline Operator<Internal::Data<89, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89){
+  Operator<Internal::Data<89, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<89, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89){
+  Operator<Internal::Data<89, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  return d;
+}
+inline Operator<Internal::Data<90, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90){
+  Operator<Internal::Data<90, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<90, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90){
+  Operator<Internal::Data<90, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  return d;
+}
+inline Operator<Internal::Data<91, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91){
+  Operator<Internal::Data<91, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<91, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91){
+  Operator<Internal::Data<91, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  return d;
+}
+inline Operator<Internal::Data<92, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92){
+  Operator<Internal::Data<92, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<92, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92){
+  Operator<Internal::Data<92, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  return d;
+}
+inline Operator<Internal::Data<93, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93){
+  Operator<Internal::Data<93, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<93, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93){
+  Operator<Internal::Data<93, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  return d;
+}
+inline Operator<Internal::Data<94, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94){
+  Operator<Internal::Data<94, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<94, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94){
+  Operator<Internal::Data<94, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  return d;
+}
+inline Operator<Internal::Data<95, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95){
+  Operator<Internal::Data<95, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<95, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95){
+  Operator<Internal::Data<95, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  return d;
+}
+inline Operator<Internal::Data<96, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96){
+  Operator<Internal::Data<96, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<96, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96){
+  Operator<Internal::Data<96, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  return d;
+}
+inline Operator<Internal::Data<97, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97){
+  Operator<Internal::Data<97, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<97, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97){
+  Operator<Internal::Data<97, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  return d;
+}
+inline Operator<Internal::Data<98, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97, double x98){
+  Operator<Internal::Data<98, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<98, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98){
+  Operator<Internal::Data<98, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  return d;
+}
+inline Operator<Internal::Data<99, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97, double x98, double x99){
+  Operator<Internal::Data<99, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  d.vals[98] = x99;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<99, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98, const Precision& x99){
+  Operator<Internal::Data<99, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  d.vals[98] = x99;
+  return d;
+}
+inline Operator<Internal::Data<100, double> > Data(double x1, double x2, 
double x3, double x4, double x5, double x6, double x7, double x8, double x9, 
double x10, double x11, double x12, double x13, double x14, double x15, double 
x16, double x17, double x18, double x19, double x20, double x21, double x22, 
double x23, double x24, double x25, double x26, double x27, double x28, double 
x29, double x30, double x31, double x32, double x33, double x34, double x35, 
double x36, double x37, double x38, double x39, double x40, double x41, double 
x42, double x43, double x44, double x45, double x46, double x47, double x48, 
double x49, double x50, double x51, double x52, double x53, double x54, double 
x55, double x56, double x57, double x58, double x59, double x60, double x61, 
double x62, double x63, double x64, double x65, double x66, double x67, double 
x68, double x69, double x70, double x71, double x72, double x73, double x74, 
double x75, double x76, double x77, double x78, double x79, double x80, double 
x81, double x82, double x83, double x84, double x85, double x86, double x87, 
double x88, double x89, double x90, double x91, double x92, double x93, double 
x94, double x95, double x96, double x97, double x98, double x99, double x100){
+  Operator<Internal::Data<100, double> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  d.vals[98] = x99;
+  d.vals[99] = x100;
+  return d;
+}
+template<typename Precision> inline Operator<Internal::Data<100, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98, const Precision& x99, const Precision& x100){
+  Operator<Internal::Data<100, Precision> > d;
+  d.vals[0] = x1;
+  d.vals[1] = x2;
+  d.vals[2] = x3;
+  d.vals[3] = x4;
+  d.vals[4] = x5;
+  d.vals[5] = x6;
+  d.vals[6] = x7;
+  d.vals[7] = x8;
+  d.vals[8] = x9;
+  d.vals[9] = x10;
+  d.vals[10] = x11;
+  d.vals[11] = x12;
+  d.vals[12] = x13;
+  d.vals[13] = x14;
+  d.vals[14] = x15;
+  d.vals[15] = x16;
+  d.vals[16] = x17;
+  d.vals[17] = x18;
+  d.vals[18] = x19;
+  d.vals[19] = x20;
+  d.vals[20] = x21;
+  d.vals[21] = x22;
+  d.vals[22] = x23;
+  d.vals[23] = x24;
+  d.vals[24] = x25;
+  d.vals[25] = x26;
+  d.vals[26] = x27;
+  d.vals[27] = x28;
+  d.vals[28] = x29;
+  d.vals[29] = x30;
+  d.vals[30] = x31;
+  d.vals[31] = x32;
+  d.vals[32] = x33;
+  d.vals[33] = x34;
+  d.vals[34] = x35;
+  d.vals[35] = x36;
+  d.vals[36] = x37;
+  d.vals[37] = x38;
+  d.vals[38] = x39;
+  d.vals[39] = x40;
+  d.vals[40] = x41;
+  d.vals[41] = x42;
+  d.vals[42] = x43;
+  d.vals[43] = x44;
+  d.vals[44] = x45;
+  d.vals[45] = x46;
+  d.vals[46] = x47;
+  d.vals[47] = x48;
+  d.vals[48] = x49;
+  d.vals[49] = x50;
+  d.vals[50] = x51;
+  d.vals[51] = x52;
+  d.vals[52] = x53;
+  d.vals[53] = x54;
+  d.vals[54] = x55;
+  d.vals[55] = x56;
+  d.vals[56] = x57;
+  d.vals[57] = x58;
+  d.vals[58] = x59;
+  d.vals[59] = x60;
+  d.vals[60] = x61;
+  d.vals[61] = x62;
+  d.vals[62] = x63;
+  d.vals[63] = x64;
+  d.vals[64] = x65;
+  d.vals[65] = x66;
+  d.vals[66] = x67;
+  d.vals[67] = x68;
+  d.vals[68] = x69;
+  d.vals[69] = x70;
+  d.vals[70] = x71;
+  d.vals[71] = x72;
+  d.vals[72] = x73;
+  d.vals[73] = x74;
+  d.vals[74] = x75;
+  d.vals[75] = x76;
+  d.vals[76] = x77;
+  d.vals[77] = x78;
+  d.vals[78] = x79;
+  d.vals[79] = x80;
+  d.vals[80] = x81;
+  d.vals[81] = x82;
+  d.vals[82] = x83;
+  d.vals[83] = x84;
+  d.vals[84] = x85;
+  d.vals[85] = x86;
+  d.vals[86] = x87;
+  d.vals[87] = x88;
+  d.vals[88] = x89;
+  d.vals[89] = x90;
+  d.vals[90] = x91;
+  d.vals[91] = x92;
+  d.vals[92] = x93;
+  d.vals[93] = x94;
+  d.vals[94] = x95;
+  d.vals[95] = x96;
+  d.vals[96] = x97;
+  d.vals[97] = x98;
+  d.vals[98] = x99;
+  d.vals[99] = x100;
+  return d;
+}
+}

Index: internal/data.hh
===================================================================
RCS file: internal/data.hh
diff -N internal/data.hh
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ internal/data.hh    18 Aug 2009 14:15:39 -0000      1.1
@@ -0,0 +1,54 @@
+namespace TooN{
+       namespace Internal{
+               template<int N, class P> class Data;
+       }
+
+
+       ///@internal
+       ///@brief Object which fills a matrix some data.
+       ///There is no size known, since the size of the data is known at 
compile time.
+       ///Therefore if the size of the matrix is not known, then something 
deeply strange is
+       ///going on.
+       ///@ingroup gInternal
+       template<int N, class P> struct Operator<Internal::Data<N, P> >
+       {
+               P vals[N];
+
+               template<int R, int C, class T, class B>
+               void eval(Matrix<R, C, T, B>& m) const
+               {
+                       SizeMismatch<(R==-1?-1:(C==-1?-1:(R*C))), N>:: 
test(m.num_rows()*m.num_cols(), N);
+                       for(int r=0, n=0; r < R; r++)
+                               for(int c=0; c < C; c++, n++)
+                                       m[r][c] = vals[n];
+               }
+       };
+
+       #ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
+       
+               ///Package up the function arguments as some data for filling 
matrices.
+               ///Matrices are filled in row major order.
+               ///For example:
+               ///@code
+               ///   double theta = 2;
+               ///   Matrix<2> rotation = data( cos(theta), sin(theta)
+               ///                             -sin(theta), cos(theta));
+               ///@endcode
+               ///See also TooN::wrapMatrix().
+               ///@param a The first data element.
+               ///@ingroup gLinAlg
+               inline Operator<Internal::Data<N, double> > Data(double a, ...);
+
+               ///Package up the function arguments as some data for filling 
matrices.
+               ///Any type can be uses. Matrices are filled in row-major order.
+               ///@code
+               ///   Matrix<2,2,float> rotation = data(1f, 2f, 3f, 4f);
+               ///@endcode
+               ///See also TooN::wrapMatrix().
+               ///@param a The first data element.
+               ///@ingroup gLinAlg
+               template<typename Precision> inline Operator<Internal::Data<N, 
Precision> > Data(const Precision& a, ...);
+
+       #endif
+
+}

Index: test/test_data.cc
===================================================================
RCS file: test/test_data.cc
diff -N test/test_data.cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/test_data.cc   18 Aug 2009 14:15:39 -0000      1.1
@@ -0,0 +1,20 @@
+#include <TooN/TooN.h>
+using namespace TooN;
+using namespace std;
+
+void foo(Matrix<2>& foo)
+{
+       foo = Data(1, 2, 3, 4);
+}
+
+int main()
+{
+       Matrix<2> m = Data(1, 2, 3, 4);
+
+       cout << m << endl;
+
+       Matrix<4> n = Zeros;
+       n.slice<0,0,2,2>() = Data(2, 3, 4, 5);
+
+       cout << n << endl;
+}




reply via email to

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