Index: src/stats.c
===================================================================
--- src/stats.c	(revision 6953)
+++ src/stats.c	(working copy)
@@ -1176,6 +1176,10 @@
 		{
 			psStats->type = SUPER_SENSOR;
 		}
+		else if (!strcmp(type, "RADAR DETECTOR"))
+		{
+			psStats->type = RADAR_DETECTOR_SENSOR;
+		}
 		else
 		{
 			ASSERT( false, "Invalid Sensor type" );
@@ -3357,3 +3361,47 @@
 
 	return false;
 }
+
+SENSOR_STATS *objActiveRadar(BASE_OBJECT *psObj)
+{
+	SENSOR_STATS	*psStats = NULL;
+
+	switch (psObj->type)
+	{
+	case OBJ_DROID:
+		if (((DROID *)psObj)->droidType != DROID_SENSOR && ((DROID *)psObj)->droidType != DROID_COMMAND)
+		{
+			return NULL;
+		}
+		psStats = asSensorStats + ((DROID *)psObj)->asBits[COMP_SENSOR].nStat;
+		break;
+	case OBJ_STRUCTURE:
+		psStats = ((STRUCTURE *)psObj)->pStructureType->pSensor;
+		if (psStats == NULL || psStats->location != LOC_TURRET)
+		{
+			return NULL;
+		}
+		break;
+	default:
+		break;
+	}
+	return psStats;
+}
+
+bool objRadarDetector(BASE_OBJECT *psObj)
+{
+	if (psObj->type == OBJ_STRUCTURE)
+	{
+		STRUCTURE *psStruct = (STRUCTURE *)psObj;
+
+		return (psStruct->pStructureType->pSensor && psStruct->pStructureType->pSensor->type == RADAR_DETECTOR_SENSOR);
+	}
+	else if (psObj->type == OBJ_DROID)
+	{
+		DROID *psDroid = (DROID *)psObj;
+		SENSOR_STATS *psSensor = getSensorStats(psDroid);
+
+		return (psSensor && psSensor->type == RADAR_DETECTOR_SENSOR);
+	}
+	return false;
+}
Index: src/stats.h
===================================================================
--- src/stats.h	(revision 6953)
+++ src/stats.h	(working copy)
@@ -361,4 +361,12 @@
 
 extern void statsInitVars(void);
 
+/* Wrappers */
+
+/** If object is an active radar (has sensor turret), then return a pointer to its sensor stats. If not, return NULL. */
+SENSOR_STATS *objActiveRadar(BASE_OBJECT *psObj);
+
+/** Returns whether object has a radar detector sensor. */
+bool objRadarDetector(BASE_OBJECT *psObj);
+
 #endif // __INCLUDED_SRC_STATS_H__
Index: src/display.c
===================================================================
--- src/display.c	(revision 6953)
+++ src/display.c	(working copy)
@@ -2708,8 +2708,6 @@
 		}
 	}
 
-//DBPRINTF(("%d %d\n",mouseTileX,mouseTileY);
-
 	/* We haven't found anything yet */
 	retVal = MT_NOTARGET;
 
@@ -2725,7 +2723,6 @@
 					// need to check for command droids here as well
 					if (psDroid->droidType == DROID_SENSOR)
 					{
-//	DBPRINTF(("MT_SENSOR\n");
 						return MT_SENSOR;
 					}
 					else if (psDroid->droidType == DROID_TRANSPORTER)
Index: src/action.c
===================================================================
--- src/action.c	(revision 6953)
+++ src/action.c	(working copy)
@@ -2133,7 +2133,7 @@
 		// align the turret
 		actionTargetTurret((BASE_OBJECT*)psDroid, psDroid->psActionTarget[0], &psDroid->asWeaps[0]);
 
