рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд╡реЗрд╡реНрд╕ред рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡

рдЫрд╡рд┐

рдЕрдкреНрд░реИрд▓ 2018 рдореЗрдВ, рд╡реЗрд╡реНрд╕ рдЯреАрдо рдиреЗ рдЕрдкрдиреЗ рдиреЙрдЯ-рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдг рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдПред

рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рдЬрдм рд╡реЗрд╡реНрд╕ рд╣реИрдХрд╛рдереЙрди рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ, рддреЛ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдирдИ рддрдХрдиреАрдХ рдореЗрдВ рдЦреБрдж рдХреЛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЖрдкрдХреЛ рд╣реИрдХрдереЙрди рдореЗрдВ рддреАрд╕рд░рд╛ рд╕реНрдерд╛рди рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреАред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рд╡рд┐рдЪрд╛рд░


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ, рдЧреАрдереВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╡реЗрддрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдп, рд╡рд╣ рдХрд╛рд░реНрдп рдЬреЛ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдзрди рд╡рд┐рддрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдзрди рдХреЗ рд╕рд╣реА рд╡рд┐рддрд░рдг рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдвреЗрд░


Html рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (Node.js рд▓рд╣рд░реЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп ), GitHub рдкрд░ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред

рдкреНрд░рдХреНрд░рд┐рдпрд╛


  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗрддрди рдХреА рдХреБрд▓ рд░рд╛рд╢рд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
  2. рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0.01 рд╡реЗрд╡ (рд▓рдЧрднрдЧ 0.02 рдбреЙрд▓рд░) рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ
  3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЗ рдкрддреЗ рдкрд░ рд╡реЗрддрди рдХреА рд░рд╛рд╢рд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
  4. рд╡реЗрддрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рдбрд┐рдЬрд╝рд╛рдЗрди


рдиреМрд╕рд┐рдЦрд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдбреЗрдореЛ рдХрдВрд╕реЛрд▓ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрд╕реЛрд▓ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдкрд░реАрдХреНрд╖рдг рдмреНрд▓реЙрдХрдЪреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ , рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде 10 рдореБрдлреНрдд рдкрд░реАрдХреНрд╖рдг рддрд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐ Google рдЕрднреА рднреА рддрдХрдиреАрдХ рдХреА рдирд╡реАрдирддрд╛ рдХреЗ рдХрд╛рд░рдг рдХрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдЦреЛрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

NodeJs рдкреБрд╕реНрддрдХрд╛рд▓рдп (1.4.0) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдПрд▓рд┐рдпрд╛рд╕ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ Google рдлрд╝рдВрдХреНрд╢рдВрд╕ рдпрд╛ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдХреЗ рд╕рд╛рде рдЕрднреА рднреА рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ (рд╡реЗрд╡ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ )ред

рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз


рдПрдХ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рд╣рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ (рдЖрдиреЗ рд╡рд╛рд▓реЗ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде):

let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false } 

рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ


 let signature = base58'${currentWallet.keyPair.publicKey}'; 

рдпрд╣рд╛рдВ рд╣рдо рд╡реЙрд▓реЗрдЯ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ (рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Waves.Seed.create () рдХрдорд╛рдВрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдореМрдЬреВрджрд╛ рд╡реЙрд▓реЗрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рд╡реЙрд▓реЗрдЯ рдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЕрдХрд╛рдЙрдВрдЯ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рд░рд┐рд╡реЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдлрдВрдб рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХреЗред

 match tx { case tx:TransferTransaction => {some validations} case _ => false } 

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

 let employerAddress = addressFromPublicKey(tx.senderPk); 

рдпрд╣ рдЕрдкрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╕реЗ рдЕрдиреБрд░реЛрдз рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рд╡рд┐рдзрд┐ рдПрдбреНрд░реЗрд╕рдлреНрд░реЛрдо рд░рд┐рдкрдмреНрд▓рд┐рдХрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

 let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); 

рдЖрдзрд╛рд░ рд╡рд┐рдзрд┐ addressFromRecipient рдХреЛ рдзрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдкрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ

 let salary = extract(getLong(employerAddress, dateKey)); 

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

 if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false 

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╕рд╣реА рд░рд╛рд╢рд┐ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реЛрддрд╛ рд╣реИред рд╕рд╣реА рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА, рдФрд░ рдЧрд▓рдд рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЗрдирджреЗрди рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдЦрд╛рддреЗ рд╕реЗ рдзрди рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдзрди рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдмрдЯреБрдП рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд▓реЙрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╛рд╢рд┐ рдореЗрдВ, рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдардиреАрдп рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА (рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдФрд░ рд░рд╛рд╢рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрддрд╛) рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдЬреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ, рд╡реЗрддрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 5-10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рджреЗрдЦреЗрдВред

рдкрд░реАрдХреНрд╖рдг рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдСрдирд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рди, рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдпрд╣рд╛рдВ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдерд╛ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

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


All Articles