Feature #4100: Improve Net::HTTP documentation
http://redmine.ruby-lang.org/issues/show/4100

Author: Eric Hodel
Status: Open, Priority: Normal
Category: DOC

The attached patch reorganizes and further explains how to use Net::HTTP.=


The patch emphasizes using the persistent connection APIs over the simple=
r but more convenient non-persistent APIs.

The documentation now starts with an example using start/request, continu=
es to describing how to extract data from a response, follow redirects an=
d make POSTs which should be the most common operations.

Following that is examples for setting headers, basic authentication, str=
eaming response bodies, HTTPS and proxies.

HTTPS documentation was moved from net/https.rb to the appropriate locati=
ons in Net::HTTP.

The final examples are for the Net::HTTP class methods ::get, ::get_respo=
nse and ::post_form as they do not maintain persistent connections.

The HTTP request and response class sections have been modified to use rd=
oc lists.

The patch is on top of Mike Perham's patch in #4093 but moves the usernam=
e/password Net::HTTP::Proxy example to the Net::HTTP::Proxy method.


----------------------------------------
http://redmine.ruby-lang.org
SW5kZXg6IGxpYi9uZXQvaHR0cC5yYgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBsaWIvbmV0L2h0dHAucmIJKHJldmlzaW9uIDI5OTc2KQorKysgbGli
L25ldC9odHRwLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNDcgKzMyLDM1
MSBAQCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKIAogICAjID09IEFuIEhUVFAg
Y2xpZW50IEFQSSBmb3IgUnVieS4KICAgIwotICAjIEZvciBtb3JlIGRldGFp
bHMgYWJvdXQgSFRUUCwgc2VlIFtSRkMyNjE2XShodHRwOi8vd3d3LmlldGYu
b3JnL3JmYy9yZmMyNjE2LnR4dCkuCisgICMgTmV0OjpIVFRQIHByb3ZpZGVz
IGEgcmljaCBsaWJyYXJ5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIEhU
VFAKKyAgIyB1c2VyLWFnZW50cy4gIEZvciBtb3JlIGRldGFpbHMgYWJvdXQg
SFRUUCBzZWUKKyAgIyBbUkZDMjYxNl0oaHR0cDovL3d3dy5pZXRmLm9yZy9y
ZmMvcmZjMjYxNi50eHQpCiAgICMKLSAgIyA9PSBFeGFtcGxlcworICAjIE5l
dDo6SFRUUCBpcyBkZXNpZ25lZCB0byB3b3JrIGNsb3NlbHkgd2l0aCBVUkku
ICBVUkk6OkhUVFAjaG9zdCwKKyAgIyBVUkk6OkhUVFAjcG9ydCBhbmQgVVJJ
OjpIVFRQI3JlcXVlc3RfdXJpIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGgK
KyAgIyBOZXQ6OkhUVFAuCiAgICMKLSAgIyA9PT0gRmV0Y2hpbmcgRG9jdW1l
bnRzCisgICMgSWYgeW91IGFyZSBvbmx5IHBlcmZvcm1pbmcgYSBmZXcgR0VU
IHJlcXVlc3RzIHlvdSBzaG91bGQgdHJ5IE9wZW5VUkkuCiAgICMKLSAgIyBT
aW1wbGUgR0VUCisgICMgPT0gSG93IHRvIHVzZSBOZXQ6OkhUVFAKICAgIwot
ICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAgICAgTmV0OjpIVFRQ
LmdldCgnd3d3LmV4YW1wbGUuY29tJywgJy9pbmRleC5odG1sJykgPT4gU3Ry
aW5nCi0gICMKLSAgIyBTaW1wbGUgR0VUIGJ5IFVSSSBvYmplY3QKLSAgIwot
ICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAgICAgcmVxdWlyZSAn
dXJpJwotICAjICAgICBOZXQ6OkhUVFAuZ2V0KFVSSS5wYXJzZSgnaHR0cDov
L3d3dy5leGFtcGxlLmNvbS9pbmRleC5odG1sP2NvdW50PTEwJykpID0+IFN0
cmluZwotICAjCi0gICMgTW9yZSBnZW5lcmljIEdFVCB3aXRoIGR5bmFtaWMg
cGFyYW1ldGVycwotICAjCi0gICMgICAgcmVxdWlyZSAnbmV0L2h0dHAnCi0g
ICMgICAgcmVxdWlyZSAndXJpJwotICAjCi0gICMgICAgdXJpID0gVVJJLnBh
cnNlKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2luZGV4Lmh0bWwnKQotICAj
ICAgIHBhcmFtcyA9IHsgOmxpbWl0ID0+IDEwLCA6cGFnZSA9PiAzIH0KLSAg
IyAgICB1cmkucXVlcnkgPSBVUkkuZW5jb2RlX3d3d19mb3JtKHBhcmFtcykK
LSAgIyAgICByZXMgPSBOZXQ6OkhUVFAuZ2V0X3Jlc3BvbnNlKHVyaSkKLSAg
IyAgICBwdXRzIHJlcy5ib2R5IGlmIHJlcy5pc19hPyhOZXQ6OkhUVFBTdWNj
ZXNzKQotICAjCi0gICMgRXZlbiBtb3JlIGdlbmVyaWMgR0VUIHdpdGggQmFz
aWMgQXV0aCBhbmQgY3VzdG9tIGhlYWRlcgotICAjCi0gICMgICAgcmVxdWly
ZSAnbmV0L2h0dHAnCi0gICMKLSAgIyAgICB1cmkgPSBVUkkucGFyc2UoJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vaW5kZXguaHRtbD9rZXk9dmFsdWUnKQot
ICAjICAgIHJlcSA9IE5ldDo6SFRUUDo6R2V0Lm5ldyh1cmkucmVxdWVzdF91
cmkpCi0gICMgICAgcmVxLmJhc2ljX2F1dGggJ3VzZXInLCAncGFzcycKLSAg
IyAgICByZXFbJ1gtQ3VzdG9tLUhlYWRlciddID0gVGltZS5ub3cudG9faQot
ICAjICAgIHJlcyA9IE5ldDo6SFRUUC5zdGFydCh1cmkuaG9zdG5hbWUsIHVy
aS5wb3J0KSB7fGh0dHB8Ci0gICMgICAgICBodHRwLnJlcXVlc3QocmVxKQot
ICAjICAgIH0KLSAgIyAgICBwdXRzIHJlcy5ib2R5Ci0gICMKLSAgIyBBY2Nl
c3NpbmcgUmVzcG9uc2UgZGF0YToKLSAgIwotICAjICAgICByZXMgPSBOZXQ6
OkhUVFAuZ2V0X3Jlc3BvbnNlKFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFt
cGxlLmNvbS9pbmRleC5odG1sJykpCi0gICMgICAgICMgSGVhZGVycwotICAj
ICAgICByZXNbJ1NldC1Db29raWUnXSAgICAgICAgICAgID0+IFN0cmluZwot
ICAjICAgICByZXMuZ2V0X2ZpZWxkcygnc2V0LWNvb2tpZScpID0+IEFycmF5
Ci0gICMgICAgIHJlcy50b19oYXNoWydzZXQtY29va2llJ10gICAgPT4gQXJy
YXkKLSAgIyAgICAgcHV0cyAiSGVhZGVyczogI3tyZXMudG9faGFzaC5pbnNw
ZWN0fSIKLSAgIyAgICAgIyBTdGF0dXMKLSAgIyAgICAgcHV0cyByZXMuY29k
ZSA9PiAnMjAwJwotICAjICAgICBwdXRzIHJlcy5tZXNzYWdlID0+ICdPSycK
LSAgIyAgICAgcHV0cyByZXMuY2xhc3MubmFtZSA9PiAnSFRUUE9LJwotICAj
ICAgICBwdXRzIHJlcy5ib2R5Ci0gICMKLSAgIyA9PT0gUG9zdGluZyBGb3Jt
IERhdGEKLSAgIwotICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAg
ICAgcmVxdWlyZSAndXJpJwotICAjCi0gICMgICAgICMxOiBTaW1wbGUgUE9T
VAotICAjICAgICByZXMgPSBOZXQ6OkhUVFAucG9zdF9mb3JtKFVSSS5wYXJz
ZSgnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zZWFyY2guY2dpJyksCi0gICMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydxJyA9PiAncnVieScs
ICdtYXgnID0+ICc1MCd9KQotICAjICAgICBwdXRzIHJlcy5ib2R5Ci0gICMK
LSAgIyAgICAgIzI6IFBPU1Qgd2l0aCBiYXNpYyBhdXRoZW50aWNhdGlvbgot
ICAjICAgICByZXMgPSBOZXQ6OkhUVFAucG9zdF9mb3JtKFVSSS5wYXJzZSgn
aHR0cDovL2phY2s6cGFzc0B3d3cuZXhhbXBsZS5jb20vdG9kby5jZ2knKSwK
LSAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eydmcm9tJyA9PiAnMjAwNS0wMS0wMScsCi0gICMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndG8nID0+ICcyMDA1LTAzLTMx
J30pCi0gICMgICAgIHB1dHMgcmVzLmJvZHkKLSAgIwotICAjICAgICAjMzog
RGV0YWlsZWQgY29udHJvbAotICAjICAgICB1cmkgPSBVUkkucGFyc2UoJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vdG9kby5jZ2knKQotICAjICAgICByZXEg
PSBOZXQ6OkhUVFA6OlBvc3QubmV3KHVyaS5wYXRoKQotICAjICAgICByZXEu
YmFzaWNfYXV0aCAnamFjaycsICdwYXNzJwotICAjICAgICByZXEuc2V0X2Zv
cm1fZGF0YSh7J2Zyb20nID0+ICcyMDA1LTAxLTAxJywgJ3RvJyA9PiAnMjAw
NS0wMy0zMSd9LCAnOycpCi0gICMgICAgIHJlcyA9IE5ldDo6SFRUUC5uZXco
dXJpLmhvc3RuYW1lLCB1cmkucG9ydCkuc3RhcnQge3xodHRwfCBodHRwLnJl
cXVlc3QocmVxKSB9Ci0gICMgICAgIGNhc2UgcmVzCi0gICMgICAgIHdoZW4g
TmV0OjpIVFRQU3VjY2VzcywgTmV0OjpIVFRQUmVkaXJlY3Rpb24KLSAgIyAg
ICAgICAjIE9LCisgICMgTmV0OjpIVFRQIHByb3ZpZGVzIHNldmVyYWwgY29u
dmVuaWVuY2UgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBhIEdFVCBvbiBhCisg
ICMgd2ViIHNlcnZlciB3aGljaCBhcmUgZGVzY3JpYmVkIGJlbG93LgorICAj
CisgICMgQWxsIGV4YW1wbGVzIGFzc3VtZSB5b3UgaGF2ZSBsb2FkZWQgTmV0
OjpIVFRQIHdpdGg6CisgICMKKyAgIyAgIHJlcXVpcmUgJ25ldC9odHRwJwor
ICAjCisgICMgVGhpcyB3aWxsIGFsc28gcmVxdWlyZSAndXJpJyBzbyB5b3Ug
ZG9uJ3QgbmVlZCB0byByZXF1aXJlIGl0IHNlcGFyYXRlbHkuCisgICMKKyAg
IyBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBjYW4gYmUgdXNlZCBhcyB0
aGUgYmFzaXMgb2YgYSBIVFRQIHVzZXItYWdlbnQKKyAgIyB3aGljaCB3aWxs
IHBlcmZvcm0gYSB2YXJpZXR5IG9mIHJlcXVlc3QgdHlwZXMuCisgICMKKyAg
IyAgIHVyaSA9IFVSSS5wYXJzZSAnaHR0cDovL2V4YW1wbGUuY29tL3NvbWVf
cGF0aD9xdWVyeT1zdHJpbmcnCisgICMKKyAgIyAgIE5ldDo6SFRUUC5zdGFy
dCB1cmkuaG9zdCwgdXJpLnBvcnQgZG8gfGh0dHB8CisgICMgICAgIHJlcXVl
c3QgPSBOZXQ6OkhUVFA6OkdldC5uZXcgdXJpLnJlcXVlc3RfdXJpCisgICMK
KyAgIyAgICAgcmVzcG9uc2UgPSBodHRwLnJlcXVlc3QgcmVxdWVzdCAjIE5l
dDo6SFRUUFJlc3BvbnNlIG9iamVjdAorICAjICAgZW5kCisgICMKKyAgIyBO
ZXQ6OkhUVFA6OnN0YXJ0IGltbWVkaWF0ZWx5IGNyZWF0ZXMgYSBjb25uZWN0
aW9uIHRvIGFuIEhUVFAgc2VydmVyIHdoaWNoCisgICMgaXMga2VwdCBvcGVu
IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGJsb2NrLiAgVGhlIGNvbm5lY3Rp
b24gd2lsbCByZW1haW4KKyAgIyBvcGVuIGZvciBtdWx0aXBsZSByZXF1ZXN0
cyBpbiB0aGUgYmxvY2sgaWYgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXQKKyAg
IyBzdXBwb3J0cyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgorICAjCisgICMg
VGhlIHJlcXVlc3QgdHlwZXMgTmV0OjpIVFRQIHN1cHBvcnRzIGFyZSBsaXN0
ZWQgYmVsb3cgaW4gdGhlIHNlY3Rpb24gIkhUVFAKKyAgIyBSZXF1ZXN0IENs
YXNzZXMiLgorICAjCisgICMgSWYgeW91IHdpc2ggdG8gcmUtdXNlIGEgY29u
bmVjdGlvbiBhY3Jvc3MgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyB3aXRob3V0
CisgICMgYXV0b21hdGljYWxseSBjbG9zaW5nIGl0IHlvdSBjYW4gdXNlIDo6
bmV3IGluc3RlYWQgb2YgOjpzdGFydC4gICNyZXF1ZXN0CisgICMgd2lsbCBh
dXRvbWF0aWNhbGx5IG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIg
aWYgb25lIGlzIG5vdCBjdXJyZW50bHkKKyAgIyBvcGVuLiAgWW91IGNhbiBt
YW51YWxseSBjbG9zZSB0aGUgY29ubmVjdGlvbiB3aXRoICNjbG9zZS4KKyAg
IworICAjID09PSBSZXNwb25zZSBEYXRhCisgICMKKyAgIyAgIHVyaSA9IFVS
SS5wYXJzZSgnaHR0cDovL2V4YW1wbGUuY29tL2luZGV4Lmh0bWwnKQorICAj
ICAgcmVzID0gTmV0OjpIVFRQLmdldF9yZXNwb25zZSh1cmkpCisgICMKKyAg
IyAgICMgSGVhZGVycworICAjICAgcmVzWydTZXQtQ29va2llJ10gICAgICAg
ICAgICAjID0+IFN0cmluZworICAjICAgcmVzLmdldF9maWVsZHMoJ3NldC1j
b29raWUnKSAjID0+IEFycmF5CisgICMgICByZXMudG9faGFzaFsnc2V0LWNv
b2tpZSddICAgICMgPT4gQXJyYXkKKyAgIyAgIHB1dHMgIkhlYWRlcnM6ICN7
cmVzLnRvX2hhc2guaW5zcGVjdH0iCisgICMKKyAgIyAgICMgU3RhdHVzCisg
ICMgICBwdXRzIHJlcy5jb2RlICAgICAgICMgPT4gJzIwMCcKKyAgIyAgIHB1
dHMgcmVzLm1lc3NhZ2UgICAgIyA9PiAnT0snCisgICMgICBwdXRzIHJlcy5j
bGFzcy5uYW1lICMgPT4gJ0hUVFBPSycKKyAgIworICAjICAgIyBCb2R5Cisg
ICMgICBwdXRzIHJlcy5ib2R5IGlmIHJlcy5yZXNwb25zZV9ib2R5X3Blcm1p
dHRlZD8KKyAgIworICAjID09PSBGb2xsb3dpbmcgUmVkaXJlY3Rpb24KKyAg
IworICAjIEVhY2ggTmV0OjpIVFRQUmVzcG9uc2Ugb2JqZWN0IGJlbG9uZ3Mg
dG8gYSBjbGFzcyBmb3IgaXRzIHJlc3BvbnNlIGNvZGUuCisgICMKKyAgIyBG
b3IgZXhhbXBsZSwgYWxsIDJYWCByZXNwb25zZXMgYXJlIGluc3RhbmNlcyBv
ZiBhIE5ldDo6SFRUUFN1Y2Nlc3MKKyAgIyBzdWJjbGFzcywgYSAzWFggcmVz
cG9uc2UgaXMgYW4gaW5zdGFuY2Ugb2YgYSBOZXQ6OkhUVFBSZWRpcmVjdGlv
bgorICAjIHN1YmNsYXNzIGFuZCBhIDIwMCByZXNwb25zZSBpcyBhbiBpbnN0
YW5jZSBvZiB0aGUgTmV0OjpIVFRQT0sgY2xhc3MuICBGb3IKKyAgIyBkZXRh
aWxzIG9mIHJlc3BvbnNlIGNsYXNzZXMsIHNlZSB0aGUgc2VjdGlvbiAiSFRU
UCBSZXNwb25zZSBDbGFzc2VzIgorICAjIGJlbG93LgorICAjCisgICMgVXNp
bmcgYSBjYXNlIHN0YXRlbWVudCB5b3UgY2FuIGhhbmRsZSB2YXJpb3VzIHR5
cGVzIG9mIHJlc3BvbnNlcyBwcm9wZXJseToKKyAgIworICAjICAgZGVmIGZl
dGNoKHVyaV9zdHIsIGxpbWl0ID0gMTApCisgICMgICAgICMgWW91IHNob3Vs
ZCBjaG9vc2UgYSBiZXR0ZXIgZXhjZXB0aW9uLgorICAjICAgICByYWlzZSBB
cmd1bWVudEVycm9yLCAndG9vIG1hbnkgSFRUUCByZWRpcmVjdHMnIGlmIGxp
bWl0ID09IDAKKyAgIworICAjICAgICByZXNwb25zZSA9IE5ldDo6SFRUUC5n
ZXRfcmVzcG9uc2UoVVJJLnBhcnNlKHVyaV9zdHIpKQorICAjCisgICMgICAg
IGNhc2UgcmVzcG9uc2UKKyAgIyAgICAgd2hlbiBOZXQ6OkhUVFBTdWNjZXNz
IHRoZW4KKyAgIyAgICAgICByZXNwb25zZQorICAjICAgICB3aGVuIE5ldDo6
SFRUUFJlZGlyZWN0aW9uIHRoZW4KKyAgIyAgICAgICBsb2NhdGlvbiA9IHJl
c3BvbnNlWydsb2NhdGlvbiddCisgICMgICAgICAgd2FybiAicmVkaXJlY3Rl
ZCB0byAje2xvY2F0aW9ufSIKKyAgIyAgICAgICBmZXRjaChsb2NhdGlvbiwg
bGltaXQgLSAxKQogICAjICAgICBlbHNlCi0gICMgICAgICAgcmVzLmVycm9y
IQorICAjICAgICAgICMgdHVybnMgYSByZXNwb25zZSBvYmplY3QgaW50byBh
biBlcnJvciBjbGFzcyBhbmQgcmFpc2VzIGl0CisgICMgICAgICAgcmVzcG9u
c2UuZXJyb3IhCiAgICMgICAgIGVuZAorICAjICAgZW5kCiAgICMKLSAgIyAg
ICAgIzQ6IE11bHRpcGxlIHZhbHVlcwotICAjICAgICByZXMgPSBOZXQ6OkhU
VFAucG9zdF9mb3JtKFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFtcGxlLmNv
bS9zZWFyY2guY2dpJyksCi0gICMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeydxJyA9PiBbJ3J1YnknLCAncGVybCddLCAnbWF4JyA9PiAnNTAn
fSkKLSAgIyAgICAgcHV0cyByZXMuYm9keQorICAjICAgcHJpbnQgZmV0Y2go
J2h0dHA6Ly93d3cucnVieS1sYW5nLm9yZycpCiAgICMKLSAgIyA9PT0gQWNj
ZXNzaW5nIHZpYSBQcm94eQorICAjID09PSBQT1NUCiAgICMKLSAgIyBOZXQ6
OkhUVFA6OlByb3h5IGhhcyB0aGUgc2FtZSBtZXRob2RzIGFzIE5ldDo6SFRU
UCBidXQgaXRzIGluc3RhbmNlcyBhbHdheXMKLSAgIyBjb25uZWN0IHZpYSB0
aGUgcHJveHksIGluc3RlYWQgb2YgZ2l2ZW4gaG9zdC4KKyAgIyBBIFBPU1Qg
Y2FuIGJlIG1hZGUgdXNpbmcgdGhlIE5ldDo6SFRUUDo6UG9zdCByZXF1ZXN0
IGNsYXNzLiAgVGhpcyBleGFtcGxlCisgICMgY3JlYXRlcyBhIHVybGVuY29k
ZWQgUE9TVCBib2R5OgogICAjCi0gICMgICAgIHJlcXVpcmUgJ25ldC9odHRw
JworICAjICAgdXJpID0gVVJJLnBhcnNlKCdodHRwOi8vd3d3LmV4YW1wbGUu
Y29tL3RvZG8uY2dpJykKKyAgIyAgIHJlcSA9IE5ldDo6SFRUUDo6UG9zdC5u
ZXcodXJpLnBhdGgpCisgICMgICByZXEuc2V0X2Zvcm1fZGF0YSgnZnJvbScg
PT4gJzIwMDUtMDEtMDEnLCAndG8nID0+ICcyMDA1LTAzLTMxJykKICAgIwot
ICAjICAgICBwcm94eV9hZGRyID0gJ3lvdXIucHJveHkuaG9zdCcKLSAgIyAg
ICAgcHJveHlfcG9ydCA9IDgwODAKLSAgIyAgICAgICAgICAgICA6Ci0gICMg
ICAgIE5ldDo6SFRUUDo6UHJveHkocHJveHlfYWRkciwgcHJveHlfcG9ydCku
c3RhcnQoJ3d3dy5leGFtcGxlLmNvbScpIHt8aHR0cHwKLSAgIyAgICAgICAj
IGFsd2F5cyBjb25uZWN0IHRvIHlvdXIucHJveHkuYWRkcjo4MDgwCi0gICMg
ICAgICAgICAgICAgOgotICAjICAgICB9Ci0gICMKLSAgIyBTaW5jZSBOZXQ6
OkhUVFA6OlByb3h5IHJldHVybnMgTmV0OjpIVFRQIGl0c2VsZiB3aGVuIHBy
b3h5X2FkZHIgaXMgbmlsLAotICAjIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGFu
Z2UgY29kZSBpZiB0aGVyZSdzIGEgcHJveHkgb3Igbm90LgotICAjCi0gICMg
VGhlcmUgYXJlIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gTmV0OjpI
VFRQOjpQcm94eSB3aGljaCB5b3UgY2FuIHVzZSB0bwotICAjIHNwZWNpZnkg
YSBwcm94eSB1c2VybmFtZSBhbmQgcGFzc3dvcmQ6Ci0gICMKLSAgIyAgICAg
TmV0OjpIVFRQOjpQcm94eShwcm94eV9hZGRyLCBwcm94eV9wb3J0LCBwcm94
eV91c2VyID0gbmlsLCBwcm94eV9wYXNzID0gbmlsKQotICAjCi0gICMgWW91
IG1heSB1c2UgdGhlbSB0byB3b3JrIHdpdGggYXV0aG9yaXphdGlvbi1lbmFi
bGVkIHByb3hpZXM6Ci0gICMKLSAgIyAgICAgcmVxdWlyZSAnbmV0L2h0dHAn
Ci0gICMgICAgIHJlcXVpcmUgJ3VyaScKLSAgIwotICAjICAgICBwcm94eV9o
b3N0ID0gJ3lvdXIucHJveHkuaG9zdCcKLSAgIyAgICAgcHJveHlfcG9ydCA9
IDgwODAKLSAgIyAgICAgdXJpID0gVVJJLnBhcnNlKEVOVlsnaHR0cF9wcm94
eSddKQotICAjICAgICBwcm94eV91c2VyLCBwcm94eV9wYXNzID0gdXJpLnVz
ZXJpbmZvLnNwbGl0KC86LykgaWYgdXJpLnVzZXJpbmZvCi0gICMgICAgIE5l
dDo6SFRUUDo6UHJveHkocHJveHlfaG9zdCwgcHJveHlfcG9ydCwKLSAgIyAg
ICAgICAgICAgICAgICAgICAgICBwcm94eV91c2VyLCBwcm94eV9wYXNzKS5z
dGFydCgnd3d3LmV4YW1wbGUuY29tJykge3xodHRwfAotICAjICAgICAgICMg
YWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5hZGRyOjgwODAgdXNpbmcg
c3BlY2lmaWVkIHVzZXJuYW1lIGFuZCBwYXNzd29yZAotICAjICAgICAgICAg
ICAgIDoKLSAgIyAgICAgfQorICAjICAgcmVzID0gTmV0OjpIVFRQLm5ldyh1
cmkuaG9zdG5hbWUsIHVyaS5wb3J0KS5zdGFydCBkbyB8aHR0cHwKKyAgIyAg
ICAgaHR0cC5yZXF1ZXN0KHJlcSkKKyAgIyAgIGVuZAogICAjCi0gICMgTm90
ZSB0aGF0IG5ldC9odHRwIGRvZXMgbm90IHVzZSB0aGUgSFRUUF9QUk9YWSBl
bnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgIyBJZiB5b3Ugd2FudCB0byB1c2Ug
YSBwcm94eSwgeW91IG11c3Qgc2V0IGl0IGV4cGxpY2l0bHkuCisgICMgICBj
YXNlIHJlcworICAjICAgd2hlbiBOZXQ6OkhUVFBTdWNjZXNzLCBOZXQ6OkhU
VFBSZWRpcmVjdGlvbgorICAjICAgICAjIE9LCisgICMgICBlbHNlCisgICMg
ICAgIHJlcy5lcnJvciEKKyAgIyAgIGVuZAogICAjCi0gICMgPT09IEZvbGxv
d2luZyBSZWRpcmVjdGlvbgorICAjIEF0IHRoaXMgdGltZSBOZXQ6OkhUVFAg
ZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhLiAgVG8gc2Vu
ZAorICAjIG11bHRpcGFydC9mb3JtLWRhdGEgdXNlIE5ldDo6SFRUUFJlcXVl
c3QjYm9keT0gYW5kCisgICMgTmV0OjpIVFRQUmVxdWVzdCNjb250ZW50X3R5
cGU9OgorICAjCisgICMgICByZXEgPSBOZXQ6OkhUVFA6OlBvc3QubmV3KHVy
aS5wYXRoKQorICAjICAgcmVxLmJvZHkgPSBtdWx0aXBhcnRfZGF0YQorICAj
ICAgcmVxLmNvbnRlbnRfdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJwor
ICAjCisgICMgT3RoZXIgcmVxdWVzdHMgdGhhdCBjYW4gY29udGFpbiBhIGJv
ZHkgc3VjaCBhcyBQVVQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlCisgICMgc2Ft
ZSB3YXkgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmVxdWVzdCBjbGFzcyAo
TmV0OjpIVFRQOjpQdXQpLgorICAjCisgICMgPT09IFNldHRpbmcgSGVhZGVy
cworICAjCisgICMgVGhlIGZvbGxvd2luZyBleGFtcGxlIHBlcmZvcm1zIGEg
Y29uZGl0aW9uYWwgR0VUIHVzaW5nIHRoZQorICAjIElmLU1vZGlmaWVkLVNp
bmNlIGhlYWRlci4gIElmIHRoZSBmaWxlcyBoYXMgbm90IGJlZW4gbW9kaWZp
ZWQgc2luY2UgdGhlCisgICMgdGltZSBpbiB0aGUgaGVhZGVyIGEgTm90IE1v
ZGlmaWVkIHJlc3BvbnNlIHdpbGwgYmUgcmV0dXJuZWQuICBTZWUgUkZDIDI2
MTYKKyAgIyBzZWN0aW9uIDkuMyBmb3IgZnVydGhlciBkZXRhaWxzLgorICAj
CisgICMgICB1cmkgPSBVUkkucGFyc2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9j
YWNoZWRfcmVzcG9uc2UnKQorICAjICAgZmlsZSA9IEZpbGUuc3RhdCAnY2Fj
aGVkX3Jlc3BvbnNlJworICAjCisgICMgICByZXEgPSBOZXQ6OkhUVFA6Okdl
dC5uZXcodXJpLnJlcXVlc3RfdXJpKQorICAjICAgcmVxWydJZi1Nb2RpZmll
ZC1TaW5jZSddID0gZmlsZS5tdGltZS5yZmMyODIyCisgICMKKyAgIyAgIHJl
cyA9IE5ldDo6SFRUUC5zdGFydCh1cmkuaG9zdG5hbWUsIHVyaS5wb3J0KSB7
fGh0dHB8CisgICMgICAgIGh0dHAucmVxdWVzdChyZXEpCisgICMgICB9Cisg
ICMKKyAgIyAgIG9wZW4gJ2NhY2hlZF9yZXNwb25zZScsICd3JyBkbyB8aW98
CisgICMgICAgIGlvLndyaXRlIHJlcy5ib2R5CisgICMgICBlbmQgaWYgcmVz
LmlzX2E/KE5ldDo6SFRUUFN1Y2Nlc3MpCisgICMKKyAgIyA9PT0gQmFzaWMg
QXV0aGVudGljYXRpb24KKyAgIworICAjIEJhc2ljIGF1dGhlbnRpY2F0aW9u
IGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8KKyAgIyBbUkZDMjYxN10oaHR0
cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNy50eHQpCisgICMgCisgICMg
ICB1cmkgPSBVUkkucGFyc2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9pbmRleC5o
dG1sP2tleT12YWx1ZScpCisgICMKKyAgIyAgIHJlcSA9IE5ldDo6SFRUUDo6
R2V0Lm5ldyh1cmkucmVxdWVzdF91cmkpCisgICMgICByZXEuYmFzaWNfYXV0
aCAndXNlcicsICdwYXNzJworICAjCisgICMgICByZXMgPSBOZXQ6OkhUVFAu
c3RhcnQodXJpLmhvc3RuYW1lLCB1cmkucG9ydCkge3xodHRwfAorICAjICAg
ICBodHRwLnJlcXVlc3QocmVxKQorICAjICAgfQorICAjICAgcHV0cyByZXMu
Ym9keQorICAjCisgICMgPT09IFN0cmVhbWluZyBSZXNwb25zZSBCb2RpZXMK
KyAgIworICAjIEJ5IGRlZmF1bHQgTmV0OjpIVFRQIHJlYWRzIGFuIGVudGly
ZSByZXNwb25zZSBpbnRvIG1lbW9yeS4gIElmIHlvdSBhcmUKKyAgIyBoYW5k
bGluZyBsYXJnZSBmaWxlcyBvciB3aXNoIHRvIGltcGxlbWVudCBhIHByb2dy
ZXNzIGJhciB5b3UgY2FuIGluc3RlYWQKKyAgIyBzdHJlYW0gdGhlIGJvZHkg
ZGlyZWN0bHkgdG8gYW4gSU8uCiAgICMKLSAgIyAgICAgcmVxdWlyZSAnbmV0
L2h0dHAnCi0gICMgICAgIHJlcXVpcmUgJ3VyaScKKyAgIyAgIHVyaSA9IFVS
SS5wYXJzZSAnaHR0cDovL2V4YW1wbGUuY29tL2xhcmdlX2ZpbGUnCiAgICMK
LSAgIyAgICAgZGVmIGZldGNoKHVyaV9zdHIsIGxpbWl0ID0gMTApCi0gICMg
ICAgICAgIyBZb3Ugc2hvdWxkIGNob29zZSBiZXR0ZXIgZXhjZXB0aW9uLgot
ICAjICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdIVFRQIHJlZGlyZWN0
IHRvbyBkZWVwJyBpZiBsaW1pdCA9PSAwCi0gICMKLSAgIyAgICAgICByZXNw
b25zZSA9IE5ldDo6SFRUUC5nZXRfcmVzcG9uc2UoVVJJLnBhcnNlKHVyaV9z
dHIpKQotICAjICAgICAgIGNhc2UgcmVzcG9uc2UKLSAgIyAgICAgICB3aGVu
IE5ldDo6SFRUUFN1Y2Nlc3MgICAgIHRoZW4gcmVzcG9uc2UKLSAgIyAgICAg
ICB3aGVuIE5ldDo6SFRUUFJlZGlyZWN0aW9uIHRoZW4gZmV0Y2gocmVzcG9u
c2VbJ2xvY2F0aW9uJ10sIGxpbWl0IC0gMSkKLSAgIyAgICAgICBlbHNlCi0g
ICMgICAgICAgICByZXNwb25zZS5lcnJvciEKKyAgIyAgIE5ldDo6SFRUUC5z
dGFydCB1cmkuaG9zdCwgdXJpLnBvcnQgZG8gfGh0dHB8CisgICMgICAgIHJl
cXVlc3QgPSBOZXQ6OkhUVFA6OkdldC5uZXcgdXJpLnJlcXVlc3RfdXJpCisg
ICMKKyAgIyAgICAgaHR0cC5yZXF1ZXN0IHJlcXVlc3QgZG8gfHJlc3BvbnNl
fAorICAjICAgICAgIG9wZW4gJ2xhcmdlX2ZpbGUnLCAndycgZG8gfGlvfAor
ICAjICAgICAgICAgcmVzcG9uc2UucmVhZF9ib2R5IGRvIHxjaHVua3wKKyAg
IyAgICAgICAgICAgaW8ud3JpdGUgY2h1bmsKKyAgIyAgICAgICAgIGVuZAog
ICAjICAgICAgIGVuZAogICAjICAgICBlbmQKKyAgIyAgIGVuZAorICAjCisg
ICMgPT09IEhUVFBTCisgICMKKyAgIyBIVFRQUyBpcyBlbmFibGVkIGZvciBh
biBIVFRQIGNvbm5lY3Rpb24gYnkgTmV0OjpIVFRQI3VzZV9zc2w9LgorICAj
CisgICMgICB1cmkgPSBVUkkucGFyc2UgJ2h0dHBzOi8vc2VjdXJlLmV4YW1w
bGUuY29tL3NvbWVfcGF0aD9xdWVyeT1zdHJpbmcnCisgICMKKyAgIyAgIE5l
dDo6SFRUUC5uZXcgdXJpLmhvc3QsIHVyaS5wb3J0CisgICMgICBodHRwLnVz
ZV9zc2wgPSB1cmkuc2NoZW1lID09ICdodHRwcycKKyAgIworICAjICAgaHR0
cC5zdGFydCBkbworICAjICAgICByZXF1ZXN0ID0gTmV0OjpIVFRQOjpHZXQu
bmV3IHVyaS5yZXF1ZXN0X3VyaQorICAjCisgICMgICAgIHJlc3BvbnNlID0g
aHR0cC5yZXF1ZXN0IHJlcXVlc3QgIyBOZXQ6OkhUVFBSZXNwb25zZSBvYmpl
Y3QKKyAgIyAgIGVuZAorICAjCisgICMgSW4gcHJldmlvdXMgdmVyc2lvbnMg
b2YgcnVieSB5b3Ugd291bGQgbmVlZCB0byByZXF1aXJlICduZXQvaHR0cHMn
IHRvIHVzZQorICAjIEhUVFBTLiAgVGhpcyBpcyBubyBsb25nZXIgdHJ1ZS4K
KyAgIworICAjID09PSBQcm94aWVzCiAgICMKLSAgIyAgICAgcHJpbnQgZmV0
Y2goJ2h0dHA6Ly93d3cucnVieS1sYW5nLm9yZycpCisgICMgTmV0OjpIVFRQ
OjpQcm94eSBoYXMgdGhlIHNhbWUgbWV0aG9kcyBhcyBOZXQ6OkhUVFAgYnV0
IGl0cyBpbnN0YW5jZXMgYWx3YXlzCisgICMgY29ubmVjdCB2aWEgdGhlIHBy
b3h5LCBpbnN0ZWFkIG9mIGdpdmVuIGhvc3QuCisgICMKKyAgIyAgIHByb3h5
X2FkZHIgPSAneW91ci5wcm94eS5ob3N0JworICAjICAgcHJveHlfcG9ydCA9
IDgwODAKICAgIwotICAjIE5ldDo6SFRUUFN1Y2Nlc3MgYW5kIE5ldDo6SFRU
UFJlZGlyZWN0aW9uIGFyZSBIVFRQUmVzcG9uc2Ugc3ViY2xhc3Nlcy4KLSAg
IyBBbGwgSFRUUFJlc3BvbnNlIG9iamVjdHMgYmVsb25nIHRvIHRoZWlyIG93
biByZXNwb25zZSBjbGFzcyB3aGljaAotICAjIGluZGljYXRlcyB0aGUgSFRU
UCByZXN1bHQgc3RhdHVzLgotICAjCi0gICMgPT09IEhUVFAgUmVxdWVzdCBD
bGFzc2VzCi0gICMKLSAgIyBIZXJlIGlzIEhUVFAgcmVxdWVzdCBjbGFzcyBo
aWVyYXJjaHkuCi0gICMKLSAgIyAgIE5ldDo6SFRUUFJlcXVlc3QKLSAgIyAg
ICAgICBOZXQ6OkhUVFA6OkdldAotICAjICAgICAgIE5ldDo6SFRUUDo6SGVh
ZAotICAjICAgICAgIE5ldDo6SFRUUDo6UG9zdAotICAjICAgICAgIE5ldDo6
SFRUUDo6UHV0Ci0gICMgICAgICAgTmV0OjpIVFRQOjpQcm9wcGF0Y2gKLSAg
IyAgICAgICBOZXQ6OkhUVFA6OkxvY2sKLSAgIyAgICAgICBOZXQ6OkhUVFA6
OlVubG9jawotICAjICAgICAgIE5ldDo6SFRUUDo6T3B0aW9ucwotICAjICAg
ICAgIE5ldDo6SFRUUDo6UHJvcGZpbmQKLSAgIyAgICAgICBOZXQ6OkhUVFA6
OkRlbGV0ZQotICAjICAgICAgIE5ldDo6SFRUUDo6TW92ZQotICAjICAgICAg
IE5ldDo6SFRUUDo6Q29weQotICAjICAgICAgIE5ldDo6SFRUUDo6TWtjb2wK
LSAgIyAgICAgICBOZXQ6OkhUVFA6OlRyYWNlCi0gICMKLSAgIyA9PT0gSFRU
UCBSZXNwb25zZSBDbGFzc2VzCi0gICMKLSAgIyBIZXJlIGlzIEhUVFAgcmVz
cG9uc2UgY2xhc3MgaGllcmFyY2h5LgotICAjIEFsbCBjbGFzc2VzIGFyZSBk
ZWZpbmVkIGluIE5ldCBtb2R1bGUuCi0gICMKLSAgIyAgIEhUVFBSZXNwb25z
ZQotICAjICAgICAgIEhUVFBVbmtub3duUmVzcG9uc2UKLSAgIyAgICAgICBI
VFRQSW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICMgMXh4Ci0gICMg
ICAgICAgICAgIEhUVFBDb250aW51ZSAgICAgICAgICAgICAgICAgICAgICAg
IyAxMDAKLSAgIyAgICAgICAgICAgSFRUUFN3aXRjaFByb3RvY29sICAgICAg
ICAgICAgICAgICAjIDEwMQotICAjICAgICAgIEhUVFBTdWNjZXNzICAgICAg
ICAgICAgICAgICAgICAgICAgIyAyeHgKLSAgIyAgICAgICAgICAgSFRUUE9L
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIwMAotICAjICAgICAg
ICAgICBIVFRQQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICMgMjAx
Ci0gICMgICAgICAgICAgIEhUVFBBY2NlcHRlZCAgICAgICAgICAgICAgICAg
ICAgICAgIyAyMDIKLSAgIyAgICAgICAgICAgSFRUUE5vbkF1dGhvcml0YXRp
dmVJbmZvcm1hdGlvbiAgICAjIDIwMwotICAjICAgICAgICAgICBIVFRQTm9D
b250ZW50ICAgICAgICAgICAgICAgICAgICAgICMgMjA0Ci0gICMgICAgICAg
ICAgIEhUVFBSZXNldENvbnRlbnQgICAgICAgICAgICAgICAgICAgIyAyMDUK
LSAgIyAgICAgICAgICAgSFRUUFBhcnRpYWxDb250ZW50ICAgICAgICAgICAg
ICAgICAjIDIwNgotICAjICAgICAgIEhUVFBSZWRpcmVjdGlvbiAgICAgICAg
ICAgICAgICAgICAgIyAzeHgKLSAgIyAgICAgICAgICAgSFRUUE11bHRpcGxl
Q2hvaWNlICAgICAgICAgICAgICAgICAjIDMwMAotICAjICAgICAgICAgICBI
VFRQTW92ZWRQZXJtYW5lbnRseSAgICAgICAgICAgICAgICMgMzAxCi0gICMg
ICAgICAgICAgIEhUVFBGb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAg
IyAzMDIKLSAgIyAgICAgICAgICAgSFRUUFNlZU90aGVyICAgICAgICAgICAg
ICAgICAgICAgICAjIDMwMwotICAjICAgICAgICAgICBIVFRQTm90TW9kaWZp
ZWQgICAgICAgICAgICAgICAgICAgICMgMzA0Ci0gICMgICAgICAgICAgIEhU
VFBVc2VQcm94eSAgICAgICAgICAgICAgICAgICAgICAgIyAzMDUKLSAgIyAg
ICAgICAgICAgSFRUUFRlbXBvcmFyeVJlZGlyZWN0ICAgICAgICAgICAgICAj
IDMwNwotICAjICAgICAgIEhUVFBDbGllbnRFcnJvciAgICAgICAgICAgICAg
ICAgICAgIyA0eHgKLSAgIyAgICAgICAgICAgSFRUUEJhZFJlcXVlc3QgICAg
ICAgICAgICAgICAgICAgICAjIDQwMAotICAjICAgICAgICAgICBIVFRQVW5h
dXRob3JpemVkICAgICAgICAgICAgICAgICAgICMgNDAxCi0gICMgICAgICAg
ICAgIEhUVFBQYXltZW50UmVxdWlyZWQgICAgICAgICAgICAgICAgIyA0MDIK
LSAgIyAgICAgICAgICAgSFRUUEZvcmJpZGRlbiAgICAgICAgICAgICAgICAg
ICAgICAjIDQwMwotICAjICAgICAgICAgICBIVFRQTm90Rm91bmQgICAgICAg
ICAgICAgICAgICAgICAgICMgNDA0Ci0gICMgICAgICAgICAgIEhUVFBNZXRo
b2ROb3RBbGxvd2VkICAgICAgICAgICAgICAgIyA0MDUKLSAgIyAgICAgICAg
ICAgSFRUUE5vdEFjY2VwdGFibGUgICAgICAgICAgICAgICAgICAjIDQwNgot
ICAjICAgICAgICAgICBIVFRQUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk
ICAgICMgNDA3Ci0gICMgICAgICAgICAgIEhUVFBSZXF1ZXN0VGltZU91dCAg
ICAgICAgICAgICAgICAgIyA0MDgKLSAgIyAgICAgICAgICAgSFRUUENvbmZs
aWN0ICAgICAgICAgICAgICAgICAgICAgICAjIDQwOQotICAjICAgICAgICAg
ICBIVFRQR29uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNDEwCi0g
ICMgICAgICAgICAgIEhUVFBMZW5ndGhSZXF1aXJlZCAgICAgICAgICAgICAg
ICAgIyA0MTEKLSAgIyAgICAgICAgICAgSFRUUFByZWNvbmRpdGlvbkZhaWxl
ZCAgICAgICAgICAgICAjIDQxMgotICAjICAgICAgICAgICBIVFRQUmVxdWVz
dEVudGl0eVRvb0xhcmdlICAgICAgICAgICMgNDEzCi0gICMgICAgICAgICAg
IEhUVFBSZXF1ZXN0VVJJVG9vTG9uZyAgICAgICAgICAgICAgIyA0MTQKLSAg
IyAgICAgICAgICAgSFRUUFVuc3VwcG9ydGVkTWVkaWFUeXBlICAgICAgICAg
ICAjIDQxNQotICAjICAgICAgICAgICBIVFRQUmVxdWVzdGVkUmFuZ2VOb3RT
YXRpc2ZpYWJsZSAgICMgNDE2Ci0gICMgICAgICAgICAgIEhUVFBFeHBlY3Rh
dGlvbkZhaWxlZCAgICAgICAgICAgICAgIyA0MTcKLSAgIyAgICAgICBIVFRQ
U2VydmVyRXJyb3IgICAgICAgICAgICAgICAgICAgICMgNXh4Ci0gICMgICAg
ICAgICAgIEhUVFBJbnRlcm5hbFNlcnZlckVycm9yICAgICAgICAgICAgIyA1
MDAKLSAgIyAgICAgICAgICAgSFRUUE5vdEltcGxlbWVudGVkICAgICAgICAg
ICAgICAgICAjIDUwMQotICAjICAgICAgICAgICBIVFRQQmFkR2F0ZXdheSAg
ICAgICAgICAgICAgICAgICAgICMgNTAyCi0gICMgICAgICAgICAgIEhUVFBT
ZXJ2aWNlVW5hdmFpbGFibGUgICAgICAgICAgICAgIyA1MDMKLSAgIyAgICAg
ICAgICAgSFRUUEdhdGV3YXlUaW1lT3V0ICAgICAgICAgICAgICAgICAjIDUw
NAotICAjICAgICAgICAgICBIVFRQVmVyc2lvbk5vdFN1cHBvcnRlZCAgICAg
ICAgICAgICMgNTA1CisgICMgICBOZXQ6OkhUVFA6OlByb3h5KHByb3h5X2Fk
ZHIsIHByb3h5X3BvcnQpLnN0YXJ0KCd3d3cuZXhhbXBsZS5jb20nKSB7fGh0
dHB8CisgICMgICAgICMgYWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5h
ZGRyOjgwODAKKyAgIyAgIH0KKyAgIworICAjIE5ldDo6SFRUUDo6UHJveHkg
cmV0dXJucyBhIE5ldDo6SFRUUCBpbnN0YW5jZSB3aGVuIHByb3h5X2FkZHIg
aXMgbmlsIHNvCisgICMgdGhlcmUgaXMgbm8gbmVlZCBmb3IgY29uZGl0aW9u
YWwgY29kZS4KKyAgIworICAjIFNlZSBOZXQ6OkhUVFA6OlByb3h5IGZvciBm
dXJ0aGVyIGRldGFpbHMgYW5kIGV4YW1wbGVzIHN1Y2ggYXMgcHJveGllcyB0
aGF0CisgICMgcmVxdWlyZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4KKyAg
IworICAjID09IFNpbXBsZSBFeGFtcGxlcworICAjCisgICMgVGhlIE5ldDo6
SFRUUCBtZXRob2RzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgZG8gbm90
IHBlcnNpc3QKKyAgIyBjb25uZWN0aW9ucy4gIFRoZXkgYXJlIG5vdCByZWNv
bW1lbmRlZCBpZiB5b3UgYXJlIHBlcmZvcm1pbmcgbWFueSBIVFRQCisgICMg
cmVxdWVzdHMuCisgICMKKyAgIyA9PT0gR0VUCisgICMKKyAgIyAgIE5ldDo6
SFRUUC5nZXQoJ2V4YW1wbGUuY29tJywgJy9pbmRleC5odG1sJykgIyA9PiBT
dHJpbmcKKyAgIworICAjID09PSBHRVQgYnkgVVJJCisgICMKKyAgIyAgIHVy
aSA9IFVSSS5wYXJzZSgnaHR0cDovL2V4YW1wbGUuY29tL2luZGV4Lmh0bWw/
Y291bnQ9MTAnKQorICAjICAgTmV0OjpIVFRQLmdldCh1cmkpICMgPT4gU3Ry
aW5nCisgICMKKyAgIyA9PT0gR0VUIHdpdGggRHluYW1pYyBQYXJhbWV0ZXJz
CisgICMKKyAgIyAgIHVyaSA9IFVSSS5wYXJzZSgnaHR0cDovL2V4YW1wbGUu
Y29tL2luZGV4Lmh0bWwnKQorICAjICAgcGFyYW1zID0geyA6bGltaXQgPT4g
MTAsIDpwYWdlID0+IDMgfQorICAjICAgdXJpLnF1ZXJ5ID0gVVJJLmVuY29k
ZV93d3dfZm9ybShwYXJhbXMpCisgICMKKyAgIyAgIHJlcyA9IE5ldDo6SFRU
UC5nZXRfcmVzcG9uc2UodXJpKQorICAjICAgcHV0cyByZXMuYm9keSBpZiBy
ZXMuaXNfYT8oTmV0OjpIVFRQU3VjY2VzcykKKyAgIworICAjID09PSBQT1NU
CisgICMKKyAgIyAgIHVyaSA9IFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFt
cGxlLmNvbS9zZWFyY2guY2dpJykKKyAgIyAgIHJlcyA9IE5ldDo6SFRUUC5w
b3N0X2Zvcm0odXJpLCAncScgPT4gJ3J1YnknLCAnbWF4JyA9PiAnNTAnKQor
ICAjICAgcHV0cyByZXMuYm9keQorICAjCisgICMgPT09IFBPU1Qgd2l0aCBN
dWx0aXBsZSBWYWx1ZXMKKyAgIworICAjICAgdXJpID0gVVJJLnBhcnNlKCdo
dHRwOi8vd3d3LmV4YW1wbGUuY29tL3NlYXJjaC5jZ2knKQorICAjICAgcmVz
ID0gTmV0OjpIVFRQLnBvc3RfZm9ybSh1cmksICdxJyA9PiBbJ3J1YnknLCAn
cGVybCddLCAnbWF4JyA9PiAnNTAnKQorICAjICAgcHV0cyByZXMuYm9keQor
ICAjCisgICMgPT0gSFRUUCBSZXF1ZXN0IENsYXNzZXMKKyAgIworICAjIEhl
cmUgaXMgdGhlIEhUVFAgcmVxdWVzdCBjbGFzcyBoaWVyYXJjaHkuCisgICMK
KyAgIyAqIE5ldDo6SFRUUFJlcXVlc3QKKyAgIyAgICogTmV0OjpIVFRQOjpH
ZXQKKyAgIyAgICogTmV0OjpIVFRQOjpIZWFkCisgICMgICAqIE5ldDo6SFRU
UDo6UG9zdAorICAjICAgKiBOZXQ6OkhUVFA6OlB1dAorICAjICAgKiBOZXQ6
OkhUVFA6OlByb3BwYXRjaAorICAjICAgKiBOZXQ6OkhUVFA6OkxvY2sKKyAg
IyAgICogTmV0OjpIVFRQOjpVbmxvY2sKKyAgIyAgICogTmV0OjpIVFRQOjpP
cHRpb25zCisgICMgICAqIE5ldDo6SFRUUDo6UHJvcGZpbmQKKyAgIyAgICog
TmV0OjpIVFRQOjpEZWxldGUKKyAgIyAgICogTmV0OjpIVFRQOjpNb3ZlCisg
ICMgICAqIE5ldDo6SFRUUDo6Q29weQorICAjICAgKiBOZXQ6OkhUVFA6Ok1r
Y29sCisgICMgICAqIE5ldDo6SFRUUDo6VHJhY2UKKyAgIworICAjID09IEhU
VFAgUmVzcG9uc2UgQ2xhc3NlcworICAjCisgICMgSGVyZSBpcyBIVFRQIHJl
c3BvbnNlIGNsYXNzIGhpZXJhcmNoeS4gIEFsbCBjbGFzc2VzIGFyZSBkZWZp
bmVkIGluIE5ldAorICAjIG1vZHVsZSBhbmQgYXJlIHN1YmNsYXNzZXMgb2Yg
TmV0OjpIVFRQUmVzcG9uc2UuCisgICMKKyAgIyBIVFRQVW5rbm93blJlc3Bv
bnNlOjogRm9yIHVuaGFuZGxlZCBIVFRQIGV4dGVuZW5zaW9ucworICAjIEhU
VFBJbmZvcm1hdGlvbjo6ICAgICAgICAgICAgICAgICAgICAxeHgKKyAgIyAg
IEhUVFBDb250aW51ZTo6ICAgICAgICAgICAgICAgICAgICAgICAgMTAwCisg
ICMgICBIVFRQU3dpdGNoUHJvdG9jb2w6OiAgICAgICAgICAgICAgICAgIDEw
MQorICAjIEhUVFBTdWNjZXNzOjogICAgICAgICAgICAgICAgICAgICAgICAy
eHgKKyAgIyAgIEhUVFBPSzo6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjAwCisgICMgICBIVFRQQ3JlYXRlZDo6ICAgICAgICAgICAgICAgICAg
ICAgICAgIDIwMQorICAjICAgSFRUUEFjY2VwdGVkOjogICAgICAgICAgICAg
ICAgICAgICAgICAyMDIKKyAgIyAgIEhUVFBOb25BdXRob3JpdGF0aXZlSW5m
b3JtYXRpb246OiAgICAgMjAzCisgICMgICBIVFRQTm9Db250ZW50OjogICAg
ICAgICAgICAgICAgICAgICAgIDIwNAorICAjICAgSFRUUFJlc2V0Q29udGVu
dDo6ICAgICAgICAgICAgICAgICAgICAyMDUKKyAgIyAgIEhUVFBQYXJ0aWFs
Q29udGVudDo6ICAgICAgICAgICAgICAgICAgMjA2CisgICMgSFRUUFJlZGly
ZWN0aW9uOjogICAgICAgICAgICAgICAgICAgIDN4eAorICAjICAgSFRUUE11
bHRpcGxlQ2hvaWNlOjogICAgICAgICAgICAgICAgICAzMDAKKyAgIyAgIEhU
VFBNb3ZlZFBlcm1hbmVudGx5OjogICAgICAgICAgICAgICAgMzAxCisgICMg
ICBIVFRQRm91bmQ6OiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMgor
ICAjICAgSFRUUFNlZU90aGVyOjogICAgICAgICAgICAgICAgICAgICAgICAz
MDMKKyAgIyAgIEhUVFBOb3RNb2RpZmllZDo6ICAgICAgICAgICAgICAgICAg
ICAgMzA0CisgICMgICBIVFRQVXNlUHJveHk6OiAgICAgICAgICAgICAgICAg
ICAgICAgIDMwNQorICAjICAgSFRUUFRlbXBvcmFyeVJlZGlyZWN0OjogICAg
ICAgICAgICAgICAzMDcKKyAgIyBIVFRQQ2xpZW50RXJyb3I6OiAgICAgICAg
ICAgICAgICAgICAgNHh4CisgICMgICBIVFRQQmFkUmVxdWVzdDo6ICAgICAg
ICAgICAgICAgICAgICAgIDQwMAorICAjICAgSFRUUFVuYXV0aG9yaXplZDo6
ICAgICAgICAgICAgICAgICAgICA0MDEKKyAgIyAgIEhUVFBQYXltZW50UmVx
dWlyZWQ6OiAgICAgICAgICAgICAgICAgNDAyCisgICMgICBIVFRQRm9yYmlk
ZGVuOjogICAgICAgICAgICAgICAgICAgICAgIDQwMworICAjICAgSFRUUE5v
dEZvdW5kOjogICAgICAgICAgICAgICAgICAgICAgICA0MDQKKyAgIyAgIEhU
VFBNZXRob2ROb3RBbGxvd2VkOjogICAgICAgICAgICAgICAgNDA1CisgICMg
ICBIVFRQTm90QWNjZXB0YWJsZTo6ICAgICAgICAgICAgICAgICAgIDQwNgor
ICAjICAgSFRUUFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo6ICAgICA0
MDcKKyAgIyAgIEhUVFBSZXF1ZXN0VGltZU91dDo6ICAgICAgICAgICAgICAg
ICAgNDA4CisgICMgICBIVFRQQ29uZmxpY3Q6OiAgICAgICAgICAgICAgICAg
ICAgICAgIDQwOQorICAjICAgSFRUUEdvbmU6OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0MTAKKyAgIyAgIEhUVFBMZW5ndGhSZXF1aXJlZDo6ICAg
ICAgICAgICAgICAgICAgNDExCisgICMgICBIVFRQUHJlY29uZGl0aW9uRmFp
bGVkOjogICAgICAgICAgICAgIDQxMgorICAjICAgSFRUUFJlcXVlc3RFbnRp
dHlUb29MYXJnZTo6ICAgICAgICAgICA0MTMKKyAgIyAgIEhUVFBSZXF1ZXN0
VVJJVG9vTG9uZzo6ICAgICAgICAgICAgICAgNDE0CisgICMgICBIVFRQVW5z
dXBwb3J0ZWRNZWRpYVR5cGU6OiAgICAgICAgICAgIDQxNQorICAjICAgSFRU
UFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGU6OiAgICA0MTYKKyAgIyAg
IEhUVFBFeHBlY3RhdGlvbkZhaWxlZDo6ICAgICAgICAgICAgICAgNDE3Cisg
ICMgSFRUUFNlcnZlckVycm9yOjogICAgICAgICAgICAgICAgICAgIDV4eAor
ICAjICAgSFRUUEludGVybmFsU2VydmVyRXJyb3I6OiAgICAgICAgICAgICA1
MDAKKyAgIyAgIEhUVFBOb3RJbXBsZW1lbnRlZDo6ICAgICAgICAgICAgICAg
ICAgNTAxCisgICMgICBIVFRQQmFkR2F0ZXdheTo6ICAgICAgICAgICAgICAg
ICAgICAgIDUwMgorICAjICAgSFRUUFNlcnZpY2VVbmF2YWlsYWJsZTo6ICAg
ICAgICAgICAgICA1MDMKKyAgIyAgIEhUVFBHYXRld2F5VGltZU91dDo6ICAg
ICAgICAgICAgICAgICAgNTA0CisgICMgICBIVFRQVmVyc2lvbk5vdFN1cHBv
cnRlZDo6ICAgICAgICAgICAgIDUwNQorICAjCisgICMgVGhlcmUgaXMgYWxz
byB0aGUgTmV0OjpIVFRQQmFkUmVzcG9uc2UgZXhjZXB0aW9uIHdoaWNoIGlz
IHJhaXNlZCB3aGVuCisgICMgdGhlcmUgaXMgYSBwcm90b2NvbCBlcnJvci4K
ICAgIwogICAjID09IFN3aXRjaGluZyBOZXQ6OkhUVFAgdmVyc2lvbnMKICAg
IwotICAjIFlvdSBjYW4gdXNlIG5ldC9odHRwLnJiIDEuMSBmZWF0dXJlcyAo
YnVuZGxlZCB3aXRoIFJ1YnkgMS42KQotICAjIGJ5IGNhbGxpbmcgSFRUUC52
ZXJzaW9uXzFfMS4gQ2FsbGluZyBOZXQ6OkhUVFAudmVyc2lvbl8xXzIKLSAg
IyBhbGxvd3MgeW91IHRvIHVzZSAxLjIgZmVhdHVyZXMgYWdhaW4uCisgICMg
WW91IGNhbiB1c2UgbmV0L2h0dHAucmIgMS4xIGZlYXR1cmVzIChidW5kbGVk
IHdpdGggUnVieSAxLjYpIGJ5IGNhbGxpbmcKKyAgIyBIVFRQLnZlcnNpb25f
MV8xLiBDYWxsaW5nIE5ldDo6SFRUUC52ZXJzaW9uXzFfMiBhbGxvd3MgeW91
IHRvIHVzZSAxLjIKKyAgIyBmZWF0dXJlcyBhZ2Fpbi4gIERvIG5vdCBjb25m
dXNlIHRoaXMgd2l0aCBIVFRQIHByb3RvY29sIGZlYXR1cmVzLgogICAjCi0g
ICMgICAgICMgZXhhbXBsZQotICAjICAgICBOZXQ6OkhUVFAuc3RhcnQge3xo
dHRwMXwgLi4uKGh0dHAxIGhhcyAxLjIgZmVhdHVyZXMpLi4uIH0KKyAgIyAg
ICMgZXhhbXBsZQorICAjICAgTmV0OjpIVFRQLnN0YXJ0IHt8aHR0cDF8IC4u
LihodHRwMSBoYXMgMS4yIGZlYXR1cmVzKS4uLiB9CiAgICMKLSAgIyAgICAg
TmV0OjpIVFRQLnZlcnNpb25fMV8xCi0gICMgICAgIE5ldDo6SFRUUC5zdGFy
dCB7fGh0dHAyfCAuLi4oaHR0cDIgaGFzIDEuMSBmZWF0dXJlcykuLi4gfQor
ICAjICAgTmV0OjpIVFRQLnZlcnNpb25fMV8xCisgICMgICBOZXQ6OkhUVFAu
c3RhcnQge3xodHRwMnwgLi4uKGh0dHAyIGhhcyAxLjEgZmVhdHVyZXMpLi4u
IH0KICAgIwotICAjICAgICBOZXQ6OkhUVFAudmVyc2lvbl8xXzIKLSAgIyAg
ICAgTmV0OjpIVFRQLnN0YXJ0IHt8aHR0cDN8IC4uLihodHRwMyBoYXMgMS4y
IGZlYXR1cmVzKS4uLiB9CisgICMgICBOZXQ6OkhUVFAudmVyc2lvbl8xXzIK
KyAgIyAgIE5ldDo6SFRUUC5zdGFydCB7fGh0dHAzfCAuLi4oaHR0cDMgaGFz
IDEuMiBmZWF0dXJlcykuLi4gfQogICAjCiAgICMgU3dpdGNoaW5nIHZlcnNp
b25zIGlzIE5PVCB0aHJlYWQtc2FmZS4KICAgIwpAQCAtNTczLDE1ICs2Nzcs
MTUgQEAgbW9kdWxlIE5ldCAgICM6bm9kb2M6CiAKICAgICBhdHRyX2FjY2Vz
c29yIDpjbG9zZV9vbl9lbXB0eV9yZXNwb25zZQogCi0gICAgIyByZXR1cm5z
IHRydWUgaWYgdXNlIFNTTC9UTFMgd2l0aCBIVFRQLgorICAgICMgcmV0dXJu
cyB0cnVlIGlmIHRoaXMgc2Vzc2lvbiB3aWxsIHVzZSBTU0wgb3IgVExTLgog
ICAgIGRlZiB1c2Vfc3NsPwogICAgICAgQHVzZV9zc2wKICAgICBlbmQKIAog
ICAgICMgVHVybiBvbi9vZmYgU1NMLgotICAgICMgVGhpcyBmbGFnIG11c3Qg
YmUgc2V0IGJlZm9yZSBzdGFydGluZyBzZXNzaW9uLgotICAgICMgSWYgeW91
IGNoYW5nZSB1c2Vfc3NsIHZhbHVlIGFmdGVyIHNlc3Npb24gc3RhcnRlZCwK
LSAgICAjIGEgTmV0OjpIVFRQIG9iamVjdCByYWlzZXMgSU9FcnJvci4KKyAg
ICAjCisgICAgIyBUaGlzIGZsYWcgbXVzdCBiZSBzZXQgYmVmb3JlIHN0YXJ0
aW5nIGEgc2Vzc2lvbi4gIElmIHlvdSBjaGFuZ2UgdXNlX3NzbAorICAgICMg
dmFsdWUgYWZ0ZXIgc2Vzc2lvbiBzdGFydGVkLCBhIE5ldDo6SFRUUCBvYmpl
Y3QgcmFpc2VzIElPRXJyb3IuCiAgICAgZGVmIHVzZV9zc2w9KGZsYWcpCiAg
ICAgICBmbGFnID0gKGZsYWcgPyB0cnVlIDogZmFsc2UpCiAgICAgICBpZiBz
dGFydGVkPyBhbmQgQHVzZV9zc2wgIT0gZmxhZwpAQCAtNTk0LDkgKzY5OCw0
OSBAQCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKICAgICAgIHNzbF92ZXJzaW9u
IGtleSBjZXJ0IGNhX2ZpbGUgY2FfcGF0aCBjZXJ0X3N0b3JlIGNpcGhlcnMK
ICAgICAgIHZlcmlmeV9tb2RlIHZlcmlmeV9jYWxsYmFjayB2ZXJpZnlfZGVw
dGggc3NsX3RpbWVvdXQKICAgICApCi0gICAgYXR0cl9hY2Nlc3NvcigqU1NM
X0FUVFJJQlVURVMpCiAKLSAgICAjIHJldHVybiB0aGUgWC41MDkgY2VydGlm
aWNhdGVzIHRoZSBzZXJ2ZXIgcHJlc2VudGVkLgorICAgICMgU2V0cyBwYXRo
IG9mIGEgQ0EgY2VydGlmaWNhdGlvbiBmaWxlIGluIFBFTSBmb3JtYXQuCisg
ICAgIworICAgICMgVGhlIGZpbGUgY2FuIGNvbnRhaW4gc2V2ZXJhbCBDQSBj
ZXJ0aWZpY2F0ZXMuCisgICAgYXR0cl9hY2Nlc3NvciA6Y2FfZmlsZQorCisg
ICAgIyBTZXRzIHBhdGggb2YgYSBDQSBjZXJ0aWZpY2F0aW9uIGRpcmVjdG9y
eSBjb250YWluaW5nIGNlcnRpZmljYXRpb25zIGluCisgICAgIyBQRU0gZm9y
bWF0LgorICAgIGF0dHJfYWNjZXNzb3IgOmNhX3BhdGgKKworICAgICMgU2V0
cyBhbiBPcGVuU1NMOjpYNTA5OjpDZXJ0aWZpY2F0ZSBvYmplY3QgYXMgY2xp
ZW50IGNlcnRpZmljYXRlLgorICAgICMgKFRoaXMgbWV0aG9kIGlzIGFwcGVh
cmVkIGluIE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uKS4KKyAg
ICBhdHRyX2FjY2Vzc29yIDpjZXJ0CisKKyAgICAjIFNldHMgdGhlIFg1MDk6
OlN0b3JlIHRvIHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlLgorICAgIGF0dHJf
YWNjZXNzb3IgOmNlcnRfc3RvcmUKKworICAgICMgU2V0cyB0aGUgYXZhaWxh
YmxlIGNpcGhlcnMuICBTZWUgT3BlblNTTDo6U1NMOjpTU0xDb250ZXh0I2Np
cGhlcnM9CisgICAgYXR0cl9hY2Nlc3NvciA6Y2lwaGVycworCisgICAgIyBT
ZXRzIGFuIE9wZW5TU0w6OlBLZXk6OlJTQSBvciBPcGVuU1NMOjpQS2V5OjpE
U0Egb2JqZWN0LgorICAgICMgKFRoaXMgbWV0aG9kIGlzIGFwcGVhcmVkIGlu
IE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uLikKKyAgICBhdHRy
X2FjY2Vzc29yIDprZXkKKworICAgICMgU2V0cyB0aGUgU1NMIHRpbWVvdXQg
c2Vjb25kcy4KKyAgICBhdHRyX2FjY2Vzc29yIDpzc2xfdGltZW91dAorCisg
ICAgIyBTZXRzIHRoZSBTU0wgdmVyc2lvbi4gIFNlZSBPcGVuU1NMOjpTU0w6
OlNTTENvbnRleHQjc3NsX3ZlcnNpb249CisgICAgYXR0cl9hY2Nlc3NvciA6
c3NsX3ZlcnNpb24KKworICAgICMgU2V0cyB0aGUgdmVyaWZ5IGNhbGxiYWNr
IGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9uLgor
ICAgIGF0dHJfYWNjZXNzb3IgOnZlcmlmeV9jYWxsYmFjaworCisgICAgIyBT
ZXRzIHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgY2VydGlmaWNhdGUgY2hh
aW4gdmVyaWZpY2F0aW9uLgorICAgIGF0dHJfYWNjZXNzb3IgOnZlcmlmeV9k
ZXB0aAorCisgICAgIyBTZXRzIHRoZSBmbGFncyBmb3Igc2VydmVyIHRoZSBj
ZXJ0aWZpY2F0aW9uIHZlcmlmaWNhdGlvbiBhdCBiZWdpbm5pbmcgb2YKKyAg
ICAjIFNTTC9UTFMgc2Vzc2lvbi4KKyAgICAjCisgICAgIyBPcGVuU1NMOjpT
U0w6OlZFUklGWV9OT05FIG9yIE9wZW5TU0w6OlNTTDo6VkVSSUZZX1BFRVIg
YXJlIGFjY2VwdGFibGUuCisgICAgYXR0cl9hY2Nlc3NvciA6dmVyaWZ5X21v
ZGUKKworICAgICMgUmV0dXJucyB0aGUgWC41MDkgY2VydGlmaWNhdGVzIHRo
ZSBzZXJ2ZXIgcHJlc2VudGVkLgogICAgIGRlZiBwZWVyX2NlcnQKICAgICAg
IGlmIG5vdCB1c2Vfc3NsPyBvciBub3QgQHNvY2tldAogICAgICAgICByZXR1
cm4gbmlsCkBAIC03MDksMTkgKzg1MywzNyBAQCBtb2R1bGUgTmV0ICAgIzpu
b2RvYzoKICAgICBAcHJveHlfcGFzcyA9IG5pbAogCiAgICAgIyBDcmVhdGVz
IGFuIEhUVFAgcHJveHkgY2xhc3MuCisgICAgIwogICAgICMgQXJndW1lbnRz
IGFyZSBhZGRyZXNzL3BvcnQgb2YgcHJveHkgaG9zdCBhbmQgdXNlcm5hbWUv
cGFzc3dvcmQKLSAgICAjIGlmIGF1dGhvcml6YXRpb24gb24gcHJveHkgc2Vy
dmVyIGlzIHJlcXVpcmVkLgorICAgICMgaWYgYXV0aG9yaXphdGlvbiBvbiBw
cm94eSBzZXJ2ZXIgaXMgcmVxdWlyZWQuICBUaGUgcHJveHkgd2lsbCB1c2Ug
dGhlCisgICAgIyAjZGVmYXVsdF9wb3J0IGlmIG5vIHByb3h5IHBvcnQgaXMg
cHJvdmlkZWQuCisgICAgIwogICAgICMgWW91IGNhbiByZXBsYWNlIHRoZSBI
VFRQIGNsYXNzIHdpdGggY3JlYXRlZCBwcm94eSBjbGFzcy4KICAgICAjCiAg
ICAgIyBJZiBBRERSRVNTIGlzIG5pbCwgdGhpcyBtZXRob2QgcmV0dXJucyBz
ZWxmIChOZXQ6OkhUVFApLgogICAgICMKLSAgICAjICAgICAjIEV4YW1wbGUK
LSAgICAjICAgICBwcm94eV9jbGFzcyA9IE5ldDo6SFRUUDo6UHJveHkoJ3By
b3h5LmV4YW1wbGUuY29tJywgODA4MCkKLSAgICAjICAgICAgICAgICAgICAg
ICAgICAgOgotICAgICMgICAgIHByb3h5X2NsYXNzLnN0YXJ0KCd3d3cucnVi
eS1sYW5nLm9yZycpIHt8aHR0cHwKLSAgICAjICAgICAgICMgY29ubmVjdGlu
ZyBwcm94eS5mb28ub3JnOjgwODAKLSAgICAjICAgICAgICAgICAgICAgICAg
ICAgOgotICAgICMgICAgIH0KKyAgICAjICAgIyBFeGFtcGxlCisgICAgIyAg
IHByb3h5X2NsYXNzID0gTmV0OjpIVFRQOjpQcm94eSgncHJveHkuZXhhbXBs
ZS5jb20nLCA4MDgwKQorICAgICMKKyAgICAjICAgcHJveHlfY2xhc3Muc3Rh
cnQoJ3d3dy5ydWJ5LWxhbmcub3JnJykge3xodHRwfAorICAgICMgICAgICMg
Y29ubmVjdGluZyBwcm94eS5mb28ub3JnOjgwODAKKyAgICAjICAgfQorICAg
ICMKKyAgICAjIFlvdSBtYXkgdXNlIHRoZW0gdG8gd29yayB3aXRoIGF1dGhv
cml6YXRpb24tZW5hYmxlZCBwcm94aWVzOgorICAgICMKKyAgICAjICAgcHJv
eHlfaG9zdCA9ICd5b3VyLnByb3h5LmV4YW1wbGUnCisgICAgIyAgIHByb3h5
X3BvcnQgPSA4MDgwCisgICAgIyAgIHVyaSA9IFVSSS5wYXJzZShFTlZbJ0hU
VFBfUFJPWFknXSkKKyAgICAjICAgcHJveHlfdXNlciwgcHJveHlfcGFzcyA9
IHVyaS51c2VyaW5mby5zcGxpdCgvOi8pIGlmIHVyaS51c2VyaW5mbworICAg
ICMKKyAgICAjICAgcHJveHkgPSBOZXQ6OkhUVFA6OlByb3h5KHByb3h5X2hv
c3QsIHByb3h5X3BvcnQsIHByb3h5X3VzZXIsIHByb3h5X3Bhc3MpCisgICAg
IyAgIHByb3h5LnN0YXJ0KCd3d3cuZXhhbXBsZS5jb20nKSB7IHxodHRwfAor
ICAgICMgICAgICMgYWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5leGFt
cGxlOjgwODAgdXNpbmcgc3BlY2lmaWVkIHVzZXJuYW1lCisgICAgIyAgICAg
IyBhbmQgcGFzc3dvcmQKKyAgICAjICAgfQorICAgICMKKyAgICAjIE5vdGUg
dGhhdCBuZXQvaHR0cCBkb2VzIG5vdCB1c2UgdGhlIEhUVFBfUFJPWFkgZW52
aXJvbm1lbnQgdmFyaWFibGUuCisgICAgIyBJZiB5b3Ugd2FudCB0byB1c2Ug
YSBwcm94eSwgeW91IG11c3Qgc2V0IGl0IGV4cGxpY2l0bHkuCiAgICAgIwog
ICAgIGRlZiBIVFRQLlByb3h5KHBfYWRkciwgcF9wb3J0ID0gbmlsLCBwX3Vz
ZXIgPSBuaWwsIHBfcGFzcyA9IG5pbCkKICAgICAgIHJldHVybiBzZWxmIHVu
bGVzcyBwX2FkZHIKQEAgLTE1ODMsOSArMTc0NSw5IEBAIG1vZHVsZSBOZXQg
ICAjOm5vZG9jOgogCiAgICAgYWxpYXMgY29udGVudF90eXBlPSBzZXRfY29u
dGVudF90eXBlCiAKLSAgICAjIFNldCBoZWFkZXIgZmllbGRzIGFuZCBhIGJv
ZHkgZnJvbSBIVE1MIGZvcm0gZGF0YS4KLSAgICAjICtwYXJhbXMrIHNob3Vs
ZCBiZSBhIEhhc2ggY29udGFpbmluZyBIVE1MIGZvcm0gZGF0YS4KLSAgICAj
IE9wdGlvbmFsIGFyZ3VtZW50ICtzZXArIG1lYW5zIGRhdGEgcmVjb3JkIHNl
cGFyYXRvci4KKyAgICAjIFNldCBoZWFkZXIgZmllbGRzIGFuZCBhIGJvZHkg
ZnJvbSBIVE1MIGZvcm0gZGF0YS4gICtwYXJhbXMrIHNob3VsZCBiZSBhCisg
ICAgIyBIYXNoIGNvbnRhaW5pbmcgSFRNTCBmb3JtIGRhdGEuICBPcHRpb25h
bCBhcmd1bWVudCArc2VwKyBtZWFucyBkYXRhCisgICAgIyByZWNvcmQgc2Vw
YXJhdG9yLgogICAgICMKICAgICAjIFRoaXMgbWV0aG9kIGFsc28gc2V0IENv
bnRlbnQtVHlwZTogaGVhZGVyIGZpZWxkIHRvCiAgICAgIyBhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQuCkBAIC0xOTg3LDcgKzIxNDksNyBA
QCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKICAgIyAgICAgeHh4ICAgICAgICBI
VFRQVW5rbm93blJlc3BvbnNlCiAgICMKICAgY2xhc3MgSFRUUFJlc3BvbnNl
Ci0gICAgIyB0cnVlIGlmIHRoZSByZXNwb25zZSBoYXMgYm9keS4KKyAgICAj
IHRydWUgaWYgdGhlIHJlc3BvbnNlIGhhcyBhIGJvZHkuCiAgICAgZGVmIEhU
VFBSZXNwb25zZS5ib2R5X3Blcm1pdHRlZD8KICAgICAgIHNlbGY6OkhBU19C
T0RZCiAgICAgZW5kCkBAIC0yMzA3LDcgKzI0NjksOSBAQCBtb2R1bGUgTmV0
ICAgIzpub2RvYzoKICAgICAgIHNlbGYuY2xhc3MKICAgICBlbmQKIAotICAg
IGRlZiBlcnJvciEgICAjOm5vZG9jOgorICAgICMgcmFpc2VzIHRoaXMgSFRU
UFJlc3BvbnNlIGFzIGl0cyBtYXRjaGluZyBleGNlcHRpb24gdHlwZS4gIE5v
dGUgdGhhdCB5b3UKKyAgICAjIG1heSBub3QgcmFpc2UgYW4gSFRUUFN1Y2Nl
c3MgcmVzcG9uc2Ugc3ViY2xhc3MuCisgICAgZGVmIGVycm9yIQogICAgICAg
cmFpc2UgZXJyb3JfdHlwZSgpLm5ldyhAY29kZSArICcgJyArIEBtZXNzYWdl
LmR1bXAsIHNlbGYpCiAgICAgZW5kCiAKSW5kZXg6IGxpYi9uZXQvaHR0cHMu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL25ldC9odHRwcy5y
YgkocmV2aXNpb24gMjk5NzYpCisrKyBsaWIvbmV0L2h0dHBzLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsOSBAQAogCiA9IG5ldC9odHRwcyAtLSBT
U0wvVExTIGVuaGFuY2VtZW50IGZvciBOZXQ6OkhUVFAuCiAKKyAgVGhpcyBm
aWxlIGhhcyBiZWVuIG1lcmdlZCB3aXRoIG5ldC9odHRwLiAgVGhlcmUgaXMg
bm8gbG9uZ2VyIGFueSBuZWVkIHRvCisgIHJlcXVpcmUgJ25ldC9odHRwcycg
dG8gdXNlIEhUVFBTLgorCiA9PSBJbmZvCiAgICdPcGVuU1NMIGZvciBSdWJ5
IDInIHByb2plY3QKICAgQ29weXJpZ2h0IChDKSAyMDAxIEdPVE9VIFl1dXpv
dSA8Z290b3l1em9Abm90d29yay5vcmc+CkBAIC0xMSw4MSArMTQsNiBAQAog
ICBUaGlzIHByb2dyYW0gaXMgbGljZW5jZWQgdW5kZXIgdGhlIHNhbWUgbGlj
ZW5jZSBhcyBSdWJ5LgogICAoU2VlIHRoZSBmaWxlICdMSUNFTkNFJy4pCiAK
LT09IEV4YW1wbGUKLQotSGVyZSBpcyBhIHNpbXBsZSBIVFRQIGNsaWVudDoK
LQotICAgIHJlcXVpcmUgJ25ldC9odHRwJwotICAgIHJlcXVpcmUgJ3VyaScK
LQotICAgIHVyaSA9IFVSSS5wYXJzZShBUkdWWzBdIHx8ICdodHRwOi8vbG9j
YWxob3N0LycpCi0gICAgaHR0cCA9IE5ldDo6SFRUUC5uZXcodXJpLmhvc3Qs
IHVyaS5wb3J0KQotICAgIGh0dHAuc3RhcnQgewotICAgICAgaHR0cC5yZXF1
ZXN0X2dldCh1cmkucGF0aCkge3xyZXN8Ci0gICAgICAgIHByaW50IHJlcy5i
b2R5Ci0gICAgICB9Ci0gICAgfQotCi1JdCBjYW4gYmUgcmVwbGFjZWQgYnkg
dGhlIGZvbGxvd2luZyBjb2RlOgotCi0gICAgcmVxdWlyZSAnbmV0L2h0dHBz
JwotICAgIHJlcXVpcmUgJ3VyaScKLQotICAgIHVyaSA9IFVSSS5wYXJzZShB
UkdWWzBdIHx8ICdodHRwczovL2xvY2FsaG9zdC8nKQotICAgIGh0dHAgPSBO
ZXQ6OkhUVFAubmV3KHVyaS5ob3N0LCB1cmkucG9ydCkKLSAgICBodHRwLnVz
ZV9zc2wgPSB0cnVlIGlmIHVyaS5zY2hlbWUgPT0gImh0dHBzIiAgIyBlbmFi
bGUgU1NML1RMUwotICAgIGh0dHAuc3RhcnQgewotICAgICAgaHR0cC5yZXF1
ZXN0X2dldCh1cmkucGF0aCkge3xyZXN8Ci0gICAgICAgIHByaW50IHJlcy5i
b2R5Ci0gICAgICB9Ci0gICAgfQotCi09PSBjbGFzcyBOZXQ6OkhUVFAKLQot
PT09IEluc3RhbmNlIE1ldGhvZHMKLQotOiB1c2Vfc3NsPwotICAgIHJldHVy
bnMgdHJ1ZSBpZiB1c2UgU1NML1RMUyB3aXRoIEhUVFAuCi0KLTogdXNlX3Nz
bD0oKHx0cnVlX29yX2ZhbHNlfCkpCi0gICAgc2V0cyB1c2Vfc3NsLgotCi06
IHBlZXJfY2VydAotICAgIHJldHVybiB0aGUgWC41MDkgY2VydGlmaWNhdGVz
IHRoZSBzZXJ2ZXIgcHJlc2VudGVkLgotCi06IGtleSwga2V5PSgofGtleXwp
KQotICAgIFNldHMgYW4gT3BlblNTTDo6UEtleTo6UlNBIG9yIE9wZW5TU0w6
OlBLZXk6OkRTQSBvYmplY3QuCi0gICAgKFRoaXMgbWV0aG9kIGlzIGFwcGVh
cmVkIGluIE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uLikKLQot
OiBjZXJ0LCBjZXJ0PSgofGNlcnR8KSkKLSAgICBTZXRzIGFuIE9wZW5TU0w6
Olg1MDk6OkNlcnRpZmljYXRlIG9iamVjdCBhcyBjbGllbnQgY2VydGlmaWNh
dGUKLSAgICAoVGhpcyBtZXRob2QgaXMgYXBwZWFyZWQgaW4gTWljaGFsIFJv
a29zJ3MgT3BlblNTTCBleHRlbnNpb24pLgotCi06IGNhX2ZpbGUsIGNhX2Zp
bGU9KCh8cGF0aHwpKQotICAgIFNldHMgcGF0aCBvZiBhIENBIGNlcnRpZmlj
YXRpb24gZmlsZSBpbiBQRU0gZm9ybWF0LgotICAgIFRoZSBmaWxlIGNhbiBj
b250cmFpbiBzZXZlcmFsIENBIGNlcnRpZmljYXRlcy4KLQotOiBjYV9wYXRo
LCBjYV9wYXRoPSgofHBhdGh8KSkKLSAgICBTZXRzIHBhdGggb2YgYSBDQSBj
ZXJ0aWZpY2F0aW9uIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRp
b25zCi0gICAgaW4gUEVNIGZvcm1hdC4KLQotOiB2ZXJpZnlfbW9kZSwgdmVy
aWZ5X21vZGU9KCh8bW9kZXwpKQotICAgIFNldHMgdGhlIGZsYWdzIGZvciBz
ZXJ2ZXIgdGhlIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9uIGF0Ci0gICAg
YmVnaW5uaW5nIG9mIFNTTC9UTFMgc2Vzc2lvbi4KLSAgICBPcGVuU1NMOjpT
U0w6OlZFUklGWV9OT05FIG9yIE9wZW5TU0w6OlNTTDo6VkVSSUZZX1BFRVIg
aXMgYWNjZXB0YWJsZS4KLQotOiB2ZXJpZnlfY2FsbGJhY2ssIHZlcmlmeV9j
YWxsYmFjaz0oKHxwcm9jfCkpCi0gICAgU2V0cyB0aGUgdmVyaWZ5IGNhbGxi
YWNrIGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9u
LgotCi06IHZlcmlmeV9kZXB0aCwgdmVyaWZ5X2RlcHRoPSgofG51bXwpKQot
ICAgIFNldHMgdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSBjZXJ0aWZpY2F0
ZSBjaGFpbiB2ZXJpZmljYXRpb24uCi0KLTogY2VydF9zdG9yZSwgY2VydF9z
dG9yZT0oKHxzdG9yZXwpKQotICAgIFNldHMgdGhlIFg1MDk6OlN0b3JlIHRv
IHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlLgotCi06IHNzbF90aW1lb3V0LCBz
c2xfdGltZW91dD0oKHxzZWN8KSkKLSAgICBTZXRzIHRoZSBTU0wgdGltZW91
dCBzZWNvbmRzLgotCiA9ZW5kCiAKIHJlcXVpcmUgJ25ldC9odHRwJwo=