From: Justin Bailey Date: 2006-07-21T07:23:57+09:00 Subject: [PATCH] - Win32 NTLM/Negotiate Authentication Support for Net::HTTP ------=_Part_15073_6697825.1153434232444 Content-Type: multipart/alternative; boundary="----=_Part_15074_28791454.1153434232445" ------=_Part_15074_28791454.1153434232445 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline These two files represent a patch which allows Net::HTTP to authenticate with a proxy server demanding NTLM/Negotiate authentication on Windows. It will authenticate as the current user. The authentication is transparent. Note that open-uri automaticaly gets support for this to. I hope the format of this patch works. I downloaded the 1_8_5_preview1 sources and took diffs against them. Two diffs are attached because two separate directories are modified. lib.patch.txt adds one file to the lib/net/http directory and modifies http.rb there. test.patch.txt adds three files to test/lib/net/http and represents unit tests for the patch. You must have a proxy server which uses NTLM/Negotiate authentication handy unfortunately. Please let me know if I can provide more information. Justin p.s. This library is also available on rubyforge as a gem - http://rubyforge.org/projects/rubysspi/ ------=_Part_15074_28791454.1153434232445 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline These two files represent a patch which allows Net::HTTP to authenticate with a proxy server demanding NTLM/Negotiate authentication on Windows. It will authenticate as the current user. The authentication is transparent. Note that open-uri automaticaly gets support for this to.

I hope the format of this patch works. I downloaded the 1_8_5_preview1 sources and took diffs against them. Two diffs are attached because two separate directories are modified.

lib.patch.txt  adds one file to the lib/net/http directory and modifies http.rb there.

test.patch.txt adds three files to test/lib/net/http and represents unit tests for the patch. You must have a proxy server which uses NTLM/Negotiate authentication handy unfortunately.

Please let me know if I can provide more information.

Justin

p.s. This library is also available on rubyforge as a gem - http://rubyforge.org/projects/rubysspi/

