Часть информации была взята от сюда я полностью согласен с ними но всетаки добавил пару фишек от себя!)