]> granicus.if.org Git - postgis/commitdiff
Node lineal geometries resulting invalid. Re-enable automated testcase for st_MakeVal...
authorSandro Santilli <strk@keybit.net>
Sun, 28 Feb 2010 23:11:08 +0000 (23:11 +0000)
committerSandro Santilli <strk@keybit.net>
Sun, 28 Feb 2010 23:11:08 +0000 (23:11 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@5360 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/lwgeom_geos_clean.c
regress/Makefile.in
regress/clean.sql
regress/clean_expected

index a6ffa3750ad378d11a814840694d2d3ee838852a..998a3615781812e105961ebb2169c2b7d956ef49 100644 (file)
@@ -360,7 +360,7 @@ lwcollection_make_geos_friendly(LWCOLLECTION *g)
  * TODO: move to GEOS capi
  */
 static GEOSGeometry*
-LWGEOM_GEOS_nodeLines(GEOSGeometry* lines)
+LWGEOM_GEOS_nodeLines(const GEOSGeometry* lines)
 {
        GEOSGeometry* noded;
        GEOSGeometry* point;
@@ -573,21 +573,49 @@ LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin)
 
 }
 
-/*
- * IMPORTANT NOTE:
- *
- * This function assumes the caller already checked the geometry given
- * as argument for validity and ONLY PASSES INVALID geometries.
- *
- * Passing a valid geometry here will likely result in a NULL return.
- *
- * TODO: change this behaviour (it is so just to save a geometry clone)
- *
- */
+static GEOSGeometry*
+LWGEOM_GEOS_makeValidLine(const GEOSGeometry* gin)
+{
+       GEOSGeometry* noded;
+       noded = LWGEOM_GEOS_nodeLines(gin);
+       return noded;
+}
+
 static GEOSGeometry*
 LWGEOM_GEOS_makeValid(const GEOSGeometry* gin)
 {
        GEOSGeometry* gout;
+       char ret_char;
+
+       /*
+        * Step 2: return what we got so far if already valid
+        */
+
+       ret_char = GEOSisValid(gin);
+       if ( ret_char == 2 )
+       {
+               /* I don't think should ever happen */
+               lwerror("GEOSisValid(): %s", loggederror);
+               return NULL;
+       }
+       else if ( ret_char )
+       {
+               POSTGIS_DEBUGF(3,
+                              "Geometry [%s] is valid. ",
+                              lwgeom_to_ewkt(GEOS2LWGEOM(gin, 0),
+                               PARSER_CHECK_NONE));
+
+                /* It's valid at this step, return what we have */
+               return GEOSGeom_clone(gin);
+       }
+
+       POSTGIS_DEBUGF(3,
+                      "Geometry [%s] is still not valid: %s. "
+                      "Will try to clean up further.",
+                      lwgeom_to_ewkt(GEOS2LWGEOM(gin, 0),
+                       PARSER_CHECK_NONE), loggederror);
+
+
 
        /*
         * Step 3 : make what we got valid
@@ -604,8 +632,14 @@ LWGEOM_GEOS_makeValid(const GEOSGeometry* gin)
 
        case GEOS_LINESTRING:
        case GEOS_MULTILINESTRING:
-               lwnotice("LINEAL geometries resulted invalid to GEOS -- dunno how to clean that up");
-               return NULL;
+               gout = LWGEOM_GEOS_makeValidLine(gin);
+               if ( ! gout )  /* an exception or something */
+               {
+                       /* cleanup and throw */
+                       lwerror("%s", loggederror);
+                       return NULL;
+               }
+               break; /* we've done */
                break;
 
        case GEOS_POLYGON:
@@ -639,7 +673,9 @@ LWGEOM_GEOS_makeValid(const GEOSGeometry* gin)
         *
         * Input geometry was lwgeom_in
         */
-       const int paranoia = 1;
+       {
+       const int paranoia = 2;
+       /* TODO: check if the result is valid */
        if (paranoia) {
                int loss;
                GEOSGeometry *pi, *po, *pd;
@@ -661,6 +697,7 @@ LWGEOM_GEOS_makeValid(const GEOSGeometry* gin)
                        /* return NULL */
                }
        }
+       }
 
 
        return gout;
