рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡реЗрдм-рдорд╛рдЗрдирд┐рдВрдЧ рдиреЛрдб.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

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





рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдмрд┐рд▓рдХреБрд▓ рдиреЛрдб.рдЬреЗрдПрд╕ рдХреНрдпреЛрдВ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖ рддрдХрдиреАрдХ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рдерд╛ - рдЖрдк рдЬрд╛рд╡рд╛ / .NET рд╕реЗ рдкрд░реНрд▓ / рдкрд╛рдпрдерди рддрдХ рд╕реА ++ рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдореИрдВрдиреЗ рдиреЛрдб рдХреНрдпреЛрдВ рдЪреБрдирд╛ рд╣реИред js:



рдиреЛрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ редjs



рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрдирд╛ (FreeBSD, amd64) рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЪрд▓реА рдЧрдИ - "рд╕реАрдбреА / рдпреВрдПрд╕рдЖрд░ / рдкреЛрд░реНрдЯ / www / рдиреЛрдб; рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ" рдФрд░ рдиреЛрдб.рдЬреЗрдПрд╕ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред



рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕реБрд▓рдн рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рд╕рд╛рдЗрдмрд░рд╡рд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ .NET рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреЛрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред



рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рд░реНрджреЗрд╢ ред



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



рдкреЗрдЬ рдЕрдирд▓реЛрдбрд░



Http.Client рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реБрдП рдФрд░ рд╕рдВрдкреВрд░реНрдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ, url рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд "рд╡рд░реНрдЧ" рдХреЗ рд╕рд╛рде рдЖрдП:

var webDownloader = function (sourceUrl) {<br>

events.EventEmitter.call( this );<br>

this .load = function (sourceUrl) {<br>

var src = url.parse(sourceUrl);<br>

var webClient = http.createClient(src.port==undefined?80:src.port,src.hostname);<br>

var get = src.pathname+(src.search==undefined? '' :src.search);<br>

sys.log( 'loading ' +src.href);<br>

var request = webClient.request( 'GET' , get ,<br>

{ 'host' : src.hostname});<br>

request.end();<br>

var miner = this ;<br>

request.on( 'response' , function (response) {<br>

// console.log('STATUS: ' + response.statusCode); <br>

// console.log('HEADERS: ' + JSON.stringify(response.headers)); <br>

response.setEncoding( 'utf8' );<br>

var body = '' ;<br>

response.on( 'data' , function (chunk) {<br>

body += chunk;<br>

});<br>

response.on( 'end' , function () {<br>

miner.emit( 'page' ,body, src);<br>

});<br>

});<br>

};<br>

}<br>

sys.inherits(webDownloader, events.EventEmitter);
<br>

<br>

* This source code was highlighted with Source Code Highlighter .









var webDownloader = function (sourceUrl) {<br>

events.EventEmitter.call( this );<br>

this .load = function (sourceUrl) {<br>

var src = url.parse(sourceUrl);<br>

var webClient = http.createClient(src.port==undefined?80:src.port,src.hostname);<br>

var get = src.pathname+(src.search==undefined? '' :src.search);<br>

sys.log( 'loading ' +src.href);<br>

var request = webClient.request( 'GET' , get ,<br>

{ 'host' : src.hostname});<br>

request.end();<br>

var miner = this ;<br>

request.on( 'response' , function (response) {<br>

// console.log('STATUS: ' + response.statusCode); <br>

// console.log('HEADERS: ' + JSON.stringify(response.headers)); <br>

response.setEncoding( 'utf8' );<br>

var body = '' ;<br>

response.on( 'data' , function (chunk) {<br>

body += chunk;<br>

});<br>

response.on( 'end' , function () {<br>

miner.emit( 'page' ,body, src);<br>

});<br>

});<br>

};<br>

}<br>

sys.inherits(webDownloader, events.EventEmitter);
<br>

<br>

* This source code was highlighted with Source Code Highlighter .









var webDownloader = function (sourceUrl) {<br>

events.EventEmitter.call( this );<br>

this .load = function (sourceUrl) {<br>

var src = url.parse(sourceUrl);<br>

var webClient = http.createClient(src.port==undefined?80:src.port,src.hostname);<br>

var get = src.pathname+(src.search==undefined? '' :src.search);<br>

sys.log( 'loading ' +src.href);<br>

var request = webClient.request( 'GET' , get ,<br>

{ 'host' : src.hostname});<br>

request.end();<br>

var miner = this ;<br>

request.on( 'response' , function (response) {<br>

// console.log('STATUS: ' + response.statusCode); <br>

// console.log('HEADERS: ' + JSON.stringify(response.headers)); <br>

response.setEncoding( 'utf8' );<br>

var body = '' ;<br>

response.on( 'data' , function (chunk) {<br>

body += chunk;<br>

});<br>

response.on( 'end' , function () {<br>

miner.emit( 'page' ,body, src);<br>

});<br>

});<br>

};<br>

}<br>

