Изменил большую часть кода