@@ -671,7 +708,6 @@ static LWGEOM* lwgeom_make_valid(LWGEOM* lwgeom_in);
 static LWGEOM*
 lwgeom_make_valid(LWGEOM* lwgeom_in)
 {
-       char ret_char;
        int is3d;
        GEOSGeom geosgeom;
        GEOSGeometry* geosout;
@@ -718,31 +754,6 @@ lwgeom_make_valid(LWGEOM* lwgeom_in)
                lwgeom_out = lwgeom_in;
        }
 
-       /*
-        * Step 2: return what we got so far if already alid
-        */
-
-       ret_char = GEOSisValid(geosgeom);
-       if ( ret_char == 2 )
-       {
-               GEOSGeom_destroy(geosgeom);
-               lwerror("GEOSisValid(): %s", loggederror);
-               return NULL; /* I don't think should ever happen */
-       }
-       else if ( ret_char )
-       {
-                /* It's valid at this step, return what we have */
-               GEOSGeom_destroy(geosgeom);
-               return lwgeom_out;
-       }
-
-       POSTGIS_DEBUGF(3,
-                      "Geometry [%s] is still not valid: %s. "
-                      "Will try to clean up further.",
-                      lwgeom_to_ewkt(GEOS2LWGEOM(geosgeom, 0),
-                       PARSER_CHECK_NONE), loggederror);
-
-
        geosout = LWGEOM_GEOS_makeValid(geosgeom);
        GEOSGeom_destroy(geosgeom);
        if ( ! geosout ) {
index 8a1d2ceab6bccf6eeee6c656d669a9e764e3c8a7..48ec0791d2ea9774aa1db1b980930854738f1916 100644 (file)
@@ -81,9 +81,9 @@ ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 32),1)
 endif
 
 # ST_MakeClean if GEOS > 3.2
-#ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">" 32),1)
-#      TESTS += clean
-#endif
+ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">" 32),1)
+       TESTS += clean
+endif
 
 
 all: test 
index c141472c64c84fca81cb03a0daeb65c06a19350b..d4cd1bd145a10e2e4d1db950f261c58c82a57c1a 100644 (file)
@@ -8,24 +8,34 @@ RT    3       010300000001000000060000000000000000000040000000000000104000000000000000400
 RT     4       01060000000200000001030000000100000007000000000000000000344000000000000000C00000000000003440000000000000004000000000000038400000000000000000000000000000364000000000000000000000000000003A4000000000000000400000000000003A4000000000000000C0000000000000344000000000000000C001030000000100000005000000000000000000344000000000000010C00000000000003A4000000000000010C00000000000003A4000000000000018C0000000000000344000000000000018C0000000000000344000000000000010C0  01060000000200000001030000000200000006000000000000000000344000000000000000C0000000000000344000000000000000400000000000003740000000000000E03F0000000000003A4000000000000000400000000000003A4000000000000000C0000000000000344000000000000000C0040000000000000000003740000000000000E03F00000000000036400000000000000000000000000000384000000000000000000000000000003740000000000000E03F01030000000100000005000000000000000000344000000000000010C00000000000003A4000000000000010C00000000000003A4000000000000018C0000000000000344000000000000018C0000000000000344000000000000010C0
 RT     5       010600000001000000010300000001000000070000000000000000001C4000000000000008400000000000001C400000000000001840000000000000224000000000000014400000000000002640000000000000184000000000000026400000000000000840000000000000224000000000000014400000000000001C400000000000000840    010600000002000000010300000001000000040000000000000000001C4000000000000008400000000000001C400000000000001840000000000000224000000000000014400000000000001C4000000000000008400103000000010000000400000000000000000022400000000000001440000000000000264000000000000018400000000000002640000000000000084000000000000022400000000000001440
 RT     6       010300000001000000090000000000000000002840000000000000104000000000000028400000000000001C40000000000000304000000000000018400000000000002C400000000000001440000000000000304000000000000014400000000000002C40000000000000184000000000000032400000000000001C400000000000003240000000000000104000000000000028400000000000001040      010300000003000000060000000000000000002840000000000000104000000000000028400000000000001C400000000000002E40000000000000194000000000000032400000000000001C400000000000003240000000000000104000000000000028400000000000001040050000000000000000002E4000000000000019400000000000002C4000000000000018400000000000002E400000000000001640000000000000304000000000000018400000000000002E400000000000001940040000000000000000002E4000000000000016400000000000002C400000000000001440000000000000304000000000000014400000000000002E400000000000001640