sys.inherits(webDownloader, events.EventEmitter);
<br>

<br>

* This source code was highlighted with Source Code Highlighter .












рдпрд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ EventEmitter рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ: рдШрдЯрдирд╛рдУрдВред EventEmitter.call (рдпрд╣);
  2. "рдЗрдирд╣реЗрд░рд┐рдЯ" EventEmitter рд╕реЗ рдПрдХ рд╡рд░реНрдЧ
  3. "рдПрдорд┐рдЯ" рдИрдорд┐рддреНрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдШрдЯрдирд╛




рдпрд╣ EventEmitter рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╕рд╛ Google рдХрд░рдирд╛ рдкрдбрд╝рд╛ред



рдЕрдм рд╣рдо рдкреВрд░реНрдг рдкреГрд╖реНрда рд▓реЛрдб рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:

var loader = new webDownloader();<br>

loader.on('page',vcardSearch);








VCard рдбреЗрдЯрд╛ рдЦреЛрдЬреЗрдВ



рдЕрдм рдПрдХ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдкреГрд╖реНрда рд╕реЗ vCard рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдореИрдВ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдмрд╣реБрдд рд╕рдордп рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ "рдорд╛рдереЗ" рдХрд┐рдпрд╛ - рд╕рд╣реА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреА рдЦреЛрдЬред



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



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдорд┐рд▓рд╛:

var vcardSearch = function (body,src) {<br>

sys.log( 'scaning ' +src.href);;<br>

Apricot.parse(body, function (doc) {<br>

var vcardClasses = [<br>

// required <br>

'fn' ,<br>

'family-name' , 'given-name' , 'additional-name' , 'honorific-prefix' , 'honorific-suffix' ,<br>

'nickname' ,<br>

// optional <br>

'adr' , 'contact' ,<br>

'email' ,<br>

'post-office-box' , 'extended-address' , 'street-address' , 'locality' , 'region' , 'postal-code' , 'country-name' ,<br>

'bday' , 'email' , 'logo' , 'org' , 'photo' , 'tel' <br>

];<br>

var vcard = new vCard();<br>

var scanElement = function (el) {<br>

if (el==undefined) return ;<br>

<br>

if (el.className != undefined && el.className!= '' ) {<br>

var classes = el.className.split( ' ' );<br>

for ( var n in classes) {<br>

if (vcardClasses.indexOf(classes[n])>=0) {<br>

var value = el.text.trim().replace(/<\/?[^>]+(>|$)/g, '' );<br>

if (value != '' ) vcard.Values[classes[n]] = value;<br>

}<br>

}<br>

}<br>

for ( var i in el.childNodes) scanElement(el.childNodes[i]);<br>

}<br>

scanElement(doc. document .body);<br>

if (!vcard.isEmpty())<br>

sys.log( 'vCard = ' +vcard.toString());<br>

else <br>

sys.log( 'no vCard found on ' +src.href);<br>

});<br>

}
<br>

<br>

* This source code was highlighted with Source Code Highlighter .








var vcardSearch = function (body,src) {<br>

sys.log( 'scaning ' +src.href);;<br>

Apricot.parse(body, function (doc) {<br>

var vcardClasses = [<br>

// required <br>

'fn' ,<br>

'family-name' , 'given-name' , 'additional-name' , 'honorific-prefix' , 'honorific-suffix' ,<br>

'nickname' ,<br>

// optional <br>

'adr' , 'contact' ,<br>

'email' ,<br>

'post-office-box' , 'extended-address' , 'street-address' , 'locality' , 'region' , 'postal-code' , 'country-name' ,<br>

'bday' , 'email' , 'logo' , 'org' , 'photo' , 'tel' <br>

];<br>

var vcard = new vCard();<br>

var scanElement = function (el) {<br>

if (el==undefined) return ;<br>

<br>

if (el.className != undefined && el.className!= '' ) {<br>

var classes = el.className.split( ' ' );<br>

for ( var n in classes) {<br>

if (vcardClasses.indexOf(classes[n])>=0) {<br>

var value = el.text.trim().replace(/<\/?[^>]+(>|$)/g, '' );<br>

if (value != '' ) vcard.Values[classes[n]] = value;<br>

}<br>

}<br>

}<br>

for ( var i in el.childNodes) scanElement(el.childNodes[i]);<br>

}<br>

scanElement(doc. document .body);<br>

if (!vcard.isEmpty())<br>

sys.log( 'vCard = ' +vcard.toString());<br>

else <br>

sys.log( 'no vCard found on ' +src.href);<br>

});<br>

}
<br>

<br>

* This source code was highlighted with Source Code Highlighter .










рдкрд░рд┐рдгрд╛рдо



рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:



loader.load('http://www.google.com/profiles/olostan');<br>

loader.load('http://www.flickr.com/people/olostan/');<br>









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



рдкреВрд░реНрдг рдХреЛрдб (Google рдбреЙрдХреНрд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛, Google рдЦрд╛рддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)



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



All Articles