рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдЬреЛ рдбреЛрдореЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ

рд╣реИрдм рдХреЗ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЛ рдирдорд╕реНрдХрд╛рд░ред

PHP рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ PHP рдореЗрдВ рдХреБрдЫ рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛, рдмрд┐рдирд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдПред

рд╡рд┐рдХрд▓реНрдк рдмреЙрдЯ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдЬреЛ рдбреЛрдореЗрди (рд╣реВрдЗрд╕) рдХреЗ рдЬреАрд╡рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдлрд┐рд░ рд╡рд╣рд╛рдВ рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдХреА рддрд╛рд░реАрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рдбреЛрдореЗрди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ (mysql) рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдФрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рдеред

рдЧреАрддрд╛ рдкрд░ рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдбред

рдореИрдВ рдПрдорд╡реАрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХрд╛рдлреА рд╣рдж рддрдХ рд╕рд╣реА рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рджреЗрдЦрдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕реЗ рдЕрдм рдкреАрд╡реАрд╕реА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ ...

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд░рдЪрдирд╛




рдХрдВрдЯреНрд░реЛрд▓рд░ - рдПрдХ рд▓рд┐рдВрдХ рдЬреЛ рдореЙрдбрд▓ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдореЙрдбрд▓ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ" рдХреА рдлрд╛рдЗрд▓реЗрдВ (рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреВрд░реЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ "рдХреНрд░реИрдо" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА)ред
рдХреЛрд░ - рдЕрдиреБрдкреНрд░рдпреЛрдЧ "рдХреЛрд░" рдлрд╝рд╛рдЗрд▓реЗрдВред
рдкреБрд╕реНрддрдХрд╛рд▓рдп - рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдиреЗ рдбреЛрдореЗрди рдирд╛рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдорд╛рд░реНрдЧ


рд░реВрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ (path.php) рдХреЛрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
2 рдкрддреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ:

/ bot - рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЗрд╕ рдкрддреЗ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдкрдХреЛ рдЗрд╕ uri / bot рдкрддреЗ рдкрд░ webhook рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
/ рдЬрд╛рдВрдЪ - рдЗрд╕ рдкрддреЗ рдкрд░, рдХреНрд░реЛрди 1 рдкреНрд░рддрд┐ рджрд┐рди (12 рдмрдЬреЗ) рдХреЗ рд╕рд╛рде рд╡рд┐рдШрдЯрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ , рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред

BotController


рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрдиреЗ рдкрд░, рд╣рдореЗрдВ POST рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рд╕реЗ рдорд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

json_decode(file_get_contents('php://input'), JSON_OBJECT_AS_ARRAY); 

php: // input - POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

CheckerController


рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрдиреЗ рдкрд░, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЛрдореЗрди рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ:

  • рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐
  • 2 рджрд┐рди
  • 7 рджрд┐рди
  • 30 рджрд┐рди

рдФрд░ рдбреЛрдореЗрди рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдирд╛


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ webhook рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ, рддрдм рд╣рдореЗрдВ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



рд╣рдо рд╕рдВрджреЗрд╢ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ ред

рд╕рд░рдгреА рд╕рдВрджреЗрд╢ ['рдЪреИрдЯ'] рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ : id , first_name
рдЬрд╣рд╛рдВ:

рдЖрдИрдбреА - рдЪреИрдЯ рдЖрдИрдбреА
first_name - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо

рдФрд░ рд╕рдВрджреЗрд╢ ['рдкрд╛рда'] рд╕рд░рдгреА рд╕реЗ, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдЖрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред

рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╡рд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрдирд╛рдПрдВ

 //   $sql= "SELECT user_id FROM users WHERE chat_id=?"; $stmt = $db->prepare($sql); $stmt->execute([$chat_id]); $rows = $stmt->fetch(PDO::FETCH_ASSOC); return (int)$rows['user_id']; 

 //   $sql = 'INSERT INTO users (user_name, chat_id) VALUES (:user_name, :chat_id)'; $insert = $db->prepare($sql); $insert->execute([':user_name' => $name, ':chat_id' => $chat_id]); return true; 

рдбреЛрдореЗрди рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдЬреЛрдбрд╝рдирд╛


рдЬрдм / addDomain url рдХрдорд╛рдВрдб рдХреЛ рдмреЙрдЯ рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрдорд╛рдВрдб рд╕реЗ рдбреЛрдореЗрди рдпреВрдЖрд░рдПрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЛрдореЗрди рдкрдВрдЬреАрдХрд░рдг рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рдбреЛрдореЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