-RT     7       01060000000100000001030000000100000009000000000000000000244000000000000024400000000000002440000000000000344000000000000034400000000000003440000000000000344000000000000024400000000000003E4000000000000024400000000000003E400000000000003440000000000000344000000000000034400000000000003440000000000000244000000000000024400000000000002440    010300000001000000070000000000000000002440000000000000244000000000000024400000000000003440000000000000344000000000000034400000000000003E4000000000000034400000000000003E4000000000000024400000000000003440000000000000244000000000000024400000000000002440
-RT     7.1     0103000000010000000900000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C0000000000000344000000000000000C00000000000002440000000000000204000000000000024400000000000002040000000000000344000000000000000C0000000000000344000000000000000C0000000000000244000000000000028C00000000000002440      0103000000010000000700000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C00000000000003440000000000000204000000000000034400000000000002040000000000000244000000000000000C0000000000000244000000000000028C00000000000002440
-RT     8       0103000000010000000C00000000000000000034C000000000000028C000000000000034C000000000000000C0000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000028C0      01070000000400000001020000000200000000000000000034C000000000000028C000000000000034C000000000000000C001020000000200000000000000000034C000000000000000C000000000000024C000000000000000C001030000000100000007000000000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C000000000000000C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C00103000000010000000500000000000000000034C000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000000C0
+RT     7       01060000000100000001030000000100000009000000000000000000244000000000000024400000000000002440000000000000344000000000000034400000000000003440000000000000344000000000000024400000000000003E4000000000000024400000000000003E400000000000003440000000000000344000000000000034400000000000003440000000000000244000000000000024400000000000002440    010700000002000000010300000001000000070000000000000000002440000000000000244000000000000024400000000000003440000000000000344000000000000034400000000000003E4000000000000034400000000000003E40000000000000244000000000000034400000000000002440000000000000244000000000000024400102000000020000000000000000003440000000000000344000000000000034400000000000002440
+RT     7.1     0103000000010000000900000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C0000000000000344000000000000000C00000000000002440000000000000204000000000000024400000000000002040000000000000344000000000000000C0000000000000344000000000000000C0000000000000244000000000000028C00000000000002440      0107000000020000000103000000010000000700000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C00000000000003440000000000000204000000000000034400000000000002040000000000000244000000000000000C0000000000000244000000000000028C0000000000000244001020000000200000000000000000000C0000000000000344000000000000000C00000000000002440
+RT     8       0103000000010000000C00000000000000000034C000000000000028C000000000000034C000000000000000C0000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000028C0      01070000000200000001060000000200000001030000000100000007000000000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C000000000000000C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C00103000000010000000500000000000000000034C000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000000C001050000000300000001020000000200000000000000000034C000000000000028C000000000000034C000000000000000C001020000000200000000000000000034C000000000000000C000000000000024C000000000000000C001020000000200000000000000000024C000000000000000C0000000000000000000000000000000C0
 RT     9       0103000000010000000400000000000000000024400000000000003640000000000000244000000000000040400000000000003440000000000000404000000000000034400000000000003640      010300000001000000050000000000000000002440000000000000364000000000000024400000000000004040000000000000344000000000000040400000000000003440000000000000364000000000000024400000000000003640
 RT     9.1     0103000000010000000600000000000000000028C0000000000000364000000000000028C00000000000004040000000000000204000000000000040400000000000002040000000000000364000000000000000C0000000000000364000000000000000C00000000000004540      0106000000030000000103000000010000000400000000000000000028C0000000000000364000000000000028C000000000000040400000000000001CC0000000000000404000000000000028C000000000000036400103000000010000000400000000000000000000C000000000000040400000000000001CC0000000000000404000000000000000C0000000000000454000000000000000C000000000000040400103000000010000000500000000000000000000C00000000000004040000000000000204000000000000040400000000000002040000000000000364000000000000000C0000000000000364000000000000000C00000000000004040