------=_Part_15074_28791454.1153434232445-- ------=_Part_15073_6697825.1153434232444 Content-Type: text/plain; name=lib.patch.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_epvovfwh Content-Disposition: attachment; filename="lib.patch.txt" ZGlmZiAtTnUgYzpccnVieVxsaWJccnVieVwxLjhcbmV0L2h0dHAucmIgYzpccnVieVxsaWJccnVi eVwxLjhcbmV0LjEuOC41LnByZXZpZXcxL2h0dHAucmIKLS0tIGM6XHJ1YnlcbGliXHJ1YnlcMS44 XG5ldC9odHRwLnJiCTIwMDYtMDctMjAgMTQ6MjY6NTIuMTY5MDU1NzAwIC0wNzAwCisrKyBjOlxy dWJ5XGxpYlxydWJ5XDEuOFxuZXQuMS44LjUucHJldmlldzEvaHR0cC5yYgkyMDA2LTA2LTIxIDE5 OjU0OjM4LjAwMDAwMDAwMCAtMDcwMApAQCAtMTA0MywyNSArMTA0Myw2IEBACiAgICAgICAgIGJl Z2luDQogICAgICAgICAgIHJlcyA9IEhUVFBSZXNwb25zZS5yZWFkX25ldyhAc29ja2V0KQ0KICAg ICAgICAgZW5kIHdoaWxlIHJlcy5raW5kX29mPyhIVFRQQ29udGludWUpDQotICAgICAgICAjIElm IHByb3h5IHdhcyBzcGVjaWZpZWQsIGFuZCB0aGUgc2VydmVyIGlzIGRlbWFuZGluZyBhdXRoZW50 aWNhdGlvbiwgbmVnb3RpYXRlIHdpdGggaXQNCi0gICAgICAgIGlmIHJlcy5raW5kX29mPyhIVFRQ UHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkKSAmJiBwcm94eT8gJiYgUlVCWV9QTEFURk9STS5p bmNsdWRlPygid2luMzIiKSAmJiByZXNbIlByb3h5LUF1dGhlbnRpY2F0ZSJdLmluY2x1ZGU/KCJO ZWdvdGlhdGUiKQ0KLSAgICAgICAgICByZXF1aXJlICduZXQvcnVieXNzcGknDQotICAgICAgICAg IG4gPSBTU1BJOjpOZWdvdGlhdGVBdXRoLm5ldw0KLSAgICAgICAgICByZXMucmVhZGluZ19ib2R5 KEBzb2NrZXQsIHJlcS5yZXNwb25zZV9ib2R5X3Blcm1pdHRlZD8pIHsgfQ0KLSAgICAgICAgICBy ZXFbIlByb3h5LUF1dGhvcml6YXRpb24iXSA9ICJOZWdvdGlhdGUgI3tuLmdldF9pbml0aWFsX3Rv a2VufSINCi0gICAgICAgICAgcmVxLmV4ZWMgQHNvY2tldCwgQGN1cnJfaHR0cF92ZXJzaW9uLCBl ZGl0X3BhdGgocmVxLnBhdGgpDQotICAgICAgICAgIGJlZ2luDQotICAgICAgICAgICAgcmVzID0g SFRUUFJlc3BvbnNlLnJlYWRfbmV3KEBzb2NrZXQpDQotICAgICAgICAgIGVuZCB3aGlsZSByZXMu a2luZF9vZj8oSFRUUENvbnRpbnVlKQ0KLSAgICAgICAgICBpZiByZXNbIlByb3h5LUF1dGhlbnRp Y2F0ZSJdDQotICAgICAgICAgICAgcmVzLnJlYWRpbmdfYm9keShAc29ja2V0LCByZXEucmVzcG9u c2VfYm9keV9wZXJtaXR0ZWQ/KSB7IH0NCi0gICAgICAgICAgICByZXFbIlByb3h5LUF1dGhvcml6 YXRpb24iXSA9ICJOZWdvdGlhdGUgI3tuLmNvbXBsZXRlX2F1dGhlbnRpY2F0aW9uIHJlc1siUHJv eHktQXV0aGVudGljYXRlIl19Ig0KLSAgICAgICAgICAgIHJlcS5leGVjIEBzb2NrZXQsIEBjdXJy X2h0dHBfdmVyc2lvbiwgZWRpdF9wYXRoKHJlcS5wYXRoKQ0KLSAgICAgICAgICAgIGJlZ2luDQot ICAgICAgICAgICAgICByZXMgPSBIVFRQUmVzcG9uc2UucmVhZF9uZXcoQHNvY2tldCkNCi0gICAg ICAgICAgICBlbmQgd2hpbGUgcmVzLmtpbmRfb2Y/KEhUVFBDb250aW51ZSkNCi0gICAgICAgICAg ZW5kDQotICAgICAgICBlbmQNCiAgICAgICAgIHJlcy5yZWFkaW5nX2JvZHkoQHNvY2tldCwgcmVx LnJlc3BvbnNlX2JvZHlfcGVybWl0dGVkPykgew0KICAgICAgICAgICB5aWVsZCByZXMgaWYgYmxv Y2tfZ2l2ZW4/DQogICAgICAgICB9DQpkaWZmIC1OdSBjOlxydWJ5XGxpYlxydWJ5XDEuOFxuZXQv cnVieXNzcGkucmIgYzpccnVieVxsaWJccnVieVwxLjhcbmV0LjEuOC41LnByZXZpZXcxL3J1Ynlz c3BpLnJiCi0tLSBjOlxydWJ5XGxpYlxydWJ5XDEuOFxuZXQvcnVieXNzcGkucmIJMjAwNi0wNy0y MCAxNToxMToyMi43MTg4NjMzMDAgLTA3MDAKKysrIGM6XHJ1YnlcbGliXHJ1YnlcMS44XG5ldC4x LjguNS5wcmV2aWV3MS9ydWJ5c3NwaS5yYgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAt MDgwMApAQCAtMSwzMzIgKzAsMCBAQAotIw0KLSMgPSBuZXQvcnVieXNzcGkucmINCi0jDQotIyBD b3B5cmlnaHQgKGMpIDIwMDYgSnVzdGluIEJhaWxleQ0KLSMgDQotIyBXcml0dGVuIGFuZCBtYWlu dGFpbmVkIGJ5IEp1c3RpbiBCYWlsZXkgPGpnYmFpbGV5QGdtYWlsLmNvbT4uDQotIw0KLSMgVGhp cyBsaWJyYXJ5IGltcGxlbWVudHMgYmFzaWMgc3VwcG9ydCBvbiBXaW4zMiBzeXN0ZW1zIGZvciBh dXRoZW50aWNhdGluZw0KLSMgd2l0aCBwcm94aWVzIHdoaWNoIHJlcXVpcmUgTlRMTS9OZWdvdGlh dGUgYXV0aGVudGljYXRpb24uIEl0IHdpbGwgYXV0aGVudGljYXRlDQotIyBhcyB0aGUgY3VycmVu dGx5IGxvZ2dlZCBpbiB1c2VyLiBJdCB3aWxsIG5vdCBhdXRoZW50aWNhdGUgYXMgYW4gYXJiaXRy YXJ5IHVzZXIuDQotIw0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBjYW4g cmUtZGlzdHJpYnV0ZSBhbmQvb3INCi0jIG1vZGlmeSB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHNh bWUgdGVybXMgb2YgcnVieSBpdHNlbGYgLS0tDQotIyBSdWJ5IERpc3RyaWJ1dGlvbiBMaWNlbnNl IG9yIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KLQ0KLXJlcXVpcmUgJ1dpbjMyQVBJJw0K LXJlcXVpcmUgJ2Jhc2U2NCcNCi0NCi0jIEltcGxlbWVudHMgYmluZGluZ3MgdG8gV2luMzIgU1NQ SSBmdW5jdGlvbnMsIGZvY3VzZWQgb24gYXV0aGVudGljYXRpb24gdG8gYSBwcm94eSBzZXJ2ZXIg b3ZlciBIVFRQLg0KLW1vZHVsZSBTU1BJDQotICAjIFNwZWNpZmllcyBob3cgY3JlZGVudGlhbCBz dHJ1Y3R1cmUgcmVxdWVzdGVkIHdpbGwgYmUgdXNlZC4gT25seSBTRUNQS0dfQ1JFRF9PVVRCT1VO RCBpcyB1c2VkDQotICAjIGhlcmUuDQotICBTRUNQS0dfQ1JFRF9JTkJPVU5EID0gMHgwMDAwMDAw MQ0KLSAgU0VDUEtHX0NSRURfT1VUQk9VTkQgPSAweDAwMDAwMDAyDQotICBTRUNQS0dfQ1JFRF9C T1RIID0gMHgwMDAwMDAwMw0KLQ0KLSAgIyBGb3JtYXQgb2YgdG9rZW4uIE5FVFdPUksgZm9ybWF0 IGlzIHVzZWQgaGVyZS4NCi0gIFNFQ1VSSVRZX05BVElWRV9EUkVQID0gMHgwMDAwMDAxMA0KLSAg U0VDVVJJVFlfTkVUV09SS19EUkVQID0gMHgwMDAwMDAwMA0KLQ0KLSAgIyBJbml0aWFsaXplU2Vj dXJpdHlDb250ZXh0IFJlcXVpcmVtZW50IGZsYWdzDQotICBJU0NfUkVRX1JFUExBWV9ERVRFQ1Qg PSAweDAwMDAwMDA0DQotICBJU0NfUkVRX1NFUVVFTkNFX0RFVEVDVCA9IDB4MDAwMDAwMDgNCi0g IElTQ19SRVFfQ09ORklERU5USUFMSVRZID0gMHgwMDAwMDAxMA0KLSAgSVNDX1JFUV9VU0VfU0VT U0lPTl9LRVkgPSAweDAwMDAwMDIwDQotICBJU0NfUkVRX1BST01QVF9GT1JfQ1JFRFMgPSAweDAw MDAwMDQwDQotICBJU0NfUkVRX0NPTk5FQ1RJT04gPSAweDAwMDAwODAwDQotDQotICAjIFdpbjMy IEFQSSBGdW5jdGlvbnMuIFVzZXMgV2luMzJBUEkgdG8gYmluZCBtZXRob2RzIHRvIGNvbnN0YW50 cyBjb250YWluZWQgaW4gY2xhc3MuIA0KLSAgbW9kdWxlIEFQSQ0KLSAgICAjIENhbiBiZSBjYWxs ZWQgd2l0aCBBY3F1aXJlQ3JlZGVudGlhbHNIYW5kbGUuY2FsbCgpDQotICAgIEFjcXVpcmVDcmVk ZW50aWFsc0hhbmRsZSA9IFdpbjMyQVBJLm5ldygic2VjdXIzMiIsICJBY3F1aXJlQ3JlZGVudGlh bHNIYW5kbGUiLCAncHBMcHBwcHBwJywgJ0wnKQ0KLSAgICAjIENhbiBiZSBjYWxsZWQgd2l0aCBJ bml0aWFsaXplU2VjdXJpdHlDb250ZXh0LmNhbGwoKQ0KLSAgICBJbml0aWFsaXplU2VjdXJpdHlD b250ZXh0ID0gV2luMzJBUEkubmV3KCJzZWN1cjMyIiwgIkluaXRpYWxpemVTZWN1cml0eUNvbnRl eHQiLCAncHBwTExMcExwcHBwJywgJ0wnKQ0KLSAgICAjIENhbiBiZSBjYWxsZWQgd2l0aCBEZWxl dGVTZWN1cml0eUNvbnRleHQuY2FsbCgpDQotICAgIERlbGV0ZVNlY3VyaXR5Q29udGV4dCA9IFdp bjMyQVBJLm5ldygic2VjdXIzMiIsICJEZWxldGVTZWN1cml0eUNvbnRleHQiLCAnUCcsICdMJykN Ci0gICAgIyBDYW4gYmUgY2FsbGVkIHdpdGggRnJlZUNyZWRlbnRpYWxzSGFuZGxlLmNhbGwoKQ0K LSAgICBGcmVlQ3JlZGVudGlhbHNIYW5kbGUgPSBXaW4zMkFQSS5uZXcoInNlY3VyMzIiLCAiRnJl ZUNyZWRlbnRpYWxzSGFuZGxlIiwgJ1AnLCAnTCcpDQotICBlbmQNCi0gIA0KLSAgIyBTZWNIYW5k bGUgc3RydWN0DQotICBjbGFzcyBTZWN1cml0eUhhbmRsZQ0KLSAgICBkZWYgdXBwZXINCi0gICAg ICBAc3RydWN0LnVucGFjaygiTEwiKVsxXQ0KLSAgICBlbmQNCi0gICAgDQotICAgIGRlZiBsb3dl cg0KLSAgICAgIEBzdHJ1Y3QudW5wYWNrKCJMTCIpWzBdDQotICAgIGVuZA0KLSAgICANCi0gICAg ZGVmIHRvX3ANCi0gICAgICBAc3RydWN0IHx8PSAiXDAiICogOA0KLSAgICBlbmQNCi0gIGVuZA0K LSAgDQotICAjIFNvbWUgZmFtaWxpYXIgYWxpYXNlcyBmb3IgdGhlIFNlY0hhbmRsZSBzdHJ1Y3R1 cmUNCi0gIENyZWRIYW5kbGUgPSBDdHh0SGFuZGxlID0gU2VjdXJpdHlIYW5kbGUNCi0NCi0gICMg VGltZVN0YW1wIHN0cnVjdA0KLSAgY2xhc3MgVGltZVN0YW1wDQotICAgIGF0dHJfcmVhZGVyIDpz dHJ1Y3QNCi0NCi0gICAgZGVmIHRvX3ANCi0gICAgICBAc3RydWN0IHx8PSAiXDAiICogOA0KLSAg ICBlbmQNCi0gIGVuZA0KLSAgDQotICAjIENyZWF0ZXMgYmluYXJ5IHJlcHJlc2VudGFpdG9uIG9m IGEgU2VjQnVmZmVyRGVzYyBzdHJ1Y3R1cmUsDQotICAjIGluY2x1ZGluZyB0aGUgU2VjQnVmZmVy IGNvbnRhaW5lZCBpbnNpZGUuDQotICBjbGFzcyBTZWN1cml0eUJ1ZmZlcg0KLQ0KLSAgICBTRUNC VUZGRVJfVE9LRU4gPSAyICAgIyBTZWN1cml0eSB0b2tlbg0KLSAgICANCi0gICAgVE9LRU5CVUZT SVpFID0gMTIyODgNCi0gICAgU0VDQlVGRkVSX1ZFUlNJT04gPSAwDQotDQotICAgIGRlZiBpbml0 aWFsaXplKGJ1ZmZlciA9IG5pbCkNCi0gICAgICBAYnVmZmVyID0gYnVmZmVyIHx8ICJcMCIgKiBU T0tFTkJVRlNJWkUNCi0gICAgICBAYnVmZmVyU2l6ZSA9IEBidWZmZXIubGVuZ3RoDQotICAgICAg QHR5cGUgPSBTRUNCVUZGRVJfVE9LRU4NCi0gICAgZW5kDQotICAgIA0KLSAgICBkZWYgYnVmZmVy U2l6ZQ0KLSAgICAgIHVucGFjaw0KLSAgICAgIEBidWZmZXJTaXplDQotICAgIGVuZA0KLSAgICAN Ci0gICAgZGVmIGJ1ZmZlclR5cGUNCi0gICAgICB1bnBhY2sNCi0gICAgICBAdHlwZQ0KLSAgICBl bmQNCi0gICAgDQotICAgIGRlZiB0b2tlbg0KLSAgICAgIHVucGFjaw0KLSAgICAgIEBidWZmZXIN Ci0gICAgZW5kDQotICAgIA0KLSAgICBkZWYgdG9fcA0KLSAgICAgICMgQXNzdW1wdGlvbiBpcyB0 aGF0IHdoZW4gdG9fcCBpcyBjYWxsZWQgd2UgYXJlIGdvaW5nIHRvIGdldCBhIHBhY2tlZCBzdHJ1 Y3R1cmUuIFRoZXJlZm9yZSwNCi0gICAgICAjIHNldCBAdW5wYWNrZWQgYmFjayB0byBuaWwgc28g d2Uga25vdyB0byB1bnBhY2sgd2hlbiBhY2Nlc3NvcnMgYXJlIG5leHQgYWNjZXNzZWQuDQotICAg ICAgQHVucGFja2VkID0gbmlsDQotICAgICAgIyBBc3NpZ25tZW50IG9mIGlubmVyIHN0cnVjdHVy ZSB0byB2YXJpYWJsZSBpcyB2ZXJ5IGltcG9ydGFudCBoZXJlLiBXaXRob3V0IGl0LA0KLSAgICAg ICMgd2lsbCBub3QgYmUgYWJsZSB0byB1bnBhY2sgY2hhbmdlcyB0byB0aGUgc3RydWN0dXJlLiBB bHRlcm5hdGl2ZSwgbmVzdGVkIHVucGFja3MsDQotICAgICAgIyBkb2VzIG5vdCB3b3JrIChpLmUu IEBzdHJ1Y3QudW5wYWNrKCJMTFAxMiIpWzJdLnVucGFjaygiTExQMTIiKSByZXN1bHRzIGluICJu byBhc3NvY2lhdGVkIHBvaW50ZXIiKQ0KLSAgICAgIEBzZWNfYnVmZmVyIHx8PSBbQGJ1ZmZlclNp emUsIEB0eXBlLCBAYnVmZmVyXS5wYWNrKCJMTFAiKQ0KLSAgICAgIEBzdHJ1Y3QgfHw9IFtTRUNC VUZGRVJfVkVSU0lPTiwgMSwgQHNlY19idWZmZXJdLnBhY2soIkxMUCIpICAgIA0KLSAgICBlbmQN Ci0gIA0KLSAgcHJpdmF0ZQ0KLSAgDQotICAgICMgVW5wYWNrcyB0aGUgU2VjdXJpdHlCdWZmZXJE ZXNjIHN0cnVjdHVyZSBpbnRvIG1lbWJlciB2YXJpYWJsZXMuIFdlDQotICAgICMgb25seSB3YW50 IHRvIGRvIHRoaXMgb25jZSBwZXIgc3RydWN0LCBzbyB0aGUgc3RydWN0IGlzIGRlbGV0ZWQNCi0g ICAgIyBhZnRlciB1bnBhY2tpbmcuIA0KLSAgICBkZWYgdW5wYWNrDQotICAgICAgaWYgISBAdW5w YWNrZWQgJiYgQHNlY19idWZmZXIgJiYgQHN0cnVjdA0KLSAgICAgICAgQGJ1ZmZlclNpemUsIEB0 eXBlID0gQHNlY19idWZmZXIudW5wYWNrKCJMTCIpDQotICAgICAgICBAYnVmZmVyID0gQHNlY19i dWZmZXIudW5wYWNrKCJMTFAje0BidWZmZXJTaXplfSIpWzJdDQotICAgICAgICBAc3RydWN0ID0g bmlsDQotICAgICAgICBAc2VjX2J1ZmZlciA9IG5pbA0KLSAgICAgICAgQHVucGFja2VkID0gdHJ1 ZQ0KLSAgICAgIGVuZA0KLSAgICBlbmQNCi0gIGVuZA0KLSAgDQotICAjIFNFQ19XSU5OVF9BVVRI X0lERU5USVRZIHN0cnVjdHVyZQ0KLSAgY2xhc3MgSWRlbnRpdHkNCi0gICAgU0VDX1dJTk5UX0FV VEhfSURFTlRJVFlfQU5TSSA9IDB4MQ0KLQ0KLSAgICBhdHRyX2FjY2Vzc29yIDp1c2VyLCA6ZG9t YWluLCA6cGFzc3dvcmQNCi0gICAgDQotICAgIGRlZiBpbml0aWFsaXplKHVzZXIgPSBuaWwsIGRv bWFpbiA9IG5pbCwgcGFzc3dvcmQgPSBuaWwpDQotICAgICAgQHVzZXIgPSB1c2VyDQotICAgICAg QGRvbWFpbiA9IGRvbWFpbg0KLSAgICAgIEBwYXNzd29yZCA9IHBhc3N3b3JkDQotICAgICAgQGZs YWdzID0gU0VDX1dJTk5UX0FVVEhfSURFTlRJVFlfQU5TSQ0KLSAgICBlbmQNCi0gICAgDQotICAg IGRlZiB0b19wDQotICAgICAgW0B1c2VyLCBAdXNlciA/IEB1c2VyLmxlbmd0aCA6IDAsIA0KLSAg ICAgICBAZG9tYWluLCBAZG9tYWluID8gQGRvbWFpbi5sZW5ndGggOiAwLA0KLSAgICAgICBAcGFz c3dvcmQsIEBwYXNzd29yZCA/IEBwYXNzd29yZC5sZW5ndGggOiAwLA0KLSAgICAgICBAZmxhZ3Nd LnBhY2soIlBMUExQTEwiKQ0KLSAgICBlbmQgICAgDQotICBlbmQNCi0NCi0gICMgVGFrZXMgYSBy ZXR1cm4gcmVzdWx0IGZyb20gYW4gU1NQSSBmdW5jdGlvbiBhbmQgaW50ZXJwcmV0cyB0aGUgdmFs dWUuDQotICBjbGFzcyBTU1BJUmVzdWx0IA0KLSAgICAjIEdvb2QgcmVzdWx0cw0KLSAgICBTRUNf RV9PSyA9IDB4MDAwMDAwMDANCi0gICAgU0VDX0lfQ09OVElOVUVfTkVFREVEID0gMHgwMDA5MDMx Mg0KLQ0KLSAgICAjIFRoZXNlIGFyZSBnZW5lcmFsbHkgcmV0dXJuZWQgYnkgSW5pdGlhbGl6ZVNl Y3VyaXR5Q29udGV4dA0KLSAgICBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZID0gMHg4MDA5MDMw MA0KLSAgICBTRUNfRV9JTlRFUk5BTF9FUlJPUiA9IDB4ODAwOTAzMDQNCi0gICAgU0VDX0VfSU5W QUxJRF9IQU5ETEUgPSAweDgwMDkwMzAxDQotICAgIFNFQ19FX0lOVkFMSURfVE9LRU4gPSAweDgw MDkwMzA4DQotICAgIFNFQ19FX0xPR09OX0RFTklFRCA9IDB4ODAwOTAzMEMNCi0gICAgU0VDX0Vf Tk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZID0gMHg4MDA5MDMxMQ0KLSAgICBTRUNfRV9OT19D UkVERU5USUFMUyA9IDB4ODAwOTAzMEUNCi0gICAgU0VDX0VfVEFSR0VUX1VOS05PV04gPSAweDgw MDkwMzAzDQotICAgIFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OID0gMHg4MDA5MDMwMg0KLSAg ICBTRUNfRV9XUk9OR19QUklOQ0lQQUwgPSAweDgwMDkwMzIyDQotDQotICAgICMgVGhlc2UgYXJl IGdlbmVyYWxseSByZXR1cm5lZCBieSBBY3F1aXJlQ3JlZGVudGlhbHNIYW5kbGUNCi0gICAgU0VD X0VfTk9UX09XTkVSID0gMHg4MDA5MDMwNg0KLSAgICBTRUNfRV9TRUNQS0dfTk9UX0ZPVU5EID0g MHg4MDA5MDMwNQ0KLSAgICBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTID0gMHg4MDA5MDMwRA0K LSAgICANCi0gICAgQEBtYXAgPSB7fQ0KLSAgICBjb25zdGFudHMuZWFjaCB7IHx2fCBAQG1hcFtz ZWxmLmNvbnN0X2dldCh2LnRvX3MpXSA9IHYgfQ0KLQ0KLSAgICBhdHRyX3JlYWRlciA6dmFsdWUN Ci0gICAgDQotICAgIGRlZiBpbml0aWFsaXplKHZhbHVlKQ0KLSAgICAgICMgY29udmVydCB0byB1 bnNpZ25lZCBsb25nDQotICAgICAgdmFsdWUgPSBbdmFsdWVdLnBhY2soIkwiKS51bnBhY2soIkwi KS5maXJzdA0KLSAgICAgIHJhaXNlICIje3ZhbHVlLnRvX3MoMTYpfSBpcyBub3QgYSByZWNvZ25p emVkIHJlc3VsdCIgdW5sZXNzIEBAbWFwLmhhc19rZXk/IHZhbHVlDQotICAgICAgQHZhbHVlID0g dmFsdWUNCi0gICAgZW5kDQotICAgIA0KLSAgICBkZWYgdG9fcw0KLSAgICAgIEBAbWFwW0B2YWx1 ZV0udG9fcw0KLSAgICBlbmQNCi0gICAgDQotICAgIGRlZiBvaz8NCi0gICAgICBAdmFsdWUgPT0g U0VDX0lfQ09OVElOVUVfTkVFREVEIHx8IEB2YWx1ZSA9PSBTRUNfRV9PSw0KLSAgICBlbmQNCi0g ICAgDQotICAgIGRlZiA9PShvdGhlcikNCi0gICAgICBpZiBvdGhlci5pc19hPyhTU1BJUmVzdWx0 KQ0KLSAgICAgICAgQHZhbHVlID09IG90aGVyLnZhbHVlDQotICAgICAgZWxzaWYgb3RoZXIuaXNf YT8oRml4bnVtKQ0KLSAgICAgICAgQHZhbHVlID09IEBAbWFwW290aGVyXQ0KLSAgICAgIGVsc2UN Ci0gICAgICAgIGZhbHNlDQotICAgICAgZW5kDQotICAgIGVuZA0KLSAgZW5kDQotDQotICAjIEhh bmRsZXMgIk5lZ290aWF0ZSIgdHlwZSBhdXRoZW50aWNhdGlvbi4gR2VhcmVkIHRvd2FyZHMgYXV0 aGVudGljYXRpbmcgd2l0aCBhIHByb3h5IHNlcnZlciBvdmVyIEhUVFANCi0gIGNsYXNzIE5lZ290 aWF0ZUF1dGggIA0KLSAgICBhdHRyX2FjY2Vzc29yIDpjcmVkZW50aWFscywgOmNvbnRleHQsIDpj b250ZXh0QXR0cmlidXRlcywgOnVzZXIsIDpkb21haW4NCi0NCi0gICAgIyBEZWZhdWx0IHJlcXVl c3QgZmxhZ3MgZm9yIFNTUEkgZnVuY3Rpb25zDQotICAgIFJFUVVFU1RfRkxBR1MgPSBJU0NfUkVR X0NPTkZJREVOVElBTElUWSB8IElTQ19SRVFfUkVQTEFZX0RFVEVDVCB8IElTQ19SRVFfQ09OTkVD VElPTg0KLQ0KLSAgICAjIE5UTE0gdG9rZW5zIHN0YXJ0IHdpdGggdGhpcyBoZWFkZXIgYWx3YXlz LiBFbmNvZGluZyBhbG9uZSBhZGRzICI9PSIgYW5kIG5ld2xpbmUsIHNvIHJlbW92ZSB0aG9zZQ0K LSAgICBCNjRfVE9LRU5fUFJFRklYID0gQmFzZTY0LmVuY29kZTY0KCJOVExNU1NQIikuZGVsZXRl KCI9XG4iKSAgDQotDQotICAgICMgR2l2ZW4gYSBjb25uZWN0aW9uIGFuZCBhIHJlcXVlc3QgcGF0 aCwgcGVyZm9ybXMgYXV0aGVudGljYXRpb24gYXMgdGhlIGN1cnJlbnQgdXNlciBhbmQgcmV0dXJu cw0KLSAgICAjIHRoZSByZXNwb25zZSBmcm9tIGEgR0VUIHJlcXVlc3QuIFRoZSBjb25ubmVjdGlv biBzaG91bGQgYmUgYSBOZXQ6OkhUVFAgb2JqZWN0LCBhbmQgaXQgc2hvdWxkDQotICAgICMgaGF2 ZSBiZWVuIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBOZXQ6OkhUVFAuUHJveHkgbWV0aG9kLCBidXQg YW55dGhpbmcgdGhhdCByZXNwb25kcyB0byAiZ2V0IiB3aWxsIHdvcmsuDQotICAgICMgSWYgYSB1 c2VyIGFuZCBkb21haW4gYXJlIGdpdmVuLCB3aWxsIGF1dGhlbnRpY2F0ZSBhcyB0aGUgZ2l2ZW4g dXNlci4NCi0gICAgIyBSZXR1cm5zIHRoZSByZXNwb25zZSByZWNlaXZlZCBmcm9tIHRoZSBnZXQg bWV0aG9kICh1c3VhbGx5IE5ldDo6SFRUUFJlc3BvbnNlKQ0KLSAgICBkZWYgTmVnb3RpYXRlQXV0 aC5wcm94eV9hdXRoX2dldChodHRwLCBwYXRoLCB1c2VyID0gbmlsLCBkb21haW4gPSBuaWwpDQot ICAgICAgcmFpc2UgImh0dHAgbXVzdCByZXNwb25kIHRvIDpnZXQiIHVubGVzcyBodHRwLnJlc3Bv bmRfdG8/KDpnZXQpDQotICAgICAgbmVnb19hdXRoID0gc2VsZi5uZXcgdXNlciwgZG9tYWluDQot ICAgICAgDQotICAgICAgcmVzcCA9IGh0dHAuZ2V0IHBhdGgsIHsgIlByb3h5LUF1dGhvcml6YXRp b24iID0+ICJOZWdvdGlhdGUgIiArIG5lZ29fYXV0aC5nZXRfaW5pdGlhbF90b2tlbiB9DQotICAg ICAgaWYgcmVzcFsiUHJveHktQXV0aGVudGljYXRlIl0NCi0gICAgICAgIHJlc3AgPSBodHRwLmdl dCBwYXRoLCB7ICJQcm94eS1BdXRob3JpemF0aW9uIiA9PiAiTmVnb3RpYXRlICIgKyBuZWdvX2F1 dGguY29tcGxldGVfYXV0aGVudGljYXRpb24ocmVzcFsiUHJveHktQXV0aGVudGljYXRlIl0uc3Bs aXQoIiAiKS5sYXN0LnN0cmlwKSB9DQotICAgICAgZW5kDQotDQotICAgICAgcmVzcA0KLSAgICBl bmQNCi0gICAgDQotICAgICMgQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSByZWFkeSBmb3IgYXV0aGVu dGljYXRpb24gYXMgdGhlIGdpdmVuIHVzZXIgaW4gdGhlIGdpdmVuIGRvbWFpbi4NCi0gICAgIyBE ZWZhdWx0cyB0byBjdXJyZW50IHVzZXIgYW5kIGRvbWFpbiBhcyBkZWZpbmVkIGJ5IEVOVlsiVVNF UkRPTUFJTiJdIGFuZCBFTlZbIlVTRVJOQU1FIl0gaWYNCi0gICAgIyBubyBhcmd1bWVudHMgYXJl IHN1cHBsaWVkLg0KLSAgICBkZWYgaW5pdGlhbGl6ZSh1c2VyID0gbmlsLCBkb21haW4gPSBuaWwp DQotICAgICAgaWYgdXNlci5uaWw/ICYmIGRvbWFpbi5uaWw/ICYmIEVOVlsiVVNFUk5BTUUiXS5u aWw/ICYmIEVOVlsiVVNFUkRPTUFJTiJdLm5pbD8NCi0gICAgICAgIHJhaXNlICJBIHVzZXJuYW1l IG9yIGRvbWFpbiBtdXN0IGJlIHN1cHBsaWVkIHNpbmNlIHRoZXkgY2Fubm90IGJlIHJldHJpZXZl ZCBmcm9tIHRoZSBlbnZpcm9ubWVudCINCi0gICAgICBlbmQNCi0gICAgICANCi0gICAgICBAdXNl ciA9IHVzZXIgfHwgRU5WWyJVU0VSTkFNRSJdDQotICAgICAgQGRvbWFpbiA9IGRvbWFpbiB8fCBF TlZbIlVTRVJET01BSU4iXQ0KLSAgICBlbmQNCi0NCi0gICAgIyBHZXRzIHRoZSBpbml0aWFsIE5l Z290aWF0ZSB0b2tlbi4gUmV0dXJucyBpdCBhcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBzdWl0 YWJsZSBmb3IgdXNlIGluIEhUVFAuIENhbg0KLSAgICAjIGJlIGVhc2lseSBkZWNvZGVkLCBob3dl dmVyLg0KLSAgICBkZWYgZ2V0X2luaXRpYWxfdG9rZW4NCi0gICAgICByYWlzZSAiVGhpcyBvYmpl Y3QgaXMgbm8gbG9uZ2VyIHVzYWJsZSBiZWNhdXNlIGl0cyByZXNvdXJjZXMgaGF2ZSBiZWVuIGZy ZWVkLiIgaWYgQGNsZWFuZWRfdXANCi0gICAgICBnZXRfY3JlZGVudGlhbHMNCi0NCi0gICAgICBv dXRwdXRCdWZmZXIgPSBTZWN1cml0eUJ1ZmZlci5uZXcNCi0gICAgICBAY29udGV4dCA9IEN0eHRI YW5kbGUubmV3DQotICAgICAgQGNvbnRleHRBdHRyaWJ1dGVzID0gIlwwIiAqIDQNCi0NCi0gICAg ICByZXN1bHQgPSBTU1BJUmVzdWx0Lm5ldyhBUEk6OkluaXRpYWxpemVTZWN1cml0eUNvbnRleHQu Y2FsbChAY3JlZGVudGlhbHMudG9fcCwgbmlsLCBuaWwsIA0KLSAgICAgICAgUkVRVUVTVF9GTEFH UywwLCBTRUNVUklUWV9ORVRXT1JLX0RSRVAsIG5pbCwgMCwgQGNvbnRleHQudG9fcCwgb3V0cHV0 QnVmZmVyLnRvX3AsIEBjb250ZXh0QXR0cmlidXRlcywgVGltZVN0YW1wLm5ldy50b19wKSkNCi0N Ci0gICAgICBpZiByZXN1bHQub2s/IHRoZW4NCi0gICAgICAgIHJldHVybiBlbmNvZGVfdG9rZW4o b3V0cHV0QnVmZmVyLnRva2VuKQ0KLSAgICAgIGVsc2UNCi0gICAgICAgIHJhaXNlICJFcnJvcjog I3tyZXN1bHQudG9fc30iDQotICAgICAgZW5kDQotICAgIGVuZA0KLSAgICANCi0gICAgIyBUYWtl cyBhIHRva2VuIGFuZCBnZXRzIHRoZSBuZXh0IHRva2VuIGluIHRoZSBOZWdvdGlhdGUgYXV0aGVu dGljYXRpb24gY2hhaW4uIFRva2VuIGNhbiBiZSBCYXNlNjQgZW5jb2RlZCBvciBub3QuIA0KLSAg ICAjIFRoZSB0b2tlbiBjYW4gaW5jbHVkZSB0aGUgIk5lZ290aWF0ZSIgaGVhZGVyIGFuZCBpdCB3 aWxsIGJlIHN0cmlwcGVkLg0KLSAgICAjIERvZXMgbm90IGluZGljYXRlIGlmIFNFQ19JX0NPTlRJ TlVFIG9yIFNFQ19FX09LIHdhcyByZXR1cm5lZC4NCi0gICAgIyBUb2tlbiByZXR1cm5lZCBpcyBC YXNlNjQgZW5jb2RlZCB3LyBhbGwgbmV3IGxpbmVzIHJlbW92ZWQuDQotICAgIGRlZiBjb21wbGV0 ZV9hdXRoZW50aWNhdGlvbih0b2tlbikNCi0gICAgICByYWlzZSAiVGhpcyBvYmplY3QgaXMgbm8g bG9uZ2VyIHVzYWJsZSBiZWNhdXNlIGl0cyByZXNvdXJjZXMgaGF2ZSBiZWVuIGZyZWVkLiIgaWYg QGNsZWFuZWRfdXANCi0NCi0gICAgICAjIE5pbCB0b2tlbiBPSywganVzdCBzZXQgaXQgdG8gZW1w dHkgc3RyaW5nICAgICAgDQotICAgICAgdG9rZW4gPSAiIiBpZiB0b2tlbi5uaWw/DQotDQotICAg ICAgaWYgdG9rZW4uaW5jbHVkZT8gIk5lZ290aWF0ZSINCi0gICAgICAgICMgSWYgdGhlIE5lZ290 aWF0ZSBwcmVmaXggaXMgcGFzc2VkIGluLCBhc3N1bWUgd2UgYXJlIHNlZWluZyAiTmVnb3RpYXRl IDx0b2tlbj4iIGFuZCBnZXQgdGhlIHRva2VuLg0KLSAgICAgICAgdG9rZW4gPSB0b2tlbi5zcGxp dCgiICIpLmxhc3QNCi0gICAgICBlbmQNCi0NCi0gICAgICBpZiB0b2tlbi5pbmNsdWRlPyBCNjRf VE9LRU5fUFJFRklYIA0KLSAgICAgICAgIyBpbmRpY2F0ZXMgYmFzZTY0IGVuY29kZWQgdG9rZW4N Ci0gICAgICAgIHRva2VuID0gQmFzZTY0LmRlY29kZTY0KHRva2VuLnN0cmlwKQ0KLSAgICAgIGVu ZA0KLSAgICAgIA0KLSAgICAgIG91dHB1dEJ1ZmZlciA9IFNlY3VyaXR5QnVmZmVyLm5ldw0KLSAg ICAgIHJlc3VsdCA9IFNTUElSZXN1bHQubmV3KEFQSTo6SW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4 dC5jYWxsKEBjcmVkZW50aWFscy50b19wLCBAY29udGV4dC50b19wLCBuaWwsIA0KLSAgICAgICAg UkVRVUVTVF9GTEFHUywgMCwgU0VDVVJJVFlfTkVUV09SS19EUkVQLCBTZWN1cml0eUJ1ZmZlci5u ZXcodG9rZW4pLnRvX3AsIDAsIA0KLSAgICAgICAgQGNvbnRleHQudG9fcCwNCi0gICAgICAgIG91 dHB1dEJ1ZmZlci50b19wLCBAY29udGV4dEF0dHJpYnV0ZXMsIFRpbWVTdGFtcC5uZXcudG9fcCkp DQotICAgICAgIA0KLSAgICAgIGlmIHJlc3VsdC5vaz8gdGhlbg0KLSAgICAgICAgcmV0dXJuIGVu Y29kZV90b2tlbihvdXRwdXRCdWZmZXIudG9rZW4pDQotICAgICAgZWxzZQ0KLSAgICAgICAgcmFp c2UgIkVycm9yOiAje3Jlc3VsdC50b19zfSINCi0gICAgICBlbmQNCi0gICAgZW5zdXJlDQotICAg ICAgIyBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjbGVhbiB1cCBpZiB3ZSd2ZSBhbHJlYWR5 IGNsZWFuZWQgdXAuDQotICAgICAgY2xlYW5fdXAgdW5sZXNzIEBjbGVhbmVkX3VwDQotICAgIGVu ZA0KLQ0KLSAgIHByaXZhdGUNCi0NCi0gICAgZGVmIGNsZWFuX3VwDQotICAgICAgIyBmcmVlIHN0 cnVjdHVyZXMgYWxsb2NhdGVkDQotICAgICAgQGNsZWFuZWRfdXAgPSB0cnVlDQotICAgICAgQVBJ OjpGcmVlQ3JlZGVudGlhbHNIYW5kbGUuY2FsbChAY3JlZGVudGlhbHMudG9fcCkNCi0gICAgICBB UEk6OkRlbGV0ZVNlY3VyaXR5Q29udGV4dC5jYWxsKEBjb250ZXh0LnRvX3ApDQotICAgICAgQGNv bnRleHQgPSBuaWwNCi0gICAgICBAY3JlZGVudGlhbHMgPSBuaWwNCi0gICAgICBAY29udGV4dEF0 dHJpYnV0ZXMgPSBuaWwNCi0gICAgZW5kDQotDQotICAgICMgR2V0cyBjcmVkZW50aWFscyBiYXNl ZCBvbiB1c2VyLCBkb21haW4gb3IgYm90aC4gSWYgYm90aCBhcmUgbmlsLCBhbiBlcnJvciBvY2N1 cnMNCi0gICAgZGVmIGdldF9jcmVkZW50aWFscw0KLSAgICAgIEBjcmVkZW50aWFscyA9IENyZWRI YW5kbGUubmV3DQotICAgICAgdHMgPSBUaW1lU3RhbXAubmV3DQotICAgICAgQGlkZW50aXR5ID0g SWRlbnRpdHkubmV3IEB1c2VyLCBAZG9tYWluDQotICAgICAgcmVzdWx0ID0gU1NQSVJlc3VsdC5u ZXcoQVBJOjpBY3F1aXJlQ3JlZGVudGlhbHNIYW5kbGUuY2FsbChuaWwsICJOZWdvdGlhdGUiLCBT RUNQS0dfQ1JFRF9PVVRCT1VORCwgbmlsLCBAaWRlbnRpdHkudG9fcCwgDQotICAgICAgICBuaWws IG5pbCwgQGNyZWRlbnRpYWxzLnRvX3AsIHRzLnRvX3ApKQ0KLSAgICAgIHJhaXNlICJFcnJvciBh Y3F1aXJlIGNyZWRlbnRpYWxzOiAje3Jlc3VsdH0iIHVubGVzcyByZXN1bHQub2s/DQotICAgIGVu ZA0KLQ0KLSAgICBkZWYgZW5jb2RlX3Rva2VuKHQpDQotICAgICAgIyBlbmNvZGU2NCB3aWxsIGFk ZCBuZXdsaW5lcyBldmVyeSA2MCBjaGFyYWN0ZXJzIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRob3Nl Lg0KLSAgICAgIEJhc2U2NC5lbmNvZGU2NCh0KS5kZWxldGUoIlxuIikNCi0gICAgZW5kDQotICBl bmQNCi1lbmQNCg== ------=_Part_15073_6697825.1153434232444 Content-Type: text/plain; name=test.patch.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_epvovofc Content-Disposition: attachment; filename="test.patch.txt" ZGlmZiAtTiAtdSBjOlxydWJ5XHNyY1xydWJ5LTEuOC40XHRlc3RcbmV0XGh0dHAuMS44LjUucHJl dmlldzEvcnVieV9zc3BpX3Rlc3QucmIgYzpccnVieVxzcmNccnVieS0xLjguNFx0ZXN0XG5ldFxo dHRwL3J1Ynlfc3NwaV90ZXN0LnJiCi0tLSBjOlxydWJ5XHNyY1xydWJ5LTEuOC40XHRlc3RcbmV0 XGh0dHAuMS44LjUucHJldmlldzEvcnVieV9zc3BpX3Rlc3QucmIJMTk2OS0xMi0zMSAxNjowMDow MC4wMDAwMDAwMDAgLTA4MDAKKysrIGM6XHJ1Ynlcc3JjXHJ1YnktMS44LjRcdGVzdFxuZXRcaHR0 cC9ydWJ5X3NzcGlfdGVzdC5yYgkyMDA2LTA3LTIwIDE1OjEzOjI5LjYxMTExMjUwMCAtMDcwMApA QCAtMCwwICsxLDg3IEBACisjDQorIyA9IHRlc3QvbmV0L2h0dHAvcnVieV9zc3BpX3Rlc3QucmIN CisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVzdGluIEJhaWxleQ0KKyMgDQorIyBXcml0dGVu IGFuZCBtYWludGFpbmVkIGJ5IEp1c3RpbiBCYWlsZXkgPGpnYmFpbGV5QGdtYWlsLmNvbT4uDQor Iw0KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBjYW4gcmUtZGlzdHJpYnV0 ZSBhbmQvb3INCisjIG1vZGlmeSB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHNhbWUgdGVybXMgb2Yg cnVieSBpdHNlbGYgLS0tDQorIyBSdWJ5IERpc3RyaWJ1dGlvbiBMaWNlbnNlIG9yIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLg0KKw0KK3JlcXVpcmUgJ3Rlc3QvdW5pdCcNCityZXF1aXJlICdu ZXQvaHR0cCcNCityZXF1aXJlICduZXQvcnVieXNzcGknDQorDQorIyBUaGVzZSB0ZXN0cyB1c2Ug dGhlIFNTUEkgbGlicmFyeSBkaXJlY3RseS4NCitjbGFzcyBOVExNVGVzdCA8IFRlc3Q6OlVuaXQ6 OlRlc3RDYXNlDQorICBkZWYgdGVzdF9hdXRoDQorICAgIHByb3h5ID0gZ2V0X3Byb3h5DQorICAg IA0KKyAgICBOZXQ6OkhUVFAuc3RhcnQocHJveHkuaG9zdCwgcHJveHkucG9ydCkgZG8gfGh0dHB8 DQorICAgICAgbmVnb19hdXRoID0gU1NQSTo6TmVnb3RpYXRlQXV0aC5uZXcgDQorICAgICAgc3Ig PSBodHRwLnJlcXVlc3RfZ2V0ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgeyAiUHJveHktQXV0 aG9yaXphdGlvbiIgPT4gIk5lZ290aWF0ZSAiICsgbmVnb19hdXRoLmdldF9pbml0aWFsX3Rva2Vu IH0NCisgICAgICByZXNwID0gaHR0cC5nZXQgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCB7ICJQ cm94eS1BdXRob3JpemF0aW9uIiA9PiAiTmVnb3RpYXRlICIgKyBuZWdvX2F1dGguY29tcGxldGVf YXV0aGVudGljYXRpb24oc3JbIlByb3h5LUF1dGhlbnRpY2F0ZSJdLnNwbGl0KCIgIikubGFzdC5z dHJpcCkgfQ0KKyAgICAgIGFzc2VydCByZXNwLmNvZGUudG9faSA9PSAyMDAsICJSZXNwb3NuZSBj b2RlIG5vdCBhcyBleHBlY3RlZDogI3tyZXNwLmluc3BlY3R9Ig0KKyAgICAgIHJlc3AgPSBodHRw LmdldCAiaHR0cDovL3d3dy5nb29nbGUuY29tL2Zvb2Jhci5odG1sIg0KKyAgICAgIGFzc2VydCBy ZXNwLmNvZGUudG9faSA9PSA0MDQsICJSZXNwb25zZSBjb2RlIG5vdCBhcyBleHBlY3RlZDogI3ty ZXNwLmluc3BlY3R9Ig0KKyAgICBlbmQNCisgIGVuZA0KKyAgDQorICBkZWYgdGVzdF9wcm94eV9h dXRoX2dldA0KKyAgICBwcm94eSA9IGdldF9wcm94eQ0KKyAgICANCisgICAgTmV0OjpIVFRQLnN0 YXJ0KHByb3h5Lmhvc3QsIHByb3h5LnBvcnQpIGRvIHxodHRwfA0KKyAgICAgIHJlc3AgPSBTU1BJ OjpOZWdvdGlhdGVBdXRoLnByb3h5X2F1dGhfZ2V0IGh0dHAsICJodHRwOi8vd3d3Lmdvb2dsZS5j b20vIg0KKyAgICAgIGFzc2VydCByZXNwLmNvZGUudG9faSA9PSAyMDAsICJSZXNwb25zZSBjb2Rl IG5vdCBhcyBleHBlY3RlZDogI3tyZXNwLmluc3BlY3R9Ig0KKyAgICBlbmQNCisgIGVuZA0KKyAg DQorICBkZWYgdGVzdF9vbmVfdGltZV91c2Vfb25seQ0KKyAgICBwcm94eSA9IGdldF9wcm94eQ0K KyAgICANCisgICAgTmV0OjpIVFRQLnN0YXJ0KHByb3h5Lmhvc3QsIHByb3h5LnBvcnQpIGRvIHxo dHRwfA0KKyAgICAgIG5lZ29fYXV0aCA9IFNTUEk6Ok5lZ290aWF0ZUF1dGgubmV3IA0KKyAgICAg IHNyID0gaHR0cC5yZXF1ZXN0X2dldCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIHsgIlByb3h5 LUF1dGhvcml6YXRpb24iID0+ICJOZWdvdGlhdGUgIiArIG5lZ29fYXV0aC5nZXRfaW5pdGlhbF90 b2tlbiB9DQorICAgICAgcmVzcCA9IGh0dHAuZ2V0ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwg eyAiUHJveHktQXV0aG9yaXphdGlvbiIgPT4gIk5lZ290aWF0ZSAiICsgbmVnb19hdXRoLmNvbXBs ZXRlX2F1dGhlbnRpY2F0aW9uKHNyWyJQcm94eS1BdXRoZW50aWNhdGUiXS5zcGxpdCgiICIpLmxh c3Quc3RyaXApIH0NCisgICAgICBhc3NlcnQgcmVzcC5jb2RlLnRvX2kgPT0gMjAwLCAiUmVzcG9u c2UgY29kZSBub3QgYXMgZXhwZWN0ZWQ6ICN7cmVzcC5pbnNwZWN0fSINCisgICAgICBhc3NlcnRf cmFpc2VzKFJ1bnRpbWVFcnJvciwgIlNob3VsZCBub3QgYmUgYWJsZSB0byBjYWxsIGNvbXBsZXRl X2F1dGhlbnRpY2F0aW9uIGFnYWluIikgZG8NCisgICAgICAgIG5lZ29fYXV0aC5jb21wbGV0ZV9h dXRoZW50aWNhdGlvbiAiZm9vIg0KKyAgICAgIGVuZA0KKyAgICBlbmQNCisgIGVuZA0KKyAgDQor ICBkZWYgdGVzdF90b2tlbl92YXJpYXRpb25zDQorICAgIHByb3h5ID0gZ2V0X3Byb3h5DQorDQor ICAgICMgVGVzdCB0aGF0IHJhdyB0b2tlbiB3b3Jrcw0KKyAgICBOZXQ6OkhUVFAuc3RhcnQocHJv eHkuaG9zdCwgcHJveHkucG9ydCkgZG8gfGh0dHB8DQorICAgICAgbmVnb19hdXRoID0gU1NQSTo6 TmVnb3RpYXRlQXV0aC5uZXcgDQorICAgICAgc3IgPSBodHRwLnJlcXVlc3RfZ2V0ICJodHRwOi8v d3d3Lmdvb2dsZS5jb20vIiwgeyAiUHJveHktQXV0aG9yaXphdGlvbiIgPT4gIk5lZ290aWF0ZSAi ICsgbmVnb19hdXRoLmdldF9pbml0aWFsX3Rva2VuIH0NCisgICAgICB0b2tlbiA9IEJhc2U2NC5k ZWNvZGU2NChzclsiUHJveHktQXV0aGVudGljYXRlIl0uc3BsaXQoIiAiKS5sYXN0LnN0cmlwKQ0K KyAgICAgIGNvbXBsZXRlZF90b2tlbiA9IG5lZ29fYXV0aC5jb21wbGV0ZV9hdXRoZW50aWNhdGlv bih0b2tlbikNCisgICAgICByZXNwID0gaHR0cC5nZXQgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8i LCB7ICJQcm94eS1BdXRob3JpemF0aW9uIiA9PiAiTmVnb3RpYXRlICIgKyBjb21wbGV0ZWRfdG9r ZW4gfQ0KKyAgICAgIGFzc2VydCByZXNwLmNvZGUudG9faSA9PSAyMDAsICJSZXNwb25zZSBjb2Rl IG5vdCBhcyBleHBlY3RlZDogI3tyZXNwLmluc3BlY3R9Ig0KKyAgICBlbmQNCisNCisgICAgIyBU ZXN0IHRoYXQgdG9rZW4gdy8gIk5lZ290aWF0ZSIgaGVhZGVyIGluY2x1ZGVkIHdvcmtzDQorICAg IE5ldDo6SFRUUC5zdGFydChwcm94eS5ob3N0LCBwcm94eS5wb3J0KSBkbyB8aHR0cHwNCisgICAg ICBuZWdvX2F1dGggPSBTU1BJOjpOZWdvdGlhdGVBdXRoLm5ldyANCisgICAgICBzciA9IGh0dHAu cmVxdWVzdF9nZXQgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCB7ICJQcm94eS1BdXRob3JpemF0 aW9uIiA9PiAiTmVnb3RpYXRlICIgKyBuZWdvX2F1dGguZ2V0X2luaXRpYWxfdG9rZW4gfQ0KKyAg ICAgIHJlc3AgPSBodHRwLmdldCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIHsgIlByb3h5LUF1 dGhvcml6YXRpb24iID0+ICJOZWdvdGlhdGUgIiArIG5lZ29fYXV0aC5jb21wbGV0ZV9hdXRoZW50 aWNhdGlvbihzclsiUHJveHktQXV0aGVudGljYXRlIl0pIH0NCisgICAgICBhc3NlcnQgcmVzcC5j b2RlLnRvX2kgPT0gMjAwLCAiUmVzcG9uc2UgY29kZSBub3QgYXMgZXhwZWN0ZWQ6ICN7cmVzcC5p bnNwZWN0fSINCisgICAgZW5kDQorICBlbmQNCisgIA0KK3ByaXZhdGUNCisgIA0KKyAgIyBHZXRz IHRoZSBwcm94eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgbWFrZXMgc29tZSBhc3NlcnRpb25z DQorICBkZWYgZ2V0X3Byb3h5DQorICAgIGFzc2VydCBFTlZbImh0dHBfcHJveHkiXSwgImh0dHBf cHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBzZXQuIg0KKyAgICBwcm94eSA9IFVS SS5wYXJzZShFTlZbImh0dHBfcHJveHkiXSkNCisgICAgYXNzZXJ0IHByb3h5Lmhvc3QgJiYgcHJv eHkucG9ydCwgIkNvdWxkIG5vdCBwYXJzZSBodHRwX3Byb3h5ICgje0VOVlsiaHR0cF9wcm94eSJd fSkuIGh0dHBfcHJveHkgc2hvdWxkIGJlIGEgVVJMIHdpdGggYSBwb3J0IChlLmcuIGh0dHA6Ly9w cm94eS5jb3JwLmNvbTo4MDgwKS4iDQorICAgIA0KKyAgICByZXR1cm4gcHJveHkNCisgIGVuZA0K KyAgDQorZW5kDQpkaWZmIC1OIC11IGM6XHJ1Ynlcc3JjXHJ1YnktMS44LjRcdGVzdFxuZXRcaHR0 cC4xLjguNS5wcmV2aWV3MS90ZXN0X2dlbV9saXN0LnJiIGM6XHJ1Ynlcc3JjXHJ1YnktMS44LjRc dGVzdFxuZXRcaHR0cC90ZXN0X2dlbV9saXN0LnJiCi0tLSBjOlxydWJ5XHNyY1xydWJ5LTEuOC40 XHRlc3RcbmV0XGh0dHAuMS44LjUucHJldmlldzEvdGVzdF9nZW1fbGlzdC5yYgkxOTY5LTEyLTMx IDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgYzpccnVieVxzcmNccnVieS0xLjguNFx0ZXN0 XG5ldFxodHRwL3Rlc3RfZ2VtX2xpc3QucmIJMjAwNi0wNy0yMCAxNToxMzoyMy43MzYwMzczMDAg LTA3MDAKQEAgLTAsMCArMSwzMCBAQAorIw0KKyMgPSB0ZXN0L25ldC9odHRwL3Rlc3RfZ2VtX2xp c3QucmINCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVzdGluIEJhaWxleQ0KKyMgDQorIyBX cml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IEp1c3RpbiBCYWlsZXkgPGpnYmFpbGV5QGdtYWlsLmNv bT4uDQorIw0KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBjYW4gcmUtZGlz dHJpYnV0ZSBhbmQvb3INCisjIG1vZGlmeSB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHNhbWUgdGVy bXMgb2YgcnVieSBpdHNlbGYgLS0tDQorIyBSdWJ5IERpc3RyaWJ1dGlvbiBMaWNlbnNlIG9yIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KKw0KK3JlcXVpcmUgJ3Rlc3QvdW5pdCcNCityZXF1 aXJlICduZXQvaHR0cCcNCityZXF1aXJlICdydWJ5Z2VtcycNCisNCitjbGFzcyBOVExNVGVzdCA8 IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlDQorICBkZWYgc2V0dXANCisgICAgYXNzZXJ0IEVOVlsiaHR0 cF9wcm94eSJdLCAiaHR0cF9wcm94eSBtdXN0IGJlIHNldCBiZWZvcmUgcnVubmluZyB0ZXN0cy4i DQorICBlbmQNCisgIA0KKyAgIyBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiBydWJ5c3NwaSB1 c2VkIGRsL3dpbjMyIGFuZCBhDQorICAjIGJ1ZyBvY2N1cnJlZCB3aGVuIGdlbSBsaXN0IHdhcyBl eGVjdXRlZC4gVGhpcyB0ZXN0cyB0byBlbnN1cmUNCisgICMgYnVnIGRvZXMgbm90IGNvbWUgYmFj ay4NCisgIGRlZiB0ZXN0X2dlbV9saXN0DQorICAgIEdlbS5tYW5hZ2VfZ2Vtcw0KKyAgICBhc3Nl cnRfbm90aGluZ19yYWlzZWQgIidnZW0gbGlzdCAtLXJlbW90ZSBydWJ5c3NwaScgZmFpbGVkIHRv IGV4ZWN1dGUiICBkbw0KKyAgICAgIEdlbTo6R2VtUnVubmVyLm5ldy5ydW4oWyJsaXN0IiwgIi0t cmVtb3RlIiwgInJ1Ynlzc3BpIl0pDQorICAgIGVuZA0KKyAgZW5kDQorZW5kDQpkaWZmIC1OIC11 IGM6XHJ1Ynlcc3JjXHJ1YnktMS44LjRcdGVzdFxuZXRcaHR0cC4xLjguNS5wcmV2aWV3MS90ZXN0 X25ldF9odHRwLnJiIGM6XHJ1Ynlcc3JjXHJ1YnktMS44LjRcdGVzdFxuZXRcaHR0cC90ZXN0X25l dF9odHRwLnJiCi0tLSBjOlxydWJ5XHNyY1xydWJ5LTEuOC40XHRlc3RcbmV0XGh0dHAuMS44LjUu cHJldmlldzEvdGVzdF9uZXRfaHR0cC5yYgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAt MDgwMAorKysgYzpccnVieVxzcmNccnVieS0xLjguNFx0ZXN0XG5ldFxodHRwL3Rlc3RfbmV0X2h0 dHAucmIJMjAwNi0wNy0yMCAxNToxMjozNi40MjI5MzE3MDAgLTA3MDAKQEAgLTAsMCArMSwzMSBA QAorIw0KKyMgPSB0ZXN0L25ldC9odHRwL3Rlc3RfbmV0X2h0dHAucmINCisjDQorIyBDb3B5cmln aHQgKGMpIDIwMDYgSnVzdGluIEJhaWxleQ0KKyMgDQorIyBXcml0dGVuIGFuZCBtYWludGFpbmVk IGJ5IEp1c3RpbiBCYWlsZXkgPGpnYmFpbGV5QGdtYWlsLmNvbT4uDQorIw0KKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBjYW4gcmUtZGlzdHJpYnV0ZSBhbmQvb3INCisjIG1v ZGlmeSB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHNhbWUgdGVybXMgb2YgcnVieSBpdHNlbGYgLS0t DQorIyBSdWJ5IERpc3RyaWJ1dGlvbiBMaWNlbnNlIG9yIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLg0KKw0KK3JlcXVpcmUgJ3Rlc3QvdW5pdCcNCityZXF1aXJlICduZXQvaHR0cCcNCisNCitj bGFzcyBOVExNVGVzdCA8IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlDQorICBkZWYgc2V0dXANCisgICAg YXNzZXJ0IEVOVlsiaHR0cF9wcm94eSJdLCAiaHR0cF9wcm94eSBtdXN0IGJlIHNldCBiZWZvcmUg cnVubmluZyB0ZXN0cy4iDQorICBlbmQNCisgIA0KKyAgZGVmIHRlc3RfbmV0X2h0dHANCisNCisg ICAgYXNzZXJ0IEVOVlsiaHR0cF9wcm94eSJdLCAiaHR0cF9wcm94eSBlbnZpcm9ubWVudCB2YXJp YWJsZSBtdXN0IGJlIHNldC4iDQorICAgIHByb3h5ID0gVVJJLnBhcnNlKEVOVlsiaHR0cF9wcm94 eSJdKQ0KKyAgICBhc3NlcnQgcHJveHkuaG9zdCAmJiBwcm94eS5wb3J0LCAiQ291bGQgbm90IHBh cnNlIGh0dHBfcHJveHkgKCN7RU5WWyJodHRwX3Byb3h5Il19KS4gaHR0cF9wcm94eSBzaG91bGQg YmUgYSBVUkwgd2l0aCBhIHBvcnQgKGUuZy4gaHR0cDovL3Byb3h5LmNvcnAuY29tOjgwODApLiIN CisgICAgDQorICAgIE5ldDo6SFRUUC5Qcm94eShwcm94eS5ob3N0LCBwcm94eS5wb3J0KS5zdGFy dCgid3d3Lmdvb2dsZS5jb20iKSBkbyB8aHR0cHwNCisgICAgICByZXNwID0gaHR0cC5nZXQoIi8i KQ0KKyAgICAgIGFzc2VydCByZXNwLmNvZGUudG9faSA9PSAyMDAsICJEaWQgbm90IGdldCByZXNw b25zZSBmcm9tIEdvb2dsZSBhcyBleHBlY3RlZC4iDQorICAgIGVuZA0KKyAgZW5kDQorZW5kDQo= ------=_Part_15073_6697825.1153434232444--