-		if (cbSensorDroid(psDroid))
+		if (cbSensorDroid(psDroid) || objRadarDetector((BASE_OBJECT *)psDroid))
 		{
 			// don't move to the target, just make sure it is visible
 			// Anyone commenting this out will get a knee capping from John.
@@ -2655,7 +2655,7 @@
 		psDroid->actionX = psDroid->pos.x;
 		psDroid->actionY = psDroid->pos.y;
 		if (//(secondaryGetState(psDroid, DSO_HALTTYPE, &state) && (state == DSS_HALT_HOLD)) ||
-			cbSensorDroid(psDroid))
+			cbSensorDroid(psDroid) || objRadarDetector((BASE_OBJECT *)psDroid))
 		{
 			psDroid->action = DACTION_OBSERVE;
 		}
Index: src/structure.c
===================================================================
--- src/structure.c	(revision 6953)
+++ src/structure.c	(working copy)
@@ -2853,7 +2853,7 @@
 	/* See if there is an enemy to attack for Sensor Towers that have weapon droids attached*/
 	else if (psStructure->pStructureType->pSensor)
 	{
-		if (structStandardSensor(psStructure) || structVTOLSensor(psStructure))
+		if (structStandardSensor(psStructure) || structVTOLSensor(psStructure) || objRadarDetector((BASE_OBJECT *)psStructure))
 		{
 			if ((psStructure->id % 20) == (frameGetFrameNumber() % 20))
 			{
@@ -2878,7 +2878,7 @@
 		// you can always see anything that a CB sensor is targeting
 		// Anyone commenting this out again will get a knee capping from John.
 		// You have been warned!!
-		if ((structCBSensor(psStructure) || structVTOLCBSensor(psStructure)) &&
+		if ((structCBSensor(psStructure) || structVTOLCBSensor(psStructure) || objRadarDetector((BASE_OBJECT *)psStructure)) &&
 			psStructure->psTarget[0] != NULL)
 		{
 			psStructure->psTarget[0]->visible[psStructure->player] = UBYTE_MAX;
@@ -5843,7 +5843,8 @@
 		       || psStructure->pStructureType->pSensor->type == INDIRECT_CB_SENSOR
 		       || psStructure->pStructureType->pSensor->type == VTOL_INTERCEPT_SENSOR
 		       || psStructure->pStructureType->pSensor->type == VTOL_CB_SENSOR
-		       || psStructure->pStructureType->pSensor->type == SUPER_SENSOR)
+		       || psStructure->pStructureType->pSensor->type == SUPER_SENSOR
+		       || psStructure->pStructureType->pSensor->type == RADAR_DETECTOR_SENSOR)
 		       && psStructure->pStructureType->pSensor->location == LOC_TURRET)
 		{
 			unsigned int assigned_droids = countAssignedDroids(psStructure);
Index: src/stats-db2.tpl
===================================================================
--- src/stats-db2.tpl	(revision 6953)
+++ src/stats-db2.tpl	(working copy)
@@ -277,6 +277,9 @@
 
     # Works as all of the above together! - new for updates
     SUPER
+
+    %string "RADAR DETECTOR";
+    RADAR_DETECTOR
 end;
 
 struct SENSOR
Index: src/droid.c
===================================================================
--- src/droid.c	(revision 6953)
+++ src/droid.c	(working copy)
@@ -4580,13 +4580,10 @@
 		return false;
 	}
 
-	//check indirect weapon droid with standard/cb sensor
-    /*Super Sensor works as any type*/
+	// Check indirect weapon droid with standard/CB/radar detector sensor
 	if (!proj_Direct(asWeaponStats + psDroid->asWeaps[0].nStat))
 	{
-		if (psStats->type == STANDARD_SENSOR ||
-			psStats->type == INDIRECT_CB_SENSOR ||
-            psStats->type == SUPER_SENSOR)
+		if (psStats->type == STANDARD_SENSOR ||	psStats->type == INDIRECT_CB_SENSOR || psStats->type == SUPER_SENSOR || psStats->type == RADAR_DETECTOR_SENSOR)
 		{
 			return true;
 		}
Index: src/visibility.c
===================================================================
--- src/visibility.c	(revision 6953)
+++ src/visibility.c	(working copy)
@@ -321,12 +321,18 @@
 	{
 		case OBJ_DROID:
 		{
-			const DROID * psDroid = (DROID *)psViewer;
+			DROID *psDroid = (DROID *)psViewer;
 
 			if (psDroid->droidType == DROID_COMMAND)
 			{
 				range = 3 * range / 2;
 			}
+			if (psDroid->psTarget == psTarget
+			    && (cbSensorDroid(psDroid) || objRadarDetector((BASE_OBJECT *)psDroid)))
+			{
+				// if it is targetted by a counter battery sensor, it is seen
+				return UBYTE_MAX;
+			}
 			break;
 		}
 		case OBJ_STRUCTURE:
@@ -345,9 +351,8 @@
 				return 0;
 			}
 
-			if ((structCBSensor(psStruct)
-				|| structVTOLCBSensor(psStruct))
-				&& psStruct->psTarget[0] == psTarget)
+			if (psStruct->psTarget[0] == psTarget
+			    && (structCBSensor(psStruct) || structVTOLCBSensor(psStruct) || objRadarDetector((BASE_OBJECT *)psStruct)))
 			{
 				// if a unit is targetted by a counter battery sensor
 				// it is automatically seen
Index: src/ai.c
===================================================================
--- src/ai.c	(revision 6953)
+++ src/ai.c	(working copy)
@@ -581,7 +581,6 @@
 	BOOL			bCBTower;
 	STRUCTURE		*psCStruct;
 	DROID			*psCommander;
-	BOOL			bCommanderBlock;
 	SECONDARY_STATE		state;
 	SDWORD			curTargetWeight=-1;
 
@@ -643,6 +642,7 @@
 	{
 		WEAPON_STATS	*psWStats = NULL;
 		int	longRange = 0;
+		BOOL	bCommanderBlock = false;
 
 		ASSERT(((STRUCTURE *)psObj)->asWeaps[weapon_slot].nStat > 0, "no weapons on structure");
 
@@ -652,7 +652,6 @@
 		// see if there is a target from the command droids
 		psTarget = NULL;
 		psCommander = cmdDroidGetDesignator(psObj->player);
-		bCommanderBlock = false;
 		if (!proj_Direct(psWStats) && (psCommander != NULL) &&
 			aiStructHasRange((STRUCTURE *)psObj, (BASE_OBJECT *)psCommander, weapon_slot))
 		{
@@ -713,7 +712,7 @@
 					    }
 					}
 				}
-				else if (structCBSensor(psCStruct)
+				else if ((structCBSensor(psCStruct) || objRadarDetector((BASE_OBJECT *)psCStruct))
 				         && psCStruct->psTarget[0] != NULL
 				         && !psCStruct->psTarget[0]->died)
 				{
@@ -780,81 +779,105 @@
 /* See if there is a target in range for Sensor objects*/
 BOOL aiChooseSensorTarget(BASE_OBJECT *psObj, BASE_OBJECT **ppsTarget)
 {
-	SDWORD	sensorRange = objSensorRange(psObj);
-	UDWORD	radSquared;
-	BASE_OBJECT		*psCurr,*psTemp = NULL;
-	BASE_OBJECT		*psTarget = NULL;
-	SDWORD	xdiff,ydiff, distSq, tarDist;
+	int		sensorRange = objSensorRange(psObj);
+	unsigned int	radSquared = sensorRange * sensorRange;
+	bool		radarDetector = objRadarDetector(psObj);
 
-	/* Get the sensor range */
-	switch (psObj->type)
+	if (!objActiveRadar(psObj) && !radarDetector)
 	{
-	case OBJ_DROID:
-		if (asSensorStats[((DROID *)psObj)->asBits[COMP_SENSOR].nStat].
-			location != LOC_TURRET)
+		ASSERT(false, "Only to be used for sensor turrets!");
+		return false;
+	}
+
+	/* See if there is something in range */
+	if (radarDetector)
+	{
+		BASE_OBJECT	*psCurr, *psTemp = NULL;
+		int		tarDist = SDWORD_MAX;
+
+		gridStartIterate((SDWORD)psObj->pos.x, (SDWORD)psObj->pos.y);
+		psCurr = gridIterate();
+		while (psCurr != NULL)
 		{
-			// to be used for Turret Sensors only
-			return false;
+			if (psCurr->type == OBJ_STRUCTURE || psCurr->type == OBJ_DROID)
+			{
+				if (psObj->player != psCurr->player
+				    && !aiCheckAlliances(psCurr->player,psObj->player)
+				    && objActiveRadar(psCurr))
+				{
+					// See if in twice *their* sensor range
+					const int xdiff = psCurr->pos.x - psObj->pos.x;
+					const int ydiff = psCurr->pos.y - psObj->pos.y;
+					const unsigned int distSq = xdiff * xdiff + ydiff * ydiff;
+					const int targetSensor = objSensorRange(psCurr) * 2;
+					const unsigned int sensorSquared = targetSensor * targetSensor;
+
+					if (distSq < sensorSquared && distSq < tarDist)
+					{
+						psTemp = psCurr;
+						tarDist = distSq;
+					}
+				}
+			}
+			psCurr = gridIterate();
 		}
-		radSquared = sensorRange * sensorRange;
-		break;
-	case OBJ_STRUCTURE:
-		if (!(structStandardSensor((STRUCTURE *)psObj) ||
-			structVTOLSensor((STRUCTURE *)psObj)))
+
+		if (psTemp)
 		{
-			// to be used for Standard and VTOL intercept Turret Sensors only
-			return false;
+			objTrace(psTemp->id, "Targetted by radar detector %d", (int)psObj->id);
+			objTrace(psObj->id, "Targetting radar %d", (int)psTemp->id);
+			ASSERT(!psTemp->died, "aiChooseSensorTarget gave us a dead target");
+			*ppsTarget = psTemp;
+			return true;
 		}
-		radSquared = sensorRange * sensorRange;
-		break;
-	default:
-		radSquared = 0;
-		break;
 	}
+	else if (psObj->type == OBJ_DROID && CAN_UPDATE_NAYBORS((DROID *)psObj))
+	{
+		BASE_OBJECT	*psTarget = NULL;
 
-	/* See if there is a something in range */
-	if (psObj->type == OBJ_DROID && CAN_UPDATE_NAYBORS( (DROID *)psObj ))
-	{
 		if (aiBestNearestTarget((DROID *)psObj, &psTarget, 0) >= 0)
 		{
 			/* See if in sensor range */
-			xdiff = psTarget->pos.x - psObj->pos.x;
-			ydiff = psTarget->pos.y - psObj->pos.y;
-			if (xdiff*xdiff + ydiff*ydiff < (SDWORD)radSquared)
+			const int xdiff = psTarget->pos.x - psObj->pos.x;
+			const int ydiff = psTarget->pos.y - psObj->pos.y;
+			const unsigned int distSq = xdiff * xdiff + ydiff * ydiff;
+
+			if (distSq < radSquared)
 			{
 				*ppsTarget = psTarget;
 				return true;
 			}
 		}
 	}
-	else
+	else	// structure
 	{
-		tarDist = SDWORD_MAX;
+		BASE_OBJECT	*psCurr, *psTemp = NULL;
+		int		tarDist = SDWORD_MAX;
+
 		gridStartIterate((SDWORD)psObj->pos.x, (SDWORD)psObj->pos.y);
 		psCurr = gridIterate();
 		while (psCurr != NULL)
 		{
-			    //don't target features
-			    if (psCurr->type != OBJ_FEATURE && !psCurr->died)
-			    {
-				    if (psObj->player != psCurr->player &&
-					    !aiCheckAlliances(psCurr->player,psObj->player) &&
-					    !aiObjIsWall(psCurr))
-				    {
-					    // See if in sensor range and visible
-					    xdiff = psCurr->pos.x - psObj->pos.x;
-					    ydiff = psCurr->pos.y - psObj->pos.y;
-					    distSq = xdiff*xdiff + ydiff*ydiff;
-					    if (distSq < (SDWORD)radSquared &&
-						    psCurr->visible[psObj->player] &&
-						    distSq < tarDist)
-					    {
-						    psTemp = psCurr;
-						    tarDist = distSq;
-					    }
-				    }
-			    }
-			    psCurr = gridIterate();
+			// Don't target features or dead objects
+			if (psCurr->type != OBJ_FEATURE && !psCurr->died)
+			{
+				if (psObj->player != psCurr->player &&
+				    !aiCheckAlliances(psCurr->player,psObj->player) &&
+				    !aiObjIsWall(psCurr))
+				{
+					// See if in sensor range and visible
+					const int xdiff = psCurr->pos.x - psObj->pos.x;
+					const int ydiff = psCurr->pos.y - psObj->pos.y;
+					const unsigned int distSq = xdiff * xdiff + ydiff * ydiff;
+
+					if (distSq < radSquared && psCurr->visible[psObj->player] && distSq < tarDist)
+					{
+						psTemp = psCurr;
+						tarDist = distSq;
+					}
+				}
+			}
+			psCurr = gridIterate();
 		}
 
 		if (psTemp)
@@ -1021,8 +1044,7 @@
 	{
 		if (psDroid->droidType == DROID_SENSOR)
 		{
-			//Watermelon:only 1 target for sensor droid
-			if ( aiChooseTarget((BASE_OBJECT *)psDroid, &psTarget, 0, true) )
+			if (aiChooseSensorTarget((BASE_OBJECT *)psDroid, &psTarget))
 			{
 				orderDroidObj(psDroid, DORDER_OBSERVE, psTarget);
 			}
Index: data/mp/messages/strings/names.txt
===================================================================
--- data/mp/messages/strings/names.txt	(revision 6953)
+++ data/mp/messages/strings/names.txt	(working copy)
@@ -369,6 +369,7 @@
 NavGunSensor				"*Nexus Sensor*"
 TowerSensor			"*Tower Sensor*"
 FortressSensor			"*Fortress Sensor*"
+RadarDetector				_("Radar Detector")
 SensorTower1Mk1				_("Sensor Tower")
 SensorTower2Mk1				_("Hardened Sensor Tower")
 SensorTurret1Mk1			_("Sensor Turret")
@@ -376,6 +377,7 @@
 Sys-VTOLCBTower01			_("VTOL CB Radar Tower")
 Sys-VTOLRadarTower01			_("VTOL CB Radar Tower")
 UplinkSensor				_("Uplink Sensor")
+Sys-RadarDetector01			_("Radar Detector Tower")
 
 Sys-CBTurret01				_("CB Radar Turret")
 Sys-VstrikeTurret01			_("VTOL Strike Turret")
@@ -1697,6 +1699,7 @@
 R-Wpn-LasSat				_("Laser Satellite Command Post")
 R-Sys-Sensor-UpLink			_("Satellite Uplink Center")
 LasSatCommandSensor			"*LasSatCommandSensor*"
+R-Sys-RadarDetector01			_("Radar Detector")
 
 // added by SEBG 5 July 1999
 
Index: data/mp/stats/sensor.txt
===================================================================
--- data/mp/stats/sensor.txt	(revision 6953)
+++ data/mp/stats/sensor.txt	(working copy)
@@ -16,3 +16,4 @@
 BaBaSensor,Level All,1,1,1,1,1,1,0,0,640,DEFAULT,STANDARD,0,100,0
 TowerSensor,Level All,0,0,0,1,1,0,0,0,1280,DEFAULT,STANDARD,0,500,0
 FortressSensor,Level All,0,0,0,1,1,0,0,0,1536,DEFAULT,STANDARD,0,500,0
+RadarDetector,Level All,20,100,100,0,0,200,RADARSENSOR.PIE,TRMECM2.PIE,1024,TURRET,RADAR DETECTOR,0,500,1
Index: data/mp/stats/research/multiplayer/resultcomponent.txt
===================================================================
--- data/mp/stats/research/multiplayer/resultcomponent.txt	(revision 6953)
+++ data/mp/stats/research/multiplayer/resultcomponent.txt	(working copy)
@@ -120,3 +120,4 @@
 R-Cyborg-Transport,TransporterBody,BODY,0,0,2
 R-Vehicle-Prop-VTOL,V-Tol,PROPULSION,0,0,5
 R-Vehicle-Prop-Wheels,wheeled01,PROPULSION,0,0,5
+R-Sys-RadarDetector01,RadarDetector,SENSOR,0,0,8
Index: data/mp/stats/research/multiplayer/research.txt
===================================================================
--- data/mp/stats/research/multiplayer/research.txt	(revision 6953)
+++ data/mp/stats/research/multiplayer/research.txt	(working copy)
@@ -447,3 +447,4 @@
 R-Wpn-MG-Damage07,Level One,IMAGE_RES_GRPDAM,1,IMAGE_RES_WEAPONTECH,0,0,0,0,MG1Mk1,WEAPON,13200,0,1,1,0,0,0,0,0
 R-Wpn-MG-Damage08,Level One,IMAGE_RES_GRPDAM,1,IMAGE_RES_WEAPONTECH,0,0,0,0,MG1Mk1,WEAPON,15200,0,2,1,0,0,0,0,0
 R-Sys-Sensor-Upgrade03,Level All,IMAGE_RES_GRPUPG,0,IMAGE_RES_SYSTEMTECH,GNLSNSR1.PIE,0,RES_SY_SU1,0,0,BODY,3600,1,2,1,0,0,0,0,0
+R-Sys-RadarDetector01,Level All,0,0,IMAGE_RES_SYSTEMTECH,0,0,RES_SY_CBSTW1,0,RadarDetector,SENSOR,900,0,1,0,0,0,1,0,1
Index: data/mp/stats/research/multiplayer/prresearch.txt
===================================================================
--- data/mp/stats/research/multiplayer/prresearch.txt	(revision 6953)
+++ data/mp/stats/research/multiplayer/prresearch.txt	(working copy)
@@ -618,3 +618,4 @@
 R-Wpn-RocketSlow-ROF01,R-Wpn-RocketSlow-Damage01,942
 R-Wpn-RocketSlow-ROF02,R-Wpn-RocketSlow-ROF01,943
 R-Wpn-RocketSlow-ROF03,R-Wpn-RocketSlow-ROF02,944
+R-Sys-RadarDetector01,R-Sys-Sensor-Upgrade01,945
Index: data/mp/stats/research/multiplayer/resultstructure.txt
===================================================================
--- data/mp/stats/research/multiplayer/resultstructure.txt	(revision 6953)
+++ data/mp/stats/research/multiplayer/resultstructure.txt	(working copy)
@@ -82,3 +82,4 @@
 R-Sys-VTOLCBS-Tower01,Sys-VTOL-CB-Tower01,0,211
 R-Sys-VTOLStrike-Tower01,Sys-VTOL-RadarTower01,0,212
 R-Wpn-LasSat,A0LasSatCommand,0,328
+R-Sys-RadarDetector01,Sys-RadarDetector01,0,0
Index: data/mp/stats/structures.txt
===================================================================
--- data/mp/stats/structures.txt	(revision 6953)
+++ data/mp/stats/structures.txt	(working copy)
@@ -148,3 +148,4 @@
 X-Super-MassDriver,DOOR,Level All,HARD,0,2,2,Concrete,1600,3,15,3200,10,1800,10,100,255,1,ZNULLECM,FortressSensor,1,STWPFCAN.PIE,0,0,1
 X-Super-Missile,DOOR,Level All,HARD,0,2,2,Concrete,1600,3,15,3200,10,1600,10,100,255,1,ZNULLECM,FortressSensor,1,STWPFCAN.PIE,0,0,1
 X-Super-Rocket,DOOR,Level All,HARD,0,2,2,Concrete,1600,3,15,3200,10,1250,10,100,255,1,ZNULLECM,FortressSensor,1,STWPFCAN.PIE,0,0,1
+Sys-RadarDetector01,DEFENSE,Level All,MEDIUM,0,1,1,Concrete,400,3,10,450,0,60,10,150,255,0,ZNULLECM,RadarDetector,0,BLGUARDM.PIE,0,0,0
Index: data/mp/wrf/piestats.wrf
===================================================================
--- data/mp/wrf/piestats.wrf	(revision 6953)
+++ data/mp/wrf/piestats.wrf	(working copy)
@@ -76,6 +76,7 @@
 file		IMD	"blbrepr2.pie"
 file		IMD	"blgrdnex.pie"
 file		IMD	"stwpfcan.pie"
+file		IMD	"radarsensor.pie"
 file		IMD "dummy.pie"
 directory	"features"
 file		IMD	"micapsul.pie"
Index: data/base/structs/radarsensor.pie
===================================================================
--- data/base/structs/radarsensor.pie	(revision 0)
+++ data/base/structs/radarsensor.pie	(revision 0)
@@ -0,0 +1,139 @@
+PIE 2
+TYPE 200
+TEXTURE 0 page-17.png 256 256
+LEVELS 1
+LEVEL 1
+POINTS 66
+	0 16 0
+	-3 5 -6
+	3 5 -6
+	6 5 -3
+	6 5 3
+	3 5 6
+	-3 5 6
+	-6 5 3
+	-6 5 -3
+	9 7 3
+	3 7 9
+	-3 7 9
+	-9 7 3
+	-9 7 -3
+	-3 7 -9
+	3 7 -9
+	9 7 -3
+	6 11 12
+	-6 11 12
+	-12 11 6
+	-12 11 -6
+	-6 11 -12
+	6 11 -12
+	12 11 -6
+	12 11 6
+	-6 16 13
+	-13 16 6
+	-13 16 -6
+	-6 16 -13
+	6 16 -13
+	13 16 -6
+	13 16 6
+	6 16 13
+	-3 27 -6
+	3 27 -6
+	6 27 -3
+	6 27 3
+	3 27 6
+	-3 27 6
+	-6 27 3
+	-6 27 -3
+	9 25 3
+	3 25 9
+	-3 25 9
+	-9 25 3
+	-9 25 -3
+	-3 25 -9
+	3 25 -9
+	9 25 -3
+	6 21 12
+	-6 21 12
+	-12 21 6
+	-12 21 -6
+	-6 21 -12
+	6 21 -12
+	12 21 -6
+	12 21 6
+	0 29 0
+	-4 28 -2
+	-2 28 -4
+	2 28 -4
+	4 28 -2
+	4 28 2
+	2 28 4
+	-2 28 4
+	-4 28 2
+
+POLYGONS 64
+	200 4 6 11 12 7 174 55 174 54 180 54 180 55 
+	200 4 7 12 13 8 181 55 181 54 187 54 187 55 
+	200 4 2 15 16 3 174 55 174 54 180 54 180 55 
+	200 4 3 16 9 4 181 55 181 54 187 54 187 55 
+	200 4 8 13 14 1 174 55 174 54 180 54 180 55 
+	200 4 1 14 15 2 181 55 181 54 187 54 187 55 
+	200 4 4 9 10 5 174 55 174 54 180 54 180 55 
+	200 4 5 10 11 6 181 55 181 54 187 54 187 55 
+	200 4 14 21 22 15 181 54 181 52 187 52 187 54 
+	200 4 15 22 23 16 174 54 174 52 180 52 180 54 
+	200 4 10 17 18 11 181 54 181 52 187 52 187 54 
+	200 4 11 18 19 12 174 54 174 52 180 52 180 54 
+	200 4 16 23 24 9 181 54 181 52 187 52 187 54 
+	200 4 9 24 17 10 174 54 174 52 180 52 180 54 
+	200 4 12 19 20 13 181 54 181 52 187 52 187 54 
+	200 4 13 20 21 14 174 54 174 52 180 52 180 54 
+	200 4 20 27 28 21 174 52 174 50 180 50 180 52 
+	200 4 21 28 29 22 181 52 181 50 187 50 187 52 
+	200 4 24 31 32 17 174 52 174 50 180 50 180 52 
+	200 4 17 32 25 18 181 52 181 50 187 50 187 52 
+	200 4 22 29 30 23 174 52 174 50 180 50 180 52 
+	200 4 23 30 31 24 181 52 181 50 187 50 187 52 
+	200 4 18 25 26 19 174 52 174 50 180 50 180 52 
+	200 4 19 26 27 20 181 52 181 50 187 50 187 52 
+	200 4 38 39 44 43 174 55 180 55 180 54 174 54 
+	200 4 39 40 45 44 181 55 187 55 187 54 181 54 
+	200 4 34 35 48 47 174 55 180 55 180 54 174 54 
+	200 4 35 36 41 48 181 55 187 55 187 54 181 54 
+	200 4 40 33 46 45 174 55 180 55 180 54 174 54 
+	200 4 33 34 47 46 181 55 187 55 187 54 181 54 
+	200 4 36 37 42 41 174 55 180 55 180 54 174 54 
+	200 4 37 38 43 42 181 55 187 55 187 54 181 54 
+	200 4 46 47 54 53 181 54 187 54 187 52 181 52 
+	200 4 47 48 55 54 174 54 180 54 180 52 174 52 
+	200 4 42 43 50 49 181 54 187 54 187 52 181 52 
+	200 4 43 44 51 50 174 54 180 54 180 52 174 52 
+	200 4 48 41 56 55 181 54 187 54 187 52 181 52 
+	200 4 41 42 49 56 174 54 180 54 180 52 174 52 
+	200 4 44 45 52 51 181 54 187 54 187 52 181 52 
+	200 4 45 46 53 52 174 54 180 54 180 52 174 52 
+	200 4 52 53 28 27 174 52 180 52 180 50 174 50 
+	200 4 53 54 29 28 181 52 187 52 187 50 181 50 
+	200 4 56 49 32 31 174 52 180 52 180 50 174 50 
+	200 4 49 50 25 32 181 52 187 52 187 50 181 50 
+	200 4 54 55 30 29 174 52 180 52 180 50 174 50 
+	200 4 55 56 31 30 181 52 187 52 187 50 181 50 
+	200 4 50 51 26 25 174 52 180 52 180 50 174 50 
+	200 4 51 52 27 26 181 52 187 52 187 50 181 50 
+	200 4 35 34 60 61 180 55 174 55 174 53 180 53 
+	200 4 35 61 62 36 181 54 181 53 187 53 187 54 
+	200 3 61 60 57 180 53 174 53 180 50 
+	200 4 39 38 64 65 180 55 174 55 174 53 180 53 
+	200 4 39 65 58 40 181 54 181 53 187 53 187 54 
+	200 4 37 36 62 63 180 55 174 55 174 53 180 53 
+	200 4 37 63 64 38 181 54 181 53 187 53 187 54 
+	200 4 33 40 58 59 180 55 174 55 174 53 180 53 
+	200 4 33 59 60 34 181 54 181 53 187 53 187 54 
+	200 3 62 61 57 187 53 181 53 181 50 
+	200 3 65 64 57 180 53 174 53 180 50 
+	200 3 58 65 57 187 53 181 53 181 50 
+	200 3 63 62 57 180 53 174 53 180 50 
+	200 3 64 63 57 187 53 181 53 181 50 
+	200 3 59 58 57 180 53 174 53 180 50 
+	200 3 60 59 57 187 53 181 53 181 50 
+