-RT     11      0103000000010000000300000000000000008042C00000000000002E4000000000000042C0000000000000304000000000008042C00000000000002E40      01020000000200000000000000008042C00000000000002E4000000000000042C00000000000003040
-RT     12      0103000000020000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C400300000000000000000040C00000000000002E400000000000003FC0000000000000304000000000000040C00000000000002E40      0103000000010000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C40
-RT     13.2    0103000000010000000700000000000000000044C000000000000039400000000000003EC000000000000039400000000000003EC000000000008041400000000000003EC000000000008046400000000000003EC0000000000080414000000000000044C0000000000080414000000000000044C00000000000003940      0107000000020000000102000000020000000000000000003EC000000000008041400000000000003EC00000000000804640010300000001000000050000000000000000003EC000000000008041400000000000003EC0000000000000394000000000000044C0000000000000394000000000000044C000000000008041400000000000003EC00000000000804140
+RT     10      0103000000010000000500000000000000000039C000000000000024400000000000002EC000000000000024400000000000002EC0000000000000344000000000000039C0000000000000344000000000000039C00000000000002440      0103000000010000000500000000000000000039C000000000000024400000000000002EC000000000000024400000000000002EC0000000000000344000000000000039C0000000000000344000000000000039C00000000000002440
+RT     11      0103000000010000000300000000000000008042C00000000000002E4000000000000042C0000000000000304000000000008042C00000000000002E40      LINESTRING(-37 15,-36 16)
+RT     12      0103000000020000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C400300000000000000000040C00000000000002E400000000000003FC0000000000000304000000000000040C00000000000002E40      0107000000020000000103000000010000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C4001020000000200000000000000000040C00000000000002E400000000000003FC00000000000003040
+RT     13.1    0103000000010000000900000000000000000039C000000000000039400000000000002EC000000000000039400000000000002EC000000000008041400000000000002EC000000000008041400000000000002EC0000000000080414000000000000039C0000000000080414000000000000039C0000000000080414000000000000039C0000000000000394000000000000039C00000000000003940      0103000000010000000900000000000000000039C000000000000039400000000000002EC000000000000039400000000000002EC000000000008041400000000000002EC000000000008041400000000000002EC0000000000080414000000000000039C0000000000080414000000000000039C0000000000080414000000000000039C0000000000000394000000000000039C00000000000003940
+RT     13.2    0103000000010000000700000000000000000044C000000000000039400000000000003EC000000000000039400000000000003EC000000000008041400000000000003EC000000000008046400000000000003EC0000000000080414000000000000044C0000000000080414000000000000044C00000000000003940      010700000002000000010300000001000000050000000000000000003EC000000000008041400000000000003EC0000000000000394000000000000044C0000000000000394000000000000044C000000000008041400000000000003EC000000000008041400102000000020000000000000000003EC000000000008041400000000000003EC00000000000804640
 RT     14      01030000000100000009000000000000000000004000000000000018C0000000000000004000000000000010C0000000000000104000000000000010C0000000000000204000000000000018C0000000000000244000000000000018C0000000000000244000000000000010C0000000000000204000000000000010C0000000000000104000000000000018C0000000000000004000000000000018C0      01060000000200000001030000000100000006000000000000000000004000000000000018C0000000000000004000000000000010C0000000000000104000000000000010C0000000000000184000000000000014C0000000000000104000000000000018C0000000000000004000000000000018C001030000000100000006000000000000000000184000000000000014C0000000000000204000000000000010C0000000000000244000000000000010C0000000000000244000000000000018C0000000000000204000000000000018C0000000000000184000000000000014C0
