The OpenNET Project
 
Search (keywords):  SOFT ARTICLES TIPS & TRICKS SECURITY
LINKS NEWS MAN DOCUMENTATION


insecure signal handler design


<< Previous INDEX Search src Set bookmark Go to bookmark Next >>
Date: Mon, 28 May 2001 18:10:16 -0400 (EDT)
From: Michal Zalewski <[email protected]>
To: [email protected]
Subject: insecure signal handler design
Cc: [email protected], [email protected]

---373265275-291080756-991087816=:18807
Content-Type: TEXT/PLAIN; charset=US-ASCII


We are proud to announce our new security paper, "Delivering signals for
fun and profit". This paper is an attempt to discuss security aspects of
very common signal handler coding practices, describing theoretical
background and demonstrating actual attack scenarios against live code in
Unix environment.

The paper is available at:

  http://razor.bindview.com/publish/papers/signals.txt

For your convenience, it is attached to this message as well (20 kB). Your
feedback would be greatly appreciated.

-- 
_____________________________________________________
Michal Zalewski [[email protected]] [security]
[http://lcamtuf.coredump.cx&#093; <=-=> bash$ :(){ :|:&};:
=-=> Did you know that clones never use mirrors? <=-=

---373265275-291080756-991087816=:18807
Content-Type: TEXT/plain; name="signals.txt"
Content-Transfer-Encoding: BASE64
Content-ID: <[email protected]>
Content-Description: signal delivery paper
Content-Disposition: attachment; filename="signals.txt"

DQ0KICAgICAgICAgICAgICAgICAiRGVsaXZlcmluZyBTaWduYWxzIGZvciBG
dW4gYW5kIFByb2ZpdCINDQoNDQogICAgICAgICBVbmRlcnN0YW5kaW5nLCBl
eHBsb2l0aW5nIGFuZCBwcmV2ZW50aW5nIHNpZ25hbC1oYW5kbGluZyANDQog
ICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkIHZ1bG5lcmFiaWxpdGll
cy4NDQoNDQogICAgICAgICAgICAgICBNaWNoYWwgWmFsZXdza2kgPGxjYW10
dWZAcmF6b3IuYmluZHZpZXcuY29tPg0NCiAgICAgICAgICAgICAgICAgKEMp
IENvcHlyaWdodCAyMDAxIEJpbmRWaWV3IENvcnBvcmF0aW9uDQ0KDQ0KDQ0K
MCkgSW50cm9kdWN0aW9uDQ0KLS0tLS0tLS0tLS0tLS0tDQ0KDQ0KQWNjb3Jk
aW5nIHRvIGEgcG9wdWxhciBiZWxpZWYsIHdyaXRpbmcgc2lnbmFsIGhhbmRs
ZXJzIGhhcyBsaXR0bGUgb3Igbm90aGluZyANDQp0byBkbyB3aXRoIHNlY3Vy
ZSBwcm9ncmFtbWluZywgYXMgbG9uZyBhcyBoYW5kbGVyIGNvZGUgaXRzZWxm
IGxvb2tzIGdvb2QuIA0NCkF0IHRoZSBzYW1lIHRpbWUsIHRoZXJlIGhhdmUg
YmVlbiBkaXNjdXNzaW9ucyBvbiBmdW5jdGlvbnMgdGhhdCBzaGFsbCBiZSAN
DQppbnZva2VkIGZyb20gaGFuZGxlcnMsIGFuZCBmdW5jdGlvbnMgdGhhdCBz
aGFsbCBuZXZlciwgZXZlciBiZSB1c2VkIHRoZXJlLiANDQpNb3N0IFVuaXgg
c3lzdGVtcyBwcm92aWRlIGEgc3RhbmRhcml6ZWQgc2V0IG9mIHNpZ25hbC1z
YWZlIGxpYnJhcnkgY2FsbHMuDQ0KRmV3IHN5c3RlbXMgaGF2ZSBleHRlbnNp
dmUgZG9jdW1lbnRhdGlvbiBvZiBzaWduYWwtc2FmZSBjYWxscyAtIHRoYXQg
aW5jbHVkZXMNDQpPcGVuQlNELCBTb2xhcmlzLCBldGMuOg0NCg0NCiAgaHR0
cDovL3d3dy5vcGVuYnNkLm9yZy9jZ2ktYmluL21hbi5jZ2k/cXVlcnk9c2ln
YWN0aW9uOg0NCg0NCiAgIlRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBl
aXRoZXIgcmVlbnRyYW50IG9yIG5vdCBpbnRlcnJ1cHRpYmxlIGJ5IHNpZy0N
DQogIG5hbHMgYW5kIGFyZSBhc3luYy1zaWduYWwgc2FmZS4gIFRoZXJlZm9y
ZSBhcHBsaWNhdGlvbnMgbWF5IGludm9rZSB0aGVtLA0NCiAgd2l0aG91dCBy
ZXN0cmljdGlvbiwgZnJvbSBzaWduYWwtY2F0Y2hpbmcgZnVuY3Rpb25zOg0N
Cg0NCiAgICAgICAgX2V4aXQoMiksIGFjY2VzcygyKSwgYWxhcm0oMyksIGNm
Z2V0aXNwZWVkKDMpLCBjZmdldG9zcGVlZCgzKSwNDQogICAgICAgIGNmc2V0
aXNwZWVkKDMpLCBjZnNldG9zcGVlZCgzKSwgY2hkaXIoMiksIGNobW9kKDIp
LCBjaG93bigyKSwNDQogICAgICAgIGNsb3NlKDIpLCBjcmVhdCgyKSwgZHVw
KDIpLCBkdXAyKDIpLCBleGVjbGUoMiksIGV4ZWN2ZSgyKSwNDQogICAgICAg
IGZjbnRsKDIpLCBmb3JrKDIpLCBmcGF0aGNvbmYoMiksIGZzdGF0KDIpLCBm
c3luYygyKSwgZ2V0ZWdpZCgyKSwNDQogICAgICAgIGdldGV1aWQoMiksIGdl
dGdpZCgyKSwgZ2V0Z3JvdXBzKDIpLCBnZXRwZ3JwKDIpLCBnZXRwaWQoMiks
DQ0KICAgICAgICBnZXRwcGlkKDIpLCBnZXR1aWQoMiksIGtpbGwoMiksIGxp
bmsoMiksIGxzZWVrKDIpLCBta2RpcigyKSwNDQogICAgICAgIG1rZmlmbygy
KSwgb3BlbigyKSwgcGF0aGNvbmYoMiksIHBhdXNlKDIpLCBwaXBlKDIpLCBy
YWlzZSgzKSwNDQogICAgICAgIHJlYWQoMiksIHJlbmFtZSgyKSwgcm1kaXIo
MiksIHNldGdpZCgyKSwgc2V0cGdpZCgyKSwgc2V0c2lkKDIpLA0NCiAgICAg
ICAgc2V0dWlkKDIpLCBzaWdhY3Rpb24oMiksIHNpZ2FkZHNldCgzKSwgc2ln
ZGVsc2V0KDMpLA0NCiAgICAgICAgc2lnZW1wdHlzZXQoMyksIHNpZ2ZpbGxz
ZXQoMyksIHNpZ2lzbWVtYmVyKDMpLCBzaWduYWwoMyksDQ0KICAgICAgICBz
aWdwZW5kaW5nKDIpLCBzaWdwcm9jbWFzaygyKSwgc2lnc3VzcGVuZCgyKSwg
c2xlZXAoMyksIHN0YXQoMiksDQ0KICAgICAgICBzeXNjb25mKDMpLCB0Y2Ry
YWluKDMpLCB0Y2Zsb3coMyksIHRjZmx1c2goMyksIHRjZ2V0YXR0cigzKSwN
DQogICAgICAgIHRjZ2V0cGdycCgzKSwgdGNzZW5kYnJlYWsoMyksIHRjc2V0
YXR0cigzKSwgdGNzZXRwZ3JwKDMpLCB0aW1lKDMpLA0NCiAgICAgICAgdGlt
ZXMoMyksIHVtYXNrKDIpLCB1bmFtZSgzKSwgdW5saW5rKDIpLCB1dGltZSgz
KSwgd2FpdCgyKSwNDQogICAgICAgIHdhaXRwaWQoMiksIHdyaXRlKDIpLiBz
aWdwYXVzZSgzKSwgc2lnc2V0KDMpLg0NCg0NCiAgQWxsIGZ1bmN0aW9ucyBu
b3QgaW4gdGhlIGFib3ZlIGxpc3QgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5z
YWZlIHdpdGggcmUtDQ0KICBzcGVjdCB0byBzaWduYWxzLiAgVGhhdCBpcyB0
byBzYXksIHRoZSBiZWhhdmlvdXIgb2Ygc3VjaCBmdW5jdGlvbnMgd2hlbg0N
CiAgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlciBpcyB1bmRlZmluZWQu
ICBJbiBnZW5lcmFsIHRob3VnaCwgc2lnbmFsDQ0KICBoYW5kbGVycyBzaG91
bGQgZG8gbGl0dGxlIG1vcmUgdGhhbiBzZXQgYSBmbGFnOyBtb3N0IG90aGVy
IGFjdGlvbnMgYXJlDQ0KICBub3Qgc2FmZS4iDQ0KDQ0KSXQgaXMgc3VnZ2Vz
dGVkIHRvIHRha2Ugc3BlY2lhbCBjYXJlIHdoZW4gcGVyZm9ybWluZyBhbnkg
bm9uLWF0b21pYyANDQpvcGVyYXRpb25zIHdoaWxlIHNpZ25hbCBkZWxpdmVy
eSBpcyBub3QgYmxvY2tlZCwgYW5kL29yIG5vdCB0byByZWx5IG9uIA0NCmlu
dGVybmFsIHByb2dyYW0gc3RhdGUgaW4gc2lnbmFsIGhhbmRsZXIuIEdlbmVy
YWxseSwgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCANDQpkbyBub3QgbXVjaCBt
b3JlIHRoYW4gc2V0dGluZyBhIGZsYWcsIHdoZW5ldmVyIGl0IGlzIGFjY2Vw
dGFibGUuIA0NCg0NClVuZm9ydHVuYXRlbHksIHRoZXJlIHdlcmUgbm8ga25v
d24sIHByYWN0aWNhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvZiANDQpz
dWNoIGJhZCBjb2RpbmcgcHJhY3RpY2VzLiBBbmQgd2hpbGUgc2lnbmFsIGNh
biBiZSBkZWxpdmVyZWQgX2FueXdoZXJlXyANDQpkdXJpbmcgdGhlIHVzZXJz
cGFjZSBleGVjdXRpb24gb2YgZ2l2ZW4gcHJvZ3JhbSwgbW9zdCBvZiBwcm9n
cmFtbWVycyBuZXZlciANDQp0YWtlIGVub3VnaCBjYXJlIHRvIGF2b2lkIHBv
dGVudGlhbCBpbXBsaWNhdGlvbnMgY2F1c2VkIGJ5IHRoaXMgZmFjdC4gDQ0K
QXBwcm94aW1hdGVseSA4MCB0byA5MCUgb2Ygc2lnbmFsIGhhbmRsZXJzIHdl
IGhhdmUgZXhhbWluZWQgd2VyZSB3cml0dGVuIA0NCmluIGluc2VjdXJlIG1h
bm5lci4NDQoNDQpUaGlzIHBhcGVyIGlzIGFuIGF0dGVtcHQgdG8gZGVtb25z
dHJhdGUgYW5kIGFuYWx5emUgYWN0dWFsIHJpc2tzIGNhdXNlZCBieQ0NCnRo
aXMga2luZCBvZiBjb2RpbmcgcHJhY3RpY2VzLCBhbmQgdG8gZGlzY3VzcyB0
aHJlYXQgc2NlbmFyaW9zIHRoYXQgY2FuIGJlDQ0KdXNlZCBieSBhbiBhdHRh
Y2tlciBpbiBvcmRlciB0byBlc2NhbGF0ZSBsb2NhbCBwcml2aWxlZ2VzLCBv
ciwgc29tZXRpbWVzLA0NCmdhaW4gcmVtb3RlIGFjY2VzcyB0byBhIG1hY2hp
bmUuIFRoaXMgY2xhc3Mgb2YgdnVsbmVyYWJpbGl0aWVzIGFmZmVjdHMNDQpu
dW1lcm91cyBjb21wbGV4IHNldHVpZCBwcm9ncmFtcyAoU2VuZG1haWwsIHNj
cmVlbiwgcHBwZCwgZXRjLikgYW5kIA0NCnNldmVyYWwgbmV0d29yayBkYWVt
b25zIChmdHBkLCBodHRwZCBhbmQgc28gb24pLg0NCg0NClRoYW5rcyB0byBU
aGVvIGRlIFJhYWR0IGZvciBicmluZ2luZyB0aGlzIHByb2JsZW0gdG8gbXkg
YXR0ZW50aW9uOyANDQp0byBQcnplbXlzbGF3IEZyYXN1bmVrIGZvciByZW1v
dGUgYXR0YWNrIHBvc3NpYmlsaXRpZXMgZGlzY3Vzc2lvbjsgRHZvcmFrLCAN
DQpDaHJpcyBFdmFucyBhbmQgUGVra2EgU2F2b2xhIGZvciBvdXRzdGFuZGlu
ZyBjb250cmlidXRpb24gdG8gaGVhcCBjb3JydXB0aW9uIA0NCmF0dGFja3Mg
ZmllbGQ7IEdyZWdvcnkgTmVpbCBTaGFwaXJvIGFuZCBTb2xhciBEZXNpZ25l
ciBmb3IgdGhlaXIgY29tbWVudHMgDQ0Kb24gdGhlIGlzc3VlcyBkaXNjdXNz
ZWQgYmVsb3cuIEFkZGl0aW9uYWwgdGhhbmtzIHRvIE1hcmsgTG92ZWxlc3Ms
DQ0KRGF2ZSBNYW5uLCBNYXR0IFBvd2VyIGFuZCBvdGhlciBSQVpPUiB0ZWFt
IG1lbWJlcnMgZm9yIHRoZWlyIHN1cHBvcnQgYW5kDQ0KcmV2aWV3cy4NDQoN
DQoNDQoxKSBJbXBhY3Q6IGhhbmRsZXIgcmUtZW50cnkgKFNlbmRtYWlsIGNh
c2UpDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQ0NCg0NCkJlZm9yZSB3ZSBkaXNjdXNzIG1vcmUgZ2VuZXJhbGl6ZWQg
YXR0YWNrIHNjZW5hcmlvcywgSSB3b3VsZCBsaWtlIHRvIGV4cGxhaW4gDQ0K
c2lnbmFsIGhhbmRsZXIgcmFjZXMgc3RhcnRpbmcgd2l0aCB2ZXJ5IHNpbXBs
ZSBhbmQgY2xlYW4gZXhhbXBsZS4gV2Ugd291bGQNDQp0cnkgdG8gZXhwbG9p
dCBub24tYXRvbWljIHNpZ25hbCBoYW5kbGVyLiBUaGUgZm9sbG93aW5nIGNv
ZGUgZ2VuZXJhbGl6ZXMsIGluIA0NCnNpbXBsaWZpZWQgd2F5LCB2ZXJ5IGNv
bW1vbiBiYWQgY29kaW5nIHByYWN0aWNlICh3aGljaCBpcyBwcmVzZW50LCBm
b3IgDQ0KZXhhbXBsZSwgaW4gc2V0dWlkIHJvb3QgU2VuZG1haWwgcHJvZ3Jh
bSB1cCB0byA4LjExLjMgYW5kIDguMTIuMC5CZXRhNyk6DQ0KDQ0KLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0NCiAqIFRoaXMgaXMgYSBnZW5lcmljIHZlcmJvc2Ugc2lnbmFs
IGhhbmRsZXIgLSBkb2VzIHNvbWUgICoNDQogKiBsb2dnaW5nIGFuZCBjbGVh
bnVwLCBwcm9iYWJseSBjYWxsaW5nIG90aGVyIHJvdXRpbmVzLiAqDQ0KICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NDQoNDQp2b2lkIHNpZ2huZGxyKGludCBkdW1teSkgew0N
CiAgc3lzbG9nKExPR19OT1RJQ0UsdXNlcl9kZXBlbmRlbnRfZGF0YSk7DQ0K
ICAvLyAqKiogSW5pdGlhbCBjbGVhbnVwIGNvZGUsIGNhbGxpbmcgdGhlIGZv
bGxvd2luZyBzb21ld2hlcmU6DQ0KICBmcmVlKGdsb2JhbF9wdHIyKTsNDQog
IGZyZWUoZ2xvYmFsX3B0cjEpOw0NCiAgLy8gKioqIDEgKioqID4+IEFkZGl0
aW9uYWwgY2xlYW4tdXAgY29kZSAtIHVubGluayB0bXAgZmlsZXMsIGV0YyA8
PA0NCiAgZXhpdCgwKTsNDQp9DQ0KDQ0KICAvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNDQogICAqIFRoaXMg
aXMgYSBzaWduYWwgaGFuZGxlciBkZWNsYXJhdGlvbiBzb21ld2hlcmUgKg0N
CiAgICogYXQgdGhlIGJlZ2lubmluZyBvZiBtYWluIGNvZGUuICAgICAgICAg
ICAgICAgICAqDQ0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovDQ0KDQ0KICBzaWduYWwoU0lHSFVQLHNp
Z2huZGxyKTsNDQogIHNpZ25hbChTSUdURVJNLHNpZ2huZGxyKTsNDQoNDQog
IC8vICoqKiBPdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGds
b2JhbCBwb2ludGVyDQ0KICAvLyAqKiogYXNzaWdubWVudCBzb21ld2hlcmUg
aW4gdGhlIGNvZGUgKHdlIGFzc3VtZSB0aGF0DQ0KICAvLyAqKiogbm5uIGlz
IHBhcnRpYWxseSB1c2VyLWRlcGVuZGVudCwgeXl5IGRvZXMgbm90IGhhdmUg
dG8gYmUpOg0NCg0NCiAgZ2xvYmFsX3B0cjE9bWFsbG9jKG5ubik7IA0NCiAg
Z2xvYmFsX3B0cjI9bWFsbG9jKHl5eSk7DQ0KDQ0KICAvLyAqKiogMiAqKiog
Pj4gZnVydGhlciBwcm9jZXNzaW5nLCBhbGxvY2F0ZWQgbWVtb3J5IDw8DQ0K
ICAvLyAqKiogMiAqKiogPj4gaXMgZmlsbGVkIHdpdGggYW55IGRhdGEsIGV0
Yy4uLiAgICAgPDwNDQoNDQoNDQpUaGlzIGNvZGUgc2VlbXMgdG8gYmUgcHJl
dHR5IGltbXVuZSB0byBhbnkga2luZCBvZiBzZWN1cml0eSBjb21wcm9taXNl
cy4gQnV0IA0NCnRoaXMgaXMganVzdCBhbiBpbGx1c2lvbi4gQnkgZGVsaXZl
cmluZyBvbmUgb2YgdGhlIHNpZ25hbHMgaGFuZGxlZCBieSANDQpzaWdobmRs
cigpIGZ1bmN0aW9uIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIG1haW4g
Y29kZSBleGVjdXRpb24gKG1hcmtlZCANDQphcyAnKioqIDIgKioqJyBpbiBh
Ym92ZSBleGFtcGxlKSBjb2RlIGV4ZWN1dGlvbiB3b3VsZCByZWFjaCBoYW5k
bGVyIGZ1bmN0aW9uLiANDQpMZXQncyBhc3N1bWUgd2UgZGVsaXZlcmVkIFNJ
R0hVUC4gU3lzbG9nIG1lc3NhZ2UgaXMgd3JpdHRlbiwgdHdvIHBvaW50ZXJz
IGFyZSANDQpmcmVlZCwgYW5kIHNvbWUgbW9yZSBjbGVhbi11cCBpcyBkb25l
IGJlZm9yZSBleGl0aW5nICgqKiogMSAqKiopLg0NCg0NCk5vdywgYnkgcXVp
Y2tseSBkZWxpdmVyaW5nIGFub3RoZXIgc2lnbmFsIC0gU0lHVEVSTSAobm90
ZSB0aGF0IGFscmVhZHkgDQ0KZGVsaXZlcmVkIHNpZ25hbCBpcyBtYXNrZWQg
YW5kIHdvdWxkIGJlIG5vdCBkZWxpdmVyZWQsIHNvIHlvdSBjYW5ub3QgDQ0K
ZGVsaXZlciBTSUdIVVAsIGJ1dCB0aGVyZSBpcyBhYnNvbHV0ZWx5IG5vdGhp
bmcgYWdhaW5zdCBkZWxpdmVyaW5nIFNJR1RFUk0pIC0gDQ0KYXR0YWNrZXIg
bWlnaHQgY2F1c2Ugc2lnaG5kbHIoKSBmdW5jdGlvbiByZS1lbnRyeS4gVGhp
cyBpcyBhIHZlcnkgY29tbW9uDQ0KY29uZGl0aW9uIC0gJ3NoYXJlZCcgaGFu
ZGxlcnMgYXJlIGRlY2xhcmVkIGZvciBTSUdRVUlULCBTSUdURVJNLCBTSUdJ
TlQsDQ0KYW5kIHNvIG9uLg0NCg0NCk5vdywgZm9yIHRoZSBwdXJwb3NlIG9m
IHRoaXMgZGVtb25zdHJhdGlvbiwgd2Ugd291bGQgbGlrZSB0byB0YXJnZXQg
aGVhcA0NCnN0cnVjdHVyZXMgYnkgZXhwbG9pdGluZyBmcmVlKCkgYW5kIHN5
c2xvZygpIGJlaGF2aW9yLiBJdCBpcyB2ZXJ5IGltcG9ydGFudCANDQp0byB1
bmRlcnN0YW5kIGhvdyBbdl1zeXNsb2coKSBpbXBsZW1lbnRhdGlvbiB3b3Jr
cy4gV2Ugd291bGQgZm9jdXMgb24gTGludXggDQ0KZ2xpYmMgY29kZSAtIHRo
aXMgZnVuY3Rpb24gY3JlYXRlcyBhIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBs
b2dnZWQgbWVzc2FnZSBpbiANDQpzby1jYWxsZWQgbWVtb3J5LWJ1ZmZlciBz
dHJlYW0sIHdoaWNoIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB1c2luZyB0
d28gDQ0KbWFsbG9jKCkgY2FsbHMgLSB0aGUgZmlyc3Qgb25lIGFsbG9jYXRl
cyBnZW5lcmFsIHN0cmVhbSBkZXNjcmlwdGlvbiANDQpzdHJ1Y3R1cmUsIGFu
ZCB0aGUgb3RoZXIgb25lIGNyZWF0ZXMgYWN0dWFsIGJ1ZmZlciwgd2hpY2gg
d291bGQgY29udGFpbiANDQpsb2dnZWQgbWVzc2FnZS4NDQoNDQpQbGVhc2Ug
cmVmZXIgdGhlIGZvbGxvd2luZyBVUkwgZm9yIHZzeXNsb2coKSBmdW5jdGlv
biBzb3VyY2VzOg0NCg0NCiAgaHR0cDovL3NyYy5vcGVucmVzb3VyY2VzLmNv
bS9kZWJpYW4vc3JjL2xpYnMvSFRNTC9TL2dsaWJjXzIuMC43dC5vcmlnJTIw
Z2xpYmMtMi4wLjd0Lm9yaWclMjBtaXNjJTIwc3lzbG9nLmMuaHRtbCMxMDEN
DQoNDQpTdHJlYW0gbWFuYWdlbWVudCBmdW5jdGlvbnMgKG9wZW5fbWVtc3Ry
ZWFtLCBldGMuKSBjYW4gYmUgZm91bmQgYXQ6DQ0KDQ0KICBodHRwOi8vc3Jj
Lm9wZW5yZXNvdXJjZXMuY29tL2RlYmlhbi9zcmMvbGlicy9IVE1ML1MvZ2xp
YmNfMi4wLjd0Lm9yaWclMjBnbGliYy0yLjAuN3Qub3JpZyUyMGxpYmlvJTIw
bWVtc3RyZWFtLmMuaHRtbCM2Mw0NCg0NCkluIG9yZGVyIGZvciB0aGlzIHBh
cnRpY3VsYXIgYXR0YWNrIHRvIGJlIHN1Y2Nlc3NmdWwsIHR3byBjb25kaXRp
b25zIGhhdmUgDQ0KdG8gYmUgbWV0Og0NCg0NCiAgKiBzeXNsb2coKSBkYXRh
IG11c3QgYmUgdXNlci1kZXBlbmRlbnQgKGxpa2UgaW4gU2VuZG1haWwgbG9n
IG1lc3NhZ2VzDQ0KICAgIGRlc2NyaWJpbmcgdHJhbnNmZXJyZWQgbWFpbCB0
cmFmZmljKSwNDQoNDQogICogc2Vjb25kIG9mIHRoZXNlIHR3byBnbG9iYWwg
bWVtb3J5IGJsb2NrcyBtdXN0IGJlIGFsaWduZWQgdGhlIHdheSANDQogICAg
dGhhdCB3b3VsZCBiZSByZS11c2VkIGluIHNlY29uZCBvcGVuX21lbXN0cmVh
bSgpIG1hbGxvYygpIGNhbGwuIA0NCg0NClRoZSBzZWNvbmQgYnVmZmVyIChn
bG9iYWxfcHRyMikgd291bGQgYmUgZnJlZSgpZCBkdXJpbmcgdGhlIGZpcnN0
IA0NCnNpZ2huZGxyKCkgY2FsbCwgc28gaWYgdGhlc2UgY29uZGl0aW9ucyBh
cmUgbWV0LCB0aGUgc2Vjb25kIHN5c2xvZygpIA0NCmNhbGwgd291bGQgcmUt
dXNlIHRoaXMgbWVtb3J5IGFuZCBvdmVyd3JpdGUgdGhpcyBhcmVhLCBpbmNs
dWRpbmcNDQpoZWFwLW1hbmFnZW1lbnQgc3RydWN0dXJlcywgd2l0aCB1c2Vy
LWRlcGVuZGVudCBzeXNsb2coKSBidWZmZXIuDQ0KDQ0KT2YgY291cnNlLCB0
aGlzIHNpdHVhdGlvbiBpcyBub3QgbGltaXRlZCB0byB0d28gZ2xvYmFsIGJ1
ZmZlcnMgLSBnZW5lcmFsbHksDQ0Kd2UgbmVlZCBvbmUgb3V0IG9mIGFueSBu
dW1iZXIgb2YgZnJlZSgpZCBidWZmZXJzIHRvIGJlIGFsaWduZWQgdGhhdCB3
YXkuDQ0KQWRkaXRpb25hbCBwb3NzaWJpbGl0aWVzIGFyZSByZWxhdGVkIHRv
IGludGVycnVwdGluZyBmcmVlKCkgY2hhaW4gYnkgcHJlY2lzZSANDQpTSUdU
RVJNIGRlbGl2ZXJ5IGFuZC9vciBpbmZsdWVuY2luZyBidWZmZXIgc2l6ZXMg
LyBoZWFwIGRhdGEgb3JkZXIgYnkgDQ0KdXNpbmcgZGlmZmVyZW50IGlucHV0
IGRhdGEgcGF0dGVybnMuDQ0KDQ0KSWYgc28sIHRoZSBhdHRhY2tlciBjYW4g
Y2F1c2Ugc2Vjb25kIGZyZWUoKSBwYXNzIHRvIGJlIGNhbGxlZCB3aXRoIGEg
cG9pbnRlciANDQp0byB1c2VyLWRlcGVuZGVudCBkYXRhIChzeXNsb2cgYnVm
ZmVyKSwgdGhpcyBsZWFkcyB0byBpbnN0YW50IHJvb3QgY29tcHJvbWlzZQ0N
Ci0gc2VlIGV4Y2VsbGVudCBhcnRpY2xlIGJ5IENocmlzIEV2YW5zIChiYXNl
ZCBvbiBvYnNlcnZhdGlvbnMgYnkgUGVra2EgU2F2b2xhKToNDQoNDQogIGh0
dHA6Ly9sd24ubmV0LzIwMDAvMTAxMi9hL3RyYWNlcm91dGUucGhwMw0NCg0N
ClByYWN0aWNhbCBkaXNjdXNzaW9uIGFuZCBleHBsb2l0IGNvZGUgZm9yIHRo
ZSB2dWxuZXJhYmlsaXR5IGRpc2N1c3NlZCBpbg0NCmFib3ZlIGFydGljbGUg
Y2FuIGJlIGZvdW5kIHRoZXJlOg0NCg0NCiAgaHR0cDovL3NlY3VyaXR5LWFy
Y2hpdmUubWVydG9uLm94LmFjLnVrL2J1Z3RyYXEtMjAwMDEwLzAwODQuaHRt
bA0NCg0NCkJlbG93IGlzIGEgc2FtcGxlICd2dWxuZXJhYmxlIHByb2dyYW0n
IGNvZGU6DQ0KDQ0KLS0tIHZ1bG4uYyAtLS0NDQojaW5jbHVkZSA8c2lnbmFs
Lmg+DQ0KI2luY2x1ZGUgPHN5c2xvZy5oPg0NCiNpbmNsdWRlIDxzdHJpbmcu
aD4NDQojaW5jbHVkZSA8c3RkbGliLmg+DQ0KDQ0Kdm9pZCAqZ2xvYmFsMSwg
Kmdsb2JhbDI7DQ0KY2hhciAqd2hhdDsNDQoNDQp2b2lkIHNoKGludCBkdW1t
eSkgew0NCiAgc3lzbG9nKExPR19OT1RJQ0UsIiVzXG4iLHdoYXQpOw0NCiAg
ZnJlZShnbG9iYWwyKTsNDQogIGZyZWUoZ2xvYmFsMSk7DQ0KICBzbGVlcCgx
MCk7DQ0KICBleGl0KDApOw0NCn0NDQoNDQppbnQgbWFpbihpbnQgYXJnYyxj
aGFyKiBhcmd2W10pIHsNDQogIHdoYXQ9YXJndlsxXTsNDQogIGdsb2JhbDE9
c3RyZHVwKGFyZ3ZbMl0pOw0NCiAgZ2xvYmFsMj1tYWxsb2MoMzQwKTsNDQog
IHNpZ25hbChTSUdIVVAsc2gpOw0NCiAgc2lnbmFsKFNJR1RFUk0sc2gpOw0N
CiAgc2xlZXAoMTApOw0NCiAgZXhpdCgwKTsNDQp9DQ0KLS0tLSBFT0YgLS0t
LQ0NCg0NCllvdSBjYW4gZXhwbG9pdCBpdCwgZm9yY2luZyBmcmVlKCkgdG8g
YmUgY2FsbGVkIG9uIGEgbWVtb3J5IHJlZ2lvbiBmaWxsZWQNDQp3aXRoIDB4
NDE0MTQxNDEgKHlvdSBjYW4gc2VlIHRoaXMgdmFsdWUgaW4gdGhlIHJlZ2lz
dGVycyBhdCB0aGUgdGltZQ0NCm9mIGNyYXNoIC0tIHRoZSBieXRlcyByZXBy
ZXNlbnRlZCBhcyA0MSBpbiBoZXggYXJlIHNldCBieSB0aGUgJ0EnDQ0KaW5w
dXQgY2hhcmFjdGVycyBpbiB0aGUgdmFyaWFibGUgJExPRyBiZWxvdykuIFNh
bXBsZSBjb21tYW5kIGxpbmVzDQ0KZm9yIGEgQmFzaCBzaGVsbCBhcmU6DQ0K
DQ0KJCBnY2MgdnVsbi5jIC1vIHZ1bG4NDQokIFBBRD1gcGVybCAtZSAne3By
aW50ICJ4Ing0MTB9J2ANDQokIExPRz1gcGVybCAtZSAne3ByaW50ICJBIngx
MDB9J2ANDQokIC4vdnVsbiAkTE9HICRQQUQgJiBzbGVlcCAxOyBraWxsYWxs
IC1IVVAgdnVsbjsgc2xlZXAgMTsga2lsbGFsbCAtVEVSTSB2dWxuDQ0KDQ0K
VGhlIHJlc3VsdCBzaG91bGQgYmUgYSBzZWdtZW50YXRpb24gZmF1bHQgZm9s
bG93ZWQgYnkgbmljZSBjb3JlIGR1bXANDQooZm9yIExpbnV4IGdsaWJjIDIu
MS45eCBhbmQgMi4wLjcpLg0NCg0NCihnZGIpIGJhY2sNDQojMCAgY2h1bmtf
ZnJlZSAoYXJfcHRyPTB4NDAxM2RjZTAsIHA9MHg4MDQ5OWEwKSBhdCBtYWxs
b2MuYzozMDY5DQ0KIzEgIDB4NDAwOWIzMzQgaW4gX19saWJjX2ZyZWUgKG1l
bT0weDgwNDk5YTgpIGF0IG1hbGxvYy5jOjMwNDMNDQojMiAgMHg4MDQ4NWI4
IGluIHNoICgpDQ0KIzQgIDB4NDAwZDU5NzEgaW4gX19saWJjX25hbm9zbGVl
cCAoKSBmcm9tIC9saWIvbGliYy5zby42DQ0KIzUgIDB4NDAwZDU4MDEgaW4g
X19zbGVlcCAoc2Vjb25kcz0xMCkgYXQgLi4vc3lzZGVwcy91bml4L3N5c3Yv
bGludXgvc2xlZXAuYzo4NQ0NCiM2ICAweDgwNDg1ZDYgaW4gc2ggKCkNDQoN
DQpTbywgYXMgeW91IGNhbiBzZWUsIGZhaWx1cmUgd2FzIGNhdXNlZCB3aGVu
IHNpZ25hbCBoYW5kbGVyIHdhcyByZS1lbnRlcmVkLg0NCl9fbGliZl9mcmVl
IGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhIHBhcmFtZXRlciBvZiAweDA4
MDQ5OWE4LCB3aGljaCBwb2ludHMNDQpzb21ld2hlcmUgaW4gdGhlIG1pZGRs
ZSBvZiBvdXIgQUFBczoNDQoNDQooZ2RiKSB4L3MgMHg4MDQ5OWE4DQ0KMHg4
MDQ5OWE4OiAgICAgICAnQScgPHJlcGVhdHMgOTQgdGltZXM+LCAiXG4iDQ0K
DQ0KWW91IGNhbiBmaW5kIDB4NDE0MTQxNDEgaW4gdGhlIHJlZ2lzdGVycywg
YXMgd2VsbCwgc2hvd2luZyB0aGlzIGRhdGENDQppcyBiZWluZyBwcm9jZXNz
ZWQuIEZvciBtb3JlIGFuYWx5c2lzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIHBh
cGVyIG1lbnRpb25lZA0NCmFib3ZlLg0NCg0NCkZvciB0aGUgZGVzY3JpcHRp
b24sIGltcGFjdCBhbmQgZml4IGluZm9ybWF0aW9uIG9uIFNlbmRtYWlsIHNp
Z25hbA0NCmhhbmRsaW5nIHZ1bG5lcmFiaWxpdHksIHBsZWFzZSByZWZlciB0
byB0aGUgUkFaT1IgYWR2aXNvcnkgYXQ6DQ0KDQ0KaHR0cDovL3Jhem9yLmJp
bmR2aWV3LmNvbS9wdWJsaXNoL2Fkdmlzb3JpZXMvYWR2X3NtODEyMC5odG1s
DQ0KDQ0KT2J2aW91c2x5LCB0aGF0IGlzIGp1c3QgYW4gZXhhbXBsZSBvZiB0
aGlzIGF0dGFjay4gV2hlbmV2ZXIgc2lnbmFsIGhhbmRsZXINDQpleGVjdXRp
b24gaXMgbm9uLWF0b21pYywgYXR0YWNrcyBvZiB0aGlzIGtpbmQgYXJlIHBv
c3NpYmxlIGJ5IHJlLWVudGVyaW5nDQ0KdGhlIGhhbmRsZXIgd2hlbiBpdCBp
cyBpbiB0aGUgbWlkZGxlIG9mIHBlcmZvcm1pbmcgbm9uLXJlZW50cmFudCBv
cGVyYXRpb25zLiANDQpIZWFwIGRhbWFnZSBpcyB0aGUgbW9zdCBvYnZpb3Vz
IHZlY3RvciBvZiBhdHRhY2ssIGluIHRoaXMgY2FzZSwgYnV0IG5vdCB0aGUg
DQ0Kb25seSBvbmUuDQ0KDQ0KDQ0KMikgSW1wYWN0OiBzaWduYWwgaW4gdGhl
IG1pZGRsZSAoc2NyZWVuIGNhc2UpDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KDQ0KVGhlIGF0dGFjayBkZXNj
cmliZWQgYWJvdmUgdXN1YWxseSByZXF1aXJlcyBzcGVjaWZpYyBjb25kaXRp
b25zDQ0KdG8gYmUgbWV0LCBhbmQgdGFrZXMgYWR2YW50YWdlIG9mIG5vbi1h
dG9taWMgc2lnbmFsIGhhbmRsZXIgZXhlY3V0aW9uLA0NCndoaWNoIGNhbiBi
ZSBlYXNpbHkgYXZvaWRlZCBieSB1c2luZyBhZGRpdGlvbmFsIGZsYWdzIG9y
IGJsb2NraW5nDQ0Kc2lnbmFsIGRlbGl2ZXJ5Lg0NCg0NCkJ1dCwgYXMgc2ln
bmFsIGNhbiBiZSBkZWxpdmVyZWQgYXQgYW55IG1vbWVudCAodW5sZXNzIGV4
cGxpY3RseSBibG9ja2VkKSwNDQp0aGlzIGlzIG9idmlvdXMgdGhhdCBpdCBp
cyBwb3NzaWJsZSB0byBwZXJmb3JtIGFuIGF0dGFjayB3aXRob3V0IHJlLWVu
dGVyaW5nDQ0KdGhlIGhhbmRsZXIgaXRzZWxmLiBJdCBpcyBlbm91Z2ggdG8g
ZGVsaXZlciBhIHNpZ25hbCBpbiBhICdub3QgYXBwcm9wcmlhdGUnDQ0KbW9t
ZW50LiBUaGVyZSBhcmUgdHdvIGF0dGFjayBzY2hlbWVzOg0NCg0NCkEpIHJl
LWVudGVyaW5nIGxpYmMgZnVuY3Rpb25zOg0NCg0NCiAgRXZlcnkgZnVuY3Rp
b24gdGhhdCBpcyBub3QgbGlzdGVkIGFzIHJlZW50cnktc2FmZSBpcyBhIHBv
dGVudGlhbCBzb3VyY2UgDQ0KICBvZiB2dWxuZXJhYmlsaXRpZXMuIEluZGVl
ZCwgbnVtZXJvdXMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIG9wZXJhdGluZyAN
DQogIG9uIGdsb2JhbCB2YXJpYWJsZXMsIGFuZC9vciBtb2RpZnkgZ2xvYmFs
IHN0YXRlIGluIG5vbi1hdG9taWMgd2F5Lg0NCiAgT25jZSBhZ2FpbiwgaGVh
cC1tYW5hZ2VtZW50IHJvdXRpbmVzIGFyZSBwcm9iYWJseSB0aGUgYmVzdCBl
eGFtcGxlLg0NCiAgQnkgZGVsaXZlcmluZyBhIHNpZ25hbCB3aGVuIG1hbGxv
YygpLCBmcmVlKCkgb3IgYW55IG90aGVyIGxpYmNhbGwgb2YNDQogIHRoaXMg
a2luZCBpcyBiZWluZyBjYWxsZWQsIGFsbCBzdWJzZXF1ZW50IGNhbGxzIHRv
IHRoZSBoZWFwIG1hbmFnZW1lbnQNDQogIHJvdXRpbmVzIG1hZGUgZnJvbSBz
aWduYWwgaGFuZGxlciB3b3VsZCBoYXZlIHVucHJlZGljdGFibGUgZWZmZWN0
LA0NCiAgYXMgaGVhcCBzdGF0ZSBpcyBjb21wbGV0ZWx5IHVucHJlZGljdGFi
bGUgZm9yIHRoZSBwcm9ncmFtbWVyLg0NCg0NCiAgT3RoZXIgZ29vZCBleGFt
cGxlcyBhcmUgZnVuY3Rpb25zIHdvcmtpbmcgb24gc3RhdGljL2dsb2JhbCB2
YXJpYWJsZXMNDQogIGFuZCBidWZmZXJzIGxpa2UgY2VydGFpbiBpbXBsZW1l
bnRhdGlvbnMgb2Ygc3RydG9rKCksIGluZXRfbnRvYSgpLA0NCiAgZ2V0aG9z
dGJ5bmFtZSgpIGFuZCBzbyBvbi4gSW4gYWxsIGNhc2VzLCByZXN1bHRzIHdp
bGwgYmUgdW5wcmVkaWN0YWJsZS4NDQoNDQpCKSBpbnRlcnJ1cHRpbmcgbm9u
LWF0b21pYyBtb2RpZmljYXRpb25zOg0NCg0NCiAgVGhpcyBpcyBiYXNpY2Fs
bHkgdGhlIHNhbWUgcHJvYmxlbSwgYnV0IG91dHNpZGUgbGlicmFyeSBmdW5j
dGlvbnMuDQ0KICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlOg0N
Cg0NCiAgICAgZHJvcHBlZF9wcml2aWxlZ2VzID0gMTsNDQogICAgIHNldHVp
ZChnZXR1aWQoKSk7DQ0KDQ0KICBpcywgdGVjaG5pY2FsbHkgc3BlYWtpbmcs
IHVzaW5nIHNhZmUgbGlicmFyeSBmdW5jdGlvbnMgb25seS4gQnV0LA0NCiAg
YXQgdGhlIHNhbWUgdGltZSwgaXQgaXMgcG9zc2libGUgdG8gaW50ZXJydXB0
IGV4ZWN1dGlvbiBiZXR3ZWVuDQ0KICBzdWJzdGl0dXRpb24gYW5kIHNldHVp
ZCgpIGNhbGwsIGNhdXNpbmcgc2lnbmFsIGhhbmRsZXIgdG8gYmUgZXhlY3V0
ZWQNDQogIHdpdGggZHJvcHBlZF9wcml2aWxlZ2VzIGZsYWcgc2V0LCBidXQg
c3VwZXJ1c2VyIHByaXZpbGVnZXMgbm90IGRyb3BwZWQuDQ0KDQ0KICBUaGlz
LCB2ZXJ5IG9mdGVuLCBtaWdodCBiZSBhIHNvdXJjZSBvZiBzZXJpb3VzIHBy
b2JsZW1zLg0NCg0NCkZpcnN0IG9mIGFsbCwgd2Ugd291bGQgbGlrZSB0byBj
b21lIGJhY2sgdG8gU2VuZG1haWwgZXhhbXBsZSwgdG8NDQpkZW1vbnN0cmF0
ZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIHJlLWVudGVyaW5nIGxpYmMu
IE5vdGUgdGhhdCBzaWduYWwNDQpoYW5kbGVyIGlzIE5PVCByZS1lbnRlcmVk
IC0gc2lnbmFsIGlzIGRlbGl2ZXJlZCBvbmx5IG9uY2U6DQ0KDQ0KIzAgIDB4
NDAxNzA1YmMgaW4gY2h1bmtfZnJlZSAoYXJfcHRyPTB4NDAyMTJjZTAsIHA9
MHg4MTBmOTAwKSBhdCBtYWxsb2MuYzozMTE3ICAjMSAgMHg0MDE2ZmQxMiBp
biBjaHVua19hbGxvYyAoYXJfcHRyPTB4NDAyMTJjZTAsIG5iPTgyMDApIGF0
IG1hbGxvYy5jOjI2MDENDQojMiAgMHg0MDE2ZjdlNiBpbiBfX2xpYmNfbWFs
bG9jIChieXRlcz04MTkyKSBhdCBtYWxsb2MuYzoyNzAzDQ0KIzMgIDB4NDAx
NjhhMjcgaW4gb3Blbl9tZW1zdHJlYW0gKGJ1ZmxvYz0weGJmZmY5N2JjLCBz
aXplbG9jPTB4YmZmZjk3YzApIGF0IG1lbXN0cmVhbS5jOjExMg0NCiM0ICAw
eDQwMWNmNGZhIGluIHZzeXNsb2cgKHByaT02LCBmbXQ9MHg4MGE1ZTAzICIl
czogJXMiLCBhcD0weGJmZmY5OWFjKSBhdCBzeXNsb2cuYzoxNDINDQojNSAg
MHg0MDFjZjQ0NyBpbiBzeXNsb2cgKHByaT02LCBmbXQ9MHg4MGE1ZTAzICIl
czogJXMiKSBhdCBzeXNsb2cuYzoxMDINDQojNiAgMHg4MDU1ZjY0IGluIHNt
X3N5c2xvZyAoKQ0NCiM3ICAweDgwNjc5M2MgaW4gbG9nc2VuZGVyICgpDQ0K
IzggIDB4ODA2MzkwMiBpbiBkcm9wZW52ZWxvcGUgKCkNDQojOSAgMHg4MDRl
NzE3IGluIGZpbmlzICgpDQ0KIzEwIDB4ODA0ZTlkOCBpbiBpbnRzaWcgKCkg
ICAgICAgICAgICAgICAgIDwtLS0tICoqIFNJR0lOVCAqKg0NCiMxMSA8c2ln
bmFsIGhhbmRsZXIgY2FsbGVkPg0NCiMxMiBjaHVua19hbGxvYyAoYXJfcHRy
PTB4NDAyMTJjZTAsIG5iPTQxMDQpIGF0IG1hbGxvYy5jOjI5NjgNDQojMTMg
MHg0MDE2ZjdlNiBpbiBfX2xpYmNfbWFsbG9jIChieXRlcz00MDk3KSBhdCBt
YWxsb2MuYzoyNzAzDQ0KDQ0KSGVhcCBjb3JydXB0aW9uIGlzIGNhdXNlZCBi
eSBpbnRlcnJ1cGVkIG1hbGxvYygpIGNhbGwgYW5kLCBsYXRlciwgYnkNDQpj
YWxsaW5nIG1hbGxvYygpIG9uY2UgYWdhaW4gZnJvbSB2c3lzbG9nKCkgZnVu
Y3Rpb24gaW52b2tlZCBmcm9tIGhhbmRsZXIuDQ0KDQ0KVGhlcmUgYXJlIHR3
byBhbm90aGVyIGV4YW1wbGVzIG9mIHZlcnkgaW50ZXJlc3Rpbmcgc3RhY2sg
Y29ycnVwdGlvbiBjYXVzZWQgYnkgDQ0KcmUtZW50ZXJpbmcgaGVhcCBtYW5h
Z2VtZW50IHJvdXRpbmVzIGluIFNlbmRtYWlsIGRhZW1vbiAtIGluIGJvdGgg
Y2FzZXMsDQ0Kc2lnbmFsIHdhcyBkZWxpdmVyZWQgb25seSBvbmNlOg0NCg0N
CkEpDQ0KDQ0KICAjMCAgMHg0MDE3MDViYyBpbiBjaHVua19mcmVlIChhcl9w
dHI9MHhkYmRiZGJkYiwgcD0weDgxMGI4ZTgpIGF0IG1hbGxvYy5jOjMxMTcN
DQogICMxICAweGRiZGJkYmRiIGluID8/ICgpDQ0KDQ0KQikgDQ0KDQ0KICAv
Li4uLw0NCiAgIzkgIDB4NzlmNjg1MTAgaW4gPz8gKCkNDQogIENhbm5vdCBh
Y2Nlc3MgbWVtb3J5IGF0IGFkZHJlc3MgMHhjNDgzYzY4OQ0NCg0NCldlJ2Qg
bGlrZSB0byBsZWF2ZSB0aGlzIG9uZSBhcyBhbiBleGVyY2lzZSBmb3IgYSBy
ZWFkZXIgLSB0cnkgdG8gZmlndXJlDQ0Kb3V0IHdoeSB0aGlzIGhhcHBlbnMg
YW5kIHdoeSB0aGlzIHByb2JsZW0gY2FuIGJlIGV4cGxvaXRhYmxlLiBGb3Ig
bm93LA0NCndlIHdvdWxkIGxpa2UgdG8gY29tZSBiYWNrIHRvIG91ciBzZWNv
bmQgc2NlbmFyaW8sIGludGVycnVwdGluZyBub24tYXRvbWljDQ0KY29kZSB0
byBzaG93IHRoYXQgdGFyZ2V0aW5nIGhlYXAgaXMgbm90IHRoZSBvbmx5IHBv
c3NpYmlsaXR5LiANDQoNDQpTb21lIHByb2dyYW1zIGFyZSB0ZW1wb3Jhcmls
eSByZXR1cm5pbmcgdG8gc3VwZXJ1c2VyIFVJRCBpbiBjbGVhbnVwDQ0Kcm91
dGluZXMsIGUuZy4sIGluIG9yZGVyIHRvIHVubGluayBzcGVjaWZpYyBmaWxl
cy4gVmVyeSBvZnRlbiwgYnkgZW50ZXJpbmcNDQp0aGUgaGFuZGxlciBhdCBn
aXZlbiBtb21lbnQsIGlzIHBvc3NpYmxlIHRvIHBlcmZvcm0gYWxsIHRoZSBj
bGVhbnVwIGZpbGUgDQ0KYWNjZXNzICBvcGVyYXRpb25zIHdpdGggc3VwZXJ1
c2VyIHByaXZpbGVnZXMuDQ0KDQ0KSGVyZSdzIGFuIGV4YW1wbGUgb2Ygc3Vj
aCBjb2RpbmcsIHRoYXQgY2FuIGJlIGZvdW5kIG1haW5seSBpbg0NCmludGVy
YWN0aXZlIHNldHVpZCBzb2Z0d2FyZToNDQoNDQotLS0gdnVsbjIuYyAtLS0N
DQojaW5jbHVkZSA8c2lnbmFsLmg+DQ0KI2luY2x1ZGUgPHN0cmluZy5oPg0N
CiNpbmNsdWRlIDxzdGRsaWIuaD4NDQoNDQp2b2lkIHNoKGludCBkdW1teSkg
ew0NCiAgcHJpbnRmKCJSdW5uaW5nIHdpdGggdWlkPSVkIGV1aWQ9JWRcbiIs
Z2V0dWlkKCksZ2V0ZXVpZCgpKTsNDQp9DQ0KDQ0KaW50IG1haW4oaW50IGFy
Z2MsY2hhciogYXJndltdKSB7DQ0KICBzZXRldWlkKGdldHVpZCgpKTsNDQog
IHNldHJldWlkKDAsZ2V0dWlkKCkpOw0NCiAgc2lnbmFsKFNJR1RFUk0sc2gp
Ow0NCiAgc2xlZXAoNSk7DQ0KDQ0KICAvLyB0aGlzIGlzIGEgdGVtcG9yYXJp
bHkgcHJpdmlsZWdlZCBjb2RlOg0NCiAgc2V0ZXVpZCgwKTsNDQogIHVubGlu
aygidG1wZmlsZSIpOw0NCiAgc2xlZXAoNSk7DQ0KICBzZXRldWlkKGdldHVp
ZCgpKTsNDQoNDQogIGV4aXQoMCk7DQ0KfQ0NCi0tLS0gRU9GIC0tLS0NDQoN
DQojIGdjYyB2dWxuLmMgLW8gdnVsbjsgY2htb2QgNDc1NSB2dWxuDQ0KIyBz
dSB1c2VyDQ0KJCAuL3Z1bG4gJiBzbGVlcCAzOyBraWxsYWxsIC1URVJNIHZ1
bG47IHNsZWVwIDM7IGtpbGxhbGwgLVRFUk0gdnVsbg0NClJ1bm5pbmcgd2l0
aCB1aWQ9NTAwIGV1aWQ9NTAwDQ0KUnVubmluZyB3aXRoIHVpZD01MDAgZXVp
ZD0wDQ0KDQ0KU3VjaCBhIGNvZGluZyBwcmFjdGljZSBjYW4gYmUgZm91bmQs
IHBhciBleGFtcGxlLCBpbiAnc2NyZWVuJyB1dGlsaXR5DQ0KZGV2ZWxvcGVk
IGJ5IE9saXZlciBMYXVtYW5uLiBPbmUgb2YgdGhlIG1vc3Qgb2J2aW91cyBs
b2NhdGlvbnMgaXMgQ29yZUR1bXANDQpoYW5kbGVyIFtzY3JlZW4uY106DQ0K
DQ0Kc3RhdGljIHNpZ3JldF90DQ0KQ29yZUR1bXAgU0lHREVGQVJHDQ0Kew0N
CiAgLy4uLi8NDQogIHNldGdpZChnZXRnaWQoKSk7DQ0KICBzZXR1aWQoZ2V0
dWlkKCkpOw0NCiAgdW5saW5rKCJjb3JlIik7DQ0KICAvLi4uLw0NCg0NClNJ
R1NFR1YgY2FuIGJlIGRlbGl2ZXJlZCBpbiB0aGUgbWlkZGxlIG9mIHVzZXIt
aW5pdGlhdGVkIHNjcmVlbiBkZXRhY2gNDQpyb3V0aW5lLCBmb3IgZXhhbXBs
ZS4gVG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCBhbmQgd2h5IGlzIGdvaW5n
IG9uLCANDQpoZXJlJ3MgYW4gc3RyYWNlIG91dHB1dCBmb3IgZGV0YWNoIChD
dHJsK0EsIEQpIGNvbW1hbmQ6DQ0KDQ0KMjM1MzQgZ2V0ZXVpZCgpICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMA0NCjIzNTM0IGdldGV1aWQoKSAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDANDQoyMzUzNCBnZXR1aWQoKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSA1MDANDQoyMzUzNCBzZXRyZXVpZCgw
LCA1MDApICAgICAgICAgICAgICAgICAgPSAwICAgICoqKiBIRVJFIElUIEhB
UFBFTlMgKioqDQ0KMjM1MzQgZ2V0ZWdpZCgpICAgICAgICAgICAgICAgICAg
ICAgICAgID0gNTAwICAgDQ0KMjM1MzQgY2htb2QoIi9ob21lL2xjYW10dWYv
LnNjcmVlbi8yMzUzNC50dHk1Lm5pbXVlIiwgMDYwMCkgPSAwDQ0KMjM1MzQg
dXRpbWUoIi9ob21lL2xjYW10dWYvLnNjcmVlbi8yMzUzNC50dHk1Lm5pbXVl
IiwgTlVMTCkgPSAwDQ0KMjM1MzQgZ2V0ZXVpZCgpICAgICAgICAgICAgICAg
ICAgICAgICAgID0gNTAwDQ0KMjM1MzQgZ2V0dWlkKCkgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMCAgDQ0KDQ0KTWFya2VkIGxpbmUgc2V0cyB1aWQg
dG8gemVyby4gSWYgU0lHU0VHViBpcyBkZWxpdmVyZWQgc29tZXdoZXJlIG5l
YXIgdGhpcw0NCnBvaW50LCBDb3JlRHVtcCgpIGhhbmRsZXIgd291bGQgcnVu
IHdpdGggc3VwZXJ1c2VyIHByaXZpbGVnZXMsIGR1ZSB0bw0NCmluaXRpYWwg
c2V0dWlkKGdldHVpZCgpKS4NDQoNDQoNDQozKSBSZW1vdGUgZXhwbG9pdGF0
aW9uIG9mIHNpZ25hbCBkZWxpdmVyeSAoV1UtRlRQRCBjYXNlKQ0NCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tDQ0KDQ0KVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgaXNzdWUs
IGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmUtZW50ZXJpbmcgbGliYw0NCmZ1bmN0
aW9ucyBhbmQvb3IgaW50ZXJydXB0aW5nIG5vbi1hdG9taWMgY29kZS4gTWFu
eSBjb21wbGV4IGRhZW1vbnMsIA0NCmxpa2UgZnRwLCBzb21lIGh0dHAvcHJv
eHkgc2VydmljZXMsIE1UQXMsIGV0Yy4sIGhhdmUgU0lHVVJHIGhhbmRsZXJz
IGRlY2xhcmVkIC0NDQp2ZXJ5IG9mdGVuIHRoZXNlIGhhbmRsZXJzIGFyZSBw
cmV0dHkgdmVyYm9zZSwgY2FsbGluZyBzeXNsb2coKSwgb3IgZnJlZWluZw0N
CnNvbWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3Igc3BlY2lmaWMgY29ubmVj
dGlvbi4gVGhlIHRyaWNrIGlzIHRoYXQgU0lHVVJHLA0NCm9idmlvdXNseSwg
Y2FuIGJlIGRlbGl2ZXJlZCBvdmVyIHRoZSBuZXR3b3JrLCB1c2luZyBUQ1Av
SVAgT09CIG1lc3NhZ2UuDQ0KVGh1cywgaXQgaXMgcG9zc2libGUgdG8gcGVy
Zm9ybSBhdHRhY2tzIHVzaW5nIG5ldHdvcmsgbGF5ZXIgd2l0aG91dA0NCmFu
eSBwcml2aWxlZGdlcy4NDQoNDQpCZWxvdyBpcyBhIFNJR1VSRyBoYW5kbGVy
IHJvdXRpbmUsIHdoaWNoLCB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMsDQ0K
aXMgc2hhcmVkIGJvdGggYnkgQlNEIGZ0cGQgYW5kIFdVLUZUUEQgZGFlbW9u
czoNDQoNDQpzdGF0aWMgVk9JRFJFVCBteW9vYiBGVU5DVElPTigoaW5wdXQp
LCBpbnQgaW5wdXQpDQ0Kew0NCiAgLy4uLi8NDQogIGlmIChnZXRsaW5lKGNw
LCA3LCBzdGRpbikgPT0gTlVMTCkgew0NCiAgICByZXBseSgyMjEsICJZb3Ug
Y291bGQgYXQgbGVhc3Qgc2F5IGdvb2RieWUuIik7DQ0KICAgIGRvbG9nb3V0
KDApOw0NCiAgfQ0NCiAgLy4uLi8NDQp9DQ0KDQ0KQXMgeW91IGNhbiBzZWUg
aW4gY2VydGFpbiBjb25kaXRpb25zLCBkb2xvZ291dCgpIGZ1bmN0aW9uIGlz
IGNhbGxlZC4NDQpUaGlzIHJvdXRpbmUgbG9va3MgdGhpcyB3YXk6DQ0KDQ0K
ZG9sb2dvdXQoaW50IHN0YXR1cykNDQp7DQ0KICAgIC8uLi4vDQ0KICAgIGlm
IChsb2dnZWRfaW4pIHsNDQogICAgICAgIGRlbGF5X3NpZ25hbGluZygpOyAv
KiB3ZSBjYW4ndCBhbGxvdyBhbnkgc2lnbmFscyB3aGlsZSBldWlkPT0wOiBr
aW5jaCAqLw0NCiAgICAgICAgKHZvaWQpIHNldGV1aWQoKHVpZF90KSAwKTsN
DQogICAgICAgIHd1X2xvZ3d0bXAodHR5bGluZSwgIiIsICIiKTsNDQogICAg
fQ0NCiAgICBpZiAobG9nZ2luZykNDQogICAgICAgIHN5c2xvZyhMT0dfSU5G
TywgIkZUUCBzZXNzaW9uIGNsb3NlZCIpOw0NCiAgICAvLi4uLw0NCn0NDQoN
DQpBcyB5b3UgY2FuIHNlZSwgdGhlIGF1dGhvcnMgdG9vayBhbiBhZGRpdGlv
bmFsIHByZWNhdXRpb24gbm90IHRvIGFsbG93DQ0Kc2lnbmFsIGRlbGl2ZXJ5
IGluIHRoZSAibG9nZ2VkX2luIiBjYXNlLiBVbmZvcnR1bmF0ZWx5LCBzeXNs
b2coKSBpcw0NCmEgcGVyZmVjdCBleGFtcGxlIG9mIGEgbGliYyBmdW5jdGlv
biB0aGF0IHNob3VsZCBOT1QgYmUgY2FsbGVkIGR1cmluZw0NCnNpZ25hbCBo
YW5kbGluZywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyICJsb2dnZWRfaW4iIG9y
IGFueSBvdGhlcg0NCnNwZWNpYWwgY29uZGl0aW9uIGhhcHBlbnMgdG8gYmUg
aW4gZWZmZWN0Lg0NCg0NCkFzIG1lbnRpb25lZCBiZWZvcmUsIGhlYXAgbWFu
YWdlbWVudCBmdW5jdGlvbnMgc3VjaCBhcyBtYWxsb2MoKSBhcmUNDQpjYWxs
ZWQgd2l0aGluIHN5c2xvZygpLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBu
b3QgYXRvbWljLiBUaGUgT09CDQ0KbWVzc2FnZSBtaWdodCBhcnJpdmUgd2hl
biB0aGUgaGVhcCBpcyBpbiB2aXJ0dWFsbHkgYW55IHBvc3NpYmxlIHN0YXRl
Lg0NClBsYXlpbmcgd2l0aCB1aWRzIC8gcHJpdmlsZWdlcyAvIGludGVybmFs
IHN0YXRlIGlzIGFuIG9wdGlvbiwgYXMgd2VsbC4NDQoNDQoNDQo0KSBQcmFj
dGljYWwgY29uc2lkZXJhdGlvbnM6IHRpbWluZw0NCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KDQ0KSW4gbW9zdCBjYXNlcyB0aGlz
IGlzIGEgbm9uLWlzc3VlIGZvciBsb2NhbCBhdHRhY2tzLCBhcyB0aGUgYXR0
YWNrZXINDQptaWdodCBjb250cm9sIHRoZSBleGVjdXRpb24gZW52aXJvbm1l
bnQgKGUuZy4sIHRoZSBsb2FkIGF2ZXJhZ2UsIHRoZQ0NCm51bWJlciBvZiBs
b2NhbCBmaWxlcyB0aGF0IHRoZSBkYWVtb24gbmVlZHMgdG8gYWNjZXNzLCBl
dGMuKSBhbmQgdHJ5DQ0KYSB2aXJ0dWFsbHkgaW5maW5pdGUgbnVtYmVyIG9m
IHRpbWVzIGJ5IGludm9raW5nIHRoZSBzYW1lIHByb2dyYW0gb3ZlciANDQph
bmQgb3ZlciBhZ2FpbiwgaW5jcmVhc2luZyB0aGUgcG9zc2liaWxpdHkgb2Yg
ZGVsaXZlcmluZyBzaWduYWwgYXQgDQ0KZ2l2ZW4gcG9pbnQuIEZvciByZW1v
dGUgYXR0YWNrcywgdGhpcyBpcyBhIG1ham9yIGlzc3VlLCBidXQgYXMgbG9u
ZyANDQphcyB0aGUgYXR0YWNrIGl0c2VsZiB3b24ndCBjYXVzZSBzZXJ2aWNl
IHRvIHN0b3AgcmVzcG9uZGluZywgdGhvdXNhbmRzIG9mIA0NCmF0dGVtcHRz
IG1pZ2h0IGJlIHBlcmZvcm1lZC4NDQoNDQoNDQo1KSBTb2x2aW5nIHNpZ25h
bCByYWNlIHByb2JsZW1zDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQ0NCg0NClRoaXMgaXMgYSB2ZXJ5IGNvbXBsZXggYW5kIGRpZmZpY3Vs
dCB0YXNrLiBUaGVyZSBhcmUgYXQgbGVhc3QgdGhyZWUgYXNwZWN0cw0NCm9m
IHRoaXM6DQ0KDQ0KICogVXNpbmcgcmVlbnRyYW50LXNhZmUgbGliY2FsbHMg
aW4gc2lnbmFsIGhhbmRsZXJzIG9ubHkuIFRoaXMgd291bGQNDQogICByZXF1
aXJlIG1ham9yIHJld3JpdGVzIG9mIG51bWVyb3VzIHByb2dyYW1zLiBBbm90
aGVyIGhhbGYtc29sdXRpb24gaXMNDQogICB0byBpbXBsZW1lbnQgYSB3cmFw
cGVyIGFyb3VuZCBldmVyeSBpbnNlY3VyZSBsaWJjYWxsIHVzZWQsIGhhdmlu
Zw0NCiAgIHNwZWNpYWwgZ2xvYmFsIGZsYWcgY2hlY2tlZCB0byBhdm9pZCBy
ZS1lbnRyeSwNDQoNDQogKiBCbG9ja2luZyBzaWduYWwgZGVsaXZlcnkgZHVy
aW5nIGFsbCBub24tYXRvbWljIG9wZXJhdGlvbnMgYW5kL29yDQ0KICAgY29u
c3RydWN0aW5nIHNpZ25hbCBoYW5kbGVycyBpbiB0aGUgd2F5IHRoYXQgd291
bGQgbm90IHJlbHkgb24NDQogICBpbnRlcm5hbCBwcm9ncmFtIHN0YXRlIChl
LmcuIHVuY29uZGl0aW9uYWwgc2V0dGluZyBvZiBzcGVjaWZpYyBmbGFnDQ0K
ICAgYW5kIG5vdGhpbmcgZWxzZSksDQ0KDQ0KICogQmxvY2tpbmcgc2lnbmFs
IGRlbGl2ZXJ5IGluIHNpZ25hbCBoYW5kbGVycy4NDQoNDQoNDQoNDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1pY2hhbCBaYWxld3NraQ0NCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8bGNhbXR1ZkByYXpvci5iaW5kdmll
dy5jb20+DQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNi0xNyBNYXksIDIwMDENDQogDQ0K
---373265275-291080756-991087816=:18807--

<< Previous INDEX Search src Set bookmark Go to bookmark Next >>



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру