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 1mU3zy-00050L-N1 for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Sep 2021 09:29:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mU3zQ-0007VF-3V for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Sep 2021 09:29:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mU3zP-0007V7-Ni for pgsql-hackers@lists.postgresql.org; Sat, 25 Sep 2021 09:28:59 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mU3zL-0002iX-Go for pgsql-hackers@lists.postgresql.org; Sat, 25 Sep 2021 09:28:58 +0000 Received: from pseudo (185.141.6.84.rev.sfr.net [84.6.141.185]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id 14092C0024; Sat, 25 Sep 2021 11:31:19 +0200 (CEST) Date: Sat, 25 Sep 2021 11:28:52 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@pseudo To: Peter Eisentraut cc: "pgsql-hackers@lists.postgresql.org" Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: <6954328d-96f2-77f7-735f-7ce493a40949@enterprisedb.com> Message-ID: References: <69C0B369-570C-4524-8EE4-BCCACECB6BEE@amazon.com> <20210412193301.GA11204@alvherre.pgsql> <3738387.1618451507@sss.pgh.pa.us> <451a2111-3757-c511-9413-8f8af531a167@enterprisedb.com> <18c78a01-4a34-9dd4-f78b-6860f1420c8e@enterprisedb.com> <6954328d-96f2-77f7-735f-7ce493a40949@enterprisedb.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-702423236-1632562133=:3216312" 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-702423236-1632562133=:3216312 Content-Type: text/plain; format=flowed; charset=US-ASCII Hallo Peter, > It turns out that your v8 patch still has the issue complained about in [0]. > The issue is that after COMMIT AND CHAIN, the internal savepoint is gone, but > the patched psql still thinks it should be there and tries to release it, > which leads to errors. Indeed. Thanks for the catch. Attached v9 integrates your tests and makes them work. -- Fabien. --2056645051-702423236-1632562133=:3216312 Content-Type: text/x-diff; name=psql-show-all-results-9.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-9.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCBiNTJkMTg3NzIyLi4wY2Y0YTM3YTVmIDEwMDY0NA0KLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0 ZW1lbnRzLm91dA0KKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dA0KQEAgLTUwLDggKzUw LDI4IEBAIEJFR0lOIFw7DQogU0VMRUNUIDIuMCBBUyAiZmxvYXQiIFw7DQog U0VMRUNUICd3b3JsZCcgQVMgInRleHQiIFw7DQogQ09NTUlUOw0KKyBmbG9h dCANCistLS0tLS0tDQorICAgMi4wDQorKDEgcm93KQ0KKw0KKyB0ZXh0ICAN CistLS0tLS0tDQorIHdvcmxkDQorKDEgcm93KQ0KKw0KIC0tIGNvbXBvdW5k IHdpdGggZW1wdHkgc3RhdGVtZW50cyBhbmQgc3B1cmlvdXMgbGVhZGluZyBz cGFjaW5nDQogXDtcOyAgIFNFTEVDVCAzICsgMyBcO1w7XDsgICBTRUxFQ1Qg JyAnIHx8ICcgIScgXDtcOyAgIFNFTEVDVCAxICsgNCBcOzsNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgNg0KKygxIHJvdykNCisNCisg P2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICENCisoMSByb3cpDQorDQog ID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDUNCkBAIC02MSw2 ICs4MSwxMSBAQCBDT01NSVQ7DQogU0VMRUNUIDEgKyAxICsgMSBBUyAiYWRk IiBcZ3NldA0KIFNFTEVDVCA6YWRkICsgMSArIDEgQVMgImFkZCIgXDsNCiBT RUxFQ1QgOmFkZCArIDEgKyAxIEFTICJhZGQiIFxnc2V0DQorIGFkZCANCist LS0tLQ0KKyAgIDUNCisoMSByb3cpDQorDQogLS0gc2V0IG9wZXJhdG9yDQog U0VMRUNUIDEgQVMgaSBVTklPTiBTRUxFQ1QgMiBPUkRFUiBCWSBpOw0KICBp IA0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggZmNh YjVjMGQ1MS4uN2M1NTA0YmM3NCAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dt 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+DQpAQCAtMzU0MiwxMCArMzUzNSw2IEBAIHNlbGVjdCAxXDsg c2VsZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1 ZGVkIGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUN CiAgICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0i cHJvdG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZv ciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBt dWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkg cmVzdWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0 OyBpbiB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhy ZWUgPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVj dXRlZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAg ICAgb25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KICAg ICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRlbT4NCiAgICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00MTMyLDYgKzQxMjEsMTggQEAgYmFyDQog ICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICAgPHZhcmxpc3RlbnRy eT4NCisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8 L3Zhcm5hbWU+PC90ZXJtPg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICAgPHBhcmE+DQorICAgICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0 IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIG9ubHkgdGhlIGxhc3QNCisg ICAgICAgIHJlc3VsdCBvZiBhIGNvbWJpbmVkIHF1ZXJ5ICg8bGl0ZXJhbD5c OzwvbGl0ZXJhbD4pIGlzIHNob3duIGluc3RlYWQgb2YNCisgICAgICAgIGFs bCBvZiB0aGVtLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVy YWw+LiAgVGhlIG9mZiBiZWhhdmlvcg0KKyAgICAgICAgaXMgZm9yIGNvbXBh dGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBwc3FsLg0KKyAgICAg ICAgPC9wYXJhPg0KKyAgICAgICAgPC9saXN0aXRlbT4NCisgICAgICA8L3Zh cmxpc3RlbnRyeT4NCisNCisgICAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQ09OVEVYVDwvdmFybmFtZT48L3Rl cm0+DQogICAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgICA8cGFyYT4NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3Bz cWwvY29tbW9uLmMNCmluZGV4IDU2NDA3ODY2NzguLjQ4MWEzMTZmZWQgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTMzLDYgKzMzLDggQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCwgYm9vbCAqdHhfZW5kZWQpOw0K IA0KIA0KIC8qDQpAQCAtMzUzLDcgKzM1NSw3IEBAIENoZWNrQ29ubmVjdGlv bih2b2lkKQ0KICAqIFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBm YWxzZSBmb3IgZXJyb3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1B Y2NlcHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRS ZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9y KQ0KIHsNCiAJYm9vbAkJT0s7DQogDQpAQCAtMzg0LDcgKzM4Niw3IEBAIEFj Y2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KIAkJCQlicmVh azsNCiAJCX0NCiANCi0JaWYgKCFPSykNCisJaWYgKCFPSyAmJiBzaG93X2Vy cm9yKQ0KIAl7DQogCQljb25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpOw0KIA0KQEAgLTQ3Miw2ICs0NzQsMTggQEAgQ2xlYXJP clNhdmVSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCkNCiAJfQ0KIH0NCiANCisv Kg0KKyAqIENvbnN1bWUgYWxsIHJlc3VsdHMNCisgKi8NCitzdGF0aWMgdm9p ZA0KK0NsZWFyT3JTYXZlQWxsUmVzdWx0cygpDQorew0KKwlQR3Jlc3VsdAkq cmVzdWx0Ow0KKw0KKwl3aGlsZSAoKHJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBz ZXQuZGIpKSAhPSBOVUxMKQ0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsNCit9DQorDQogDQogLyoNCiAgKiBQcmludCBtaWNyb3RpbWluZyBvdXRw dXQuICBBbHdheXMgcHJpbnQgcmF3IG1pbGxpc2Vjb25kczsgaWYgdGhlIGlu dGVydmFsDQpAQCAtNTcyLDcgKzU4Niw3IEBAIFBTUUxleGVjKGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiANCi0JaWYg KCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1bHQocmVz LCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzKTsNCiAJ CXJlcyA9IE5VTEw7DQpAQCAtNTk0LDExICs2MDgsOCBAQCBQU1FMZXhlYyhj b25zdCBjaGFyICpxdWVyeSkNCiBpbnQNCiBQU1FMZXhlY1dhdGNoKGNvbnN0 IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQsIEZJTEUg KnByaW50UXVlcnlGb3V0KQ0KIHsNCi0JUEdyZXN1bHQgICAqcmVzOw0KIAlk b3VibGUJCWVsYXBzZWRfbXNlYyA9IDA7DQotCWluc3RyX3RpbWUJYmVmb3Jl Ow0KLQlpbnN0cl90aW1lCWFmdGVyOw0KLQlGSUxFCSAgICpmb3V0Ow0KKwlp bnQJCQlyZXM7DQogDQogCWlmICghcHNldC5kYikNCiAJew0KQEAgLTYwNyw3 NyArNjE4LDE0IEBAIFBTUUxleGVjV2F0Y2goY29uc3QgY2hhciAqcXVlcnks IGNvbnN0IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVyeUZv dXQpDQogCX0NCiANCiAJU2V0Q2FuY2VsQ29ubihwc2V0LmRiKTsNCi0NCi0J aWYgKHBzZXQudGltaW5nKQ0KLQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChi ZWZvcmUpOw0KLQ0KLQlyZXMgPSBQUWV4ZWMocHNldC5kYiwgcXVlcnkpOw0K LQ0KKwlyZXMgPSBTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhxdWVyeSwg JmVsYXBzZWRfbXNlYywgdHJ1ZSwgb3B0LCBwcmludFF1ZXJ5Rm91dCwgTlVM TCk7DQogCVJlc2V0Q2FuY2VsQ29ubigpOw0KIA0KLQlpZiAoIUFjY2VwdFJl c3VsdChyZXMpKQ0KLQl7DQotCQlDbGVhck9yU2F2ZVJlc3VsdChyZXMpOw0K LQkJcmV0dXJuIDA7DQotCX0NCi0NCi0JaWYgKHBzZXQudGltaW5nKQ0KLQl7 DQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0JCUlOU1RS X1RJTUVfU1VCVFJBQ1QoYWZ0ZXIsIGJlZm9yZSk7DQotCQllbGFwc2VkX21z ZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQotCX0NCi0N Ci0JLyoNCi0JICogSWYgU0lHSU5UIGlzIHNlbnQgd2hpbGUgdGhlIHF1ZXJ5 IGlzIHByb2Nlc3NpbmcsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZQ0KLQkgKiBj b25zdW1lZC4gIFRoZSB1c2VyJ3MgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRv IGNhbmNlbCB0aGUgZW50aXJlIHdhdGNoDQotCSAqIHByb2Nlc3MsIHNvIGRl dGVjdCBhIHNlbnQgY2FuY2VsbGF0aW9uIHJlcXVlc3QgYW5kIGV4aXQgaW4g dGhpcyBjYXNlLg0KLQkgKi8NCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQ0KLQl7 DQotCQlQUWNsZWFyKHJlcyk7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlm b3V0ID0gcHJpbnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5Rm91dCA6IHBzZXQu cXVlcnlGb3V0Ow0KLQ0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykp DQotCXsNCi0JCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLQkJCXByaW50UXVl cnkocmVzLCBvcHQsIGZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOw0KLQkJ CWJyZWFrOw0KLQ0KLQkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCWZw cmludGYoZm91dCwgIiVzXG4lc1xuXG4iLCBvcHQtPnRpdGxlLCBQUWNtZFN0 YXR1cyhyZXMpKTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgUEdSRVNfRU1Q VFlfUVVFUlk6DQotCQkJcGdfbG9nX2Vycm9yKCJcXHdhdGNoIGNhbm5vdCBi ZSB1c2VkIHdpdGggYW4gZW1wdHkgcXVlcnkiKTsNCi0JCQlQUWNsZWFyKHJl cyk7DQotCQkJcmV0dXJuIC0xOw0KLQ0KLQkJY2FzZSBQR1JFU19DT1BZX09V VDoNCi0JCWNhc2UgUEdSRVNfQ09QWV9JTjoNCi0JCWNhc2UgUEdSRVNfQ09Q WV9CT1RIOg0KLQkJCXBnX2xvZ19lcnJvcigiXFx3YXRjaCBjYW5ub3QgYmUg dXNlZCB3aXRoIENPUFkiKTsNCi0JCQlQUWNsZWFyKHJlcyk7DQotCQkJcmV0 dXJuIC0xOw0KLQ0KLQkJZGVmYXVsdDoNCi0JCQlwZ19sb2dfZXJyb3IoInVu ZXhwZWN0ZWQgcmVzdWx0IHN0YXR1cyBmb3IgXFx3YXRjaCIpOw0KLQkJCVBR Y2xlYXIocmVzKTsNCi0JCQlyZXR1cm4gLTE7DQotCX0NCi0NCi0JUFFjbGVh cihyZXMpOw0KLQ0KLQlmZmx1c2goZm91dCk7DQotDQogCS8qIFBvc3NpYmxl IG1pY3JvdGltaW5nIG91dHB1dCAqLw0KIAlpZiAocHNldC50aW1pbmcpDQog CQlQcmludFRpbWluZyhlbGFwc2VkX21zZWMpOw0KIA0KLQlyZXR1cm4gMTsN CisJcmV0dXJuIHJlczsNCiB9DQogDQogDQpAQCAtNzEyLDcgKzY2MCw3IEBA IFByaW50Tm90aWZpY2F0aW9ucyh2b2lkKQ0KICAqIFJldHVybnMgdHJ1ZSBp ZiBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UuDQogICovDQogc3RhdGlj IGJvb2wNCi1QcmludFF1ZXJ5VHVwbGVzKGNvbnN0IFBHcmVzdWx0ICpyZXN1 bHRzKQ0KK1ByaW50UXVlcnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3Vs dHMsIGNvbnN0IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVy eUZvdXQpDQogew0KIAlib29sCQlyZXN1bHQgPSB0cnVlOw0KIA0KQEAgLTc0 NCw4ICs2OTIsOSBAQCBQcmludFF1ZXJ5VHVwbGVzKGNvbnN0IFBHcmVzdWx0 ICpyZXN1bHRzKQ0KIAl9DQogCWVsc2UNCiAJew0KLQkJcHJpbnRRdWVyeShy ZXN1bHRzLCAmcHNldC5wb3B0LCBwc2V0LnF1ZXJ5Rm91dCwgZmFsc2UsIHBz ZXQubG9nZmlsZSk7DQotCQlpZiAoZmVycm9yKHBzZXQucXVlcnlGb3V0KSkN CisJCUZJTEUgKmZvdXQgPSBwcmludFF1ZXJ5Rm91dCA/IHByaW50UXVlcnlG b3V0IDogcHNldC5xdWVyeUZvdXQ7DQorCQlwcmludFF1ZXJ5KHJlc3VsdHMs IG9wdCA/IG9wdCA6ICZwc2V0LnBvcHQsIGZvdXQsIGZhbHNlLCBwc2V0Lmxv Z2ZpbGUpOw0KKwkJaWYgKGZlcnJvcihmb3V0KSkNCiAJCXsNCiAJCQlwZ19s b2dfZXJyb3IoImNvdWxkIG5vdCBwcmludCByZXN1bHQgdGFibGU6ICVtIik7 DQogCQkJcmVzdWx0ID0gZmFsc2U7DQpAQCAtODkwLDIxMyArODM5LDEzMSBA QCBsb29wX2V4aXQ6DQogDQogDQogLyoNCi0gKiBQcm9jZXNzUmVzdWx0OiB1 dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seQ0K LSAqDQotICogV2hlbiBvdXIgY29tbWFuZCBzdHJpbmcgY29udGFpbmVkIGEg Q09QWSBGUk9NIFNURElOIG9yIENPUFkgVE8gU1RET1VULA0KLSAqIFBRZXhl YygpIGhhcyBzdG9wcGVkIGF0IHRoZSBQR3Jlc3VsdCBhc3NvY2lhdGVkIHdp dGggdGhlIGZpcnN0IHN1Y2gNCi0gKiBjb21tYW5kLiAgSW4gdGhhdCBldmVu dCwgd2UnbGwgbWFyc2hhbCBkYXRhIGZvciB0aGUgQ09QWSBhbmQgdGhlbiBj eWNsZQ0KLSAqIHRocm91Z2ggYW55IHN1YnNlcXVlbnQgUEdyZXN1bHQgb2Jq ZWN0cy4NCi0gKg0KLSAqIFdoZW4gdGhlIGNvbW1hbmQgc3RyaW5nIGNvbnRh aW5lZCBubyBzdWNoIENPUFkgY29tbWFuZCwgdGhpcyBmdW5jdGlvbg0KLSAq IGRlZ2VuZXJhdGVzIHRvIGFuIEFjY2VwdFJlc3VsdCgpIGNhbGwuDQotICoN Ci0gKiBDaGFuZ2VzIGl0cyBhcmd1bWVudCB0byBwb2ludCB0byB0aGUgbGFz dCBQR3Jlc3VsdCBvZiB0aGUgY29tbWFuZCBzdHJpbmcsDQotICogb3IgTlVM TCBpZiB0aGF0IHJlc3VsdCB3YXMgZm9yIGEgQ09QWSBUTyBTVERPVVQuICAo UmV0dXJuaW5nIE5VTEwgcHJldmVudHMNCi0gKiB0aGUgY29tbWFuZCBzdGF0 dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGljaCB3ZSB3YW50IGluIHRoYXQg Y2FzZSBzbyB0aGF0DQotICogdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3QgZ2V0 IHRha2VuIGFzIHBhcnQgb2YgdGhlIENPUFkgZGF0YS4pDQotICoNCi0gKiBS ZXR1cm5zIHRydWUgb24gY29tcGxldGUgc3VjY2VzcywgZmFsc2Ugb3RoZXJ3 aXNlLiAgUG9zc2libGUgZmFpbHVyZSBtb2Rlcw0KLSAqIGluY2x1ZGUgcHVy ZWx5IGNsaWVudC1zaWRlIHByb2JsZW1zOyBjaGVjayB0aGUgdHJhbnNhY3Rp b24gc3RhdHVzIGZvciB0aGUNCi0gKiBzZXJ2ZXItc2lkZSBvcGluaW9uLg0K KyAqIE1hcnNoYWwgdGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5l IHdpbGwgZ2V0IHRoZQ0KKyAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZ IHN0YXRlLCB0aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KKyAqIG9uY2Ug YW5kIHJlcG9ydCBhbnkgZXJyb3IuIFJldHVybiB3aGV0aGVyIGFsbCB3YXMg b2suDQorICoNCisgKiBGb3IgQ09QWSBPVVQsIGRpcmVjdCB0aGUgb3V0cHV0 IHRvIHBzZXQuY29weVN0cmVhbSBpZiBpdCdzIHNldCwNCisgKiBvdGhlcndp c2UgdG8gcHNldC5nZm5hbWUgaWYgaXQncyBzZXQsIG90aGVyd2lzZSB0byBx dWVyeUZvdXQuDQorICogRm9yIENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJl YW0gYXMgZGF0YSBzb3VyY2UgaWYgaXQncyBzZXQsDQorICogb3RoZXJ3aXNl IGN1cl9jbWRfc291cmNlLg0KKyAqDQorICogVXBkYXRlIHJlc3VsdCBpZiBm dXJ0aGVyIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5LCBvciBOVUxMIG90aGVy d2lzZS4NCisgKiBSZXR1cm4gYSByZXN1bHQgd2hlbiBxdWVyeUZvdXQgY2Fu IHNhZmVseSBvdXRwdXQgYSByZXN1bHQgc3RhdHVzOg0KKyAqIG9uIENPUFkg SU4sIG9yIG9uIENPUFkgT1VUIGlmIHdyaXR0ZW4gdG8gc29tZXRoaW5nIG90 aGVyIHRoYW4gcHNldC5xdWVyeUZvdXQuDQorICogUmV0dXJuaW5nIE5VTEwg cHJldmVudHMgdGhlIGNvbW1hbmQgc3RhdHVzIGZyb20gYmVpbmcgcHJpbnRl ZCwgd2hpY2gNCisgKiB3ZSB3YW50IGlmIHRoZSBzdGF0dXMgbGluZSBkb2Vz bid0IGdldCB0YWtlbiBhcyBwYXJ0IG9mIHRoZSBDT1BZIGRhdGEuDQogICov DQogc3RhdGljIGJvb2wNCi1Qcm9jZXNzUmVzdWx0KFBHcmVzdWx0ICoqcmVz dWx0cykNCitIYW5kbGVDb3B5UmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0KQ0K IHsNCi0JYm9vbAkJc3VjY2VzcyA9IHRydWU7DQotCWJvb2wJCWZpcnN0X2N5 Y2xlID0gdHJ1ZTsNCisJYm9vbAkJc3VjY2VzczsNCisJRklMRQkgICAqY29w eXN0cmVhbTsNCisJUEdyZXN1bHQgICAqY29weV9yZXN1bHQ7DQorCUV4ZWNT dGF0dXNUeXBlIHJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVz dWx0KTsNCiANCi0JZm9yICg7OykNCisJQXNzZXJ0KHJlc3VsdF9zdGF0dXMg PT0gUEdSRVNfQ09QWV9PVVQgfHwNCisJCSAgIHJlc3VsdF9zdGF0dXMgPT0g UEdSRVNfQ09QWV9JTik7DQorDQorCVNldENhbmNlbENvbm4ocHNldC5kYik7 DQorDQorCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUKQ0K IAl7DQotCQlFeGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KLQkJYm9v bAkJaXNfY29weTsNCi0JCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0Ow0KKwkJ Ym9vbAkJbmVlZF9jbG9zZSA9IGZhbHNlOw0KKwkJYm9vbAkJaXNfcGlwZSA9 IGZhbHNlOw0KIA0KLQkJaWYgKCFBY2NlcHRSZXN1bHQoKnJlc3VsdHMpKQ0K KwkJaWYgKHBzZXQuY29weVN0cmVhbSkNCiAJCXsNCi0JCQkvKg0KLQkJCSAq IEZhaWx1cmUgYXQgdGhpcyBwb2ludCBpcyBhbHdheXMgYSBzZXJ2ZXItc2lk ZSBmYWlsdXJlIG9yIGENCi0JCQkgKiBmYWlsdXJlIHRvIHN1Ym1pdCB0aGUg Y29tbWFuZCBzdHJpbmcuICBFaXRoZXIgd2F5LCB3ZSdyZQ0KLQkJCSAqIGZp bmlzaGVkIHdpdGggdGhpcyBjb21tYW5kIHN0cmluZy4NCi0JCQkgKi8NCi0J CQlzdWNjZXNzID0gZmFsc2U7DQotCQkJYnJlYWs7DQorCQkJLyogaW52b2tl ZCBieSBcY29weSAqLw0KKwkJCWNvcHlzdHJlYW0gPSBwc2V0LmNvcHlTdHJl YW07DQogCQl9DQotDQotCQlyZXN1bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0 dXMoKnJlc3VsdHMpOw0KLQkJc3dpdGNoIChyZXN1bHRfc3RhdHVzKQ0KKwkJ ZWxzZSBpZiAocHNldC5nZm5hbWUpDQogCQl7DQotCQkJY2FzZSBQR1JFU19F TVBUWV9RVUVSWToNCi0JCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQotCQkJ Y2FzZSBQR1JFU19UVVBMRVNfT0s6DQotCQkJCWlzX2NvcHkgPSBmYWxzZTsN Ci0JCQkJYnJlYWs7DQotDQotCQkJY2FzZSBQR1JFU19DT1BZX09VVDoNCi0J CQljYXNlIFBHUkVTX0NPUFlfSU46DQotCQkJCWlzX2NvcHkgPSB0cnVlOw0K LQkJCQlicmVhazsNCi0NCi0JCQlkZWZhdWx0Og0KLQkJCQkvKiBBY2NlcHRS ZXN1bHQoKSBzaG91bGQgaGF2ZSBjYXVnaHQgYW55dGhpbmcgZWxzZS4gKi8N Ci0JCQkJaXNfY29weSA9IGZhbHNlOw0KLQkJCQlwZ19sb2dfZXJyb3IoInVu ZXhwZWN0ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwgcmVzdWx0X3N0YXR1cyk7 DQotCQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKGlzX2NvcHkpDQotCQl7 DQotCQkJLyoNCi0JCQkgKiBNYXJzaGFsIHRoZSBDT1BZIGRhdGEuICBFaXRo ZXIgc3Vicm91dGluZSB3aWxsIGdldCB0aGUNCi0JCQkgKiBjb25uZWN0aW9u IG91dCBvZiBpdHMgQ09QWSBzdGF0ZSwgdGhlbiBjYWxsIFBRcmVzdWx0U3Rh dHVzKCkNCi0JCQkgKiBvbmNlIGFuZCByZXBvcnQgYW55IGVycm9yLg0KLQkJ CSAqDQotCQkJICogRm9yIENPUFkgT1VULCBkaXJlY3QgdGhlIG91dHB1dCB0 byBwc2V0LmNvcHlTdHJlYW0gaWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3 aXNlIHRvIHBzZXQuZ2ZuYW1lIGlmIGl0J3Mgc2V0LCBvdGhlcndpc2UgdG8g cXVlcnlGb3V0Lg0KLQkJCSAqIEZvciBDT1BZIElOLCB1c2UgcHNldC5jb3B5 U3RyZWFtIGFzIGRhdGEgc291cmNlIGlmIGl0J3Mgc2V0LA0KLQkJCSAqIG90 aGVyd2lzZSBjdXJfY21kX3NvdXJjZS4NCi0JCQkgKi8NCi0JCQlGSUxFCSAg ICpjb3B5c3RyZWFtOw0KLQkJCVBHcmVzdWx0ICAgKmNvcHlfcmVzdWx0Ow0K LQ0KLQkJCVNldENhbmNlbENvbm4ocHNldC5kYik7DQotCQkJaWYgKHJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQkJLyogaW52b2tlZCBi eSBcZyAqLw0KKwkJCWlmIChvcGVuUXVlcnlPdXRwdXRGaWxlKHBzZXQuZ2Zu YW1lLA0KKwkJCQkJCQkJCSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQogCQkJ ew0KLQkJCQlib29sCQluZWVkX2Nsb3NlID0gZmFsc2U7DQotCQkJCWJvb2wJ CWlzX3BpcGUgPSBmYWxzZTsNCi0NCi0JCQkJaWYgKHBzZXQuY29weVN0cmVh bSkNCi0JCQkJew0KLQkJCQkJLyogaW52b2tlZCBieSBcY29weSAqLw0KLQkJ CQkJY29weXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCi0JCQkJfQ0KLQkJ CQllbHNlIGlmIChwc2V0LmdmbmFtZSkNCi0JCQkJew0KLQkJCQkJLyogaW52 b2tlZCBieSBcZyAqLw0KLQkJCQkJaWYgKG9wZW5RdWVyeU91dHB1dEZpbGUo cHNldC5nZm5hbWUsDQotCQkJCQkJCQkJCQkmY29weXN0cmVhbSwgJmlzX3Bp cGUpKQ0KLQkJCQkJew0KLQkJCQkJCW5lZWRfY2xvc2UgPSB0cnVlOw0KLQkJ CQkJCWlmIChpc19waXBlKQ0KLQkJCQkJCQlkaXNhYmxlX3NpZ3BpcGVfdHJh cCgpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJCWNvcHlzdHJlYW0g PSBOVUxMOwkvKiBkaXNjYXJkIENPUFkgZGF0YSBlbnRpcmVseSAqLw0KLQkJ CQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJLyogZmFsbCBiYWNrIHRv IHRoZSBnZW5lcmljIHF1ZXJ5IG91dHB1dCBzdHJlYW0gKi8NCi0JCQkJCWNv cHlzdHJlYW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCi0JCQkJfQ0KLQ0KLQkJCQlz dWNjZXNzID0gaGFuZGxlQ29weU91dChwc2V0LmRiLA0KLQkJCQkJCQkJCQlj b3B5c3RyZWFtLA0KLQkJCQkJCQkJCQkmY29weV9yZXN1bHQpDQotCQkJCQkm JiBzdWNjZXNzDQotCQkJCQkmJiAoY29weXN0cmVhbSAhPSBOVUxMKTsNCi0N Ci0JCQkJLyoNCi0JCQkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5nIGlm IHRoZSByZXBvcnQgd291bGQgZ28gdG8gdGhlIHNhbWUNCi0JCQkJICogcGxh Y2UgYXMgdGhlIENPUFkgZGF0YSBqdXN0IHdlbnQuICBOb3RlIHRoaXMgZG9l c24ndA0KLQkJCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywgc2luY2Ug aGFuZGxlQ29weU91dCBkaWQgdGhhdC4NCi0JCQkJICovDQotCQkJCWlmIChj b3B5c3RyZWFtID09IHBzZXQucXVlcnlGb3V0KQ0KLQkJCQl7DQotCQkJCQlQ UWNsZWFyKGNvcHlfcmVzdWx0KTsNCi0JCQkJCWNvcHlfcmVzdWx0ID0gTlVM TDsNCi0JCQkJfQ0KLQ0KLQkJCQlpZiAobmVlZF9jbG9zZSkNCi0JCQkJew0K LQkJCQkJLyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQotCQkJ CQlpZiAoaXNfcGlwZSkNCi0JCQkJCXsNCi0JCQkJCQlwY2xvc2UoY29weXN0 cmVhbSk7DQotCQkJCQkJcmVzdG9yZV9zaWdwaXBlX3RyYXAoKTsNCi0JCQkJ CX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQlmY2xvc2UoY29weXN0 cmVhbSk7DQotCQkJCQl9DQotCQkJCX0NCisJCQkJbmVlZF9jbG9zZSA9IHRy dWU7DQorCQkJCWlmIChpc19waXBlKQ0KKwkJCQkJZGlzYWJsZV9zaWdwaXBl X3RyYXAoKTsNCiAJCQl9DQogCQkJZWxzZQ0KLQkJCXsNCi0JCQkJLyogQ09Q WSBJTiAqLw0KLQkJCQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtID8g cHNldC5jb3B5U3RyZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsNCi0JCQkJ c3VjY2VzcyA9IGhhbmRsZUNvcHlJbihwc2V0LmRiLA0KLQkJCQkJCQkJCSAg IGNvcHlzdHJlYW0sDQotCQkJCQkJCQkJICAgUFFiaW5hcnlUdXBsZXMoKnJl c3VsdHMpLA0KLQkJCQkJCQkJCSAgICZjb3B5X3Jlc3VsdCkgJiYgc3VjY2Vz czsNCi0JCQl9DQotCQkJUmVzZXRDYW5jZWxDb25uKCk7DQotDQotCQkJLyoN Ci0JCQkgKiBSZXBsYWNlIHRoZSBQR1JFU19DT1BZX09VVC9JTiByZXN1bHQg d2l0aCBDT1BZIGNvbW1hbmQncyBleGl0DQotCQkJICogc3RhdHVzLCBvciB3 aXRoIE5VTEwgaWYgd2Ugd2FudCB0byBzdXBwcmVzcyBwcmludGluZyBhbnl0 aGluZy4NCi0JCQkgKi8NCi0JCQlQUWNsZWFyKCpyZXN1bHRzKTsNCi0JCQkq cmVzdWx0cyA9IGNvcHlfcmVzdWx0Ow0KKwkJCQljb3B5c3RyZWFtID0gTlVM TDsJLyogZGlzY2FyZCBDT1BZIGRhdGEgZW50aXJlbHkgKi8NCiAJCX0NCi0J CWVsc2UgaWYgKGZpcnN0X2N5Y2xlKQ0KKwkJZWxzZQ0KIAkJew0KLQkJCS8q IGZhc3QgcGF0aDogbm8gQ09QWSBjb21tYW5kczsgUFFleGVjIHZpc2l0ZWQg YWxsIHJlc3VsdHMgKi8NCi0JCQlicmVhazsNCisJCQkvKiBmYWxsIGJhY2sg dG8gdGhlIGdlbmVyaWMgcXVlcnkgb3V0cHV0IHN0cmVhbSAqLw0KKwkJCWNv cHlzdHJlYW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCiAJCX0NCiANCisJCXN1Y2Nl c3MgPSBoYW5kbGVDb3B5T3V0KHBzZXQuZGIsDQorCQkJCQkJCQljb3B5c3Ry ZWFtLA0KKwkJCQkJCQkJJmNvcHlfcmVzdWx0KQ0KKwkJCSYmIChjb3B5c3Ry ZWFtICE9IE5VTEwpOw0KKw0KIAkJLyoNCi0JCSAqIENoZWNrIFBRZ2V0UmVz dWx0KCkgYWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xl LWNvbW1hbmQNCi0JCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4g IE90aGVyd2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQotCQkgKiB0 byBwcm9jZXNzIHRoYXQgbWF5IGluY2x1ZGUgb3RoZXIgQ09QWXMuICBXZSBr ZWVwIHRoZSBsYXN0IHJlc3VsdC4NCisJCSAqIFN1cHByZXNzIHN0YXR1cyBw cmludGluZyBpZiB0aGUgcmVwb3J0IHdvdWxkIGdvIHRvIHRoZSBzYW1lDQor CQkgKiBwbGFjZSBhcyB0aGUgQ09QWSBkYXRhIGp1c3Qgd2VudC4gIE5vdGUg dGhpcyBkb2Vzbid0DQorCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywg c2luY2UgaGFuZGxlQ29weU91dCBkaWQgdGhhdC4NCiAJCSAqLw0KLQkJbmV4 dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCi0JCWlmICghbmV4 dF9yZXN1bHQpDQotCQkJYnJlYWs7DQorCQlpZiAoY29weXN0cmVhbSA9PSBw c2V0LnF1ZXJ5Rm91dCkNCisJCXsNCisJCQlQUWNsZWFyKGNvcHlfcmVzdWx0 KTsNCisJCQljb3B5X3Jlc3VsdCA9IE5VTEw7DQorCQl9DQogDQotCQlQUWNs ZWFyKCpyZXN1bHRzKTsNCi0JCSpyZXN1bHRzID0gbmV4dF9yZXN1bHQ7DQot CQlmaXJzdF9jeWNsZSA9IGZhbHNlOw0KKwkJaWYgKG5lZWRfY2xvc2UpDQor CQl7DQorCQkJLyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQor CQkJaWYgKGlzX3BpcGUpDQorCQkJew0KKwkJCQlwY2xvc2UoY29weXN0cmVh bSk7DQorCQkJCXJlc3RvcmVfc2lncGlwZV90cmFwKCk7DQorCQkJfQ0KKwkJ CWVsc2UNCisJCQl7DQorCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCisJCQl9 DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBDT1BZIElOICovDQor CQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtID8gcHNldC5jb3B5U3Ry ZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsNCisJCXN1Y2Nlc3MgPSBoYW5k bGVDb3B5SW4ocHNldC5kYiwNCisJCQkJCQkJICAgY29weXN0cmVhbSwNCisJ CQkJCQkJICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdCksDQorCQkJCQkJCSAg ICZjb3B5X3Jlc3VsdCk7DQogCX0NCiANCi0JU2V0UmVzdWx0VmFyaWFibGVz KCpyZXN1bHRzLCBzdWNjZXNzKTsNCi0NCi0JLyogbWF5IG5lZWQgdGhpcyB0 byByZWNvdmVyIGZyb20gY29ubiBsb3NzIGR1cmluZyBDT1BZICovDQotCWlm ICghZmlyc3RfY3ljbGUgJiYgIUNoZWNrQ29ubmVjdGlvbigpKQ0KLQkJcmV0 dXJuIGZhbHNlOw0KKwlSZXNldENhbmNlbENvbm4oKTsNCisJUFFjbGVhcigq cmVzdWx0KTsNCisJKnJlc3VsdCA9IGNvcHlfcmVzdWx0Ow0KIA0KIAlyZXR1 cm4gc3VjY2VzczsNCiB9DQogDQotDQogLyoNCiAgKiBQcmludFF1ZXJ5U3Rh dHVzOiByZXBvcnQgY29tbWFuZCBzdGF0dXMgYXMgcmVxdWlyZWQNCiAgKg0K LSAqIE5vdGU6IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBQcmludFF1 ZXJ5UmVzdWx0cygpIG9ubHkuDQorICogTm90ZTogVXRpbGl0eSBmdW5jdGlv biBmb3IgdXNlIGJ5IEhhbmRsZVF1ZXJ5UmVzdWx0KCkgb25seS4NCiAgKi8N CiBzdGF0aWMgdm9pZA0KLVByaW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJl c3VsdHMpDQorUHJpbnRRdWVyeVN0YXR1cyhQR3Jlc3VsdCAqcmVzdWx0cywg RklMRSAqcHJpbnRRdWVyeUZvdXQpDQogew0KIAljaGFyCQlidWZbMTZdOw0K KwlGSUxFCSAgICpmb3V0ID0gcHJpbnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5 Rm91dCA6IHBzZXQucXVlcnlGb3V0Ow0KIA0KIAlpZiAoIXBzZXQucXVpZXQp DQogCXsNCiAJCWlmIChwc2V0LnBvcHQudG9wdC5mb3JtYXQgPT0gUFJJTlRf SFRNTCkNCiAJCXsNCi0JCQlmcHV0cygiPHA+IiwgcHNldC5xdWVyeUZvdXQp Ow0KLQkJCWh0bWxfZXNjYXBlZF9wcmludChQUWNtZFN0YXR1cyhyZXN1bHRz KSwgcHNldC5xdWVyeUZvdXQpOw0KLQkJCWZwdXRzKCI8L3A+XG4iLCBwc2V0 LnF1ZXJ5Rm91dCk7DQorCQkJZnB1dHMoIjxwPiIsIGZvdXQpOw0KKwkJCWh0 bWxfZXNjYXBlZF9wcmludChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgZm91dCk7 DQorCQkJZnB1dHMoIjwvcD5cbiIsIGZvdXQpOw0KIAkJfQ0KIAkJZWxzZQ0K LQkJCWZwcmludGYocHNldC5xdWVyeUZvdXQsICIlc1xuIiwgUFFjbWRTdGF0 dXMocmVzdWx0cykpOw0KKwkJCWZwcmludGYoZm91dCwgIiVzXG4iLCBQUWNt ZFN0YXR1cyhyZXN1bHRzKSk7DQogCX0NCiANCiAJaWYgKHBzZXQubG9nZmls ZSkNCkBAIC0xMTA4LDQzICs5NzUsNTAgQEAgUHJpbnRRdWVyeVN0YXR1cyhQ R3Jlc3VsdCAqcmVzdWx0cykNCiANCiANCiAvKg0KLSAqIFByaW50UXVlcnlS ZXN1bHRzOiBwcmludCBvdXQgKG9yIHN0b3JlIG9yIGV4ZWN1dGUpIHF1ZXJ5 IHJlc3VsdHMgYXMgcmVxdWlyZWQNCi0gKg0KLSAqIE5vdGU6IFV0aWxpdHkg ZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKSBvbmx5Lg0KKyAqIEhh bmRsZVF1ZXJ5UmVzdWx0OiBwcmludCBvdXQsIHN0b3JlIG9yIGV4ZWN1dGUg b25lIHF1ZXJ5IHJlc3VsdA0KKyAqIGFzIHJlcXVpcmVkLg0KICAqDQogICog UmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBleGVjdXRlZCBzdWNjZXNzZnVs bHksIGZhbHNlIG90aGVyd2lzZS4NCiAgKi8NCiBzdGF0aWMgYm9vbA0KLVBy aW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KK0hhbmRsZVF1 ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgbGFzdCwgYm9vbCBp c193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAqb3B0LCBGSUxFICpwcmlu dFF1ZXJ5Rm91dCkNCiB7DQogCWJvb2wJCXN1Y2Nlc3M7DQogCWNvbnN0IGNo YXIgKmNtZHN0YXR1czsNCiANCi0JaWYgKCFyZXN1bHRzKQ0KKwlpZiAocmVz dWx0ID09IE5VTEwpDQogCQlyZXR1cm4gZmFsc2U7DQogDQotCXN3aXRjaCAo UFFyZXN1bHRTdGF0dXMocmVzdWx0cykpDQorCXN3aXRjaCAoUFFyZXN1bHRT dGF0dXMocmVzdWx0KSkNCiAJew0KIAkJY2FzZSBQR1JFU19UVVBMRVNfT0s6 DQogCQkJLyogc3RvcmUgb3IgZXhlY3V0ZSBvciBwcmludCB0aGUgZGF0YSAu Li4gKi8NCi0JCQlpZiAocHNldC5nc2V0X3ByZWZpeCkNCi0JCQkJc3VjY2Vz cyA9IFN0b3JlUXVlcnlUdXBsZShyZXN1bHRzKTsNCi0JCQllbHNlIGlmIChw c2V0LmdleGVjX2ZsYWcpDQotCQkJCXN1Y2Nlc3MgPSBFeGVjUXVlcnlUdXBs ZXMocmVzdWx0cyk7DQotCQkJZWxzZSBpZiAocHNldC5jcm9zc3RhYl9mbGFn KQ0KLQkJCQlzdWNjZXNzID0gUHJpbnRSZXN1bHRzSW5Dcm9zc3RhYihyZXN1 bHRzKTsNCisJCQlpZiAobGFzdCAmJiBwc2V0LmdzZXRfcHJlZml4KQ0KKwkJ CQlzdWNjZXNzID0gU3RvcmVRdWVyeVR1cGxlKHJlc3VsdCk7DQorCQkJZWxz ZSBpZiAobGFzdCAmJiBwc2V0LmdleGVjX2ZsYWcpDQorCQkJCXN1Y2Nlc3Mg PSBFeGVjUXVlcnlUdXBsZXMocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0 ICYmIHBzZXQuY3Jvc3N0YWJfZmxhZykNCisJCQkJc3VjY2VzcyA9IFByaW50 UmVzdWx0c0luQ3Jvc3N0YWIocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0 IHx8IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJCQkJc3VjY2VzcyA9IFBy aW50UXVlcnlUdXBsZXMocmVzdWx0LCBvcHQsIHByaW50UXVlcnlGb3V0KTsN CiAJCQllbHNlDQotCQkJCXN1Y2Nlc3MgPSBQcmludFF1ZXJ5VHVwbGVzKHJl c3VsdHMpOw0KKwkJCQlzdWNjZXNzID0gdHJ1ZTsNCisNCiAJCQkvKiBpZiBp dCdzIElOU0VSVC9VUERBVEUvREVMRVRFIFJFVFVSTklORywgYWxzbyBwcmlu dCBzdGF0dXMgKi8NCi0JCQljbWRzdGF0dXMgPSBQUWNtZFN0YXR1cyhyZXN1 bHRzKTsNCi0JCQlpZiAoc3RybmNtcChjbWRzdGF0dXMsICJJTlNFUlQiLCA2 KSA9PSAwIHx8DQotCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAiVVBEQVRFIiwg NikgPT0gMCB8fA0KLQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIkRFTEVURSIs IDYpID09IDApDQotCQkJCVByaW50UXVlcnlTdGF0dXMocmVzdWx0cyk7DQor CQkJaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1bHRzKQ0KKwkJCXsN CisJCQkJY21kc3RhdHVzID0gUFFjbWRTdGF0dXMocmVzdWx0KTsNCisJCQkJ aWYgKHN0cm5jbXAoY21kc3RhdHVzLCAiSU5TRVJUIiwgNikgPT0gMCB8fA0K KwkJCQkJc3RybmNtcChjbWRzdGF0dXMsICJVUERBVEUiLCA2KSA9PSAwIHx8 DQorCQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIkRFTEVURSIsIDYpID09IDAp DQorCQkJCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdCwgcHJpbnRRdWVyeUZv dXQpOw0KKwkJCX0NCisNCiAJCQlicmVhazsNCiANCiAJCWNhc2UgUEdSRVNf Q09NTUFORF9PSzoNCi0JCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMpOw0K KwkJCWlmIChsYXN0IHx8IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJCQkJ UHJpbnRRdWVyeVN0YXR1cyhyZXN1bHQsIHByaW50UXVlcnlGb3V0KTsNCiAJ CQlzdWNjZXNzID0gdHJ1ZTsNCiAJCQlicmVhazsNCiANCkBAIC0xMTU0LDcg KzEwMjgsNyBAQCBQcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0 cykNCiANCiAJCWNhc2UgUEdSRVNfQ09QWV9PVVQ6DQogCQljYXNlIFBHUkVT X0NPUFlfSU46DQotCQkJLyogbm90aGluZyB0byBkbyBoZXJlICovDQorCQkJ Lyogbm90aGluZyB0byBkbyBoZXJlOiBhbHJlYWR5IHByb2Nlc3NlZCAqLw0K IAkJCXN1Y2Nlc3MgPSB0cnVlOw0KIAkJCWJyZWFrOw0KIA0KQEAgLTExNjcs MTUgKzEwNDEsMjM5IEBAIFByaW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpy ZXN1bHRzKQ0KIAkJZGVmYXVsdDoNCiAJCQlzdWNjZXNzID0gZmFsc2U7DQog CQkJcGdfbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIFBRcmVzdWx0U3RhdHVzOiAl ZCIsDQotCQkJCQkJIFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpKTsNCisJCQkJ CQkgUFFyZXN1bHRTdGF0dXMocmVzdWx0KSk7DQogCQkJYnJlYWs7DQogCX0N CiANCi0JZmZsdXNoKHBzZXQucXVlcnlGb3V0KTsNCisJZmZsdXNoKHByaW50 UXVlcnlGb3V0ID8gcHJpbnRRdWVyeUZvdXQgOiBwc2V0LnF1ZXJ5Rm91dCk7 DQogDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCisvKg0KKyAqIERhdGEg c3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgdG8gcmVjb3JkIG5vdGljZXMgd2hp bGUgdGhleSBhcmUNCisgKiBlbWl0dGVkLCBzbyB0aGF0IHRoZXkgY2FuIGJl IHNob3duIGxhdGVyLg0KKyAqDQorICogV2UgbmVlZCB0byBrbm93IHdoaWNo IHJlc3VsdCBpcyBsYXN0LCB3aGljaCByZXF1aXJlcyB0byBleHRyYWN0DQor ICogb25lIHJlc3VsdCBpbiBhZHZhbmNlLCBoZW5jZSB0d28gYnVmZmVycyBh cmUgbmVlZGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IHsNCisJUFFFeHBC dWZmZXJEYXRhCW1lc3NhZ2VzWzJdOw0KKwlpbnQJCQkJY3VycmVudDsNCit9 IHRfbm90aWNlX21lc3NhZ2VzOw0KKw0KKy8qDQorICogU3RvcmUgbm90aWNl cyBpbiBhcHByb3ByaWF0ZSBidWZmZXIsIGZvciBsYXRlciBkaXNwbGF5Lg0K KyAqLw0KK3N0YXRpYyB2b2lkDQorQXBwZW5kTm90aWNlTWVzc2FnZSh2b2lk ICphcmcsIGNvbnN0IGNoYXIgKm1zZykNCit7DQorCXRfbm90aWNlX21lc3Nh Z2VzICpub3RlcyA9ICh0X25vdGljZV9tZXNzYWdlcyopIGFyZzsNCisJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJm5vdGVzLT5tZXNzYWdlc1tub3Rlcy0+Y3Vy cmVudF0sIG1zZyk7DQorfQ0KKw0KKy8qDQorICogU2hvdyBub3RpY2VzIHN0 b3JlZCBpbiBidWZmZXIsIHdoaWNoIGlzIHRoZW4gcmVzZXQuDQorICovDQor c3RhdGljIHZvaWQNCitTaG93Tm90aWNlTWVzc2FnZSh0X25vdGljZV9tZXNz YWdlcyAqbm90ZXMpDQorew0KKwlQUUV4cEJ1ZmZlckRhdGEJKmN1cnJlbnQg PSAmbm90ZXMtPm1lc3NhZ2VzW25vdGVzLT5jdXJyZW50XTsNCisJaWYgKCpj dXJyZW50LT5kYXRhICE9ICdcMCcpDQorCQlwZ19sb2dfaW5mbygiJXMiLCBj dXJyZW50LT5kYXRhKTsNCisJcmVzZXRQUUV4cEJ1ZmZlcihjdXJyZW50KTsN Cit9DQorDQorLyoNCisgKiBTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0czog dXRpbGl0eSBmdW5jdGlvbiBmb3IgdXNlIGJ5IFNlbmRRdWVyeSgpDQorICog YW5kIFBTUUxleGVjV2F0Y2goKS4NCisgKg0KKyAqIFNlbmRzIHF1ZXJ5IGFu ZCBjeWNsZXMgdGhyb3VnaCBQR3Jlc3VsdCBvYmplY3RzLg0KKyAqDQorICog V2hlbiBub3QgdW5kZXIgXHdhdGNoIGFuZCBpZiBvdXIgY29tbWFuZCBzdHJp bmcgY29udGFpbmVkIGEgQ09QWSBGUk9NIFNURElODQorICogb3IgQ09QWSBU TyBTVERPVVQsIHRoZSBQR3Jlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlc2Ug Y29tbWFuZHMgbXVzdCBiZQ0KKyAqIHByb2Nlc3NlZCBieSBwcm92aWRpbmcg YW4gaW5wdXQgb3Igb3V0cHV0IHN0cmVhbS4gIEluIHRoYXQgZXZlbnQsIHdl J2xsDQorICogbWFyc2hhbCBkYXRhIGZvciB0aGUgQ09QWS4NCisgKg0KKyAq IEZvciBvdGhlciBjb21tYW5kcywgdGhlIHJlc3VsdHMgYXJlIHByb2Nlc3Nl ZCBub3JtYWxseSwgZGVwZW5kaW5nIG9uIHRoZWlyDQorICogc3RhdHVzLg0K KyAqDQorICogUmV0dXJucyAxIG9uIGNvbXBsZXRlIHN1Y2Nlc3MsIDAgb24g aW50ZXJydXB0IGFuZCAtMSBvciBlcnJvcnMuICBQb3NzaWJsZQ0KKyAqIGZh aWx1cmUgbW9kZXMgaW5jbHVkZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxl bXM7IGNoZWNrIHRoZSB0cmFuc2FjdGlvbg0KKyAqIHN0YXR1cyBmb3IgdGhl IHNlcnZlci1zaWRlIG9waW5pb24uDQorICoNCisgKiBOb3RlIHRoYXQgb24g YSBjb21iaW5lZCBxdWVyeSwgZmFpbHVyZSBkb2VzIG5vdCBtZWFuIHRoYXQg bm90aGluZyB3YXMNCisgKiBjb21taXR0ZWQuDQorICovDQorc3RhdGljIGlu dA0KK1NlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBkb3VibGUgKnBlbGFwc2VkX21zZWMsDQorCWJvb2wgaXNfd2F0Y2gs IGNvbnN0IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVyeUZv dXQsIGJvb2wgKnR4X2VuZGVkKQ0KK3sNCisJYm9vbAkJCQlzdWNjZXNzOw0K KwlpbnN0cl90aW1lCQkJYmVmb3JlOw0KKwlQR3Jlc3VsdAkJICAgKnJlc3Vs dDsNCisJdF9ub3RpY2VfbWVzc2FnZXMJbm90ZXM7DQorDQorCWlmIChwc2V0 LnRpbWluZykNCisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoYmVmb3JlKTsN CisNCisJc3VjY2VzcyA9IFBRc2VuZFF1ZXJ5KHBzZXQuZGIsIHF1ZXJ5KTsN CisNCisJaWYgKCFzdWNjZXNzKQ0KKwl7DQorCQljb25zdCBjaGFyICplcnJv ciA9IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpOw0KKw0KKwkJaWYgKHN0cmxl bihlcnJvcikpDQorCQkJcGdfbG9nX2luZm8oIiVzIiwgZXJyb3IpOw0KKw0K KwkJQ2hlY2tDb25uZWN0aW9uKCk7DQorDQorCQlyZXR1cm4gLTE7DQorCX0N CisNCisJLyoNCisJICogSWYgU0lHSU5UIGlzIHNlbnQgd2hpbGUgdGhlIHF1 ZXJ5IGlzIHByb2Nlc3NpbmcsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZQ0KKwkg KiBjb25zdW1lZC4gIFRoZSB1c2VyJ3MgaW50ZW50aW9uLCB0aG91Z2gsIGlz IHRvIGNhbmNlbCB0aGUgZW50aXJlIHdhdGNoDQorCSAqIHByb2Nlc3MsIHNv IGRldGVjdCBhIHNlbnQgY2FuY2VsbGF0aW9uIHJlcXVlc3QgYW5kIGV4aXQg aW4gdGhpcyBjYXNlLg0KKwkgKi8NCisJaWYgKGlzX3dhdGNoICYmIGNhbmNl bF9wcmVzc2VkKQ0KKwl7DQorCQlDbGVhck9yU2F2ZUFsbFJlc3VsdHMoKTsN CisJCXJldHVybiAwOw0KKwl9DQorDQorCS8qIGludGVyY2VwdCBub3RpY2Vz ICovDQorCW5vdGVzLmN1cnJlbnQgPSAwOw0KKwlpbml0UFFFeHBCdWZmZXIo Jm5vdGVzLm1lc3NhZ2VzWzBdKTsNCisJaW5pdFBRRXhwQnVmZmVyKCZub3Rl cy5tZXNzYWdlc1sxXSk7DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQu ZGIsIEFwcGVuZE5vdGljZU1lc3NhZ2UsICZub3Rlcyk7DQorDQorCS8qIGZp cnN0IHJlc3VsdCAqLw0KKwlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRi KTsNCisNCisJd2hpbGUgKHJlc3VsdCAhPSBOVUxMKQ0KKwl7DQorCQlFeGVj U3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KKwkJUEdyZXN1bHQgICAqbmV4 dF9yZXN1bHQ7DQorCQlib29sCQlsYXN0Ow0KKw0KKwkJaWYgKCFBY2NlcHRS ZXN1bHQocmVzdWx0LCBmYWxzZSkpDQorCQl7DQorCQkJLyoNCisJCQkgKiBT b21lIGVycm9yIG9jY3VyZWQsIGVpdGhlciBhIHNlcnZlci1zaWRlIGZhaWx1 cmUgb3INCisJCQkgKiBhIGZhaWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5k IHN0cmluZy4gIFJlY29yZCB0aGF0Lg0KKwkJCSAqLw0KKwkJCWNvbnN0IGNo YXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2UocHNldC5kYik7DQorDQorCQkJ U2hvd05vdGljZU1lc3NhZ2UoJm5vdGVzKTsNCisJCQlpZiAoc3RybGVuKGVy cm9yKSkNCisJCQkJcGdfbG9nX2luZm8oIiVzIiwgZXJyb3IpOw0KKwkJCUNo ZWNrQ29ubmVjdGlvbigpOw0KKwkJCWlmICghaXNfd2F0Y2gpDQorCQkJCVNl dFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIGZhbHNlKTsNCisJCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHQpOw0KKwkJCXN1Y2Nlc3MgPSBmYWxzZTsNCisN CisJCQkvKiBhbmQgc3dpdGNoIHRvIG5leHQgcmVzdWx0ICovDQorCQkJcmVz dWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQkJY29udGludWU7DQor CQl9DQorCQllbHNlIGlmICh0eF9lbmRlZCAhPSBOVUxMICYmICEgKnR4X2Vu ZGVkKQ0KKwkJew0KKwkJCS8qIG9uIHN1Y2Nlc3MsIHRlbGwgd2hldGhlciB0 aGUgImN1cnJlbnQiIHRyYW5zYWN0aW9uIHNlcXVlbmNlIGVuZGVkICovDQor CQkJY29uc3QgY2hhciAqY21kID0gUFFjbWRTdGF0dXMocmVzdWx0KTsNCisJ CQkqdHhfZW5kZWQgPSBzdHJjbXAoY21kLCAiQ09NTUlUIikgPT0gMCB8fCBz dHJjbXAoY21kLCAiUk9MTEJBQ0siKSA9PSAwIHx8DQorCQkJCXN0cmNtcChj bWQsICJTQVZFUE9JTlQiKSA9PSAwIHx8IHN0cmNtcChjbWQsICJSRUxFQVNF IikgPT0gMDsNCisJCX0NCisNCisJCXJlc3VsdF9zdGF0dXMgPSBQUXJlc3Vs dFN0YXR1cyhyZXN1bHQpOw0KKw0KKwkJLyogbXVzdCBoYW5kbGUgQ09QWSBi ZWZvcmUgY2hhbmdpbmcgdGhlIGN1cnJlbnQgcmVzdWx0ICovDQorCQlBc3Nl cnQocmVzdWx0X3N0YXR1cyAhPSBQR1JFU19DT1BZX0JPVEgpOw0KKwkJaWYg KHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9JTiB8fA0KKwkJCXJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQl7DQorCQkJU2hvd05v dGljZU1lc3NhZ2UoJm5vdGVzKTsNCisNCisJCQlpZiAoaXNfd2F0Y2gpDQor CQkJew0KKwkJCQlDbGVhck9yU2F2ZUFsbFJlc3VsdHMoKTsNCisJCQkJcGdf bG9nX2Vycm9yKCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSIp Ow0KKwkJCQlyZXR1cm4gLTE7DQorCQkJfQ0KKw0KKwkJCS8qIHVzZSBub3Jt YWwgbm90aWNlIHByb2Nlc3NvciBkdXJpbmcgQ09QWSAqLw0KKwkJCVBRc2V0 Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIE5vdGljZVByb2Nlc3NvciwgTlVM TCk7DQorDQorCQkJc3VjY2VzcyAmPSBIYW5kbGVDb3B5UmVzdWx0KCZyZXN1 bHQpOw0KKw0KKwkJCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIEFw cGVuZE5vdGljZU1lc3NhZ2UsICZub3Rlcyk7DQorCQl9DQorDQorCQkvKg0K KwkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4gIEluIHRoZSB0eXBp Y2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KKwkJICogc3RyaW5nLCBp dCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG90 aGVyIHJlc3VsdHMNCisJCSAqIHRvIHByb2Nlc3MuIFdlIG5lZWQgdG8gZG8g dGhhdCB0byBjaGVjayB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QuDQorCQkg Ki8NCisJCW5vdGVzLmN1cnJlbnQgXj0gMTsNCisJCW5leHRfcmVzdWx0ID0g UFFnZXRSZXN1bHQocHNldC5kYik7DQorCQlub3Rlcy5jdXJyZW50IF49IDE7 DQorCQlsYXN0ID0gKG5leHRfcmVzdWx0ID09IE5VTEwpOw0KKw0KKwkJLyoN CisJCSAqIEdldCB0aW1pbmcgbWVhc3VyZSBiZWZvcmUgcHJpbnRpbmcgdGhl IGxhc3QgcmVzdWx0Lg0KKwkJICoNCisJCSAqIEl0IHdpbGwgaW5jbHVkZSB0 aGUgZGlzcGxheSBvZiBwcmV2aW91cyByZXN1bHRzLCBpZiBhbnkuDQorCQkg KiBUaGlzIGNhbm5vdCBiZSBoZWxwZWQgYmVjYXVzZSB0aGUgc2VydmVyIGdv ZXMgb24gcHJvY2Vzc2luZw0KKwkJICogZnVydGhlciBxdWVyaWVzIGFueXdh eSB3aGlsZSB0aGUgcHJldmlvdXMgb25lcyBhcmUgYmVpbmcgZGlzcGxheWVk Lg0KKwkJICogVGhlIHBhcmFsbGVsIGV4ZWN1dGlvbiBvZiB0aGUgY2xpZW50 IGRpc3BsYXkgaGlkZXMgdGhlIHNlcnZlciB0aW1lDQorCQkgKiB3aGVuIGl0 IGlzIHNob3J0ZXIuDQorCQkgKg0KKwkJICogV2l0aCBjb21iaW5lZCBxdWVy aWVzLCB0aW1pbmcgbXVzdCBiZSB1bmRlcnN0b29kIGFzIGFuIHVwcGVyIGJv dW5kDQorCQkgKiBvZiB0aGUgdGltZSBzcGVudCBwcm9jZXNzaW5nIHRoZW0u DQorCQkgKi8NCisJCWlmIChsYXN0ICYmIHBzZXQudGltaW5nKQ0KKwkJew0K KwkJCWluc3RyX3RpbWUJbm93Ow0KKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJF TlQobm93KTsNCisJCQlJTlNUUl9USU1FX1NVQlRSQUNUKG5vdywgYmVmb3Jl KTsNCisJCQkqcGVsYXBzZWRfbXNlYyA9IElOU1RSX1RJTUVfR0VUX01JTExJ U0VDKG5vdyk7DQorCQl9DQorDQorCQkvKiBub3RpY2VzIGFscmVhZHkgc2hv d24gYWJvdmUgZm9yIGNvcHkgKi8NCisJCVNob3dOb3RpY2VNZXNzYWdlKCZu b3Rlcyk7DQorDQorCQkvKiB0aGlzIG1heSBvciBtYXkgbm90IHByaW50IHNv bWV0aGluZyBkZXBlbmRpbmcgb24gc2V0dGluZ3MgKi8NCisJCWlmIChyZXN1 bHQgIT0gTlVMTCkNCisJCQlzdWNjZXNzICY9IEhhbmRsZVF1ZXJ5UmVzdWx0 KHJlc3VsdCwgbGFzdCwgZmFsc2UsIG9wdCwgcHJpbnRRdWVyeUZvdXQpOw0K Kw0KKwkJLyogc2V0IHZhcmlhYmxlcyBvbiBsYXN0IHJlc3VsdCBpZiBhbGwg d2VudCB3ZWxsICovDQorCQlpZiAoIWlzX3dhdGNoICYmIGxhc3QgJiYgc3Vj Y2VzcykNCisJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0LCB0cnVlKTsN CisNCisJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQorCQlub3Rlcy5j dXJyZW50IF49IDE7DQorCQlyZXN1bHQgPSBuZXh0X3Jlc3VsdDsNCisNCisJ CWlmIChjYW5jZWxfcHJlc3NlZCkNCisJCXsNCisJCQlDbGVhck9yU2F2ZUFs bFJlc3VsdHMoKTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwkvKiBy ZXNldCBub3RpY2UgaG9vayAqLw0KKwlQUXNldE5vdGljZVByb2Nlc3Nvcihw c2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5VTEwpOw0KKwl0ZXJtUFFFeHBC dWZmZXIoJm5vdGVzLm1lc3NhZ2VzWzBdKTsNCisJdGVybVBRRXhwQnVmZmVy KCZub3Rlcy5tZXNzYWdlc1sxXSk7DQorDQorCS8qIG1heSBuZWVkIHRoaXMg dG8gcmVjb3ZlciBmcm9tIGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLw0KKwlp ZiAoIUNoZWNrQ29ubmVjdGlvbigpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwly ZXR1cm4gY2FuY2VsX3ByZXNzZWQgPyAwIDogc3VjY2VzcyA/IDEgOiAtMTsN Cit9DQorDQogDQogLyoNCiAgKiBTZW5kUXVlcnk6IHNlbmQgdGhlIHF1ZXJ5 IHN0cmluZyB0byB0aGUgYmFja2VuZA0KQEAgLTExOTIsMTMgKzEyOTAsMTUg QEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogYm9v bA0KIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiB7DQotCVBHcmVz dWx0ICAgKnJlc3VsdHM7DQorCVBHcmVzdWx0ICAgKnJlc3VsdHMgPSBOVUxM Ow0KIAlQR1RyYW5zYWN0aW9uU3RhdHVzVHlwZSB0cmFuc2FjdGlvbl9zdGF0 dXM7DQogCWRvdWJsZQkJZWxhcHNlZF9tc2VjID0gMDsNCiAJYm9vbAkJT0sg PSBmYWxzZTsNCisJYm9vbAkJcmVzX2Vycm9yOw0KIAlpbnQJCQlpOw0KIAli b29sCQlvbl9lcnJvcl9yb2xsYmFja19zYXZlcG9pbnQgPSBmYWxzZTsNCiAJ c3RhdGljIGJvb2wgb25fZXJyb3Jfcm9sbGJhY2tfd2FybmluZyA9IGZhbHNl Ow0KKwlib29sCQl0eF9lbmRlZCA9IGZhbHNlOw0KIA0KIAlpZiAoIXBzZXQu ZGIpDQogCXsNCkBAIC0xMjM3LDI2ICsxMzM3LDMyIEBAIFNlbmRRdWVyeShj b25zdCBjaGFyICpxdWVyeSkNCiAJCWZmbHVzaChwc2V0LmxvZ2ZpbGUpOw0K IAl9DQogDQorCS8qIGdsb2JhbCBxdWVyeSBjYW5jZWxsYXRpb24gZm9yIHRo aXMgcXVlcnkgKi8NCiAJU2V0Q2FuY2VsQ29ubihwc2V0LmRiKTsNCiANCiAJ dHJhbnNhY3Rpb25fc3RhdHVzID0gUFF0cmFuc2FjdGlvblN0YXR1cyhwc2V0 LmRiKTsNCiANCisJLyogaXNzdWUgYSBCRUdJTiBpZiBuZWVkZWQsIGNvcnJl c3BvbmRpbmcgQ09NTUlUL1JPTExCQUNLIGJ5IHVzZXIgKi8NCiAJaWYgKHRy YW5zYWN0aW9uX3N0YXR1cyA9PSBQUVRSQU5TX0lETEUgJiYNCiAJCSFwc2V0 LmF1dG9jb21taXQgJiYNCiAJCSFjb21tYW5kX25vX2JlZ2luKHF1ZXJ5KSkN CiAJew0KLQkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsN Ci0JCWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSAhPSBQR1JFU19DT01N QU5EX09LKQ0KKwkJUEdyZXN1bHQgICAgKnJlc3VsdDsNCisJCXJlc3VsdCA9 IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsNCisJCXJlc19lcnJvciA9IFBR cmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSzsNCisJ CUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQorDQorCQlpZiAocmVzX2Vy cm9yKQ0KIAkJew0KIAkJCXBnX2xvZ19pbmZvKCIlcyIsIFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpKTsNCi0JCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRz KTsNCi0JCQlSZXNldENhbmNlbENvbm4oKTsNCiAJCQlnb3RvIHNlbmRxdWVy eV9jbGVhbnVwOw0KIAkJfQ0KLQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 cyk7DQorDQorCQkvKiBtdXN0IGJlIFBRVFJBTlNfSU5UUkFOUyBhZnRlciBh IEJFR0lOICovDQogCQl0cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0 aW9uU3RhdHVzKHBzZXQuZGIpOw0KIAl9DQogDQorCS8qIGNyZWF0ZSBhdXRv bWF0aWMgc2F2ZXBvaW50IGlmIG5lZWRlZCBhbmQgcG9zc2libGUgKi8NCiAJ aWYgKHRyYW5zYWN0aW9uX3N0YXR1cyA9PSBQUVRSQU5TX0lOVFJBTlMgJiYN CiAJCXBzZXQub25fZXJyb3Jfcm9sbGJhY2sgIT0gUFNRTF9FUlJPUl9ST0xM QkFDS19PRkYgJiYNCiAJCShwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUgfHwN CkBAIC0xMjczLDU4ICsxMzc5LDM5IEBAIFNlbmRRdWVyeShjb25zdCBjaGFy ICpxdWVyeSkNCiAJCX0NCiAJCWVsc2UNCiAJCXsNCi0JCQlyZXN1bHRzID0g UFFleGVjKHBzZXQuZGIsICJTQVZFUE9JTlQgcGdfcHNxbF90ZW1wb3Jhcnlf c2F2ZXBvaW50Iik7DQotCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMp ICE9IFBHUkVTX0NPTU1BTkRfT0spDQorCQkJUEdyZXN1bHQgICAqcmVzdWx0 Ow0KKwkJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiU0FWRVBPSU5UIHBn X3BzcWxfdGVtcG9yYXJ5X3NhdmVwb2ludCIpOw0KKwkJCXJlc19lcnJvciA9 IFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSzsN CisJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KKw0KKwkJCWlmIChy ZXNfZXJyb3IpDQogCQkJew0KIAkJCQlwZ19sb2dfaW5mbygiJXMiLCBQUWVy cm9yTWVzc2FnZShwc2V0LmRiKSk7DQotCQkJCUNsZWFyT3JTYXZlUmVzdWx0 KHJlc3VsdHMpOw0KLQkJCQlSZXNldENhbmNlbENvbm4oKTsNCiAJCQkJZ290 byBzZW5kcXVlcnlfY2xlYW51cDsNCiAJCQl9DQotCQkJQ2xlYXJPclNhdmVS ZXN1bHQocmVzdWx0cyk7DQorDQogCQkJb25fZXJyb3Jfcm9sbGJhY2tfc2F2 ZXBvaW50ID0gdHJ1ZTsNCiAJCX0NCiAJfQ0KIA0KKwkvKiBwcm9jZXNzIHRo ZSBxdWVyeSwgb25lIHdheSBvciB0aGUgb3RoZXIgKi8NCiAJaWYgKHBzZXQu Z2Rlc2NfZmxhZykNCiAJew0KIAkJLyogRGVzY3JpYmUgcXVlcnkncyByZXN1 bHQgY29sdW1ucywgd2l0aG91dCBleGVjdXRpbmcgaXQgKi8NCiAJCU9LID0g RGVzY3JpYmVRdWVyeShxdWVyeSwgJmVsYXBzZWRfbXNlYyk7DQotCQlSZXNl dENhbmNlbENvbm4oKTsNCiAJCXJlc3VsdHMgPSBOVUxMOwkJCS8qIFBRY2xl YXIoTlVMTCkgZG9lcyBub3RoaW5nICovDQogCX0NCiAJZWxzZSBpZiAocHNl dC5mZXRjaF9jb3VudCA8PSAwIHx8IHBzZXQuZ2V4ZWNfZmxhZyB8fA0KIAkJ CSBwc2V0LmNyb3NzdGFiX2ZsYWcgfHwgIWlzX3NlbGVjdF9jb21tYW5kKHF1 ZXJ5KSkNCiAJew0KIAkJLyogRGVmYXVsdCBmZXRjaC1pdC1hbGwtYW5kLXBy aW50IG1vZGUgKi8NCi0JCWluc3RyX3RpbWUJYmVmb3JlLA0KLQkJCQkJYWZ0 ZXI7DQotDQotCQlpZiAocHNldC50aW1pbmcpDQotCQkJSU5TVFJfVElNRV9T RVRfQ1VSUkVOVChiZWZvcmUpOw0KLQ0KLQkJcmVzdWx0cyA9IFBRZXhlYyhw c2V0LmRiLCBxdWVyeSk7DQotDQotCQkvKiB0aGVzZSBvcGVyYXRpb25zIGFy ZSBpbmNsdWRlZCBpbiB0aGUgdGltaW5nIHJlc3VsdDogKi8NCi0JCVJlc2V0 Q2FuY2VsQ29ubigpOw0KLQkJT0sgPSBQcm9jZXNzUmVzdWx0KCZyZXN1bHRz KTsNCi0NCi0JCWlmIChwc2V0LnRpbWluZykNCi0JCXsNCi0JCQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKGFmdGVyKTsNCi0JCQlJTlNUUl9USU1FX1NVQlRS QUNUKGFmdGVyLCBiZWZvcmUpOw0KLQkJCWVsYXBzZWRfbXNlYyA9IElOU1RS X1RJTUVfR0VUX01JTExJU0VDKGFmdGVyKTsNCi0JCX0NCi0NCi0JCS8qIGJ1 dCBwcmludGluZyByZXN1bHRzIGlzbid0OiAqLw0KLQkJaWYgKE9LICYmIHJl c3VsdHMpDQotCQkJT0sgPSBQcmludFF1ZXJ5UmVzdWx0cyhyZXN1bHRzKTsN CisJCWludCByZXMgPSBTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhxdWVy eSwgJmVsYXBzZWRfbXNlYywgZmFsc2UsIE5VTEwsIE5VTEwsICZ0eF9lbmRl ZCk7DQorCQlPSyA9IChyZXMgPj0gMCk7DQogCX0NCiAJZWxzZQ0KIAl7DQog CQkvKiBGZXRjaC1pbi1zZWdtZW50cyBtb2RlICovDQogCQlPSyA9IEV4ZWNR dWVyeVVzaW5nQ3Vyc29yKHF1ZXJ5LCAmZWxhcHNlZF9tc2VjKTsNCi0JCVJl c2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0cyA9IE5VTEw7CQkJLyogUFFj bGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8NCiAJfQ0KIA0KQEAgLTEzNTcs MTEgKzE0NDQsNyBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQog CQkJCSAqIHNhdmVwb2ludCBpcyBnb25lLiBJZiB0aGV5IGlzc3VlZCBhIFNB VkVQT0lOVCwgcmVsZWFzaW5nDQogCQkJCSAqIG91cnMgd291bGQgcmVtb3Zl IHRoZWlycy4NCiAJCQkJICovDQotCQkJCWlmIChyZXN1bHRzICYmDQotCQkJ CQkoc3RyY21wKFBRY21kU3RhdHVzKHJlc3VsdHMpLCAiQ09NTUlUIikgPT0g MCB8fA0KLQkJCQkJIHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIlNB VkVQT0lOVCIpID09IDAgfHwNCi0JCQkJCSBzdHJjbXAoUFFjbWRTdGF0dXMo cmVzdWx0cyksICJSRUxFQVNFIikgPT0gMCB8fA0KLQkJCQkJIHN0cmNtcChQ UWNtZFN0YXR1cyhyZXN1bHRzKSwgIlJPTExCQUNLIikgPT0gMCkpDQorCQkJ CWlmICh0eF9lbmRlZCkNCiAJCQkJCXN2cHRjbWQgPSBOVUxMOw0KIAkJCQll bHNlDQogCQkJCQlzdnB0Y21kID0gIlJFTEVBU0UgcGdfcHNxbF90ZW1wb3Jh cnlfc2F2ZXBvaW50IjsNCkBAIC0xMzgzLDE0ICsxNDY2LDE1IEBAIFNlbmRR dWVyeShjb25zdCBjaGFyICpxdWVyeSkNCiAJCQlQR3Jlc3VsdCAgICpzdnB0 cmVzOw0KIA0KIAkJCXN2cHRyZXMgPSBQUWV4ZWMocHNldC5kYiwgc3ZwdGNt ZCk7DQotCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHN2cHRyZXMpICE9IFBHUkVT X0NPTU1BTkRfT0spDQorCQkJcmVzX2Vycm9yID0gUFFyZXN1bHRTdGF0dXMo c3ZwdHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSzsNCisNCisJCQlpZiAocmVz X2Vycm9yKQ0KIAkJCXsNCiAJCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJv ck1lc3NhZ2UocHNldC5kYikpOw0KIAkJCQlDbGVhck9yU2F2ZVJlc3VsdChz dnB0cmVzKTsNCiAJCQkJT0sgPSBmYWxzZTsNCiANCiAJCQkJUFFjbGVhcihy ZXN1bHRzKTsNCi0JCQkJUmVzZXRDYW5jZWxDb25uKCk7DQogCQkJCWdvdG8g c2VuZHF1ZXJ5X2NsZWFudXA7DQogCQkJfQ0KIAkJCVBRY2xlYXIoc3ZwdHJl cyk7DQpAQCAtMTQyMSw2ICsxNTA1LDkgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIHNlbmRxdWVyeV9jbGVhbnVwOg0KIA0KKwkvKiBn bG9iYWwgY2FuY2VsbGF0aW9uIHJlc2V0ICovDQorCVJlc2V0Q2FuY2VsQ29u bigpOw0KKw0KIAkvKiByZXNldCBcZydzIG91dHB1dC10by1maWxlbmFtZSB0 cmlnZ2VyICovDQogCWlmIChwc2V0LmdmbmFtZSkNCiAJew0KQEAgLTE1MDAs NyArMTU4Nyw3IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hhciAqcXVlcnks IGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAlQUWNsZWFyKHJlc3VsdHMpOw0K IA0KIAlyZXN1bHRzID0gUFFkZXNjcmliZVByZXBhcmVkKHBzZXQuZGIsICIi KTsNCi0JT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCShQUXJlc3VsdFN0 YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYgKE9L ICYmIHJlc3VsdHMpDQogCXsNCkBAIC0xNTQ4LDcgKzE2MzUsNyBAQCBEZXNj cmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRf bXNlYykNCiAJCQlQUWNsZWFyKHJlc3VsdHMpOw0KIA0KIAkJCXJlc3VsdHMg PSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQkJCU9LID0gQWNjZXB0 UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3Vs dHMsIHRydWUpOw0KIA0KIAkJCWlmIChwc2V0LnRpbWluZykNCiAJCQl7DQpA QCAtMTU1OCw3ICsxNjQ1LDcgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFy ICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJfQ0KIA0KIAkJ CWlmIChPSyAmJiByZXN1bHRzKQ0KLQkJCQlPSyA9IFByaW50UXVlcnlSZXN1 bHRzKHJlc3VsdHMpOw0KKwkJCQlPSyA9IEhhbmRsZVF1ZXJ5UmVzdWx0KHJl c3VsdHMsIHRydWUsIGZhbHNlLCBOVUxMLCBOVUxMKTsNCiANCiAJCQl0ZXJt UFFFeHBCdWZmZXIoJmJ1Zik7DQogCQl9DQpAQCAtMTYxNyw3ICsxNzA0LDcg QEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRv dWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAlpZiAoUFF0cmFuc2FjdGlvblN0YXR1 cyhwc2V0LmRiKSA9PSBQUVRSQU5TX0lETEUpDQogCXsNCiAJCXJlc3VsdHMg PSBQUWV4ZWMocHNldC5kYiwgIkJFR0lOIik7DQotCQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0 cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0g UEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1 bHRzKTsNCiAJCWlmICghT0spDQpAQCAtMTYzMSw3ICsxNzE4LDcgQEAgRXhl Y1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAq ZWxhcHNlZF9tc2VjKQ0KIAkJCQkJICBxdWVyeSk7DQogDQogCXJlc3VsdHMg PSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzKSAmJg0KKwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRz LCB0cnVlKSAmJg0KIAkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBH UkVTX0NPTU1BTkRfT0spOw0KIAlpZiAoIU9LKQ0KIAkJU2V0UmVzdWx0VmFy aWFibGVzKHJlc3VsdHMsIE9LKTsNCkBAIC0xNzA0LDcgKzE3OTEsNyBAQCBF eGVjUXVlcnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91Ymxl ICplbGFwc2VkX21zZWMpDQogCQkJCWlzX3BhZ2VyID0gZmFsc2U7DQogCQkJ fQ0KIA0KLQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9L ID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0KIAkJCUFzc2VydCgh T0spOw0KIAkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQog CQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQpAQCAtMTgxMyw3ICsx OTAwLDcgQEAgY2xlYW51cDoNCiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRi LCAiQ0xPU0UgX3BzcWxfY3Vyc29yIik7DQogCWlmIChPSykNCiAJew0KLQkJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0 UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVz KHJlc3VsdHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNh dmVSZXN1bHQocmVzdWx0cyk7DQogCX0NCkBAIC0xODIzLDcgKzE5MTAsNyBA QCBjbGVhbnVwOg0KIAlpZiAoc3RhcnRlZF90eG4pDQogCXsNCiAJCXJlc3Vs dHMgPSBQUWV4ZWMocHNldC5kYiwgT0sgPyAiQ09NTUlUIiA6ICJST0xMQkFD SyIpOw0KLQkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlP SyAmPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQog CQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJfQ0KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcHNxbC9oZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5j DQppbmRleCBkYjEyYThiMmYzLi5kMWE2MzhiOGYyIDEwMDY0NA0KLS0tIGEv c3JjL2Jpbi9wc3FsL2hlbHAuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAu Yw0KQEAgLTQxMiw2ICs0MTIsOCBAQCBoZWxwVmFyaWFibGVzKHVuc2lnbmVk IHNob3J0IGludCBwYWdlcikNCiAJZnByaW50ZihvdXRwdXQsIF8oIiAgU0VS VkVSX1ZFUlNJT05fTkFNRVxuIg0KIAkJCQkJICAiICBTRVJWRVJfVkVSU0lP Tl9OVU1cbiINCiAJCQkJCSAgIiAgICBzZXJ2ZXIncyB2ZXJzaW9uIChpbiBz aG9ydCBzdHJpbmcgb3IgbnVtZXJpYyBmb3JtYXQpXG4iKSk7DQorCWZwcmlu dGYob3V0cHV0LCBfKCIgIFNIT1dfQUxMX1JFU1VMVFNcbiINCisJCQkJCSAg IiAgICBzaG93IGFsbCByZXN1bHRzIG9mIGEgY29tYmluZWQgcXVlcnkgKFxc OykgaW5zdGVhZCBvZiBvbmx5IHRoZSBsYXN0XG4iKSk7DQogCWZwcmludGYo b3V0cHV0LCBfKCIgIFNIT1dfQ09OVEVYVFxuIg0KIAkJCQkJICAiICAgIGNv bnRyb2xzIGRpc3BsYXkgb2YgbWVzc2FnZSBjb250ZXh0IGZpZWxkcyBbbmV2 ZXIsIGVycm9ycywgYWx3YXlzXVxuIikpOw0KIAlmcHJpbnRmKG91dHB1dCwg XygiICBTSU5HTEVMSU5FXG4iDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3Fs L3NldHRpbmdzLmggYi9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KaW5kZXgg ODNmMmU2ZjI1NC4uNjI1ODNhZDZjYSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4v cHNxbC9zZXR0aW5ncy5oDQorKysgYi9zcmMvYmluL3BzcWwvc2V0dGluZ3Mu aA0KQEAgLTE0OCw2ICsxNDgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfcHNxbFNl dHRpbmdzDQogCWNvbnN0IGNoYXIgKnByb21wdDI7DQogCWNvbnN0IGNoYXIg KnByb21wdDM7DQogCVBHVmVyYm9zaXR5IHZlcmJvc2l0eTsJCS8qIGN1cnJl bnQgZXJyb3IgdmVyYm9zaXR5IGxldmVsICovDQorCWJvb2wJCXNob3dfYWxs X3Jlc3VsdHM7DQogCVBHQ29udGV4dFZpc2liaWxpdHkgc2hvd19jb250ZXh0 OwkvKiBjdXJyZW50IGNvbnRleHQgZGlzcGxheSBsZXZlbCAqLw0KIH0gUHNx bFNldHRpbmdzOw0KIA0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9zdGFy dHVwLmMgYi9zcmMvYmluL3BzcWwvc3RhcnR1cC5jDQppbmRleCAyOTMxNTMw ZjMzLi4wYWZkOTdjZjhmIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3N0 YXJ0dXAuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL3N0YXJ0dXAuYw0KQEAgLTIw Myw2ICsyMDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQog CVNldFZhcmlhYmxlKHBzZXQudmFycywgIlBST01QVDEiLCBERUZBVUxUX1BS T01QVDEpOw0KIAlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQUk9NUFQyIiwg REVGQVVMVF9QUk9NUFQyKTsNCiAJU2V0VmFyaWFibGUocHNldC52YXJzLCAi UFJPTVBUMyIsIERFRkFVTFRfUFJPTVBUMyk7DQorCVNldFZhcmlhYmxlQm9v bChwc2V0LnZhcnMsICJTSE9XX0FMTF9SRVNVTFRTIik7DQogDQogCXBhcnNl X3BzcWxfb3B0aW9ucyhhcmdjLCBhcmd2LCAmb3B0aW9ucyk7DQogDQpAQCAt MTE0OSw2ICsxMTUwLDEyIEBAIHZlcmJvc2l0eV9ob29rKGNvbnN0IGNoYXIg Km5ld3ZhbCkNCiAJcmV0dXJuIHRydWU7DQogfQ0KIA0KK3N0YXRpYyBib29s DQorc2hvd19hbGxfcmVzdWx0c19ob29rKGNvbnN0IGNoYXIgKm5ld3ZhbCkN Cit7DQorCXJldHVybiBQYXJzZVZhcmlhYmxlQm9vbChuZXd2YWwsICJTSE9X X0FMTF9SRVNVTFRTIiwgJnBzZXQuc2hvd19hbGxfcmVzdWx0cyk7DQorfQ0K Kw0KIHN0YXRpYyBjaGFyICoNCiBzaG93X2NvbnRleHRfc3Vic3RpdHV0ZV9o b29rKGNoYXIgKm5ld3ZhbCkNCiB7DQpAQCAtMTI1MCw2ICsxMjU3LDkgQEAg RXN0YWJsaXNoVmFyaWFibGVTcGFjZSh2b2lkKQ0KIAlTZXRWYXJpYWJsZUhv b2tzKHBzZXQudmFycywgIlZFUkJPU0lUWSIsDQogCQkJCQkgdmVyYm9zaXR5 X3N1YnN0aXR1dGVfaG9vaywNCiAJCQkJCSB2ZXJib3NpdHlfaG9vayk7DQor CVNldFZhcmlhYmxlSG9va3MocHNldC52YXJzLCAiU0hPV19BTExfUkVTVUxU UyIsDQorCQkJCQkgYm9vbF9zdWJzdGl0dXRlX2hvb2ssDQorCQkJCQkgc2hv d19hbGxfcmVzdWx0c19ob29rKTsNCiAJU2V0VmFyaWFibGVIb29rcyhwc2V0 LnZhcnMsICJTSE9XX0NPTlRFWFQiLA0KIAkJCQkJIHNob3dfY29udGV4dF9z dWJzdGl0dXRlX2hvb2ssDQogCQkJCQkgc2hvd19jb250ZXh0X2hvb2spOw0K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBiL3Ny Yy9iaW4vcHNxbC90YWItY29tcGxldGUuYw0KaW5kZXggNWNkNTgzODY2OC4u YTIzMWRjZTNlYiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQpA QCAtNDE5MCw3ICs0MTkwLDcgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNo YXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkNCiAJCW1hdGNoZXMgPSBj b21wbGV0ZV9mcm9tX3ZhcmlhYmxlcyh0ZXh0LCAiIiwgIiIsIGZhbHNlKTsN CiAJZWxzZSBpZiAoVGFpbE1hdGNoZXNDUygiXFxzZXQiLCBNYXRjaEFueSkp DQogCXsNCi0JCWlmIChUYWlsTWF0Y2hlc0NTKCJBVVRPQ09NTUlUfE9OX0VS Uk9SX1NUT1B8UVVJRVR8Ig0KKwkJaWYgKFRhaWxNYXRjaGVzQ1MoIkFVVE9D T01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHxTSE9XX0FMTF9SRVNVTFRTfCIN CiAJCQkJCQkgICJTSU5HTEVMSU5FfFNJTkdMRVNURVAiKSkNCiAJCQlDT01Q TEVURV9XSVRIX0NTKCJvbiIsICJvZmYiKTsNCiAJCWVsc2UgaWYgKFRhaWxN YXRjaGVzQ1MoIkNPTVBfS0VZV09SRF9DQVNFIikpDQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQNCmluZGV4 IDcyODY1ZmUxZWIuLmJiOWUwMjZmOTEgMTAwNjQ0DQotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQpAQCAtMTI2 LDcgKzEyNiw3IEBAIGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBzZWxl Y3QgMS8wOwktLSByb3csIHRoZW4gZXJyb3INCiBFUlJPUjogIGRpdmlzaW9u IGJ5IHplcm8NCiBzZWxlY3QgMS8wXDsgY29weSAoc2VsZWN0IDEpIHRvIHN0 ZG91dDsgLS0gZXJyb3Igb25seQ0KIEVSUk9SOiAgZGl2aXNpb24gYnkgemVy bw0KLWNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3Qg MikgdG8gc3Rkb3V0XDsgc2VsZWN0IDBcOyBzZWxlY3QgMzsgLS0gMSAyIDMN Citjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIp IHRvIHN0ZG91dFw7IHNlbGVjdCAzXDsgc2VsZWN0IDQ7IC0tIDEgMiAzIDQN CiAxDQogMg0KICA/Y29sdW1uPyANCkBAIC0xMzQsOCArMTM0LDE4IEBAIGNv cHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8g c3Rkb3V0XDsgc2VsZWN0IDBcOyBzZWxlY3QgMzsgLS0NCiAgICAgICAgIDMN CiAoMSByb3cpDQogDQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAg ICAgIDQNCisoMSByb3cpDQorDQogY3JlYXRlIHRhYmxlIHRlc3QzIChjIGlu dCk7DQotc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBjb3B5 IHRlc3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsgLS0gMQ0KK3NlbGVjdCAw XDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBmcm9tIHN0 ZGluXDsgc2VsZWN0IDE7IC0tIDAgMQ0KKyA/Y29sdW1uPyANCistLS0tLS0t LS0tDQorICAgICAgICAwDQorKDEgcm93KQ0KKw0KICA/Y29sdW1uPyANCiAt LS0tLS0tLS0tDQogICAgICAgICAxDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQNCmluZGV4IDFiMmY2YmM0MTguLjEwMjlhYjJm MjYgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0DQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0DQpAQCAtNTE3OSwzICs1MTc5LDM0MiBAQCBMaXN0IG9mIGFjY2VzcyBt ZXRob2RzDQogIHBnX2NhdGFsb2cgfCAmJiAgIHwgYW55YXJyYXkgICAgICB8 IGFueWFycmF5ICAgICAgIHwgYm9vbGVhbiAgICAgfCBvdmVybGFwcw0KICgx IHJvdykNCiANCistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCistLQ0KK0NS RUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4g TEFOR1VBR0UgcGxwZ3NxbA0KK0FTICQkDQorICBCRUdJTiBSQUlTRSBOT1RJ Q0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQ7DQor LS0gc2hvdyBib3RoDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVDVCB3YXJu KCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KKyBvbmUgDQorLS0tLS0N CisgICAxDQorKDEgcm93KQ0KKw0KK05PVElDRTogIHdhcm4gMS41DQorQ09O VEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0 IFJBSVNFDQorIHdhcm4gDQorLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQor IHR3byANCistLS0tLQ0KKyAgIDINCisoMSByb3cpDQorDQorLS0gXGdzZXQg YXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJl ZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBc Z3NldA0KKyB0aHJlZSANCistLS0tLS0tDQorICAgICAzDQorKDEgcm93KQ0K Kw0KK05PVElDRTogIHdhcm4gMy41DQorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQorIHdhcm4gDQor LS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorXGVjaG8gOnRocmVlIDpmb3Vy DQorOnRocmVlIDQNCistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxsIHByb2Nl c3NpbmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVDVCB3YXJu KCc2LjUnKSBcOyBTRUxFQ1QgNyA7DQorRVJST1I6ICBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAiOyINCitMSU5FIDE6IFNFTEVDVCA1IDsgU0VMRUNUIDYg KyA7IFNFTEVDVCB3YXJuKCc2LjUnKSA7IFNFTEVDVCA3IDsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeDQorLS0gd2l0aCBhYm9ydGVkIHRy YW5zYWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVycm9yDQorQkVHSU4gXDsgU0VM RUNUIDggQVMgZWlnaHQgXDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7IFJPTExC QUNLIFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0KKyBlaWdodCANCistLS0tLS0t DQorICAgICA4DQorKDEgcm93KQ0KKw0KK0VSUk9SOiAgZGl2aXNpb24gYnkg emVybw0KKy0tIGNsb3NlIHByZXZpb3VzbHkgYWJvcnRlZCB0cmFuc2FjdGlv bg0KK1JPTExCQUNLOw0KKy0tIG1pc2MgU1FMIGNvbW1hbmRzDQorLS0gKG5v biBTRUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCB0aHVzIGlzIG5v dCBzaG93biBpbiBleHBlY3RlZCByZXN1bHRzKQ0KK1NFTEVDVCAnb2snIEFT ICJiZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUgcHNxbF9jb21pY3MocyBURVhU KSBcOw0KK0lOU0VSVCBJTlRPIHBzcWxfY29taWNzIFZBTFVFUyAoJ0NhbHZp bicpLCAoJ2hvYmJlcycpIFw7DQorQ09QWSBwc3FsX2NvbWljcyBGUk9NIFNU RElOIFw7DQorVVBEQVRFIHBzcWxfY29taWNzIFNFVCBzID0gJ0hvYmJlcycg V0hFUkUgcyA9ICdob2JiZXMnIFw7DQorREVMRVRFIEZST00gcHNxbF9jb21p Y3MgV0hFUkUgcyA9ICdNb2UnIFw7DQorQ09QWSBwc3FsX2NvbWljcyBUTyBT VERPVVQgXDsNCitUUlVOQ0FURSBwc3FsX2NvbWljcyBcOw0KK0RST1AgVEFC TEUgcHNxbF9jb21pY3MgXDsNCitTRUxFQ1QgJ29rJyBBUyAiZG9uZSIgOw0K KyBiZWdpbiANCistLS0tLS0tDQorIG9rDQorKDEgcm93KQ0KKw0KK0NhbHZp bg0KK1N1c2llDQorSG9iYmVzDQorIGRvbmUgDQorLS0tLS0tDQorIG9rDQor KDEgcm93KQ0KKw0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvZmYNCitTRUxF Q1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAy IEFTIHR3byA7DQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisg dHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJvdykNCisNCitcc2V0IFNIT1df QUxMX1JFU1VMVFMgb24NCitEUk9QIEZVTkNUSU9OIHdhcm4oVEVYVCk7DQor LS0NCistLSBhdXRvY29tbWl0DQorLS0NCitcZWNobyAnIyBpbml0aWFsIEFV VE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKyMgaW5pdGlhbCBBVVRPQ09NTUlU OiBvbg0KK1xzZXQgQVVUT0NPTU1JVCBvZmYNCitcZWNobyAnIyBBVVRPQ09N TUlUOicgOkFVVE9DT01NSVQNCisjIEFVVE9DT01NSVQ6IG9mZg0KKy0tIGlt cGxpY2l0IEJFR0lODQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQpOw0KK1JP TExCQUNLOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNFUlQg SU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0KK0NP TU1JVDsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCitTRUxFQ1Qg KiBGUk9NIGZvbyBPUkRFUiBCWSAxOw0KKyAgIHMgICANCistLS0tLS0tDQor IGhlbGxvDQorIHdvcmxkDQorKDIgcm93cykNCisNCitEUk9QIFRBQkxFIGZv bzsNCitDT01NSVQ7DQorXHNldCBBVVRPQ09NTUlUIG9uDQorXGVjaG8gJyMg QVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorIyBBVVRPQ09NTUlUOiBvbg0K Ky0tIGV4cGxpY2l0IEJFR0lODQorQkVHSU47DQorQ1JFQVRFIFRBQkxFIGZv byhzIFRFWFQpOw0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMgKCdoZWxs bycpLCAoJ3dvcmxkJyk7DQorQ09NTUlUOw0KK0JFR0lOOw0KK0RST1AgVEFC TEUgZm9vOw0KK1JPTExCQUNLOw0KKy0tIGltcGxpY2l0IHRyYW5zYWN0aW9u cw0KK1NFTEVDVCAqIEZST00gZm9vIE9SREVSIEJZIDE7DQorICAgcyAgIA0K Ky0tLS0tLS0NCisgaGVsbG8NCisgd29ybGQNCisoMiByb3dzKQ0KKw0KK0RS T1AgVEFCTEUgZm9vOw0KK1xlY2hvICcjIGZpbmFsIEFVVE9DT01NSVQ6JyA6 QVVUT0NPTU1JVA0KKyMgZmluYWwgQVVUT0NPTU1JVDogb24NCistLQ0KKy0t IHRlc3QgT05fRVJST1JfUk9MTEJBQ0sNCistLQ0KK0NSRUFURSBGVU5DVElP TiBwc3FsX2Vycm9yKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gQVMgJCQN CisgIEJFR0lODQorICAgIFJBSVNFIEVYQ0VQVElPTiAnZXJyb3IgJScsIG1z ZzsNCisgIEVORDsNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0KK1xlY2hvICcj IGluaXRpYWwgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1JfUk9MTEJB Q0sNCisjIGluaXRpYWwgT05fRVJST1JfUk9MTEJBQ0s6IG9mZg0KK1xzZXQg T05fRVJST1JfUk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9FUlJPUl9ST0xM QkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KKyMgT05fRVJST1JfUk9MTEJB Q0s6IG9uDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQor IyBBVVRPQ09NTUlUOiBvbg0KK0JFR0lOOw0KK0NSRUFURSBUQUJMRSBibGEo cyBOT19TVUNIX1RZUEUpOyAgICAgICAgIC0tIGZhaWxzDQorRVJST1I6ICB0 eXBlICJub19zdWNoX3R5cGUiIGRvZXMgbm90IGV4aXN0DQorTElORSAxOiBD UkVBVEUgVEFCTEUgYmxhKHMgTk9fU1VDSF9UWVBFKTsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBeDQorQ1JFQVRFIFRBQkxFIGJsYShzIFRFWFQp OyAgICAgICAgICAgICAgICAgLS0gc3VjY2VlZHMNCitTRUxFQ1QgcHNxbF9l cnJvcignb29wcyEnKTsgICAgICAgICAgICAgICAtLSBmYWlscw0KK0VSUk9S OiAgZXJyb3Igb29wcyENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24g cHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNFUlQgSU5U TyBibGEgVkFMVUVTICgnQ2FsdmluJyksICgnSG9iYmVzJyk7DQorQ09NTUlU Ow0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQorICAgcyAgICAN CistLS0tLS0tLQ0KKyBDYWx2aW4NCisgSG9iYmVzDQorKDIgcm93cykNCisN CitCRUdJTjsNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnU3VzaWUnKTsg ICAgICAgICAtLSBzdWNjZWVkcw0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCitJ TlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9zYWx5bicpIFw7ICAgICAtLSB3 aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZvcmUgZXJyb3InIEFTIHNob3cg XDsgICAgICAgICAgLS0gd2lsbCBzaG93IQ0KKyAgU0VMRUNUIHBzcWxfZXJy b3IoJ2JvdW0hJykgXDsgICAgICAgICAgIC0tIGZhaWx1cmUNCisgIFNFTEVD VCAnYWZ0ZXIgZXJyb3InIEFTIG5vc2hvdzsgICAgICAgICAtLSBoaWRkZW4g YnkgcHJlY2VlZGluZyBlcnJvcg0KKyAgICAgc2hvdyAgICAgDQorLS0tLS0t LS0tLS0tLS0NCisgYmVmb3JlIGVycm9yDQorKDEgcm93KQ0KKw0KK0VSUk9S OiAgZXJyb3IgYm91bSENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24g cHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNFUlQgSU5U TyBibGEocykgVkFMVUVTICgnTW9lJykgXDsgICAgICAtLSB3aWxsIHJvbGxi YWNrDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYmFtIScpOw0KK0VSUk9SOiAg ZXJyb3IgYmFtIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBwc3Fs X2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0KK0lOU0VSVCBJTlRPIGJs YSBWQUxVRVMgKCdNaXNzIFdvcm13b29kJyk7IC0tIHN1Y2NlZWRzDQorQ09N TUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQorICAgICAg IHMgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tDQorIENhbHZpbg0KKyBIb2Ji ZXMNCisgTWlzcyBXb3Jtd29vZA0KKyBTdXNpZQ0KKyg0IHJvd3MpDQorDQor LS0gc29tZSB3aXRoIGF1dG9jb21taXQgb2ZmDQorXHNldCBBVVRPQ09NTUlU IG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKyMg QVVUT0NPTU1JVDogb2ZmDQorLS0gaW1wbGljaXQgQkVHSU4NCitJTlNFUlQg SU5UTyBibGEgVkFMVUVTICgnRGFkJyk7ICAgICAgICAgICAtLSBzdWNjZWVk cw0KK1NFTEVDVCBwc3FsX2Vycm9yKCdiYWQhJyk7ICAgICAgICAgICAgICAg IC0tIGltcGxpY2l0IHBhcnRpYWwgcm9sbGJhY2sNCitFUlJPUjogIGVycm9y IGJhZCENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNxbF9lcnJv cih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNFUlQgSU5UTyBibGEgVkFM VUVTICgnTXVtJykgXDsgICAgICAgICAtLSB3aWxsIHJvbGxiYWNrDQorU0VM RUNUIENPVU5UKCopIEFTICIjbXVtIg0KK0ZST00gYmxhIFdIRVJFIHMgPSAn TXVtJyBcOyAgICAgICAgICAgICAgIC0tIGJ1dCBiZSBjb3VudGVkIGhlcmUN CitTRUxFQ1QgcHNxbF9lcnJvcignYmFkIScpOyAgICAgICAgICAgICAgICAt LSBpbXBsaWNpdCBwYXJ0aWFsIHJvbGxiYWNrDQorICNtdW0gDQorLS0tLS0t DQorICAgIDENCisoMSByb3cpDQorDQorRVJST1I6ICBlcnJvciBiYWQhDQor Q09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHBzcWxfZXJyb3IodGV4dCkg bGluZSAzIGF0IFJBSVNFDQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxh IE9SREVSIEJZIDE7DQorICAgICAgIHMgICAgICAgDQorLS0tLS0tLS0tLS0t LS0tDQorIENhbHZpbg0KKyBEYWQNCisgSG9iYmVzDQorIE1pc3MgV29ybXdv b2QNCisgU3VzaWUNCisoNSByb3dzKQ0KKw0KKy0tIHJlc2V0DQorXHNldCBB VVRPQ09NTUlUIG9uDQorXHNldCBPTl9FUlJPUl9ST0xMQkFDSyBvZmYNCitc ZWNobyAnIyBmaW5hbCBPTl9FUlJPUl9ST0xMQkFDSzonIDpPTl9FUlJPUl9S T0xMQkFDSw0KKyMgZmluYWwgT05fRVJST1JfUk9MTEJBQ0s6IG9mZg0KK0RS T1AgVEFCTEUgYmxhOw0KK0RST1AgRlVOQ1RJT04gcHNxbF9lcnJvcjsNCist LSBBVVRPQ09NTUlUDQorQ1JFQVRFIFRBQkxFIGFjX3Rlc3QgKGEgaW50KTsN Citcc2V0IEFVVE9DT01NSVQgb2ZmDQorSU5TRVJUIElOVE8gYWNfdGVzdCBW QUxVRVMgKDEpOw0KK0NPTU1JVDsNCitTRUxFQ1QgKiBGUk9NIGFjX3Rlc3Q7 DQorIGEgDQorLS0tDQorIDENCisoMSByb3cpDQorDQorQ09NTUlUOw0KK0lO U0VSVCBJTlRPIGFjX3Rlc3QgVkFMVUVTICgyKTsNCitST0xMQkFDSzsNCitT RUxFQ1QgKiBGUk9NIGFjX3Rlc3Q7DQorIGEgDQorLS0tDQorIDENCisoMSBy b3cpDQorDQorQ09NTUlUOw0KK0JFR0lOOw0KK0lOU0VSVCBJTlRPIGFjX3Rl c3QgVkFMVUVTICgzKTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBhY190 ZXN0Ow0KKyBhIA0KKy0tLQ0KKyAxDQorIDMNCisoMiByb3dzKQ0KKw0KK0NP TU1JVDsNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBhY190ZXN0IFZBTFVFUyAo NCk7DQorUk9MTEJBQ0s7DQorU0VMRUNUICogRlJPTSBhY190ZXN0Ow0KKyBh IA0KKy0tLQ0KKyAxDQorIDMNCisoMiByb3dzKQ0KKw0KK0NPTU1JVDsNCitc c2V0IEFVVE9DT01NSVQgb24NCitEUk9QIFRBQkxFIGFjX3Rlc3Q7DQorU0VM RUNUICogRlJPTSBhY190ZXN0OyAgLS0gc2hvdWxkIGJlIGdvbmUgbm93DQor RVJST1I6ICByZWxhdGlvbiAiYWNfdGVzdCIgZG9lcyBub3QgZXhpc3QNCitM SU5FIDE6IFNFTEVDVCAqIEZST00gYWNfdGVzdDsNCisgICAgICAgICAgICAg ICAgICAgICAgXg0KKy0tIE9OX0VSUk9SX1JPTExCQUNLDQorXHNldCBPTl9F UlJPUl9ST0xMQkFDSyBvbg0KK0NSRUFURSBUQUJMRSBvZXJfdGVzdCAoYSBp bnQpOw0KK0JFR0lOOw0KK0lOU0VSVCBJTlRPIG9lcl90ZXN0IFZBTFVFUyAo MSk7DQorSU5TRVJUIElOVE8gb2VyX3Rlc3QgVkFMVUVTICgnZm9vJyk7DQor RVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2Vy OiAiZm9vIg0KK0xJTkUgMTogSU5TRVJUIElOVE8gb2VyX3Rlc3QgVkFMVUVT ICgnZm9vJyk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4NCitJTlNFUlQgSU5UTyBvZXJfdGVzdCBWQUxVRVMgKDMpOw0KK0NP TU1JVDsNCitTRUxFQ1QgKiBGUk9NIG9lcl90ZXN0Ow0KKyBhIA0KKy0tLQ0K KyAxDQorIDMNCisoMiByb3dzKQ0KKw0KK0JFR0lOOw0KK0lOU0VSVCBJTlRP IG9lcl90ZXN0IFZBTFVFUyAoNCk7DQorUk9MTEJBQ0s7DQorU0VMRUNUICog RlJPTSBvZXJfdGVzdDsNCisgYSANCistLS0NCisgMQ0KKyAzDQorKDIgcm93 cykNCisNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBvZXJfdGVzdCBWQUxVRVMg KDUpOw0KK0NPTU1JVCBBTkQgQ0hBSU47DQorSU5TRVJUIElOVE8gb2VyX3Rl c3QgVkFMVUVTICg2KTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBvZXJf dGVzdDsNCisgYSANCistLS0NCisgMQ0KKyAzDQorIDUNCisgNg0KKyg0IHJv d3MpDQorDQorRFJPUCBUQUJMRSBvZXJfdGVzdDsNCitcc2V0IE9OX0VSUk9S X1JPTExCQUNLIG9mZg0KKy0tIEVDSE8gZXJyb3JzDQorXHNldCBFQ0hPIGVy cm9ycw0KK0VSUk9SOiAgcmVsYXRpb24gIm5vdGV4aXN0cyIgZG9lcyBub3Qg ZXhpc3QNCitMSU5FIDE6IFNFTEVDVCAqIEZST00gbm90ZXhpc3RzOw0KKyAg ICAgICAgICAgICAgICAgICAgICBeDQorU1RBVEVNRU5UOiAgU0VMRUNUICog RlJPTSBub3RleGlzdHM7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC90cmFuc2FjdGlvbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC90cmFuc2FjdGlvbnMub3V0DQppbmRleCA2MTg2MmQ1OTVk Li5iZTFkYjBkNWMwIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC90cmFuc2FjdGlvbnMub3V0DQorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQNCkBAIC05MDAsOCArOTAw LDE4IEBAIERST1AgVEFCTEUgYWJjOw0KIC0tIHRlc3RzIHJlbHkgb24gdGhl IGZhY3QgdGhhdCBwc3FsIHdpbGwgbm90IGJyZWFrIFNRTCBjb21tYW5kcyBh cGFydCBhdCBhDQogLS0gYmFja3NsYXNoLXF1b3RlZCBzZW1pY29sb24sIGJ1 dCB3aWxsIHNlbmQgdGhlbSBhcyBvbmUgUXVlcnkuDQogY3JlYXRlIHRlbXAg dGFibGUgaV90YWJsZSAoZjEgaW50KTsNCi0tLSBwc3FsIHdpbGwgc2hvdyBv bmx5IHRoZSBsYXN0IHJlc3VsdCBpbiBhIG11bHRpLXN0YXRlbWVudCBRdWVy eQ0KKy0tIHBzcWwgd2lsbCBzaG93IGFsbCByZXN1bHRzIG9mIGEgbXVsdGkt c3RhdGVtZW50IFF1ZXJ5DQogU0VMRUNUIDFcOyBTRUxFQ1QgMlw7IFNFTEVD VCAzOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAxDQor KDEgcm93KQ0KKw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAg ICAyDQorKDEgcm93KQ0KKw0KICA/Y29sdW1uPyANCiAtLS0tLS0tLS0tDQog ICAgICAgICAzDQpAQCAtOTE2LDYgKzkyNiwxMiBAQCBpbnNlcnQgaW50byBp X3RhYmxlIHZhbHVlcygxKVw7IHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiAN CiAtLSAxLzAgZXJyb3Igd2lsbCBjYXVzZSByb2xsaW5nIGJhY2sgdGhlIHdo b2xlIGltcGxpY2l0IHRyYW5zYWN0aW9uDQogaW5zZXJ0IGludG8gaV90YWJs ZSB2YWx1ZXMoMilcOyBzZWxlY3QgKiBmcm9tIGlfdGFibGVcOyBzZWxlY3Qg MS8wOw0KKyBmMSANCistLS0tDQorICAxDQorICAyDQorKDIgcm93cykNCisN CiBFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8NCiBzZWxlY3QgKiBmcm9tIGlf dGFibGU7DQogIGYxIA0KQEAgLTkzNSw4ICs5NTEsMTggQEAgV0FSTklORzog IHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQogLS0gYmVn aW4gY29udmVydHMgaW1wbGljaXQgdHJhbnNhY3Rpb24gaW50byBhIHJlZ3Vs YXIgb25lIHRoYXQNCiAtLSBjYW4gZXh0ZW5kIHBhc3QgdGhlIGVuZCBvZiB0 aGUgUXVlcnkNCiBzZWxlY3QgMVw7IGJlZ2luXDsgaW5zZXJ0IGludG8gaV90 YWJsZSB2YWx1ZXMoNSk7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisg ICAgICAgIDENCisoMSByb3cpDQorDQogY29tbWl0Ow0KIHNlbGVjdCAxXDsg YmVnaW5cOyBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcyg2KTsNCisgP2Nv bHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisN CiByb2xsYmFjazsNCiAtLSBjb21taXQgaW4gaW1wbGljaXQtdHJhbnNhY3Rp b24gc3RhdGUgY29tbWl0cyBidXQgaXNzdWVzIGEgd2FybmluZy4NCiBpbnNl cnQgaW50byBpX3RhYmxlIHZhbHVlcyg3KVw7IGNvbW1pdFw7IGluc2VydCBp bnRvIGlfdGFibGUgdmFsdWVzKDgpXDsgc2VsZWN0IDEvMDsNCkBAIC05NjMs MjIgKzk4OSw1MiBAQCByb2xsYmFjazsgIC0tIHdlIGFyZSBub3QgaW4gYSB0 cmFuc2FjdGlvbiBhdCB0aGlzIHBvaW50DQogV0FSTklORzogIHRoZXJlIGlz IG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQogLS0gaW1wbGljaXQgdHJh bnNhY3Rpb24gYmxvY2sgaXMgc3RpbGwgYSB0cmFuc2FjdGlvbiBibG9jaywg Zm9yIGUuZy4gVkFDVVVNDQogU0VMRUNUIDFcOyBWQUNVVU07DQorID9jb2x1 bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQog RVJST1I6ICBWQUNVVU0gY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlv biBibG9jaw0KIFNFTEVDVCAxXDsgQ09NTUlUXDsgVkFDVVVNOw0KIFdBUk5J Tkc6ICB0aGVyZSBpcyBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcw0KKyA/ Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0K Kw0KIEVSUk9SOiAgVkFDVVVNIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNh Y3Rpb24gYmxvY2sNCiAtLSB3ZSBkaXNhbGxvdyBzYXZlcG9pbnQtcmVsYXRl ZCBjb21tYW5kcyBpbiBpbXBsaWNpdC10cmFuc2FjdGlvbiBzdGF0ZQ0KIFNF TEVDVCAxXDsgU0FWRVBPSU5UIHNwOw0KKyA/Y29sdW1uPyANCistLS0tLS0t LS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgU0FWRVBP SU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxvY2tzDQog U0VMRUNUIDFcOyBDT01NSVRcOyBTQVZFUE9JTlQgc3A7DQogV0FSTklORzog IHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQorID9jb2x1 bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQog RVJST1I6ICBTQVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2Fj dGlvbiBibG9ja3MNCiBST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BcOyBTRUxF Q1QgMjsNCiBFUlJPUjogIFJPTExCQUNLIFRPIFNBVkVQT0lOVCBjYW4gb25s eSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KIFNFTEVDVCAyXDsg UkVMRUFTRSBTQVZFUE9JTlQgc3BcOyBTRUxFQ1QgMzsNCisgP2NvbHVtbj8g DQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMg0KKygxIHJvdykNCisNCiBFUlJP UjogIFJFTEVBU0UgU0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJh bnNhY3Rpb24gYmxvY2tzDQogLS0gYnV0IHRoaXMgaXMgT0ssIGJlY2F1c2Ug dGhlIEJFR0lOIGNvbnZlcnRzIGl0IHRvIGEgcmVndWxhciB4YWN0DQogU0VM RUNUIDFcOyBCRUdJTlw7IFNBVkVQT0lOVCBzcFw7IFJPTExCQUNLIFRPIFNB VkVQT0lOVCBzcFw7IENPTU1JVDsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0t LQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiAtLSBUZXN0cyBmb3IgQU5E IENIQUlOIGluIGltcGxpY2l0IHRyYW5zYWN0aW9uIGJsb2Nrcw0KIFNFVCBU UkFOU0FDVElPTiBSRUFEIE9OTFlcOyBDT01NSVQgQU5EIENIQUlOOyAgLS0g ZXJyb3INCiBFUlJPUjogIENPTU1JVCBBTkQgQ0hBSU4gY2FuIG9ubHkgYmUg dXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvcHlzZWxlY3Quc3FsDQppbmRleCAxZDk4ZGFkM2M4Li5l MzJhNGY4ZTM4IDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weXNlbGVjdC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nv cHlzZWxlY3Quc3FsDQpAQCAtODQsMTAgKzg0LDEwIEBAIGRyb3AgdGFibGUg dGVzdDE7DQogLS0gcHNxbCBoYW5kbGluZyBvZiBDT1BZIGluIG11bHRpLWNv bW1hbmQgc3RyaW5ncw0KIGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBz ZWxlY3QgMS8wOwktLSByb3csIHRoZW4gZXJyb3INCiBzZWxlY3QgMS8wXDsg Y29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dDsgLS0gZXJyb3Igb25seQ0KLWNv cHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8g c3Rkb3V0XDsgc2VsZWN0IDBcOyBzZWxlY3QgMzsgLS0gMSAyIDMNCitjb3B5 IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIpIHRvIHN0 ZG91dFw7IHNlbGVjdCAzXDsgc2VsZWN0IDQ7IC0tIDEgMiAzIDQNCiANCiBj cmVhdGUgdGFibGUgdGVzdDMgKGMgaW50KTsNCi1zZWxlY3QgMFw7IGNvcHkg dGVzdDMgZnJvbSBzdGRpblw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNl bGVjdCAxOyAtLSAxDQorc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20gc3Rk aW5cOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsgLS0gMCAx DQogMQ0KIFwuDQogMg0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwN CmluZGV4IDY4MTIxZDE3MWMuLmM3OGZlZTAzYmUgMTAwNjQ0DQotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcHNxbC5zcWwNCkBAIC0xMjQxLDMgKzEyNDEsMTg2IEBA IGRyb3Agcm9sZSByZWdyZXNzX3BhcnRpdGlvbmluZ19yb2xlOw0KIFxkZmEg Yml0KiBzbWFsbCoNCiBcZG8gLSBwZ19jYXRhbG9nLmludDQNCiBcZG8gJiYg YW55YXJyYXkgKg0KKw0KKy0tDQorLS0gY29tYmluZWQgcXVlcmllcw0KKy0t DQorQ1JFQVRFIEZVTkNUSU9OIHdhcm4obXNnIFRFWFQpIFJFVFVSTlMgQk9P TEVBTiBMQU5HVUFHRSBwbHBnc3FsDQorQVMgJCQNCisgIEJFR0lOIFJBSVNF IE5PVElDRSAnd2FybiAlJywgbXNnIDsgUkVUVVJOIFRSVUUgOyBFTkQNCisk JDsNCistLSBzaG93IGJvdGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNU IHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorLS0gXGdzZXQg YXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJl ZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBc Z3NldA0KK1xlY2hvIDp0aHJlZSA6Zm91cg0KKy0tIHN5bnRheCBlcnJvciBz dG9wcyBhbGwgcHJvY2Vzc2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsg XDsgU0VMRUNUIHdhcm4oJzYuNScpIFw7IFNFTEVDVCA3IDsNCistLSB3aXRo IGFib3J0ZWQgdHJhbnNhY3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitC RUdJTiBcOyBTRUxFQ1QgOCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5p bmUgXDsgUk9MTEJBQ0sgXDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorLS0gY2xv c2UgcHJldmlvdXNseSBhYm9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJBQ0s7 DQorLS0gbWlzYyBTUUwgY29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBvdXRw dXQgaXMgc2VudCB0byBzdGRlcnIsIHRodXMgaXMgbm90IHNob3duIGluIGV4 cGVjdGVkIHJlc3VsdHMpDQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBcOw0K K0NSRUFURSBUQUJMRSBwc3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5TRVJU IElOVE8gcHNxbF9jb21pY3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9iYmVz JykgXDsNCitDT1BZIHBzcWxfY29taWNzIEZST00gU1RESU4gXDsNCitVUERB VEUgcHNxbF9jb21pY3MgU0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0gJ2hv YmJlcycgXDsNCitERUxFVEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBzID0g J01vZScgXDsNCitDT1BZIHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0KK1RS VU5DQVRFIHBzcWxfY29taWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2NvbWlj cyBcOw0KK1NFTEVDVCAnb2snIEFTICJkb25lIiA7DQorTW9lDQorU3VzaWUN CitcLg0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvZmYNCitTRUxFQ1QgMSBB UyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3 byA7DQorXHNldCBTSE9XX0FMTF9SRVNVTFRTIG9uDQorRFJPUCBGVU5DVElP TiB3YXJuKFRFWFQpOw0KKw0KKy0tDQorLS0gYXV0b2NvbW1pdA0KKy0tDQor XGVjaG8gJyMgaW5pdGlhbCBBVVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCitc c2V0IEFVVE9DT01NSVQgb2ZmDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpB VVRPQ09NTUlUDQorLS0gaW1wbGljaXQgQkVHSU4NCitDUkVBVEUgVEFCTEUg Zm9vKHMgVEVYVCk7DQorUk9MTEJBQ0s7DQorQ1JFQVRFIFRBQkxFIGZvbyhz IFRFWFQpOw0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMgKCdoZWxsbycp LCAoJ3dvcmxkJyk7DQorQ09NTUlUOw0KK0RST1AgVEFCTEUgZm9vOw0KK1JP TExCQUNLOw0KK1NFTEVDVCAqIEZST00gZm9vIE9SREVSIEJZIDE7DQorRFJP UCBUQUJMRSBmb287DQorQ09NTUlUOw0KK1xzZXQgQVVUT0NPTU1JVCBvbg0K K1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKy0tIGV4cGxp Y2l0IEJFR0lODQorQkVHSU47DQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQp Ow0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMgKCdoZWxsbycpLCAoJ3dv cmxkJyk7DQorQ09NTUlUOw0KK0JFR0lOOw0KK0RST1AgVEFCTEUgZm9vOw0K K1JPTExCQUNLOw0KKy0tIGltcGxpY2l0IHRyYW5zYWN0aW9ucw0KK1NFTEVD VCAqIEZST00gZm9vIE9SREVSIEJZIDE7DQorRFJPUCBUQUJMRSBmb287DQor XGVjaG8gJyMgZmluYWwgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorDQor LS0NCistLSB0ZXN0IE9OX0VSUk9SX1JPTExCQUNLDQorLS0NCitDUkVBVEUg RlVOQ1RJT04gcHNxbF9lcnJvcihtc2cgVEVYVCkgUkVUVVJOUyBCT09MRUFO IEFTICQkDQorICBCRUdJTg0KKyAgICBSQUlTRSBFWENFUFRJT04gJ2Vycm9y ICUnLCBtc2c7DQorICBFTkQ7DQorJCQgTEFOR1VBR0UgcGxwZ3NxbDsNCitc ZWNobyAnIyBpbml0aWFsIE9OX0VSUk9SX1JPTExCQUNLOicgOk9OX0VSUk9S X1JPTExCQUNLDQorXHNldCBPTl9FUlJPUl9ST0xMQkFDSyBvbg0KK1xlY2hv ICcjIE9OX0VSUk9SX1JPTExCQUNLOicgOk9OX0VSUk9SX1JPTExCQUNLDQor XGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorQkVHSU47DQor Q1JFQVRFIFRBQkxFIGJsYShzIE5PX1NVQ0hfVFlQRSk7ICAgICAgICAgLS0g ZmFpbHMNCitDUkVBVEUgVEFCTEUgYmxhKHMgVEVYVCk7ICAgICAgICAgICAg ICAgICAtLSBzdWNjZWVkcw0KK1NFTEVDVCBwc3FsX2Vycm9yKCdvb3BzIScp OyAgICAgICAgICAgICAgIC0tIGZhaWxzDQorSU5TRVJUIElOVE8gYmxhIFZB TFVFUyAoJ0NhbHZpbicpLCAoJ0hvYmJlcycpOw0KK0NPTU1JVDsNCitTRUxF Q1QgKiBGUk9NIGJsYSBPUkRFUiBCWSAxOw0KK0JFR0lOOw0KK0lOU0VSVCBJ TlRPIGJsYSBWQUxVRVMgKCdTdXNpZScpOyAgICAgICAgIC0tIHN1Y2NlZWRz DQorLS0gY29tYmluZWQgcXVlcmllcw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxV RVMgKCdSb3NhbHluJykgXDsgICAgIC0tIHdpbGwgcm9sbGJhY2sNCitTRUxF Q1QgJ2JlZm9yZSBlcnJvcicgQVMgc2hvdyBcOyAgICAgICAgICAtLSB3aWxs IHNob3chDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYm91bSEnKSBcOyAgICAg ICAgICAgLS0gZmFpbHVyZQ0KKyAgU0VMRUNUICdhZnRlciBlcnJvcicgQVMg bm9zaG93OyAgICAgICAgIC0tIGhpZGRlbiBieSBwcmVjZWVkaW5nIGVycm9y DQorSU5TRVJUIElOVE8gYmxhKHMpIFZBTFVFUyAoJ01vZScpIFw7ICAgICAg LS0gd2lsbCByb2xsYmFjaw0KKyAgU0VMRUNUIHBzcWxfZXJyb3IoJ2JhbSEn KTsNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnTWlzcyBXb3Jtd29vZCcp OyAtLSBzdWNjZWVkcw0KK0NPTU1JVDsNCitTRUxFQ1QgKiBGUk9NIGJsYSBP UkRFUiBCWSAxOw0KKy0tIHNvbWUgd2l0aCBhdXRvY29tbWl0IG9mZg0KK1xz ZXQgQVVUT0NPTU1JVCBvZmYNCitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFV VE9DT01NSVQNCistLSBpbXBsaWNpdCBCRUdJTg0KK0lOU0VSVCBJTlRPIGJs YSBWQUxVRVMgKCdEYWQnKTsgICAgICAgICAgIC0tIHN1Y2NlZWRzDQorU0VM RUNUIHBzcWxfZXJyb3IoJ2JhZCEnKTsgICAgICAgICAgICAgICAgLS0gaW1w bGljaXQgcGFydGlhbCByb2xsYmFjaw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxV RVMgKCdNdW0nKSBcOyAgICAgICAgIC0tIHdpbGwgcm9sbGJhY2sNCitTRUxF Q1QgQ09VTlQoKikgQVMgIiNtdW0iDQorRlJPTSBibGEgV0hFUkUgcyA9ICdN dW0nIFw7ICAgICAgICAgICAgICAgLS0gYnV0IGJlIGNvdW50ZWQgaGVyZQ0K K1NFTEVDVCBwc3FsX2Vycm9yKCdiYWQhJyk7ICAgICAgICAgICAgICAgIC0t IGltcGxpY2l0IHBhcnRpYWwgcm9sbGJhY2sNCitDT01NSVQ7DQorU0VMRUNU ICogRlJPTSBibGEgT1JERVIgQlkgMTsNCistLSByZXNldA0KK1xzZXQgQVVU T0NPTU1JVCBvbg0KK1xzZXQgT05fRVJST1JfUk9MTEJBQ0sgb2ZmDQorXGVj aG8gJyMgZmluYWwgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1JfUk9M TEJBQ0sNCitEUk9QIFRBQkxFIGJsYTsNCitEUk9QIEZVTkNUSU9OIHBzcWxf ZXJyb3I7DQorDQorLS0gQVVUT0NPTU1JVA0KKw0KK0NSRUFURSBUQUJMRSBh Y190ZXN0IChhIGludCk7DQorXHNldCBBVVRPQ09NTUlUIG9mZg0KKw0KK0lO U0VSVCBJTlRPIGFjX3Rlc3QgVkFMVUVTICgxKTsNCitDT01NSVQ7DQorU0VM RUNUICogRlJPTSBhY190ZXN0Ow0KK0NPTU1JVDsNCisNCitJTlNFUlQgSU5U TyBhY190ZXN0IFZBTFVFUyAoMik7DQorUk9MTEJBQ0s7DQorU0VMRUNUICog RlJPTSBhY190ZXN0Ow0KK0NPTU1JVDsNCisNCitCRUdJTjsNCitJTlNFUlQg SU5UTyBhY190ZXN0IFZBTFVFUyAoMyk7DQorQ09NTUlUOw0KK1NFTEVDVCAq IEZST00gYWNfdGVzdDsNCitDT01NSVQ7DQorDQorQkVHSU47DQorSU5TRVJU IElOVE8gYWNfdGVzdCBWQUxVRVMgKDQpOw0KK1JPTExCQUNLOw0KK1NFTEVD VCAqIEZST00gYWNfdGVzdDsNCitDT01NSVQ7DQorDQorXHNldCBBVVRPQ09N TUlUIG9uDQorRFJPUCBUQUJMRSBhY190ZXN0Ow0KK1NFTEVDVCAqIEZST00g YWNfdGVzdDsgIC0tIHNob3VsZCBiZSBnb25lIG5vdw0KKw0KKy0tIE9OX0VS Uk9SX1JPTExCQUNLDQorDQorXHNldCBPTl9FUlJPUl9ST0xMQkFDSyBvbg0K K0NSRUFURSBUQUJMRSBvZXJfdGVzdCAoYSBpbnQpOw0KKw0KK0JFR0lOOw0K K0lOU0VSVCBJTlRPIG9lcl90ZXN0IFZBTFVFUyAoMSk7DQorSU5TRVJUIElO VE8gb2VyX3Rlc3QgVkFMVUVTICgnZm9vJyk7DQorSU5TRVJUIElOVE8gb2Vy X3Rlc3QgVkFMVUVTICgzKTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBv ZXJfdGVzdDsNCisNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBvZXJfdGVzdCBW QUxVRVMgKDQpOw0KK1JPTExCQUNLOw0KK1NFTEVDVCAqIEZST00gb2VyX3Rl c3Q7DQorDQorQkVHSU47DQorSU5TRVJUIElOVE8gb2VyX3Rlc3QgVkFMVUVT ICg1KTsNCitDT01NSVQgQU5EIENIQUlOOw0KK0lOU0VSVCBJTlRPIG9lcl90 ZXN0IFZBTFVFUyAoNik7DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gb2Vy X3Rlc3Q7DQorDQorRFJPUCBUQUJMRSBvZXJfdGVzdDsNCitcc2V0IE9OX0VS Uk9SX1JPTExCQUNLIG9mZg0KKw0KKy0tIEVDSE8gZXJyb3JzDQorXHNldCBF Q0hPIGVycm9ycw0KK1NFTEVDVCAqIEZST00gbm90ZXhpc3RzOw0KK1xzZXQg RUNITyBub25lDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv dHJhbnNhY3Rpb25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5z YWN0aW9ucy5zcWwNCmluZGV4IDg4ODYyODBjMGEuLjdmYzlmMDk0NjggMTAw NjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMu c3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMu c3FsDQpAQCAtNTA0LDcgKzUwNCw3IEBAIERST1AgVEFCTEUgYWJjOw0KIA0K IGNyZWF0ZSB0ZW1wIHRhYmxlIGlfdGFibGUgKGYxIGludCk7DQogDQotLS0g cHNxbCB3aWxsIHNob3cgb25seSB0aGUgbGFzdCByZXN1bHQgaW4gYSBtdWx0 aS1zdGF0ZW1lbnQgUXVlcnkNCistLSBwc3FsIHdpbGwgc2hvdyBhbGwgcmVz dWx0cyBvZiBhIG11bHRpLXN0YXRlbWVudCBRdWVyeQ0KIFNFTEVDVCAxXDsg U0VMRUNUIDJcOyBTRUxFQ1QgMzsNCiANCiAtLSB0aGlzIGltcGxpY2l0bHkg Y29tbWl0czoNCg== --2056645051-702423236-1632562133=:3216312--