-RT     15      0103000000010000000B00000000000000000040400000000000002440000000000000404000000000000034400000000000004540000000000000344000000000000045400000000000002E40000000000000454000000000000024400000000000004A4000000000000024400000000000004A4000000000000034400000000000004540000000000000344000000000000045400000000000002E400000000000004540000000000000244000000000000040400000000000002440      010300000001000000070000000000000000004040000000000000244000000000000040400000000000003440000000000000454000000000000034400000000000004A4000000000000034400000000000004A4000000000000024400000000000004540000000000000244000000000000040400000000000002440
-PG     1       0103000000010000000100000000000000000000000000000000000000      010100000000000000000000000000000000000000
+RT     15      0103000000010000000B00000000000000000040400000000000002440000000000000404000000000000034400000000000004540000000000000344000000000000045400000000000002E40000000000000454000000000000024400000000000004A4000000000000024400000000000004A4000000000000034400000000000004540000000000000344000000000000045400000000000002E400000000000004540000000000000244000000000000040400000000000002440      010700000002000000010300000001000000070000000000000000004040000000000000244000000000000040400000000000003440000000000000454000000000000034400000000000004A4000000000000034400000000000004A40000000000000244000000000000045400000000000002440000000000000404000000000000024400105000000020000000102000000020000000000000000004540000000000000344000000000000045400000000000002E4001020000000200000000000000000045400000000000002E4000000000000045400000000000002440
+RT     16.1    010600000002000000010300000001000000050000000000000000003640000000000000364000000000000040400000000000003640000000000000404000000000000040400000000000003640000000000000404000000000000036400000000000003640010300000001000000050000000000000000003B400000000000003B4000000000008042400000000000003B40000000000080424000000000008042400000000000003B4000000000008042400000000000003B400000000000003B40  0106000000020000000103000000010000000700000000000000000040400000000000003B400000000000004040000000000000364000000000000036400000000000003640000000000000364000000000000040400000000000003B4000000000000040400000000000003B400000000000003B4000000000000040400000000000003B40010300000001000000070000000000000000003B4000000000000040400000000000003B4000000000008042400000000000804240000000000080424000000000008042400000000000003B4000000000000040400000000000003B40000000000000404000000000000040400000000000003B400000000000004040
+RT     16.2    0106000000020000000103000000010000000500000000000000008043400000000000003640000000000080484000000000000036400000000000804840000000000000404000000000008043400000000000004040000000000080434000000000000036400103000000010000000500000000000000008047400000000000003A4000000000008049400000000000003A4000000000008049400000000000003E4000000000008047400000000000003E4000000000008047400000000000003A40  0106000000020000000103000000010000000900000000000000008048400000000000003A400000000000804840000000000000364000000000008043400000000000003640000000000080434000000000000040400000000000804840000000000000404000000000008048400000000000003E4000000000008047400000000000003E4000000000008047400000000000003A4000000000008048400000000000003A400103000000010000000500000000000000008048400000000000003E4000000000008049400000000000003E4000000000008049400000000000003A4000000000008048400000000000003A4000000000008048400000000000003E40
+RT     16.3    010600000002000000010300000001000000050000000000000000804A4000000000000036400000000000804F4000000000000036400000000000804F4000000000000040400000000000804A4000000000000040400000000000804A400000000000003640010300000001000000050000000000000000804E400000000000003A400000000000804F400000000000003A400000000000804F400000000000003E400000000000804E400000000000003E400000000000804E400000000000003A40  010700000002000000010300000001000000070000000000000000804F400000000000003A400000000000804F4000000000000036400000000000804A4000000000000036400000000000804A4000000000000040400000000000804F4000000000000040400000000000804F400000000000003E400000000000804F400000000000003A400105000000020000000102000000020000000000000000804E400000000000003A400000000000804F400000000000003A400102000000030000000000000000804F400000000000003E400000000000804E400000000000003E400000000000804E400000000000003A40
+RT     16.4    010600000002000000010300000001000000080000000000000000C0504000000000000036400000000000405340000000000000364000000000004053400000000000003A400000000000C053400000000000003C4000000000004053400000000000003E40000000000040534000000000000040400000000000C0504000000000000040400000000000C050400000000000003640010300000001000000060000000000000000C052400000000000003A4000000000004053400000000000003A400000000000C053400000000000003C4000000000004053400000000000003E400000000000C052400000000000003E400000000000C052400000000000003A40  0107000000020000000103000000010000000800000000000000004053400000000000003A40000000000040534000000000000036400000000000C0504000000000000036400000000000C0504000000000000040400000000000405340000000000000404000000000004053400000000000003E400000000000C053400000000000003C4000000000004053400000000000003A400105000000020000000102000000020000000000000000C052400000000000003A4000000000004053400000000000003A4001020000000300000000000000004053400000000000003E400000000000C052400000000000003E400000000000C052400000000000003A40
+RT     17.1    010300000003000000050000000000000000004E4000000000000014C0000000000000544000000000000014C0000000000000544000000000000034400000000000004E4000000000000034400000000000004E4000000000000014C0050000000000000000804B4000000000000000000000000000805140000000000000000000000000008051400000000000002E400000000000804B400000000000002E400000000000804B40000000000000000005000000000000000040504000000000000014400000000000C0524000000000000014400000000000C0524000000000000024400000000000405040000000000000244000000000004050400000000000001440      0106000000030000000103000000010000000D0000000000000000004E400000000000002E400000000000004E40000000000000344000000000000054400000000000003440000000000000544000000000000014C00000000000004E4000000000000014C00000000000004E40000000000000000000000000008051400000000000000000000000000080514000000000000014400000000000C0524000000000000014400000000000C0524000000000000024400000000000805140000000000000244000000000008051400000000000002E400000000000004E400000000000002E40010300000001000000050000000000000000004E4000000000000000000000000000804B4000000000000000000000000000804B400000000000002E400000000000004E400000000000002E400000000000004E400000000000000000010300000001000000050000000000000000805140000000000000244000000000008051400000000000001440000000000040504000000000000014400000000000405040000000000000244000000000008051400000000000002440
+PG     1       0103000000010000000100000000000000000000000000000000000000      POINT(0 0)
+PG     2       LINESTRING(0 0, 0 0)    POINT(0 0)
 \.
 
 -- PG.1 : polygon with single ring with single point in it
 --        to be converted to a POINT
