ninth level
diff --git a/src/elements/PointLight.java b/src/elements/PointLight.java
index 397ffe0..c658b04 100644
--- a/src/elements/PointLight.java
+++ b/src/elements/PointLight.java
@@ -34,6 +34,8 @@
 	}
 
 	/**
+	 * Setter for kC
+	 * 
 	 * @param kC the kC to set
 	 * @return the object PointLight itself
 	 */
@@ -43,6 +45,8 @@
 	}
 
 	/**
+	 * Setter for kL
+	 * 
 	 * @param kL the kL to set
 	 * @return the object PointLight itself
 	 */
@@ -53,6 +57,7 @@
 
 	
 	 /**
+	 * Setter for kQ
 	 * 
 	 * @param kQ the kQ to set
 	 * @return the object PointLight itself
@@ -62,11 +67,23 @@
 		return this;
 	}
 
+	/**
+	 * Setter for radius
+	 * 
+	 * @param radius of the circle
+	 * @return the object PointLight itself
+	 */
 	public PointLight setRadius(double radius) {
 		this.radius=radius;
 		return this;
 	}
 	
+	/**
+	 * Setter for numOfRays
+	 * 
+	 * @param numOfRays for soft shadows
+	 * @return the object PointLight itself
+	 */
 	public PointLight setNumOfRays(int numOfRays) {
 		this.numOfRays=numOfRays;
 		return this;
diff --git a/src/geometries/Geometries.java b/src/geometries/Geometries.java
index 020cc93..6f0b6d8 100644
--- a/src/geometries/Geometries.java
+++ b/src/geometries/Geometries.java
@@ -2,15 +2,12 @@
  * 
  */
 package geometries;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
 
 import primitives.Point3D;
 import primitives.Ray;
+import primitives.Vector;
+import static primitives.Util.alignZero;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -21,15 +18,18 @@
  */
 public class Geometries extends Intersectable {
 	private List<Intersectable> _intersectableList;
-	private Intersectable _lastAdded;
-	
+	private Intersectable currentGeometry;
+	public boolean isImprovement;
+	private Box box;
+
 	/**
 	 * Default constructor that initializes the field with an empty list
 	 */
 	public Geometries() {
 		_intersectableList = new LinkedList<>();
-		maxBoundary=new Point3D(Double.NEGATIVE_INFINITY,Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
-		minBoundary=new Point3D(Double.POSITIVE_INFINITY,Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
+		maxBoundary = new Point3D(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
+		minBoundary = new Point3D(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
+
 	}
 
 	/**
@@ -44,34 +44,66 @@
 	}
 
 	/**
+	 * Setter for isImpruvment
+	 * 
+	 * @param isBvh for isImpruvment
+	 * @return the Geometries itself
+	 */
+	public Geometries setIsImprovement(boolean isImprovement) {
+		this.isImprovement = isImprovement;
+		return this;
+
+	}
+
+	/**
 	 * Adding to list
 	 * 
 	 * @param geometries
 	 */
 	public void add(Intersectable... geometries) {
 		_intersectableList.addAll(Arrays.asList(geometries));
-		/*
-		 * for (Intersectable intersectable : geometries) {
-		 * _intersectableList.add(intersectable); _lastAdded = intersectable;
-		 * setMinCoordinates(); setMaxCoordinates(); }
-		 */
-	}
 
-	
+	}
 
 	@Override
 	public List<GeoPoint> findGeoIntersections(Ray ray, double maxDistance) {
+
 		List<GeoPoint> intersections = null;
-	
-		//Go over all the geometries and find intersections with the ray
-		for (Intersectable geometry : _intersectableList ) {
-			var geoIntersectoions = geometry.findGeoIntersections(ray,maxDistance);
-			if (geoIntersectoions != null) {
-				if(intersections==null) {
-					intersections=new LinkedList<>(); 
-				
+
+		// If we run the acceleration improvement
+		if (isImprovement) {
+			// Go over all the geometries and find intersections with the ray
+			for (Intersectable geometry : _intersectableList) {
+
+				box = new Box(geometry);
+				// If the beam intersects the box of geometry
+				if (box.isRayIntersectsBox(ray) == true) {
+
+					var geoIntersectoions = geometry.findGeoIntersections(ray, maxDistance);
+					if (geoIntersectoions != null) {
+						if (intersections == null) {
+							intersections = new LinkedList<>();
+
+						}
+						intersections.addAll(geoIntersectoions);
+					}
 				}
-				intersections.addAll(geoIntersectoions);
+			}
+
+		}
+		// If we do not activate the acceleration improvement
+		else {
+			for (Intersectable geometry : _intersectableList) {
+
+				var geoIntersectoions = geometry.findGeoIntersections(ray, maxDistance);
+				if (geoIntersectoions != null) {
+					if (intersections == null) {
+						intersections = new LinkedList<>();
+
+					}
+					intersections.addAll(geoIntersectoions);
+				}
+
 			}
 		}
 		return intersections;
@@ -79,14 +111,14 @@
 
 	@Override
 	public void setMaxCoordinates() {
-		// TODO Auto-generated method stub
+
 		double x, y, z;
-		x = _lastAdded.maxBoundary.getX();
-		y = _lastAdded.maxBoundary.getY();
-		z = _lastAdded.maxBoundary.getZ();
-		double maxX = maxBoundary.getX();
-		double maxY = maxBoundary.getY();
-		double maxZ = maxBoundary.getZ();
+		x = currentGeometry.maxBoundary._x.coord;
+		y = currentGeometry.maxBoundary._y.coord;
+		z = currentGeometry.maxBoundary._z.coord;
+		double maxX = maxBoundary._x.coord;
+		double maxY = maxBoundary._y.coord;
+		double maxZ = maxBoundary._z.coord;
 		if (x > maxX)
 			maxX = x;
 		if (y > maxY)
@@ -94,47 +126,251 @@
 		if (z > maxZ)
 			maxZ = z;
 		maxBoundary = new Point3D(maxX, maxY, maxZ);
-		
+
 	}
 
 	@Override
 	public void setMinCoordinates() {
-		// TODO Auto-generated method stub
-		double x,y,z;
-		x=_lastAdded.minBoundary.getX();
-		y=_lastAdded.minBoundary.getY();
-		z=_lastAdded.minBoundary.getZ();
-		
-		double minX=minBoundary.getX();
-		double minY=minBoundary.getY();
-		double minZ=minBoundary.getZ();
-		if(x<minX)
-			minX=x;
-		if(y<minY)
-			minY=y;
-		if(z<minZ)
-			minZ=z;
-		minBoundary=new Point3D(minX, minY, minZ);
+
+		double x, y, z;
+		x = currentGeometry.minBoundary._x.coord;
+		y = currentGeometry.minBoundary._y.coord;
+		z = currentGeometry.minBoundary._z.coord;
+
+		double minX = minBoundary._x.coord;
+		double minY = minBoundary._y.coord;
+		double minZ = minBoundary._z.coord;
+		if (x < minX)
+			minX = x;
+		if (y < minY)
+			minY = y;
+		if (z < minZ)
+			minZ = z;
+		minBoundary = new Point3D(minX, minY, minZ);
 	}
 
 	
+	/**
+	 * Internal class for Boundaries of Geometry
+	 * 
+	 * @author Adiel
+	 *
+	 */
+	public static class Box {
+		private double minX, maxX;
+		private double minY, maxY;
+		private double minZ, maxZ;
 
-	public void BVH() {
-		TreeMap<Intersectable,List<Point3D>> map=new TreeMap<>();
-		
-		
-		for(Intersectable f:_intersectableList) {
-			Point3D max=f.maxBoundary;
-			Point3D min=f.minBoundary;
-			
-			
+		/**
+		 * Box constructor for minimum and maximum limits of geometry
+		 * 
+		 * @param geometry to wrap it in a virtual box
+		 */
+		public Box(Intersectable geometry) {
+			setMaxBox(geometry.maxBoundary);
+			setMinBox(geometry.minBoundary);
+
+		}
+
+		/**
+		 * Setter for the max box
+		 * 
+		 * @param max is 3D point for the coordinates
+		 */
+		private void setMaxBox(Point3D max) {
+			maxX = max._x.coord;
+			maxY = max._y.coord;
+			maxZ = max._z.coord;
+		}
+
+		/**
+		 * Setter for the min box
+		 * 
+		 * @param min is 3D point for the coordinates
+		 */
+		private void setMinBox(Point3D min) {
+			minX = min._x.coord;
+			minY = min._y.coord;
+			minZ = min._z.coord;
+		}
+
+		/**
+		 * The function checks whether the ray intersects the box
+		 * 
+		 * @param ray from the camera
+		 * @return false if the ray does not intersect the box, otherwise return true
+		 */
+		public boolean isRayIntersectsBox(Ray ray) {
+
+			double minTX = 0, minTY = 0, minTZ = 0;
+			double maxTX = Double.POSITIVE_INFINITY, maxTY = maxTX, maxTZ = maxTX;
+			Vector v = ray.dir;
+			Point3D headV = v._head;
+			Point3D originRay = ray.p0;
+			double dirX = alignZero(headV._x.coord);
+			double dirY = alignZero(headV._y.coord);
+			double dirZ = alignZero(headV._z.coord);
+			double p0X = alignZero(originRay._x.coord);
+			double p0Y = alignZero(originRay._y.coord);
+			double p0Z = alignZero(originRay._z.coord);
+
+			// Check if the coordinate X of the direction vector is 0, and also the
+			// coordinate X of the beginning of the beam is greater than the maximum X
+			// of the box or smaller than the minimum X of the box then the beam does not
+			// intersect the box
+			if (dirX == 0 && (p0X > maxX || p0X < minX))
+				return false;
+
+			if (dirX > 0) {
+				if (maxX < p0X)// If the coordinate X of the beginning of the beam is greater than that of the
+								// max of the box, then the beam does not intersect the box (negative t)
+					return false;
+				maxTX = (maxX - p0X) / dirX;
+				minTX = (minX - p0X) / dirX;
+			}
+			if (dirX < 0) {
+				if (minX > p0X)// If the coordinate X of the beginning of the beam is smaller than that of the
+								// max of the box then the beam does not intersect the box (negative t)
+					return false;
+				maxTX = (minX - p0X) / dirX;
+				minTX = (maxX - p0X) / dirX;
+			}
+
+			// Check if the coordinate Y of the direction vector is 0, and also the
+			// coordinate Y of the beginning of the beam is greater than the maximum Y
+			// of the box or smaller than the minimum Y of the box then the beam does not
+			// intersect the box
+			if (dirY == 0 && (p0Y > maxY || p0Y < minY))
+				return false;
+
+			if (dirY > 0) {
+				if (maxY < p0Y)// If the coordinate Y of the beginning of the beam is greater than that of the
+								// max of the box, then the beam does not intersect the box (negative t)
+					return false;
+				maxTY = (maxY - p0Y) / dirY;
+				minTY = (minY - p0Y) / dirY;
+			}
+			if (dirY < 0) {
+				if (minY > p0Y)// If the coordinate Y of the beginning of the beam is smaller than that of the
+								// max of the box then the beam does not intersect the box (negative t)
+					return false;
+				maxTY = (minY - p0Y) / dirY;
+				minTY = (maxY - p0Y) / dirY;
+			}
+
+			// Check if the coordinate Z of the direction vector is 0, and also the
+			// coordinate Z of the beginning of the beam is greater than the maximum Z
+			// of the box or smaller than the minimum Z of the box then the beam does not
+			// intersect the box
+			if (dirZ == 0 && (p0Z > maxZ || p0Z < minZ))
+				return false;
+
+			if (dirZ > 0) {
+				if (maxZ < p0Z)// If the coordinate Z of the beginning of the beam is greater than that of the
+								// max of the box, then the beam does not intersect the box (negative t)
+					return false;
+				maxTZ = (maxZ - p0Z) / dirZ;
+				minTZ = (minZ - p0Z) / dirZ;
+			}
+			if (dirZ < 0) {
+				if (minZ > p0Z)// If the coordinate Z of the beginning of the beam is smaller than that of the
+								// max of the box then the beam does not intersect the box (negative t)
+					return false;
+				maxTZ = (minZ - p0Z) / dirZ;
+				minTZ = (maxZ - p0Z) / dirZ;
+			}
+
+			// We will make sure that the maximum T is the minimum t of all the coordinates
+			// calculated
+			double maxT = Double.min(maxTX, maxTY);
+			maxT = Double.min(maxT, maxTZ);
+
+			// We will make sure that the minimum T is the maximum t of all the coordinates
+			// calculated
+			double minT = Double.max(minTX, minTY);
+			minT = Double.max(minT, minTZ);
+
+			// The ray does not intersects the box
+			if (maxT < minT)
+				return false;
+
+			return true;
+
+		}
+
+		boolean isIntersect(Ray ray) {
+			Vector v = ray.dir;
+			Point3D head = v._head;
+			Point3D point3d = ray.p0;
+
+			double tMaxX = (maxX - point3d._x.coord) / head._x.coord;
+			double tMaxY = (maxY - point3d._y.coord) / head._y.coord;
+			double tMaxZ = (maxZ - point3d._z.coord) / head._z.coord;
+
+			double tMinX = (minX - point3d._x.coord) / head._x.coord;
+			double tMinY = (minY - point3d._y.coord) / head._y.coord;
+			double tMinZ = (minZ - point3d._z.coord) / head._z.coord;
+
+			double inversX = 1 / head._x.coord;
+			double inversY = 1 / head._y.coord;
+			double inversZ = 1 / head._z.coord;
+
+			if (inversX >= 0) {
+				tMinX = (minX - point3d._x.coord) * inversX;
+				tMaxX = (maxX - point3d._x.coord) * inversX;
+			} else {
+				tMinX = (maxX - point3d._x.coord) * inversX;
+				tMaxX = (minX - point3d._x.coord) * inversX;
+			}
+
+			if (inversY >= 0) {
+				tMinY = (minY - point3d._y.coord) * inversY;
+				tMaxY = (maxY - point3d._y.coord) * inversY;
+
+			} else {
+				tMinY = (maxY - point3d._y.coord) * inversY;
+				tMaxY = (minY - point3d._y.coord) * inversY;
+			}
+
+			if (inversZ >= 0) {
+				tMinZ = (minZ - point3d._z.coord) * inversZ;
+				tMaxZ = (maxZ - point3d._z.coord) * inversZ;
+			} else {
+				tMinZ = (maxZ - point3d._z.coord) * inversZ;
+				tMaxZ = (minZ - point3d._z.coord) * inversZ;
+			}
+
+			// double tMin = tMinX > tMinY ? tMinX : tMinY;
+			// double tMax = tMaxX < tMinY ? tMaxX : tMaxY;
+
+			if (tMinX > tMaxY || tMinY > tMaxX)
+				return false;
+
+			if (tMinY > tMinX)
+				tMinX = tMinY;
+			if (tMaxY < tMaxX)
+				tMaxX = tMaxY;
+
+			if (tMinX > tMaxZ || tMinZ > tMaxX)
+				return false;
+
+			if (tMinZ > tMinX)
+				tMinX = tMinZ;
+
+			if (tMaxZ < tMaxX)
+				tMaxX = tMaxZ;
+
+			// if(tMax<0 || tMin<0)
+			// return false;
+
+			return true;
+
 		}
 	}
 
-	public Iterator<Intersectable> iterator() {
-		// TODO Auto-generated method stub
-		return _intersectableList.iterator();
-	}
 	
 
+
+
+
 }
\ No newline at end of file
diff --git a/src/geometries/Geometry.java b/src/geometries/Geometry.java
index 0005a7e..618141f 100644
--- a/src/geometries/Geometry.java
+++ b/src/geometries/Geometry.java
@@ -66,6 +66,8 @@
 	 * @return normalized vector 

 	 */

 	public abstract Vector getNormal(Point3D point3D);

+	

+	

 

 

 }

diff --git a/src/geometries/Intersectable.java b/src/geometries/Intersectable.java
index b55c1c6..69d0a45 100644
--- a/src/geometries/Intersectable.java
+++ b/src/geometries/Intersectable.java
@@ -14,8 +14,10 @@
  *         Interface for intersection points
  */
 public abstract class Intersectable {
-	protected Point3D minBoundary;
-	protected Point3D maxBoundary;
+	public Point3D maxBoundary = new Point3D(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY,
+			Double.NEGATIVE_INFINITY);
+	public Point3D minBoundary = new Point3D(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY,
+			Double.POSITIVE_INFINITY);
 
 	/**
 	 * Static Internal Auxiliary Class (PDS) that is a tuple of references to a
@@ -56,12 +58,12 @@
 	}
 
 	/**
-	 * The function finds intersection points with the beam within 
-	 * the range of the maximum distance
+	 * The function finds intersection points with the beam within the range of the
+	 * maximum distance
 	 * 
-	 * @param ray the famous Ray pointing to
-	 * @param maxDistance for upper boundary of distance from the ray head 
-	 * to the intersection point
+	 * @param ray         the famous Ray pointing to
+	 * @param maxDistance for upper boundary of distance from the ray head to the
+	 *                    intersection point
 	 * @return list of intersection points
 	 */
 	abstract List<GeoPoint> findGeoIntersections(Ray ray, double maxDistance);
@@ -72,40 +74,32 @@
 	 * @param ray the famous Ray pointing to
 	 * @return intersection points
 	 */
-	 public List<Point3D> findIntersections(Ray ray) {
+	public List<Point3D> findIntersections(Ray ray) {
 		var geoList = findGeoIntersections(ray);
 		return geoList == null ? null : geoList.stream().map(gp -> gp.point).collect(Collectors.toList());
 	}
-	
-	
+
 	/**
 	 * A default function for finding GeoPoint's intersection points with a beam
 	 * 
 	 * @param ray the ray intersects
-	 * @return calling the function of finding intersection points with a default parameter
+	 * @return calling the function of finding intersection points with a default
+	 *         parameter
 	 */
-	  public List<GeoPoint> findGeoIntersections(Ray ray) {
-    	return findGeoIntersections(ray, Double.POSITIVE_INFINITY);
-}
-	 
-	 protected abstract void setMaxCoordinates();
-	 protected abstract void setMinCoordinates();
-
-	/**
-	 * @return the minBoundary
-	 */
-	public Point3D getMinBoundary() {
-		return minBoundary;
+	public List<GeoPoint> findGeoIntersections(Ray ray) {
+		return findGeoIntersections(ray, Double.POSITIVE_INFINITY);
 	}
 
 	/**
-	 * @return the maxBoundary
+	 * Abstract function for the coordinate values of the maximum point of the geometry
 	 */
-	public Point3D getMaxBoundary() {
-		return maxBoundary;
-	}
-	 
-	 
-	 
+	public abstract void setMaxCoordinates();
+
+	/**
+	 * Abstract function for the coordinate values of the minimum point of the geometry
+	 */
+	public abstract void setMinCoordinates();
+
+	
 
 }
diff --git a/src/geometries/Plane.java b/src/geometries/Plane.java
index 29a7c41..4c38884 100644
--- a/src/geometries/Plane.java
+++ b/src/geometries/Plane.java
@@ -107,17 +107,17 @@
 	}

 

 	@Override

-	protected void setMaxCoordinates() {

-		// TODO Auto-generated method stub

-		double x = Double.POSITIVE_INFINITY, y = x, z = y;

+	public void setMaxCoordinates() {

+		

+		double x = Double.POSITIVE_INFINITY, y = Double.POSITIVE_INFINITY, z = Double.POSITIVE_INFINITY;

 		maxBoundary = new Point3D(x, y, z);

 		

 	}

 

 	@Override

-	protected void setMinCoordinates() {

-		// TODO Auto-generated method stub

-		double x = Double.NEGATIVE_INFINITY, y = x, z = y;

+	public void setMinCoordinates() {

+		

+		double x = Double.NEGATIVE_INFINITY, y = Double.NEGATIVE_INFINITY, z = Double.NEGATIVE_INFINITY;

 		minBoundary = new Point3D(x, y, z);

 		

 	}

diff --git a/src/geometries/Polygon.java b/src/geometries/Polygon.java
index 3bf42e0..ef802c8 100644
--- a/src/geometries/Polygon.java
+++ b/src/geometries/Polygon.java
@@ -11,7 +11,6 @@
  * @author Dan

  */

 public class Polygon extends Geometry {

-	private static final double DELTA = 0.1;

 	

 	/**

 	 * List of polygon's vertices

@@ -51,9 +50,11 @@
 		// polygon with this plane.

 		// The plane holds the invariant normal (orthogonal unit) vector to the polygon

 		plane = new Plane(vertices[0], vertices[1], vertices[2]);

-		if (vertices.length == 3)

+		if (vertices.length == 3) {

+			setMaxCoordinates();

+		setMinCoordinates();

 			return; // no need for more tests for a Triangle

-

+		}

 		Vector n = plane.getNormal();

 

 		// Subtracting any subsequent points will throw an IllegalArgumentException

@@ -132,16 +133,16 @@
 	}

 

 	@Override

-	protected void setMaxCoordinates() {

-		// TODO Auto-generated method stub

+	public void setMaxCoordinates() {

+		

 		double maxX = Double.NEGATIVE_INFINITY;

 		double maxY = Double.NEGATIVE_INFINITY;

 		double maxZ = Double.NEGATIVE_INFINITY;

 		double x, y, z;

 		for (Point3D p : vertices) {

-			x = p.getX();

-			y = p.getY();

-			z = p.getZ();

+			x = p._x.coord;

+			y = p._y.coord;

+			z = p._z.coord;

 			if (x > maxX)

 				maxX = x;

 			if (y > maxY)

@@ -149,22 +150,22 @@
 			if (z > maxZ)

 				maxZ = z;

 		}

-		maxBoundary = new Point3D(maxX + DELTA, maxY + DELTA, maxZ + DELTA);

+		maxBoundary = new Point3D(maxX, maxY, maxZ);

 	}

 		

 

 

 	@Override

-	protected void setMinCoordinates() {

-		// TODO Auto-generated method stub

+	public void setMinCoordinates() {

+		

 		double minX = Double.POSITIVE_INFINITY;

 		double minY = Double.POSITIVE_INFINITY;

 		double minZ = Double.POSITIVE_INFINITY;

 		double x, y, z;

 		for (Point3D p : vertices) {

-			x = p.getX();

-			y = p.getY();

-			z = p.getZ();

+			x = p._x.coord;

+			y = p._y.coord;

+			z = p._z.coord;

 			if (x < minX)

 				minX = x;

 			if (y < minY)

@@ -172,7 +173,7 @@
 			if (z < minZ)

 				minZ = z;

 		}

-		minBoundary = new Point3D(minX - DELTA, minY - DELTA, minZ - DELTA);

+		minBoundary = new Point3D(minX, minY, minZ);

 		

 	}

 }

diff --git a/src/geometries/Sphere.java b/src/geometries/Sphere.java
index de88df7..ac53e6f 100644
--- a/src/geometries/Sphere.java
+++ b/src/geometries/Sphere.java
@@ -110,21 +110,19 @@
 	@Override

 	public void setMaxCoordinates() {

 		

-

-		// TODO Auto-generated method stub

-		double x = center.getX()+ radius;

-		double y = center.getY() +radius;

-		double z = center.getZ() + radius;

+		double x = center._x.coord+ radius;

+		double y = center._y.coord +radius;

+		double z = center._z.coord + radius;

 		maxBoundary = new Point3D(x, y, z);

 		

 	}

 

 	@Override

 	public void setMinCoordinates() {

-		// TODO Auto-generated method stub

-		double x = center.getX()- radius;

-		double y = center.getY()-radius;

-		double z = center.getZ() - radius;

+	

+		double x = center._x.coord- radius;

+		double y = center._y.coord-radius;

+		double z = center._z.coord- radius;

 		minBoundary = new Point3D(x, y, z);

 	}

 

diff --git a/src/geometries/Triangle.java b/src/geometries/Triangle.java
index 25044dc..da62859 100644
--- a/src/geometries/Triangle.java
+++ b/src/geometries/Triangle.java
@@ -11,7 +11,7 @@
  *

  */

 public class Triangle extends Polygon {

-

+	

 	/**

 	 * Triangle constructor receiving a list

 	 * 

diff --git a/src/geometries/Tube.java b/src/geometries/Tube.java
index 7f070bc..d68ca2a 100644
--- a/src/geometries/Tube.java
+++ b/src/geometries/Tube.java
@@ -80,13 +80,13 @@
 	}

 

 	@Override

-	protected void setMaxCoordinates() {

+	public void setMaxCoordinates() {

 		// TODO Auto-generated method stub

 		

 	}

 

 	@Override

-	protected void setMinCoordinates() {

+	public void setMinCoordinates() {

 		// TODO Auto-generated method stub

 		

 	}

diff --git a/src/primitives/Coordinate.java b/src/primitives/Coordinate.java
index f9a3a9c..5d4cfdd 100644
--- a/src/primitives/Coordinate.java
+++ b/src/primitives/Coordinate.java
@@ -14,7 +14,7 @@
      * Coordinate value, intentionally "package-friendly" due to performance

      * constraints

      */

-    final double coord;

+    public double coord;

 

     /**

      * Coordinate constructor receiving a coordinate value

diff --git a/src/primitives/Point3D.java b/src/primitives/Point3D.java
index d954227..13d433a 100644
--- a/src/primitives/Point3D.java
+++ b/src/primitives/Point3D.java
@@ -7,9 +7,9 @@
  *

  */

 public class Point3D {

-	final Coordinate _x;

-	final Coordinate _y;

-	final Coordinate _z;

+	public Coordinate _x;

+	public Coordinate _y;

+	public Coordinate _z;

 

 	/**

 	 * Static constant containing a point(0,0,0)

@@ -122,14 +122,6 @@
 		return _x.coord;

 	}

 

-	public double getY() {

-		// TODO Auto-generated method stub

-		return _y.coord;

-	}

-

-	public double getZ() {

-		// TODO Auto-generated method stub

-		return _z.coord;

-	}

+	

 

 }

diff --git a/src/primitives/Ray.java b/src/primitives/Ray.java
index 2dc68f4..665d42f 100644
--- a/src/primitives/Ray.java
+++ b/src/primitives/Ray.java
@@ -19,8 +19,8 @@
 	 */

 	private static final double DELTA = 0.1;

 

-	private Point3D p0;

-	private Vector dir;

+	public Point3D p0;

+	public Vector dir;

 	

 	/**

 	 * Ray constructor receiving Point and direction and normal

@@ -180,26 +180,25 @@
 		

 		Point3D centerCircle=this.getPoint(distance);

 		Point3D randomPoint;

-		double x,y,d;

-		double nv=alignZero(n.dotProduct(getDir()));

+		double x,y;

+		

 		//A loop that produces rays using random dots

 		for(int i=0; i<numOfRays; i++) {

-			x = random(-1,1);

-			y=Math.sqrt(1-x*x);

-			d=random(-radius, radius);

-			x=alignZero(x*d);

-			y=alignZero(y*d);

+			x = random(-radius, radius);

+			y=random(-radius, radius);

+			

+			x=alignZero(x);

+			y=alignZero(y);

 			randomPoint=centerCircle;

 			if(x!=0)

 				randomPoint=randomPoint.add(nX.scale(x));

 			if(y!=0)

 				randomPoint=randomPoint.add(nY.scale(y));

 			

-			Vector tPoint=randomPoint.subtract(p0);

-			double nt=alignZero(n.dotProduct(tPoint));

-			if(nv*nt>0) {

-				rays.add(new Ray(p0,tPoint));

-			}

+			

+			

+				rays.add(new Ray(p0,randomPoint.subtract(p0)));

+			

 		}

 		

 		return rays;

diff --git a/src/primitives/Vector.java b/src/primitives/Vector.java
index ab7d9e5..27a59a0 100644
--- a/src/primitives/Vector.java
+++ b/src/primitives/Vector.java
@@ -9,7 +9,7 @@
  *

  */

 public class Vector {

-	Point3D _head;

+	public Point3D _head;

 

 	/**

 	 * Vector constructor receive 3 coordinate values

diff --git a/src/renderer/RayTracerBasic.java b/src/renderer/RayTracerBasic.java
index b674c80..8e8fe36 100644
--- a/src/renderer/RayTracerBasic.java
+++ b/src/renderer/RayTracerBasic.java
@@ -1,6 +1,4 @@
 package renderer;
-
-import geometries.Geometry;
 import geometries.Intersectable.GeoPoint;
 import primitives.Color;
 import primitives.Material;
@@ -10,11 +8,7 @@
 import scene.Scene;
 import static primitives.Util.*;
 
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 import elements.LightSource;
 
diff --git a/src/scene/Box.java b/src/scene/Box.java
deleted file mode 100644
index c214779..0000000
--- a/src/scene/Box.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package scene;
-
-import static primitives.Util.*;
-import geometries.Geometries;
-import primitives.Point3D;
-import primitives.Ray;
-import primitives.Vector;
-
-public class Box {
-private static double minX, minY, minZ;
-private static double maxX,maxY,maxZ;
-
-
-  public Box(int l,Geometries geometries) {
-	  setMaxBox(geometries.getMaxBoundary());
-	  setMinBox(geometries.getMinBoundary());
- 
-  
-  }
-
-private void setMaxBox(Point3D max) {
-	maxX=max.getX();
-	maxY=max.getY();
-	maxZ=max.getZ();
-}
-
-private void setMinBox(Point3D min) {
-	minX=min.getX();
-	minY=min.getY();
-	minZ=min.getZ();
-}
-
-
-
-private boolean checkIntersect(Ray ray) {
-	
-	double minTX = 0, minTY = 0, minTZ = 0;
-	double maxTX = Double.POSITIVE_INFINITY, maxTY = maxTX, maxTZ = maxTX;
-	Vector v = ray.getDir();
-	Point3D headV = v.getHead();
-	Point3D originRay = ray.getP0();
-	double rayX = alignZero(headV.getX());
-	double rayY = alignZero(headV.getY());
-	double rayZ = alignZero(headV.getZ());
-	double rayPX = alignZero(originRay.getX());
-	double rayPY = alignZero(originRay.getY());
-	double rayPZ = alignZero(originRay.getZ());
-
-	if (rayX == 0 && (rayPX > maxX || rayPX < minX))
-		return false;
-	if (rayX > 0) {
-		if (maxX < rayPX)
-			return false;
-		maxTX = (maxX - rayPX) / rayX;
-		minTX = Double.max(0, (minX - rayPX) / rayX);
-	}
-	if (rayX < 0) {
-		if (minX > rayPX)
-			return false;
-		maxTX = (minX - rayPX) / rayX;
-		minTX = Double.max(0, (maxX - rayPX) / rayX);
-	}
-
-	if (rayY == 0 && (rayPY > maxY || rayPY < minY))
-		return false;
-	if (rayY > 0) {
-		if (maxY < rayPY)
-			return false;
-		maxTY = (maxY - rayPY) / rayY;
-		minTY = Double.max(0, (minY - rayPY) / rayY);
-	}
-	if (rayY < 0) {
-		if (minY > rayPY)
-			return false;
-		maxTY = (minY - rayPY) / rayY;
-		minTY = Double.max(0, (maxY - rayPY) / rayY);
-	}
-
-	if (rayZ == 0 && (rayPZ > maxZ || rayPZ < minZ))
-		return false;
-	if (rayZ > 0) {
-		if (maxZ < rayPZ)
-			return false;
-		maxTZ = (maxZ - rayPZ) / rayZ;
-		minTZ = Double.max(0, (minZ - rayPZ) / rayZ);
-	}
-	if (rayZ < 0) {
-		if (minZ > rayPZ)
-			return false;
-		maxTZ = (minZ - rayPZ) / rayZ;
-		minTZ = Double.max(0, (maxZ - rayPZ) / rayZ);
-	}
-	double minT = Double.min(maxTX, maxTY);
-	minT = Double.min(minT, maxTZ);
-	double maxT = Double.max(minTX, minTY);
-	maxT = Double.max(maxT, minTZ);
-	if (minT < maxT)
-		return false;
-	Point3D p = ray.getPoint(maxT);
-	return true;
-	
-}
-
-
-  
-}
diff --git a/src/unittests/lights/MiniProjectTests.java b/src/unittests/lights/MiniProjectTests.java
index 0a7cf06..5f91974 100644
--- a/src/unittests/lights/MiniProjectTests.java
+++ b/src/unittests/lights/MiniProjectTests.java
@@ -4,10 +4,10 @@
 
 import elements.AmbientLight;
 import elements.Camera;
-
+import elements.DirectionalLight;
 import elements.PointLight;
 import elements.SpotLight;
-import geometries.Plane;
+import geometries.Geometries;
 import geometries.Polygon;
 import geometries.Sphere;
 import geometries.Triangle;
@@ -35,12 +35,12 @@
 		
 		
 		scene.setAmbientLight(new AmbientLight(new Color(java.awt.Color.WHITE), 0.15));
-		
+		scene.geometries.setIsImprovement(false);
 		scene.geometries.add( //
 				new Triangle(new Point3D(-150, -150, -115), new Point3D(150, -150, -135), new Point3D(75, 75, -150)) //
 				.setEmission(new Color(java.awt.Color.BLACK)).setMaterial(new Material().setkD(0.7).setkS(0.8).setnShininess(60).setkR(0)), //
 				new Triangle(new Point3D(-150, -150, -115), new Point3D(-70, 70, -140), new Point3D(75, 75, -150)) //
-						.setEmission(new Color(java.awt.Color.BLACK)).setMaterial(new Material().setkD(0.5).setkS(0.5).setnShininess(60)), //
+						.setEmission(new Color(java.awt.Color.BLACK)).setMaterial(new Material().setkD(0.5).setkS(0.5).setnShininess(60)), //*/
 				new Sphere(30, new Point3D(50, 118, -80)) //
 						.setEmission(new Color(java.awt.Color.BLUE)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1)
@@ -49,15 +49,56 @@
 						.setEmission(new Color(java.awt.Color.MAGENTA)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1)
 								.setnShininess(30).setkR(0.2)),
-						new Sphere(20, new Point3D(60, -50, 50)) //
+						new Sphere(10, new Point3D(60, -50, 50)) //
 						.setEmission(new Color(java.awt.Color.BLUE)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
-						new Sphere(20, new Point3D(10, -50, 50)) //
+						new Sphere(10, new Point3D(10, -50, 50)) //
 						.setEmission(new Color(153,255,153)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
-						new Sphere(20, new Point3D(10, -10, 50)) //
+						new Sphere(10, new Point3D(10, -10, 50)) //
 						.setEmission(new Color(204,102,0)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-15, -10, 50)) //
+						.setEmission(new Color(0,204,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-20, 10, 50)) //
+						.setEmission(new Color(102,102,102)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-40, -20, 50)) //
+						.setEmission(new Color(10,204,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-10, -40, 50)) //
+						.setEmission(new Color(102,51,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-10, -40, 50)) //
+						.setEmission(new Color(102,0,153)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-25, -55, 50)) //
+						.setEmission(new Color(255,255,255)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-10, -40, 50)) //
+						.setEmission(new Color(102,51,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-10, 40, 50)) //
+						.setEmission(new Color(0,0,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(30, -40, 50)) //
+						.setEmission(new Color(51,204,255)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(30, 40, 50)) //
+						.setEmission(new Color(255,102,102)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(40, 250, 50)) //
+						.setEmission(new Color(51,153,255)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(40, 10, 50)) //
+						.setEmission(new Color(102,255,102)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(40, -15, 50)) //
+						.setEmission(new Color(51,51,51)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						
+						
 						new Sphere(10, new Point3D(10, -110, 50)) //
 						.setEmission(new Color(204,102,0)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
@@ -91,30 +132,186 @@
 						new Sphere(10, new Point3D(30, -110, 50)) //
 						.setEmission(new Color(76,0,152)) //
 						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
-						new Plane(new Point3D(-500,-500,0),new Point3D(500,-300,0),new Point3D(0,-400,10) ),
+						//new Plane(new Point3D(-500,-500,0),new Point3D(500,-300,0),new Point3D(0,-400,10) ),
+						
 		new Polygon(new Point3D(80,-80,80),new Point3D(80,80,80),new Point3D(-80,80,80),new Point3D(-80,-80,80))
+		.setEmission(new Color(20,27,96)).setMaterial(new Material().setkD(0.4).setkS(0.2)
+			.setnShininess(100).setkT(0.6)),
+		new Polygon(new Point3D(-80,-80,-80),new Point3D(-80,80,-80),new Point3D(80,80,-80),new Point3D(80,-80,-80))
+		.setEmission(new Color(java.awt.Color.BLUE)).setMaterial(new Material().setkD(1).setkS(0)
+				.setnShininess(30).setkT(0)),
+		new Polygon(new Point3D(80,-80,-80),new Point3D(80,80,-80),new Point3D(80,80,80),new Point3D(80,-80,80))
+		.setEmission(new Color(java.awt.Color.BLUE)).setMaterial(new Material().setkD(1).setkS(0)
+				.setnShininess(30).setkT(0)),
+		new Polygon(new Point3D(-80,-80,80),new Point3D(-80,80,80),new Point3D(-80,80,-80),new Point3D(-80,-80,-80))
+		.setEmission(new Color(153,204,255)).setMaterial(new Material().setkD(1).setkS(0)
+				.setnShininess(30).setkT(0)),
+		new Polygon(new Point3D(80,80,80),new Point3D(80,80,-80),new Point3D(-80,80,-80),new Point3D(-80,80,80))
+		.setEmission(new Color(0,255,102)).setMaterial(new Material().setkD(1).setkS(0)
+				.setnShininess(30).setkT(0)),
+		new Polygon(new Point3D(-80,-80,80),new Point3D(-80,-80,-80),new Point3D(80,-80,-80),new Point3D(80,-80,80))
+		.setEmission(new Color(16,27,96)).setMaterial(new Material().setkD(1).setkS(0)
+				.setnShininess(30).setkT(0)));
+		
+		scene.lights.add(new SpotLight(new Color(230, 212, 188), new Point3D(10, -110, 100), new Vector(0, 0, -1)) //
+				.setkL(4E-5).setkQ(2E-7).setRadius(3).setNumOfRays(150));
+		scene.lights.add(new SpotLight(new Color(155,102,0), new Point3D(50, 118, 0), new Vector(0, 0, -1)) //
+				.setkL(0.00001).setkQ(0.000005));
+		scene.lights.add(new SpotLight(new Color(255,102,0), new Point3D(-40, 150, 0), new Vector(0, 0, -1)) //
+				.setkL(0.00001).setkQ(0.000005));
+		scene.lights.add(new SpotLight(new Color(40, 240, 0), new Point3D(60,50,0), new Vector(1, 1, -3)) //
+		.setkL(1E-5).setkQ(1.5E-7));
+		scene.lights.add(new DirectionalLight(new Color(0, 10, 50), new Vector(0, 0, -1)));
+		scene.lights.add(new PointLight(new Color(0, 0, 250), new Point3D(50, 118, 0))
+				.setkL(0.0005).setkQ(0.0005));
+		
+		ImageWriter imageWriter = new ImageWriter("miniproject3", 600, 600);
+		Render render = new Render() //
+				.setImageWriter(imageWriter) //
+				.setCamera(camera) //
+				.setRayTracer(new RayTracerBasic(scene)).setDebugPrint().setMultithreading(1);
+
+		render.renderImage();
+		render.writeToImage();
+	}
+
+	
+	@Test
+	public void test1() {
+		Camera camera = new Camera(new Point3D(0, 0, 2000), new Vector(0, 0, -1), new Vector(0, 1, 0)) //
+				.setViewPlaneSize(200, 200).setVpDistance(1000);
+		
+		
+		scene.setAmbientLight(new AmbientLight(new Color(java.awt.Color.WHITE), 0.15));
+		scene.geometries.setIsImprovement(true);
+	 //
+				Geometries g1=new Geometries( new Triangle(new Point3D(-150, -150, -115), new Point3D(150, -150, -135), new Point3D(75, 75, -150)) //
+				.setEmission(new Color(java.awt.Color.BLACK)).setMaterial(new Material().setkD(0.7).setkS(0.8).setnShininess(60).setkR(0)), //
+				 new Triangle(new Point3D(-150, -150, -115), new Point3D(-70, 70, -140), new Point3D(75, 75, -150)) //
+						.setEmission(new Color(java.awt.Color.BLACK)).setMaterial(new Material().setkD(0.5).setkS(0.5).setnShininess(60))); //*/
+			
+				Geometries g2=new Geometries( new Sphere(30, new Point3D(50, 118, -80)) //
+						.setEmission(new Color(java.awt.Color.BLUE)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1)
+								.setnShininess(30).setkR(0.2)),
+					new Sphere(30, new Point3D(-40, 118, -80)) //
+						.setEmission(new Color(java.awt.Color.MAGENTA)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1)
+								.setnShininess(30).setkR(0.2)));
+						
+			Geometries g3=new Geometries( new Sphere(10, new Point3D(60, -50, 50)) //
+					.setEmission(new Color(java.awt.Color.BLUE)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(10, -50, 50)) //
+					.setEmission(new Color(153,255,153)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(10, -10, 50)) //
+					.setEmission(new Color(204,102,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-15, -10, 50)) //
+					.setEmission(new Color(0,204,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-20, 10, 50)) //
+					.setEmission(new Color(102,102,102)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-40, -20, 50)) //
+					.setEmission(new Color(10,204,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-10, -40, 50)) //
+					.setEmission(new Color(102,51,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-10, -40, 50)) //
+					.setEmission(new Color(102,0,153)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-25, -55, 50)) //
+					.setEmission(new Color(255,255,255)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-10, -40, 50)) //
+					.setEmission(new Color(102,51,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(-10, 40, 50)) //
+					.setEmission(new Color(0,0,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(30, -40, 50)) //
+					.setEmission(new Color(51,204,255)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(30, 40, 50)) //
+					.setEmission(new Color(255,102,102)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(40, 250, 50)) //
+					.setEmission(new Color(51,153,255)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(40, 10, 50)) //
+					.setEmission(new Color(102,255,102)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+					new Sphere(10, new Point3D(40, -15, 50)) //
+					.setEmission(new Color(51,51,51)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)));
+					
+			Geometries g4=new Geometries(new Sphere(10, new Point3D(10, -110, 50)) //
+						.setEmission(new Color(204,102,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(0, -110, 50)) //
+						.setEmission(new Color(152,85,0)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-10, -110, 50)) //
+						.setEmission(new Color(152,72,0)) //
+					.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-30, -110, 50)) //
+						.setEmission(new Color(1,10,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-40, -110, 50)) //
+						.setEmission(new Color(113,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-50, -110, 50)) //
+						.setEmission(new Color(83,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(-60, -110, 50)) //
+						.setEmission(new Color(56,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(60, -110, 50)) //
+						.setEmission(new Color(15,10,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(50, -110, 50)) //
+						.setEmission(new Color(133,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(40, -110, 50)) //
+						.setEmission(new Color(103,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)),
+						new Sphere(10, new Point3D(30, -110, 50)) //
+						.setEmission(new Color(76,0,152)) //
+						.setMaterial(new Material().setkD(0.6).setkS(1).setnShininess(30).setkR(0.2)));
+						//new Plane(new Point3D(-500,-500,0),new Point3D(500,-300,0),new Point3D(0,-400,10) ),
+	Geometries g=new Geometries( new Polygon(new Point3D(80,-80,80),new Point3D(80,80,80),new Point3D(-80,80,80),new Point3D(-80,-80,80))
 		.setEmission(new Color(0,27,96)).setMaterial(new Material().setkD(0.2).setkS(0.2)
 			.setnShininess(100).setkT(0.3)),
-		new Polygon(new Point3D(-80,-80,-80),new Point3D(-80,80,-80),new Point3D(80,80,-80),new Point3D(80,-80,-80))
+		  new Polygon(new Point3D(-80,-80,-80),new Point3D(-80,80,-80),new Point3D(80,80,-80),new Point3D(80,-80,-80))
 		.setEmission(new Color(java.awt.Color.BLUE)).setMaterial(new Material().setkD(0.2).setkS(0.2)
 				.setnShininess(30).setkT(0.6)),
-		new Polygon(new Point3D(80,-80,-80),new Point3D(80,80,-80),new Point3D(80,80,80),new Point3D(80,-80,80))
+		 new Polygon(new Point3D(80,-80,-80),new Point3D(80,80,-80),new Point3D(80,80,80),new Point3D(80,-80,80))
 		.setEmission(new Color(java.awt.Color.BLUE)).setMaterial(new Material().setkD(0.2).setkS(0.2)
 				.setnShininess(30).setkT(0.6)),
 		new Polygon(new Point3D(-80,-80,80),new Point3D(-80,80,80),new Point3D(-80,80,-80),new Point3D(-80,-80,-80))
 		.setEmission(new Color(153,204,255)).setMaterial(new Material().setkD(0.2).setkS(0.2)
 				.setnShininess(30).setkT(0.2)),
-		new Polygon(new Point3D(80,80,80),new Point3D(80,80,-80),new Point3D(-80,80,-80),new Point3D(-80,80,80))
+	    	new Polygon(new Point3D(80,80,80),new Point3D(80,80,-80),new Point3D(-80,80,-80),new Point3D(-80,80,80))
 		.setEmission(new Color(0,255,102)).setMaterial(new Material().setkD(0.2).setkS(0.2)
 				.setnShininess(30).setkT(0.6)),
-		new Polygon(new Point3D(-80,-80,80),new Point3D(-80,-80,-80),new Point3D(80,-80,-80),new Point3D(80,-80,80))
+		 new Polygon(new Point3D(-80,-80,80),new Point3D(-80,-80,-80),new Point3D(80,-80,-80),new Point3D(80,-80,80))
 		.setEmission(new Color(16,27,96)).setMaterial(new Material().setkD(0.2).setkS(0.2)
-				.setnShininess(30).setkT(0.6)));
+				.setnShininess(30).setkT(0.6)),g3);
 		
 		
+		//Geometries g1=new Geometries(T1,T2);
+		//Geometries g2=new Geometries(S1,S2);
+	//	Geometries g3=new Geometries(S3,S4,S5);
+		//Geometries g=new Geometries(F,E,D,C,A,B,g3);
+		//Geometries g4=new Geometries(s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,G);
+		//Geometries g5=new Geometries(g1,g,g2,g4);
+		scene.setGeometries(new Geometries(g1,g,g2,g4));
 		
 		scene.lights.add(new SpotLight(new Color(230, 212, 188), new Point3D(10, -110, 100), new Vector(0, 0, -1)) //
-				.setkL(4E-5).setkQ(2E-7).setRadius(3).setNumOfRays(10));
+				.setkL(4E-5).setkQ(2E-7).setRadius(3).setNumOfRays(150));
 		scene.lights.add(new SpotLight(new Color(155,102,0), new Point3D(50, 118, 0), new Vector(0, 0, -1)) //
 				.setkL(0.00001).setkQ(0.000005));
 		scene.lights.add(new SpotLight(new Color(255,102,0), new Point3D(-40, 150, 0), new Vector(0, 0, -1)) //
@@ -125,18 +322,14 @@
 		scene.lights.add(new PointLight(new Color(0, 0, 250), new Point3D(50, 118, 0))
 				.setkL(0.0005).setkQ(0.0005));
 		
-		ImageWriter imageWriter = new ImageWriter("miniproject1", 600, 600);
+		ImageWriter imageWriter = new ImageWriter("miniproject2", 600, 600);
 		Render render = new Render() //
 				.setImageWriter(imageWriter) //
 				.setCamera(camera) //
-				.setRayTracer(new RayTracerBasic(scene)).setDebugPrint().setMultithreading(3);
+				.setRayTracer(new RayTracerBasic(scene)).setDebugPrint().setMultithreading(1);
 
 		render.renderImage();
 		render.writeToImage();
 	}
-	
-	
-	
-	
 
 }
diff --git a/src/unittests/lights/TeapotTest.java b/src/unittests/lights/TeapotTest.java
new file mode 100644
index 0000000..c4faf43
--- /dev/null
+++ b/src/unittests/lights/TeapotTest.java
@@ -0,0 +1,1571 @@
+package unittests.lights;
+
+import org.junit.Test;
+
+import elements.*;
+
+import geometries.*;
+import primitives.*;
+import renderer.*;
+import scene.Scene;
+
+/**
+ * Test rendering an image
+ * 
+ * @author Dan
+ */
+public class TeapotTest {
+	private final Camera camera = new Camera(new Point3D(0, 0, -1000), new Vector(0, 0, 1), new Vector(0, 1, 0)) //
+			.setVpDistance(1000).setViewPlaneSize(200, 200);
+	private final Scene scene = new Scene("Test scene");
+
+	private static final Color color = new Color(200, 0, 0);
+	private static final Material mat = new Material().setkD(0.5).setkS(0.5).setnShininess(60);
+
+	private static Point3D[] pnts = new Point3D[] { null, //
+			new Point3D(40.6266, 28.3457, -1.10804), //
+			new Point3D(40.0714, 30.4443, -1.10804), //
+			new Point3D(40.7155, 31.1438, -1.10804), //
+			new Point3D(42.0257, 30.4443, -1.10804), //
+			new Point3D(43.4692, 28.3457, -1.10804), //
+			new Point3D(37.5425, 28.3457, 14.5117), //
+			new Point3D(37.0303, 30.4443, 14.2938), //
+			new Point3D(37.6244, 31.1438, 14.5466), //
+			new Point3D(38.8331, 30.4443, 15.0609), //
+			new Point3D(40.1647, 28.3457, 15.6274), //
+			new Point3D(29.0859, 28.3457, 27.1468), //
+			new Point3D(28.6917, 30.4443, 26.7527), //
+			new Point3D(29.149, 31.1438, 27.2099), //
+			new Point3D(30.0792, 30.4443, 28.1402), //
+			new Point3D(31.1041, 28.3457, 29.165), //
+			new Point3D(16.4508, 28.3457, 35.6034), //
+			new Point3D(16.2329, 30.4443, 35.0912), //
+			new Point3D(16.4857, 31.1438, 35.6853), //
+			new Point3D(16.9999, 30.4443, 36.894), //
+			new Point3D(17.5665, 28.3457, 38.2256), //
+			new Point3D(0.831025, 28.3457, 38.6876), //
+			new Point3D(0.831025, 30.4443, 38.1324), //
+			new Point3D(0.831025, 31.1438, 38.7764), //
+			new Point3D(0.831025, 30.4443, 40.0866), //
+			new Point3D(0.831025, 28.3457, 41.5301), //
+			new Point3D(-15.868, 28.3457, 35.6034), //
+			new Point3D(-15.0262, 30.4443, 35.0912), //
+			new Point3D(-14.9585, 31.1438, 35.6853), //
+			new Point3D(-15.3547, 30.4443, 36.894), //
+			new Point3D(-15.9044, 28.3457, 38.2256), //
+			new Point3D(-28.3832, 28.3457, 27.1468), //
+			new Point3D(-27.4344, 30.4443, 26.7527), //
+			new Point3D(-27.6068, 31.1438, 27.2099), //
+			new Point3D(-28.4322, 30.4443, 28.1402), //
+			new Point3D(-29.4421, 28.3457, 29.165), //
+			new Point3D(-36.2402, 28.3457, 14.5117), //
+			new Point3D(-35.52, 30.4443, 14.2938), //
+			new Point3D(-36.0073, 31.1438, 14.5466), //
+			new Point3D(-37.1767, 30.4443, 15.0609), //
+			new Point3D(-38.5027, 28.3457, 15.6274), //
+			new Point3D(-38.9646, 28.3457, -1.10804), //
+			new Point3D(-38.4094, 30.4443, -1.10804), //
+			new Point3D(-39.0534, 31.1438, -1.10804), //
+			new Point3D(-40.3636, 30.4443, -1.10804), //
+			new Point3D(-41.8071, 28.3457, -1.10804), //
+			new Point3D(-35.8804, 28.3457, -16.7278), //
+			new Point3D(-35.3683, 30.4443, -16.5099), //
+			new Point3D(-35.9624, 31.1438, -16.7627), //
+			new Point3D(-37.1711, 30.4443, -17.2769), //
+			new Point3D(-38.5027, 28.3457, -17.8435), //
+			new Point3D(-27.4238, 28.3457, -29.3629), //
+			new Point3D(-27.0297, 30.4443, -28.9687), //
+			new Point3D(-27.4869, 31.1438, -29.426), //
+			new Point3D(-28.4172, 30.4443, -30.3562), //
+			new Point3D(-29.4421, 28.3457, -31.3811), //
+			new Point3D(-14.7887, 28.3457, -37.8195), //
+			new Point3D(-14.5708, 30.4443, -37.3073), //
+			new Point3D(-14.8236, 31.1438, -37.9014), //
+			new Point3D(-15.3379, 30.4443, -39.1101), //
+			new Point3D(-15.9044, 28.3457, -40.4417), //
+			new Point3D(0.831025, 28.3457, -40.9036), //
+			new Point3D(0.831025, 30.4443, -40.3484), //
+			new Point3D(0.831025, 31.1438, -40.9925), //
+			new Point3D(0.831025, 30.4443, -42.3027), //
+			new Point3D(0.831025, 28.3457, -43.7462), //
+			new Point3D(16.4508, 28.3457, -37.8195), //
+			new Point3D(16.2329, 30.4443, -37.3073), //
+			new Point3D(16.4857, 31.1438, -37.9014), //
+			new Point3D(16.9999, 30.4443, -39.1101), //
+			new Point3D(17.5665, 28.3457, -40.4417), //
+			new Point3D(29.0859, 28.3457, -29.3629), //
+			new Point3D(28.6917, 30.4443, -28.9687), //
+			new Point3D(29.149, 31.1438, -29.426), //
+			new Point3D(30.0792, 30.4443, -30.3562), //
+			new Point3D(31.1041, 28.3457, -31.3811), //
+			new Point3D(37.5425, 28.3457, -16.7278), //
+			new Point3D(37.0303, 30.4443, -16.5099), //
+			new Point3D(37.6244, 31.1438, -16.7627), //
+			new Point3D(38.8331, 30.4443, -17.2769), //
+			new Point3D(40.1647, 28.3457, -17.8435), //
+			new Point3D(48.6879, 17.1865, -1.10804), //
+			new Point3D(53.2404, 6.22714, -1.10804), //
+			new Point3D(56.4605, -4.33246, -1.10804), //
+			new Point3D(57.6819, -14.2925, -1.10804), //
+			new Point3D(44.979, 17.1865, 17.6758), //
+			new Point3D(49.1787, 6.22714, 19.4626), //
+			new Point3D(52.1492, -4.33246, 20.7265), //
+			new Point3D(53.2759, -14.2925, 21.2059), //
+			new Point3D(34.8094, 17.1865, 32.8703), //
+			new Point3D(38.0417, 6.22714, 36.1026), //
+			new Point3D(40.3279, -4.33246, 38.3889), //
+			new Point3D(41.1951, -14.2925, 39.2561), //
+			new Point3D(19.6148, 17.1865, 43.0399), //
+			new Point3D(21.4017, 6.22714, 47.2396), //
+			new Point3D(22.6656, -4.33246, 50.2101), //
+			new Point3D(23.145, -14.2925, 51.3369), //
+			new Point3D(0.831025, 17.1865, 46.7488), //
+			new Point3D(0.831025, 6.22714, 51.3013), //
+			new Point3D(0.831025, -4.33246, 54.5214), //
+			new Point3D(0.831025, -14.2925, 55.7428), //
+			new Point3D(-17.9528, 17.1865, 43.0399), //
+			new Point3D(-19.7397, 6.22714, 47.2396), //
+			new Point3D(-21.0035, -4.33246, 50.2101), //
+			new Point3D(-21.4829, -14.2925, 51.3369), //
+			new Point3D(-33.1474, 17.1865, 32.8703), //
+			new Point3D(-36.3796, 6.22714, 36.1026), //
+			new Point3D(-38.6659, -4.33246, 38.3889), //
+			new Point3D(-39.5331, -14.2925, 39.2561), //
+			new Point3D(-43.3169, 17.1865, 17.6758), //
+			new Point3D(-47.5166, 6.22714, 19.4626), //
+			new Point3D(-50.4871, -4.33246, 20.7265), //
+			new Point3D(-51.6139, -14.2925, 21.2059), //
+			new Point3D(-47.0258, 17.1865, -1.10804), //
+			new Point3D(-51.5784, 6.22714, -1.10804), //
+			new Point3D(-54.7984, -4.33246, -1.10804), //
+			new Point3D(-56.0198, -14.2925, -1.10804), //
+			new Point3D(-43.3169, 17.1865, -19.8919), //
+			new Point3D(-47.5166, 6.22714, -21.6787), //
+			new Point3D(-50.4871, -4.33246, -22.9426), //
+			new Point3D(-51.6139, -14.2925, -23.422), //
+			new Point3D(-33.1474, 17.1865, -35.0864), //
+			new Point3D(-36.3796, 6.22714, -38.3187), //
+			new Point3D(-38.6659, -4.33246, -40.6049), //
+			new Point3D(-39.5331, -14.2925, -41.4721), //
+			new Point3D(-17.9528, 17.1865, -45.256), //
+			new Point3D(-19.7397, 6.22714, -49.4557), //
+			new Point3D(-21.0035, -4.33246, -52.4262), //
+			new Point3D(-21.4829, -14.2925, -53.5529), //
+			new Point3D(0.831025, 17.1865, -48.9649), //
+			new Point3D(0.831025, 6.22714, -53.5174), //
+			new Point3D(0.831025, -4.33246, -56.7375), //
+			new Point3D(0.831025, -14.2925, -57.9589), //
+			new Point3D(19.6148, 17.1865, -45.256), //
+			new Point3D(21.4017, 6.22714, -49.4557), //
+			new Point3D(22.6656, -4.33246, -52.4262), //
+			new Point3D(23.145, -14.2925, -53.5529), //
+			new Point3D(34.8094, 17.1865, -35.0864), //
+			new Point3D(38.0417, 6.22714, -38.3187), //
+			new Point3D(40.3279, -4.33246, -40.6049), //
+			new Point3D(41.1951, -14.2925, -41.4721), //
+			new Point3D(44.979, 17.1865, -19.8919), //
+			new Point3D(49.1787, 6.22714, -21.6787), //
+			new Point3D(52.1492, -4.33246, -22.9426), //
+			new Point3D(53.2759, -14.2925, -23.422), //
+			new Point3D(55.4611, -22.7202, -1.10804), //
+			new Point3D(50.5755, -28.9493, -1.10804), //
+			new Point3D(45.6899, -33.1798, -1.10804), //
+			new Point3D(43.4692, -35.6115, -1.10804), //
+			new Point3D(51.2273, -22.7202, 20.3343), //
+			new Point3D(46.7203, -28.9493, 18.4167), //
+			new Point3D(42.2133, -33.1798, 16.4991), //
+			new Point3D(40.1647, -35.6115, 15.6274), //
+			new Point3D(39.6184, -22.7202, 37.6793), //
+			new Point3D(36.1496, -28.9493, 34.2106), //
+			new Point3D(32.6808, -33.1798, 30.7418), //
+			new Point3D(31.1041, -35.6115, 29.165), //
+			new Point3D(22.2733, -22.7202, 49.2882), //
+			new Point3D(20.3557, -28.9493, 44.7813), //
+			new Point3D(18.4381, -33.1798, 40.2743), //
+			new Point3D(17.5665, -35.6115, 38.2256), //
+			new Point3D(0.831025, -22.7202, 53.5221), //
+			new Point3D(0.831025, -28.9493, 48.6365), //
+			new Point3D(0.831025, -33.1798, 43.7508), //
+			new Point3D(0.831025, -35.6115, 41.5301), //
+			new Point3D(-20.6113, -22.7202, 49.2882), //
+			new Point3D(-18.6937, -28.9493, 44.7813), //
+			new Point3D(-16.7761, -33.1798, 40.2743), //
+			new Point3D(-15.9044, -35.6115, 38.2256), //
+			new Point3D(-37.9564, -22.7202, 37.6793), //
+			new Point3D(-34.4876, -28.9493, 34.2106), //
+			new Point3D(-31.0188, -33.1798, 30.7418), //
+			new Point3D(-29.4421, -35.6115, 29.165), //
+			new Point3D(-49.5653, -22.7202, 20.3343), //
+			new Point3D(-45.0583, -28.9493, 18.4167), //
+			new Point3D(-40.5513, -33.1798, 16.4991), //
+			new Point3D(-38.5027, -35.6115, 15.6274), //
+			new Point3D(-53.7991, -22.7202, -1.10804), //
+			new Point3D(-48.9135, -28.9493, -1.10804), //
+			new Point3D(-44.0279, -33.1798, -1.10804), //
+			new Point3D(-41.8071, -35.6115, -1.10804), //
+			new Point3D(-49.5653, -22.7202, -22.5504), //
+			new Point3D(-45.0583, -28.9493, -20.6327), //
+			new Point3D(-40.5513, -33.1798, -18.7151), //
+			new Point3D(-38.5027, -35.6115, -17.8435), //
+			new Point3D(-37.9564, -22.7202, -39.8954), //
+			new Point3D(-34.4876, -28.9493, -36.4266), //
+			new Point3D(-31.0188, -33.1798, -32.9578), //
+			new Point3D(-29.4421, -35.6115, -31.3811), //
+			new Point3D(-20.6113, -22.7202, -51.5043), //
+			new Point3D(-18.6937, -28.9493, -46.9973), //
+			new Point3D(-16.7761, -33.1798, -42.4903), //
+			new Point3D(-15.9044, -35.6115, -40.4417), //
+			new Point3D(0.831025, -22.7202, -55.7382), //
+			new Point3D(0.831025, -28.9493, -50.8525), //
+			new Point3D(0.831025, -33.1798, -45.9669), //
+			new Point3D(0.831025, -35.6115, -43.7462), //
+			new Point3D(22.2733, -22.7202, -51.5043), //
+			new Point3D(20.3557, -28.9493, -46.9973), //
+			new Point3D(18.4381, -33.1798, -42.4903), //
+			new Point3D(17.5665, -35.6115, -40.4417), //
+			new Point3D(39.6184, -22.7202, -39.8954), //
+			new Point3D(36.1496, -28.9493, -36.4266), //
+			new Point3D(32.6808, -33.1798, -32.9578), //
+			new Point3D(31.1041, -35.6115, -31.3811), //
+			new Point3D(51.2273, -22.7202, -22.5504), //
+			new Point3D(46.7203, -28.9493, -20.6327), //
+			new Point3D(42.2133, -33.1798, -18.7151), //
+			new Point3D(40.1647, -35.6115, -17.8435), //
+			new Point3D(42.5031, -37.1772, -1.10804), //
+			new Point3D(37.3399, -38.5429, -1.10804), //
+			new Point3D(24.5818, -39.5089, -1.10804), //
+			new Point3D(0.831025, -39.8754, -1.10804), //
+			new Point3D(39.2736, -37.1772, 15.2483), //
+			new Point3D(34.5105, -38.5429, 13.2217), //
+			new Point3D(22.7411, -39.5089, 8.21414), //
+			new Point3D(30.4182, -37.1772, 28.4792), //
+			new Point3D(26.7523, -38.5429, 24.8133), //
+			new Point3D(17.6941, -39.5089, 15.755), //
+			new Point3D(17.1873, -37.1772, 37.3345), //
+			new Point3D(15.1608, -38.5429, 32.5714), //
+			new Point3D(10.1532, -39.5089, 20.8021), //
+			new Point3D(0.831025, -37.1772, 40.5641), //
+			new Point3D(0.831025, -38.5429, 35.4009), //
+			new Point3D(0.831025, -39.5089, 22.6427), //
+			new Point3D(-15.5253, -37.1772, 37.3345), //
+			new Point3D(-13.4987, -38.5429, 32.5714), //
+			new Point3D(-8.49115, -39.5089, 20.8021), //
+			new Point3D(-28.7562, -37.1772, 28.4792), //
+			new Point3D(-25.0903, -38.5429, 24.8133), //
+			new Point3D(-16.032, -39.5089, 15.755), //
+			new Point3D(-37.6115, -37.1772, 15.2483), //
+			new Point3D(-32.8484, -38.5429, 13.2217), //
+			new Point3D(-21.0791, -39.5089, 8.21414), //
+			new Point3D(-40.8411, -37.1772, -1.10804), //
+			new Point3D(-35.6779, -38.5429, -1.10804), //
+			new Point3D(-22.9198, -39.5089, -1.10804), //
+			new Point3D(-37.6115, -37.1772, -17.4643), //
+			new Point3D(-32.8484, -38.5429, -15.4378), //
+			new Point3D(-21.0791, -39.5089, -10.4302), //
+			new Point3D(-28.7562, -37.1772, -30.6952), //
+			new Point3D(-25.0903, -38.5429, -27.0294), //
+			new Point3D(-16.032, -39.5089, -17.9711), //
+			new Point3D(-15.5253, -37.1772, -39.5506), //
+			new Point3D(-13.4987, -38.5429, -34.7875), //
+			new Point3D(-8.49115, -39.5089, -23.0181), //
+			new Point3D(0.831025, -37.1772, -42.7802), //
+			new Point3D(0.831025, -38.5429, -37.6169), //
+			new Point3D(0.831025, -39.5089, -24.8588), //
+			new Point3D(17.1873, -37.1772, -39.5506), //
+			new Point3D(15.1608, -38.5429, -34.7875), //
+			new Point3D(10.1532, -39.5089, -23.0181), //
+			new Point3D(30.4182, -37.1772, -30.6952), //
+			new Point3D(26.7523, -38.5429, -27.0294), //
+			new Point3D(17.6941, -39.5089, -17.9711), //
+			new Point3D(39.2736, -37.1772, -17.4643), //
+			new Point3D(34.5105, -38.5429, -15.4378), //
+			new Point3D(22.7411, -39.5089, -10.4302), //
+			new Point3D(-44.6497, 17.6861, -1.10804), //
+			new Point3D(-57.9297, 17.5862, -1.10804), //
+			new Point3D(-67.7453, 16.8867, -1.10804), //
+			new Point3D(-73.8301, 14.9879, -1.10804), //
+			new Point3D(-75.9176, 11.2904, -1.10804), //
+			new Point3D(-44.2055, 18.6855, 3.68876), //
+			new Point3D(-58.3252, 18.5699, 3.68876), //
+			new Point3D(-68.6891, 17.7611, 3.68876), //
+			new Point3D(-75.0724, 15.5657, 3.68876), //
+			new Point3D(-77.2501, 11.2904, 3.68876), //
+			new Point3D(-43.2284, 20.884, 5.28769), //
+			new Point3D(-59.1955, 20.7341, 5.28769), //
+			new Point3D(-70.7655, 19.6848, 5.28769), //
+			new Point3D(-77.8053, 16.8367, 5.28769), //
+			new Point3D(-80.1814, 11.2904, 5.28769), //
+			new Point3D(-42.2513, 23.0825, 3.68876), //
+			new Point3D(-60.0657, 22.8983, 3.68876), //
+			new Point3D(-72.8419, 21.6085, 3.68876), //
+			new Point3D(-80.5381, 18.1077, 3.68876), //
+			new Point3D(-83.1128, 11.2904, 3.68876), //
+			new Point3D(-41.8071, 24.0819, -1.10804), //
+			new Point3D(-60.4613, 23.882, -1.10804), //
+			new Point3D(-73.7857, 22.4829, -1.10804), //
+			new Point3D(-81.7804, 18.6855, -1.10804), //
+			new Point3D(-84.4453, 11.2904, -1.10804), //
+			new Point3D(-42.2513, 23.0825, -5.90483), //
+			new Point3D(-60.0657, 22.8983, -5.90483), //
+			new Point3D(-72.8419, 21.6085, -5.90483), //
+			new Point3D(-80.5381, 18.1077, -5.90483), //
+			new Point3D(-83.1128, 11.2904, -5.90483), //
+			new Point3D(-43.2284, 20.884, -7.50376), //
+			new Point3D(-59.1955, 20.7341, -7.50376), //
+			new Point3D(-70.7655, 19.6848, -7.50376), //
+			new Point3D(-77.8053, 16.8367, -7.50376), //
+			new Point3D(-80.1814, 11.2904, -7.50376), //
+			new Point3D(-44.2055, 18.6855, -5.90483), //
+			new Point3D(-58.3252, 18.5699, -5.90483), //
+			new Point3D(-68.6891, 17.7611, -5.90483), //
+			new Point3D(-75.0724, 15.5657, -5.90483), //
+			new Point3D(-77.2501, 11.2904, -5.90483), //
+			new Point3D(-74.8073, 5.4943, -1.10804), //
+			new Point3D(-71.2985, -1.50103, -1.10804), //
+			new Point3D(-65.1248, -8.49634, -1.10804), //
+			new Point3D(-56.0198, -14.2925, -1.10804), //
+			new Point3D(-76.0183, 4.93477, 3.68876), //
+			new Point3D(-72.159, -2.35462, 3.68876), //
+			new Point3D(-65.4267, -9.55033, 3.68876), //
+			new Point3D(-55.5757, -15.6249, 3.68876), //
+			new Point3D(-78.6824, 3.70383, 5.28769), //
+			new Point3D(-74.0522, -4.23253, 5.28769), //
+			new Point3D(-66.0909, -11.8691, 5.28769), //
+			new Point3D(-54.5986, -18.5563, 5.28769), //
+			new Point3D(-81.3466, 2.47288, 3.68876), //
+			new Point3D(-75.9454, -6.11044, 3.68876), //
+			new Point3D(-66.755, -14.1878, 3.68876), //
+			new Point3D(-53.6214, -21.4877, 3.68876), //
+			new Point3D(-82.5576, 1.91336, -1.10804), //
+			new Point3D(-76.8059, -6.96404, -1.10804), //
+			new Point3D(-67.0569, -15.2418, -1.10804), //
+			new Point3D(-53.1773, -22.8201, -1.10804), //
+			new Point3D(-81.3466, 2.47288, -5.90483), //
+			new Point3D(-75.9454, -6.11044, -5.90483), //
+			new Point3D(-66.755, -14.1878, -5.90483), //
+			new Point3D(-53.6214, -21.4877, -5.90483), //
+			new Point3D(-78.6824, 3.70383, -7.50376), //
+			new Point3D(-74.0522, -4.23253, -7.50376), //
+			new Point3D(-66.0909, -11.8691, -7.50376), //
+			new Point3D(-54.5986, -18.5563, -7.50376), //
+			new Point3D(-76.0183, 4.93477, -5.90483), //
+			new Point3D(-72.159, -2.35462, -5.90483), //
+			new Point3D(-65.4267, -9.55033, -5.90483), //
+			new Point3D(-55.5757, -15.6249, -5.90483), //
+			new Point3D(49.1543, 0.630882, -1.10804), //
+			new Point3D(62.7896, 3.76212, -1.10804), //
+			new Point3D(68.6967, 11.2904, -1.10804), //
+			new Point3D(71.939, 20.4176, -1.10804), //
+			new Point3D(77.5797, 28.3457, -1.10804), //
+			new Point3D(49.1543, -3.03333, 9.4449), //
+			new Point3D(63.8305, 1.04519, 8.42059), //
+			new Point3D(70.0292, 9.70814, 6.1671), //
+			new Point3D(73.5629, 19.8451, 3.91361), //
+			new Point3D(80.2446, 28.3457, 2.88929), //
+			new Point3D(49.1543, -11.0946, 12.9626), //
+			new Point3D(66.1207, -4.93206, 11.5968), //
+			new Point3D(72.9605, 6.22714, 8.59214), //
+			new Point3D(77.1355, 18.5855, 5.58749), //
+			new Point3D(86.1073, 28.3457, 4.22173), //
+			new Point3D(49.1543, -19.1559, 9.4449), //
+			new Point3D(68.4108, -10.9093, 8.42059), //
+			new Point3D(75.8919, 2.74614, 6.1671), //
+			new Point3D(80.7081, 17.326, 3.91361), //
+			new Point3D(91.97, 28.3457, 2.88929), //
+			new Point3D(49.1543, -22.8201, -1.10804), //
+			new Point3D(69.4518, -13.6262, -1.10804), //
+			new Point3D(77.2244, 1.16386, -1.10804), //
+			new Point3D(82.3321, 16.7534, -1.10804), //
+			new Point3D(94.6349, 28.3457, -1.10804), //
+			new Point3D(49.1543, -19.1559, -11.661), //
+			new Point3D(68.4108, -10.9093, -10.6367), //
+			new Point3D(75.8919, 2.74614, -8.38317), //
+			new Point3D(80.7081, 17.326, -6.12968), //
+			new Point3D(91.97, 28.3457, -5.10536), //
+			new Point3D(49.1543, -11.0946, -15.1786), //
+			new Point3D(66.1207, -4.93206, -13.8129), //
+			new Point3D(72.9605, 6.22714, -10.8082), //
+			new Point3D(77.1355, 18.5855, -7.80356), //
+			new Point3D(86.1073, 28.3457, -6.4378), //
+			new Point3D(49.1543, -3.03333, -11.661), //
+			new Point3D(63.8305, 1.04519, -10.6367), //
+			new Point3D(70.0292, 9.70814, -8.38317), //
+			new Point3D(73.5629, 19.8451, -6.12968), //
+			new Point3D(80.2446, 28.3457, -5.10536), //
+			new Point3D(79.6227, 29.5449, -1.10804), //
+			new Point3D(81.1329, 29.9446, -1.10804), //
+			new Point3D(81.577, 29.5449, -1.10804), //
+			new Point3D(80.4222, 28.3457, -1.10804), //
+			new Point3D(82.4767, 29.6034, 2.63946), //
+			new Point3D(83.8116, 30.0383, 2.08983), //
+			new Point3D(83.8515, 29.6268, 1.54019), //
+			new Point3D(82.1988, 28.3457, 1.29036), //
+			new Point3D(88.7555, 29.7322, 3.88862), //
+			new Point3D(89.7049, 30.2444, 3.15578), //
+			new Point3D(88.8555, 29.8072, 2.42294), //
+			new Point3D(86.1073, 28.3457, 2.08983), //
+			new Point3D(95.0343, 29.8611, 2.63946), //
+			new Point3D(95.5982, 30.4505, 2.08983), //
+			new Point3D(93.8594, 29.9875, 1.54019), //
+			new Point3D(90.0158, 28.3457, 1.29036), //
+			new Point3D(97.8883, 29.9196, -1.10804), //
+			new Point3D(98.2769, 30.5442, -1.10804), //
+			new Point3D(96.1339, 30.0695, -1.10804), //
+			new Point3D(91.7924, 28.3457, -1.10804), //
+			new Point3D(95.0343, 29.8611, -4.85553), //
+			new Point3D(95.5982, 30.4505, -4.3059), //
+			new Point3D(93.8594, 29.9875, -3.75626), //
+			new Point3D(90.0158, 28.3457, -3.50643), //
+			new Point3D(88.7555, 29.7322, -6.10469), //
+			new Point3D(89.7049, 30.2444, -5.37185), //
+			new Point3D(88.8555, 29.8072, -4.63901), //
+			new Point3D(86.1073, 28.3457, -4.3059), //
+			new Point3D(82.4767, 29.6034, -4.85553), //
+			new Point3D(83.8116, 30.0383, -4.3059), //
+			new Point3D(83.8515, 29.6268, -3.75626), //
+			new Point3D(82.1988, 28.3457, -3.50643), //
+			new Point3D(0.831025, 49.6647, -1.10804), //
+			new Point3D(10.5134, 48.2657, -1.10804), //
+			new Point3D(10.0693, 44.868, -1.10804), //
+			new Point3D(6.42728, 40.6708, -1.10804), //
+			new Point3D(6.51611, 36.8733, -1.10804), //
+			new Point3D(9.76642, 48.2657, 2.70243), //
+			new Point3D(9.35632, 44.868, 2.52698), //
+			new Point3D(5.9947, 40.6708, 1.09187), //
+			new Point3D(6.07552, 36.8733, 1.12336), //
+			new Point3D(7.71453, 48.2657, 5.77547), //
+			new Point3D(7.39819, 44.868, 5.45913), //
+			new Point3D(4.80736, 40.6708, 2.8683), //
+			new Point3D(4.86744, 36.8733, 2.92838), //
+			new Point3D(4.64149, 48.2657, 7.82736), //
+			new Point3D(4.46604, 44.868, 7.41726), //
+			new Point3D(3.03093, 40.6708, 4.05564), //
+			new Point3D(3.06242, 36.8733, 4.13646), //
+			new Point3D(0.831025, 48.2657, 8.57438), //
+			new Point3D(0.831025, 44.868, 8.13023), //
+			new Point3D(0.831025, 40.6708, 4.48822), //
+			new Point3D(0.831025, 36.8733, 4.57705), //
+			new Point3D(-2.97944, 48.2657, 7.82736), //
+			new Point3D(-2.80399, 44.868, 7.41726), //
+			new Point3D(-1.36888, 40.6708, 4.05564), //
+			new Point3D(-1.40037, 36.8733, 4.13646), //
+			new Point3D(-6.05248, 48.2657, 5.77547), //
+			new Point3D(-5.73614, 44.868, 5.45913), //
+			new Point3D(-3.14531, 40.6708, 2.8683), //
+			new Point3D(-3.20539, 36.8733, 2.92838), //
+			new Point3D(-8.10437, 48.2657, 2.70243), //
+			new Point3D(-7.69427, 44.868, 2.52698), //
+			new Point3D(-4.33265, 40.6708, 1.09187), //
+			new Point3D(-4.41347, 36.8733, 1.12336), //
+			new Point3D(-8.85139, 48.2657, -1.10804), //
+			new Point3D(-8.40724, 44.868, -1.10804), //
+			new Point3D(-4.76523, 40.6708, -1.10804), //
+			new Point3D(-4.85406, 36.8733, -1.10804), //
+			new Point3D(-8.10437, 48.2657, -4.9185), //
+			new Point3D(-7.69427, 44.868, -4.74305), //
+			new Point3D(-4.33265, 40.6708, -3.30794), //
+			new Point3D(-4.41347, 36.8733, -3.33943), //
+			new Point3D(-6.05248, 48.2657, -7.99154), //
+			new Point3D(-5.73614, 44.868, -7.6752), //
+			new Point3D(-3.14531, 40.6708, -5.08437), //
+			new Point3D(-3.20539, 36.8733, -5.14445), //
+			new Point3D(-2.97944, 48.2657, -10.0434), //
+			new Point3D(-2.80399, 44.868, -9.63333), //
+			new Point3D(-1.36888, 40.6708, -6.27171), //
+			new Point3D(-1.40037, 36.8733, -6.35253), //
+			new Point3D(0.831025, 48.2657, -10.7904), //
+			new Point3D(0.831025, 44.868, -10.3463), //
+			new Point3D(0.831025, 40.6708, -6.70429), //
+			new Point3D(0.831025, 36.8733, -6.79312), //
+			new Point3D(4.64149, 48.2657, -10.0434), //
+			new Point3D(4.46604, 44.868, -9.63333), //
+			new Point3D(3.03093, 40.6708, -6.27171), //
+			new Point3D(3.06242, 36.8733, -6.35253), //
+			new Point3D(7.71453, 48.2657, -7.99154), //
+			new Point3D(7.39819, 44.868, -7.6752), //
+			new Point3D(4.80736, 40.6708, -5.08437), //
+			new Point3D(4.86744, 36.8733, -5.14445), //
+			new Point3D(9.76642, 48.2657, -4.9185), //
+			new Point3D(9.35632, 44.868, -4.74305), //
+			new Point3D(5.9947, 40.6708, -3.30794), //
+			new Point3D(6.07552, 36.8733, -3.33943), //
+			new Point3D(13.8001, 34.3417, -1.10804), //
+			new Point3D(24.282, 32.6095, -1.10804), //
+			new Point3D(33.6979, 30.8773, -1.10804), //
+			new Point3D(37.7841, 28.3457, -1.10804), //
+			new Point3D(12.795, 34.3417, 3.98234), //
+			new Point3D(22.4646, 32.6095, 8.09647), //
+			new Point3D(31.1507, 30.8773, 11.7922), //
+			new Point3D(34.9202, 28.3457, 13.396), //
+			new Point3D(10.0391, 34.3417, 8.10003), //
+			new Point3D(17.4812, 32.6095, 15.5422), //
+			new Point3D(24.1665, 30.8773, 22.2275), //
+			new Point3D(27.0677, 28.3457, 25.1286), //
+			new Point3D(5.9214, 34.3417, 10.856), //
+			new Point3D(10.0355, 32.6095, 20.5255), //
+			new Point3D(13.7313, 30.8773, 29.2117), //
+			new Point3D(15.3351, 28.3457, 32.9812), //
+			new Point3D(0.831025, 34.3417, 11.8611), //
+			new Point3D(0.831025, 32.6095, 22.3429), //
+			new Point3D(0.831025, 30.8773, 31.7589), //
+			new Point3D(0.831025, 28.3457, 35.845), //
+			new Point3D(-4.25935, 34.3417, 10.856), //
+			new Point3D(-8.37348, 32.6095, 20.5255), //
+			new Point3D(-12.0692, 30.8773, 29.2117), //
+			new Point3D(-13.673, 28.3457, 32.9812), //
+			new Point3D(-8.37704, 34.3417, 8.10003), //
+			new Point3D(-15.8192, 32.6095, 15.5422), //
+			new Point3D(-22.5045, 30.8773, 22.2275), //
+			new Point3D(-25.4056, 28.3457, 25.1286), //
+			new Point3D(-11.133, 34.3417, 3.98234), //
+			new Point3D(-20.8025, 32.6095, 8.09647), //
+			new Point3D(-29.4887, 30.8773, 11.7922), //
+			new Point3D(-33.2582, 28.3457, 13.396), //
+			new Point3D(-12.1381, 34.3417, -1.10804), //
+			new Point3D(-22.62, 32.6095, -1.10804), //
+			new Point3D(-32.0359, 30.8773, -1.10804), //
+			new Point3D(-36.122, 28.3457, -1.10804), //
+			new Point3D(-11.133, 34.3417, -6.19841), //
+			new Point3D(-20.8025, 32.6095, -10.3125), //
+			new Point3D(-29.4887, 30.8773, -14.0083), //
+			new Point3D(-33.2582, 28.3457, -15.6121), //
+			new Point3D(-8.37704, 34.3417, -10.3161), //
+			new Point3D(-15.8192, 32.6095, -17.7582), //
+			new Point3D(-22.5045, 30.8773, -24.4435), //
+			new Point3D(-25.4056, 28.3457, -27.3447), //
+			new Point3D(-4.25935, 34.3417, -13.072), //
+			new Point3D(-8.37348, 32.6095, -22.7416), //
+			new Point3D(-12.0692, 30.8773, -31.4277), //
+			new Point3D(-13.673, 28.3457, -35.1972), //
+			new Point3D(0.831025, 34.3417, -14.0771), //
+			new Point3D(0.831025, 32.6095, -24.559), //
+			new Point3D(0.831025, 30.8773, -33.9749), //
+			new Point3D(0.831025, 28.3457, -38.0611), //
+			new Point3D(5.9214, 34.3417, -13.072), //
+			new Point3D(10.0355, 32.6095, -22.7416), //
+			new Point3D(13.7313, 30.8773, -31.4277), //
+			new Point3D(15.3351, 28.3457, -35.1972), //
+			new Point3D(10.0391, 34.3417, -10.3161), //
+			new Point3D(17.4812, 32.6095, -17.7582), //
+			new Point3D(24.1665, 30.8773, -24.4435), //
+			new Point3D(27.0677, 28.3457, -27.3447), //
+			new Point3D(12.795, 34.3417, -6.19841), //
+			new Point3D(22.4646, 32.6095, -10.3125), //
+			new Point3D(31.1507, 30.8773, -14.0083), //
+			new Point3D(34.8094, 17.1865, -35.0864) //
+	};
+
+	/**
+	 * Produce a scene with a 3D model and render it into a png image
+	 */
+	@Test
+	public void teapotTest() {
+		scene.geometries.add( //
+				new Triangle(pnts[7], pnts[6], pnts[1]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[1], pnts[2], pnts[7]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[8], pnts[7], pnts[2]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[2], pnts[3], pnts[8]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[9], pnts[8], pnts[3]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[3], pnts[4], pnts[9]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[10], pnts[9], pnts[4]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[4], pnts[5], pnts[10]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[12], pnts[11], pnts[6]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[6], pnts[7], pnts[12]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[13], pnts[12], pnts[7]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[7], pnts[8], pnts[13]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[14], pnts[13], pnts[8]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[8], pnts[9], pnts[14]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[15], pnts[14], pnts[9]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[9], pnts[10], pnts[15]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[17], pnts[16], pnts[11]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[11], pnts[12], pnts[17]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[18], pnts[17], pnts[12]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[12], pnts[13], pnts[18]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[19], pnts[18], pnts[13]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[13], pnts[14], pnts[19]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[20], pnts[19], pnts[14]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[14], pnts[15], pnts[20]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[22], pnts[21], pnts[16]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[16], pnts[17], pnts[22]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[23], pnts[22], pnts[17]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[17], pnts[18], pnts[23]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[24], pnts[23], pnts[18]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[18], pnts[19], pnts[24]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[25], pnts[24], pnts[19]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[19], pnts[20], pnts[25]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[27], pnts[26], pnts[21]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[21], pnts[22], pnts[27]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[28], pnts[27], pnts[22]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[22], pnts[23], pnts[28]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[29], pnts[28], pnts[23]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[23], pnts[24], pnts[29]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[30], pnts[29], pnts[24]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[24], pnts[25], pnts[30]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[32], pnts[31], pnts[26]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[26], pnts[27], pnts[32]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[33], pnts[32], pnts[27]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[27], pnts[28], pnts[33]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[34], pnts[33], pnts[28]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[28], pnts[29], pnts[34]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[35], pnts[34], pnts[29]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[29], pnts[30], pnts[35]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[37], pnts[36], pnts[31]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[31], pnts[32], pnts[37]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[38], pnts[37], pnts[32]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[32], pnts[33], pnts[38]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[39], pnts[38], pnts[33]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[33], pnts[34], pnts[39]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[40], pnts[39], pnts[34]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[34], pnts[35], pnts[40]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[42], pnts[41], pnts[36]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[36], pnts[37], pnts[42]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[43], pnts[42], pnts[37]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[37], pnts[38], pnts[43]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[44], pnts[43], pnts[38]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[38], pnts[39], pnts[44]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[45], pnts[44], pnts[39]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[39], pnts[40], pnts[45]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[47], pnts[46], pnts[41]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[41], pnts[42], pnts[47]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[48], pnts[47], pnts[42]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[42], pnts[43], pnts[48]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[49], pnts[48], pnts[43]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[43], pnts[44], pnts[49]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[50], pnts[49], pnts[44]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[44], pnts[45], pnts[50]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[52], pnts[51], pnts[46]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[46], pnts[47], pnts[52]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[53], pnts[52], pnts[47]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[47], pnts[48], pnts[53]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[54], pnts[53], pnts[48]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[48], pnts[49], pnts[54]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[55], pnts[54], pnts[49]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[49], pnts[50], pnts[55]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[57], pnts[56], pnts[51]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[51], pnts[52], pnts[57]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[58], pnts[57], pnts[52]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[52], pnts[53], pnts[58]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[59], pnts[58], pnts[53]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[53], pnts[54], pnts[59]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[60], pnts[59], pnts[54]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[54], pnts[55], pnts[60]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[62], pnts[61], pnts[56]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[56], pnts[57], pnts[62]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[63], pnts[62], pnts[57]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[57], pnts[58], pnts[63]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[64], pnts[63], pnts[58]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[58], pnts[59], pnts[64]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[65], pnts[64], pnts[59]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[59], pnts[60], pnts[65]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[67], pnts[66], pnts[61]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[61], pnts[62], pnts[67]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[68], pnts[67], pnts[62]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[62], pnts[63], pnts[68]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[69], pnts[68], pnts[63]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[63], pnts[64], pnts[69]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[70], pnts[69], pnts[64]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[64], pnts[65], pnts[70]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[72], pnts[71], pnts[66]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[66], pnts[67], pnts[72]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[73], pnts[72], pnts[67]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[67], pnts[68], pnts[73]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[74], pnts[73], pnts[68]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[68], pnts[69], pnts[74]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[75], pnts[74], pnts[69]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[69], pnts[70], pnts[75]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[77], pnts[76], pnts[71]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[71], pnts[72], pnts[77]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[78], pnts[77], pnts[72]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[72], pnts[73], pnts[78]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[79], pnts[78], pnts[73]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[73], pnts[74], pnts[79]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[80], pnts[79], pnts[74]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[74], pnts[75], pnts[80]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[2], pnts[1], pnts[76]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[76], pnts[77], pnts[2]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[3], pnts[2], pnts[77]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[77], pnts[78], pnts[3]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[4], pnts[3], pnts[78]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[78], pnts[79], pnts[4]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[5], pnts[4], pnts[79]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[79], pnts[80], pnts[5]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[85], pnts[10], pnts[5]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[5], pnts[81], pnts[85]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[86], pnts[85], pnts[81]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[81], pnts[82], pnts[86]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[87], pnts[86], pnts[82]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[82], pnts[83], pnts[87]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[88], pnts[87], pnts[83]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[83], pnts[84], pnts[88]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[89], pnts[15], pnts[10]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[10], pnts[85], pnts[89]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[90], pnts[89], pnts[85]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[85], pnts[86], pnts[90]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[91], pnts[90], pnts[86]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[86], pnts[87], pnts[91]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[92], pnts[91], pnts[87]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[87], pnts[88], pnts[92]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[93], pnts[20], pnts[15]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[15], pnts[89], pnts[93]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[94], pnts[93], pnts[89]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[89], pnts[90], pnts[94]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[95], pnts[94], pnts[90]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[90], pnts[91], pnts[95]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[96], pnts[95], pnts[91]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[91], pnts[92], pnts[96]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[97], pnts[25], pnts[20]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[20], pnts[93], pnts[97]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[98], pnts[97], pnts[93]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[93], pnts[94], pnts[98]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[99], pnts[98], pnts[94]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[94], pnts[95], pnts[99]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[100], pnts[99], pnts[95]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[95], pnts[96], pnts[100]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[101], pnts[30], pnts[25]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[25], pnts[97], pnts[101]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[102], pnts[101], pnts[97]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[97], pnts[98], pnts[102]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[103], pnts[102], pnts[98]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[98], pnts[99], pnts[103]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[104], pnts[103], pnts[99]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[99], pnts[100], pnts[104]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[105], pnts[35], pnts[30]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[30], pnts[101], pnts[105]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[106], pnts[105], pnts[101]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[101], pnts[102], pnts[106]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[107], pnts[106], pnts[102]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[102], pnts[103], pnts[107]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[108], pnts[107], pnts[103]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[103], pnts[104], pnts[108]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[109], pnts[40], pnts[35]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[35], pnts[105], pnts[109]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[110], pnts[109], pnts[105]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[105], pnts[106], pnts[110]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[111], pnts[110], pnts[106]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[106], pnts[107], pnts[111]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[112], pnts[111], pnts[107]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[107], pnts[108], pnts[112]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[113], pnts[45], pnts[40]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[40], pnts[109], pnts[113]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[114], pnts[113], pnts[109]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[109], pnts[110], pnts[114]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[115], pnts[114], pnts[110]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[110], pnts[111], pnts[115]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[116], pnts[115], pnts[111]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[111], pnts[112], pnts[116]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[117], pnts[50], pnts[45]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[45], pnts[113], pnts[117]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[118], pnts[117], pnts[113]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[113], pnts[114], pnts[118]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[119], pnts[118], pnts[114]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[114], pnts[115], pnts[119]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[120], pnts[119], pnts[115]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[115], pnts[116], pnts[120]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[121], pnts[55], pnts[50]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[50], pnts[117], pnts[121]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[122], pnts[121], pnts[117]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[117], pnts[118], pnts[122]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[123], pnts[122], pnts[118]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[118], pnts[119], pnts[123]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[124], pnts[123], pnts[119]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[119], pnts[120], pnts[124]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[125], pnts[60], pnts[55]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[55], pnts[121], pnts[125]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[126], pnts[125], pnts[121]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[121], pnts[122], pnts[126]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[127], pnts[126], pnts[122]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[122], pnts[123], pnts[127]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[128], pnts[127], pnts[123]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[123], pnts[124], pnts[128]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[129], pnts[65], pnts[60]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[60], pnts[125], pnts[129]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[130], pnts[129], pnts[125]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[125], pnts[126], pnts[130]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[131], pnts[130], pnts[126]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[126], pnts[127], pnts[131]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[132], pnts[131], pnts[127]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[127], pnts[128], pnts[132]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[133], pnts[70], pnts[65]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[65], pnts[129], pnts[133]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[134], pnts[133], pnts[129]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[129], pnts[130], pnts[134]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[135], pnts[134], pnts[130]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[130], pnts[131], pnts[135]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[136], pnts[135], pnts[131]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[131], pnts[132], pnts[136]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[137], pnts[75], pnts[70]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[70], pnts[133], pnts[137]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[138], pnts[137], pnts[133]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[133], pnts[134], pnts[138]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[139], pnts[138], pnts[134]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[134], pnts[135], pnts[139]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[140], pnts[139], pnts[135]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[135], pnts[136], pnts[140]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[141], pnts[80], pnts[75]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[75], pnts[137], pnts[141]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[142], pnts[141], pnts[137]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[137], pnts[138], pnts[142]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[143], pnts[142], pnts[138]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[138], pnts[139], pnts[143]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[144], pnts[143], pnts[139]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[139], pnts[140], pnts[144]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[81], pnts[5], pnts[80]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[80], pnts[141], pnts[81]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[82], pnts[81], pnts[141]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[141], pnts[142], pnts[82]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[83], pnts[82], pnts[142]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[142], pnts[143], pnts[83]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[84], pnts[83], pnts[143]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[143], pnts[144], pnts[84]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[149], pnts[88], pnts[84]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[84], pnts[145], pnts[149]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[150], pnts[149], pnts[145]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[145], pnts[146], pnts[150]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[151], pnts[150], pnts[146]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[146], pnts[147], pnts[151]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[152], pnts[151], pnts[147]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[147], pnts[148], pnts[152]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[153], pnts[92], pnts[88]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[88], pnts[149], pnts[153]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[154], pnts[153], pnts[149]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[149], pnts[150], pnts[154]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[155], pnts[154], pnts[150]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[150], pnts[151], pnts[155]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[156], pnts[155], pnts[151]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[151], pnts[152], pnts[156]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[157], pnts[96], pnts[92]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[92], pnts[153], pnts[157]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[158], pnts[157], pnts[153]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[153], pnts[154], pnts[158]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[159], pnts[158], pnts[154]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[154], pnts[155], pnts[159]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[160], pnts[159], pnts[155]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[155], pnts[156], pnts[160]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[161], pnts[100], pnts[96]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[96], pnts[157], pnts[161]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[162], pnts[161], pnts[157]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[157], pnts[158], pnts[162]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[163], pnts[162], pnts[158]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[158], pnts[159], pnts[163]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[164], pnts[163], pnts[159]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[159], pnts[160], pnts[164]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[165], pnts[104], pnts[100]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[100], pnts[161], pnts[165]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[166], pnts[165], pnts[161]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[161], pnts[162], pnts[166]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[167], pnts[166], pnts[162]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[162], pnts[163], pnts[167]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[168], pnts[167], pnts[163]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[163], pnts[164], pnts[168]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[169], pnts[108], pnts[104]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[104], pnts[165], pnts[169]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[170], pnts[169], pnts[165]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[165], pnts[166], pnts[170]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[171], pnts[170], pnts[166]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[166], pnts[167], pnts[171]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[172], pnts[171], pnts[167]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[167], pnts[168], pnts[172]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[173], pnts[112], pnts[108]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[108], pnts[169], pnts[173]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[174], pnts[173], pnts[169]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[169], pnts[170], pnts[174]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[175], pnts[174], pnts[170]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[170], pnts[171], pnts[175]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[176], pnts[175], pnts[171]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[171], pnts[172], pnts[176]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[177], pnts[116], pnts[112]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[112], pnts[173], pnts[177]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[178], pnts[177], pnts[173]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[173], pnts[174], pnts[178]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[179], pnts[178], pnts[174]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[174], pnts[175], pnts[179]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[180], pnts[179], pnts[175]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[175], pnts[176], pnts[180]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[181], pnts[120], pnts[116]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[116], pnts[177], pnts[181]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[182], pnts[181], pnts[177]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[177], pnts[178], pnts[182]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[183], pnts[182], pnts[178]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[178], pnts[179], pnts[183]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[184], pnts[183], pnts[179]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[179], pnts[180], pnts[184]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[185], pnts[124], pnts[120]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[120], pnts[181], pnts[185]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[186], pnts[185], pnts[181]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[181], pnts[182], pnts[186]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[187], pnts[186], pnts[182]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[182], pnts[183], pnts[187]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[188], pnts[187], pnts[183]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[183], pnts[184], pnts[188]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[189], pnts[128], pnts[124]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[124], pnts[185], pnts[189]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[190], pnts[189], pnts[185]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[185], pnts[186], pnts[190]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[191], pnts[190], pnts[186]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[186], pnts[187], pnts[191]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[192], pnts[191], pnts[187]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[187], pnts[188], pnts[192]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[193], pnts[132], pnts[128]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[128], pnts[189], pnts[193]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[194], pnts[193], pnts[189]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[189], pnts[190], pnts[194]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[195], pnts[194], pnts[190]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[190], pnts[191], pnts[195]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[196], pnts[195], pnts[191]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[191], pnts[192], pnts[196]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[197], pnts[136], pnts[132]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[132], pnts[193], pnts[197]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[198], pnts[197], pnts[193]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[193], pnts[194], pnts[198]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[199], pnts[198], pnts[194]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[194], pnts[195], pnts[199]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[200], pnts[199], pnts[195]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[195], pnts[196], pnts[200]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[201], pnts[140], pnts[136]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[136], pnts[197], pnts[201]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[202], pnts[201], pnts[197]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[197], pnts[198], pnts[202]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[203], pnts[202], pnts[198]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[198], pnts[199], pnts[203]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[204], pnts[203], pnts[199]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[199], pnts[200], pnts[204]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[205], pnts[144], pnts[140]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[140], pnts[201], pnts[205]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[206], pnts[205], pnts[201]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[201], pnts[202], pnts[206]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[207], pnts[206], pnts[202]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[202], pnts[203], pnts[207]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[208], pnts[207], pnts[203]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[203], pnts[204], pnts[208]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[145], pnts[84], pnts[144]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[144], pnts[205], pnts[145]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[146], pnts[145], pnts[205]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[205], pnts[206], pnts[146]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[147], pnts[146], pnts[206]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[206], pnts[207], pnts[147]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[148], pnts[147], pnts[207]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[207], pnts[208], pnts[148]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[213], pnts[152], pnts[148]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[148], pnts[209], pnts[213]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[214], pnts[213], pnts[209]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[209], pnts[210], pnts[214]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[215], pnts[214], pnts[210]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[210], pnts[211], pnts[215]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[215], pnts[211]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[216], pnts[156], pnts[152]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[152], pnts[213], pnts[216]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[217], pnts[216], pnts[213]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[213], pnts[214], pnts[217]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[218], pnts[217], pnts[214]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[214], pnts[215], pnts[218]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[218], pnts[215]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[219], pnts[160], pnts[156]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[156], pnts[216], pnts[219]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[220], pnts[219], pnts[216]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[216], pnts[217], pnts[220]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[221], pnts[220], pnts[217]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[217], pnts[218], pnts[221]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[221], pnts[218]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[222], pnts[164], pnts[160]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[160], pnts[219], pnts[222]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[223], pnts[222], pnts[219]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[219], pnts[220], pnts[223]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[224], pnts[223], pnts[220]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[220], pnts[221], pnts[224]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[224], pnts[221]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[225], pnts[168], pnts[164]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[164], pnts[222], pnts[225]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[226], pnts[225], pnts[222]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[222], pnts[223], pnts[226]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[227], pnts[226], pnts[223]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[223], pnts[224], pnts[227]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[227], pnts[224]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[228], pnts[172], pnts[168]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[168], pnts[225], pnts[228]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[229], pnts[228], pnts[225]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[225], pnts[226], pnts[229]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[230], pnts[229], pnts[226]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[226], pnts[227], pnts[230]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[230], pnts[227]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[231], pnts[176], pnts[172]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[172], pnts[228], pnts[231]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[232], pnts[231], pnts[228]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[228], pnts[229], pnts[232]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[233], pnts[232], pnts[229]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[229], pnts[230], pnts[233]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[233], pnts[230]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[234], pnts[180], pnts[176]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[176], pnts[231], pnts[234]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[235], pnts[234], pnts[231]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[231], pnts[232], pnts[235]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[236], pnts[235], pnts[232]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[232], pnts[233], pnts[236]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[236], pnts[233]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[237], pnts[184], pnts[180]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[180], pnts[234], pnts[237]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[238], pnts[237], pnts[234]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[234], pnts[235], pnts[238]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[239], pnts[238], pnts[235]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[235], pnts[236], pnts[239]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[239], pnts[236]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[240], pnts[188], pnts[184]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[184], pnts[237], pnts[240]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[241], pnts[240], pnts[237]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[237], pnts[238], pnts[241]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[242], pnts[241], pnts[238]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[238], pnts[239], pnts[242]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[242], pnts[239]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[243], pnts[192], pnts[188]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[188], pnts[240], pnts[243]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[244], pnts[243], pnts[240]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[240], pnts[241], pnts[244]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[245], pnts[244], pnts[241]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[241], pnts[242], pnts[245]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[245], pnts[242]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[246], pnts[196], pnts[192]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[192], pnts[243], pnts[246]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[247], pnts[246], pnts[243]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[243], pnts[244], pnts[247]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[248], pnts[247], pnts[244]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[244], pnts[245], pnts[248]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[248], pnts[245]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[249], pnts[200], pnts[196]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[196], pnts[246], pnts[249]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[250], pnts[249], pnts[246]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[246], pnts[247], pnts[250]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[251], pnts[250], pnts[247]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[247], pnts[248], pnts[251]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[251], pnts[248]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[252], pnts[204], pnts[200]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[200], pnts[249], pnts[252]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[253], pnts[252], pnts[249]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[249], pnts[250], pnts[253]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[254], pnts[253], pnts[250]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[250], pnts[251], pnts[254]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[254], pnts[251]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[255], pnts[208], pnts[204]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[204], pnts[252], pnts[255]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[256], pnts[255], pnts[252]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[252], pnts[253], pnts[256]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[257], pnts[256], pnts[253]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[253], pnts[254], pnts[257]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[257], pnts[254]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[209], pnts[148], pnts[208]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[208], pnts[255], pnts[209]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[210], pnts[209], pnts[255]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[255], pnts[256], pnts[210]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[211], pnts[210], pnts[256]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[256], pnts[257], pnts[211]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[212], pnts[211], pnts[257]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[264], pnts[263], pnts[258]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[258], pnts[259], pnts[264]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[265], pnts[264], pnts[259]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[259], pnts[260], pnts[265]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[266], pnts[265], pnts[260]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[260], pnts[261], pnts[266]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[267], pnts[266], pnts[261]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[261], pnts[262], pnts[267]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[269], pnts[268], pnts[263]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[263], pnts[264], pnts[269]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[270], pnts[269], pnts[264]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[264], pnts[265], pnts[270]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[271], pnts[270], pnts[265]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[265], pnts[266], pnts[271]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[272], pnts[271], pnts[266]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[266], pnts[267], pnts[272]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[274], pnts[273], pnts[268]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[268], pnts[269], pnts[274]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[275], pnts[274], pnts[269]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[269], pnts[270], pnts[275]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[276], pnts[275], pnts[270]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[270], pnts[271], pnts[276]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[277], pnts[276], pnts[271]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[271], pnts[272], pnts[277]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[279], pnts[278], pnts[273]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[273], pnts[274], pnts[279]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[280], pnts[279], pnts[274]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[274], pnts[275], pnts[280]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[281], pnts[280], pnts[275]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[275], pnts[276], pnts[281]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[282], pnts[281], pnts[276]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[276], pnts[277], pnts[282]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[284], pnts[283], pnts[278]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[278], pnts[279], pnts[284]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[285], pnts[284], pnts[279]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[279], pnts[280], pnts[285]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[286], pnts[285], pnts[280]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[280], pnts[281], pnts[286]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[287], pnts[286], pnts[281]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[281], pnts[282], pnts[287]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[289], pnts[288], pnts[283]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[283], pnts[284], pnts[289]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[290], pnts[289], pnts[284]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[284], pnts[285], pnts[290]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[291], pnts[290], pnts[285]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[285], pnts[286], pnts[291]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[292], pnts[291], pnts[286]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[286], pnts[287], pnts[292]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[294], pnts[293], pnts[288]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[288], pnts[289], pnts[294]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[295], pnts[294], pnts[289]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[289], pnts[290], pnts[295]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[296], pnts[295], pnts[290]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[290], pnts[291], pnts[296]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[297], pnts[296], pnts[291]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[291], pnts[292], pnts[297]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[259], pnts[258], pnts[293]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[293], pnts[294], pnts[259]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[260], pnts[259], pnts[294]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[294], pnts[295], pnts[260]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[261], pnts[260], pnts[295]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[295], pnts[296], pnts[261]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[262], pnts[261], pnts[296]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[296], pnts[297], pnts[262]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[302], pnts[267], pnts[262]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[262], pnts[298], pnts[302]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[303], pnts[302], pnts[298]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[298], pnts[299], pnts[303]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[304], pnts[303], pnts[299]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[299], pnts[300], pnts[304]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[305], pnts[304], pnts[300]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[300], pnts[301], pnts[305]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[306], pnts[272], pnts[267]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[267], pnts[302], pnts[306]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[307], pnts[306], pnts[302]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[302], pnts[303], pnts[307]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[308], pnts[307], pnts[303]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[303], pnts[304], pnts[308]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[309], pnts[308], pnts[304]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[304], pnts[305], pnts[309]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[310], pnts[277], pnts[272]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[272], pnts[306], pnts[310]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[311], pnts[310], pnts[306]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[306], pnts[307], pnts[311]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[312], pnts[311], pnts[307]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[307], pnts[308], pnts[312]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[313], pnts[312], pnts[308]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[308], pnts[309], pnts[313]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[314], pnts[282], pnts[277]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[277], pnts[310], pnts[314]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[315], pnts[314], pnts[310]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[310], pnts[311], pnts[315]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[316], pnts[315], pnts[311]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[311], pnts[312], pnts[316]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[317], pnts[316], pnts[312]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[312], pnts[313], pnts[317]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[318], pnts[287], pnts[282]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[282], pnts[314], pnts[318]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[319], pnts[318], pnts[314]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[314], pnts[315], pnts[319]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[320], pnts[319], pnts[315]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[315], pnts[316], pnts[320]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[321], pnts[320], pnts[316]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[316], pnts[317], pnts[321]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[322], pnts[292], pnts[287]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[287], pnts[318], pnts[322]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[323], pnts[322], pnts[318]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[318], pnts[319], pnts[323]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[324], pnts[323], pnts[319]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[319], pnts[320], pnts[324]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[325], pnts[324], pnts[320]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[320], pnts[321], pnts[325]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[326], pnts[297], pnts[292]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[292], pnts[322], pnts[326]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[327], pnts[326], pnts[322]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[322], pnts[323], pnts[327]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[328], pnts[327], pnts[323]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[323], pnts[324], pnts[328]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[329], pnts[328], pnts[324]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[324], pnts[325], pnts[329]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[298], pnts[262], pnts[297]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[297], pnts[326], pnts[298]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[299], pnts[298], pnts[326]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[326], pnts[327], pnts[299]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[300], pnts[299], pnts[327]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[327], pnts[328], pnts[300]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[301], pnts[300], pnts[328]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[328], pnts[329], pnts[301]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[336], pnts[335], pnts[330]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[330], pnts[331], pnts[336]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[337], pnts[336], pnts[331]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[331], pnts[332], pnts[337]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[338], pnts[337], pnts[332]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[332], pnts[333], pnts[338]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[339], pnts[338], pnts[333]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[333], pnts[334], pnts[339]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[341], pnts[340], pnts[335]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[335], pnts[336], pnts[341]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[342], pnts[341], pnts[336]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[336], pnts[337], pnts[342]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[343], pnts[342], pnts[337]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[337], pnts[338], pnts[343]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[344], pnts[343], pnts[338]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[338], pnts[339], pnts[344]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[346], pnts[345], pnts[340]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[340], pnts[341], pnts[346]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[347], pnts[346], pnts[341]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[341], pnts[342], pnts[347]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[348], pnts[347], pnts[342]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[342], pnts[343], pnts[348]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[349], pnts[348], pnts[343]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[343], pnts[344], pnts[349]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[351], pnts[350], pnts[345]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[345], pnts[346], pnts[351]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[352], pnts[351], pnts[346]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[346], pnts[347], pnts[352]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[353], pnts[352], pnts[347]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[347], pnts[348], pnts[353]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[354], pnts[353], pnts[348]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[348], pnts[349], pnts[354]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[356], pnts[355], pnts[350]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[350], pnts[351], pnts[356]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[357], pnts[356], pnts[351]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[351], pnts[352], pnts[357]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[358], pnts[357], pnts[352]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[352], pnts[353], pnts[358]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[359], pnts[358], pnts[353]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[353], pnts[354], pnts[359]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[361], pnts[360], pnts[355]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[355], pnts[356], pnts[361]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[362], pnts[361], pnts[356]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[356], pnts[357], pnts[362]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[363], pnts[362], pnts[357]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[357], pnts[358], pnts[363]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[364], pnts[363], pnts[358]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[358], pnts[359], pnts[364]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[366], pnts[365], pnts[360]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[360], pnts[361], pnts[366]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[367], pnts[366], pnts[361]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[361], pnts[362], pnts[367]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[368], pnts[367], pnts[362]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[362], pnts[363], pnts[368]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[369], pnts[368], pnts[363]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[363], pnts[364], pnts[369]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[331], pnts[330], pnts[365]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[365], pnts[366], pnts[331]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[332], pnts[331], pnts[366]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[366], pnts[367], pnts[332]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[333], pnts[332], pnts[367]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[367], pnts[368], pnts[333]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[334], pnts[333], pnts[368]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[368], pnts[369], pnts[334]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[374], pnts[339], pnts[334]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[334], pnts[370], pnts[374]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[375], pnts[374], pnts[370]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[370], pnts[371], pnts[375]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[376], pnts[375], pnts[371]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[371], pnts[372], pnts[376]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[377], pnts[376], pnts[372]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[372], pnts[373], pnts[377]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[378], pnts[344], pnts[339]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[339], pnts[374], pnts[378]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[379], pnts[378], pnts[374]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[374], pnts[375], pnts[379]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[380], pnts[379], pnts[375]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[375], pnts[376], pnts[380]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[381], pnts[380], pnts[376]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[376], pnts[377], pnts[381]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[382], pnts[349], pnts[344]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[344], pnts[378], pnts[382]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[383], pnts[382], pnts[378]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[378], pnts[379], pnts[383]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[384], pnts[383], pnts[379]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[379], pnts[380], pnts[384]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[385], pnts[384], pnts[380]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[380], pnts[381], pnts[385]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[386], pnts[354], pnts[349]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[349], pnts[382], pnts[386]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[387], pnts[386], pnts[382]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[382], pnts[383], pnts[387]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[388], pnts[387], pnts[383]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[383], pnts[384], pnts[388]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[389], pnts[388], pnts[384]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[384], pnts[385], pnts[389]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[390], pnts[359], pnts[354]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[354], pnts[386], pnts[390]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[391], pnts[390], pnts[386]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[386], pnts[387], pnts[391]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[392], pnts[391], pnts[387]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[387], pnts[388], pnts[392]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[393], pnts[392], pnts[388]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[388], pnts[389], pnts[393]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[394], pnts[364], pnts[359]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[359], pnts[390], pnts[394]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[395], pnts[394], pnts[390]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[390], pnts[391], pnts[395]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[396], pnts[395], pnts[391]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[391], pnts[392], pnts[396]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[397], pnts[396], pnts[392]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[392], pnts[393], pnts[397]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[398], pnts[369], pnts[364]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[364], pnts[394], pnts[398]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[399], pnts[398], pnts[394]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[394], pnts[395], pnts[399]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[400], pnts[399], pnts[395]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[395], pnts[396], pnts[400]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[401], pnts[400], pnts[396]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[396], pnts[397], pnts[401]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[370], pnts[334], pnts[369]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[369], pnts[398], pnts[370]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[371], pnts[370], pnts[398]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[398], pnts[399], pnts[371]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[372], pnts[371], pnts[399]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[399], pnts[400], pnts[372]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[373], pnts[372], pnts[400]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[400], pnts[401], pnts[373]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[403], pnts[407]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[408], pnts[407], pnts[403]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[403], pnts[404], pnts[408]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[409], pnts[408], pnts[404]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[404], pnts[405], pnts[409]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[410], pnts[409], pnts[405]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[405], pnts[406], pnts[410]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[407], pnts[411]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[412], pnts[411], pnts[407]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[407], pnts[408], pnts[412]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[413], pnts[412], pnts[408]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[408], pnts[409], pnts[413]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[414], pnts[413], pnts[409]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[409], pnts[410], pnts[414]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[411], pnts[415]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[416], pnts[415], pnts[411]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[411], pnts[412], pnts[416]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[417], pnts[416], pnts[412]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[412], pnts[413], pnts[417]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[418], pnts[417], pnts[413]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[413], pnts[414], pnts[418]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[415], pnts[419]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[420], pnts[419], pnts[415]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[415], pnts[416], pnts[420]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[421], pnts[420], pnts[416]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[416], pnts[417], pnts[421]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[422], pnts[421], pnts[417]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[417], pnts[418], pnts[422]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[419], pnts[423]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[424], pnts[423], pnts[419]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[419], pnts[420], pnts[424]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[425], pnts[424], pnts[420]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[420], pnts[421], pnts[425]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[426], pnts[425], pnts[421]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[421], pnts[422], pnts[426]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[423], pnts[427]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[428], pnts[427], pnts[423]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[423], pnts[424], pnts[428]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[429], pnts[428], pnts[424]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[424], pnts[425], pnts[429]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[430], pnts[429], pnts[425]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[425], pnts[426], pnts[430]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[427], pnts[431]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[432], pnts[431], pnts[427]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[427], pnts[428], pnts[432]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[433], pnts[432], pnts[428]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[428], pnts[429], pnts[433]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[434], pnts[433], pnts[429]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[429], pnts[430], pnts[434]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[431], pnts[435]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[436], pnts[435], pnts[431]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[431], pnts[432], pnts[436]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[437], pnts[436], pnts[432]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[432], pnts[433], pnts[437]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[438], pnts[437], pnts[433]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[433], pnts[434], pnts[438]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[435], pnts[439]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[440], pnts[439], pnts[435]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[435], pnts[436], pnts[440]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[441], pnts[440], pnts[436]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[436], pnts[437], pnts[441]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[442], pnts[441], pnts[437]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[437], pnts[438], pnts[442]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[439], pnts[443]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[444], pnts[443], pnts[439]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[439], pnts[440], pnts[444]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[445], pnts[444], pnts[440]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[440], pnts[441], pnts[445]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[446], pnts[445], pnts[441]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[441], pnts[442], pnts[446]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[443], pnts[447]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[448], pnts[447], pnts[443]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[443], pnts[444], pnts[448]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[449], pnts[448], pnts[444]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[444], pnts[445], pnts[449]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[450], pnts[449], pnts[445]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[445], pnts[446], pnts[450]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[447], pnts[451]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[452], pnts[451], pnts[447]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[447], pnts[448], pnts[452]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[453], pnts[452], pnts[448]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[448], pnts[449], pnts[453]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[454], pnts[453], pnts[449]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[449], pnts[450], pnts[454]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[451], pnts[455]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[456], pnts[455], pnts[451]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[451], pnts[452], pnts[456]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[457], pnts[456], pnts[452]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[452], pnts[453], pnts[457]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[458], pnts[457], pnts[453]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[453], pnts[454], pnts[458]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[455], pnts[459]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[460], pnts[459], pnts[455]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[455], pnts[456], pnts[460]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[461], pnts[460], pnts[456]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[456], pnts[457], pnts[461]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[462], pnts[461], pnts[457]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[457], pnts[458], pnts[462]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[459], pnts[463]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[464], pnts[463], pnts[459]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[459], pnts[460], pnts[464]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[465], pnts[464], pnts[460]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[460], pnts[461], pnts[465]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[466], pnts[465], pnts[461]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[461], pnts[462], pnts[466]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[402], pnts[463], pnts[403]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[404], pnts[403], pnts[463]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[463], pnts[464], pnts[404]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[405], pnts[404], pnts[464]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[464], pnts[465], pnts[405]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[406], pnts[405], pnts[465]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[465], pnts[466], pnts[406]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[471], pnts[410], pnts[406]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[406], pnts[467], pnts[471]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[472], pnts[471], pnts[467]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[467], pnts[468], pnts[472]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[473], pnts[472], pnts[468]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[468], pnts[469], pnts[473]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[474], pnts[473], pnts[469]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[469], pnts[470], pnts[474]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[475], pnts[414], pnts[410]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[410], pnts[471], pnts[475]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[476], pnts[475], pnts[471]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[471], pnts[472], pnts[476]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[477], pnts[476], pnts[472]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[472], pnts[473], pnts[477]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[478], pnts[477], pnts[473]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[473], pnts[474], pnts[478]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[479], pnts[418], pnts[414]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[414], pnts[475], pnts[479]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[480], pnts[479], pnts[475]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[475], pnts[476], pnts[480]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[481], pnts[480], pnts[476]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[476], pnts[477], pnts[481]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[482], pnts[481], pnts[477]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[477], pnts[478], pnts[482]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[483], pnts[422], pnts[418]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[418], pnts[479], pnts[483]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[484], pnts[483], pnts[479]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[479], pnts[480], pnts[484]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[485], pnts[484], pnts[480]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[480], pnts[481], pnts[485]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[486], pnts[485], pnts[481]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[481], pnts[482], pnts[486]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[487], pnts[426], pnts[422]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[422], pnts[483], pnts[487]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[488], pnts[487], pnts[483]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[483], pnts[484], pnts[488]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[489], pnts[488], pnts[484]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[484], pnts[485], pnts[489]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[490], pnts[489], pnts[485]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[485], pnts[486], pnts[490]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[491], pnts[430], pnts[426]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[426], pnts[487], pnts[491]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[492], pnts[491], pnts[487]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[487], pnts[488], pnts[492]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[493], pnts[492], pnts[488]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[488], pnts[489], pnts[493]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[494], pnts[493], pnts[489]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[489], pnts[490], pnts[494]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[495], pnts[434], pnts[430]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[430], pnts[491], pnts[495]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[496], pnts[495], pnts[491]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[491], pnts[492], pnts[496]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[497], pnts[496], pnts[492]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[492], pnts[493], pnts[497]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[498], pnts[497], pnts[493]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[493], pnts[494], pnts[498]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[499], pnts[438], pnts[434]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[434], pnts[495], pnts[499]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[500], pnts[499], pnts[495]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[495], pnts[496], pnts[500]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[501], pnts[500], pnts[496]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[496], pnts[497], pnts[501]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[502], pnts[501], pnts[497]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[497], pnts[498], pnts[502]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[503], pnts[442], pnts[438]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[438], pnts[499], pnts[503]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[504], pnts[503], pnts[499]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[499], pnts[500], pnts[504]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[505], pnts[504], pnts[500]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[500], pnts[501], pnts[505]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[506], pnts[505], pnts[501]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[501], pnts[502], pnts[506]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[507], pnts[446], pnts[442]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[442], pnts[503], pnts[507]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[508], pnts[507], pnts[503]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[503], pnts[504], pnts[508]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[509], pnts[508], pnts[504]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[504], pnts[505], pnts[509]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[510], pnts[509], pnts[505]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[505], pnts[506], pnts[510]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[511], pnts[450], pnts[446]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[446], pnts[507], pnts[511]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[512], pnts[511], pnts[507]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[507], pnts[508], pnts[512]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[513], pnts[512], pnts[508]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[508], pnts[509], pnts[513]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[514], pnts[513], pnts[509]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[509], pnts[510], pnts[514]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[515], pnts[454], pnts[450]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[450], pnts[511], pnts[515]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[516], pnts[515], pnts[511]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[511], pnts[512], pnts[516]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[517], pnts[516], pnts[512]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[512], pnts[513], pnts[517]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[518], pnts[517], pnts[513]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[513], pnts[514], pnts[518]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[519], pnts[458], pnts[454]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[454], pnts[515], pnts[519]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[520], pnts[519], pnts[515]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[515], pnts[516], pnts[520]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[521], pnts[520], pnts[516]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[516], pnts[517], pnts[521]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[522], pnts[521], pnts[517]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[517], pnts[518], pnts[522]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[523], pnts[462], pnts[458]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[458], pnts[519], pnts[523]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[524], pnts[523], pnts[519]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[519], pnts[520], pnts[524]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[525], pnts[524], pnts[520]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[520], pnts[521], pnts[525]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[526], pnts[525], pnts[521]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[521], pnts[522], pnts[526]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[527], pnts[466], pnts[462]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[462], pnts[523], pnts[527]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[528], pnts[527], pnts[523]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[523], pnts[524], pnts[528]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[529], pnts[528], pnts[524]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[524], pnts[525], pnts[529]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[530], pnts[529], pnts[525]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[525], pnts[526], pnts[530]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[467], pnts[406], pnts[466]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[466], pnts[527], pnts[467]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[468], pnts[467], pnts[527]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[527], pnts[528], pnts[468]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[469], pnts[468], pnts[528]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[528], pnts[529], pnts[469]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[470], pnts[469], pnts[529]).setEmission(color).setMaterial(mat), //
+				new Triangle(pnts[529], pnts[530], pnts[470]).setEmission(color).setMaterial(mat) //
+		);
+		scene.lights.add(new PointLight(new Color(500, 500, 500), new Point3D(100, 0, -100)) //
+				.setkQ(0.000001));
+
+		ImageWriter imageWriter = new ImageWriter("teapot", 800, 800);
+		Render render = new Render() //
+				.setCamera(camera) //
+				.setImageWriter(imageWriter) //
+				.setRayTracer(new RayTracerBasic(scene)) //
+				.setMultithreading(0).setDebugPrint();
+		render.renderImage();
+		render.printGrid(50, new Color(java.awt.Color.YELLOW));
+		render.writeToImage();
+	}
+
+}
\ No newline at end of file