Index: /branches/eam_branch_20070817/psModules/src/camera/pmFPA.c
===================================================================
--- /branches/eam_branch_20070817/psModules/src/camera/pmFPA.c	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/camera/pmFPA.c	(revision 14639)
@@ -162,4 +162,7 @@
 void pmReadoutFreeData (pmReadout *readout)
 {
+    if (!readout) {
+        return;
+    }
     psFree(readout->image);
     psFree(readout->mask);
@@ -177,5 +180,7 @@
 void pmCellFreeData(pmCell *cell)
 {
-    PS_ASSERT_PTR_NON_NULL(cell,);
+    if (!cell) {
+        return;
+    }
 
     for (int i = 0; i < cell->readouts->n; i++) {
@@ -197,5 +202,7 @@
 void pmChipFreeData(pmChip *chip)
 {
-    PS_ASSERT_PTR_NON_NULL(chip,);
+    if (!chip) {
+        return;
+    }
 
     for (int i = 0; i < chip->cells->n; i++) {
@@ -217,5 +224,7 @@
 void pmFPAFreeData(pmFPA *fpa)
 {
-    PS_ASSERT_PTR_NON_NULL(fpa,);
+    if (!fpa) {
+        return;
+    }
 
     for (int i = 0; i < fpa->chips->n; i++) {
Index: /branches/eam_branch_20070817/psModules/src/imcombine/Makefile.am
===================================================================
--- /branches/eam_branch_20070817/psModules/src/imcombine/Makefile.am	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/imcombine/Makefile.am	(revision 14639)
@@ -7,14 +7,18 @@
 	pmReadoutCombine.c	\
 	pmStack.c		\
+	pmStackReject.c		\
 	pmSubtraction.c		\
 	pmSubtractionKernels.c	\
-	pmSubtractionStamps.c
+	pmSubtractionStamps.c	\
+	pmSubtractionMatch.c
 
 pkginclude_HEADERS = \
 	pmReadoutCombine.h	\
 	pmStack.h		\
+	pmStackReject.h		\
 	pmSubtraction.h		\
 	pmSubtractionKernels.h	\
-	pmSubtractionStamps.h
+	pmSubtractionStamps.h	\
+	pmSubtractionMatch.h
 
 CLEANFILES = *~
Index: /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.c
===================================================================
--- /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.c	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.c	(revision 14639)
@@ -8,6 +8,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-08-10 00:34:04 $
+ *  @version $Revision: 1.11.2.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-08-23 22:30:43 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -73,6 +73,5 @@
 static void stackDataFree(pmStackData *data)
 {
-    psFree(data->detector);
-    psFree(data->sky);
+    psFree(data->readout);
     psFree(data->pixels);
     return;
@@ -222,7 +221,7 @@
     for (int i = 0; i < num; i++) {
         pmStackData *data = inputs->data[i]; // Stack data of interest
-        psImage *image = data->sky->image; // Image of interest
-        psImage *weight = data->sky->weight; // Weight map of interest
-        psImage *mask = data->sky->mask; // Mask of interest
+        psImage *image = data->readout->image; // Image of interest
+        psImage *weight = data->readout->weight; // Weight map of interest
+        psImage *mask = data->readout->mask; // Mask of interest
         pixelData->data.F32[i] = image->data.F32[y][x];
         if (weight) {
@@ -306,7 +305,5 @@
 
 // Ensure the input array of pmStackData is valid, and get some details out of it
-static bool validateInputData(bool *haveDetector, // Do we have the detector images?
-                              bool *haveSky, // Do we have the sky images?
-                              bool *haveSkyWeights, // Do we have weights in the sky images?
+static bool validateInputData(bool *haveWeights, // Do we have weights in the sky images?
                               bool *havePixels, // Do we have lists of pixels?
                               int *num,    // Number of inputs
@@ -317,45 +314,31 @@
     PS_ASSERT_ARRAY_NON_NULL(input, false);
     *num = input->n;
-    {
-        pmStackData *data = input->data[0]; // First image off the rank
-        PS_ASSERT_PTR_NON_NULL(data, false);
-        assert(psMemGetDeallocator(data) == (psFreeFunc)stackDataFree); // Ensure it's the right type
-        *haveDetector = (data->detector != NULL);
-        if (*haveDetector) {
-            PS_ASSERT_IMAGE_NON_NULL(data->detector->image, false);
-            PS_ASSERT_IMAGE_NON_NULL(data->detector->mask, false);
-            PS_ASSERT_IMAGES_SIZE_EQUAL(data->detector->image, data->detector->mask, false);
-            PS_ASSERT_IMAGE_TYPE(data->detector->image, PS_TYPE_F32, false);
-            PS_ASSERT_IMAGE_TYPE(data->detector->mask, PS_TYPE_MASK, false);
-        }
-        *haveSky = (data->sky != NULL);
-        *haveSkyWeights = false;
-        if (*haveSky) {
-            PS_ASSERT_IMAGE_NON_NULL(data->sky->image, false);
-            PS_ASSERT_IMAGE_TYPE(data->sky->image, PS_TYPE_F32, false);
-            PS_ASSERT_IMAGE_NON_NULL(data->sky->mask, false);
-            PS_ASSERT_IMAGE_TYPE(data->sky->mask, PS_TYPE_MASK, false);
-            PS_ASSERT_IMAGES_SIZE_EQUAL(data->sky->image, data->sky->mask, false);
-            *numCols = data->sky->image->numCols;
-            *numRows = data->sky->image->numRows;
-            if (data->sky->weight) {
-                *haveSkyWeights = true;
-                PS_ASSERT_IMAGE_NON_NULL(data->sky->weight, false);
-                PS_ASSERT_IMAGES_SIZE_EQUAL(data->sky->image, data->sky->weight, false);
-                PS_ASSERT_IMAGE_TYPE(data->sky->weight, PS_TYPE_F32, false);
-            }
-        }
-        *havePixels = (data->pixels != NULL);
-    }
+
+    // The first is a template
+    pmStackData *data = input->data[0]; // First image off the rank
+    PS_ASSERT_PTR_NON_NULL(data, false);
+    assert(psMemGetDeallocator(data) == (psFreeFunc)stackDataFree); // Ensure it's the right type
+    *haveWeights = false;
+    PS_ASSERT_IMAGE_NON_NULL(data->readout->image, false);
+    PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false);
+    PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false);
+    PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_MASK, false);
+    PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false);
+    *numCols = data->readout->image->numCols;
+    *numRows = data->readout->image->numRows;
+    if (data->readout->weight) {
+        *haveWeights = true;
+        PS_ASSERT_IMAGE_NON_NULL(data->readout->weight, false);
+        PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->weight, false);
+        PS_ASSERT_IMAGE_TYPE(data->readout->weight, PS_TYPE_F32, false);
+    }
+    *havePixels = (data->pixels != NULL);
+
+    // Make sure the rest correspond with the first
     for (int i = 1; i < *num; i++) {
         pmStackData *data = input->data[i]; // Stack data for this input
         assert(psMemGetDeallocator(data) == (psFreeFunc)stackDataFree); // Ensure it's the right type
-        if ((*haveDetector && !data->detector) || (data->detector && !*haveDetector)) {
-            psError(PS_ERR_UNEXPECTED_NULL, true,
-                    "The detector readout is specified in some but not all inputs.");
-            return false;
-        }
-        if ((*haveSky && !data->sky) || (data->sky && !*haveSky)) {
-            psError(PS_ERR_UNEXPECTED_NULL, true, "The sky cell is specified in some but not all inputs.");
+        if (!data->readout) {
+            psError(PS_ERR_UNEXPECTED_NULL, true, "The readout is specified in some but not all inputs.");
             return false;
         }
@@ -364,23 +347,14 @@
             return false;
         }
-        if (*haveDetector) {
-            PS_ASSERT_IMAGE_NON_NULL(data->detector->image, false);
-            PS_ASSERT_IMAGE_NON_NULL(data->detector->mask, false);
-            PS_ASSERT_IMAGE_TYPE(data->detector->image, PS_TYPE_F32, false);
-            PS_ASSERT_IMAGE_TYPE(data->detector->mask, PS_TYPE_MASK, false);
-            PS_ASSERT_IMAGES_SIZE_EQUAL(data->detector->image, data->detector->mask, false);
-        }
-        if (*haveSky) {
-            PS_ASSERT_IMAGE_NON_NULL(data->sky->image, false);
-            PS_ASSERT_IMAGE_NON_NULL(data->sky->mask, false);
-            PS_ASSERT_IMAGE_TYPE(data->sky->image, PS_TYPE_F32, false);
-            PS_ASSERT_IMAGE_TYPE(data->sky->mask, PS_TYPE_MASK, false);
-            PS_ASSERT_IMAGE_SIZE(data->sky->image, *numCols, *numRows, false);
-            PS_ASSERT_IMAGES_SIZE_EQUAL(data->sky->image, data->sky->mask, false);
-            if (*haveSkyWeights) {
-                PS_ASSERT_IMAGE_NON_NULL(data->sky->weight, false);
-                PS_ASSERT_IMAGES_SIZE_EQUAL(data->sky->image, data->sky->weight, false);
-                PS_ASSERT_IMAGE_TYPE(data->sky->weight, PS_TYPE_F32, false);
-            }
+        PS_ASSERT_IMAGE_NON_NULL(data->readout->image, false);
+        PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false);
+        PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false);
+        PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_MASK, false);
+        PS_ASSERT_IMAGE_SIZE(data->readout->image, *numCols, *numRows, false);
+        PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false);
+        if (*haveWeights) {
+            PS_ASSERT_IMAGE_NON_NULL(data->readout->weight, false);
+            PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->weight, false);
+            PS_ASSERT_IMAGE_TYPE(data->readout->weight, PS_TYPE_F32, false);
         }
     }
@@ -390,5 +364,5 @@
 
 
-
+#if 0
 // Examine a pixel carefully to see if it should be rejected in the stack by convolving all the input images
 // to the same seeing, and clipping there.
@@ -416,6 +390,6 @@
         pmStackData *data = input->data[i]; // Stacking data
         int radius = extent * seeing->data.F32[i]; // How much to convolve
-        psImage *image = data->sky->image; // Image to convolve
-        psImage *mask = data->sky->mask; // Image mask
+        psImage *image = data->readout->image; // Image to convolve
+        psImage *mask = data->readout->mask; // Image mask
 
         int xMin = PS_MAX(xPix - radius, 0);
@@ -476,5 +450,5 @@
     return true;
 }
-
+#endif
 
 
@@ -530,14 +504,11 @@
 
 /// Constructor
-pmStackData *pmStackDataAlloc(pmReadout *sky, float seeing, float weight)
+pmStackData *pmStackDataAlloc(pmReadout *readout, float weight)
 {
     pmStackData *data = psAlloc(sizeof(pmStackData)); // Stack data, to return
     psMemSetDeallocator(data, (psFreeFunc)stackDataFree);
 
-    data->detector = NULL;
-
-    data->sky = psMemIncrRefCounter(sky);
+    data->readout = psMemIncrRefCounter(readout);
     data->pixels = NULL;
-    data->seeing = seeing;
     data->weight = weight;
 
@@ -550,12 +521,9 @@
 {
     PS_ASSERT_PTR_NON_NULL(combined, false);
-    bool haveDetector;                  // Do we have the detector images?
-    bool haveSky;                       // Do we have the sky images?
-    bool haveSkyWeights;                // Do we have the sky weight maps?
+    bool haveWeights;                   // Do we have the weight maps?
     bool havePixels;                    // Do we have lists of pixels?
     int num;                            // Number of inputs
     int numCols, numRows;               // Size of (sky) images
-    if (!validateInputData(&haveDetector, &haveSky, &haveSkyWeights, &havePixels, &num,
-                           &numCols, &numRows, input)) {
+    if (!validateInputData(&haveWeights, &havePixels, &num, &numCols, &numRows, input)) {
         return false;
     }
@@ -571,20 +539,4 @@
         PS_ASSERT_IMAGES_SIZE_EQUAL(combined->image, combined->mask, false);
     }
-    if (!haveDetector && !haveSky) {
-        psError(PS_ERR_UNEXPECTED_NULL, true, "Nothing to combine!");
-        return false;
-    }
-
-
-    if (!haveSky) {
-        // Need to generate the sky cell images
-
-        // ...
-
-#if 0
-        numCols = data->sky->image->numCols;
-        numRows = data->sky->image->numRows;
-#endif
-    }
 
     // Pull out the weightings
@@ -635,5 +587,5 @@
 
         psImage *combinedWeights = combined->weight; // Combined weight map
-        if (haveSkyWeights && !combinedWeights) {
+        if (haveWeights && !combinedWeights) {
             combined->weight = psImageAlloc(numCols, numRows, PS_TYPE_F32);
             combinedWeights = combined->weight;
@@ -668,29 +620,15 @@
     psFree(buffer);
 
-    psList *cells = psListAlloc(NULL);  // List of cells, for concept update
-    for (int i = 0; i < num; i++) {
-        pmStackData *data = input->data[i]; // Stacking data; contains the list of pixels
-        psListAdd(cells, PS_LIST_TAIL, data->sky->parent);
-    }
-    if (!pmConceptsAverageCells(combined->parent, cells, NULL, NULL, false)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to average concepts for input sky readouts.");
-        psFree(cells);
-        return false;
-    }
-    psFree(cells);
-
     return true;
 }
 
+#if 0
 bool pmStackReject(psArray *input, psMaskType maskVal, float extent, float threshold)
 {
-    bool haveDetector;                  // Do we have the detector images?
-    bool haveSky;                       // Do we have the sky images?
-    bool haveSkyWeights;                // Do we have the sky weight maps?
+    bool haveWeights;                   // Do we have the sky weight maps?
     bool havePixels;                    // Do we have lists of pixels?
     int num;                            // Number of inputs
     int numCols, numRows;               // Size of (sky) images
-    if (!validateInputData(&haveDetector, &haveSky, &haveSkyWeights, &havePixels,
-                           &num, &numCols, &numRows, input)) {
+    if (!validateInputData(&haveWeights, &havePixels, &num, &numCols, &numRows, input)) {
         return false;
     }
@@ -768,3 +706,3 @@
     return true;
 }
-
+#endif
Index: /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.h
===================================================================
--- /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.h	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/imcombine/pmStack.h	(revision 14639)
@@ -8,6 +8,6 @@
  * @author GLG, MHPCC
  *
- * @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
- * @date $Date: 2007-05-22 03:59:32 $
+ * @version $Revision: 1.1.6.1 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2007-08-23 22:30:43 $
  * Copyright 2004-2007 Institute for Astronomy, University of Hawaii
  */
@@ -26,14 +26,11 @@
 /// Container for input image
 typedef struct {
-    pmReadout *detector;                ///< Original (unwarped) readout from the detector
-    pmReadout *sky;                     ///< Warped readout (sky cell)
+    pmReadout *readout;                 ///< Warped readout (sky cell)
     psPixels *pixels;                   ///< Pixels to inspect or reject
-    float seeing;                       ///< Seeing FWHM (pixels)
     float weight;                       ///< Weight to apply
 } pmStackData;
 
 /// Constructor
-pmStackData *pmStackDataAlloc(pmReadout *sky, ///< Warped readout (sky cell)
-                              float seeing, ///< Seeing FWHM (pixels)
+pmStackData *pmStackDataAlloc(pmReadout *readout, ///< Warped readout (sky cell)
                               float weight ///< Weight to apply
     );
@@ -61,4 +58,5 @@
 #endif
 
+#if 0
 /// Reject pixles in input images
 bool pmStackReject(psArray *input,      ///< Input array of pmStackData
@@ -67,4 +65,5 @@
                    float threshold      ///< Rejection threshold, in standard deviations
                    );
+#endif
 
 #if 0
Index: /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.c	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.c	(revision 14639)
@@ -4,6 +4,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-08-17 01:50:50 $
+ *  @version $Revision: 1.42.2.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-08-23 22:30:43 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -24,4 +24,7 @@
 
 #include "pmSubtraction.h"
+
+#define PIXEL_LIST_BUFFER 100           // Number of entries to add to pixel list at a time
+
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -136,5 +139,5 @@
 
               // Normalising sum of kernel component to unity
-              float norm = kernelWeighting(1.0 / (float)((uStop - uStart) * (vStop - vStart)),
+              float norm = kernelWeighting(1.0 / (float)((uStop - uStart + 1) * (vStop - vStart + 1)),
                                            varianceWeighting);
 
@@ -245,5 +248,5 @@
               }
           }
-          sum /= (uStop - uStart) * (vStop - vStart); // Normalising sum of kernel component to unity
+          sum /= (uStop - uStart + 1) * (vStop - vStart + 1); // Normalising sum of kernel component to unity
           if (kernels->spatialOrder > 0 && index != kernels->subIndex) {
               // The (0,0) element is subtracted from most kernels to preserve photometric scaling
@@ -880,5 +883,6 @@
     }
 
-    float background = solution->data.F64[solution->n-1]; // The difference in background
+    int numBackground = polyTerms(kernels->bgOrder); // Number of background terms
+    float background = solution->data.F64[solution->n - numBackground]; // The difference in background
     int numCols = inImage->numCols, numRows = inImage->numRows; // Image dimensions
 
@@ -1017,2 +1021,4 @@
     return true;
 }
+
+
Index: /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.h
===================================================================
--- /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.h	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/imcombine/pmSubtraction.h	(revision 14639)
@@ -6,6 +6,6 @@
  * @author GLG, MHPCC
  *
- * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
- * @date $Date: 2007-08-16 02:57:34 $
+ * @version $Revision: 1.9.2.1 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2007-08-23 22:30:43 $
  * Copyright 2004-207 Institute for Astronomy, University of Hawaii
  */
Index: /branches/eam_branch_20070817/psModules/src/psmodules.h
===================================================================
--- /branches/eam_branch_20070817/psModules/src/psmodules.h	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/src/psmodules.h	(revision 14639)
@@ -54,4 +54,5 @@
 #include <pmFPACalibration.h>
 #include <pmReadoutStack.h>
+#include <pmFPAUtils.h>
 
 // the following headers are from psModule:detrend
@@ -73,7 +74,9 @@
 // the following headers are from psModule:imcombine
 #include <pmStack.h>
+#include <pmStackReject.h>
 #include <pmSubtraction.h>
 #include <pmSubtractionStamps.h>
 #include <pmSubtractionKernels.h>
+#include <pmSubtractionMatch.h>
 #include <pmReadoutCombine.h>
 
Index: /branches/eam_branch_20070817/psModules/test/camera/Makefile.am
===================================================================
--- /branches/eam_branch_20070817/psModules/test/camera/Makefile.am	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/test/camera/Makefile.am	(revision 14639)
@@ -11,5 +11,6 @@
 	$(PSMODULES_LIBS)
 
-TEST_PROGS =
+TEST_PROGS = \
+	tap_pmFPAReadWrite
 
 if BUILD_TESTS
Index: /branches/eam_branch_20070817/psModules/test/config/data/SampleIPPConfig
===================================================================
--- /branches/eam_branch_20070817/psModules/test/config/data/SampleIPPConfig	(revision 14638)
+++ /branches/eam_branch_20070817/psModules/test/config/data/SampleIPPConfig	(revision 14639)
@@ -1,32 +1,45 @@
 ### Example .ipprc file
+    PATH            STR     .
+    DATAPATH	str	datapath
 
 ### Database configuration
-DBSERVER	STR	ippdb.ifa.hawaii.edu	# Database host name (for psDBInit)
-DBUSER		STR	ipp			# Database user name (for psDBInit)
-DBPASSWORD	STR	password		# Database password (for psDBInit)
+    DBSERVER	STR	localhost
+    DBUSER		STR	test
+    DBPASSWORD	STR	""
+    DBNAME          STR     test
+    DBPORT		S32	0
 
 ### Setups for each camera system
-CAMERAS		METADATA
-	MEGACAM_RAW	STR	megacam_raw.config
-	MEGACAM_SPLICE	STR	megacam_splice.config
-	GPC1_RAW	STR	gpc1_raw.config
-	LRIS_BLUE	STR	lris_blue.config
-	LRIS_RED	STR	lris_red.config
-END
+    CAMERAS		METADATA
+	CAMERA0		STR	camera0/camera.config
+	CAMERA1		STR	camera1/camera.config
+    END
 
-### psLib setup
-#TIME		STR	/home/mithrandir/price/pan-starrs/jhroot/i686-pc-linux-gnu/etc/pslib/psTime.config	# Time configuration file
-LOGLEVEL	S32	3			# Logging level; 3=INFO
-LOGFORMAT	STR	HLNM			# Log format
-LOGDEST	STR	STDOUT				# Log destination
-TRACE		METADATA			# Trace levels
-	dummyTraceFunc01	S32	1
-	dummyTraceFunc02	S32	2
-END
-ARBITRARY_STRING_S32	S32	20
-ARBITRARY_STRING_F32	F32	21.0
-ARBITRARY_STRING_F64	F64	22.0
-ARBITRARY_STRING_STR	STR	19.0
-ARBITRARY_STRING_BOOL_T	BOOL	true
-ARBITRARY_STRING_BOOL_F	BOOL	false
+### Setups for psLib
+    TIME		STR	time.config
+    LOGLEVEL	S32	3
+    LOGFORMAT	STR	HLNM
+    LOGDEST	STR	STDOUT
 
+### Default trace logging initializations
+    TRACE		METADATA
+	dummyTraceFacility01	S32	1
+	dummyTraceFacility02	S32	2
+    END
+
+### Predefined recipe files
+    RECIPES         METADATA                # Site-level recipes
+        R00		STR	recipes/R00.config
+        R01		STR	recipes/R01.config
+        R02		STR	recipes/R02.config
+        R03		STR	recipes/R03.config
+    END
+
+### Misc arbitraty metadata
+    ARBITRARY_STRING_S32	S32	20
+    ARBITRARY_STRING_F32	F32	21.0
+    ARBITRARY_STRING_F64	F64	22.0
+    ARBITRARY_STRING_STR	STR	19.0
+    ARBITRARY_STRING_BOOL_T	BOOL	true
+    ARBITRARY_STRING_BOOL_F	BOOL	false
+
