So. рдЯрд╛рд╕реНрдХ рдЖ рдЧрдпрд╛ рд╣реИред рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдкреАрдбреАрдПрдл рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ (рдмрд╛рдж рдореЗрдВ рдИрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд)ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдЯреЛрдХрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд▓рд╛, рд╕рд░реНрд╡рд░ рдкрд░, рдЖрдкрдХреЛ рдкреАрдбреАрдПрдл рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо ASP.NET рдФрд░ рддрджрдиреБрд╕рд╛рд░, C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдХ-рдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рднреА рдирдордХ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реАрдПрдбреАрдИрдПрд╕-рдПрдХреНрд╕ рд▓реЙрдиреНрдЧ рдЯрд╛рдЗрдк 1 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд░реВрд╕реА GOST R 34.10-2001, GOST R 34.10-2012, рдЖрджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд┐рдЫрд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ред рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╣реИрд╢ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╣реА рдирд╣реАрдВред
рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдореИрдВ рдЙрди рдХреНрд╖рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЬреЛ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдорд╣рддреНрд╡ рд░рдЦрддреЗ рд╣реИрдВ, рдореИрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЙрддрдирд╛ рд╣реА рдЫреЛрдбрд╝реВрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП JS рдХреЛрдб рджреВрдВрдЧрд╛ рдЬрд┐рдирдХреЗ JS рдЗрдВрдЬрди рд╡рд╛рджрд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдИ рдЦреБрдж рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдореБрдЭреЗ "рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛")ред
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдбрд╝реА рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ Crypto PRO рд╕реЗ рдкреНрд▓рдЧ-рдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╣рдо JS рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдЯрд┐рдкреНрдкрдгреА:
- рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░реЛ рд╕реАрдП рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреЛрдХрди рдерд╛, (рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░реЛ рдХреЗ рд▓рд┐рдП рд╡рд╛рд░реНрд╖рд┐рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде ~ 1500r рдФрд░ рджреЛ рдкреНрд░рдорд╛рдг рдкрддреНрд░: рд▓реЗрдХрд┐рди "рдирдпрд╛" рдФрд░ "рдкреБрд░рд╛рдирд╛" GOST)
- рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧ-рдЗрди ViPNet рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдм рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкреАрдбреАрдПрдл рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
Crypto PRO рд╕реЗ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
<script src="/Scripts/cadesplugin_api.js" type="text/javascript"></script>
рддрдм рддрдХ рд╣рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреИрдбрдкреНрд▓рдЧрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ
window.cadespluginLoaded = false; cadesplugin.then(function () { window.cadespluginLoaded = true; });
рд╣рдо рд╣реИрд╢ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░рдорд╛рдг рдкрддреНрд░, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдЧрд╛ред рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА: рдореИрдВрдиреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ "рдЪрд░" рдХреЛ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ред
CryptographyObject рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐:
fillCertificates: function (failCallback) { cadesplugin.async_spawn(function*() { try { let oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.Store"); oStore.Open(cadesplugin.CAPICOM_CURRENT_USER_STORE, cadesplugin.CAPICOM_MY_STORE, cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED); let certs = yield oStore.Certificates; certs = yield certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID); let certsCount = yield certs.Count; for (let i = 1; i <= certsCount; i++) { let cert = yield certs.Item(i); CryptographyObject.certificates.push(cert); } oStore.Close(); } catch (exc) { failCallback(exc); } }); }
рдЯрд┐рдкреНрдкрдгреА: рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдЯреЛрд░ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рдгрд╛рд▓реА рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧреА рдХрд┐ рд╕рд╛рдЗрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдФрд░ рдЕрдиреНрдп рдЬрд╛рджреБрдИ, рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рдмрдХрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рд╣рд╛рдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдордп рдореЗрдВ рд╡реИрдз рд╣реИрдВ (рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ) рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдХреИрдбреНрд╕рдкреНрд▓рдЧрд┐рди рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдХреГрддрд┐ (IE рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИ;) рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣реИрд╢ рд╡рд┐рдзрд┐:
getHash: function (certIndex, successCallback, failCallback, - ) { try { cadesplugin.async_spawn(function*() { let cert = CryptographyObject.certificates[certIndex]; let certPublicKey = yield cert.PublicKey(); let certAlgorithm = yield certPublicKey.Algorithm; let algorithmValue = yield certAlgorithm.Value; let hashAlgorithm;
рдЯрд┐рдкреНрдкрдгреА: cadesplugin.async_spawn рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдЧреЗ () рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХреНрд░рдордг рдХреЛ рдЙрдкрдЬ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо C # рд╕реЗ async-wait рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдирд╛рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ iTextSharp рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 5.5.13 рдЪрд╛рд╣рд┐рдП) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рджреВрд╕рд░реЗ, CryptoPro.Sharpei рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ Crypto PRO .NET SDK рдХреЗ рд▓рд┐рдП рд▓реЛрдб рдкрд░ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдм рдЖрдк рд╣реИрд╢ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рд╕рд░реНрд╡рд░ рд╕реЗ рд╣реИрд╢ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдЙрд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╣реИрдВ
рдЯрд┐рдкреНрдкрдгреА: рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рднреЗрдЬреЗрдВ (рдКрдкрд░ рджреЗрдЦреЗрдВ)
рдЦреИрд░, рдЕрдВрдд рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдбрд╛рд▓реЗрдВ
рдЯрд┐рдкреНрдкрдгреА: SimpleExternalSignatureContainer рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ IExternalSignatureContainer рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрдбреАрдПрдл рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде, рд╡рд╣ рд╕рдм рд╣реИред рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓реЗрдЦ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╣реЛрдЧреА ...
рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕реНрд░реЛрдд рдУрдб рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдПред рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж