 		
 		return attributeBuilder.layoutAttributesForSupplementaryViewOfKind(elementKind, atIndexPath: indexPath, startingAttributes: attributes)
 	}
-	
 }
 
 protocol MosaicFrameNode{

				let summedIteritemSpacing = CGFloat(section.constrainedSideGridLength - 1) * interitemSpacing
				let unitPixelScaleFactor = (contentSize.width - sectionInset.left - sectionInset.right - summedIteritemSpacing) / CGFloat(section.constrainedSideGridLength)
				
				// section origin starts horizontally at the content insets and vertically at the vertical extent of contentSize				
				let sectionOrigin = CGPoint(x:0.0, y:contentSize.height)
				
				// get the header and footer sizes to use in frame calculations

					headerFrame: CGRect? = nil,
					footerFrame: CGRect? = nil
					) {
						//TODO: change headerFrame and footerFrame to size only to remove amiibuity of how its used
						self.cells = cells
						
						// compute frame of all cells
						var rect = MosaicLayoutFrameTree.computeContainerFrame(cells.map({$0 as MosaicFrameNode}))
						
						if let header = headerFrame {
							// expand rect to include header
							rect = CGRectUnion(rect, header)
							self.headerFrame = header
						} else {
							self.headerFrame = nil
						}
						
						if let footer = footerFrame {
							// expand rect to include footer
							rect = CGRectUnion(rect, footer)
							self.footerFrame = footer
						} else {
							self.footerFrame = nil
						}
						
						self.frame = rect
				}
			}
			