+-- PG.2 : linestring composed by two equal points to be converted
+--        to a point
 --
 
-SELECT caseno,
+SELECT origin,caseno,
        st_astext(st_makevalid(orig)) = st_astext(valid),
        st_isvalid(st_makevalid(orig)), -- paranoia
        (st_isvaliddetail(orig)).valid
index 182db614ccc62983a62453b885939e02ef65bf70..e73e7ce88c2c28007b08e5ed5458be7f37f0d102 100644 (file)
@@ -1,17 +1,25 @@
-1|t|t|f
-2|t|t|f
-3|t|t|f
-4|t|t|f
-5|t|t|f
-6|t|t|f
-7|t|t|f
-7.1|t|t|f
-8|t|t|f
-9|t|t|f
-9.1|t|t|f
-11|t|t|f
-12|t|t|f
-13.2|t|t|f
-14|t|t|f
-15|t|t|f
-1|t|t|f
+RT|1|t|t|f
+RT|2|t|t|f
+RT|3|t|t|f
+RT|4|t|t|f
+RT|5|t|t|f
+RT|6|t|t|f
+RT|7|t|t|f
+RT|7.1|t|t|f
+RT|8|t|t|f
+RT|9|t|t|f
+RT|9.1|t|t|f
+RT|10|t|t|t
+RT|11|t|t|f
+RT|12|t|t|f
+RT|13.1|t|t|t
+RT|13.2|t|t|f
+RT|14|t|t|f
+RT|15|t|t|f
+RT|16.1|t|t|f
+RT|16.2|t|t|f
+RT|16.3|t|t|f
+RT|16.4|t|t|f
+RT|17.1|t|t|f
+PG|1|t|t|f
+PG|2|t|t|f