рд╣рдореЗрдВ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ:



рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рд╣рдо рдЗрд╕реЗ рд╕реЗ рдбреЛрдореЗрди рдкрдВрдЬреАрдХрд░рдг рдХреА рддрд╛рд░реАрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

 preg_match('/Registry\sExpiry\sDate:\s(.*)\\r/', $date, $matches); if (!$matches[1]){ preg_match('/paid-till:\s*(.*)\\n/', $date, $matches); } $matches[1] = $this->formatDate($matches[1]); return $matches[1]; 

рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдУрдкрдирдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

 $getDomainSSL = shell_exec("echo | openssl s_client -servername $url -connect $url:443 2>/dev/null | openssl x509 -noout -dates"); preg_match('~notAfter=(\w+)\s(\d+)\s.+\s(\d+)~', $getDomainSSL, $matches); $date = $matches[2].$matches[1].$matches[3]; $date = date("Ymd", strtotime($date)); $date = str_replace('.','-',$date); return $date; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 echo | openssl s_client -servername google.com -connect google.com:443 2>/dev/null | openssl x509 -noout -dates notBefore=Jan 7 15:47:12 2020 GMT notAfter=Mar 31 15:47:12 2020 GMT 

рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ

 preg_match('~notAfter=(\w+)\s(\d+)\s.+\s(\d+)~', $getDomainSSL, $matches); 



рдпрд╣ рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред

 $sql = 'INSERT INTO domains (domain_name, date_start, date_end, date_end_ssl) VALUES (:domain_name, :date_start, :date_end, :date_end_ssl)'; $insert = $db->prepare($sql); $insert->execute([':domain_name' => $url, ':date_end' => $exp, ':date_end_ssl' => $ssl_date]); 

рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдбреЛрдореЗрди рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ


рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбреЛрдореЗрди рдХреЛ "рдЧреБрдгрд╛" рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

 $sql = 'INSERT INTO domain_users (user_id, domain_id) VALUES (:user_id, :domain_id)'; $insert = $db->prepare($sql); $insert->execute([':user_id' => $user_id, ':domain_id' => $domain_id]); 

рдбреЛрдореЗрди рдХреА рдЕрдВрддрд┐рдо рддрд┐рдерд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


рдЬрдм wget / check address рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╕рднреА рдбреЛрдореЗрди рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЪреБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рддреЛ рдпрд╣ рдПрдХ рдЪреИрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдбреЛрдореЗрди рдмрд╛рдзреНрдп рд╣реЛрддрд╛ рд╣реИред

 $db = $this->db; $sql= " SELECT user_name, chat_id, domain_name, date_end FROM domain_users JOIN users USING (user_id) JOIN domains USING (domain_id) WHERE ( domains.date_end = CURDATE() OR domains.date_end = CURDATE() + INTERVAL 2 DAY OR domains.date_end = CURDATE() + INTERVAL 7 DAY OR domains.date_end = CURDATE() + INTERVAL 30 DAY ) "; $stmt = $db->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

рдХреНрд░реЙрди


рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореБрдХреБрдЯ рдХреЛ рд╣рд░ рджрд┐рди 12 рдмрдЬреЗ, рдкрддрд╛ / рдЪреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

 crontab -e 0 12 * * * wget url/check 

рддреЛрд░ рдЫрдВрдж


рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рджреЗрд╢ (рд░реВрд╕) рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рд╡реЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рдПрдкреАрдЖрдИ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдореБрдЭреЗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдореЗрд░реА рдкрд╕рдВрдж рдЯреЛрд░ рдкреНрд░реЙрдХреНрд╕реА (рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ) рдкрд░ рдЧрд┐рд░ рдЧрдИред

рдЗрд╕реЗ рдмрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 sudo apt-get install tor 

рддрдм рдкреЛрд░реНрдЯ 9050 рдкрд░ рдкреНрд░реЙрдХреНрд╕реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред

 curl_setopt($myCurl, CURLOPT_PROXYTYPE, 7); curl_setopt($myCurl, CURLOPT_PROXY, "127.0.0.1:9050"); 

рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!

рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВ :)

рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░реЗ рдЧрд┐рдереВрдм рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб :)

Source: https://habr.com/ru/post/hi485392/


All Articles