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 1m6aA0-0000uq-Uc for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jul 2021 14:58:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m6a9z-000824-UX for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jul 2021 14:58:51 +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 1m6a9z-00080v-9b for pgsql-hackers@lists.postgresql.org; Thu, 22 Jul 2021 14:58:51 +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 1m6a9s-00008b-To for pgsql-hackers@lists.postgresql.org; Thu, 22 Jul 2021 14:58:50 +0000 Received: from pseudo (ip-160.net-81-220-45.lyon.rev.numericable.fr [81.220.45.160]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id C1621C0024; Thu, 22 Jul 2021 17:00:46 +0200 (CEST) Date: Thu, 22 Jul 2021 16:58:40 +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: <18c78a01-4a34-9dd4-f78b-6860f1420c8e@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> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-727309686-1626965921=:25741" 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-727309686-1626965921=:25741 Content-Type: text/plain; charset=US-ASCII; format=flowed >> Ok. I noticed. The patch got significantly broken by the watch pager >> commit. I also have to enhance the added tests (per Peter request). > > I wrote a test to check psql query cancel support. I checked that it fails > against the patch that was reverted. Maybe this is useful. Here is the updated version (v8? I'm not sure what the right count is), which works for me and for "make check", including some tests added for uncovered paths. I included your tap test (thanks again!) with some more comments and cleanup. I tested manually for the pager feature, which mostly work, althoug "pspg --stream" does not seem to expect two tables, or maybe there is a way to switch between these that I have not found. -- Fabien. --2056645051-727309686-1626965921=:25741 Content-Type: text/x-diff; name=psql-show-all-results-8.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-8.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCA0MGI1MTA5YjU1Li5jY2NlNzJmYjg1IDEwMDY0NA0KLS0tIGEvY29u 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 cWwvY29tbW9uLmMNCmluZGV4IDU2NDA3ODY2NzguLjU2NGE0ODE2ZGUgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTMzLDYgKzMzLDggQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCk7DQogDQogDQogLyoNCkBAIC0z NTMsNyArMzU1LDcgQEAgQ2hlY2tDb25uZWN0aW9uKHZvaWQpDQogICogUmV0 dXJucyB0cnVlIGZvciB2YWxpZCByZXN1bHQsIGZhbHNlIGZvciBlcnJvciBz dGF0ZS4NCiAgKi8NCiBzdGF0aWMgYm9vbA0KLUFjY2VwdFJlc3VsdChjb25z dCBQR3Jlc3VsdCAqcmVzdWx0KQ0KK0FjY2VwdFJlc3VsdChjb25zdCBQR3Jl c3VsdCAqcmVzdWx0LCBib29sIHNob3dfZXJyb3IpDQogew0KIAlib29sCQlP SzsNCiANCkBAIC0zODQsNyArMzg2LDcgQEAgQWNjZXB0UmVzdWx0KGNvbnN0 IFBHcmVzdWx0ICpyZXN1bHQpDQogCQkJCWJyZWFrOw0KIAkJfQ0KIA0KLQlp ZiAoIU9LKQ0KKwlpZiAoIU9LICYmIHNob3dfZXJyb3IpDQogCXsNCiAJCWNv bnN0IGNoYXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2UocHNldC5kYik7DQog DQpAQCAtNDcyLDYgKzQ3NCwxOCBAQCBDbGVhck9yU2F2ZVJlc3VsdChQR3Jl c3VsdCAqcmVzdWx0KQ0KIAl9DQogfQ0KIA0KKy8qDQorICogQ29uc3VtZSBh bGwgcmVzdWx0cw0KKyAqLw0KK3N0YXRpYyB2b2lkDQorQ2xlYXJPclNhdmVB bGxSZXN1bHRzKCkNCit7DQorCVBHcmVzdWx0CSpyZXN1bHQ7DQorDQorCXdo aWxlICgocmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYikpICE9IE5VTEwp DQorCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KK30NCisNCiANCiAv Kg0KICAqIFByaW50IG1pY3JvdGltaW5nIG91dHB1dC4gIEFsd2F5cyBwcmlu dCByYXcgbWlsbGlzZWNvbmRzOyBpZiB0aGUgaW50ZXJ2YWwNCkBAIC01NzIs NyArNTg2LDcgQEAgUFNRTGV4ZWMoY29uc3QgY2hhciAqcXVlcnkpDQogDQog CVJlc2V0Q2FuY2VsQ29ubigpOw0KIA0KLQlpZiAoIUFjY2VwdFJlc3VsdChy ZXMpKQ0KKwlpZiAoIUFjY2VwdFJlc3VsdChyZXMsIHRydWUpKQ0KIAl7DQog CQlDbGVhck9yU2F2ZVJlc3VsdChyZXMpOw0KIAkJcmVzID0gTlVMTDsNCkBA IC01OTQsMTEgKzYwOCw4IEBAIFBTUUxleGVjKGNvbnN0IGNoYXIgKnF1ZXJ5 KQ0KIGludA0KIFBTUUxleGVjV2F0Y2goY29uc3QgY2hhciAqcXVlcnksIGNv bnN0IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVyeUZvdXQp DQogew0KLQlQR3Jlc3VsdCAgICpyZXM7DQogCWRvdWJsZQkJZWxhcHNlZF9t c2VjID0gMDsNCi0JaW5zdHJfdGltZQliZWZvcmU7DQotCWluc3RyX3RpbWUJ YWZ0ZXI7DQotCUZJTEUJICAgKmZvdXQ7DQorCWludAkJCXJlczsNCiANCiAJ aWYgKCFwc2V0LmRiKQ0KIAl7DQpAQCAtNjA3LDc3ICs2MTgsMTQgQEAgUFNR TGV4ZWNXYXRjaChjb25zdCBjaGFyICpxdWVyeSwgY29uc3QgcHJpbnRRdWVy eU9wdCAqb3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCkNCiAJfQ0KIA0KIAlT ZXRDYW5jZWxDb25uKHBzZXQuZGIpOw0KLQ0KLQlpZiAocHNldC50aW1pbmcp DQotCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9yZSk7DQotDQotCXJl cyA9IFBRZXhlYyhwc2V0LmRiLCBxdWVyeSk7DQotDQorCXJlcyA9IFNlbmRR dWVyeUFuZFByb2Nlc3NSZXN1bHRzKHF1ZXJ5LCAmZWxhcHNlZF9tc2VjLCB0 cnVlLCBvcHQsIHByaW50UXVlcnlGb3V0KTsNCiAJUmVzZXRDYW5jZWxDb25u KCk7DQogDQotCWlmICghQWNjZXB0UmVzdWx0KHJlcykpDQotCXsNCi0JCUNs ZWFyT3JTYXZlUmVzdWx0KHJlcyk7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0K LQlpZiAocHNldC50aW1pbmcpDQotCXsNCi0JCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQoYWZ0ZXIpOw0KLQkJSU5TVFJfVElNRV9TVUJUUkFDVChhZnRlciwg YmVmb3JlKTsNCi0JCWVsYXBzZWRfbXNlYyA9IElOU1RSX1RJTUVfR0VUX01J TExJU0VDKGFmdGVyKTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiBJZiBTSUdJTlQg aXMgc2VudCB3aGlsZSB0aGUgcXVlcnkgaXMgcHJvY2Vzc2luZywgdGhlIGlu dGVycnVwdCB3aWxsIGJlDQotCSAqIGNvbnN1bWVkLiAgVGhlIHVzZXIncyBp bnRlbnRpb24sIHRob3VnaCwgaXMgdG8gY2FuY2VsIHRoZSBlbnRpcmUgd2F0 Y2gNCi0JICogcHJvY2Vzcywgc28gZGV0ZWN0IGEgc2VudCBjYW5jZWxsYXRp b24gcmVxdWVzdCBhbmQgZXhpdCBpbiB0aGlzIGNhc2UuDQotCSAqLw0KLQlp ZiAoY2FuY2VsX3ByZXNzZWQpDQotCXsNCi0JCVBRY2xlYXIocmVzKTsNCi0J CXJldHVybiAwOw0KLQl9DQotDQotCWZvdXQgPSBwcmludFF1ZXJ5Rm91dCA/ IHByaW50UXVlcnlGb3V0IDogcHNldC5xdWVyeUZvdXQ7DQotDQotCXN3aXRj aCAoUFFyZXN1bHRTdGF0dXMocmVzKSkNCi0Jew0KLQkJY2FzZSBQR1JFU19U VVBMRVNfT0s6DQotCQkJcHJpbnRRdWVyeShyZXMsIG9wdCwgZm91dCwgZmFs c2UsIHBzZXQubG9nZmlsZSk7DQotCQkJYnJlYWs7DQotDQotCQljYXNlIFBH UkVTX0NPTU1BTkRfT0s6DQotCQkJZnByaW50Zihmb3V0LCAiJXNcbiVzXG5c biIsIG9wdC0+dGl0bGUsIFBRY21kU3RhdHVzKHJlcykpOw0KLQkJCWJyZWFr Ow0KLQ0KLQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToNCi0JCQlwZ19sb2df ZXJyb3IoIlxcd2F0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBhbiBlbXB0eSBx dWVyeSIpOw0KLQkJCVBRY2xlYXIocmVzKTsNCi0JCQlyZXR1cm4gLTE7DQot DQotCQljYXNlIFBHUkVTX0NPUFlfT1VUOg0KLQkJY2FzZSBQR1JFU19DT1BZ X0lOOg0KLQkJY2FzZSBQR1JFU19DT1BZX0JPVEg6DQotCQkJcGdfbG9nX2Vy cm9yKCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSIpOw0KLQkJ CVBRY2xlYXIocmVzKTsNCi0JCQlyZXR1cm4gLTE7DQotDQotCQlkZWZhdWx0 Og0KLQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCByZXN1bHQgc3RhdHVz IGZvciBcXHdhdGNoIik7DQotCQkJUFFjbGVhcihyZXMpOw0KLQkJCXJldHVy biAtMTsNCi0JfQ0KLQ0KLQlQUWNsZWFyKHJlcyk7DQotDQotCWZmbHVzaChm b3V0KTsNCi0NCiAJLyogUG9zc2libGUgbWljcm90aW1pbmcgb3V0cHV0ICov DQogCWlmIChwc2V0LnRpbWluZykNCiAJCVByaW50VGltaW5nKGVsYXBzZWRf bXNlYyk7DQogDQotCXJldHVybiAxOw0KKwlyZXR1cm4gcmVzOw0KIH0NCiAN CiANCkBAIC03MTIsNyArNjYwLDcgQEAgUHJpbnROb3RpZmljYXRpb25zKHZv aWQpDQogICogUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90 aGVyd2lzZS4NCiAgKi8NCiBzdGF0aWMgYm9vbA0KLVByaW50UXVlcnlUdXBs ZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMpDQorUHJpbnRRdWVyeVR1cGxl cyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cywgY29uc3QgcHJpbnRRdWVyeU9w dCAqb3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCkNCiB7DQogCWJvb2wJCXJl c3VsdCA9IHRydWU7DQogDQpAQCAtNzQ0LDggKzY5Miw5IEBAIFByaW50UXVl cnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMpDQogCX0NCiAJZWxz ZQ0KIAl7DQotCQlwcmludFF1ZXJ5KHJlc3VsdHMsICZwc2V0LnBvcHQsIHBz ZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsNCi0JCWlmIChm ZXJyb3IocHNldC5xdWVyeUZvdXQpKQ0KKwkJRklMRSAqZm91dCA9IHByaW50 UXVlcnlGb3V0ID8gcHJpbnRRdWVyeUZvdXQgOiBwc2V0LnF1ZXJ5Rm91dDsN CisJCXByaW50UXVlcnkocmVzdWx0cywgb3B0ID8gb3B0IDogJnBzZXQucG9w dCwgZm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7DQorCQlpZiAoZmVycm9y KGZvdXQpKQ0KIAkJew0KIAkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHBy aW50IHJlc3VsdCB0YWJsZTogJW0iKTsNCiAJCQlyZXN1bHQgPSBmYWxzZTsN CkBAIC04OTAsMjEzICs4MzksMTMxIEBAIGxvb3BfZXhpdDoNCiANCiANCiAv Kg0KLSAqIFByb2Nlc3NSZXN1bHQ6IHV0aWxpdHkgZnVuY3Rpb24gZm9yIHVz ZSBieSBTZW5kUXVlcnkoKSBvbmx5DQotICoNCi0gKiBXaGVuIG91ciBjb21t YW5kIHN0cmluZyBjb250YWluZWQgYSBDT1BZIEZST00gU1RESU4gb3IgQ09Q WSBUTyBTVERPVVQsDQotICogUFFleGVjKCkgaGFzIHN0b3BwZWQgYXQgdGhl IFBHcmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3Qgc3VjaA0KLSAq IGNvbW1hbmQuICBJbiB0aGF0IGV2ZW50LCB3ZSdsbCBtYXJzaGFsIGRhdGEg Zm9yIHRoZSBDT1BZIGFuZCB0aGVuIGN5Y2xlDQotICogdGhyb3VnaCBhbnkg c3Vic2VxdWVudCBQR3Jlc3VsdCBvYmplY3RzLg0KLSAqDQotICogV2hlbiB0 aGUgY29tbWFuZCBzdHJpbmcgY29udGFpbmVkIG5vIHN1Y2ggQ09QWSBjb21t YW5kLCB0aGlzIGZ1bmN0aW9uDQotICogZGVnZW5lcmF0ZXMgdG8gYW4gQWNj ZXB0UmVzdWx0KCkgY2FsbC4NCi0gKg0KLSAqIENoYW5nZXMgaXRzIGFyZ3Vt ZW50IHRvIHBvaW50IHRvIHRoZSBsYXN0IFBHcmVzdWx0IG9mIHRoZSBjb21t YW5kIHN0cmluZywNCi0gKiBvciBOVUxMIGlmIHRoYXQgcmVzdWx0IHdhcyBm b3IgYSBDT1BZIFRPIFNURE9VVC4gIChSZXR1cm5pbmcgTlVMTCBwcmV2ZW50 cw0KLSAqIHRoZSBjb21tYW5kIHN0YXR1cyBmcm9tIGJlaW5nIHByaW50ZWQs IHdoaWNoIHdlIHdhbnQgaW4gdGhhdCBjYXNlIHNvIHRoYXQNCi0gKiB0aGUg c3RhdHVzIGxpbmUgZG9lc24ndCBnZXQgdGFrZW4gYXMgcGFydCBvZiB0aGUg Q09QWSBkYXRhLikNCi0gKg0KLSAqIFJldHVybnMgdHJ1ZSBvbiBjb21wbGV0 ZSBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuICBQb3NzaWJsZSBmYWlsdXJl IG1vZGVzDQotICogaW5jbHVkZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxl bXM7IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMgZm9yIHRoZQ0KLSAq IHNlcnZlci1zaWRlIG9waW5pb24uDQorICogTWFyc2hhbCB0aGUgQ09QWSBk YXRhLiAgRWl0aGVyIHN1YnJvdXRpbmUgd2lsbCBnZXQgdGhlDQorICogY29u bmVjdGlvbiBvdXQgb2YgaXRzIENPUFkgc3RhdGUsIHRoZW4gY2FsbCBQUXJl c3VsdFN0YXR1cygpDQorICogb25jZSBhbmQgcmVwb3J0IGFueSBlcnJvci4g UmV0dXJuIHdoZXRoZXIgYWxsIHdhcyBvay4NCisgKg0KKyAqIEZvciBDT1BZ IE9VVCwgZGlyZWN0IHRoZSBvdXRwdXQgdG8gcHNldC5jb3B5U3RyZWFtIGlm IGl0J3Mgc2V0LA0KKyAqIG90aGVyd2lzZSB0byBwc2V0LmdmbmFtZSBpZiBp dCdzIHNldCwgb3RoZXJ3aXNlIHRvIHF1ZXJ5Rm91dC4NCisgKiBGb3IgQ09Q WSBJTiwgdXNlIHBzZXQuY29weVN0cmVhbSBhcyBkYXRhIHNvdXJjZSBpZiBp dCdzIHNldCwNCisgKiBvdGhlcndpc2UgY3VyX2NtZF9zb3VyY2UuDQorICoN CisgKiBVcGRhdGUgcmVzdWx0IGlmIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBu ZWNlc3NhcnksIG9yIE5VTEwgb3RoZXJ3aXNlLg0KKyAqIFJldHVybiBhIHJl c3VsdCB3aGVuIHF1ZXJ5Rm91dCBjYW4gc2FmZWx5IG91dHB1dCBhIHJlc3Vs dCBzdGF0dXM6DQorICogb24gQ09QWSBJTiwgb3Igb24gQ09QWSBPVVQgaWYg d3JpdHRlbiB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBwc2V0LnF1ZXJ5Rm91 dC4NCisgKiBSZXR1cm5pbmcgTlVMTCBwcmV2ZW50cyB0aGUgY29tbWFuZCBz dGF0dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGljaA0KKyAqIHdlIHdhbnQg aWYgdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3QgZ2V0IHRha2VuIGFzIHBhcnQg b2YgdGhlIENPUFkgZGF0YS4NCiAgKi8NCiBzdGF0aWMgYm9vbA0KLVByb2Nl c3NSZXN1bHQoUEdyZXN1bHQgKipyZXN1bHRzKQ0KK0hhbmRsZUNvcHlSZXN1 bHQoUEdyZXN1bHQgKipyZXN1bHQpDQogew0KLQlib29sCQlzdWNjZXNzID0g dHJ1ZTsNCi0JYm9vbAkJZmlyc3RfY3ljbGUgPSB0cnVlOw0KKwlib29sCQlz dWNjZXNzOw0KKwlGSUxFCSAgICpjb3B5c3RyZWFtOw0KKwlQR3Jlc3VsdCAg ICpjb3B5X3Jlc3VsdDsNCisJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1 cyA9IFBRcmVzdWx0U3RhdHVzKCpyZXN1bHQpOw0KIA0KLQlmb3IgKDs7KQ0K KwlBc3NlcnQocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCB8fA0K KwkJICAgcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX0lOKTsNCisNCisJ U2V0Q2FuY2VsQ29ubihwc2V0LmRiKTsNCisNCisJaWYgKHJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQogCXsNCi0JCUV4ZWNTdGF0dXNUeXBl IHJlc3VsdF9zdGF0dXM7DQotCQlib29sCQlpc19jb3B5Ow0KLQkJUEdyZXN1 bHQgICAqbmV4dF9yZXN1bHQ7DQorCQlib29sCQluZWVkX2Nsb3NlID0gZmFs c2U7DQorCQlib29sCQlpc19waXBlID0gZmFsc2U7DQogDQotCQlpZiAoIUFj Y2VwdFJlc3VsdCgqcmVzdWx0cykpDQorCQlpZiAocHNldC5jb3B5U3RyZWFt KQ0KIAkJew0KLQkJCS8qDQotCQkJICogRmFpbHVyZSBhdCB0aGlzIHBvaW50 IGlzIGFsd2F5cyBhIHNlcnZlci1zaWRlIGZhaWx1cmUgb3IgYQ0KLQkJCSAq IGZhaWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5kIHN0cmluZy4gIEVpdGhl ciB3YXksIHdlJ3JlDQotCQkJICogZmluaXNoZWQgd2l0aCB0aGlzIGNvbW1h bmQgc3RyaW5nLg0KLQkJCSAqLw0KLQkJCXN1Y2Nlc3MgPSBmYWxzZTsNCi0J CQlicmVhazsNCisJCQkvKiBpbnZva2VkIGJ5IFxjb3B5ICovDQorCQkJY29w eXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCiAJCX0NCi0NCi0JCXJlc3Vs dF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0cyk7DQotCQlzd2l0 Y2ggKHJlc3VsdF9zdGF0dXMpDQorCQllbHNlIGlmIChwc2V0LmdmbmFtZSkN CiAJCXsNCi0JCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOg0KLQkJCWNhc2Ug UEdSRVNfQ09NTUFORF9PSzoNCi0JCQljYXNlIFBHUkVTX1RVUExFU19PSzoN Ci0JCQkJaXNfY29weSA9IGZhbHNlOw0KLQkJCQlicmVhazsNCi0NCi0JCQlj YXNlIFBHUkVTX0NPUFlfT1VUOg0KLQkJCWNhc2UgUEdSRVNfQ09QWV9JTjoN Ci0JCQkJaXNfY29weSA9IHRydWU7DQotCQkJCWJyZWFrOw0KLQ0KLQkJCWRl ZmF1bHQ6DQotCQkJCS8qIEFjY2VwdFJlc3VsdCgpIHNob3VsZCBoYXZlIGNh dWdodCBhbnl0aGluZyBlbHNlLiAqLw0KLQkJCQlpc19jb3B5ID0gZmFsc2U7 DQotCQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1 czogJWQiLCByZXN1bHRfc3RhdHVzKTsNCi0JCQkJYnJlYWs7DQotCQl9DQot DQotCQlpZiAoaXNfY29weSkNCi0JCXsNCi0JCQkvKg0KLQkJCSAqIE1hcnNo YWwgdGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5lIHdpbGwgZ2V0 IHRoZQ0KLQkJCSAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZIHN0YXRl LCB0aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KLQkJCSAqIG9uY2UgYW5k IHJlcG9ydCBhbnkgZXJyb3IuDQotCQkJICoNCi0JCQkgKiBGb3IgQ09QWSBP VVQsIGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQuY29weVN0cmVhbSBpZiBp dCdzIHNldCwNCi0JCQkgKiBvdGhlcndpc2UgdG8gcHNldC5nZm5hbWUgaWYg aXQncyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQuDQotCQkJICogRm9y IENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0YSBzb3VyY2Ug aWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIGN1cl9jbWRfc291cmNl Lg0KLQkJCSAqLw0KLQkJCUZJTEUJICAgKmNvcHlzdHJlYW07DQotCQkJUEdy ZXN1bHQgICAqY29weV9yZXN1bHQ7DQotDQotCQkJU2V0Q2FuY2VsQ29ubihw c2V0LmRiKTsNCi0JCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZ X09VVCkNCisJCQkvKiBpbnZva2VkIGJ5IFxnICovDQorCQkJaWYgKG9wZW5R dWVyeU91dHB1dEZpbGUocHNldC5nZm5hbWUsDQorCQkJCQkJCQkJJmNvcHlz dHJlYW0sICZpc19waXBlKSkNCiAJCQl7DQotCQkJCWJvb2wJCW5lZWRfY2xv c2UgPSBmYWxzZTsNCi0JCQkJYm9vbAkJaXNfcGlwZSA9IGZhbHNlOw0KLQ0K LQkJCQlpZiAocHNldC5jb3B5U3RyZWFtKQ0KLQkJCQl7DQotCQkJCQkvKiBp bnZva2VkIGJ5IFxjb3B5ICovDQotCQkJCQljb3B5c3RyZWFtID0gcHNldC5j b3B5U3RyZWFtOw0KLQkJCQl9DQotCQkJCWVsc2UgaWYgKHBzZXQuZ2ZuYW1l KQ0KLQkJCQl7DQotCQkJCQkvKiBpbnZva2VkIGJ5IFxnICovDQotCQkJCQlp ZiAob3BlblF1ZXJ5T3V0cHV0RmlsZShwc2V0LmdmbmFtZSwNCi0JCQkJCQkJ CQkJCSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQotCQkJCQl7DQotCQkJCQkJ bmVlZF9jbG9zZSA9IHRydWU7DQotCQkJCQkJaWYgKGlzX3BpcGUpDQotCQkJ CQkJCWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQotCQkJCQl9DQotCQkJCQll bHNlDQotCQkJCQkJY29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2NhcmQgQ09Q WSBkYXRhIGVudGlyZWx5ICovDQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7 DQotCQkJCQkvKiBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyaWMgcXVlcnkgb3V0 cHV0IHN0cmVhbSAqLw0KLQkJCQkJY29weXN0cmVhbSA9IHBzZXQucXVlcnlG b3V0Ow0KLQkJCQl9DQotDQotCQkJCXN1Y2Nlc3MgPSBoYW5kbGVDb3B5T3V0 KHBzZXQuZGIsDQotCQkJCQkJCQkJCWNvcHlzdHJlYW0sDQotCQkJCQkJCQkJ CSZjb3B5X3Jlc3VsdCkNCi0JCQkJCSYmIHN1Y2Nlc3MNCi0JCQkJCSYmIChj b3B5c3RyZWFtICE9IE5VTEwpOw0KLQ0KLQkJCQkvKg0KLQkJCQkgKiBTdXBw cmVzcyBzdGF0dXMgcHJpbnRpbmcgaWYgdGhlIHJlcG9ydCB3b3VsZCBnbyB0 byB0aGUgc2FtZQ0KLQkJCQkgKiBwbGFjZSBhcyB0aGUgQ09QWSBkYXRhIGp1 c3Qgd2VudC4gIE5vdGUgdGhpcyBkb2Vzbid0DQotCQkJCSAqIHByZXZlbnQg ZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVDb3B5T3V0IGRpZCB0aGF0 Lg0KLQkJCQkgKi8NCi0JCQkJaWYgKGNvcHlzdHJlYW0gPT0gcHNldC5xdWVy eUZvdXQpDQotCQkJCXsNCi0JCQkJCVBRY2xlYXIoY29weV9yZXN1bHQpOw0K LQkJCQkJY29weV9yZXN1bHQgPSBOVUxMOw0KLQkJCQl9DQotDQotCQkJCWlm IChuZWVkX2Nsb3NlKQ0KLQkJCQl7DQotCQkJCQkvKiBjbG9zZSBcZyBhcmd1 bWVudCBmaWxlL3BpcGUgKi8NCi0JCQkJCWlmIChpc19waXBlKQ0KLQkJCQkJ ew0KLQkJCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCQlyZXN0b3Jl X3NpZ3BpcGVfdHJhcCgpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJ ew0KLQkJCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCX0NCi0JCQkJ fQ0KKwkJCQluZWVkX2Nsb3NlID0gdHJ1ZTsNCisJCQkJaWYgKGlzX3BpcGUp DQorCQkJCQlkaXNhYmxlX3NpZ3BpcGVfdHJhcCgpOw0KIAkJCX0NCiAJCQll bHNlDQotCQkJew0KLQkJCQkvKiBDT1BZIElOICovDQotCQkJCWNvcHlzdHJl YW0gPSBwc2V0LmNvcHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBwc2V0 LmN1cl9jbWRfc291cmNlOw0KLQkJCQlzdWNjZXNzID0gaGFuZGxlQ29weUlu KHBzZXQuZGIsDQotCQkJCQkJCQkJICAgY29weXN0cmVhbSwNCi0JCQkJCQkJ CQkgICBQUWJpbmFyeVR1cGxlcygqcmVzdWx0cyksDQotCQkJCQkJCQkJICAg JmNvcHlfcmVzdWx0KSAmJiBzdWNjZXNzOw0KLQkJCX0NCi0JCQlSZXNldENh bmNlbENvbm4oKTsNCi0NCi0JCQkvKg0KLQkJCSAqIFJlcGxhY2UgdGhlIFBH UkVTX0NPUFlfT1VUL0lOIHJlc3VsdCB3aXRoIENPUFkgY29tbWFuZCdzIGV4 aXQNCi0JCQkgKiBzdGF0dXMsIG9yIHdpdGggTlVMTCBpZiB3ZSB3YW50IHRv IHN1cHByZXNzIHByaW50aW5nIGFueXRoaW5nLg0KLQkJCSAqLw0KLQkJCVBR Y2xlYXIoKnJlc3VsdHMpOw0KLQkJCSpyZXN1bHRzID0gY29weV9yZXN1bHQ7 DQorCQkJCWNvcHlzdHJlYW0gPSBOVUxMOwkvKiBkaXNjYXJkIENPUFkgZGF0 YSBlbnRpcmVseSAqLw0KIAkJfQ0KLQkJZWxzZSBpZiAoZmlyc3RfY3ljbGUp DQorCQllbHNlDQogCQl7DQotCQkJLyogZmFzdCBwYXRoOiBubyBDT1BZIGNv bW1hbmRzOyBQUWV4ZWMgdmlzaXRlZCBhbGwgcmVzdWx0cyAqLw0KLQkJCWJy ZWFrOw0KKwkJCS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBxdWVyeSBv dXRwdXQgc3RyZWFtICovDQorCQkJY29weXN0cmVhbSA9IHBzZXQucXVlcnlG b3V0Ow0KIAkJfQ0KIA0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlPdXQocHNl dC5kYiwNCisJCQkJCQkJCWNvcHlzdHJlYW0sDQorCQkJCQkJCQkmY29weV9y ZXN1bHQpDQorCQkJJiYgKGNvcHlzdHJlYW0gIT0gTlVMTCk7DQorDQogCQkv Kg0KLQkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4gIEluIHRoZSB0 eXBpY2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KLQkJICogc3RyaW5n LCBpdCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZl IG90aGVyIHJlc3VsdHMNCi0JCSAqIHRvIHByb2Nlc3MgdGhhdCBtYXkgaW5j bHVkZSBvdGhlciBDT1BZcy4gIFdlIGtlZXAgdGhlIGxhc3QgcmVzdWx0Lg0K KwkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5nIGlmIHRoZSByZXBvcnQg d291bGQgZ28gdG8gdGhlIHNhbWUNCisJCSAqIHBsYWNlIGFzIHRoZSBDT1BZ IGRhdGEganVzdCB3ZW50LiAgTm90ZSB0aGlzIGRvZXNuJ3QNCisJCSAqIHBy ZXZlbnQgZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVDb3B5T3V0IGRp ZCB0aGF0Lg0KIAkJICovDQotCQluZXh0X3Jlc3VsdCA9IFBRZ2V0UmVzdWx0 KHBzZXQuZGIpOw0KLQkJaWYgKCFuZXh0X3Jlc3VsdCkNCi0JCQlicmVhazsN CisJCWlmIChjb3B5c3RyZWFtID09IHBzZXQucXVlcnlGb3V0KQ0KKwkJew0K KwkJCVBRY2xlYXIoY29weV9yZXN1bHQpOw0KKwkJCWNvcHlfcmVzdWx0ID0g TlVMTDsNCisJCX0NCiANCi0JCVBRY2xlYXIoKnJlc3VsdHMpOw0KLQkJKnJl c3VsdHMgPSBuZXh0X3Jlc3VsdDsNCi0JCWZpcnN0X2N5Y2xlID0gZmFsc2U7 DQorCQlpZiAobmVlZF9jbG9zZSkNCisJCXsNCisJCQkvKiBjbG9zZSBcZyBh cmd1bWVudCBmaWxlL3BpcGUgKi8NCisJCQlpZiAoaXNfcGlwZSkNCisJCQl7 DQorCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCisJCQkJcmVzdG9yZV9zaWdw aXBlX3RyYXAoKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJZmNs b3NlKGNvcHlzdHJlYW0pOw0KKwkJCX0NCisJCX0NCisJfQ0KKwllbHNlDQor CXsNCisJCS8qIENPUFkgSU4gKi8NCisJCWNvcHlzdHJlYW0gPSBwc2V0LmNv cHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBwc2V0LmN1cl9jbWRfc291 cmNlOw0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlJbihwc2V0LmRiLA0KKwkJ CQkJCQkgICBjb3B5c3RyZWFtLA0KKwkJCQkJCQkgICBQUWJpbmFyeVR1cGxl cygqcmVzdWx0KSwNCisJCQkJCQkJICAgJmNvcHlfcmVzdWx0KTsNCiAJfQ0K IA0KLQlTZXRSZXN1bHRWYXJpYWJsZXMoKnJlc3VsdHMsIHN1Y2Nlc3MpOw0K LQ0KLQkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJvbSBjb25uIGxv c3MgZHVyaW5nIENPUFkgKi8NCi0JaWYgKCFmaXJzdF9jeWNsZSAmJiAhQ2hl Y2tDb25uZWN0aW9uKCkpDQotCQlyZXR1cm4gZmFsc2U7DQorCVJlc2V0Q2Fu Y2VsQ29ubigpOw0KKwlQUWNsZWFyKCpyZXN1bHQpOw0KKwkqcmVzdWx0ID0g Y29weV9yZXN1bHQ7DQogDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCi0N CiAvKg0KICAqIFByaW50UXVlcnlTdGF0dXM6IHJlcG9ydCBjb21tYW5kIHN0 YXR1cyBhcyByZXF1aXJlZA0KICAqDQotICogTm90ZTogVXRpbGl0eSBmdW5j dGlvbiBmb3IgdXNlIGJ5IFByaW50UXVlcnlSZXN1bHRzKCkgb25seS4NCisg KiBOb3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgSGFuZGxlUXVl cnlSZXN1bHQoKSBvbmx5Lg0KICAqLw0KIHN0YXRpYyB2b2lkDQotUHJpbnRR dWVyeVN0YXR1cyhQR3Jlc3VsdCAqcmVzdWx0cykNCitQcmludFF1ZXJ5U3Rh dHVzKFBHcmVzdWx0ICpyZXN1bHRzLCBGSUxFICpwcmludFF1ZXJ5Rm91dCkN CiB7DQogCWNoYXIJCWJ1ZlsxNl07DQorCUZJTEUJICAgKmZvdXQgPSBwcmlu dFF1ZXJ5Rm91dCA/IHByaW50UXVlcnlGb3V0IDogcHNldC5xdWVyeUZvdXQ7 DQogDQogCWlmICghcHNldC5xdWlldCkNCiAJew0KIAkJaWYgKHBzZXQucG9w dC50b3B0LmZvcm1hdCA9PSBQUklOVF9IVE1MKQ0KIAkJew0KLQkJCWZwdXRz KCI8cD4iLCBwc2V0LnF1ZXJ5Rm91dCk7DQotCQkJaHRtbF9lc2NhcGVkX3By aW50KFBRY21kU3RhdHVzKHJlc3VsdHMpLCBwc2V0LnF1ZXJ5Rm91dCk7DQot CQkJZnB1dHMoIjwvcD5cbiIsIHBzZXQucXVlcnlGb3V0KTsNCisJCQlmcHV0 cygiPHA+IiwgZm91dCk7DQorCQkJaHRtbF9lc2NhcGVkX3ByaW50KFBRY21k U3RhdHVzKHJlc3VsdHMpLCBmb3V0KTsNCisJCQlmcHV0cygiPC9wPlxuIiwg Zm91dCk7DQogCQl9DQogCQllbHNlDQotCQkJZnByaW50Zihwc2V0LnF1ZXJ5 Rm91dCwgIiVzXG4iLCBQUWNtZFN0YXR1cyhyZXN1bHRzKSk7DQorCQkJZnBy aW50Zihmb3V0LCAiJXNcbiIsIFBRY21kU3RhdHVzKHJlc3VsdHMpKTsNCiAJ fQ0KIA0KIAlpZiAocHNldC5sb2dmaWxlKQ0KQEAgLTExMDgsNDMgKzk3NSw1 MCBAQCBQcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KIA0K IA0KIC8qDQotICogUHJpbnRRdWVyeVJlc3VsdHM6IHByaW50IG91dCAob3Ig c3RvcmUgb3IgZXhlY3V0ZSkgcXVlcnkgcmVzdWx0cyBhcyByZXF1aXJlZA0K LSAqDQotICogTm90ZTogVXRpbGl0eSBmdW5jdGlvbiBmb3IgdXNlIGJ5IFNl bmRRdWVyeSgpIG9ubHkuDQorICogSGFuZGxlUXVlcnlSZXN1bHQ6IHByaW50 IG91dCwgc3RvcmUgb3IgZXhlY3V0ZSBvbmUgcXVlcnkgcmVzdWx0DQorICog YXMgcmVxdWlyZWQuDQogICoNCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1 ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLg0K ICAqLw0KIHN0YXRpYyBib29sDQotUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1 bHQgKnJlc3VsdHMpDQorSGFuZGxlUXVlcnlSZXN1bHQoUEdyZXN1bHQgKnJl c3VsdCwgYm9vbCBsYXN0LCBib29sIGlzX3dhdGNoLCBjb25zdCBwcmludFF1 ZXJ5T3B0ICpvcHQsIEZJTEUgKnByaW50UXVlcnlGb3V0KQ0KIHsNCiAJYm9v bAkJc3VjY2VzczsNCiAJY29uc3QgY2hhciAqY21kc3RhdHVzOw0KIA0KLQlp ZiAoIXJlc3VsdHMpDQorCWlmIChyZXN1bHQgPT0gTlVMTCkNCiAJCXJldHVy biBmYWxzZTsNCiANCi0Jc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHRz KSkNCisJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQ0KIAl7DQog CQljYXNlIFBHUkVTX1RVUExFU19PSzoNCiAJCQkvKiBzdG9yZSBvciBleGVj dXRlIG9yIHByaW50IHRoZSBkYXRhIC4uLiAqLw0KLQkJCWlmIChwc2V0Lmdz ZXRfcHJlZml4KQ0KLQkJCQlzdWNjZXNzID0gU3RvcmVRdWVyeVR1cGxlKHJl c3VsdHMpOw0KLQkJCWVsc2UgaWYgKHBzZXQuZ2V4ZWNfZmxhZykNCi0JCQkJ c3VjY2VzcyA9IEV4ZWNRdWVyeVR1cGxlcyhyZXN1bHRzKTsNCi0JCQllbHNl IGlmIChwc2V0LmNyb3NzdGFiX2ZsYWcpDQotCQkJCXN1Y2Nlc3MgPSBQcmlu dFJlc3VsdHNJbkNyb3NzdGFiKHJlc3VsdHMpOw0KKwkJCWlmIChsYXN0ICYm IHBzZXQuZ3NldF9wcmVmaXgpDQorCQkJCXN1Y2Nlc3MgPSBTdG9yZVF1ZXJ5 VHVwbGUocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0ICYmIHBzZXQuZ2V4 ZWNfZmxhZykNCisJCQkJc3VjY2VzcyA9IEV4ZWNRdWVyeVR1cGxlcyhyZXN1 bHQpOw0KKwkJCWVsc2UgaWYgKGxhc3QgJiYgcHNldC5jcm9zc3RhYl9mbGFn KQ0KKwkJCQlzdWNjZXNzID0gUHJpbnRSZXN1bHRzSW5Dcm9zc3RhYihyZXN1 bHQpOw0KKwkJCWVsc2UgaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1 bHRzKQ0KKwkJCQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHQs IG9wdCwgcHJpbnRRdWVyeUZvdXQpOw0KIAkJCWVsc2UNCi0JCQkJc3VjY2Vz cyA9IFByaW50UXVlcnlUdXBsZXMocmVzdWx0cyk7DQorCQkJCXN1Y2Nlc3Mg PSB0cnVlOw0KKw0KIAkJCS8qIGlmIGl0J3MgSU5TRVJUL1VQREFURS9ERUxF VEUgUkVUVVJOSU5HLCBhbHNvIHByaW50IHN0YXR1cyAqLw0KLQkJCWNtZHN0 YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdHMpOw0KLQkJCWlmIChzdHJuY21w KGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAgfHwNCi0JCQkJc3RybmNt cChjbWRzdGF0dXMsICJVUERBVEUiLCA2KSA9PSAwIHx8DQotCQkJCXN0cm5j bXAoY21kc3RhdHVzLCAiREVMRVRFIiwgNikgPT0gMCkNCi0JCQkJUHJpbnRR dWVyeVN0YXR1cyhyZXN1bHRzKTsNCisJCQlpZiAobGFzdCB8fCBwc2V0LnNo b3dfYWxsX3Jlc3VsdHMpDQorCQkJew0KKwkJCQljbWRzdGF0dXMgPSBQUWNt ZFN0YXR1cyhyZXN1bHQpOw0KKwkJCQlpZiAoc3RybmNtcChjbWRzdGF0dXMs ICJJTlNFUlQiLCA2KSA9PSAwIHx8DQorCQkJCQlzdHJuY21wKGNtZHN0YXR1 cywgIlVQREFURSIsIDYpID09IDAgfHwNCisJCQkJCXN0cm5jbXAoY21kc3Rh dHVzLCAiREVMRVRFIiwgNikgPT0gMCkNCisJCQkJCVByaW50UXVlcnlTdGF0 dXMocmVzdWx0LCBwcmludFF1ZXJ5Rm91dCk7DQorCQkJfQ0KKw0KIAkJCWJy ZWFrOw0KIA0KIAkJY2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCVByaW50 UXVlcnlTdGF0dXMocmVzdWx0cyk7DQorCQkJaWYgKGxhc3QgfHwgcHNldC5z aG93X2FsbF9yZXN1bHRzKQ0KKwkJCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3Vs dCwgcHJpbnRRdWVyeUZvdXQpOw0KIAkJCXN1Y2Nlc3MgPSB0cnVlOw0KIAkJ CWJyZWFrOw0KIA0KQEAgLTExNTQsNyArMTAyOCw3IEBAIFByaW50UXVlcnlS ZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KIA0KIAkJY2FzZSBQR1JFU19D T1BZX09VVDoNCiAJCWNhc2UgUEdSRVNfQ09QWV9JTjoNCi0JCQkvKiBub3Ro aW5nIHRvIGRvIGhlcmUgKi8NCisJCQkvKiBub3RoaW5nIHRvIGRvIGhlcmU6 IGFscmVhZHkgcHJvY2Vzc2VkICovDQogCQkJc3VjY2VzcyA9IHRydWU7DQog CQkJYnJlYWs7DQogDQpAQCAtMTE2NywxNSArMTA0MSwyMzIgQEAgUHJpbnRR dWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogCQlkZWZhdWx0Og0K IAkJCXN1Y2Nlc3MgPSBmYWxzZTsNCiAJCQlwZ19sb2dfZXJyb3IoInVuZXhw ZWN0ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwNCi0JCQkJCQkgUFFyZXN1bHRT dGF0dXMocmVzdWx0cykpOw0KKwkJCQkJCSBQUXJlc3VsdFN0YXR1cyhyZXN1 bHQpKTsNCiAJCQlicmVhazsNCiAJfQ0KIA0KLQlmZmx1c2gocHNldC5xdWVy eUZvdXQpOw0KKwlmZmx1c2gocHJpbnRRdWVyeUZvdXQgPyBwcmludFF1ZXJ5 Rm91dCA6IHBzZXQucXVlcnlGb3V0KTsNCiANCiAJcmV0dXJuIHN1Y2Nlc3M7 DQogfQ0KIA0KKy8qDQorICogRGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9u cyB0byByZWNvcmQgbm90aWNlcyB3aGlsZSB0aGV5IGFyZQ0KKyAqIGVtaXR0 ZWQsIHNvIHRoYXQgdGhleSBjYW4gYmUgc2hvd24gbGF0ZXIuDQorICoNCisg KiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggcmVzdWx0IGlzIGxhc3QsIHdoaWNo IHJlcXVpcmVzIHRvIGV4dHJhY3QNCisgKiBvbmUgcmVzdWx0IGluIGFkdmFu Y2UsIGhlbmNlIHR3byBidWZmZXJzIGFyZSBuZWVkZWQuDQorICovDQordHlw ZWRlZiBzdHJ1Y3Qgew0KKwlQUUV4cEJ1ZmZlckRhdGEJbWVzc2FnZXNbMl07 DQorCWludAkJCQljdXJyZW50Ow0KK30gdF9ub3RpY2VfbWVzc2FnZXM7DQor DQorLyoNCisgKiBTdG9yZSBub3RpY2VzIGluIGFwcHJvcHJpYXRlIGJ1ZmZl ciwgZm9yIGxhdGVyIGRpc3BsYXkuDQorICovDQorc3RhdGljIHZvaWQNCitB cHBlbmROb3RpY2VNZXNzYWdlKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbXNn KQ0KK3sNCisJdF9ub3RpY2VfbWVzc2FnZXMgKm5vdGVzID0gKHRfbm90aWNl X21lc3NhZ2VzKikgYXJnOw0KKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmbm90 ZXMtPm1lc3NhZ2VzW25vdGVzLT5jdXJyZW50XSwgbXNnKTsNCit9DQorDQor LyoNCisgKiBTaG93IG5vdGljZXMgc3RvcmVkIGluIGJ1ZmZlciwgd2hpY2gg aXMgdGhlbiByZXNldC4NCisgKi8NCitzdGF0aWMgdm9pZA0KK1Nob3dOb3Rp Y2VNZXNzYWdlKHRfbm90aWNlX21lc3NhZ2VzICpub3RlcykNCit7DQorCVBR RXhwQnVmZmVyRGF0YQkqY3VycmVudCA9ICZub3Rlcy0+bWVzc2FnZXNbbm90 ZXMtPmN1cnJlbnRdOw0KKwlpZiAoKmN1cnJlbnQtPmRhdGEgIT0gJ1wwJykN CisJCXBnX2xvZ19pbmZvKCIlcyIsIGN1cnJlbnQtPmRhdGEpOw0KKwlyZXNl dFBRRXhwQnVmZmVyKGN1cnJlbnQpOw0KK30NCisNCisvKg0KKyAqIFNlbmRR dWVyeUFuZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1 c2UgYnkgU2VuZFF1ZXJ5KCkNCisgKiBhbmQgUFNRTGV4ZWNXYXRjaCgpLg0K KyAqDQorICogU2VuZHMgcXVlcnkgYW5kIGN5Y2xlcyB0aHJvdWdoIFBHcmVz dWx0IG9iamVjdHMuDQorICoNCisgKiBXaGVuIG5vdCB1bmRlciBcd2F0Y2gg YW5kIGlmIG91ciBjb21tYW5kIHN0cmluZyBjb250YWluZWQgYSBDT1BZIEZS T00gU1RESU4NCisgKiBvciBDT1BZIFRPIFNURE9VVCwgdGhlIFBHcmVzdWx0 IGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBjb21tYW5kcyBtdXN0IGJlDQorICog cHJvY2Vzc2VkIGJ5IHByb3ZpZGluZyBhbiBpbnB1dCBvciBvdXRwdXQgc3Ry ZWFtLiAgSW4gdGhhdCBldmVudCwgd2UnbGwNCisgKiBtYXJzaGFsIGRhdGEg Zm9yIHRoZSBDT1BZLg0KKyAqDQorICogRm9yIG90aGVyIGNvbW1hbmRzLCB0 aGUgcmVzdWx0cyBhcmUgcHJvY2Vzc2VkIG5vcm1hbGx5LCBkZXBlbmRpbmcg b24gdGhlaXINCisgKiBzdGF0dXMuDQorICoNCisgKiBSZXR1cm5zIDEgb24g Y29tcGxldGUgc3VjY2VzcywgMCBvbiBpbnRlcnJ1cHQgYW5kIC0xIG9yIGVy cm9ycy4gIFBvc3NpYmxlDQorICogZmFpbHVyZSBtb2RlcyBpbmNsdWRlIHB1 cmVseSBjbGllbnQtc2lkZSBwcm9ibGVtczsgY2hlY2sgdGhlIHRyYW5zYWN0 aW9uDQorICogc3RhdHVzIGZvciB0aGUgc2VydmVyLXNpZGUgb3Bpbmlvbi4N CisgKg0KKyAqIE5vdGUgdGhhdCBvbiBhIGNvbWJpbmVkIHF1ZXJ5LCBmYWls dXJlIGRvZXMgbm90IG1lYW4gdGhhdCBub3RoaW5nIHdhcw0KKyAqIGNvbW1p dHRlZC4NCisgKi8NCitzdGF0aWMgaW50DQorU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywNCisJYm9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdCAq b3B0LCBGSUxFICpwcmludFF1ZXJ5Rm91dCkNCit7DQorCWJvb2wJCQkJc3Vj Y2VzczsNCisJaW5zdHJfdGltZQkJCWJlZm9yZTsNCisJUEdyZXN1bHQJCSAg ICpyZXN1bHQ7DQorCXRfbm90aWNlX21lc3NhZ2VzCW5vdGVzOw0KKw0KKwlp ZiAocHNldC50aW1pbmcpDQorCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJl Zm9yZSk7DQorDQorCXN1Y2Nlc3MgPSBQUXNlbmRRdWVyeShwc2V0LmRiLCBx dWVyeSk7DQorDQorCWlmICghc3VjY2VzcykNCisJew0KKwkJY29uc3QgY2hh ciAqZXJyb3IgPSBQUWVycm9yTWVzc2FnZShwc2V0LmRiKTsNCisNCisJCWlm IChzdHJsZW4oZXJyb3IpKQ0KKwkJCXBnX2xvZ19pbmZvKCIlcyIsIGVycm9y KTsNCisNCisJCUNoZWNrQ29ubmVjdGlvbigpOw0KKw0KKwkJcmV0dXJuIC0x Ow0KKwl9DQorDQorCS8qDQorCSAqIElmIFNJR0lOVCBpcyBzZW50IHdoaWxl IHRoZSBxdWVyeSBpcyBwcm9jZXNzaW5nLCB0aGUgaW50ZXJydXB0IHdpbGwg YmUNCisJICogY29uc3VtZWQuICBUaGUgdXNlcidzIGludGVudGlvbiwgdGhv dWdoLCBpcyB0byBjYW5jZWwgdGhlIGVudGlyZSB3YXRjaA0KKwkgKiBwcm9j ZXNzLCBzbyBkZXRlY3QgYSBzZW50IGNhbmNlbGxhdGlvbiByZXF1ZXN0IGFu ZCBleGl0IGluIHRoaXMgY2FzZS4NCisJICovDQorCWlmIChpc193YXRjaCAm JiBjYW5jZWxfcHJlc3NlZCkNCisJew0KKwkJQ2xlYXJPclNhdmVBbGxSZXN1 bHRzKCk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwkvKiBpbnRlcmNlcHQg bm90aWNlcyAqLw0KKwlub3Rlcy5jdXJyZW50ID0gMDsNCisJaW5pdFBRRXhw QnVmZmVyKCZub3Rlcy5tZXNzYWdlc1swXSk7DQorCWluaXRQUUV4cEJ1ZmZl cigmbm90ZXMubWVzc2FnZXNbMV0pOw0KKwlQUXNldE5vdGljZVByb2Nlc3Nv cihwc2V0LmRiLCBBcHBlbmROb3RpY2VNZXNzYWdlLCAmbm90ZXMpOw0KKw0K KwkvKiBmaXJzdCByZXN1bHQgKi8NCisJcmVzdWx0ID0gUFFnZXRSZXN1bHQo cHNldC5kYik7DQorDQorCXdoaWxlIChyZXN1bHQgIT0gTlVMTCkNCisJew0K KwkJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1czsNCisJCVBHcmVzdWx0 ICAgKm5leHRfcmVzdWx0Ow0KKwkJYm9vbAkJbGFzdDsNCisNCisJCWlmICgh QWNjZXB0UmVzdWx0KHJlc3VsdCwgZmFsc2UpKQ0KKwkJew0KKwkJCS8qDQor CQkJICogU29tZSBlcnJvciBvY2N1cmVkLCBlaXRoZXIgYSBzZXJ2ZXItc2lk ZSBmYWlsdXJlIG9yDQorCQkJICogYSBmYWlsdXJlIHRvIHN1Ym1pdCB0aGUg Y29tbWFuZCBzdHJpbmcuICBSZWNvcmQgdGhhdC4NCisJCQkgKi8NCisJCQlj b25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpOw0K Kw0KKwkJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rlcyk7DQorCQkJaWYgKHN0 cmxlbihlcnJvcikpDQorCQkJCXBnX2xvZ19pbmZvKCIlcyIsIGVycm9yKTsN CisJCQlDaGVja0Nvbm5lY3Rpb24oKTsNCisJCQlpZiAoIWlzX3dhdGNoKQ0K KwkJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0LCBmYWxzZSk7DQorCQkJ Q2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisJCQlzdWNjZXNzID0gZmFs c2U7DQorDQorCQkJLyogYW5kIHN3aXRjaCB0byBuZXh0IHJlc3VsdCAqLw0K KwkJCXJlc3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOw0KKwkJCWNvbnRp bnVlOw0KKwkJfQ0KKw0KKwkJcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCk7DQorDQorCQkvKiBtdXN0IGhhbmRsZSBDT1BZIGJlZm9y ZSBjaGFuZ2luZyB0aGUgY3VycmVudCByZXN1bHQgKi8NCisJCUFzc2VydChy ZXN1bHRfc3RhdHVzICE9IFBHUkVTX0NPUFlfQk9USCk7DQorCQlpZiAocmVz dWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX0lOIHx8DQorCQkJcmVzdWx0X3N0 YXR1cyA9PSBQR1JFU19DT1BZX09VVCkNCisJCXsNCisJCQlTaG93Tm90aWNl TWVzc2FnZSgmbm90ZXMpOw0KKw0KKwkJCWlmIChpc193YXRjaCkNCisJCQl7 DQorCQkJCUNsZWFyT3JTYXZlQWxsUmVzdWx0cygpOw0KKwkJCQlwZ19sb2df ZXJyb3IoIlxcd2F0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIik7DQor CQkJCXJldHVybiAtMTsNCisJCQl9DQorDQorCQkJLyogdXNlIG5vcm1hbCBu b3RpY2UgcHJvY2Vzc29yIGR1cmluZyBDT1BZICovDQorCQkJUFFzZXROb3Rp Y2VQcm9jZXNzb3IocHNldC5kYiwgTm90aWNlUHJvY2Vzc29yLCBOVUxMKTsN CisNCisJCQlzdWNjZXNzICY9IEhhbmRsZUNvcHlSZXN1bHQoJnJlc3VsdCk7 DQorDQorCQkJUFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5kYiwgQXBwZW5k Tm90aWNlTWVzc2FnZSwgJm5vdGVzKTsNCisJCX0NCisNCisJCS8qDQorCQkg KiBDaGVjayBQUWdldFJlc3VsdCgpIGFnYWluLiAgSW4gdGhlIHR5cGljYWwg Y2FzZSBvZiBhIHNpbmdsZS1jb21tYW5kDQorCQkgKiBzdHJpbmcsIGl0IHdp bGwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgb3RoZXIg cmVzdWx0cw0KKwkJICogdG8gcHJvY2Vzcy4gV2UgbmVlZCB0byBkbyB0aGF0 IHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdC4NCisJCSAqLw0K KwkJbm90ZXMuY3VycmVudCBePSAxOw0KKwkJbmV4dF9yZXN1bHQgPSBQUWdl dFJlc3VsdChwc2V0LmRiKTsNCisJCW5vdGVzLmN1cnJlbnQgXj0gMTsNCisJ CWxhc3QgPSAobmV4dF9yZXN1bHQgPT0gTlVMTCk7DQorDQorCQkvKg0KKwkJ ICogR2V0IHRpbWluZyBtZWFzdXJlIGJlZm9yZSBwcmludGluZyB0aGUgbGFz dCByZXN1bHQuDQorCQkgKg0KKwkJICogSXQgd2lsbCBpbmNsdWRlIHRoZSBk aXNwbGF5IG9mIHByZXZpb3VzIHJlc3VsdHMsIGlmIGFueS4NCisJCSAqIFRo aXMgY2Fubm90IGJlIGhlbHBlZCBiZWNhdXNlIHRoZSBzZXJ2ZXIgZ29lcyBv biBwcm9jZXNzaW5nDQorCQkgKiBmdXJ0aGVyIHF1ZXJpZXMgYW55d2F5IHdo aWxlIHRoZSBwcmV2aW91cyBvbmVzIGFyZSBiZWluZyBkaXNwbGF5ZWQuDQor CQkgKiBUaGUgcGFyYWxsZWwgZXhlY3V0aW9uIG9mIHRoZSBjbGllbnQgZGlz cGxheSBoaWRlcyB0aGUgc2VydmVyIHRpbWUNCisJCSAqIHdoZW4gaXQgaXMg c2hvcnRlci4NCisJCSAqDQorCQkgKiBXaXRoIGNvbWJpbmVkIHF1ZXJpZXMs IHRpbWluZyBtdXN0IGJlIHVuZGVyc3Rvb2QgYXMgYW4gdXBwZXIgYm91bmQN CisJCSAqIG9mIHRoZSB0aW1lIHNwZW50IHByb2Nlc3NpbmcgdGhlbS4NCisJ CSAqLw0KKwkJaWYgKGxhc3QgJiYgcHNldC50aW1pbmcpDQorCQl7DQorCQkJ aW5zdHJfdGltZQlub3c7DQorCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChu b3cpOw0KKwkJCUlOU1RSX1RJTUVfU1VCVFJBQ1Qobm93LCBiZWZvcmUpOw0K KwkJCSpwZWxhcHNlZF9tc2VjID0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMo bm93KTsNCisJCX0NCisNCisJCS8qIG5vdGljZXMgYWxyZWFkeSBzaG93biBh Ym92ZSBmb3IgY29weSAqLw0KKwkJU2hvd05vdGljZU1lc3NhZ2UoJm5vdGVz KTsNCisNCisJCS8qIHRoaXMgbWF5IG9yIG1heSBub3QgcHJpbnQgc29tZXRo aW5nIGRlcGVuZGluZyBvbiBzZXR0aW5ncyAqLw0KKwkJaWYgKHJlc3VsdCAh PSBOVUxMKQ0KKwkJCXN1Y2Nlc3MgJj0gSGFuZGxlUXVlcnlSZXN1bHQocmVz dWx0LCBsYXN0LCBmYWxzZSwgb3B0LCBwcmludFF1ZXJ5Rm91dCk7DQorDQor CQkvKiBzZXQgdmFyaWFibGVzIG9uIGxhc3QgcmVzdWx0IGlmIGFsbCB3ZW50 IHdlbGwgKi8NCisJCWlmICghaXNfd2F0Y2ggJiYgbGFzdCAmJiBzdWNjZXNz KQ0KKwkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIHRydWUpOw0KKw0K KwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisJCW5vdGVzLmN1cnJl bnQgXj0gMTsNCisJCXJlc3VsdCA9IG5leHRfcmVzdWx0Ow0KKw0KKwkJaWYg KGNhbmNlbF9wcmVzc2VkKQ0KKwkJew0KKwkJCUNsZWFyT3JTYXZlQWxsUmVz dWx0cygpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorDQorCS8qIHJlc2V0 IG5vdGljZSBob29rICovDQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQu ZGIsIE5vdGljZVByb2Nlc3NvciwgTlVMTCk7DQorCXRlcm1QUUV4cEJ1ZmZl cigmbm90ZXMubWVzc2FnZXNbMF0pOw0KKwl0ZXJtUFFFeHBCdWZmZXIoJm5v dGVzLm1lc3NhZ2VzWzFdKTsNCisNCisJLyogbWF5IG5lZWQgdGhpcyB0byBy ZWNvdmVyIGZyb20gY29ubiBsb3NzIGR1cmluZyBDT1BZICovDQorCWlmICgh Q2hlY2tDb25uZWN0aW9uKCkpDQorCQlyZXR1cm4gLTE7DQorDQorCXJldHVy biBjYW5jZWxfcHJlc3NlZCA/IDAgOiBzdWNjZXNzID8gMSA6IC0xOw0KK30N CisNCiANCiAvKg0KICAqIFNlbmRRdWVyeTogc2VuZCB0aGUgcXVlcnkgc3Ry aW5nIHRvIHRoZSBiYWNrZW5kDQpAQCAtMTE5MiwxMCArMTI4MywxMSBAQCBQ cmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiBib29sDQog U2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIHsNCi0JUEdyZXN1bHQg ICAqcmVzdWx0czsNCisJUEdyZXN1bHQgICAqcmVzdWx0cyA9IE5VTEw7DQog CVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHRyYW5zYWN0aW9uX3N0YXR1czsN CiAJZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KIAlib29sCQlPSyA9IGZh bHNlOw0KKwlib29sCQlyZXNfZXJyb3I7DQogCWludAkJCWk7DQogCWJvb2wJ CW9uX2Vycm9yX3JvbGxiYWNrX3NhdmVwb2ludCA9IGZhbHNlOw0KIAlzdGF0 aWMgYm9vbCBvbl9lcnJvcl9yb2xsYmFja193YXJuaW5nID0gZmFsc2U7DQpA QCAtMTIzNywyNiArMTMyOSwzMiBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAq cXVlcnkpDQogCQlmZmx1c2gocHNldC5sb2dmaWxlKTsNCiAJfQ0KIA0KKwkv KiBnbG9iYWwgcXVlcnkgY2FuY2VsbGF0aW9uIGZvciB0aGlzIHF1ZXJ5ICov DQogCVNldENhbmNlbENvbm4ocHNldC5kYik7DQogDQogCXRyYW5zYWN0aW9u X3N0YXR1cyA9IFBRdHJhbnNhY3Rpb25TdGF0dXMocHNldC5kYik7DQogDQor CS8qIGlzc3VlIGEgQkVHSU4gaWYgbmVlZGVkLCBjb3JyZXNwb25kaW5nIENP TU1JVC9ST0xMQkFDSyBieSB1c2VyICovDQogCWlmICh0cmFuc2FjdGlvbl9z dGF0dXMgPT0gUFFUUkFOU19JRExFICYmDQogCQkhcHNldC5hdXRvY29tbWl0 ICYmDQogCQkhY29tbWFuZF9ub19iZWdpbihxdWVyeSkpDQogCXsNCi0JCXJl c3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgIkJFR0lOIik7DQotCQlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykgIT0gUEdSRVNfQ09NTUFORF9PSykNCisJ CVBHcmVzdWx0ICAgICpyZXN1bHQ7DQorCQlyZXN1bHQgPSBQUWV4ZWMocHNl dC5kYiwgIkJFR0lOIik7DQorCQlyZXNfZXJyb3IgPSBQUXJlc3VsdFN0YXR1 cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0s7DQorCQlDbGVhck9yU2F2 ZVJlc3VsdChyZXN1bHQpOw0KKw0KKwkJaWYgKHJlc19lcnJvcikNCiAJCXsN CiAJCQlwZ19sb2dfaW5mbygiJXMiLCBQUWVycm9yTWVzc2FnZShwc2V0LmRi KSk7DQotCQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQotCQkJUmVz ZXRDYW5jZWxDb25uKCk7DQogCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsN CiAJCX0NCi0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KKw0KKwkJ LyogbXVzdCBiZSBQUVRSQU5TX0lOVFJBTlMgYWZ0ZXIgYSBCRUdJTiAqLw0K IAkJdHJhbnNhY3Rpb25fc3RhdHVzID0gUFF0cmFuc2FjdGlvblN0YXR1cyhw c2V0LmRiKTsNCiAJfQ0KIA0KKwkvKiBjcmVhdGUgYXV0b21hdGljIHNhdmVw b2ludCBpZiBuZWVkZWQgYW5kIHBvc3NpYmxlICovDQogCWlmICh0cmFuc2Fj dGlvbl9zdGF0dXMgPT0gUFFUUkFOU19JTlRSQU5TICYmDQogCQlwc2V0Lm9u X2Vycm9yX3JvbGxiYWNrICE9IFBTUUxfRVJST1JfUk9MTEJBQ0tfT0ZGICYm DQogCQkocHNldC5jdXJfY21kX2ludGVyYWN0aXZlIHx8DQpAQCAtMTI3Myw1 OCArMTM3MSw0MCBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQog CQl9DQogCQllbHNlDQogCQl7DQotCQkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0 LmRiLCAiU0FWRVBPSU5UIHBnX3BzcWxfdGVtcG9yYXJ5X3NhdmVwb2ludCIp Ow0KLQkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSAhPSBQR1JFU19D T01NQU5EX09LKQ0KKwkJCVBHcmVzdWx0ICAgKnJlc3VsdDsNCisJCQlyZXN1 bHQgPSBQUWV4ZWMocHNldC5kYiwgIlNBVkVQT0lOVCBwZ19wc3FsX3RlbXBv cmFyeV9zYXZlcG9pbnQiKTsNCisJCQlyZXNfZXJyb3IgPSBQUXJlc3VsdFN0 YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0s7DQorCQkJQ2xlYXJP clNhdmVSZXN1bHQocmVzdWx0KTsNCisNCisJCQlpZiAocmVzX2Vycm9yKQ0K IAkJCXsNCiAJCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJvck1lc3NhZ2Uo cHNldC5kYikpOw0KLQkJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsN Ci0JCQkJUmVzZXRDYW5jZWxDb25uKCk7DQogCQkJCWdvdG8gc2VuZHF1ZXJ5 X2NsZWFudXA7DQogCQkJfQ0KLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3Vs dHMpOw0KKw0KIAkJCW9uX2Vycm9yX3JvbGxiYWNrX3NhdmVwb2ludCA9IHRy dWU7DQogCQl9DQogCX0NCiANCisJLyogcHJvY2VzcyB0aGUgcXVlcnksIG9u ZSB3YXkgb3IgdGhlIG90aGVyICovDQogCWlmIChwc2V0LmdkZXNjX2ZsYWcp DQogCXsNCiAJCS8qIERlc2NyaWJlIHF1ZXJ5J3MgcmVzdWx0IGNvbHVtbnMs IHdpdGhvdXQgZXhlY3V0aW5nIGl0ICovDQogCQlPSyA9IERlc2NyaWJlUXVl cnkocXVlcnksICZlbGFwc2VkX21zZWMpOw0KLQkJUmVzZXRDYW5jZWxDb25u KCk7DQogCQlyZXN1bHRzID0gTlVMTDsJCQkvKiBQUWNsZWFyKE5VTEwpIGRv ZXMgbm90aGluZyAqLw0KIAl9DQogCWVsc2UgaWYgKHBzZXQuZmV0Y2hfY291 bnQgPD0gMCB8fCBwc2V0LmdleGVjX2ZsYWcgfHwNCiAJCQkgcHNldC5jcm9z c3RhYl9mbGFnIHx8ICFpc19zZWxlY3RfY29tbWFuZChxdWVyeSkpDQogCXsN CiAJCS8qIERlZmF1bHQgZmV0Y2gtaXQtYWxsLWFuZC1wcmludCBtb2RlICov DQotCQlpbnN0cl90aW1lCWJlZm9yZSwNCi0JCQkJCWFmdGVyOw0KLQ0KLQkJ aWYgKHBzZXQudGltaW5nKQ0KLQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQo YmVmb3JlKTsNCi0NCi0JCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgcXVl cnkpOw0KLQ0KLQkJLyogdGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWQg aW4gdGhlIHRpbWluZyByZXN1bHQ6ICovDQotCQlSZXNldENhbmNlbENvbm4o KTsNCi0JCU9LID0gUHJvY2Vzc1Jlc3VsdCgmcmVzdWx0cyk7DQotDQotCQlp ZiAocHNldC50aW1pbmcpDQotCQl7DQotCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChhZnRlcik7DQotCQkJSU5TVFJfVElNRV9TVUJUUkFDVChhZnRlciwg YmVmb3JlKTsNCi0JCQllbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9N SUxMSVNFQyhhZnRlcik7DQotCQl9DQotDQotCQkvKiBidXQgcHJpbnRpbmcg cmVzdWx0cyBpc24ndDogKi8NCi0JCWlmIChPSyAmJiByZXN1bHRzKQ0KLQkJ CU9LID0gUHJpbnRRdWVyeVJlc3VsdHMocmVzdWx0cyk7DQorCQlpbnQgcmVz ID0gU2VuZFF1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMocXVlcnksICZlbGFwc2Vk X21zZWMsIGZhbHNlLCBOVUxMLCBOVUxMKTsNCisJCU9LID0gKHJlcyA+PSAw KTsNCisJCS8qIGRvIE5PVCBvdmVyd3JpdGUgcmVzdWx0cyBoZXJlLCBmb3Ig b25fZXJyb3Jfcm9sbGJhY2tfc2F2ZXBvaW50ICovDQogCX0NCiAJZWxzZQ0K IAl7DQogCQkvKiBGZXRjaC1pbi1zZWdtZW50cyBtb2RlICovDQogCQlPSyA9 IEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKHF1ZXJ5LCAmZWxhcHNlZF9tc2VjKTsN Ci0JCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0cyA9IE5VTEw7CQkJ LyogUFFjbGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8NCiAJfQ0KIA0KQEAg LTEzODMsMTQgKzE0NjMsMTUgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1 ZXJ5KQ0KIAkJCVBHcmVzdWx0ICAgKnN2cHRyZXM7DQogDQogCQkJc3ZwdHJl cyA9IFBRZXhlYyhwc2V0LmRiLCBzdnB0Y21kKTsNCi0JCQlpZiAoUFFyZXN1 bHRTdGF0dXMoc3ZwdHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykNCisJCQly ZXNfZXJyb3IgPSBQUXJlc3VsdFN0YXR1cyhzdnB0cmVzKSAhPSBQR1JFU19D T01NQU5EX09LOw0KKw0KKwkJCWlmIChyZXNfZXJyb3IpDQogCQkJew0KIAkJ CQlwZ19sb2dfaW5mbygiJXMiLCBQUWVycm9yTWVzc2FnZShwc2V0LmRiKSk7 DQogCQkJCUNsZWFyT3JTYXZlUmVzdWx0KHN2cHRyZXMpOw0KIAkJCQlPSyA9 IGZhbHNlOw0KIA0KIAkJCQlQUWNsZWFyKHJlc3VsdHMpOw0KLQkJCQlSZXNl dENhbmNlbENvbm4oKTsNCiAJCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsN CiAJCQl9DQogCQkJUFFjbGVhcihzdnB0cmVzKTsNCkBAIC0xNDIxLDYgKzE1 MDIsOSBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogDQogc2Vu ZHF1ZXJ5X2NsZWFudXA6DQogDQorCS8qIGdsb2JhbCBjYW5jZWxsYXRpb24g cmVzZXQgKi8NCisJUmVzZXRDYW5jZWxDb25uKCk7DQorDQogCS8qIHJlc2V0 IFxnJ3Mgb3V0cHV0LXRvLWZpbGVuYW1lIHRyaWdnZXIgKi8NCiAJaWYgKHBz ZXQuZ2ZuYW1lKQ0KIAl7DQpAQCAtMTUwMCw3ICsxNTg0LDcgQEAgRGVzY3Jp YmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21z ZWMpDQogCVBRY2xlYXIocmVzdWx0cyk7DQogDQogCXJlc3VsdHMgPSBQUWRl c2NyaWJlUHJlcGFyZWQocHNldC5kYiwgIiIpOw0KLQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzKSAmJg0KKwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRz LCB0cnVlKSAmJg0KIAkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBH UkVTX0NPTU1BTkRfT0spOw0KIAlpZiAoT0sgJiYgcmVzdWx0cykNCiAJew0K QEAgLTE1NDgsNyArMTYzMiw3IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hh ciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJCVBRY2xlYXIo cmVzdWx0cyk7DQogDQogCQkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBi dWYuZGF0YSk7DQotCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cyk7DQor CQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSk7DQogDQogCQkJ aWYgKHBzZXQudGltaW5nKQ0KIAkJCXsNCkBAIC0xNTU4LDcgKzE2NDIsNyBA QCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVs YXBzZWRfbXNlYykNCiAJCQl9DQogDQogCQkJaWYgKE9LICYmIHJlc3VsdHMp DQotCQkJCU9LID0gUHJpbnRRdWVyeVJlc3VsdHMocmVzdWx0cyk7DQorCQkJ CU9LID0gSGFuZGxlUXVlcnlSZXN1bHQocmVzdWx0cywgdHJ1ZSwgZmFsc2Us IE5VTEwsIE5VTEwpOw0KIA0KIAkJCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsN CiAJCX0NCkBAIC0xNjE3LDcgKzE3MDEsNyBAQCBFeGVjUXVlcnlVc2luZ0N1 cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMp DQogCWlmIChQUXRyYW5zYWN0aW9uU3RhdHVzKHBzZXQuZGIpID09IFBRVFJB TlNfSURMRSkNCiAJew0KIAkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAi QkVHSU4iKTsNCi0JCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQor CQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQ UXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsN CiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAkJaWYgKCFPSykN CkBAIC0xNjMxLDcgKzE3MTUsNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihj b25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJ CQkgIHF1ZXJ5KTsNCiANCiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBi dWYuZGF0YSk7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQor CU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkoUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQog CWlmICghT0spDQogCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0cywgT0sp Ow0KQEAgLTE3MDQsNyArMTc4OCw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29y KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJ CQkJaXNfcGFnZXIgPSBmYWxzZTsNCiAJCQl9DQogDQotCQkJT0sgPSBBY2Nl cHRSZXN1bHQocmVzdWx0cyk7DQorCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVz dWx0cywgdHJ1ZSk7DQogCQkJQXNzZXJ0KCFPSyk7DQogCQkJU2V0UmVzdWx0 VmFyaWFibGVzKHJlc3VsdHMsIE9LKTsNCiAJCQlDbGVhck9yU2F2ZVJlc3Vs dChyZXN1bHRzKTsNCkBAIC0xODEzLDcgKzE4OTcsNyBAQCBjbGVhbnVwOg0K IAlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJDTE9TRSBfcHNxbF9jdXJz b3IiKTsNCiAJaWYgKE9LKQ0KIAl7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChy ZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1 ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNf Q09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsN CiAJfQ0KQEAgLTE4MjMsNyArMTkwNyw3IEBAIGNsZWFudXA6DQogCWlmIChz dGFydGVkX3R4bikNCiAJew0KIAkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRi LCBPSyA/ICJDT01NSVQiIDogIlJPTExCQUNLIik7DQotCQlPSyAmPSBBY2Nl cHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LICY9IEFjY2VwdFJlc3VsdChy ZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRz KSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0 KHJlc3VsdHMpOw0KIAl9DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2hl bHAuYyBiL3NyYy9iaW4vcHNxbC9oZWxwLmMNCmluZGV4IGQzZmRhNjdlZGQu LjQ2YjRhMzNhNWIgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvaGVscC5j DQorKysgYi9zcmMvYmluL3BzcWwvaGVscC5jDQpAQCAtNDEyLDYgKzQxMiw4 IEBAIGhlbHBWYXJpYWJsZXModW5zaWduZWQgc2hvcnQgaW50IHBhZ2VyKQ0K IAlmcHJpbnRmKG91dHB1dCwgXygiICBTRVJWRVJfVkVSU0lPTl9OQU1FXG4i DQogCQkJCQkgICIgIFNFUlZFUl9WRVJTSU9OX05VTVxuIg0KIAkJCQkJICAi ICAgIHNlcnZlcidzIHZlcnNpb24gKGluIHNob3J0IHN0cmluZyBvciBudW1l cmljIGZvcm1hdClcbiIpKTsNCisJZnByaW50ZihvdXRwdXQsIF8oIiAgU0hP V19BTExfUkVTVUxUU1xuIg0KKwkJCQkJICAiICAgIHNob3cgYWxsIHJlc3Vs dHMgb2YgYSBjb21iaW5lZCBxdWVyeSAoXFw7KSBpbnN0ZWFkIG9mIG9ubHkg dGhlIGxhc3RcbiIpKTsNCiAJZnByaW50ZihvdXRwdXQsIF8oIiAgU0hPV19D T05URVhUXG4iDQogCQkJCQkgICIgICAgY29udHJvbHMgZGlzcGxheSBvZiBt ZXNzYWdlIGNvbnRleHQgZmllbGRzIFtuZXZlciwgZXJyb3JzLCBhbHdheXNd XG4iKSk7DQogCWZwcmludGYob3V0cHV0LCBfKCIgIFNJTkdMRUxJTkVcbiIN CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaCBiL3NyYy9i aW4vcHNxbC9zZXR0aW5ncy5oDQppbmRleCA4M2YyZTZmMjU0Li42MjU4M2Fk NmNhIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgNCisr KyBiL3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oDQpAQCAtMTQ4LDYgKzE0OCw3 IEBAIHR5cGVkZWYgc3RydWN0IF9wc3FsU2V0dGluZ3MNCiAJY29uc3QgY2hh ciAqcHJvbXB0MjsNCiAJY29uc3QgY2hhciAqcHJvbXB0MzsNCiAJUEdWZXJi b3NpdHkgdmVyYm9zaXR5OwkJLyogY3VycmVudCBlcnJvciB2ZXJib3NpdHkg bGV2ZWwgKi8NCisJYm9vbAkJc2hvd19hbGxfcmVzdWx0czsNCiAJUEdDb250 ZXh0VmlzaWJpbGl0eSBzaG93X2NvbnRleHQ7CS8qIGN1cnJlbnQgY29udGV4 dCBkaXNwbGF5IGxldmVsICovDQogfSBQc3FsU2V0dGluZ3M7DQogDQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3N0YXJ0dXAuYyBiL3NyYy9iaW4vcHNx bC9zdGFydHVwLmMNCmluZGV4IDI5MzE1MzBmMzMuLjBhZmQ5N2NmOGYgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvc3RhcnR1cC5jDQorKysgYi9zcmMv YmluL3BzcWwvc3RhcnR1cC5jDQpAQCAtMjAzLDYgKzIwMyw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAJU2V0VmFyaWFibGUocHNldC52 YXJzLCAiUFJPTVBUMSIsIERFRkFVTFRfUFJPTVBUMSk7DQogCVNldFZhcmlh YmxlKHBzZXQudmFycywgIlBST01QVDIiLCBERUZBVUxUX1BST01QVDIpOw0K IAlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQUk9NUFQzIiwgREVGQVVMVF9Q Uk9NUFQzKTsNCisJU2V0VmFyaWFibGVCb29sKHBzZXQudmFycywgIlNIT1df QUxMX1JFU1VMVFMiKTsNCiANCiAJcGFyc2VfcHNxbF9vcHRpb25zKGFyZ2Ms IGFyZ3YsICZvcHRpb25zKTsNCiANCkBAIC0xMTQ5LDYgKzExNTAsMTIgQEAg dmVyYm9zaXR5X2hvb2soY29uc3QgY2hhciAqbmV3dmFsKQ0KIAlyZXR1cm4g dHJ1ZTsNCiB9DQogDQorc3RhdGljIGJvb2wNCitzaG93X2FsbF9yZXN1bHRz X2hvb2soY29uc3QgY2hhciAqbmV3dmFsKQ0KK3sNCisJcmV0dXJuIFBhcnNl VmFyaWFibGVCb29sKG5ld3ZhbCwgIlNIT1dfQUxMX1JFU1VMVFMiLCAmcHNl dC5zaG93X2FsbF9yZXN1bHRzKTsNCit9DQorDQogc3RhdGljIGNoYXIgKg0K IHNob3dfY29udGV4dF9zdWJzdGl0dXRlX2hvb2soY2hhciAqbmV3dmFsKQ0K IHsNCkBAIC0xMjUwLDYgKzEyNTcsOSBAQCBFc3RhYmxpc2hWYXJpYWJsZVNw YWNlKHZvaWQpDQogCVNldFZhcmlhYmxlSG9va3MocHNldC52YXJzLCAiVkVS Qk9TSVRZIiwNCiAJCQkJCSB2ZXJib3NpdHlfc3Vic3RpdHV0ZV9ob29rLA0K IAkJCQkJIHZlcmJvc2l0eV9ob29rKTsNCisJU2V0VmFyaWFibGVIb29rcyhw c2V0LnZhcnMsICJTSE9XX0FMTF9SRVNVTFRTIiwNCisJCQkJCSBib29sX3N1 YnN0aXR1dGVfaG9vaywNCisJCQkJCSBzaG93X2FsbF9yZXN1bHRzX2hvb2sp Ow0KIAlTZXRWYXJpYWJsZUhvb2tzKHBzZXQudmFycywgIlNIT1dfQ09OVEVY VCIsDQogCQkJCQkgc2hvd19jb250ZXh0X3N1YnN0aXR1dGVfaG9vaywNCiAJ CQkJCSBzaG93X2NvbnRleHRfaG9vayk7DQpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL3QvMDIwX2NhbmNlbC5wbCBiL3NyYy9iaW4vcHNxbC90LzAyMF9j YW5jZWwucGwNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi4wNmJhZDc0MTYxDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvYmlu L3BzcWwvdC8wMjBfY2FuY2VsLnBsDQpAQCAtMCwwICsxLDM5IEBADQordXNl IHN0cmljdDsNCit1c2Ugd2FybmluZ3M7DQorDQordXNlIFBvc3RncmVzTm9k ZTsNCit1c2UgVGVzdExpYjsNCit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAy Ow0KKw0KK215ICR0ZW1wZGlyID0gVGVzdExpYjo6dGVtcGRpcjsNCisNCitt eSAkbm9kZSA9IGdldF9uZXdfbm9kZSgnbWFpbicpOw0KKyRub2RlLT5pbml0 Ow0KKyRub2RlLT5zdGFydDsNCisNCisjIHRlc3QgcXVlcnkgY2FuY2VsaW5n IGJ5IHNlbmRpbmcgU0lHSU5UIHRvIGEgcnVubmluZyBwc3FsDQorU0tJUDog ew0KKwlza2lwICJjYW5jZWwgdGVzdCByZXF1aXJlcyBhIFVuaXggc2hlbGwi LCAyIGlmICR3aW5kb3dzX29zOw0KKw0KKwkjIHVzZSBhIGNsZWFuIGVudmly b25tZW50DQorCWxvY2FsICVFTlYgPSAkbm9kZS0+X2dldF9lbnYoKTsNCisN CisJIyBzZW5kIGEga2lsbCBhZnRlciAxIHNlY29uZA0KKwlsb2NhbCAkU0lH e0FMUk19ID0gc3ViIHsNCisJCW15ICRwc3FsX3BpZCA9IFRlc3RMaWI6OnNs dXJwX2ZpbGUoIiR0ZW1wZGlyL3BzcWwucGlkIik7DQorCQlraWxsICdJTlQn LCAkcHNxbF9waWQ7DQorCX07DQorCWFsYXJtIDE7DQorDQorCSMgcnVuIHBz cWwgdG8gZXhwb3J0IGl0cyBwaWQgYW5kIHdhaXQgZm9yIHRoZSBraWxsDQor CW15ICRzdGRpbiA9ICJcXCEgZWNobyBcJFBQSUQgPiR0ZW1wZGlyL3BzcWwu cGlkXG5zZWxlY3QgcGdfc2xlZXAoNSk7IjsNCisJbXkgKCRzdGRvdXQsICRz dGRlcnIpOw0KKwlteSAkcmVzdWx0ID0gSVBDOjpSdW46OnJ1bihbJ3BzcWwn LCAnLXYnLCAnT05fRVJST1JfU1RPUD0xJ10sICc8JywgXCRzdGRpbiwgJz4n LCBcJHN0ZG91dCwgJzI+JywgXCRzdGRlcnIpOw0KKw0KKwkjIHF1ZXJ5IG11 c3QgaGF2ZSBiZWVuIGludGVycnVwdGVkDQorCW9rKCEkcmVzdWx0LCAncXVl cnkgZmFpbGVkJyk7DQorCWxpa2UoJHN0ZGVyciwgcXIvY2FuY2VsaW5nIHN0 YXRlbWVudCBkdWUgdG8gdXNlciByZXF1ZXN0LywgJ3F1ZXJ5IHdhcyBjYW5j ZWxlZCcpOw0KK30NCisNCiskbm9kZS0+c3RvcCgpOw0KK2RvbmVfdGVzdGlu ZygpOw0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUu YyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYw0KaW5kZXggZDZiZjcy NTk3MS4uZmZlNTQ3NTRhNiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC90 YWItY29tcGxldGUuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0 ZS5jDQpAQCAtNDEzMCw3ICs0MTMwLDcgQEAgcHNxbF9jb21wbGV0aW9uKGNv bnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkNCiAJCW1hdGNo ZXMgPSBjb21wbGV0ZV9mcm9tX3ZhcmlhYmxlcyh0ZXh0LCAiIiwgIiIsIGZh bHNlKTsNCiAJZWxzZSBpZiAoVGFpbE1hdGNoZXNDUygiXFxzZXQiLCBNYXRj aEFueSkpDQogCXsNCi0JCWlmIChUYWlsTWF0Y2hlc0NTKCJBVVRPQ09NTUlU fE9OX0VSUk9SX1NUT1B8UVVJRVR8Ig0KKwkJaWYgKFRhaWxNYXRjaGVzQ1Mo IkFVVE9DT01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHxTSE9XX0FMTF9SRVNV TFRTfCINCiAJCQkJCQkgICJTSU5HTEVMSU5FfFNJTkdMRVNURVAiKSkNCiAJ CQlDT01QTEVURV9XSVRIX0NTKCJvbiIsICJvZmYiKTsNCiAJCWVsc2UgaWYg KFRhaWxNYXRjaGVzQ1MoIkNPTVBfS0VZV09SRF9DQVNFIikpDQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQN CmluZGV4IDcyODY1ZmUxZWIuLmJiOWUwMjZmOTEgMTAwNjQ0DQotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qub3V0DQpA QCAtMTI2LDcgKzEyNiw3IEBAIGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRc OyBzZWxlY3QgMS8wOwktLSByb3csIHRoZW4gZXJyb3INCiBFUlJPUjogIGRp dmlzaW9uIGJ5IHplcm8NCiBzZWxlY3QgMS8wXDsgY29weSAoc2VsZWN0IDEp IHRvIHN0ZG91dDsgLS0gZXJyb3Igb25seQ0KIEVSUk9SOiAgZGl2aXNpb24g YnkgemVybw0KLWNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChz ZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0IDBcOyBzZWxlY3QgMzsgLS0g MSAyIDMNCitjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2Vs ZWN0IDIpIHRvIHN0ZG91dFw7IHNlbGVjdCAzXDsgc2VsZWN0IDQ7IC0tIDEg MiAzIDQNCiAxDQogMg0KICA/Y29sdW1uPyANCkBAIC0xMzQsOCArMTM0LDE4 IEBAIGNvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChzZWxlY3Qg MikgdG8gc3Rkb3V0XDsgc2VsZWN0IDBcOyBzZWxlY3QgMzsgLS0NCiAgICAg ICAgIDMNCiAoMSByb3cpDQogDQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0N CisgICAgICAgIDQNCisoMSByb3cpDQorDQogY3JlYXRlIHRhYmxlIHRlc3Qz IChjIGludCk7DQotc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5c OyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsgLS0gMQ0KK3Nl bGVjdCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBm cm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0tIDAgMQ0KKyA/Y29sdW1uPyANCist LS0tLS0tLS0tDQorICAgICAgICAwDQorKDEgcm93KQ0KKw0KICA/Y29sdW1u PyANCiAtLS0tLS0tLS0tDQogICAgICAgICAxDQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCmluZGV4IDFiMmY2YmM0MTguLjcx ZTNiMWU5ZmUgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BzcWwub3V0DQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0DQpAQCAtNTE3OSwzICs1MTc5LDI0MyBAQCBMaXN0IG9mIGFj Y2VzcyBtZXRob2RzDQogIHBnX2NhdGFsb2cgfCAmJiAgIHwgYW55YXJyYXkg ICAgICB8IGFueWFycmF5ICAgICAgIHwgYm9vbGVhbiAgICAgfCBvdmVybGFw cw0KICgxIHJvdykNCiANCistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCist LQ0KK0NSRUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJP T0xFQU4gTEFOR1VBR0UgcGxwZ3NxbA0KK0FTICQkDQorICBCRUdJTiBSQUlT RSBOT1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQor JCQ7DQorLS0gc2hvdyBib3RoDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVD VCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KKyBvbmUgDQor LS0tLS0NCisgICAxDQorKDEgcm93KQ0KKw0KK05PVElDRTogIHdhcm4gMS41 DQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHdhcm4odGV4dCkgbGlu ZSAyIGF0IFJBSVNFDQorIHdhcm4gDQorLS0tLS0tDQorIHQNCisoMSByb3cp DQorDQorIHR3byANCistLS0tLQ0KKyAgIDINCisoMSByb3cpDQorDQorLS0g XGdzZXQgYXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBB UyB0aHJlZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMg Zm91ciBcZ3NldA0KKyB0aHJlZSANCistLS0tLS0tDQorICAgICAzDQorKDEg cm93KQ0KKw0KK05PVElDRTogIHdhcm4gMy41DQorQ09OVEVYVDogIFBML3Bn U1FMIGZ1bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQorIHdh cm4gDQorLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorXGVjaG8gOnRocmVl IDpmb3VyDQorOnRocmVlIDQNCistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxs IHByb2Nlc3NpbmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVD VCB3YXJuKCc2LjUnKSBcOyBTRUxFQ1QgNyA7DQorRVJST1I6ICBzeW50YXgg ZXJyb3IgYXQgb3IgbmVhciAiOyINCitMSU5FIDE6IFNFTEVDVCA1IDsgU0VM RUNUIDYgKyA7IFNFTEVDVCB3YXJuKCc2LjUnKSA7IFNFTEVDVCA3IDsNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQorLS0gd2l0aCBhYm9y dGVkIHRyYW5zYWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVycm9yDQorQkVHSU4g XDsgU0VMRUNUIDggQVMgZWlnaHQgXDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7 IFJPTExCQUNLIFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0KKyBlaWdodCANCist LS0tLS0tDQorICAgICA4DQorKDEgcm93KQ0KKw0KK0VSUk9SOiAgZGl2aXNp b24gYnkgemVybw0KKy0tIGNsb3NlIHByZXZpb3VzbHkgYWJvcnRlZCB0cmFu c2FjdGlvbg0KK1JPTExCQUNLOw0KKy0tIG1pc2MgU1FMIGNvbW1hbmRzDQor LS0gKG5vbiBTRUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCB0aHVz IGlzIG5vdCBzaG93biBpbiBleHBlY3RlZCByZXN1bHRzKQ0KK1NFTEVDVCAn b2snIEFTICJiZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUgcHNxbF9jb21pY3Mo cyBURVhUKSBcOw0KK0lOU0VSVCBJTlRPIHBzcWxfY29taWNzIFZBTFVFUyAo J0NhbHZpbicpLCAoJ2hvYmJlcycpIFw7DQorQ09QWSBwc3FsX2NvbWljcyBG Uk9NIFNURElOIFw7DQorVVBEQVRFIHBzcWxfY29taWNzIFNFVCBzID0gJ0hv YmJlcycgV0hFUkUgcyA9ICdob2JiZXMnIFw7DQorREVMRVRFIEZST00gcHNx bF9jb21pY3MgV0hFUkUgcyA9ICdNb2UnIFw7DQorQ09QWSBwc3FsX2NvbWlj cyBUTyBTVERPVVQgXDsNCitUUlVOQ0FURSBwc3FsX2NvbWljcyBcOw0KK0RS T1AgVEFCTEUgcHNxbF9jb21pY3MgXDsNCitTRUxFQ1QgJ29rJyBBUyAiZG9u ZSIgOw0KKyBiZWdpbiANCistLS0tLS0tDQorIG9rDQorKDEgcm93KQ0KKw0K K0NhbHZpbg0KK1N1c2llDQorSG9iYmVzDQorIGRvbmUgDQorLS0tLS0tDQor IG9rDQorKDEgcm93KQ0KKw0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvZmYN CitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7IFNF TEVDVCAyIEFTIHR3byA7DQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhU OiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJ U0UNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJvdykNCisNCitcc2V0 IFNIT1dfQUxMX1JFU1VMVFMgb24NCitEUk9QIEZVTkNUSU9OIHdhcm4oVEVY VCk7DQorLS0NCistLSBhdXRvY29tbWl0DQorLS0NCitcZWNobyAnIyBpbml0 aWFsIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKyMgaW5pdGlhbCBBVVRP Q09NTUlUOiBvbg0KK1xzZXQgQVVUT0NPTU1JVCBvZmYNCitcZWNobyAnIyBB VVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCisjIEFVVE9DT01NSVQ6IG9mZg0K Ky0tIGltcGxpY2l0IEJFR0lODQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQp Ow0KK1JPTExCQUNLOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJ TlNFUlQgSU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcp Ow0KK0NPTU1JVDsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsNCitT RUxFQ1QgKiBGUk9NIGZvbyBPUkRFUiBCWSAxOw0KKyAgIHMgICANCistLS0t LS0tDQorIGhlbGxvDQorIHdvcmxkDQorKDIgcm93cykNCisNCitEUk9QIFRB QkxFIGZvbzsNCitDT01NSVQ7DQorXHNldCBBVVRPQ09NTUlUIG9uDQorXGVj aG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorIyBBVVRPQ09NTUlU OiBvbg0KKy0tIGV4cGxpY2l0IEJFR0lODQorQkVHSU47DQorQ1JFQVRFIFRB QkxFIGZvbyhzIFRFWFQpOw0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMg KCdoZWxsbycpLCAoJ3dvcmxkJyk7DQorQ09NTUlUOw0KK0JFR0lOOw0KK0RS T1AgVEFCTEUgZm9vOw0KK1JPTExCQUNLOw0KKy0tIGltcGxpY2l0IHRyYW5z YWN0aW9ucw0KK1NFTEVDVCAqIEZST00gZm9vIE9SREVSIEJZIDE7DQorICAg cyAgIA0KKy0tLS0tLS0NCisgaGVsbG8NCisgd29ybGQNCisoMiByb3dzKQ0K Kw0KK0RST1AgVEFCTEUgZm9vOw0KK1xlY2hvICcjIGZpbmFsIEFVVE9DT01N SVQ6JyA6QVVUT0NPTU1JVA0KKyMgZmluYWwgQVVUT0NPTU1JVDogb24NCist LQ0KKy0tIHRlc3QgT05fRVJST1JfUk9MTEJBQ0sNCistLQ0KK0NSRUFURSBG VU5DVElPTiBwc3FsX2Vycm9yKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4g QVMgJCQNCisgIEJFR0lODQorICAgIFJBSVNFIEVYQ0VQVElPTiAnZXJyb3Ig JScsIG1zZzsNCisgIEVORDsNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0KK1xl Y2hvICcjIGluaXRpYWwgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1Jf Uk9MTEJBQ0sNCisjIGluaXRpYWwgT05fRVJST1JfUk9MTEJBQ0s6IG9mZg0K K1xzZXQgT05fRVJST1JfUk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9FUlJP Ul9ST0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KKyMgT05fRVJST1Jf Uk9MTEJBQ0s6IG9uDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09N TUlUDQorIyBBVVRPQ09NTUlUOiBvbg0KK0JFR0lOOw0KK0NSRUFURSBUQUJM RSBibGEocyBOT19TVUNIX1RZUEUpOyAgICAgICAgIC0tIGZhaWxzDQorRVJS T1I6ICB0eXBlICJub19zdWNoX3R5cGUiIGRvZXMgbm90IGV4aXN0DQorTElO RSAxOiBDUkVBVEUgVEFCTEUgYmxhKHMgTk9fU1VDSF9UWVBFKTsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBeDQorQ1JFQVRFIFRBQkxFIGJsYShz IFRFWFQpOyAgICAgICAgICAgICAgICAgLS0gc3VjY2VlZHMNCitTRUxFQ1Qg cHNxbF9lcnJvcignb29wcyEnKTsgICAgICAgICAgICAgICAtLSBmYWlscw0K K0VSUk9SOiAgZXJyb3Igb29wcyENCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNF UlQgSU5UTyBibGEgVkFMVUVTICgnQ2FsdmluJyksICgnSG9iYmVzJyk7DQor Q09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQorICAg cyAgICANCistLS0tLS0tLQ0KKyBDYWx2aW4NCisgSG9iYmVzDQorKDIgcm93 cykNCisNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnU3Vz aWUnKTsgICAgICAgICAtLSBzdWNjZWVkcw0KKy0tIGNvbWJpbmVkIHF1ZXJp ZXMNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9zYWx5bicpIFw7ICAg ICAtLSB3aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZvcmUgZXJyb3InIEFT IHNob3cgXDsgICAgICAgICAgLS0gd2lsbCBzaG93IQ0KKyAgU0VMRUNUIHBz cWxfZXJyb3IoJ2JvdW0hJykgXDsgICAgICAgICAgIC0tIGZhaWx1cmUNCisg IFNFTEVDVCAnYWZ0ZXIgZXJyb3InIEFTIG5vc2hvdzsgICAgICAgICAtLSBo aWRkZW4gYnkgcHJlY2VlZGluZyBlcnJvcg0KKyAgICAgc2hvdyAgICAgDQor LS0tLS0tLS0tLS0tLS0NCisgYmVmb3JlIGVycm9yDQorKDEgcm93KQ0KKw0K K0VSUk9SOiAgZXJyb3IgYm91bSENCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gcHNxbF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNF UlQgSU5UTyBibGEocykgVkFMVUVTICgnTW9lJykgXDsgICAgICAtLSB3aWxs IHJvbGxiYWNrDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYmFtIScpOw0KK0VS Uk9SOiAgZXJyb3IgYmFtIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlv biBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0KK0lOU0VSVCBJ TlRPIGJsYSBWQUxVRVMgKCdNaXNzIFdvcm13b29kJyk7IC0tIHN1Y2NlZWRz DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQor ICAgICAgIHMgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tDQorIENhbHZpbg0K KyBIb2JiZXMNCisgTWlzcyBXb3Jtd29vZA0KKyBTdXNpZQ0KKyg0IHJvd3Mp DQorDQorLS0gc29tZSB3aXRoIGF1dG9jb21taXQgb2ZmDQorXHNldCBBVVRP Q09NTUlUIG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1J VA0KKyMgQVVUT0NPTU1JVDogb2ZmDQorLS0gaW1wbGljaXQgQkVHSU4NCitJ TlNFUlQgSU5UTyBibGEgVkFMVUVTICgnRGFkJyk7ICAgICAgICAgICAtLSBz dWNjZWVkcw0KK1NFTEVDVCBwc3FsX2Vycm9yKCdiYWQhJyk7ICAgICAgICAg ICAgICAgIC0tIGltcGxpY2l0IHBhcnRpYWwgcm9sbGJhY2sNCitFUlJPUjog IGVycm9yIGJhZCENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNx bF9lcnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitJTlNFUlQgSU5UTyBi bGEgVkFMVUVTICgnTXVtJykgXDsgICAgICAgICAtLSB3aWxsIHJvbGxiYWNr DQorU0VMRUNUIENPVU5UKCopIEFTICIjbXVtIg0KK0ZST00gYmxhIFdIRVJF IHMgPSAnTXVtJyBcOyAgICAgICAgICAgICAgIC0tIGJ1dCBiZSBjb3VudGVk IGhlcmUNCitTRUxFQ1QgcHNxbF9lcnJvcignYmFkIScpOyAgICAgICAgICAg ICAgICAtLSBpbXBsaWNpdCBwYXJ0aWFsIHJvbGxiYWNrDQorICNtdW0gDQor LS0tLS0tDQorICAgIDENCisoMSByb3cpDQorDQorRVJST1I6ICBlcnJvciBi YWQhDQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHBzcWxfZXJyb3Io dGV4dCkgbGluZSAzIGF0IFJBSVNFDQorQ09NTUlUOw0KK1NFTEVDVCAqIEZS T00gYmxhIE9SREVSIEJZIDE7DQorICAgICAgIHMgICAgICAgDQorLS0tLS0t LS0tLS0tLS0tDQorIENhbHZpbg0KKyBEYWQNCisgSG9iYmVzDQorIE1pc3Mg V29ybXdvb2QNCisgU3VzaWUNCisoNSByb3dzKQ0KKw0KKy0tIHJlc2V0DQor XHNldCBBVVRPQ09NTUlUIG9uDQorXHNldCBPTl9FUlJPUl9ST0xMQkFDSyBv ZmYNCitcZWNobyAnIyBmaW5hbCBPTl9FUlJPUl9ST0xMQkFDSzonIDpPTl9F UlJPUl9ST0xMQkFDSw0KKyMgZmluYWwgT05fRVJST1JfUk9MTEJBQ0s6IG9m Zg0KK0RST1AgVEFCTEUgYmxhOw0KK0RST1AgRlVOQ1RJT04gcHNxbF9lcnJv cjsNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Ry YW5zYWN0aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Ry YW5zYWN0aW9ucy5vdXQNCmluZGV4IDYxODYyZDU5NWQuLmJlMWRiMGQ1YzAg MTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyYW5z YWN0aW9ucy5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dHJhbnNhY3Rpb25zLm91dA0KQEAgLTkwMCw4ICs5MDAsMTggQEAgRFJPUCBU QUJMRSBhYmM7DQogLS0gdGVzdHMgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHBz cWwgd2lsbCBub3QgYnJlYWsgU1FMIGNvbW1hbmRzIGFwYXJ0IGF0IGENCiAt LSBiYWNrc2xhc2gtcXVvdGVkIHNlbWljb2xvbiwgYnV0IHdpbGwgc2VuZCB0 aGVtIGFzIG9uZSBRdWVyeS4NCiBjcmVhdGUgdGVtcCB0YWJsZSBpX3RhYmxl IChmMSBpbnQpOw0KLS0tIHBzcWwgd2lsbCBzaG93IG9ubHkgdGhlIGxhc3Qg cmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50IFF1ZXJ5DQorLS0gcHNxbCB3 aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBtdWx0aS1zdGF0ZW1lbnQgUXVl cnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsgU0VMRUNUIDM7DQorID9jb2x1 bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQor ID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDINCisoMSByb3cp DQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDMNCkBA IC05MTYsNiArOTI2LDEyIEBAIGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVz KDEpXDsgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0KIA0KIC0tIDEvMCBlcnJv ciB3aWxsIGNhdXNlIHJvbGxpbmcgYmFjayB0aGUgd2hvbGUgaW1wbGljaXQg dHJhbnNhY3Rpb24NCiBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcygyKVw7 IHNlbGVjdCAqIGZyb20gaV90YWJsZVw7IHNlbGVjdCAxLzA7DQorIGYxIA0K Ky0tLS0NCisgIDENCisgIDINCisoMiByb3dzKQ0KKw0KIEVSUk9SOiAgZGl2 aXNpb24gYnkgemVybw0KIHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiAgZjEg DQpAQCAtOTM1LDggKzk1MSwxOCBAQCBXQVJOSU5HOiAgdGhlcmUgaXMgbm8g dHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCiAtLSBiZWdpbiBjb252ZXJ0cyBp bXBsaWNpdCB0cmFuc2FjdGlvbiBpbnRvIGEgcmVndWxhciBvbmUgdGhhdA0K IC0tIGNhbiBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIHRoZSBRdWVyeQ0KIHNl bGVjdCAxXDsgYmVnaW5cOyBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcyg1 KTsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygx IHJvdykNCisNCiBjb21taXQ7DQogc2VsZWN0IDFcOyBiZWdpblw7IGluc2Vy dCBpbnRvIGlfdGFibGUgdmFsdWVzKDYpOw0KKyA/Y29sdW1uPyANCistLS0t LS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIHJvbGxiYWNrOw0K IC0tIGNvbW1pdCBpbiBpbXBsaWNpdC10cmFuc2FjdGlvbiBzdGF0ZSBjb21t aXRzIGJ1dCBpc3N1ZXMgYSB3YXJuaW5nLg0KIGluc2VydCBpbnRvIGlfdGFi bGUgdmFsdWVzKDcpXDsgY29tbWl0XDsgaW5zZXJ0IGludG8gaV90YWJsZSB2 YWx1ZXMoOClcOyBzZWxlY3QgMS8wOw0KQEAgLTk2MywyMiArOTg5LDUyIEBA IHJvbGxiYWNrOyAgLS0gd2UgYXJlIG5vdCBpbiBhIHRyYW5zYWN0aW9uIGF0 IHRoaXMgcG9pbnQNCiBXQVJOSU5HOiAgdGhlcmUgaXMgbm8gdHJhbnNhY3Rp b24gaW4gcHJvZ3Jlc3MNCiAtLSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9j ayBpcyBzdGlsbCBhIHRyYW5zYWN0aW9uIGJsb2NrLCBmb3IgZS5nLiBWQUNV VU0NCiBTRUxFQ1QgMVw7IFZBQ1VVTTsNCisgP2NvbHVtbj8gDQorLS0tLS0t LS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJPUjogIFZBQ1VV TSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrDQogU0VM RUNUIDFcOyBDT01NSVRcOyBWQUNVVU07DQogV0FSTklORzogIHRoZXJlIGlz IG5vIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzDQorID9jb2x1bW4/IA0KKy0t LS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQogRVJST1I6ICBW QUNVVU0gY2Fubm90IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jaw0K IC0tIHdlIGRpc2FsbG93IHNhdmVwb2ludC1yZWxhdGVkIGNvbW1hbmRzIGlu IGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlDQogU0VMRUNUIDFcOyBTQVZF UE9JTlQgc3A7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAg IDENCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZFUE9JTlQgY2FuIG9ubHkg YmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCiBTRUxFQ1QgMVw7IENP TU1JVFw7IFNBVkVQT0lOVCBzcDsNCiBXQVJOSU5HOiAgdGhlcmUgaXMgbm8g dHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCisgP2NvbHVtbj8gDQorLS0tLS0t LS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJPUjogIFNBVkVQ T0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0K IFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcFw7IFNFTEVDVCAyOw0KIEVSUk9S OiAgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4g dHJhbnNhY3Rpb24gYmxvY2tzDQogU0VMRUNUIDJcOyBSRUxFQVNFIFNBVkVQ T0lOVCBzcFw7IFNFTEVDVCAzOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0t DQorICAgICAgICAyDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgUkVMRUFTRSBT QVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9j a3MNCiAtLSBidXQgdGhpcyBpcyBPSywgYmVjYXVzZSB0aGUgQkVHSU4gY29u dmVydHMgaXQgdG8gYSByZWd1bGFyIHhhY3QNCiBTRUxFQ1QgMVw7IEJFR0lO XDsgU0FWRVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsg Q09NTUlUOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAx DQorKDEgcm93KQ0KKw0KIC0tIFRlc3RzIGZvciBBTkQgQ0hBSU4gaW4gaW1w bGljaXQgdHJhbnNhY3Rpb24gYmxvY2tzDQogU0VUIFRSQU5TQUNUSU9OIFJF QUQgT05MWVw7IENPTU1JVCBBTkQgQ0hBSU47ICAtLSBlcnJvcg0KIEVSUk9S OiAgQ09NTUlUIEFORCBDSEFJTiBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5z YWN0aW9uIGJsb2Nrcw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvcHlzZWxlY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eXNlbGVjdC5zcWwNCmluZGV4IDFkOThkYWQzYzguLmUzMmE0ZjhlMzggMTAw NjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0LnNx bA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weXNlbGVjdC5zcWwN CkBAIC04NCwxMCArODQsMTAgQEAgZHJvcCB0YWJsZSB0ZXN0MTsNCiAtLSBw c3FsIGhhbmRsaW5nIG9mIENPUFkgaW4gbXVsdGktY29tbWFuZCBzdHJpbmdz DQogY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IHNlbGVjdCAxLzA7CS0t IHJvdywgdGhlbiBlcnJvcg0KIHNlbGVjdCAxLzBcOyBjb3B5IChzZWxlY3Qg MSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQotY29weSAoc2VsZWN0IDEp IHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxl Y3QgMFw7IHNlbGVjdCAzOyAtLSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0 byBzdGRvdXRcOyBjb3B5IChzZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0 IDNcOyBzZWxlY3QgNDsgLS0gMSAyIDMgNA0KIA0KIGNyZWF0ZSB0YWJsZSB0 ZXN0MyAoYyBpbnQpOw0KLXNlbGVjdCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0 ZGluXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0tIDEN CitzZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IGNvcHkgdGVz dDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAwIDENCiAxDQogXC4NCiAy DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KaW5kZXggNjgxMjFk MTcxYy4uYjJmM2YzMjQwNCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BzcWwuc3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w c3FsLnNxbA0KQEAgLTEyNDEsMyArMTI0MSwxMjMgQEAgZHJvcCByb2xlIHJl Z3Jlc3NfcGFydGl0aW9uaW5nX3JvbGU7DQogXGRmYSBiaXQqIHNtYWxsKg0K IFxkbyAtIHBnX2NhdGFsb2cuaW50NA0KIFxkbyAmJiBhbnlhcnJheSAqDQor DQorLS0NCistLSBjb21iaW5lZCBxdWVyaWVzDQorLS0NCitDUkVBVEUgRlVO Q1RJT04gd2Fybihtc2cgVEVYVCkgUkVUVVJOUyBCT09MRUFOIExBTkdVQUdF IHBscGdzcWwNCitBUyAkJA0KKyAgQkVHSU4gUkFJU0UgTk9USUNFICd3YXJu ICUnLCBtc2cgOyBSRVRVUk4gVFJVRSA7IEVORA0KKyQkOw0KKy0tIHNob3cg Ym90aA0KK1NFTEVDVCAxIEFTIG9uZSBcOyBTRUxFQ1Qgd2FybignMS41Jykg XDsgU0VMRUNUIDIgQVMgdHdvIDsNCistLSBcZ3NldCBhcHBsaWVzIHRvIGxh c3QgcXVlcnkgb25seQ0KK1NFTEVDVCAzIEFTIHRocmVlIFw7IFNFTEVDVCB3 YXJuKCczLjUnKSBcOyBTRUxFQ1QgNCBBUyBmb3VyIFxnc2V0DQorXGVjaG8g OnRocmVlIDpmb3VyDQorLS0gc3ludGF4IGVycm9yIHN0b3BzIGFsbCBwcm9j ZXNzaW5nDQorU0VMRUNUIDUgXDsgU0VMRUNUIDYgKyBcOyBTRUxFQ1Qgd2Fy bignNi41JykgXDsgU0VMRUNUIDcgOw0KKy0tIHdpdGggYWJvcnRlZCB0cmFu c2FjdGlvbiwgc3RvcCBvbiBmaXJzdCBlcnJvcg0KK0JFR0lOIFw7IFNFTEVD VCA4IEFTIGVpZ2h0IFw7IFNFTEVDVCA5LzAgQVMgbmluZSBcOyBST0xMQkFD SyBcOyBTRUxFQ1QgMTAgQVMgdGVuIDsNCistLSBjbG9zZSBwcmV2aW91c2x5 IGFib3J0ZWQgdHJhbnNhY3Rpb24NCitST0xMQkFDSzsNCistLSBtaXNjIFNR TCBjb21tYW5kcw0KKy0tIChub24gU0VMRUNUIG91dHB1dCBpcyBzZW50IHRv IHN0ZGVyciwgdGh1cyBpcyBub3Qgc2hvd24gaW4gZXhwZWN0ZWQgcmVzdWx0 cykNCitTRUxFQ1QgJ29rJyBBUyAiYmVnaW4iIFw7DQorQ1JFQVRFIFRBQkxF IHBzcWxfY29taWNzKHMgVEVYVCkgXDsNCitJTlNFUlQgSU5UTyBwc3FsX2Nv bWljcyBWQUxVRVMgKCdDYWx2aW4nKSwgKCdob2JiZXMnKSBcOw0KK0NPUFkg cHNxbF9jb21pY3MgRlJPTSBTVERJTiBcOw0KK1VQREFURSBwc3FsX2NvbWlj cyBTRVQgcyA9ICdIb2JiZXMnIFdIRVJFIHMgPSAnaG9iYmVzJyBcOw0KK0RF TEVURSBGUk9NIHBzcWxfY29taWNzIFdIRVJFIHMgPSAnTW9lJyBcOw0KK0NP UFkgcHNxbF9jb21pY3MgVE8gU1RET1VUIFw7DQorVFJVTkNBVEUgcHNxbF9j b21pY3MgXDsNCitEUk9QIFRBQkxFIHBzcWxfY29taWNzIFw7DQorU0VMRUNU ICdvaycgQVMgImRvbmUiIDsNCitNb2UNCitTdXNpZQ0KK1wuDQorXHNldCBT SE9XX0FMTF9SRVNVTFRTIG9mZg0KK1NFTEVDVCAxIEFTIG9uZSBcOyBTRUxF Q1Qgd2FybignMS41JykgXDsgU0VMRUNUIDIgQVMgdHdvIDsNCitcc2V0IFNI T1dfQUxMX1JFU1VMVFMgb24NCitEUk9QIEZVTkNUSU9OIHdhcm4oVEVYVCk7 DQorDQorLS0NCistLSBhdXRvY29tbWl0DQorLS0NCitcZWNobyAnIyBpbml0 aWFsIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KK1xzZXQgQVVUT0NPTU1J VCBvZmYNCitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCist LSBpbXBsaWNpdCBCRUdJTg0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsN CitST0xMQkFDSzsNCitDUkVBVEUgVEFCTEUgZm9vKHMgVEVYVCk7DQorSU5T RVJUIElOVE8gZm9vKHMpIFZBTFVFUyAoJ2hlbGxvJyksICgnd29ybGQnKTsN CitDT01NSVQ7DQorRFJPUCBUQUJMRSBmb287DQorUk9MTEJBQ0s7DQorU0VM RUNUICogRlJPTSBmb28gT1JERVIgQlkgMTsNCitEUk9QIFRBQkxFIGZvbzsN CitDT01NSVQ7DQorXHNldCBBVVRPQ09NTUlUIG9uDQorXGVjaG8gJyMgQVVU T0NPTU1JVDonIDpBVVRPQ09NTUlUDQorLS0gZXhwbGljaXQgQkVHSU4NCitC RUdJTjsNCitDUkVBVEUgVEFCTEUgZm9vKHMgVEVYVCk7DQorSU5TRVJUIElO VE8gZm9vKHMpIFZBTFVFUyAoJ2hlbGxvJyksICgnd29ybGQnKTsNCitDT01N SVQ7DQorQkVHSU47DQorRFJPUCBUQUJMRSBmb287DQorUk9MTEJBQ0s7DQor LS0gaW1wbGljaXQgdHJhbnNhY3Rpb25zDQorU0VMRUNUICogRlJPTSBmb28g T1JERVIgQlkgMTsNCitEUk9QIFRBQkxFIGZvbzsNCitcZWNobyAnIyBmaW5h bCBBVVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCisNCistLQ0KKy0tIHRlc3Qg T05fRVJST1JfUk9MTEJBQ0sNCistLQ0KK0NSRUFURSBGVU5DVElPTiBwc3Fs X2Vycm9yKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gQVMgJCQNCisgIEJF R0lODQorICAgIFJBSVNFIEVYQ0VQVElPTiAnZXJyb3IgJScsIG1zZzsNCisg IEVORDsNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0KK1xlY2hvICcjIGluaXRp YWwgT05fRVJST1JfUk9MTEJBQ0s6JyA6T05fRVJST1JfUk9MTEJBQ0sNCitc c2V0IE9OX0VSUk9SX1JPTExCQUNLIG9uDQorXGVjaG8gJyMgT05fRVJST1Jf Uk9MTEJBQ0s6JyA6T05fRVJST1JfUk9MTEJBQ0sNCitcZWNobyAnIyBBVVRP Q09NTUlUOicgOkFVVE9DT01NSVQNCitCRUdJTjsNCitDUkVBVEUgVEFCTEUg YmxhKHMgTk9fU1VDSF9UWVBFKTsgICAgICAgICAtLSBmYWlscw0KK0NSRUFU RSBUQUJMRSBibGEocyBURVhUKTsgICAgICAgICAgICAgICAgIC0tIHN1Y2Nl ZWRzDQorU0VMRUNUIHBzcWxfZXJyb3IoJ29vcHMhJyk7ICAgICAgICAgICAg ICAgLS0gZmFpbHMNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnQ2Fsdmlu JyksICgnSG9iYmVzJyk7DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxh IE9SREVSIEJZIDE7DQorQkVHSU47DQorSU5TRVJUIElOVE8gYmxhIFZBTFVF UyAoJ1N1c2llJyk7ICAgICAgICAgLS0gc3VjY2VlZHMNCistLSBjb21iaW5l ZCBxdWVyaWVzDQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ1Jvc2FseW4n KSBcOyAgICAgLS0gd2lsbCByb2xsYmFjaw0KK1NFTEVDVCAnYmVmb3JlIGVy cm9yJyBBUyBzaG93IFw7ICAgICAgICAgIC0tIHdpbGwgc2hvdyENCisgIFNF TEVDVCBwc3FsX2Vycm9yKCdib3VtIScpIFw7ICAgICAgICAgICAtLSBmYWls dXJlDQorICBTRUxFQ1QgJ2FmdGVyIGVycm9yJyBBUyBub3Nob3c7ICAgICAg ICAgLS0gaGlkZGVuIGJ5IHByZWNlZWRpbmcgZXJyb3INCitJTlNFUlQgSU5U TyBibGEocykgVkFMVUVTICgnTW9lJykgXDsgICAgICAtLSB3aWxsIHJvbGxi YWNrDQorICBTRUxFQ1QgcHNxbF9lcnJvcignYmFtIScpOw0KK0lOU0VSVCBJ TlRPIGJsYSBWQUxVRVMgKCdNaXNzIFdvcm13b29kJyk7IC0tIHN1Y2NlZWRz DQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00gYmxhIE9SREVSIEJZIDE7DQor LS0gc29tZSB3aXRoIGF1dG9jb21taXQgb2ZmDQorXHNldCBBVVRPQ09NTUlU IG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKy0t IGltcGxpY2l0IEJFR0lODQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ0Rh ZCcpOyAgICAgICAgICAgLS0gc3VjY2VlZHMNCitTRUxFQ1QgcHNxbF9lcnJv cignYmFkIScpOyAgICAgICAgICAgICAgICAtLSBpbXBsaWNpdCBwYXJ0aWFs IHJvbGxiYWNrDQorSU5TRVJUIElOVE8gYmxhIFZBTFVFUyAoJ011bScpIFw7 ICAgICAgICAgLS0gd2lsbCByb2xsYmFjaw0KK1NFTEVDVCBDT1VOVCgqKSBB UyAiI211bSINCitGUk9NIGJsYSBXSEVSRSBzID0gJ011bScgXDsgICAgICAg ICAgICAgICAtLSBidXQgYmUgY291bnRlZCBoZXJlDQorU0VMRUNUIHBzcWxf ZXJyb3IoJ2JhZCEnKTsgICAgICAgICAgICAgICAgLS0gaW1wbGljaXQgcGFy dGlhbCByb2xsYmFjaw0KK0NPTU1JVDsNCitTRUxFQ1QgKiBGUk9NIGJsYSBP UkRFUiBCWSAxOw0KKy0tIHJlc2V0DQorXHNldCBBVVRPQ09NTUlUIG9uDQor XHNldCBPTl9FUlJPUl9ST0xMQkFDSyBvZmYNCitcZWNobyAnIyBmaW5hbCBP Tl9FUlJPUl9ST0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK0RST1Ag VEFCTEUgYmxhOw0KK0RST1AgRlVOQ1RJT04gcHNxbF9lcnJvcjsNCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KaW5k ZXggODg4NjI4MGMwYS4uN2ZjOWYwOTQ2OCAxMDA2NDQNCi0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwNCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwNCkBAIC01MDQsNyAr NTA0LDcgQEAgRFJPUCBUQUJMRSBhYmM7DQogDQogY3JlYXRlIHRlbXAgdGFi bGUgaV90YWJsZSAoZjEgaW50KTsNCiANCi0tLSBwc3FsIHdpbGwgc2hvdyBv bmx5IHRoZSBsYXN0IHJlc3VsdCBpbiBhIG11bHRpLXN0YXRlbWVudCBRdWVy eQ0KKy0tIHBzcWwgd2lsbCBzaG93IGFsbCByZXN1bHRzIG9mIGEgbXVsdGkt c3RhdGVtZW50IFF1ZXJ5DQogU0VMRUNUIDFcOyBTRUxFQ1QgMlw7IFNFTEVD VCAzOw0KIA0KIC0tIHRoaXMgaW1wbGljaXRseSBjb21taXRzOg0K --2056645051-727309686-1626965921=:25741--