def getExtentAddress(self, zoom, extent=None, contained=False):
        """
        Return the bounding addresses ([minRow, minCol, maxRow, maxCol] based
        on the instance's extent or a user defined extent. Generic method
        that works with regular and irregular pyramids.
        Parameters:
            zoom -- the zoom for which we want the bounding addresses
            extent (optional) -- the extent ([minX, minY, maxX, maxY])
                                 defaults to the instance extent
            contained (optional) -- get only tile addresses that contain
                                    a coordinate of the extent. For instance if
                                    the extent only intersects a tile border,
                                    if this option is set to True, this tile
                                    will be ignored. defaults to False
        """
        if extent:
            bbox = extent
        else:
            bbox = self.extent
        minX = bbox[0]
        maxX = bbox[2]
        if self.originCorner == 'bottom-left':
            minY = bbox[3]
            maxY = bbox[1]
        elif self.originCorner == 'top-left':
            minY = bbox[1]
            maxY = bbox[3]
        [minCol, minRow] = self.tileAddress(zoom, [minX, maxY])
        [maxCol, maxRow] = self.tileAddress(zoom, [maxX, minY])

        if contained and minCol != maxCol or minRow != maxRow:
            parentBoundsMin = self.tileBounds(zoom, minCol, minRow)
            if self.originCorner == 'bottom-left':
                if parentBoundsMin[2] == maxX:
                    maxCol -= 1
                if parentBoundsMin[3] == minY:
                    maxRow -= 1
            elif self.originCorner == 'top-left':
                if parentBoundsMin[2] == maxX:
                    maxCol -= 1
                if parentBoundsMin[1] == minY:
                    maxRow -= 1
        return [minRow, minCol, maxRow, maxCol]