Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nY8lR-0002V8-RF for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Mar 2022 15:55:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nY8lQ-0001h0-P9 for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Mar 2022 15:55:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nY8lQ-0001gr-1w for pgsql-hackers@lists.postgresql.org; Sat, 26 Mar 2022 15:55:40 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nY8lK-0005Xd-9z for pgsql-hackers@lists.postgresql.org; Sat, 26 Mar 2022 15:55:39 +0000 Received: from pseudo (185.141.6.84.rev.sfr.net [84.6.141.185]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id 7CD9DC008A; Sat, 26 Mar 2022 16:58:53 +0100 (CET) Date: Sat, 26 Mar 2022 16:55:27 +0100 (CET) From: Fabien COELHO X-X-Sender: fabien@pseudo Reply-To: Fabien COELHO To: Peter Eisentraut cc: "pgsql-hackers@lists.postgresql.org" Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: Message-ID: References: <18c78a01-4a34-9dd4-f78b-6860f1420c8e@enterprisedb.com> <2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com> <46259d13-5f90-1475-3c85-d7a597a2b862@enterprisedb.com> <20220113054433.wdjhidtm7gvyhfts@alap3.anarazel.de> <805c0496-d60d-802b-3d61-73fed38dea16@enterprisedb.com> <63350f81-6a43-f536-24e6-b30f48797732@enterprisedb.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-1030568680-1648310130=:3931183" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2056645051-1030568680-1648310130=:3931183 Content-Type: text/plain; charset=US-ASCII; format=flowed Hello Peter, >> As Tom said earlier, wasn't this fixed by 618c16707? If not, is there any >> other discussion on the specifics of this issue? I'm not aware of one. This answer is that I had kept psql's calls to PQerrorMessage which reports errors from the connection, whereas it needed to change to PQresultErrorMessage to benefit from the libpq improvement. I made the added autocommit/on_error_rollback tests at the end really focus on multi-statement queries (\;), as was more or less intended. I updated the tap test. -- Fabien. --2056645051-1030568680-1648310130=:3931183 Content-Type: text/x-diff; name=psql-show-all-results-18.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-18.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCBlMGFiZTM0YmI2Li44ZjdmOTMxNzJhIDEwMDY0NA0KLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0 ZW1lbnRzLm91dA0KKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dA0KQEAgLTUwLDggKzUw LDI4IEBAIEJFR0lOIFw7DQogU0VMRUNUIDIuMCBBUyAiZmxvYXQiIFw7DQog U0VMRUNUICd3b3JsZCcgQVMgInRleHQiIFw7DQogQ09NTUlUOw0KKyBmbG9h dCANCistLS0tLS0tDQorICAgMi4wDQorKDEgcm93KQ0KKw0KKyB0ZXh0ICAN CistLS0tLS0tDQorIHdvcmxkDQorKDEgcm93KQ0KKw0KIC0tIGNvbXBvdW5k IHdpdGggZW1wdHkgc3RhdGVtZW50cyBhbmQgc3B1cmlvdXMgbGVhZGluZyBz cGFjaW5nDQogXDtcOyAgIFNFTEVDVCAzICsgMyBcO1w7XDsgICBTRUxFQ1Qg JyAnIHx8ICcgIScgXDtcOyAgIFNFTEVDVCAxICsgNCBcOzsNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgNg0KKygxIHJvdykNCisNCisg P2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICENCisoMSByb3cpDQorDQog ID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDUNCkBAIC02MSw2 ICs4MSwxMSBAQCBDT01NSVQ7DQogU0VMRUNUIDEgKyAxICsgMSBBUyAiYWRk IiBcZ3NldA0KIFNFTEVDVCA6YWRkICsgMSArIDEgQVMgImFkZCIgXDsNCiBT RUxFQ1QgOmFkZCArIDEgKyAxIEFTICJhZGQiIFxnc2V0DQorIGFkZCANCist LS0tLQ0KKyAgIDUNCisoMSByb3cpDQorDQogLS0gc2V0IG9wZXJhdG9yDQog U0VMRUNUIDEgQVMgaSBVTklPTiBTRUxFQ1QgMiBPUkRFUiBCWSBpOw0KICBp IA0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggY2Fh YmIwNmM1My4uZjAxYWRiMWZkMiAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sDQpAQCAtMTI3LDE4ICsxMjcsMTEgQEAgZWNobyAnXHgg XFwgU0VMRUNUICogRlJPTSBmb287JyB8IHBzcWwNCiAgICAgICAgY29tbWFu ZHMgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyB0byBkaXZpZGUgaXQgaW50byBt dWx0aXBsZQ0KICAgICAgICB0cmFuc2FjdGlvbnMuICAoU2VlIDx4cmVmIGxp bmtlbmQ9InByb3RvY29sLWZsb3ctbXVsdGktc3RhdGVtZW50Ii8+DQogICAg ICAgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFu ZGxlcyBtdWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgQWxzbywgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiBvbmx5IHByaW50cyB0aGUN Ci0gICAgICAgcmVzdWx0IG9mIHRoZSBsYXN0IDxhY3JvbnltPlNRTDwvYWNy b255bT4gY29tbWFuZCBpbiB0aGUgc3RyaW5nLg0KLSAgICAgICBUaGlzIGlz IGRpZmZlcmVudCBmcm9tIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBzYW1lIHN0 cmluZyBpcyByZWFkIGZyb20NCi0gICAgICAgYSBmaWxlIG9yIGZlZCB0byA8 YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5w dXQsDQotICAgICAgIGJlY2F1c2UgdGhlbiA8YXBwbGljYXRpb24+cHNxbDwv YXBwbGljYXRpb24+IHNlbmRzDQotICAgICAgIGVhY2ggPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBjb21tYW5kIHNlcGFyYXRlbHkuDQogICAgICAgPC9wYXJh Pg0KICAgICAgIDxwYXJhPg0KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMgYmVo YXZpb3IsIHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBTUUwgY29tbWFuZCBpbiBh DQotICAgICAgIHNpbmdsZSA8b3B0aW9uPi1jPC9vcHRpb24+IHN0cmluZyBv ZnRlbiBoYXMgdW5leHBlY3RlZCByZXN1bHRzLg0KLSAgICAgICBJdCdzIGJl dHRlciB0byB1c2UgcmVwZWF0ZWQgPG9wdGlvbj4tYzwvb3B0aW9uPiBjb21t YW5kcyBvciBmZWVkDQotICAgICAgIG11bHRpcGxlIGNvbW1hbmRzIHRvIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1 dCwNCisgICAgICAgSWYgaGF2aW5nIHNldmVyYWwgY29tbWFuZHMgZXhlY3V0 ZWQgaW4gb25lIHRyYW5zYWN0aW9uIGlzIG5vdCBkZXNpcmVkLCANCisgICAg ICAgdXNlIHJlcGVhdGVkIDxvcHRpb24+LWM8L29wdGlvbj4gY29tbWFuZHMg b3IgZmVlZCBtdWx0aXBsZSBjb21tYW5kcyB0bw0KKyAgICAgICA8YXBwbGlj YXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5wdXQsDQog ICAgICAgIGVpdGhlciB1c2luZyA8YXBwbGljYXRpb24+ZWNobzwvYXBwbGlj YXRpb24+IGFzIGlsbHVzdHJhdGVkIGFib3ZlLCBvcg0KICAgICAgICB2aWEg YSBzaGVsbCBoZXJlLWRvY3VtZW50LCBmb3IgZXhhbXBsZToNCiA8cHJvZ3Jh bWxpc3Rpbmc+DQpAQCAtMzU3MCwxMCArMzU2Myw2IEBAIHNlbGVjdCAxXDsg c2VsZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1 ZGVkIGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUN CiAgICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0i cHJvdG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZv ciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBt dWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkg cmVzdWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0 OyBpbiB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhy ZWUgPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVj dXRlZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAg ICAgb25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KICAg ICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRlbT4NCiAgICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00MTYwLDYgKzQxNDksMTggQEAgYmFyDQog ICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICAgPHZhcmxpc3RlbnRy eT4NCisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8 L3Zhcm5hbWU+PC90ZXJtPg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICAgPHBhcmE+DQorICAgICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0 IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIG9ubHkgdGhlIGxhc3QNCisg ICAgICAgIHJlc3VsdCBvZiBhIGNvbWJpbmVkIHF1ZXJ5ICg8bGl0ZXJhbD5c OzwvbGl0ZXJhbD4pIGlzIHNob3duIGluc3RlYWQgb2YNCisgICAgICAgIGFs bCBvZiB0aGVtLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVy YWw+LiAgVGhlIG9mZiBiZWhhdmlvcg0KKyAgICAgICAgaXMgZm9yIGNvbXBh dGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBwc3FsLg0KKyAgICAg ICAgPC9wYXJhPg0KKyAgICAgICAgPC9saXN0aXRlbT4NCisgICAgICA8L3Zh cmxpc3RlbnRyeT4NCisNCisgICAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQ09OVEVYVDwvdmFybmFtZT48L3Rl cm0+DQogICAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgICA8cGFyYT4NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3Bz cWwvY29tbW9uLmMNCmluZGV4IGQ2NWI5YTEyNGYuLmM4NDY4OGU4OWMgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTM0LDYgKzM0LDggQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCwgYm9vbCAqdHhfZW5kZWQpOw0K IA0KIA0KIC8qDQpAQCAtMzU0LDcgKzM1Niw3IEBAIENoZWNrQ29ubmVjdGlv bih2b2lkKQ0KICAqIFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBm YWxzZSBmb3IgZXJyb3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1B Y2NlcHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9y KQ0KIHsNCiAJYm9vbAkJT0s7DQogDQpAQCAtMzg1LDcgKzM4Nyw3IEBAIEFj Y2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KIAkJCQlicmVh azsNCiAJCX0NCiANCi0JaWYgKCFPSykNCisJaWYgKCFPSyAmJiBzaG93X2Vy cm9yKQ0KIAl7DQogCQljb25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpOw0KIA0KQEAgLTQ3Myw2ICs0NzUsMTggQEAgQ2xlYXJP clNhdmVSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCkNCiAJfQ0KIH0NCiANCisv Kg0KKyAqIENvbnN1bWUgYWxsIHJlc3VsdHMNCisgKi8NCitzdGF0aWMgdm9p ZA0KK0NsZWFyT3JTYXZlQWxsUmVzdWx0cygpDQorew0KKwlQR3Jlc3VsdAkq cmVzdWx0Ow0KKw0KKwl3aGlsZSAoKHJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpKSAhPSBOVUxMKQ0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsNCit9DQorDQogDQogLyoNCiAgKiBQcmludCBtaWNyb3RpbWluZyBvdXRw dXQuICBBbHdheXMgcHJpbnQgcmF3IG1pbGxpc2Vjb25kczsgaWYgdGhlIGlu dGVydmFsDQpAQCAtNTczLDcgKzU4Nyw3IEBAIFBTUUxleGVjKGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiANCi0JaWYg KCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1bHQocmVz LCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzKTsNCiAJ CXJlcyA9IE5VTEw7DQpAQCAtNTk2LDExICs2MTAsOCBAQCBpbnQNCiBQU1FM ZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmludFF1ZXJ5 T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJYm9vbAkJ dGltaW5nID0gcHNldC50aW1pbmc7DQotCVBHcmVzdWx0ICAgKnJlczsNCiAJ ZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KLQlpbnN0cl90aW1lCWJlZm9y ZTsNCi0JaW5zdHJfdGltZQlhZnRlcjsNCi0JRklMRQkgICAqZm91dDsNCisJ aW50CQkJcmVzOw0KIA0KIAlpZiAoIXBzZXQuZGIpDQogCXsNCkBAIC02MDks NzcgKzYyMCwxNCBAQCBQU1FMZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5 LCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlG b3V0KQ0KIAl9DQogDQogCVNldENhbmNlbENvbm4ocHNldC5kYik7DQotDQot CWlmICh0aW1pbmcpDQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9y ZSk7DQotDQotCXJlcyA9IFBRZXhlYyhwc2V0LmRiLCBxdWVyeSk7DQotDQor CXJlcyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKHF1ZXJ5LCAmZWxh cHNlZF9tc2VjLCB0cnVlLCBvcHQsIHByaW50UXVlcnlGb3V0LCBOVUxMKTsN CiAJUmVzZXRDYW5jZWxDb25uKCk7DQogDQotCWlmICghQWNjZXB0UmVzdWx0 KHJlcykpDQotCXsNCi0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlcyk7DQotCQly ZXR1cm4gMDsNCi0JfQ0KLQ0KLQlpZiAodGltaW5nKQ0KLQl7DQotCQlJTlNU Ul9USU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0JCUlOU1RSX1RJTUVfU1VC VFJBQ1QoYWZ0ZXIsIGJlZm9yZSk7DQotCQllbGFwc2VkX21zZWMgPSBJTlNU Ul9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQotCX0NCi0NCi0JLyoNCi0J ICogSWYgU0lHSU5UIGlzIHNlbnQgd2hpbGUgdGhlIHF1ZXJ5IGlzIHByb2Nl c3NpbmcsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZQ0KLQkgKiBjb25zdW1lZC4g IFRoZSB1c2VyJ3MgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRvIGNhbmNlbCB0 aGUgZW50aXJlIHdhdGNoDQotCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNl bnQgY2FuY2VsbGF0aW9uIHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNl Lg0KLQkgKi8NCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQ0KLQl7DQotCQlQUWNs ZWFyKHJlcyk7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlmb3V0ID0gcHJp bnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5Rm91dCA6IHBzZXQucXVlcnlGb3V0 Ow0KLQ0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykpDQotCXsNCi0J CWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLQkJCXByaW50UXVlcnkocmVzLCBv cHQsIGZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOw0KLQkJCWJyZWFrOw0K LQ0KLQkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCWZwcmludGYoZm91 dCwgIiVzXG4lc1xuXG4iLCBvcHQtPnRpdGxlLCBQUWNtZFN0YXR1cyhyZXMp KTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6 DQotCQkJcGdfbG9nX2Vycm9yKCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdp dGggYW4gZW1wdHkgcXVlcnkiKTsNCi0JCQlQUWNsZWFyKHJlcyk7DQotCQkJ cmV0dXJuIC0xOw0KLQ0KLQkJY2FzZSBQR1JFU19DT1BZX09VVDoNCi0JCWNh c2UgUEdSRVNfQ09QWV9JTjoNCi0JCWNhc2UgUEdSRVNfQ09QWV9CT1RIOg0K LQkJCXBnX2xvZ19lcnJvcigiXFx3YXRjaCBjYW5ub3QgYmUgdXNlZCB3aXRo IENPUFkiKTsNCi0JCQlQUWNsZWFyKHJlcyk7DQotCQkJcmV0dXJuIC0xOw0K LQ0KLQkJZGVmYXVsdDoNCi0JCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQg cmVzdWx0IHN0YXR1cyBmb3IgXFx3YXRjaCIpOw0KLQkJCVBRY2xlYXIocmVz KTsNCi0JCQlyZXR1cm4gLTE7DQotCX0NCi0NCi0JUFFjbGVhcihyZXMpOw0K LQ0KLQlmZmx1c2goZm91dCk7DQotDQogCS8qIFBvc3NpYmxlIG1pY3JvdGlt aW5nIG91dHB1dCAqLw0KIAlpZiAodGltaW5nKQ0KIAkJUHJpbnRUaW1pbmco ZWxhcHNlZF9tc2VjKTsNCiANCi0JcmV0dXJuIDE7DQorCXJldHVybiByZXM7 DQogfQ0KIA0KIA0KQEAgLTcxNCw3ICs2NjIsNyBAQCBQcmludE5vdGlmaWNh dGlvbnModm9pZCkNCiAgKiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwg ZmFsc2Ugb3RoZXJ3aXNlLg0KICAqLw0KIHN0YXRpYyBib29sDQotUHJpbnRR dWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KK1ByaW50UXVl cnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgY29uc3QgcHJpbnRR dWVyeU9wdCAqb3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCkNCiB7DQogCWJv b2wJCW9rID0gdHJ1ZTsNCiANCkBAIC03NDYsOCArNjk0LDkgQEAgUHJpbnRR dWVyeVR1cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KIAl9DQogCWVs c2UNCiAJew0KLQkJcHJpbnRRdWVyeShyZXN1bHQsICZwc2V0LnBvcHQsIHBz ZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsNCi0JCWlmIChm ZXJyb3IocHNldC5xdWVyeUZvdXQpKQ0KKwkJRklMRSAqZm91dCA9IHByaW50 UXVlcnlGb3V0ID8gcHJpbnRRdWVyeUZvdXQgOiBwc2V0LnF1ZXJ5Rm91dDsN CisJCXByaW50UXVlcnkocmVzdWx0LCBvcHQgPyBvcHQgOiAmcHNldC5wb3B0 LCBmb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsNCisJCWlmIChmZXJyb3Io Zm91dCkpDQogCQl7DQogCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgcHJp bnQgcmVzdWx0IHRhYmxlOiAlbSIpOw0KIAkJCW9rID0gZmFsc2U7DQpAQCAt ODkyLDIxMyArODQxLDEzMSBAQCBsb29wX2V4aXQ6DQogDQogDQogLyoNCi0g KiBQcm9jZXNzUmVzdWx0OiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkg U2VuZFF1ZXJ5KCkgb25seQ0KLSAqDQotICogV2hlbiBvdXIgY29tbWFuZCBz dHJpbmcgY29udGFpbmVkIGEgQ09QWSBGUk9NIFNURElOIG9yIENPUFkgVE8g U1RET1VULA0KLSAqIFBRZXhlYygpIGhhcyBzdG9wcGVkIGF0IHRoZSBQR3Jl c3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IHN1Y2gNCi0gKiBjb21t YW5kLiAgSW4gdGhhdCBldmVudCwgd2UnbGwgbWFyc2hhbCBkYXRhIGZvciB0 aGUgQ09QWSBhbmQgdGhlbiBjeWNsZQ0KLSAqIHRocm91Z2ggYW55IHN1YnNl cXVlbnQgUEdyZXN1bHQgb2JqZWN0cy4NCi0gKg0KLSAqIFdoZW4gdGhlIGNv bW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBubyBzdWNoIENPUFkgY29tbWFuZCwg dGhpcyBmdW5jdGlvbg0KLSAqIGRlZ2VuZXJhdGVzIHRvIGFuIEFjY2VwdFJl c3VsdCgpIGNhbGwuDQotICoNCi0gKiBDaGFuZ2VzIGl0cyBhcmd1bWVudCB0 byBwb2ludCB0byB0aGUgbGFzdCBQR3Jlc3VsdCBvZiB0aGUgY29tbWFuZCBz dHJpbmcsDQotICogb3IgTlVMTCBpZiB0aGF0IHJlc3VsdCB3YXMgZm9yIGEg Q09QWSBUTyBTVERPVVQuICAoUmV0dXJuaW5nIE5VTEwgcHJldmVudHMNCi0g KiB0aGUgY29tbWFuZCBzdGF0dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGlj aCB3ZSB3YW50IGluIHRoYXQgY2FzZSBzbyB0aGF0DQotICogdGhlIHN0YXR1 cyBsaW5lIGRvZXNuJ3QgZ2V0IHRha2VuIGFzIHBhcnQgb2YgdGhlIENPUFkg ZGF0YS4pDQotICoNCi0gKiBSZXR1cm5zIHRydWUgb24gY29tcGxldGUgc3Vj Y2VzcywgZmFsc2Ugb3RoZXJ3aXNlLiAgUG9zc2libGUgZmFpbHVyZSBtb2Rl cw0KLSAqIGluY2x1ZGUgcHVyZWx5IGNsaWVudC1zaWRlIHByb2JsZW1zOyBj aGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdHVzIGZvciB0aGUNCi0gKiBzZXJ2 ZXItc2lkZSBvcGluaW9uLg0KKyAqIE1hcnNoYWwgdGhlIENPUFkgZGF0YS4g IEVpdGhlciBzdWJyb3V0aW5lIHdpbGwgZ2V0IHRoZQ0KKyAqIGNvbm5lY3Rp b24gb3V0IG9mIGl0cyBDT1BZIHN0YXRlLCB0aGVuIGNhbGwgUFFyZXN1bHRT dGF0dXMoKQ0KKyAqIG9uY2UgYW5kIHJlcG9ydCBhbnkgZXJyb3IuIFJldHVy biB3aGV0aGVyIGFsbCB3YXMgb2suDQorICoNCisgKiBGb3IgQ09QWSBPVVQs IGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQuY29weVN0cmVhbSBpZiBpdCdz IHNldCwNCisgKiBvdGhlcndpc2UgdG8gcHNldC5nZm5hbWUgaWYgaXQncyBz ZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQuDQorICogRm9yIENPUFkgSU4s IHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0YSBzb3VyY2UgaWYgaXQncyBz ZXQsDQorICogb3RoZXJ3aXNlIGN1cl9jbWRfc291cmNlLg0KKyAqDQorICog VXBkYXRlIHJlc3VsdCBpZiBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMgbmVjZXNz YXJ5LCBvciBOVUxMIG90aGVyd2lzZS4NCisgKiBSZXR1cm4gYSByZXN1bHQg d2hlbiBxdWVyeUZvdXQgY2FuIHNhZmVseSBvdXRwdXQgYSByZXN1bHQgc3Rh dHVzOg0KKyAqIG9uIENPUFkgSU4sIG9yIG9uIENPUFkgT1VUIGlmIHdyaXR0 ZW4gdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gcHNldC5xdWVyeUZvdXQuDQor ICogUmV0dXJuaW5nIE5VTEwgcHJldmVudHMgdGhlIGNvbW1hbmQgc3RhdHVz IGZyb20gYmVpbmcgcHJpbnRlZCwgd2hpY2gNCisgKiB3ZSB3YW50IGlmIHRo ZSBzdGF0dXMgbGluZSBkb2Vzbid0IGdldCB0YWtlbiBhcyBwYXJ0IG9mIHRo ZSBDT1BZIGRhdGEuDQogICovDQogc3RhdGljIGJvb2wNCi1Qcm9jZXNzUmVz dWx0KFBHcmVzdWx0ICoqcmVzdWx0cCkNCitIYW5kbGVDb3B5UmVzdWx0KFBH cmVzdWx0ICoqcmVzdWx0cCkNCiB7DQotCWJvb2wJCXN1Y2Nlc3MgPSB0cnVl Ow0KLQlib29sCQlmaXJzdF9jeWNsZSA9IHRydWU7DQorCWJvb2wJCXN1Y2Nl c3M7DQorCUZJTEUJICAgKmNvcHlzdHJlYW07DQorCVBHcmVzdWx0ICAgKmNv cHlfcmVzdWx0Ow0KKwlFeGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzID0g UFFyZXN1bHRTdGF0dXMoKnJlc3VsdHApOw0KIA0KLQlmb3IgKDs7KQ0KKwlB c3NlcnQocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCB8fA0KKwkJ ICAgcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX0lOKTsNCisNCisJU2V0 Q2FuY2VsQ29ubihwc2V0LmRiKTsNCisNCisJaWYgKHJlc3VsdF9zdGF0dXMg PT0gUEdSRVNfQ09QWV9PVVQpDQogCXsNCi0JCUV4ZWNTdGF0dXNUeXBlIHJl c3VsdF9zdGF0dXM7DQotCQlib29sCQlpc19jb3B5Ow0KLQkJUEdyZXN1bHQg ICAqbmV4dF9yZXN1bHQ7DQorCQlib29sCQluZWVkX2Nsb3NlID0gZmFsc2U7 DQorCQlib29sCQlpc19waXBlID0gZmFsc2U7DQogDQotCQlpZiAoIUFjY2Vw dFJlc3VsdCgqcmVzdWx0cCkpDQorCQlpZiAocHNldC5jb3B5U3RyZWFtKQ0K IAkJew0KLQkJCS8qDQotCQkJICogRmFpbHVyZSBhdCB0aGlzIHBvaW50IGlz IGFsd2F5cyBhIHNlcnZlci1zaWRlIGZhaWx1cmUgb3IgYQ0KLQkJCSAqIGZh aWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5kIHN0cmluZy4gIEVpdGhlciB3 YXksIHdlJ3JlDQotCQkJICogZmluaXNoZWQgd2l0aCB0aGlzIGNvbW1hbmQg c3RyaW5nLg0KLQkJCSAqLw0KLQkJCXN1Y2Nlc3MgPSBmYWxzZTsNCi0JCQli cmVhazsNCisJCQkvKiBpbnZva2VkIGJ5IFxjb3B5ICovDQorCQkJY29weXN0 cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCiAJCX0NCi0NCi0JCXJlc3VsdF9z dGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0cCk7DQotCQlzd2l0Y2gg KHJlc3VsdF9zdGF0dXMpDQorCQllbHNlIGlmIChwc2V0LmdmbmFtZSkNCiAJ CXsNCi0JCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOg0KLQkJCWNhc2UgUEdS RVNfQ09NTUFORF9PSzoNCi0JCQljYXNlIFBHUkVTX1RVUExFU19PSzoNCi0J CQkJaXNfY29weSA9IGZhbHNlOw0KLQkJCQlicmVhazsNCi0NCi0JCQljYXNl IFBHUkVTX0NPUFlfT1VUOg0KLQkJCWNhc2UgUEdSRVNfQ09QWV9JTjoNCi0J CQkJaXNfY29weSA9IHRydWU7DQotCQkJCWJyZWFrOw0KLQ0KLQkJCWRlZmF1 bHQ6DQotCQkJCS8qIEFjY2VwdFJlc3VsdCgpIHNob3VsZCBoYXZlIGNhdWdo dCBhbnl0aGluZyBlbHNlLiAqLw0KLQkJCQlpc19jb3B5ID0gZmFsc2U7DQot CQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1czog JWQiLCByZXN1bHRfc3RhdHVzKTsNCi0JCQkJYnJlYWs7DQotCQl9DQotDQot CQlpZiAoaXNfY29weSkNCi0JCXsNCi0JCQkvKg0KLQkJCSAqIE1hcnNoYWwg dGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5lIHdpbGwgZ2V0IHRo ZQ0KLQkJCSAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZIHN0YXRlLCB0 aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KLQkJCSAqIG9uY2UgYW5kIHJl cG9ydCBhbnkgZXJyb3IuDQotCQkJICoNCi0JCQkgKiBGb3IgQ09QWSBPVVQs IGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQuY29weVN0cmVhbSBpZiBpdCdz IHNldCwNCi0JCQkgKiBvdGhlcndpc2UgdG8gcHNldC5nZm5hbWUgaWYgaXQn cyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQuDQotCQkJICogRm9yIENP UFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0YSBzb3VyY2UgaWYg aXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIGN1cl9jbWRfc291cmNlLg0K LQkJCSAqLw0KLQkJCUZJTEUJICAgKmNvcHlzdHJlYW07DQotCQkJUEdyZXN1 bHQgICAqY29weV9yZXN1bHQ7DQotDQotCQkJU2V0Q2FuY2VsQ29ubihwc2V0 LmRiKTsNCi0JCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09V VCkNCisJCQkvKiBpbnZva2VkIGJ5IFxnICovDQorCQkJaWYgKG9wZW5RdWVy eU91dHB1dEZpbGUocHNldC5nZm5hbWUsDQorCQkJCQkJCQkJJmNvcHlzdHJl YW0sICZpc19waXBlKSkNCiAJCQl7DQotCQkJCWJvb2wJCW5lZWRfY2xvc2Ug PSBmYWxzZTsNCi0JCQkJYm9vbAkJaXNfcGlwZSA9IGZhbHNlOw0KLQ0KLQkJ CQlpZiAocHNldC5jb3B5U3RyZWFtKQ0KLQkJCQl7DQotCQkJCQkvKiBpbnZv a2VkIGJ5IFxjb3B5ICovDQotCQkJCQljb3B5c3RyZWFtID0gcHNldC5jb3B5 U3RyZWFtOw0KLQkJCQl9DQotCQkJCWVsc2UgaWYgKHBzZXQuZ2ZuYW1lKQ0K LQkJCQl7DQotCQkJCQkvKiBpbnZva2VkIGJ5IFxnICovDQotCQkJCQlpZiAo b3BlblF1ZXJ5T3V0cHV0RmlsZShwc2V0LmdmbmFtZSwNCi0JCQkJCQkJCQkJ CSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQotCQkJCQl7DQotCQkJCQkJbmVl ZF9jbG9zZSA9IHRydWU7DQotCQkJCQkJaWYgKGlzX3BpcGUpDQotCQkJCQkJ CWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQotCQkJCQl9DQotCQkJCQllbHNl DQotCQkJCQkJY29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2NhcmQgQ09QWSBk YXRhIGVudGlyZWx5ICovDQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQot CQkJCQkvKiBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyaWMgcXVlcnkgb3V0cHV0 IHN0cmVhbSAqLw0KLQkJCQkJY29weXN0cmVhbSA9IHBzZXQucXVlcnlGb3V0 Ow0KLQkJCQl9DQotDQotCQkJCXN1Y2Nlc3MgPSBoYW5kbGVDb3B5T3V0KHBz ZXQuZGIsDQotCQkJCQkJCQkJCWNvcHlzdHJlYW0sDQotCQkJCQkJCQkJCSZj b3B5X3Jlc3VsdCkNCi0JCQkJCSYmIHN1Y2Nlc3MNCi0JCQkJCSYmIChjb3B5 c3RyZWFtICE9IE5VTEwpOw0KLQ0KLQkJCQkvKg0KLQkJCQkgKiBTdXBwcmVz cyBzdGF0dXMgcHJpbnRpbmcgaWYgdGhlIHJlcG9ydCB3b3VsZCBnbyB0byB0 aGUgc2FtZQ0KLQkJCQkgKiBwbGFjZSBhcyB0aGUgQ09QWSBkYXRhIGp1c3Qg d2VudC4gIE5vdGUgdGhpcyBkb2Vzbid0DQotCQkJCSAqIHByZXZlbnQgZXJy b3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVDb3B5T3V0IGRpZCB0aGF0Lg0K LQkJCQkgKi8NCi0JCQkJaWYgKGNvcHlzdHJlYW0gPT0gcHNldC5xdWVyeUZv dXQpDQotCQkJCXsNCi0JCQkJCVBRY2xlYXIoY29weV9yZXN1bHQpOw0KLQkJ CQkJY29weV9yZXN1bHQgPSBOVUxMOw0KLQkJCQl9DQotDQotCQkJCWlmIChu ZWVkX2Nsb3NlKQ0KLQkJCQl7DQotCQkJCQkvKiBjbG9zZSBcZyBhcmd1bWVu dCBmaWxlL3BpcGUgKi8NCi0JCQkJCWlmIChpc19waXBlKQ0KLQkJCQkJew0K LQkJCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCQlyZXN0b3JlX3Np Z3BpcGVfdHJhcCgpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0K LQkJCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCX0NCi0JCQkJfQ0K KwkJCQluZWVkX2Nsb3NlID0gdHJ1ZTsNCisJCQkJaWYgKGlzX3BpcGUpDQor CQkJCQlkaXNhYmxlX3NpZ3BpcGVfdHJhcCgpOw0KIAkJCX0NCiAJCQllbHNl DQotCQkJew0KLQkJCQkvKiBDT1BZIElOICovDQotCQkJCWNvcHlzdHJlYW0g PSBwc2V0LmNvcHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBwc2V0LmN1 cl9jbWRfc291cmNlOw0KLQkJCQlzdWNjZXNzID0gaGFuZGxlQ29weUluKHBz ZXQuZGIsDQotCQkJCQkJCQkJICAgY29weXN0cmVhbSwNCi0JCQkJCQkJCQkg ICBQUWJpbmFyeVR1cGxlcygqcmVzdWx0cCksDQotCQkJCQkJCQkJICAgJmNv cHlfcmVzdWx0KSAmJiBzdWNjZXNzOw0KLQkJCX0NCi0JCQlSZXNldENhbmNl bENvbm4oKTsNCi0NCi0JCQkvKg0KLQkJCSAqIFJlcGxhY2UgdGhlIFBHUkVT X0NPUFlfT1VUL0lOIHJlc3VsdCB3aXRoIENPUFkgY29tbWFuZCdzIGV4aXQN Ci0JCQkgKiBzdGF0dXMsIG9yIHdpdGggTlVMTCBpZiB3ZSB3YW50IHRvIHN1 cHByZXNzIHByaW50aW5nIGFueXRoaW5nLg0KLQkJCSAqLw0KLQkJCVBRY2xl YXIoKnJlc3VsdHApOw0KLQkJCSpyZXN1bHRwID0gY29weV9yZXN1bHQ7DQor CQkJCWNvcHlzdHJlYW0gPSBOVUxMOwkvKiBkaXNjYXJkIENPUFkgZGF0YSBl bnRpcmVseSAqLw0KIAkJfQ0KLQkJZWxzZSBpZiAoZmlyc3RfY3ljbGUpDQor CQllbHNlDQogCQl7DQotCQkJLyogZmFzdCBwYXRoOiBubyBDT1BZIGNvbW1h bmRzOyBQUWV4ZWMgdmlzaXRlZCBhbGwgcmVzdWx0cyAqLw0KLQkJCWJyZWFr Ow0KKwkJCS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBxdWVyeSBvdXRw dXQgc3RyZWFtICovDQorCQkJY29weXN0cmVhbSA9IHBzZXQucXVlcnlGb3V0 Ow0KIAkJfQ0KIA0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlPdXQocHNldC5k YiwNCisJCQkJCQkJCWNvcHlzdHJlYW0sDQorCQkJCQkJCQkmY29weV9yZXN1 bHQpDQorCQkJJiYgKGNvcHlzdHJlYW0gIT0gTlVMTCk7DQorDQogCQkvKg0K LQkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4gIEluIHRoZSB0eXBp Y2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KLQkJICogc3RyaW5nLCBp dCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG90 aGVyIHJlc3VsdHMNCi0JCSAqIHRvIHByb2Nlc3MgdGhhdCBtYXkgaW5jbHVk ZSBvdGhlciBDT1BZcy4gIFdlIGtlZXAgdGhlIGxhc3QgcmVzdWx0Lg0KKwkJ ICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5nIGlmIHRoZSByZXBvcnQgd291 bGQgZ28gdG8gdGhlIHNhbWUNCisJCSAqIHBsYWNlIGFzIHRoZSBDT1BZIGRh dGEganVzdCB3ZW50LiAgTm90ZSB0aGlzIGRvZXNuJ3QNCisJCSAqIHByZXZl bnQgZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVDb3B5T3V0IGRpZCB0 aGF0Lg0KIAkJICovDQotCQluZXh0X3Jlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpOw0KLQkJaWYgKCFuZXh0X3Jlc3VsdCkNCi0JCQlicmVhazsNCisJ CWlmIChjb3B5c3RyZWFtID09IHBzZXQucXVlcnlGb3V0KQ0KKwkJew0KKwkJ CVBRY2xlYXIoY29weV9yZXN1bHQpOw0KKwkJCWNvcHlfcmVzdWx0ID0gTlVM TDsNCisJCX0NCiANCi0JCVBRY2xlYXIoKnJlc3VsdHApOw0KLQkJKnJlc3Vs dHAgPSBuZXh0X3Jlc3VsdDsNCi0JCWZpcnN0X2N5Y2xlID0gZmFsc2U7DQor CQlpZiAobmVlZF9jbG9zZSkNCisJCXsNCisJCQkvKiBjbG9zZSBcZyBhcmd1 bWVudCBmaWxlL3BpcGUgKi8NCisJCQlpZiAoaXNfcGlwZSkNCisJCQl7DQor CQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCisJCQkJcmVzdG9yZV9zaWdwaXBl X3RyYXAoKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJZmNsb3Nl KGNvcHlzdHJlYW0pOw0KKwkJCX0NCisJCX0NCisJfQ0KKwllbHNlDQorCXsN CisJCS8qIENPUFkgSU4gKi8NCisJCWNvcHlzdHJlYW0gPSBwc2V0LmNvcHlT dHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBwc2V0LmN1cl9jbWRfc291cmNl Ow0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlJbihwc2V0LmRiLA0KKwkJCQkJ CQkgICBjb3B5c3RyZWFtLA0KKwkJCQkJCQkgICBQUWJpbmFyeVR1cGxlcygq cmVzdWx0cCksDQorCQkJCQkJCSAgICZjb3B5X3Jlc3VsdCk7DQogCX0NCiAN Ci0JU2V0UmVzdWx0VmFyaWFibGVzKCpyZXN1bHRwLCBzdWNjZXNzKTsNCi0N Ci0JLyogbWF5IG5lZWQgdGhpcyB0byByZWNvdmVyIGZyb20gY29ubiBsb3Nz IGR1cmluZyBDT1BZICovDQotCWlmICghZmlyc3RfY3ljbGUgJiYgIUNoZWNr Q29ubmVjdGlvbigpKQ0KLQkJcmV0dXJuIGZhbHNlOw0KKwlSZXNldENhbmNl bENvbm4oKTsNCisJUFFjbGVhcigqcmVzdWx0cCk7DQorCSpyZXN1bHRwID0g Y29weV9yZXN1bHQ7DQogDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCi0N CiAvKg0KICAqIFByaW50UXVlcnlTdGF0dXM6IHJlcG9ydCBjb21tYW5kIHN0 YXR1cyBhcyByZXF1aXJlZA0KICAqDQotICogTm90ZTogVXRpbGl0eSBmdW5j dGlvbiBmb3IgdXNlIGJ5IFByaW50UXVlcnlSZXN1bHQoKSBvbmx5Lg0KKyAq IE5vdGU6IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBIYW5kbGVRdWVy eVJlc3VsdCgpIG9ubHkuDQogICovDQogc3RhdGljIHZvaWQNCi1QcmludFF1 ZXJ5U3RhdHVzKFBHcmVzdWx0ICpyZXN1bHQpDQorUHJpbnRRdWVyeVN0YXR1 cyhQR3Jlc3VsdCAqcmVzdWx0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCkNCiB7 DQogCWNoYXIJCWJ1ZlsxNl07DQorCUZJTEUJICAgKmZvdXQgPSBwcmludFF1 ZXJ5Rm91dCA/IHByaW50UXVlcnlGb3V0IDogcHNldC5xdWVyeUZvdXQ7DQog DQogCWlmICghcHNldC5xdWlldCkNCiAJew0KIAkJaWYgKHBzZXQucG9wdC50 b3B0LmZvcm1hdCA9PSBQUklOVF9IVE1MKQ0KIAkJew0KLQkJCWZwdXRzKCI8 cD4iLCBwc2V0LnF1ZXJ5Rm91dCk7DQotCQkJaHRtbF9lc2NhcGVkX3ByaW50 KFBRY21kU3RhdHVzKHJlc3VsdCksIHBzZXQucXVlcnlGb3V0KTsNCi0JCQlm cHV0cygiPC9wPlxuIiwgcHNldC5xdWVyeUZvdXQpOw0KKwkJCWZwdXRzKCI8 cD4iLCBmb3V0KTsNCisJCQlodG1sX2VzY2FwZWRfcHJpbnQoUFFjbWRTdGF0 dXMocmVzdWx0KSwgZm91dCk7DQorCQkJZnB1dHMoIjwvcD5cbiIsIGZvdXQp Ow0KIAkJfQ0KIAkJZWxzZQ0KLQkJCWZwcmludGYocHNldC5xdWVyeUZvdXQs ICIlc1xuIiwgUFFjbWRTdGF0dXMocmVzdWx0KSk7DQorCQkJZnByaW50Zihm b3V0LCAiJXNcbiIsIFBRY21kU3RhdHVzKHJlc3VsdCkpOw0KIAl9DQogDQog CWlmIChwc2V0LmxvZ2ZpbGUpDQpAQCAtMTExMCw0MyArOTc3LDUwIEBAIFBy aW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3VsdCkNCiANCiANCiAvKg0K LSAqIFByaW50UXVlcnlSZXN1bHQ6IHByaW50IG91dCAob3Igc3RvcmUgb3Ig ZXhlY3V0ZSkgcXVlcnkgcmVzdWx0IGFzIHJlcXVpcmVkDQotICoNCi0gKiBO b3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkg b25seS4NCisgKiBIYW5kbGVRdWVyeVJlc3VsdDogcHJpbnQgb3V0LCBzdG9y ZSBvciBleGVjdXRlIG9uZSBxdWVyeSByZXN1bHQNCisgKiBhcyByZXF1aXJl ZC4NCiAgKg0KICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuDQogICovDQogc3Rh dGljIGJvb2wNCi1QcmludFF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQp DQorSGFuZGxlUXVlcnlSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBs YXN0LCBib29sIGlzX3dhdGNoLCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQs IEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJYm9vbAkJc3VjY2VzczsN CiAJY29uc3QgY2hhciAqY21kc3RhdHVzOw0KIA0KLQlpZiAoIXJlc3VsdCkN CisJaWYgKHJlc3VsdCA9PSBOVUxMKQ0KIAkJcmV0dXJuIGZhbHNlOw0KIA0K IAlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpDQogCXsNCiAJCWNh c2UgUEdSRVNfVFVQTEVTX09LOg0KIAkJCS8qIHN0b3JlIG9yIGV4ZWN1dGUg b3IgcHJpbnQgdGhlIGRhdGEgLi4uICovDQotCQkJaWYgKHBzZXQuZ3NldF9w cmVmaXgpDQorCQkJaWYgKGxhc3QgJiYgcHNldC5nc2V0X3ByZWZpeCkNCiAJ CQkJc3VjY2VzcyA9IFN0b3JlUXVlcnlUdXBsZShyZXN1bHQpOw0KLQkJCWVs c2UgaWYgKHBzZXQuZ2V4ZWNfZmxhZykNCisJCQllbHNlIGlmIChsYXN0ICYm IHBzZXQuZ2V4ZWNfZmxhZykNCiAJCQkJc3VjY2VzcyA9IEV4ZWNRdWVyeVR1 cGxlcyhyZXN1bHQpOw0KLQkJCWVsc2UgaWYgKHBzZXQuY3Jvc3N0YWJfZmxh ZykNCisJCQllbHNlIGlmIChsYXN0ICYmIHBzZXQuY3Jvc3N0YWJfZmxhZykN CiAJCQkJc3VjY2VzcyA9IFByaW50UmVzdWx0SW5Dcm9zc3RhYihyZXN1bHQp Ow0KKwkJCWVsc2UgaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1bHRz KQ0KKwkJCQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHQsIG9w dCwgcHJpbnRRdWVyeUZvdXQpOw0KIAkJCWVsc2UNCi0JCQkJc3VjY2VzcyA9 IFByaW50UXVlcnlUdXBsZXMocmVzdWx0KTsNCisJCQkJc3VjY2VzcyA9IHRy dWU7DQorDQogCQkJLyogaWYgaXQncyBJTlNFUlQvVVBEQVRFL0RFTEVURSBS RVRVUk5JTkcsIGFsc28gcHJpbnQgc3RhdHVzICovDQotCQkJY21kc3RhdHVz ID0gUFFjbWRTdGF0dXMocmVzdWx0KTsNCi0JCQlpZiAoc3RybmNtcChjbWRz dGF0dXMsICJJTlNFUlQiLCA2KSA9PSAwIHx8DQotCQkJCXN0cm5jbXAoY21k c3RhdHVzLCAiVVBEQVRFIiwgNikgPT0gMCB8fA0KLQkJCQlzdHJuY21wKGNt ZHN0YXR1cywgIkRFTEVURSIsIDYpID09IDApDQotCQkJCVByaW50UXVlcnlT dGF0dXMocmVzdWx0KTsNCisJCQlpZiAobGFzdCB8fCBwc2V0LnNob3dfYWxs X3Jlc3VsdHMpDQorCQkJew0KKwkJCQljbWRzdGF0dXMgPSBQUWNtZFN0YXR1 cyhyZXN1bHQpOw0KKwkJCQlpZiAoc3RybmNtcChjbWRzdGF0dXMsICJJTlNF UlQiLCA2KSA9PSAwIHx8DQorCQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIlVQ REFURSIsIDYpID09IDAgfHwNCisJCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAi REVMRVRFIiwgNikgPT0gMCkNCisJCQkJCVByaW50UXVlcnlTdGF0dXMocmVz dWx0LCBwcmludFF1ZXJ5Rm91dCk7DQorCQkJfQ0KKw0KIAkJCWJyZWFrOw0K IA0KIAkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCVByaW50UXVlcnlT dGF0dXMocmVzdWx0KTsNCisJCQlpZiAobGFzdCB8fCBwc2V0LnNob3dfYWxs X3Jlc3VsdHMpDQorCQkJCVByaW50UXVlcnlTdGF0dXMocmVzdWx0LCBwcmlu dFF1ZXJ5Rm91dCk7DQogCQkJc3VjY2VzcyA9IHRydWU7DQogCQkJYnJlYWs7 DQogDQpAQCAtMTE1Niw3ICsxMDMwLDcgQEAgUHJpbnRRdWVyeVJlc3VsdChQ R3Jlc3VsdCAqcmVzdWx0KQ0KIA0KIAkJY2FzZSBQR1JFU19DT1BZX09VVDoN CiAJCWNhc2UgUEdSRVNfQ09QWV9JTjoNCi0JCQkvKiBub3RoaW5nIHRvIGRv IGhlcmUgKi8NCisJCQkvKiBub3RoaW5nIHRvIGRvIGhlcmU6IGFscmVhZHkg cHJvY2Vzc2VkICovDQogCQkJc3VjY2VzcyA9IHRydWU7DQogCQkJYnJlYWs7 DQogDQpAQCAtMTE3MywxMSArMTA0NywyNTIgQEAgUHJpbnRRdWVyeVJlc3Vs dChQR3Jlc3VsdCAqcmVzdWx0KQ0KIAkJCWJyZWFrOw0KIAl9DQogDQotCWZm bHVzaChwc2V0LnF1ZXJ5Rm91dCk7DQorCWZmbHVzaChwcmludFF1ZXJ5Rm91 dCA/IHByaW50UXVlcnlGb3V0IDogcHNldC5xdWVyeUZvdXQpOw0KIA0KIAly ZXR1cm4gc3VjY2VzczsNCiB9DQogDQorLyoNCisgKiBEYXRhIHN0cnVjdHVy ZSBhbmQgZnVuY3Rpb25zIHRvIHJlY29yZCBub3RpY2VzIHdoaWxlIHRoZXkg YXJlDQorICogZW1pdHRlZCwgc28gdGhhdCB0aGV5IGNhbiBiZSBzaG93biBs YXRlci4NCisgKg0KKyAqIFdlIG5lZWQgdG8ga25vdyB3aGljaCByZXN1bHQg aXMgbGFzdCwgd2hpY2ggcmVxdWlyZXMgdG8gZXh0cmFjdA0KKyAqIG9uZSBy ZXN1bHQgaW4gYWR2YW5jZSwgaGVuY2UgdHdvIGJ1ZmZlcnMgYXJlIG5lZWRl ZC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCB7DQorCVBRRXhwQnVmZmVyRGF0 YQltZXNzYWdlc1syXTsNCisJaW50CQkJCWN1cnJlbnQ7DQorfSB0X25vdGlj ZV9tZXNzYWdlczsNCisNCisvKg0KKyAqIFN0b3JlIG5vdGljZXMgaW4gYXBw cm9wcmlhdGUgYnVmZmVyLCBmb3IgbGF0ZXIgZGlzcGxheS4NCisgKi8NCitz dGF0aWMgdm9pZA0KK0FwcGVuZE5vdGljZU1lc3NhZ2Uodm9pZCAqYXJnLCBj b25zdCBjaGFyICptc2cpDQorew0KKwl0X25vdGljZV9tZXNzYWdlcyAqbm90 ZXMgPSAodF9ub3RpY2VfbWVzc2FnZXMqKSBhcmc7DQorCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZub3Rlcy0+bWVzc2FnZXNbbm90ZXMtPmN1cnJlbnRdLCBt c2cpOw0KK30NCisNCisvKg0KKyAqIFNob3cgbm90aWNlcyBzdG9yZWQgaW4g YnVmZmVyLCB3aGljaCBpcyB0aGVuIHJlc2V0Lg0KKyAqLw0KK3N0YXRpYyB2 b2lkDQorU2hvd05vdGljZU1lc3NhZ2UodF9ub3RpY2VfbWVzc2FnZXMgKm5v dGVzKQ0KK3sNCisJUFFFeHBCdWZmZXJEYXRhCSpjdXJyZW50ID0gJm5vdGVz LT5tZXNzYWdlc1tub3Rlcy0+Y3VycmVudF07DQorCWlmICgqY3VycmVudC0+ ZGF0YSAhPSAnXDAnKQ0KKwkJcGdfbG9nX2luZm8oIiVzIiwgY3VycmVudC0+ ZGF0YSk7DQorCXJlc2V0UFFFeHBCdWZmZXIoY3VycmVudCk7DQorfQ0KKw0K Ky8qDQorICogU2VuZFF1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHM6IHV0aWxpdHkg ZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKQ0KKyAqIGFuZCBQU1FM ZXhlY1dhdGNoKCkuDQorICoNCisgKiBTZW5kcyBxdWVyeSBhbmQgY3ljbGVz IHRocm91Z2ggUEdyZXN1bHQgb2JqZWN0cy4NCisgKg0KKyAqIFdoZW4gbm90 IHVuZGVyIFx3YXRjaCBhbmQgaWYgb3VyIGNvbW1hbmQgc3RyaW5nIGNvbnRh aW5lZCBhIENPUFkgRlJPTSBTVERJTg0KKyAqIG9yIENPUFkgVE8gU1RET1VU LCB0aGUgUEdyZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbW1hbmRz IG11c3QgYmUNCisgKiBwcm9jZXNzZWQgYnkgcHJvdmlkaW5nIGFuIGlucHV0 IG9yIG91dHB1dCBzdHJlYW0uICBJbiB0aGF0IGV2ZW50LCB3ZSdsbA0KKyAq IG1hcnNoYWwgZGF0YSBmb3IgdGhlIENPUFkuDQorICoNCisgKiBGb3Igb3Ro ZXIgY29tbWFuZHMsIHRoZSByZXN1bHRzIGFyZSBwcm9jZXNzZWQgbm9ybWFs bHksIGRlcGVuZGluZyBvbiB0aGVpcg0KKyAqIHN0YXR1cy4NCisgKg0KKyAq IFJldHVybnMgMSBvbiBjb21wbGV0ZSBzdWNjZXNzLCAwIG9uIGludGVycnVw dCBhbmQgLTEgb3IgZXJyb3JzLiAgUG9zc2libGUNCisgKiBmYWlsdXJlIG1v ZGVzIGluY2x1ZGUgcHVyZWx5IGNsaWVudC1zaWRlIHByb2JsZW1zOyBjaGVj ayB0aGUgdHJhbnNhY3Rpb24NCisgKiBzdGF0dXMgZm9yIHRoZSBzZXJ2ZXIt c2lkZSBvcGluaW9uLg0KKyAqDQorICogTm90ZSB0aGF0IG9uIGEgY29tYmlu ZWQgcXVlcnksIGZhaWx1cmUgZG9lcyBub3QgbWVhbiB0aGF0IG5vdGhpbmcg d2FzDQorICogY29tbWl0dGVkLg0KKyAqLw0KK3N0YXRpYyBpbnQNCitTZW5k UXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91 YmxlICpwZWxhcHNlZF9tc2VjLA0KKwlib29sIGlzX3dhdGNoLCBjb25zdCBw cmludFF1ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0LCBib29s ICp0eF9lbmRlZCkNCit7DQorCWJvb2wJCQkJdGltaW5nID0gcHNldC50aW1p bmc7DQorCWJvb2wJCQkJc3VjY2VzczsNCisJaW5zdHJfdGltZQkJCWJlZm9y ZTsNCisJUEdyZXN1bHQJCSAgICpyZXN1bHQ7DQorCXRfbm90aWNlX21lc3Nh Z2VzCW5vdGVzOw0KKw0KKwlpZiAodGltaW5nKQ0KKwkJSU5TVFJfVElNRV9T RVRfQ1VSUkVOVChiZWZvcmUpOw0KKw0KKwlzdWNjZXNzID0gUFFzZW5kUXVl cnkocHNldC5kYiwgcXVlcnkpOw0KKw0KKwlpZiAoIXN1Y2Nlc3MpDQorCXsN CisJCWNvbnN0IGNoYXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2UocHNldC5k Yik7DQorDQorCQlpZiAoc3RybGVuKGVycm9yKSkNCisJCQlwZ19sb2dfaW5m bygiJXMiLCBlcnJvcik7DQorDQorCQlDaGVja0Nvbm5lY3Rpb24oKTsNCisN CisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBJZiBTSUdJTlQg aXMgc2VudCB3aGlsZSB0aGUgcXVlcnkgaXMgcHJvY2Vzc2luZywgdGhlIGlu dGVycnVwdCB3aWxsIGJlDQorCSAqIGNvbnN1bWVkLiAgVGhlIHVzZXIncyBp bnRlbnRpb24sIHRob3VnaCwgaXMgdG8gY2FuY2VsIHRoZSBlbnRpcmUgd2F0 Y2gNCisJICogcHJvY2Vzcywgc28gZGV0ZWN0IGEgc2VudCBjYW5jZWxsYXRp b24gcmVxdWVzdCBhbmQgZXhpdCBpbiB0aGlzIGNhc2UuDQorCSAqLw0KKwlp ZiAoaXNfd2F0Y2ggJiYgY2FuY2VsX3ByZXNzZWQpDQorCXsNCisJCUNsZWFy T3JTYXZlQWxsUmVzdWx0cygpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJ LyogaW50ZXJjZXB0IG5vdGljZXMgKi8NCisJbm90ZXMuY3VycmVudCA9IDA7 DQorCWluaXRQUUV4cEJ1ZmZlcigmbm90ZXMubWVzc2FnZXNbMF0pOw0KKwlp bml0UFFFeHBCdWZmZXIoJm5vdGVzLm1lc3NhZ2VzWzFdKTsNCisJUFFzZXRO b3RpY2VQcm9jZXNzb3IocHNldC5kYiwgQXBwZW5kTm90aWNlTWVzc2FnZSwg Jm5vdGVzKTsNCisNCisJLyogZmlyc3QgcmVzdWx0ICovDQorCXJlc3VsdCA9 IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOw0KKw0KKwl3aGlsZSAocmVzdWx0ICE9 IE5VTEwpDQorCXsNCisJCUV4ZWNTdGF0dXNUeXBlIHJlc3VsdF9zdGF0dXM7 DQorCQlQR3Jlc3VsdCAgICpuZXh0X3Jlc3VsdDsNCisJCWJvb2wJCWxhc3Q7 DQorDQorCQlpZiAoIUFjY2VwdFJlc3VsdChyZXN1bHQsIGZhbHNlKSkNCisJ CXsNCisJCQkvKg0KKwkJCSAqIFNvbWUgZXJyb3Igb2NjdXJlZCwgZWl0aGVy IGEgc2VydmVyLXNpZGUgZmFpbHVyZSBvcg0KKwkJCSAqIGEgZmFpbHVyZSB0 byBzdWJtaXQgdGhlIGNvbW1hbmQgc3RyaW5nLiAgUmVjb3JkIHRoYXQuDQor CQkJICovDQorCQkJY29uc3QgY2hhciAqZXJyb3IgPSBQUXJlc3VsdEVycm9y TWVzc2FnZShyZXN1bHQpOw0KKw0KKwkJCVNob3dOb3RpY2VNZXNzYWdlKCZu b3Rlcyk7DQorCQkJaWYgKHN0cmxlbihlcnJvcikpDQorCQkJCXBnX2xvZ19p bmZvKCIlcyIsIGVycm9yKTsNCisNCisJCQlDaGVja0Nvbm5lY3Rpb24oKTsN CisJCQlpZiAoIWlzX3dhdGNoKQ0KKwkJCQlTZXRSZXN1bHRWYXJpYWJsZXMo cmVzdWx0LCBmYWxzZSk7DQorDQorCQkJLyoga2VlcCB0aGUgcmVzdWx0IHN0 YXR1cyBiZWZvcmUgY2xlYXJpbmcgaXQgKi8NCisJCQlyZXN1bHRfc3RhdHVz ID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KTsNCisJCQlDbGVhck9yU2F2ZVJl c3VsdChyZXN1bHQpOw0KKwkJCXJlc3VsdCA9IE5VTEw7DQorCQkJc3VjY2Vz cyA9IGZhbHNlOw0KKw0KKwkJCS8qIHN3aXRjaCB0byBuZXh0IHJlc3VsdCAq Lw0KKwkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfQk9USCB8 fA0KKwkJCQlyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUIHx8DQor CQkJCXJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9JTikNCisJCQkJLyoN CisJCQkJICogRm9yIHNvbWUgb2JzY3VyZSByZWFzb24gUFFnZXRSZXN1bHQg ZG9lcyAqbm90KiByZXR1cm4gYSBOVUxMIGluIGNvcHkNCisJCQkJICogY2Fz ZXMgZGVzcGl0ZSB0aGUgcmVzdWx0IGhhdmluZyBiZWVuIGNsZWFyZWQsIGJ1 dCBrZWVwcyByZXR1cm5pbmcgYW4NCisJCQkJICogImVtcHR5IiByZXN1bHQg dGhhdCB3ZSBoYXZlIHRvIGlnbm9yZSBtYW51YWxseS4NCisJCQkJICovDQor CQkJCTsNCisJCQllbHNlDQorCQkJCXJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpOw0KKw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKwkJZWxzZSBpZiAo dHhfZW5kZWQgIT0gTlVMTCAmJiAhICp0eF9lbmRlZCkNCisJCXsNCisJCQkv KiBvbiBzdWNjZXNzLCB0ZWxsIHdoZXRoZXIgdGhlICJjdXJyZW50IiB0cmFu c2FjdGlvbiBzZXF1ZW5jZSBlbmRlZCAqLw0KKwkJCWNvbnN0IGNoYXIgKmNt ZCA9IFBRY21kU3RhdHVzKHJlc3VsdCk7DQorCQkJKnR4X2VuZGVkID0gc3Ry Y21wKGNtZCwgIkNPTU1JVCIpID09IDAgfHwgc3RyY21wKGNtZCwgIlJPTExC QUNLIikgPT0gMCB8fA0KKwkJCQlzdHJjbXAoY21kLCAiU0FWRVBPSU5UIikg PT0gMCB8fCBzdHJjbXAoY21kLCAiUkVMRUFTRSIpID09IDA7DQorCQl9DQor DQorCQlyZXN1bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KTsN CisNCisJCS8qIG11c3QgaGFuZGxlIENPUFkgYmVmb3JlIGNoYW5naW5nIHRo ZSBjdXJyZW50IHJlc3VsdCAqLw0KKwkJQXNzZXJ0KHJlc3VsdF9zdGF0dXMg IT0gUEdSRVNfQ09QWV9CT1RIKTsNCisJCWlmIChyZXN1bHRfc3RhdHVzID09 IFBHUkVTX0NPUFlfSU4gfHwNCisJCQlyZXN1bHRfc3RhdHVzID09IFBHUkVT X0NPUFlfT1VUKQ0KKwkJew0KKwkJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rl cyk7DQorDQorCQkJaWYgKGlzX3dhdGNoKQ0KKwkJCXsNCisJCQkJQ2xlYXJP clNhdmVBbGxSZXN1bHRzKCk7DQorCQkJCXBnX2xvZ19lcnJvcigiXFx3YXRj aCBjYW5ub3QgYmUgdXNlZCB3aXRoIENPUFkiKTsNCisJCQkJcmV0dXJuIC0x Ow0KKwkJCX0NCisNCisJCQkvKiB1c2Ugbm9ybWFsIG5vdGljZSBwcm9jZXNz b3IgZHVyaW5nIENPUFkgKi8NCisJCQlQUXNldE5vdGljZVByb2Nlc3Nvcihw c2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5VTEwpOw0KKw0KKwkJCXN1Y2Nl c3MgJj0gSGFuZGxlQ29weVJlc3VsdCgmcmVzdWx0KTsNCisNCisJCQlQUXNl dE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBBcHBlbmROb3RpY2VNZXNzYWdl LCAmbm90ZXMpOw0KKwkJfQ0KKw0KKwkJLyoNCisJCSAqIENoZWNrIFBRZ2V0 UmVzdWx0KCkgYWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2lu Z2xlLWNvbW1hbmQNCisJCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVM TC4gIE90aGVyd2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQorCQkg KiB0byBwcm9jZXNzLiBXZSBuZWVkIHRvIGRvIHRoYXQgdG8gY2hlY2sgd2hl dGhlciB0aGlzIGlzIHRoZSBsYXN0Lg0KKwkJICovDQorCQlub3Rlcy5jdXJy ZW50IF49IDE7DQorCQluZXh0X3Jlc3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQu ZGIpOw0KKwkJbm90ZXMuY3VycmVudCBePSAxOw0KKwkJbGFzdCA9IChuZXh0 X3Jlc3VsdCA9PSBOVUxMKTsNCisNCisJCS8qDQorCQkgKiBHZXQgdGltaW5n IG1lYXN1cmUgYmVmb3JlIHByaW50aW5nIHRoZSBsYXN0IHJlc3VsdC4NCisJ CSAqDQorCQkgKiBJdCB3aWxsIGluY2x1ZGUgdGhlIGRpc3BsYXkgb2YgcHJl dmlvdXMgcmVzdWx0cywgaWYgYW55Lg0KKwkJICogVGhpcyBjYW5ub3QgYmUg aGVscGVkIGJlY2F1c2UgdGhlIHNlcnZlciBnb2VzIG9uIHByb2Nlc3NpbmcN CisJCSAqIGZ1cnRoZXIgcXVlcmllcyBhbnl3YXkgd2hpbGUgdGhlIHByZXZp b3VzIG9uZXMgYXJlIGJlaW5nIGRpc3BsYXllZC4NCisJCSAqIFRoZSBwYXJh bGxlbCBleGVjdXRpb24gb2YgdGhlIGNsaWVudCBkaXNwbGF5IGhpZGVzIHRo ZSBzZXJ2ZXIgdGltZQ0KKwkJICogd2hlbiBpdCBpcyBzaG9ydGVyLg0KKwkJ ICoNCisJCSAqIFdpdGggY29tYmluZWQgcXVlcmllcywgdGltaW5nIG11c3Qg YmUgdW5kZXJzdG9vZCBhcyBhbiB1cHBlciBib3VuZA0KKwkJICogb2YgdGhl IHRpbWUgc3BlbnQgcHJvY2Vzc2luZyB0aGVtLg0KKwkJICovDQorCQlpZiAo bGFzdCAmJiB0aW1pbmcpDQorCQl7DQorCQkJaW5zdHJfdGltZQlub3c7DQor CQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOw0KKwkJCUlOU1RSX1RJ TUVfU1VCVFJBQ1Qobm93LCBiZWZvcmUpOw0KKwkJCSpwZWxhcHNlZF9tc2Vj ID0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMobm93KTsNCisJCX0NCisNCisJ CS8qIG5vdGljZXMgYWxyZWFkeSBzaG93biBhYm92ZSBmb3IgY29weSAqLw0K KwkJU2hvd05vdGljZU1lc3NhZ2UoJm5vdGVzKTsNCisNCisJCS8qIHRoaXMg bWF5IG9yIG1heSBub3QgcHJpbnQgc29tZXRoaW5nIGRlcGVuZGluZyBvbiBz ZXR0aW5ncyAqLw0KKwkJaWYgKHJlc3VsdCAhPSBOVUxMKQ0KKwkJCXN1Y2Nl c3MgJj0gSGFuZGxlUXVlcnlSZXN1bHQocmVzdWx0LCBsYXN0LCBmYWxzZSwg b3B0LCBwcmludFF1ZXJ5Rm91dCk7DQorDQorCQkvKiBzZXQgdmFyaWFibGVz IG9uIGxhc3QgcmVzdWx0IGlmIGFsbCB3ZW50IHdlbGwgKi8NCisJCWlmICgh aXNfd2F0Y2ggJiYgbGFzdCAmJiBzdWNjZXNzKQ0KKwkJCVNldFJlc3VsdFZh cmlhYmxlcyhyZXN1bHQsIHRydWUpOw0KKw0KKwkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0KTsNCisJCW5vdGVzLmN1cnJlbnQgXj0gMTsNCisJCXJlc3Vs dCA9IG5leHRfcmVzdWx0Ow0KKw0KKwkJaWYgKGNhbmNlbF9wcmVzc2VkKQ0K KwkJew0KKwkJCUNsZWFyT3JTYXZlQWxsUmVzdWx0cygpOw0KKwkJCWJyZWFr Ow0KKwkJfQ0KKwl9DQorDQorCS8qIHJlc2V0IG5vdGljZSBob29rICovDQor CVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIE5vdGljZVByb2Nlc3Nv ciwgTlVMTCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMubWVzc2FnZXNb MF0pOw0KKwl0ZXJtUFFFeHBCdWZmZXIoJm5vdGVzLm1lc3NhZ2VzWzFdKTsN CisNCisJLyogbWF5IG5lZWQgdGhpcyB0byByZWNvdmVyIGZyb20gY29ubiBs b3NzIGR1cmluZyBDT1BZICovDQorCWlmICghQ2hlY2tDb25uZWN0aW9uKCkp DQorCQlyZXR1cm4gLTE7DQorDQorCXJldHVybiBjYW5jZWxfcHJlc3NlZCA/ IDAgOiBzdWNjZXNzID8gMSA6IC0xOw0KK30NCisNCiANCiAvKg0KICAqIFNl bmRRdWVyeTogc2VuZCB0aGUgcXVlcnkgc3RyaW5nIHRvIHRoZSBiYWNrZW5k DQpAQCAtMTE5NSwxMiArMTMxMCwxNCBAQCBib29sDQogU2VuZFF1ZXJ5KGNv bnN0IGNoYXIgKnF1ZXJ5KQ0KIHsNCiAJYm9vbAkJdGltaW5nID0gcHNldC50 aW1pbmc7DQotCVBHcmVzdWx0ICAgKnJlc3VsdDsNCisJUEdyZXN1bHQgICAg KnJlc3VsdCA9IE5VTEw7DQogCVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHRy YW5zYWN0aW9uX3N0YXR1czsNCiAJZG91YmxlCQllbGFwc2VkX21zZWMgPSAw Ow0KIAlib29sCQlPSyA9IGZhbHNlOw0KKwlib29sCQlyZXNfZXJyb3I7DQog CWludAkJCWk7DQogCWJvb2wJCW9uX2Vycm9yX3JvbGxiYWNrX3NhdmVwb2lu dCA9IGZhbHNlOw0KKwlib29sCQl0eF9lbmRlZCA9IGZhbHNlOw0KIA0KIAlp ZiAoIXBzZXQuZGIpDQogCXsNCkBAIC0xMjM5LDgyICsxMzU2LDcxIEBAIFNl bmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiAJCWZmbHVzaChwc2V0Lmxv Z2ZpbGUpOw0KIAl9DQogDQorCS8qIGdsb2JhbCBxdWVyeSBjYW5jZWxsYXRp b24gZm9yIHRoaXMgcXVlcnkgKi8NCiAJU2V0Q2FuY2VsQ29ubihwc2V0LmRi KTsNCiANCiAJdHJhbnNhY3Rpb25fc3RhdHVzID0gUFF0cmFuc2FjdGlvblN0 YXR1cyhwc2V0LmRiKTsNCiANCisJLyogaXNzdWUgYSBCRUdJTiBpZiBuZWVk ZWQsIGNvcnJlc3BvbmRpbmcgQ09NTUlUL1JPTExCQUNLIGJ5IHVzZXIgKi8N CiAJaWYgKHRyYW5zYWN0aW9uX3N0YXR1cyA9PSBQUVRSQU5TX0lETEUgJiYN CiAJCSFwc2V0LmF1dG9jb21taXQgJiYNCiAJCSFjb21tYW5kX25vX2JlZ2lu KHF1ZXJ5KSkNCiAJew0KKwkJUEdyZXN1bHQgICAgKnJlc3VsdDsNCiAJCXJl c3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsNCi0JCWlmIChQUXJl c3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0spDQorCQly ZXNfZXJyb3IgPSBQUXJlc3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NP TU1BTkRfT0s7DQorCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KKwkJ cmVzdWx0ID0gTlVMTDsNCisNCisJCWlmIChyZXNfZXJyb3IpDQogCQl7DQog CQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJvck1lc3NhZ2UocHNldC5kYikp Ow0KLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQotCQkJUmVzZXRD YW5jZWxDb25uKCk7DQogCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsNCiAJ CX0NCi0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQorDQorCQkvKiBt dXN0IGJlIFBRVFJBTlNfSU5UUkFOUyBhZnRlciBhIEJFR0lOICovDQogCQl0 cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0aW9uU3RhdHVzKHBzZXQu ZGIpOw0KIAl9DQogDQorCS8qIGNyZWF0ZSBhdXRvbWF0aWMgc2F2ZXBvaW50 IGlmIG5lZWRlZCBhbmQgcG9zc2libGUgKi8NCiAJaWYgKHRyYW5zYWN0aW9u X3N0YXR1cyA9PSBQUVRSQU5TX0lOVFJBTlMgJiYNCiAJCXBzZXQub25fZXJy b3Jfcm9sbGJhY2sgIT0gUFNRTF9FUlJPUl9ST0xMQkFDS19PRkYgJiYNCiAJ CShwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUgfHwNCiAJCSBwc2V0Lm9uX2Vy cm9yX3JvbGxiYWNrID09IFBTUUxfRVJST1JfUk9MTEJBQ0tfT04pKQ0KIAl7 DQorCQlQR3Jlc3VsdCAgICpyZXN1bHQ7DQogCQlyZXN1bHQgPSBQUWV4ZWMo cHNldC5kYiwgIlNBVkVQT0lOVCBwZ19wc3FsX3RlbXBvcmFyeV9zYXZlcG9p bnQiKTsNCi0JCWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVT X0NPTU1BTkRfT0spDQorCQlyZXNfZXJyb3IgPSBQUXJlc3VsdFN0YXR1cyhy ZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0s7DQorCQlDbGVhck9yU2F2ZVJl c3VsdChyZXN1bHQpOw0KKwkJcmVzdWx0ID0gTlVMTDsNCisNCisJCWlmIChy ZXNfZXJyb3IpDQogCQl7DQogCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJv ck1lc3NhZ2UocHNldC5kYikpOw0KLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdCk7DQotCQkJUmVzZXRDYW5jZWxDb25uKCk7DQogCQkJZ290byBzZW5k cXVlcnlfY2xlYW51cDsNCiAJCX0NCi0JCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdCk7DQorDQogCQlvbl9lcnJvcl9yb2xsYmFja19zYXZlcG9pbnQgPSB0 cnVlOw0KIAl9DQogDQorCS8qIHByb2Nlc3MgdGhlIHF1ZXJ5LCBvbmUgd2F5 IG9yIHRoZSBvdGhlciAqLw0KIAlpZiAocHNldC5nZGVzY19mbGFnKQ0KIAl7 DQogCQkvKiBEZXNjcmliZSBxdWVyeSdzIHJlc3VsdCBjb2x1bW5zLCB3aXRo b3V0IGV4ZWN1dGluZyBpdCAqLw0KIAkJT0sgPSBEZXNjcmliZVF1ZXJ5KHF1 ZXJ5LCAmZWxhcHNlZF9tc2VjKTsNCi0JCVJlc2V0Q2FuY2VsQ29ubigpOw0K IAkJcmVzdWx0ID0gTlVMTDsJCQkvKiBQUWNsZWFyKE5VTEwpIGRvZXMgbm90 aGluZyAqLw0KIAl9DQogCWVsc2UgaWYgKHBzZXQuZmV0Y2hfY291bnQgPD0g MCB8fCBwc2V0LmdleGVjX2ZsYWcgfHwNCiAJCQkgcHNldC5jcm9zc3RhYl9m bGFnIHx8ICFpc19zZWxlY3RfY29tbWFuZChxdWVyeSkpDQogCXsNCiAJCS8q IERlZmF1bHQgZmV0Y2gtaXQtYWxsLWFuZC1wcmludCBtb2RlICovDQotCQlp bnN0cl90aW1lCWJlZm9yZSwNCi0JCQkJCWFmdGVyOw0KLQ0KLQkJaWYgKHRp bWluZykNCi0JCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9yZSk7DQot DQotCQlyZXN1bHQgPSBQUWV4ZWMocHNldC5kYiwgcXVlcnkpOw0KLQ0KLQkJ LyogdGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIHRpbWlu ZyByZXN1bHQ6ICovDQotCQlSZXNldENhbmNlbENvbm4oKTsNCi0JCU9LID0g UHJvY2Vzc1Jlc3VsdCgmcmVzdWx0KTsNCi0NCi0JCWlmICh0aW1pbmcpDQot CQl7DQotCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChhZnRlcik7DQotCQkJ SU5TVFJfVElNRV9TVUJUUkFDVChhZnRlciwgYmVmb3JlKTsNCi0JCQllbGFw c2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQot CQl9DQotDQotCQkvKiBidXQgcHJpbnRpbmcgcmVzdWx0IGlzbid0OiAqLw0K LQkJaWYgKE9LICYmIHJlc3VsdCkNCi0JCQlPSyA9IFByaW50UXVlcnlSZXN1 bHQocmVzdWx0KTsNCisJCWludCByZXMgPSBTZW5kUXVlcnlBbmRQcm9jZXNz UmVzdWx0cyhxdWVyeSwgJmVsYXBzZWRfbXNlYywgZmFsc2UsIE5VTEwsIE5V TEwsICZ0eF9lbmRlZCk7DQorCQlPSyA9IChyZXMgPj0gMCk7DQogCX0NCiAJ ZWxzZQ0KIAl7DQogCQkvKiBGZXRjaC1pbi1zZWdtZW50cyBtb2RlICovDQog CQlPSyA9IEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKHF1ZXJ5LCAmZWxhcHNlZF9t c2VjKTsNCi0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0ID0gTlVM TDsJCQkvKiBQUWNsZWFyKE5VTEwpIGRvZXMgbm90aGluZyAqLw0KIAl9DQog DQpAQCAtMTM0NywxMSArMTQ1Myw3IEBAIFNlbmRRdWVyeShjb25zdCBjaGFy ICpxdWVyeSkNCiAJCQkJICogc2F2ZXBvaW50IGlzIGdvbmUuIElmIHRoZXkg aXNzdWVkIGEgU0FWRVBPSU5ULCByZWxlYXNpbmcNCiAJCQkJICogb3VycyB3 b3VsZCByZW1vdmUgdGhlaXJzLg0KIAkJCQkgKi8NCi0JCQkJaWYgKHJlc3Vs dCAmJg0KLQkJCQkJKHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1bHQpLCAiQ09N TUlUIikgPT0gMCB8fA0KLQkJCQkJIHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1 bHQpLCAiU0FWRVBPSU5UIikgPT0gMCB8fA0KLQkJCQkJIHN0cmNtcChQUWNt ZFN0YXR1cyhyZXN1bHQpLCAiUkVMRUFTRSIpID09IDAgfHwNCi0JCQkJCSBz dHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0KSwgIlJPTExCQUNLIikgPT0gMCkp DQorCQkJCWlmICh0eF9lbmRlZCkNCiAJCQkJCXN2cHRjbWQgPSBOVUxMOw0K IAkJCQllbHNlDQogCQkJCQlzdnB0Y21kID0gIlJFTEVBU0UgcGdfcHNxbF90 ZW1wb3Jhcnlfc2F2ZXBvaW50IjsNCkBAIC0xMzczLDE0ICsxNDc1LDE1IEBA IFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiAJCQlQR3Jlc3VsdCAg ICpzdnB0cmVzOw0KIA0KIAkJCXN2cHRyZXMgPSBQUWV4ZWMocHNldC5kYiwg c3ZwdGNtZCk7DQotCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHN2cHRyZXMpICE9 IFBHUkVTX0NPTU1BTkRfT0spDQorCQkJcmVzX2Vycm9yID0gUFFyZXN1bHRT dGF0dXMoc3ZwdHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSzsNCisNCisJCQlp ZiAocmVzX2Vycm9yKQ0KIAkJCXsNCiAJCQkJcGdfbG9nX2luZm8oIiVzIiwg UFFlcnJvck1lc3NhZ2UocHNldC5kYikpOw0KIAkJCQlDbGVhck9yU2F2ZVJl c3VsdChzdnB0cmVzKTsNCiAJCQkJT0sgPSBmYWxzZTsNCiANCiAJCQkJUFFj bGVhcihyZXN1bHQpOw0KLQkJCQlSZXNldENhbmNlbENvbm4oKTsNCiAJCQkJ Z290byBzZW5kcXVlcnlfY2xlYW51cDsNCiAJCQl9DQogCQkJUFFjbGVhcihz dnB0cmVzKTsNCkBAIC0xNDExLDYgKzE1MTQsOSBAQCBTZW5kUXVlcnkoY29u c3QgY2hhciAqcXVlcnkpDQogDQogc2VuZHF1ZXJ5X2NsZWFudXA6DQogDQor CS8qIGdsb2JhbCBjYW5jZWxsYXRpb24gcmVzZXQgKi8NCisJUmVzZXRDYW5j ZWxDb25uKCk7DQorDQogCS8qIHJlc2V0IFxnJ3Mgb3V0cHV0LXRvLWZpbGVu YW1lIHRyaWdnZXIgKi8NCiAJaWYgKHBzZXQuZ2ZuYW1lKQ0KIAl7DQpAQCAt MTQ5MSw3ICsxNTk3LDcgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpx dWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCVBRY2xlYXIocmVzdWx0 KTsNCiANCiAJcmVzdWx0ID0gUFFkZXNjcmliZVByZXBhcmVkKHBzZXQuZGIs ICIiKTsNCi0JT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0KSAmJg0KKwlPSyA9 IEFjY2VwdFJlc3VsdChyZXN1bHQsIHRydWUpICYmDQogCQkoUFFyZXN1bHRT dGF0dXMocmVzdWx0KSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYgKE9L ICYmIHJlc3VsdCkNCiAJew0KQEAgLTE1MzksNyArMTY0NSw3IEBAIERlc2Ny aWJlUXVlcnkoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9t c2VjKQ0KIAkJCVBRY2xlYXIocmVzdWx0KTsNCiANCiAJCQlyZXN1bHQgPSBQ UWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQkJCU9LID0gQWNjZXB0UmVz dWx0KHJlc3VsdCk7DQorCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0LCB0 cnVlKTsNCiANCiAJCQlpZiAodGltaW5nKQ0KIAkJCXsNCkBAIC0xNTQ5LDcg KzE2NTUsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBk b3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQl9DQogDQogCQkJaWYgKE9LICYm IHJlc3VsdCkNCi0JCQkJT0sgPSBQcmludFF1ZXJ5UmVzdWx0KHJlc3VsdCk7 DQorCQkJCU9LID0gSGFuZGxlUXVlcnlSZXN1bHQocmVzdWx0LCB0cnVlLCBm YWxzZSwgTlVMTCwgTlVMTCk7DQogDQogCQkJdGVybVBRRXhwQnVmZmVyKCZi dWYpOw0KIAkJfQ0KQEAgLTE2MDksNyArMTcxNSw3IEBAIEV4ZWNRdWVyeVVz aW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRf bXNlYykNCiAJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMocHNldC5kYikgPT0g UFFUUkFOU19JRExFKQ0KIAl7DQogCQlyZXN1bHQgPSBQUWV4ZWMocHNldC5k YiwgIkJFR0lOIik7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHQpICYm DQorCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHQsIHRydWUpICYmDQogCQkJ KFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgPT0gUEdSRVNfQ09NTUFORF9PSyk7 DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KIAkJaWYgKCFPSykN CkBAIC0xNjIzLDcgKzE3MjksNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihj b25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJ CQkgIHF1ZXJ5KTsNCiANCiAJcmVzdWx0ID0gUFFleGVjKHBzZXQuZGIsIGJ1 Zi5kYXRhKTsNCi0JT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0KSAmJg0KKwlP SyA9IEFjY2VwdFJlc3VsdChyZXN1bHQsIHRydWUpICYmDQogCQkoUFFyZXN1 bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYg KCFPSykNCiAJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIE9LKTsNCkBA IC0xNjk2LDcgKzE4MDIsNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihjb25z dCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJCWlz X3BhZ2VyID0gZmFsc2U7DQogCQkJfQ0KIA0KLQkJCU9LID0gQWNjZXB0UmVz dWx0KHJlc3VsdCk7DQorCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0LCB0 cnVlKTsNCiAJCQlBc3NlcnQoIU9LKTsNCiAJCQlTZXRSZXN1bHRWYXJpYWJs ZXMocmVzdWx0LCBPSyk7DQogCQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsNCkBAIC0xODA1LDcgKzE5MTEsNyBAQCBjbGVhbnVwOg0KIAlyZXN1bHQg PSBQUWV4ZWMocHNldC5kYiwgIkNMT1NFIF9wc3FsX2N1cnNvciIpOw0KIAlp ZiAoT0spDQogCXsNCi0JCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdCkgJiYN CisJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdCwgdHJ1ZSkgJiYNCiAJCQko UFFyZXN1bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19DT01NQU5EX09LKTsN CiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQogCX0NCkBAIC0xODE1 LDcgKzE5MjEsNyBAQCBjbGVhbnVwOg0KIAlpZiAoc3RhcnRlZF90eG4pDQog CXsNCiAJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCBPSyA/ICJDT01NSVQi IDogIlJPTExCQUNLIik7DQotCQlPSyAmPSBBY2NlcHRSZXN1bHQocmVzdWx0 KSAmJg0KKwkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdCwgdHJ1ZSkgJiYN CiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19DT01NQU5E X09LKTsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQogCX0NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3Fs L2hlbHAuYw0KaW5kZXggNTZhZmE2ODE3ZS4uYjM5NzFiY2U2NCAxMDA2NDQN Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMNCisrKyBiL3NyYy9iaW4vcHNx bC9oZWxwLmMNCkBAIC00MTMsNiArNDEzLDggQEAgaGVscFZhcmlhYmxlcyh1 bnNpZ25lZCBzaG9ydCBpbnQgcGFnZXIpDQogCWZwcmludGYob3V0cHV0LCBf KCIgIFNFUlZFUl9WRVJTSU9OX05BTUVcbiINCiAJCQkJCSAgIiAgU0VSVkVS X1ZFUlNJT05fTlVNXG4iDQogCQkJCQkgICIgICAgc2VydmVyJ3MgdmVyc2lv biAoaW4gc2hvcnQgc3RyaW5nIG9yIG51bWVyaWMgZm9ybWF0KVxuIikpOw0K KwlmcHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0FMTF9SRVNVTFRTXG4iDQor CQkJCQkgICIgICAgc2hvdyBhbGwgcmVzdWx0cyBvZiBhIGNvbWJpbmVkIHF1 ZXJ5IChcXDspIGluc3RlYWQgb2Ygb25seSB0aGUgbGFzdFxuIikpOw0KIAlm cHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0NPTlRFWFRcbiINCiAJCQkJCSAg IiAgICBjb250cm9scyBkaXNwbGF5IG9mIG1lc3NhZ2UgY29udGV4dCBmaWVs ZHMgW25ldmVyLCBlcnJvcnMsIGFsd2F5c11cbiIpKTsNCiAJZnByaW50Zihv dXRwdXQsIF8oIiAgU0lOR0xFTElORVxuIg0KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC9zZXR0aW5ncy5oIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgN CmluZGV4IDgwZGJlYTllZmQuLjIzOTljZmZhM2YgMTAwNjQ0DQotLS0gYS9z cmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KKysrIGIvc3JjL2Jpbi9wc3FsL3Nl dHRpbmdzLmgNCkBAIC0xNDgsNiArMTQ4LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg X3BzcWxTZXR0aW5ncw0KIAljb25zdCBjaGFyICpwcm9tcHQyOw0KIAljb25z dCBjaGFyICpwcm9tcHQzOw0KIAlQR1ZlcmJvc2l0eSB2ZXJib3NpdHk7CQkv KiBjdXJyZW50IGVycm9yIHZlcmJvc2l0eSBsZXZlbCAqLw0KKwlib29sCQlz aG93X2FsbF9yZXN1bHRzOw0KIAlQR0NvbnRleHRWaXNpYmlsaXR5IHNob3df Y29udGV4dDsJLyogY3VycmVudCBjb250ZXh0IGRpc3BsYXkgbGV2ZWwgKi8N CiB9IFBzcWxTZXR0aW5nczsNCiANCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvc3RhcnR1cC5jIGIvc3JjL2Jpbi9wc3FsL3N0YXJ0dXAuYw0KaW5kZXgg YmU5ZGVjNzQ5ZC4uZDA4YjE1ODg2YSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4v cHNxbC9zdGFydHVwLmMNCisrKyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMN CkBAIC0yMDMsNiArMjAzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQ0KIAlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQUk9NUFQxIiwgREVG QVVMVF9QUk9NUFQxKTsNCiAJU2V0VmFyaWFibGUocHNldC52YXJzLCAiUFJP TVBUMiIsIERFRkFVTFRfUFJPTVBUMik7DQogCVNldFZhcmlhYmxlKHBzZXQu dmFycywgIlBST01QVDMiLCBERUZBVUxUX1BST01QVDMpOw0KKwlTZXRWYXJp YWJsZUJvb2wocHNldC52YXJzLCAiU0hPV19BTExfUkVTVUxUUyIpOw0KIA0K IAlwYXJzZV9wc3FsX29wdGlvbnMoYXJnYywgYXJndiwgJm9wdGlvbnMpOw0K IA0KQEAgLTExNTAsNiArMTE1MSwxMiBAQCB2ZXJib3NpdHlfaG9vayhjb25z dCBjaGFyICpuZXd2YWwpDQogCXJldHVybiB0cnVlOw0KIH0NCiANCitzdGF0 aWMgYm9vbA0KK3Nob3dfYWxsX3Jlc3VsdHNfaG9vayhjb25zdCBjaGFyICpu ZXd2YWwpDQorew0KKwlyZXR1cm4gUGFyc2VWYXJpYWJsZUJvb2wobmV3dmFs LCAiU0hPV19BTExfUkVTVUxUUyIsICZwc2V0LnNob3dfYWxsX3Jlc3VsdHMp Ow0KK30NCisNCiBzdGF0aWMgY2hhciAqDQogc2hvd19jb250ZXh0X3N1YnN0 aXR1dGVfaG9vayhjaGFyICpuZXd2YWwpDQogew0KQEAgLTEyNTEsNiArMTI1 OCw5IEBAIEVzdGFibGlzaFZhcmlhYmxlU3BhY2Uodm9pZCkNCiAJU2V0VmFy aWFibGVIb29rcyhwc2V0LnZhcnMsICJWRVJCT1NJVFkiLA0KIAkJCQkJIHZl cmJvc2l0eV9zdWJzdGl0dXRlX2hvb2ssDQogCQkJCQkgdmVyYm9zaXR5X2hv b2spOw0KKwlTZXRWYXJpYWJsZUhvb2tzKHBzZXQudmFycywgIlNIT1dfQUxM X1JFU1VMVFMiLA0KKwkJCQkJIGJvb2xfc3Vic3RpdHV0ZV9ob29rLA0KKwkJ CQkJIHNob3dfYWxsX3Jlc3VsdHNfaG9vayk7DQogCVNldFZhcmlhYmxlSG9v a3MocHNldC52YXJzLCAiU0hPV19DT05URVhUIiwNCiAJCQkJCSBzaG93X2Nv bnRleHRfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIHNob3dfY29udGV4dF9o b29rKTsNCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdC8wMDFfYmFzaWMu cGwgYi9zcmMvYmluL3BzcWwvdC8wMDFfYmFzaWMucGwNCmluZGV4IDQ0ZWNk MDVhZGQuLmRkMzVjYWZhOWQgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BzcWwv dC8wMDFfYmFzaWMucGwNCisrKyBiL3NyYy9iaW4vcHNxbC90LzAwMV9iYXNp Yy5wbA0KQEAgLTExNSw0ICsxMTUsMjAgQEAgTk9USUZZIGZvbywgJ2Jhcic7 IiwNCiAJcXIvXkFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gImZvbyIgd2l0 aCBwYXlsb2FkICJiYXIiIHJlY2VpdmVkIGZyb20gc2VydmVyIHByb2Nlc3Mg d2l0aCBQSUQgXGQrXC4kLywNCiAJJ25vdGlmaWNhdGlvbiB3aXRoIHBheWxv YWQnKTsNCiANCisjIFRlc3Qgdm9sdW50YXJ5IGNyYXNoDQorbXkgKCRyZXQs ICRvdXQsICRlcnIpID0gJG5vZGUtPnBzcWwoDQorCSdwb3N0Z3JlcycsDQor CSJTRUxFQ1QgJ2JlZm9yZScgQVMgcnVubmluZztcbiIgLg0KKwkiU0VMRUNU IHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBnX2JhY2tlbmRfcGlkKCkpO1xuIiAu DQorCSJTRUxFQ1QgJ0FGVEVSJyBBUyBub3RfcnVubmluZztcbiIpOw0KKw0K K2lzKCRyZXQsIDIsICJzZXJ2ZXIgc3RvcHBlZCIpOw0KK2xpa2UoJG91dCwg cXIvYmVmb3JlLywgIm91dHB1dCBiZWZvcmUgY3Jhc2giKTsNCitvaygkb3V0 ICF+IHFyL0FGVEVSLywgIm5vIG91dHB1dCBhZnRlciBjcmFzaCIpOw0KK2lz KCRlcnIsICdwc3FsOjxzdGRpbj46MjogRkFUQUw6ICB0ZXJtaW5hdGluZyBj b25uZWN0aW9uIGR1ZSB0byBhZG1pbmlzdHJhdG9yIGNvbW1hbmQNCitwc3Fs OjxzdGRpbj46Mjogc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4 cGVjdGVkbHkNCisJVGhpcyBwcm9iYWJseSBtZWFucyB0aGUgc2VydmVyIHRl cm1pbmF0ZWQgYWJub3JtYWxseQ0KKwliZWZvcmUgb3Igd2hpbGUgcHJvY2Vz c2luZyB0aGUgcmVxdWVzdC4NCitwc3FsOjxzdGRpbj46MjogZmF0YWw6IGNv bm5lY3Rpb24gdG8gc2VydmVyIHdhcyBsb3N0JywgImV4cGVjdGVkIGVycm9y IG1lc3NhZ2UiKTsNCisNCiBkb25lX3Rlc3RpbmcoKTsNCmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwv dGFiLWNvbXBsZXRlLmMNCmluZGV4IDYzYmZkZjExYzYuLjljOTM0NzFhZWMg MTAwNjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMNCisr KyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYw0KQEAgLTQ1NjQsNyAr NDU2NCw3IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBp bnQgc3RhcnQsIGludCBlbmQpDQogCQltYXRjaGVzID0gY29tcGxldGVfZnJv bV92YXJpYWJsZXModGV4dCwgIiIsICIiLCBmYWxzZSk7DQogCWVsc2UgaWYg KFRhaWxNYXRjaGVzQ1MoIlxcc2V0IiwgTWF0Y2hBbnkpKQ0KIAl7DQotCQlp ZiAoVGFpbE1hdGNoZXNDUygiQVVUT0NPTU1JVHxPTl9FUlJPUl9TVE9QfFFV SUVUfCINCisJCWlmIChUYWlsTWF0Y2hlc0NTKCJBVVRPQ09NTUlUfE9OX0VS Uk9SX1NUT1B8UVVJRVR8U0hPV19BTExfUkVTVUxUU3wiDQogCQkJCQkJICAi U0lOR0xFTElORXxTSU5HTEVTVEVQIikpDQogCQkJQ09NUExFVEVfV0lUSF9D Uygib24iLCAib2ZmIik7DQogCQllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJD T01QX0tFWVdPUkRfQ0FTRSIpKQ0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQppbmRleCA3Mjg2NWZlMWVi Li5iYjllMDI2ZjkxIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5c2VsZWN0Lm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91dA0KQEAgLTEyNiw3ICsxMjYsNyBA QCBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgc2VsZWN0IDEvMDsJLS0g cm93LCB0aGVuIGVycm9yDQogRVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvDQog c2VsZWN0IDEvMFw7IGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXQ7IC0tIGVy cm9yIG9ubHkNCiBFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8NCi1jb3B5IChz ZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIpIHRvIHN0ZG91 dFw7IHNlbGVjdCAwXDsgc2VsZWN0IDM7IC0tIDEgMiAzDQorY29weSAoc2Vs ZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRc OyBzZWxlY3QgM1w7IHNlbGVjdCA0OyAtLSAxIDIgMyA0DQogMQ0KIDINCiAg P2NvbHVtbj8gDQpAQCAtMTM0LDggKzEzNCwxOCBAQCBjb3B5IChzZWxlY3Qg MSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIpIHRvIHN0ZG91dFw7IHNl bGVjdCAwXDsgc2VsZWN0IDM7IC0tDQogICAgICAgICAzDQogKDEgcm93KQ0K IA0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICA0DQorKDEg cm93KQ0KKw0KIGNyZWF0ZSB0YWJsZSB0ZXN0MyAoYyBpbnQpOw0KLXNlbGVj dCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBmcm9t IHN0ZGluXDsgc2VsZWN0IDE7IC0tIDENCitzZWxlY3QgMFw7IGNvcHkgdGVz dDMgZnJvbSBzdGRpblw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVj dCAxOyAtLSAwIDENCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAg ICAgMA0KKygxIHJvdykNCisNCiAgP2NvbHVtbj8gDQogLS0tLS0tLS0tLQ0K ICAgICAgICAgMQ0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0DQppbmRleCA2NDI4ZWJjNTA3Li4xODVjNTA1MzEyIDEwMDY0NA0K LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KQEAgLTUy OTAsMyArNTI5MCwyNDUgQEAgRVJST1I6ICByZWxhdGlvbiAibm90ZXhpc3Rz IiBkb2VzIG5vdCBleGlzdA0KIExJTkUgMTogU0VMRUNUICogRlJPTSBub3Rl eGlzdHM7DQogICAgICAgICAgICAgICAgICAgICAgIF4NCiBTVEFURU1FTlQ6 ICBTRUxFQ1QgKiBGUk9NIG5vdGV4aXN0czsNCistLQ0KKy0tIGNvbWJpbmVk IHF1ZXJpZXMNCistLQ0KK0NSRUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhU KSBSRVRVUk5TIEJPT0xFQU4gTEFOR1VBR0UgcGxwZ3NxbA0KK0FTICQkDQor ICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBU UlVFIDsgRU5EDQorJCQ7DQorLS0gc2hvdyBib3RoDQorU0VMRUNUIDEgQVMg b25lIFw7IFNFTEVDVCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28g Ow0KKyBvbmUgDQorLS0tLS0NCisgICAxDQorKDEgcm93KQ0KKw0KK05PVElD RTogIHdhcm4gMS41DQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHdh cm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQorIHdhcm4gDQorLS0tLS0tDQor IHQNCisoMSByb3cpDQorDQorIHR3byANCistLS0tLQ0KKyAgIDINCisoMSBy b3cpDQorDQorLS0gXGdzZXQgYXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkN CitTRUxFQ1QgMyBBUyB0aHJlZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsg U0VMRUNUIDQgQVMgZm91ciBcZ3NldA0KKyB0aHJlZSANCistLS0tLS0tDQor ICAgICAzDQorKDEgcm93KQ0KKw0KK05PVElDRTogIHdhcm4gMy41DQorQ09O VEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0 IFJBSVNFDQorIHdhcm4gDQorLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQor XGVjaG8gOnRocmVlIDpmb3VyDQorOnRocmVlIDQNCistLSBzeW50YXggZXJy b3Igc3RvcHMgYWxsIHByb2Nlc3NpbmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1Qg NiArIFw7IFNFTEVDVCB3YXJuKCc2LjUnKSBcOyBTRUxFQ1QgNyA7DQorRVJS T1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiOyINCitMSU5FIDE6IFNF TEVDVCA1IDsgU0VMRUNUIDYgKyA7IFNFTEVDVCB3YXJuKCc2LjUnKSA7IFNF TEVDVCA3IDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQor LS0gd2l0aCBhYm9ydGVkIHRyYW5zYWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVy cm9yDQorQkVHSU4gXDsgU0VMRUNUIDggQVMgZWlnaHQgXDsgU0VMRUNUIDkv MCBBUyBuaW5lIFw7IFJPTExCQUNLIFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0K KyBlaWdodCANCistLS0tLS0tDQorICAgICA4DQorKDEgcm93KQ0KKw0KK0VS Uk9SOiAgZGl2aXNpb24gYnkgemVybw0KKy0tIGNsb3NlIHByZXZpb3VzbHkg YWJvcnRlZCB0cmFuc2FjdGlvbg0KK1JPTExCQUNLOw0KKy0tIG1pc2NlbGxh bmVvdXMgU1FMIGNvbW1hbmRzDQorLS0gKG5vbiBTRUxFQ1Qgb3V0cHV0IGlz IHNlbnQgdG8gc3RkZXJyLCB0aHVzIGlzIG5vdCBzaG93biBpbiBleHBlY3Rl ZCByZXN1bHRzKQ0KK1NFTEVDVCAnb2snIEFTICJiZWdpbiIgXDsNCitDUkVB VEUgVEFCTEUgcHNxbF9jb21pY3MocyBURVhUKSBcOw0KK0lOU0VSVCBJTlRP IHBzcWxfY29taWNzIFZBTFVFUyAoJ0NhbHZpbicpLCAoJ2hvYmJlcycpIFw7 DQorQ09QWSBwc3FsX2NvbWljcyBGUk9NIFNURElOIFw7DQorVVBEQVRFIHBz cWxfY29taWNzIFNFVCBzID0gJ0hvYmJlcycgV0hFUkUgcyA9ICdob2JiZXMn IFw7DQorREVMRVRFIEZST00gcHNxbF9jb21pY3MgV0hFUkUgcyA9ICdNb2Un IFw7DQorQ09QWSBwc3FsX2NvbWljcyBUTyBTVERPVVQgXDsNCitUUlVOQ0FU RSBwc3FsX2NvbWljcyBcOw0KK0RST1AgVEFCTEUgcHNxbF9jb21pY3MgXDsN CitTRUxFQ1QgJ29rJyBBUyAiZG9uZSIgOw0KKyBiZWdpbiANCistLS0tLS0t DQorIG9rDQorKDEgcm93KQ0KKw0KK0NhbHZpbg0KK1N1c2llDQorSG9iYmVz DQorIGRvbmUgDQorLS0tLS0tDQorIG9rDQorKDEgcm93KQ0KKw0KK1xzZXQg U0hPV19BTExfUkVTVUxUUyBvZmYNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VM RUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorTk9USUNF OiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fy bih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisgdHdvIA0KKy0tLS0tDQorICAg Mg0KKygxIHJvdykNCisNCitcc2V0IFNIT1dfQUxMX1JFU1VMVFMgb24NCitE Uk9QIEZVTkNUSU9OIHdhcm4oVEVYVCk7DQorLS0NCistLSBBVVRPQ09NTUlU IGFuZCBjb21iaW5lZCBxdWVyaWVzDQorLS0NCitcc2V0IEFVVE9DT01NSVQg b2ZmDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorIyBB VVRPQ09NTUlUOiBvZmYNCistLSBCRUdJTiBpcyBub3cgaW1wbGljaXQNCitD UkVBVEUgVEFCTEUgZm9vKHMgVEVYVCkgXDsNCitST0xMQkFDSzsNCitDUkVB VEUgVEFCTEUgZm9vKHMgVEVYVCkgXDsNCitJTlNFUlQgSU5UTyBmb28ocykg VkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpIFw7DQorQ09NTUlUOw0KK0RS T1AgVEFCTEUgZm9vIFw7DQorUk9MTEJBQ0s7DQorLS0gdGFibGUgZm9vIGlz IHN0aWxsIHRoZXJlDQorU0VMRUNUICogRlJPTSBmb28gT1JERVIgQlkgMSBc Ow0KK0RST1AgVEFCTEUgZm9vIFw7DQorQ09NTUlUOw0KKyAgIHMgICANCist LS0tLS0tDQorIGhlbGxvDQorIHdvcmxkDQorKDIgcm93cykNCisNCitcc2V0 IEFVVE9DT01NSVQgb24NCitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFVVE9D T01NSVQNCisjIEFVVE9DT01NSVQ6IG9uDQorLS0gQkVHSU4gbm93IGV4cGxp Y2l0IGZvciBtdWx0aS1zdGF0ZW1lbnQgdHJhbnNhY3Rpb25zDQorQkVHSU4g XDsNCitDUkVBVEUgVEFCTEUgZm9vKHMgVEVYVCkgXDsNCitJTlNFUlQgSU5U TyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpIFw7DQorQ09N TUlUOw0KK0JFR0lOIFw7DQorRFJPUCBUQUJMRSBmb28gXDsNCitST0xMQkFD SyBcOw0KKy0tIGltcGxpY2l0IHRyYW5zYWN0aW9ucw0KK1NFTEVDVCAqIEZS T00gZm9vIE9SREVSIEJZIDEgXDsNCitEUk9QIFRBQkxFIGZvbzsNCisgICBz ICAgDQorLS0tLS0tLQ0KKyBoZWxsbw0KKyB3b3JsZA0KKygyIHJvd3MpDQor DQorLS0NCistLSB0ZXN0IE9OX0VSUk9SX1JPTExCQUNLIGFuZCBjb21iaW5l ZCBxdWVyaWVzDQorLS0NCitDUkVBVEUgRlVOQ1RJT04gcHNxbF9lcnJvciht c2cgVEVYVCkgUkVUVVJOUyBCT09MRUFOIEFTICQkDQorICBCRUdJTg0KKyAg ICBSQUlTRSBFWENFUFRJT04gJ2Vycm9yICUnLCBtc2c7DQorICBFTkQ7DQor JCQgTEFOR1VBR0UgcGxwZ3NxbDsNCitcc2V0IE9OX0VSUk9SX1JPTExCQUNL IG9uDQorXGVjaG8gJyMgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1Jf Uk9MTEJBQ0sNCisjIE9OX0VSUk9SX1JPTExCQUNLOiBvbg0KK1xlY2hvICcj IEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKyMgQVVUT0NPTU1JVDogb24N CitCRUdJTjsNCitDUkVBVEUgVEFCTEUgYmxhKHMgTk9fU1VDSF9UWVBFKTsg ICAgICAgICAgICAgICAtLSBmYWlscw0KK0VSUk9SOiAgdHlwZSAibm9fc3Vj aF90eXBlIiBkb2VzIG5vdCBleGlzdA0KK0xJTkUgMTogQ1JFQVRFIFRBQkxF IGJsYShzIE5PX1NVQ0hfVFlQRSk7DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgXg0KK0NSRUFURSBUQUJMRSBibGEocyBURVhUKTsgICAgICAgICAg ICAgICAgICAgICAgIC0tIHN1Y2NlZWRzDQorU0VMRUNUIHBzcWxfZXJyb3Io J29vcHMhJyk7ICAgICAgICAgICAgICAgICAgICAgLS0gZmFpbHMNCitFUlJP UjogIGVycm9yIG9vcHMhDQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9u IHBzcWxfZXJyb3IodGV4dCkgbGluZSAzIGF0IFJBSVNFDQorSU5TRVJUIElO VE8gYmxhIFZBTFVFUyAoJ0NhbHZpbicpLCAoJ0hvYmJlcycpOw0KK0NPTU1J VDsNCitTRUxFQ1QgKiBGUk9NIGJsYSBPUkRFUiBCWSAxOw0KKyAgIHMgICAg DQorLS0tLS0tLS0NCisgQ2FsdmluDQorIEhvYmJlcw0KKygyIHJvd3MpDQor DQorQkVHSU47DQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ1N1c2llJyk7 ICAgICAgICAgLS0gc3VjY2VlZHMNCistLSBub3cgd2l0aCBjb21iaW5lZCBx dWVyaWVzDQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ1Jvc2FseW4nKSBc OyAgICAgLS0gd2lsbCByb2xsYmFjaw0KK1NFTEVDVCAnYmVmb3JlIGVycm9y JyBBUyBzaG93IFw7ICAgICAgICAgIC0tIHdpbGwgc2hvdyBuZXZlcnRoZWxl c3MhDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYm91bSEnKSBcOyAgICAgICAg ICAgLS0gZmFpbHVyZQ0KKyAgU0VMRUNUICdhZnRlciBlcnJvcicgQVMgbm9z aG93OyAgICAgICAgIC0tIGhpZGRlbiBieSBwcmVjZWVkaW5nIGVycm9yDQor ICAgICBzaG93ICAgICANCistLS0tLS0tLS0tLS0tLQ0KKyBiZWZvcmUgZXJy b3INCisoMSByb3cpDQorDQorRVJST1I6ICBlcnJvciBib3VtIQ0KK0NPTlRF WFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUg MyBhdCBSQUlTRQ0KK0lOU0VSVCBJTlRPIGJsYShzKSBWQUxVRVMgKCdNb2Un KSBcOyAgICAgIC0tIHdpbGwgcm9sbGJhY2sNCisgIFNFTEVDVCBwc3FsX2Vy cm9yKCdiYW0hJyk7DQorRVJST1I6ICBlcnJvciBiYW0hDQorQ09OVEVYVDog IFBML3BnU1FMIGZ1bmN0aW9uIHBzcWxfZXJyb3IodGV4dCkgbGluZSAzIGF0 IFJBSVNFDQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ01pc3MgV29ybXdv b2QnKTsgLS0gc3VjY2VlZHMNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBi bGEgT1JERVIgQlkgMTsNCisgICAgICAgcyAgICAgICANCistLS0tLS0tLS0t LS0tLS0NCisgQ2FsdmluDQorIEhvYmJlcw0KKyBNaXNzIFdvcm13b29kDQor IFN1c2llDQorKDQgcm93cykNCisNCistLSBzb21lIHdpdGggYXV0b2NvbW1p dCBvZmYNCitcc2V0IEFVVE9DT01NSVQgb2ZmDQorXGVjaG8gJyMgQVVUT0NP TU1JVDonIDpBVVRPQ09NTUlUDQorIyBBVVRPQ09NTUlUOiBvZmYNCistLSBp bXBsaWNpdCBCRUdJTg0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdEYWQn KTsgICAgICAgICAgIC0tIHN1Y2NlZWRzDQorU0VMRUNUIHBzcWxfZXJyb3Io J2JhZCEnKTsgICAgICAgICAgICAgICAgLS0gaW1wbGljaXQgcGFydGlhbCBy b2xsYmFjaw0KK0VSUk9SOiAgZXJyb3IgYmFkIQ0KK0NPTlRFWFQ6ICBQTC9w Z1NRTCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlT RQ0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdNdW0nKSBcOyAgICAgICAg IC0tIHdpbGwgcm9sbGJhY2sNCitTRUxFQ1QgQ09VTlQoKikgQVMgIiNtdW0i DQorRlJPTSBibGEgV0hFUkUgcyA9ICdNdW0nIFw7ICAgICAgICAgICAgICAg LS0gYnV0IGJlIGNvdW50ZWQgaGVyZQ0KK1NFTEVDVCBwc3FsX2Vycm9yKCdi YWQhJyk7ICAgICAgICAgICAgICAgIC0tIGltcGxpY2l0IHBhcnRpYWwgcm9s bGJhY2sNCisgI211bSANCistLS0tLS0NCisgICAgMQ0KKygxIHJvdykNCisN CitFUlJPUjogIGVycm9yIGJhZCENCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitDT01N SVQ7DQorU0VMRUNUIENPVU5UKCopIEFTICIjbXVtIg0KK0ZST00gYmxhIFdI RVJFIHMgPSAnTXVtJyBcOyAgICAgICAgICAgICAgIC0tIG5vIG11bSBoZXJl DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsNCisgI211bSANCist LS0tLS0NCisgICAgMA0KKygxIHJvdykNCisNCisgICAgICAgcyAgICAgICAN CistLS0tLS0tLS0tLS0tLS0NCisgQ2FsdmluDQorIERhZA0KKyBIb2JiZXMN CisgTWlzcyBXb3Jtd29vZA0KKyBTdXNpZQ0KKyg1IHJvd3MpDQorDQorLS0g cmVzZXQgYWxsDQorXHNldCBBVVRPQ09NTUlUIG9uDQorXHNldCBPTl9FUlJP Ul9ST0xMQkFDSyBvZmYNCitcZWNobyAnIyBmaW5hbCBPTl9FUlJPUl9ST0xM QkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KKyMgZmluYWwgT05fRVJST1Jf Uk9MTEJBQ0s6IG9mZg0KK0RST1AgVEFCTEUgYmxhOw0KK0RST1AgRlVOQ1RJ T04gcHNxbF9lcnJvcjsNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQNCmluZGV4IDU5OWQ1MTFhNjcu LmE0NmZhNWQ0OGEgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25zLm91dA0KQEAgLTkwNCw4ICs5MDQs MTggQEAgRFJPUCBUQUJMRSBhYmM7DQogLS0gdGVzdHMgcmVseSBvbiB0aGUg ZmFjdCB0aGF0IHBzcWwgd2lsbCBub3QgYnJlYWsgU1FMIGNvbW1hbmRzIGFw YXJ0IGF0IGENCiAtLSBiYWNrc2xhc2gtcXVvdGVkIHNlbWljb2xvbiwgYnV0 IHdpbGwgc2VuZCB0aGVtIGFzIG9uZSBRdWVyeS4NCiBjcmVhdGUgdGVtcCB0 YWJsZSBpX3RhYmxlIChmMSBpbnQpOw0KLS0tIHBzcWwgd2lsbCBzaG93IG9u bHkgdGhlIGxhc3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5 DQorLS0gcHNxbCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0aS1z dGF0ZW1lbnQgUXVlcnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsgU0VMRUNU IDM7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCiso MSByb3cpDQorDQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAg IDINCisoMSByb3cpDQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAg ICAgICAgIDMNCkBAIC05MjAsNiArOTMwLDEyIEBAIGluc2VydCBpbnRvIGlf dGFibGUgdmFsdWVzKDEpXDsgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0KIA0K IC0tIDEvMCBlcnJvciB3aWxsIGNhdXNlIHJvbGxpbmcgYmFjayB0aGUgd2hv bGUgaW1wbGljaXQgdHJhbnNhY3Rpb24NCiBpbnNlcnQgaW50byBpX3RhYmxl IHZhbHVlcygyKVw7IHNlbGVjdCAqIGZyb20gaV90YWJsZVw7IHNlbGVjdCAx LzA7DQorIGYxIA0KKy0tLS0NCisgIDENCisgIDINCisoMiByb3dzKQ0KKw0K IEVSUk9SOiAgZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAqIGZyb20gaV90 YWJsZTsNCiAgZjEgDQpAQCAtOTM5LDggKzk1NSwxOCBAQCBXQVJOSU5HOiAg dGhlcmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBiZWdp biBjb252ZXJ0cyBpbXBsaWNpdCB0cmFuc2FjdGlvbiBpbnRvIGEgcmVndWxh ciBvbmUgdGhhdA0KIC0tIGNhbiBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIHRo ZSBRdWVyeQ0KIHNlbGVjdCAxXDsgYmVnaW5cOyBpbnNlcnQgaW50byBpX3Rh YmxlIHZhbHVlcyg1KTsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAg ICAgICAgMQ0KKygxIHJvdykNCisNCiBjb21taXQ7DQogc2VsZWN0IDFcOyBi ZWdpblw7IGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDYpOw0KKyA/Y29s dW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0K IHJvbGxiYWNrOw0KIC0tIGNvbW1pdCBpbiBpbXBsaWNpdC10cmFuc2FjdGlv biBzdGF0ZSBjb21taXRzIGJ1dCBpc3N1ZXMgYSB3YXJuaW5nLg0KIGluc2Vy dCBpbnRvIGlfdGFibGUgdmFsdWVzKDcpXDsgY29tbWl0XDsgaW5zZXJ0IGlu dG8gaV90YWJsZSB2YWx1ZXMoOClcOyBzZWxlY3QgMS8wOw0KQEAgLTk2Nywy MiArOTkzLDUyIEBAIHJvbGxiYWNrOyAgLS0gd2UgYXJlIG5vdCBpbiBhIHRy YW5zYWN0aW9uIGF0IHRoaXMgcG9pbnQNCiBXQVJOSU5HOiAgdGhlcmUgaXMg bm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBpbXBsaWNpdCB0cmFu c2FjdGlvbiBibG9jayBpcyBzdGlsbCBhIHRyYW5zYWN0aW9uIGJsb2NrLCBm b3IgZS5nLiBWQUNVVU0NCiBTRUxFQ1QgMVw7IFZBQ1VVTTsNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBF UlJPUjogIFZBQ1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9u IGJsb2NrDQogU0VMRUNUIDFcOyBDT01NSVRcOyBWQUNVVU07DQogV0FSTklO RzogIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQorID9j b2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQor DQogRVJST1I6ICBWQUNVVU0gY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2Fj dGlvbiBibG9jaw0KIC0tIHdlIGRpc2FsbG93IHNhdmVwb2ludC1yZWxhdGVk IGNvbW1hbmRzIGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlDQogU0VM RUNUIDFcOyBTQVZFUE9JTlQgc3A7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0t LS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZFUE9J TlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCiBT RUxFQ1QgMVw7IENPTU1JVFw7IFNBVkVQT0lOVCBzcDsNCiBXQVJOSU5HOiAg dGhlcmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBF UlJPUjogIFNBVkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0 aW9uIGJsb2Nrcw0KIFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcFw7IFNFTEVD VCAyOw0KIEVSUk9SOiAgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIGNhbiBvbmx5 IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VMRUNUIDJcOyBS RUxFQVNFIFNBVkVQT0lOVCBzcFw7IFNFTEVDVCAzOw0KKyA/Y29sdW1uPyAN CistLS0tLS0tLS0tDQorICAgICAgICAyDQorKDEgcm93KQ0KKw0KIEVSUk9S OiAgUkVMRUFTRSBTQVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFu c2FjdGlvbiBibG9ja3MNCiAtLSBidXQgdGhpcyBpcyBPSywgYmVjYXVzZSB0 aGUgQkVHSU4gY29udmVydHMgaXQgdG8gYSByZWd1bGFyIHhhY3QNCiBTRUxF Q1QgMVw7IEJFR0lOXDsgU0FWRVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8gU0FW RVBPSU5UIHNwXDsgQ09NTUlUOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0t DQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIC0tIFRlc3RzIGZvciBBTkQg Q0hBSU4gaW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VUIFRS QU5TQUNUSU9OIFJFQUQgT05MWVw7IENPTU1JVCBBTkQgQ0hBSU47ICAtLSBl cnJvcg0KIEVSUk9SOiAgQ09NTUlUIEFORCBDSEFJTiBjYW4gb25seSBiZSB1 c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlzZWxlY3Quc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29weXNlbGVjdC5zcWwNCmluZGV4IDFkOThkYWQzYzguLmUz MmE0ZjhlMzggMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b3B5c2VsZWN0LnNxbA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eXNlbGVjdC5zcWwNCkBAIC04NCwxMCArODQsMTAgQEAgZHJvcCB0YWJsZSB0 ZXN0MTsNCiAtLSBwc3FsIGhhbmRsaW5nIG9mIENPUFkgaW4gbXVsdGktY29t bWFuZCBzdHJpbmdzDQogY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IHNl bGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0KIHNlbGVjdCAxLzBcOyBj b3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQotY29w eSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBz dGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLSAxIDIgMw0KK2NvcHkg KHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8gc3Rk b3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsgLS0gMSAyIDMgNA0KIA0KIGNy ZWF0ZSB0YWJsZSB0ZXN0MyAoYyBpbnQpOw0KLXNlbGVjdCAwXDsgY29weSB0 ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgc2Vs ZWN0IDE7IC0tIDENCitzZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBzdGRp blw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAwIDEN CiAxDQogXC4NCiAyDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHNxbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0K aW5kZXggMGY1Mjg3Zjc3Yi4uOGY0OWE1ZjM0NyAxMDA2NDQNCi0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wc3FsLnNxbA0KQEAgLTEzMTYsMyArMTMxNiwxNDQgQEAg RFJPUCBUQUJMRSBvZXJfdGVzdDsNCiBcc2V0IEVDSE8gZXJyb3JzDQogU0VM RUNUICogRlJPTSBub3RleGlzdHM7DQogXHNldCBFQ0hPIGFsbA0KKw0KKy0t DQorLS0gY29tYmluZWQgcXVlcmllcw0KKy0tDQorQ1JFQVRFIEZVTkNUSU9O IHdhcm4obXNnIFRFWFQpIFJFVFVSTlMgQk9PTEVBTiBMQU5HVUFHRSBwbHBn c3FsDQorQVMgJCQNCisgIEJFR0lOIFJBSVNFIE5PVElDRSAnd2FybiAlJywg bXNnIDsgUkVUVVJOIFRSVUUgOyBFTkQNCiskJDsNCisNCistLSBzaG93IGJv dGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7 IFNFTEVDVCAyIEFTIHR3byA7DQorLS0gXGdzZXQgYXBwbGllcyB0byBsYXN0 IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJlZSBcOyBTRUxFQ1Qgd2Fy bignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBcZ3NldA0KK1xlY2hvIDp0 aHJlZSA6Zm91cg0KKy0tIHN5bnRheCBlcnJvciBzdG9wcyBhbGwgcHJvY2Vz c2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsgU0VMRUNUIHdhcm4o JzYuNScpIFw7IFNFTEVDVCA3IDsNCistLSB3aXRoIGFib3J0ZWQgdHJhbnNh Y3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitCRUdJTiBcOyBTRUxFQ1Qg OCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5pbmUgXDsgUk9MTEJBQ0sg XDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorLS0gY2xvc2UgcHJldmlvdXNseSBh Ym9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJBQ0s7DQorDQorLS0gbWlzY2Vs bGFuZW91cyBTUUwgY29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBvdXRwdXQg aXMgc2VudCB0byBzdGRlcnIsIHRodXMgaXMgbm90IHNob3duIGluIGV4cGVj dGVkIHJlc3VsdHMpDQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBcOw0KK0NS RUFURSBUQUJMRSBwc3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5TRVJUIElO VE8gcHNxbF9jb21pY3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9iYmVzJykg XDsNCitDT1BZIHBzcWxfY29taWNzIEZST00gU1RESU4gXDsNCitVUERBVEUg cHNxbF9jb21pY3MgU0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0gJ2hvYmJl cycgXDsNCitERUxFVEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBzID0gJ01v ZScgXDsNCitDT1BZIHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0KK1RSVU5D QVRFIHBzcWxfY29taWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2NvbWljcyBc Ow0KK1NFTEVDVCAnb2snIEFTICJkb25lIiA7DQorTW9lDQorU3VzaWUNCitc Lg0KKw0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvZmYNCitTRUxFQ1QgMSBB UyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3 byA7DQorDQorXHNldCBTSE9XX0FMTF9SRVNVTFRTIG9uDQorRFJPUCBGVU5D VElPTiB3YXJuKFRFWFQpOw0KKw0KKy0tDQorLS0gQVVUT0NPTU1JVCBhbmQg Y29tYmluZWQgcXVlcmllcw0KKy0tDQorXHNldCBBVVRPQ09NTUlUIG9mZg0K K1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKy0tIEJFR0lO IGlzIG5vdyBpbXBsaWNpdA0KKw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhU KSBcOw0KK1JPTExCQUNLOw0KKw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhU KSBcOw0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMgKCdoZWxsbycpLCAo J3dvcmxkJykgXDsNCitDT01NSVQ7DQorDQorRFJPUCBUQUJMRSBmb28gXDsN CitST0xMQkFDSzsNCisNCistLSB0YWJsZSBmb28gaXMgc3RpbGwgdGhlcmUN CitTRUxFQ1QgKiBGUk9NIGZvbyBPUkRFUiBCWSAxIFw7DQorRFJPUCBUQUJM RSBmb28gXDsNCitDT01NSVQ7DQorDQorXHNldCBBVVRPQ09NTUlUIG9uDQor XGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorLS0gQkVHSU4g bm93IGV4cGxpY2l0IGZvciBtdWx0aS1zdGF0ZW1lbnQgdHJhbnNhY3Rpb25z DQorDQorQkVHSU4gXDsNCitDUkVBVEUgVEFCTEUgZm9vKHMgVEVYVCkgXDsN CitJTlNFUlQgSU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3Js ZCcpIFw7DQorQ09NTUlUOw0KKw0KK0JFR0lOIFw7DQorRFJPUCBUQUJMRSBm b28gXDsNCitST0xMQkFDSyBcOw0KKw0KKy0tIGltcGxpY2l0IHRyYW5zYWN0 aW9ucw0KK1NFTEVDVCAqIEZST00gZm9vIE9SREVSIEJZIDEgXDsNCitEUk9Q IFRBQkxFIGZvbzsNCisNCistLQ0KKy0tIHRlc3QgT05fRVJST1JfUk9MTEJB Q0sgYW5kIGNvbWJpbmVkIHF1ZXJpZXMNCistLQ0KK0NSRUFURSBGVU5DVElP TiBwc3FsX2Vycm9yKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gQVMgJCQN CisgIEJFR0lODQorICAgIFJBSVNFIEVYQ0VQVElPTiAnZXJyb3IgJScsIG1z ZzsNCisgIEVORDsNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0KKw0KK1xzZXQg T05fRVJST1JfUk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9FUlJPUl9ST0xM QkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK1xlY2hvICcjIEFVVE9DT01N SVQ6JyA6QVVUT0NPTU1JVA0KKw0KK0JFR0lOOw0KK0NSRUFURSBUQUJMRSBi bGEocyBOT19TVUNIX1RZUEUpOyAgICAgICAgICAgICAgIC0tIGZhaWxzDQor Q1JFQVRFIFRBQkxFIGJsYShzIFRFWFQpOyAgICAgICAgICAgICAgICAgICAg ICAgLS0gc3VjY2VlZHMNCitTRUxFQ1QgcHNxbF9lcnJvcignb29wcyEnKTsg ICAgICAgICAgICAgICAgICAgICAtLSBmYWlscw0KK0lOU0VSVCBJTlRPIGJs YSBWQUxVRVMgKCdDYWx2aW4nKSwgKCdIb2JiZXMnKTsNCitDT01NSVQ7DQor DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsNCisNCitCRUdJTjsN CitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnU3VzaWUnKTsgICAgICAgICAt LSBzdWNjZWVkcw0KKy0tIG5vdyB3aXRoIGNvbWJpbmVkIHF1ZXJpZXMNCitJ TlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9zYWx5bicpIFw7ICAgICAtLSB3 aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZvcmUgZXJyb3InIEFTIHNob3cg XDsgICAgICAgICAgLS0gd2lsbCBzaG93IG5ldmVydGhlbGVzcyENCisgIFNF TEVDVCBwc3FsX2Vycm9yKCdib3VtIScpIFw7ICAgICAgICAgICAtLSBmYWls dXJlDQorICBTRUxFQ1QgJ2FmdGVyIGVycm9yJyBBUyBub3Nob3c7ICAgICAg ICAgLS0gaGlkZGVuIGJ5IHByZWNlZWRpbmcgZXJyb3INCitJTlNFUlQgSU5U TyBibGEocykgVkFMVUVTICgnTW9lJykgXDsgICAgICAtLSB3aWxsIHJvbGxi YWNrDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYmFtIScpOw0KK0lOU0VSVCBJ TlRPIGJsYSBWQUxVRVMgKCdNaXNzIFdvcm13b29kJyk7IC0tIHN1Y2NlZWRz DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQor DQorLS0gc29tZSB3aXRoIGF1dG9jb21taXQgb2ZmDQorXHNldCBBVVRPQ09N TUlUIG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0K Kw0KKy0tIGltcGxpY2l0IEJFR0lODQorSU5TRVJUIElOVE8gYmxhIFZBTFVF UyAoJ0RhZCcpOyAgICAgICAgICAgLS0gc3VjY2VlZHMNCitTRUxFQ1QgcHNx bF9lcnJvcignYmFkIScpOyAgICAgICAgICAgICAgICAtLSBpbXBsaWNpdCBw YXJ0aWFsIHJvbGxiYWNrDQorDQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAo J011bScpIFw7ICAgICAgICAgLS0gd2lsbCByb2xsYmFjaw0KK1NFTEVDVCBD T1VOVCgqKSBBUyAiI211bSINCitGUk9NIGJsYSBXSEVSRSBzID0gJ011bScg XDsgICAgICAgICAgICAgICAtLSBidXQgYmUgY291bnRlZCBoZXJlDQorU0VM RUNUIHBzcWxfZXJyb3IoJ2JhZCEnKTsgICAgICAgICAgICAgICAgLS0gaW1w bGljaXQgcGFydGlhbCByb2xsYmFjaw0KK0NPTU1JVDsNCisNCitTRUxFQ1Qg Q09VTlQoKikgQVMgIiNtdW0iDQorRlJPTSBibGEgV0hFUkUgcyA9ICdNdW0n IFw7ICAgICAgICAgICAgICAgLS0gbm8gbXVtIGhlcmUNCitTRUxFQ1QgKiBG Uk9NIGJsYSBPUkRFUiBCWSAxOw0KKw0KKy0tIHJlc2V0IGFsbA0KK1xzZXQg QVVUT0NPTU1JVCBvbg0KK1xzZXQgT05fRVJST1JfUk9MTEJBQ0sgb2ZmDQor XGVjaG8gJyMgZmluYWwgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1Jf Uk9MTEJBQ0sNCitEUk9QIFRBQkxFIGJsYTsNCitEUk9QIEZVTkNUSU9OIHBz cWxfZXJyb3I7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv dHJhbnNhY3Rpb25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5z YWN0aW9ucy5zcWwNCmluZGV4IDBhNzE2YjUwNmIuLmQ3MWMzY2U5M2UgMTAw NjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMu c3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMu c3FsDQpAQCAtNTA2LDcgKzUwNiw3IEBAIERST1AgVEFCTEUgYWJjOw0KIA0K IGNyZWF0ZSB0ZW1wIHRhYmxlIGlfdGFibGUgKGYxIGludCk7DQogDQotLS0g cHNxbCB3aWxsIHNob3cgb25seSB0aGUgbGFzdCByZXN1bHQgaW4gYSBtdWx0 aS1zdGF0ZW1lbnQgUXVlcnkNCistLSBwc3FsIHdpbGwgc2hvdyBhbGwgcmVz dWx0cyBvZiBhIG11bHRpLXN0YXRlbWVudCBRdWVyeQ0KIFNFTEVDVCAxXDsg U0VMRUNUIDJcOyBTRUxFQ1QgMzsNCiANCiAtLSB0aGlzIGltcGxpY2l0bHkg Y29tbWl0czoNCg== --2056645051-1030568680-1648310130=:3931183--