MinesweeperGame.prototype ._openNearCells =  function ( x,  y)  { 
    var  minesCounter =  this .countNearMines ( x,  y) ; 
    if  ( minesCounter !=  0 )  { 
        return  false ; 
    } 
    var  nearCellList =  this ._getNearCells( x,  y) ; 
    for  ( var  nearCellY in  nearCellList)  { 
        if  ( ! nearCellList.hasOwnProperty ( nearCellY) )  continue ; 
        for  ( var  nearCellX in  nearCellList[ nearCellY] )  { 
            if  ( ! nearCellList[ nearCellY] .hasOwnProperty ( nearCellX) )  continue ; 
            if  ( ! this .hasOpened ( nearCellX,  nearCellY)  && 
                ! this .hasFlag ( nearCellX,    nearCellY) )  { 
                this .open ( nearCellX,  nearCellY) ; 
            } 
        } 
    } 
} ; 
 
MinesweeperGame.prototype ._isCellInDict =  function ( x,  y,  dict)  { 
    if  ( dict[ y] )  { 
        return  dict[ y] [ x] ; 
    } 
    return  false ; 
} ; 
 
MinesweeperGame.prototype ._addCellToDict =  function ( x,  y,  dict)  { 
    if  ( ! this ._isCorrectCell( x,  y) )  { 
        throw  new  MinesweeperGameException( "При добавлении превышены размеры поля." ) ; 
    } 
    if  ( this ._isCellInDict( x,  y,  dict) )  { 
        throw  new  MinesweeperGameException( "Клетка уже существует в словаре." ) ; 
    } 
    dict[ y] [ x]  =  true ; 
    return  dict; 
} ; 
 
MinesweeperGame.prototype ._isCorrectCell =  function ( x,  y)  { 
    if  ( x <  1            || 
        y <  1            || 
        x >  this ._width || 
        y >  this ._height)  { 
        return  false ; 
    } 
    return  true ; 
} ; 
 
				TWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5fb3Blbk5lYXJDZWxscyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgIHZhciBtaW5lc0NvdW50ZXIgPSB0aGlzLmNvdW50TmVhck1pbmVzKHgsIHkpOwogICAgaWYgKG1pbmVzQ291bnRlciAhPSAwKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIG5lYXJDZWxsTGlzdCA9IHRoaXMuX2dldE5lYXJDZWxscyh4LCB5KTsKICAgIGZvciAodmFyIG5lYXJDZWxsWSBpbiBuZWFyQ2VsbExpc3QpIHsKICAgICAgICBpZiAoIW5lYXJDZWxsTGlzdC5oYXNPd25Qcm9wZXJ0eShuZWFyQ2VsbFkpKSBjb250aW51ZTsKICAgICAgICBmb3IgKHZhciBuZWFyQ2VsbFggaW4gbmVhckNlbGxMaXN0W25lYXJDZWxsWV0pIHsKICAgICAgICAgICAgaWYgKCFuZWFyQ2VsbExpc3RbbmVhckNlbGxZXS5oYXNPd25Qcm9wZXJ0eShuZWFyQ2VsbFgpKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCF0aGlzLmhhc09wZW5lZChuZWFyQ2VsbFgsIG5lYXJDZWxsWSkgJiYKICAgICAgICAgICAgICAgICF0aGlzLmhhc0ZsYWcobmVhckNlbGxYLCAgIG5lYXJDZWxsWSkpIHsKICAgICAgICAgICAgICAgIHRoaXMub3BlbihuZWFyQ2VsbFgsIG5lYXJDZWxsWSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLl9pc0NlbGxJbkRpY3QgPSBmdW5jdGlvbih4LCB5LCBkaWN0KSB7CiAgICBpZiAoZGljdFt5XSkgewogICAgICAgIHJldHVybiBkaWN0W3ldW3hdOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9OwoKTWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5fYWRkQ2VsbFRvRGljdCA9IGZ1bmN0aW9uKHgsIHksIGRpY3QpIHsKICAgIGlmICghdGhpcy5faXNDb3JyZWN0Q2VsbCh4LCB5KSkgewogICAgICAgIHRocm93IG5ldyBNaW5lc3dlZXBlckdhbWVFeGNlcHRpb24oItCf0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDQv9GA0LXQstGL0YjQtdC90Ysg0YDQsNC30LzQtdGA0Ysg0L/QvtC70Y8uIik7CiAgICB9CiAgICBpZiAodGhpcy5faXNDZWxsSW5EaWN0KHgsIHksIGRpY3QpKSB7CiAgICAgICAgdGhyb3cgbmV3IE1pbmVzd2VlcGVyR2FtZUV4Y2VwdGlvbigi0JrQu9C10YLQutCwINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQsiDRgdC70L7QstCw0YDQtS4iKTsKICAgIH0KICAgIGRpY3RbeV1beF0gPSB0cnVlOwogICAgcmV0dXJuIGRpY3Q7Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLl9pc0NvcnJlY3RDZWxsID0gZnVuY3Rpb24oeCwgeSkgewogICAgaWYgKHggPCAxICAgICAgICAgICB8fAogICAgICAgIHkgPCAxICAgICAgICAgICB8fAogICAgICAgIHggPiB0aGlzLl93aWR0aCB8fAogICAgICAgIHkgPiB0aGlzLl9oZWlnaHQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfTs=