Рядки з 112 по 122
логіку тут потрібно ретельно переглянути.