From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3591 invoked by alias); 25 Mar 2017 23:01:53 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 3579 invoked by uid 89); 25 Mar 2017 23:01:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=acquired, idle, logic, time-out X-HELO: mx1.redhat.com DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A930181222 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=triegel@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A930181222 Message-ID: <1490482860.26906.391.camel@redhat.com> Subject: [PATCH v2] rwlock: Fix explicit hand-over. From: Torvald Riegel To: Florian Weimer Cc: GLIBC Devel , Waiman Long , Carlos O'Donell In-Reply-To: <87inmxkt67.fsf@mid.deneb.enyo.de> References: <1490471341.26906.366.camel@redhat.com> <87inmxkt67.fsf@mid.deneb.enyo.de> Content-Type: multipart/mixed; boundary="=-2+CLfSGkRl9AUNcb+YeZ" Date: Sat, 25 Mar 2017 23:01:00 -0000 Mime-Version: 1.0 X-SW-Source: 2017-03/txt/msg00601.txt.bz2 --=-2+CLfSGkRl9AUNcb+YeZ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Content-length: 709 On Sat, 2017-03-25 at 21:17 +0100, Florian Weimer wrote: > * Torvald Riegel: > > > + bool registered_while_in_write_phase = false; > > if (__glibc_likely ((r & PTHREAD_RWLOCK_WRPHASE) == 0)) > > return 0; > > + else > > + registered_while_in_write_phase = true; > > Sorry, this doesn't look quite right. Isn't > registered_while_in_write_phase always true? Attached is a v2 patch. It's the same logic, but bigger. Most of this increase is due to reformatting, but I also adapted some of the comments. I get two failures, but I guess these are either due to the bad internet connectivity I currently have, or something at the resolver. FAIL: resolv/mtrace-tst-leaks FAIL: resolv/tst-leaks --=-2+CLfSGkRl9AUNcb+YeZ Content-Disposition: attachment; filename="rwlock-fix.patch" Content-Type: text/x-patch; name="rwlock-fix.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 Content-length: 40366 Y29tbWl0IDY4Y2IzMmUwMjAyZWI4ZjNjNjQ3ZTU2ZTBhMmViODhhNGU5MDNl MjMKQXV0aG9yOiBUb3J2YWxkIFJpZWdlbCA8dHJpZWdlbEByZWRoYXQuY29t PgpEYXRlOiAgIFNhdCBNYXIgMjUgMDA6MzY6NDYgMjAxNyArMDEwMAoKICAg IHJ3bG9jazogRml4IGV4cGxpY2l0IGhhbmQtb3Zlci4KICAgIAogICAgV2l0 aG91dCB0aGlzIHBhdGNoLCB0aGUgcndsb2NrIGNhbiBmYWlsIHRvIGV4ZWN1 dGUgdGhlIGV4cGxpY2l0IGhhbmQtb3ZlcgogICAgaW4gY2VydGFpbiBjYXNl cyAoZS5nLiwgZW1wdHkgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBzd2l0Y2gg cXVpY2tseSBiZXR3ZWVuCiAgICByZWFkIGFuZCB3cml0ZSBwaGFzZXMpLiAg VGhpcyBjYW4gdGhlbiBsZWFkIHRvIGVycm9ycyBpbiBob3cgX193cnBoYXNl X2Z1dGV4CiAgICBpcyBhY2Nlc3NlZCwgd2hpY2ggaW4gdHVybiBjYW4gbGVh ZCB0byBkZWFkbG9ja3MuCiAgICAKICAgIAlbQlogIzIxMjk4XQogICAgCSog bnB0bC9wdGhyZWFkX3J3bG9ja19jb21tb24uYyAoX19wdGhyZWFkX3J3bG9j a19yZGxvY2tfZnVsbCk6IEZpeAogICAgCWV4cGxpY2l0IGhhbmQtb3Zlci4K ICAgIAkoX19wdGhyZWFkX3J3bG9ja193cmxvY2tfZnVsbCk6IExpa2V3aXNl LgogICAgCSogbnB0bC90c3Qtcndsb2NrMjAuYzogTmV3IGZpbGUuCiAgICAJ KiBucHRsL01ha2VmaWxlOiBBZGQgbmV3IHRlc3QuCgpkaWZmIC0tZ2l0IGEv bnB0bC9NYWtlZmlsZSBiL25wdGwvTWFrZWZpbGUKaW5kZXggNmQ0OGMwYy4u MGNjMjg3MyAxMDA2NDQKLS0tIGEvbnB0bC9NYWtlZmlsZQorKysgYi9ucHRs L01ha2VmaWxlCkBAIC0yNDEsNyArMjQxLDcgQEAgdGVzdHMgPSB0c3QtdHlw ZXNpemVzIFwKIAl0c3Qtcndsb2NrNCB0c3Qtcndsb2NrNSB0c3Qtcndsb2Nr NiB0c3Qtcndsb2NrNyB0c3Qtcndsb2NrOCBcCiAJdHN0LXJ3bG9jazkgdHN0 LXJ3bG9jazEwIHRzdC1yd2xvY2sxMSB0c3Qtcndsb2NrMTIgdHN0LXJ3bG9j azEzIFwKIAl0c3Qtcndsb2NrMTQgdHN0LXJ3bG9jazE1IHRzdC1yd2xvY2sx NiB0c3Qtcndsb2NrMTcgdHN0LXJ3bG9jazE4IFwKLQl0c3Qtcndsb2NrMTkg XAorCXRzdC1yd2xvY2sxOSB0c3Qtcndsb2NrMjAgXAogCXRzdC1vbmNlMSB0 c3Qtb25jZTIgdHN0LW9uY2UzIHRzdC1vbmNlNCB0c3Qtb25jZTUgXAogCXRz dC1rZXkxIHRzdC1rZXkyIHRzdC1rZXkzIHRzdC1rZXk0IFwKIAl0c3Qtc2Vt MSB0c3Qtc2VtMiB0c3Qtc2VtMyB0c3Qtc2VtNCB0c3Qtc2VtNSB0c3Qtc2Vt NiB0c3Qtc2VtNyBcCmRpZmYgLS1naXQgYS9ucHRsL3B0aHJlYWRfcndsb2Nr X2NvbW1vbi5jIGIvbnB0bC9wdGhyZWFkX3J3bG9ja19jb21tb24uYwppbmRl eCAyNTY1MDhjLi5jMDdlYWU0IDEwMDY0NAotLS0gYS9ucHRsL3B0aHJlYWRf cndsb2NrX2NvbW1vbi5jCisrKyBiL25wdGwvcHRocmVhZF9yd2xvY2tfY29t bW9uLmMKQEAgLTcwLDE1ICs3MCwxNiBAQAogICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgICAjMSAgICAwICAgMCAgIDAgICAwICAgTG9jayBp cyBpZGxlIChhbmQgaW4gYSByZWFkIHBoYXNlKS4KICAgICMyICAgIDAgICAw ICAgPjAgIDAgICBSZWFkZXJzIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2suCi0g ICAjMyAgICAwICAgMSAgIDAgICAwICAgTG9jayBpcyBub3QgYWNxdWlyZWQ7 IGEgd3JpdGVyIGlzIHdhaXRpbmcgZm9yIGEgd3JpdGUKLQkJCSBwaGFzZSB0 byBzdGFydCBvciB3aWxsIHRyeSB0byBzdGFydCBvbmUuCisgICAjMyAgICAw ICAgMSAgIDAgICAwICAgTG9jayBpcyBub3QgYWNxdWlyZWQ7IGEgd3JpdGVy IHdpbGwgdHJ5IHRvIHN0YXJ0IGEKKwkJCSB3cml0ZSBwaGFzZS4KICAgICM0 ICAgIDAgICAxICAgPjAgIDAgICBSZWFkZXJzIGhhdmUgYWNxdWlyZWQgdGhl IGxvY2s7IGEgd3JpdGVyIGlzIHdhaXRpbmcKIAkJCSBhbmQgZXhwbGljaXQg aGFuZC1vdmVyIHRvIHRoZSB3cml0ZXIgaXMgcmVxdWlyZWQuCiAgICAjNGEg ICAwICAgMSAgID4wICAxICAgU2FtZSBhcyAjNCBleGNlcHQgdGhhdCB0aGVy ZSBhcmUgZnVydGhlciByZWFkZXJzCiAJCQkgd2FpdGluZyBiZWNhdXNlIHRo ZSB3cml0ZXIgaXMgdG8gYmUgcHJlZmVycmVkLgogICAgIzUgICAgMSAgIDAg ICAwICAgMCAgIExvY2sgaXMgaWRsZSAoYW5kIGluIGEgd3JpdGUgcGhhc2Up LgotICAgIzYgICAgMSAgIDAgICA+MCAgMCAgIFdyaXRlIHBoYXNlOyByZWFk ZXJzIGFyZSB3YWl0aW5nIGZvciBhIHJlYWQgcGhhc2UgdG8KLQkJCSBzdGFy dCBvciB3aWxsIHRyeSB0byBzdGFydCBvbmUuCisgICAjNiAgICAxICAgMCAg ID4wICAwICAgV3JpdGUgcGhhc2U7IHJlYWRlcnMgd2lsbCB0cnkgdG8gc3Rh cnQgYSByZWFkIHBoYXNlCisJCQkgKHJlcXVpcmVzIGV4cGxpY2l0IGhhbmQt b3ZlciB0byBhbGwgcmVhZGVycyB0aGF0CisJCQkgZG8gbm90IHN0YXJ0IHRo ZSByZWFkIHBoYXNlKS4KICAgICM3ICAgIDEgICAxICAgMCAgIDAgICBMb2Nr IGlzIGFjcXVpcmVkIGJ5IGEgd3JpdGVyLgogICAgIzggICAgMSAgIDEgICA+ MCAgMCAgIExvY2sgYWNxdWlyZWQgYnkgYSB3cml0ZXIgYW5kIHJlYWRlcnMg YXJlIHdhaXRpbmc7CiAJCQkgZXhwbGljaXQgaGFuZC1vdmVyIHRvIHRoZSBy ZWFkZXJzIGlzIHJlcXVpcmVkLgpAQCAtMzc1LDkgKzM3Niw5IEBAIF9fcHRo cmVhZF9yd2xvY2tfcmRsb2NrX2Z1bGwgKHB0aHJlYWRfcndsb2NrX3QgKnJ3 bG9jaywKICAgICAgY29tcGxleGl0eS4gICovCiAgIGlmIChfX2dsaWJjX2xp a2VseSAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSA9PSAwKSkKICAg ICByZXR1cm4gMDsKLQotICAvKiBJZiB0aGVyZSBpcyBubyBwcmltYXJ5IHdy aXRlciBidXQgd2UgYXJlIGluIGEgd3JpdGUgcGhhc2UsIHdlIGNhbiB0cnkK LSAgICAgdG8gaW5zdGFsbCBhIHJlYWQgcGhhc2Ugb3Vyc2VsZi4gICovCisg IC8qIE90aGVyd2lzZSwgaWYgd2Ugd2VyZSBpbiBhIHdyaXRlIHBoYXNlIChz dGF0ZXMgIzYgb3IgIzgpLCB3ZSBtdXN0IHdhaXQKKyAgICAgZm9yIGV4cGxp Y2l0IGhhbmQtb3ZlciBvZiB0aGUgcmVhZCBwaGFzZTsgdGhlIG9ubHkgZXhj ZXB0aW9uIGlzIGlmIHdlCisgICAgIGNhbiBzdGFydCBhIHJlYWQgcGhhc2Ug aWYgdGhlcmUgaXMgbm8gcHJpbWFyeSB3cml0ZXIgY3VycmVudGx5LiAgKi8K ICAgd2hpbGUgKCgociAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpICE9IDAp CiAgICAgICAmJiAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUkxPQ0tFRCkgPT0g MCkpCiAgICAgewpAQCAtMzkwLDE1ICszOTEsMTggQEAgX19wdGhyZWFkX3J3 bG9ja19yZGxvY2tfZnVsbCAocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrLAog CXsKIAkgIC8qIFdlIHN0YXJ0ZWQgdGhlIHJlYWQgcGhhc2UsIHNvIHdlIGFy ZSBhbHNvIHJlc3BvbnNpYmxlIGZvcgogCSAgICAgdXBkYXRpbmcgdGhlIHdy aXRlLXBoYXNlIGZ1dGV4LiAgUmVsYXhlZCBNTyBpcyBzdWZmaWNpZW50Lgot CSAgICAgTm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBubyBvdGhlciByZWFkZXIg dGhhdCB3ZSBoYXZlIHRvIHdha2UKLQkgICAgIGJlY2F1c2UgYWxsIG90aGVy IHJlYWRlcnMgd2lsbCBzZWUgdGhlIHJlYWQgcGhhc2Ugc3RhcnRlZCBieSB1 cwotCSAgICAgKG9yIHRoZXkgd2lsbCB0cnkgdG8gc3RhcnQgaXQgdGhlbXNl bHZlcyk7IGlmIGEgd3JpdGVyIHN0YXJ0ZWQKLQkgICAgIHRoZSByZWFkIHBo YXNlLCB3ZSBjYW5ub3QgaGF2ZSBzdGFydGVkIGl0LiAgRnVydGhlcm1vcmUs IHdlCi0JICAgICBjYW5ub3QgZGlzY2FyZCBhIFBUSFJFQURfUldMT0NLX0ZV VEVYX1VTRUQgZmxhZyBiZWNhdXNlIHdlIHdpbGwKLQkgICAgIG92ZXJ3cml0 ZSB0aGUgdmFsdWUgc2V0IGJ5IHRoZSBtb3N0IHJlY2VudCB3cml0ZXIgKG9y IHRoZSByZWFkZXJzCi0JICAgICBiZWZvcmUgaXQgaW4gY2FzZSBvZiBleHBs aWNpdCBoYW5kLW92ZXIpIGFuZCB3ZSBrbm93IHRoYXQgdGhlcmUKLQkgICAg IGFyZSBubyB3YWl0aW5nIHJlYWRlcnMuICAqLwotCSAgYXRvbWljX3N0b3Jl X3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgsIDAp OworCSAgICAgV2UgaGF2ZSB0byBkbyB0aGUgc2FtZSBzdGVwcyBhcyBhIHdy aXRlciB3b3VsZCB3aGVuIGhhbmRpbmcKKwkgICAgIG92ZXIgdGhlIHJlYWQg cGhhc2UgdG8gdXMgYmVjYXVzZSBvdGhlciByZWFkZXJzIGNhbm5vdAorCSAg ICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cyBhbmQgdGhlIHdyaXRlcjsgdGhp cyBpbmNsdWRlcworCSAgICAgZXhwbGljaXQgaGFuZC1vdmVyIGFuZCBwb3Rl bnRpYWxseSBoYXZpbmcgdG8gd2FrZSBvdGhlciByZWFkZXJzCisJICAgICAo YnV0IHdlIGNhbiBwcmV0ZW5kIHRvIGRvIHRoZSBzZXR0aW5nIGFuZCB1bnNl dHRpbmcgb2YgV1JMT0NLRUQKKwkgICAgIGF0b21pY2FsbHksIGFuZCB0aHVz IGNhbiBza2lwIHRoaXMgc3RlcCkuICAqLworCSAgaWYgKChhdG9taWNfZXhj aGFuZ2VfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRl eCwgMCkKKwkgICAgICAmIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpICE9 IDApCisJICAgIHsKKwkgICAgICBpbnQgcHJpdmF0ZSA9IF9fcHRocmVhZF9y d2xvY2tfZ2V0X3ByaXZhdGUgKHJ3bG9jayk7CisJICAgICAgZnV0ZXhfd2Fr ZSAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgSU5UX01BWCwg cHJpdmF0ZSk7CisJICAgIH0KIAkgIHJldHVybiAwOwogCX0KICAgICAgIGVs c2UKQEAgLTQwNywxMDIgKzQxMSw5OCBAQCBfX3B0aHJlYWRfcndsb2NrX3Jk bG9ja19mdWxsIChwdGhyZWFkX3J3bG9ja190ICpyd2xvY2ssCiAJfQogICAg IH0KIAotICBpZiAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSAhPSAw KQorICAvKiBXZSB3ZXJlIGluIGEgd3JpdGUgcGhhc2UgYnV0IGRpZCBub3Qg aW5zdGFsbCB0aGUgcmVhZCBwaGFzZS4gIFdlIGNhbm5vdAorICAgICBkaXN0 aW5ndWlzaCBiZXR3ZWVuIGEgd3JpdGVyIGFuZCBhbm90aGVyIHJlYWRlciBz dGFydGluZyB0aGUgcmVhZCBwaGFzZSwKKyAgICAgc28gd2UgbXVzdCB3YWl0 IGZvciBleHBsaWNpdCBoYW5kLW92ZXIgdmlhIF9fd3JwaGFzZV9mdXRleC4K KyAgICAgSG93ZXZlciwgX193cnBoYXNlX2Z1dGV4IG1pZ2h0IG5vdCBoYXZl IGJlZW4gc2V0IHRvIDEgeWV0IChlaXRoZXIKKyAgICAgYmVjYXVzZSBleHBs aWNpdCBoYW5kLW92ZXIgdG8gdGhlIHdyaXRlciBpcyBzdGlsbCBvbmdvaW5n LCBvciBiZWNhdXNlCisgICAgIHRoZSB3cml0ZXIgaGFzIHN0YXJ0ZWQgdGhl IHdyaXRlIHBoYXNlIGJ1dCBkb2VzIG5vdCB5ZXQgaGF2ZSB1cGRhdGVkCisg ICAgIF9fd3JwaGFzZV9mdXRleCkuICBUaGUgbGVhc3QgcmVjZW50IHZhbHVl IG9mIF9fd3JwaGFzZV9mdXRleCB3ZSBjYW4KKyAgICAgcmVhZCBmcm9tIGhl cmUgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgbGFzdCByZWFkIHBoYXNl IChiZWNhdXNlCisgICAgIHdlIHN5bmNocm9uaXplIHdpdGggdGhlIGxhc3Qg cmVhZGVyIGluIHRoaXMgcmVhZCBwaGFzZSB0aHJvdWdoCisgICAgIF9fcmVh ZGVyczsgc2VlIHRoZSB1c2Ugb2YgYWNxdWlyZSBNTyBvbiB0aGUgZmV0Y2hf YWRkIGFib3ZlKS4KKyAgICAgVGhlcmVmb3JlLCBpZiB3ZSBvYnNlcnZlIGEg dmFsdWUgb2YgMCBmb3IgX193cnBoYXNlX2Z1dGV4LCB3ZSBuZWVkCisgICAg IHRvIHN1YnNlcXVlbnRseSBjaGVjayB0aGF0IF9fcmVhZGVycyBub3cgaW5k aWNhdGVzIGEgcmVhZCBwaGFzZTsgd2UKKyAgICAgbmVlZCB0byB1c2UgYWNx dWlyZSBNTyBmb3IgdGhpcyBzbyB0aGF0IGlmIHdlIG9ic2VydmUgYSByZWFk IHBoYXNlLAorICAgICB3ZSB3aWxsIGFsc28gc2VlIHRoZSBtb2RpZmljYXRp b24gb2YgX193cnBoYXNlX2Z1dGV4IGJ5IHRoZSBwcmV2aW91cworICAgICB3 cml0ZXIuICBXZSB0aGVuIG5lZWQgdG8gbG9hZCBfX3dycGhhc2VfZnV0ZXgg YWdhaW4gYW5kIGNvbnRpbnVlIHRvCisgICAgIHdhaXQgaWYgaXQgaXMgbm90 IDAsIHNvIHRoYXQgd2UgZG8gbm90IHNraXAgZXhwbGljaXQgaGFuZC1vdmVy LgorICAgICBSZWxheGVkIE1PIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBsb2Fk IGZyb20gX193cnBoYXNlX2Z1dGV4IGJlY2F1c2UKKyAgICAgd2UganVzdCB1 c2UgaXQgYXMgYW4gaW5kaWNhdG9yIGZvciB3aGVuIHdlIGNhbiBwcm9jZWVk OyB3ZSB1c2UKKyAgICAgX19yZWFkZXJzIGFuZCB0aGUgYWNxdWlyZSBNTyBh Y2Nlc3NlcyB0byBpdCB0byBldmVudHVhbGx5IHJlYWQgZnJvbQorICAgICB0 aGUgcHJvcGVyIHN0b3JlcyB0byBfX3dycGhhc2VfZnV0ZXguICAqLworICB1 bnNpZ25lZCBpbnQgd3BmOworICBib29sIHJlYWR5ID0gZmFsc2U7CisgIGZv ciAoOzspCiAgICAgewotICAgICAgLyogV2UgYXJlIGluIGEgd3JpdGUgcGhh c2UsIGFuZCB0aGVyZSBtdXN0IGJlIGEgcHJpbWFyeSB3cml0ZXIgYmVjYXVz ZQotCSBvZiB0aGUgcHJldmlvdXMgbG9vcC4gIEJsb2NrIHVudGlsIHRoZSBw cmltYXJ5IHdyaXRlciBnaXZlcyB1cCB0aGUKLQkgd3JpdGUgcGhhc2UuICBU aGlzIGNhc2UgcmVxdWlyZXMgZXhwbGljaXQgaGFuZC1vdmVyIHVzaW5nCi0J IF9fd3JwaGFzZV9mdXRleC4KLQkgSG93ZXZlciwgX193cnBoYXNlX2Z1dGV4 IG1pZ2h0IG5vdCBoYXZlIGJlZW4gc2V0IHRvIDEgeWV0IChlaXRoZXIKLQkg YmVjYXVzZSBleHBsaWNpdCBoYW5kLW92ZXIgdG8gdGhlIHdyaXRlciBpcyBz dGlsbCBvbmdvaW5nLCBvciBiZWNhdXNlCi0JIHRoZSB3cml0ZXIgaGFzIHN0 YXJ0ZWQgdGhlIHdyaXRlIHBoYXNlIGJ1dCBkb2VzIG5vdCB5ZXQgaGF2ZSB1 cGRhdGVkCi0JIF9fd3JwaGFzZV9mdXRleCkuICBUaGUgbGVhc3QgcmVjZW50 IHZhbHVlIG9mIF9fd3JwaGFzZV9mdXRleCB3ZSBjYW4KLQkgcmVhZCBmcm9t IGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgbGFzdCByZWFkIHBo YXNlIChiZWNhdXNlCi0JIHdlIHN5bmNocm9uaXplIHdpdGggdGhlIGxhc3Qg cmVhZGVyIGluIHRoaXMgcmVhZCBwaGFzZSB0aHJvdWdoCi0JIF9fcmVhZGVy czsgc2VlIHRoZSB1c2Ugb2YgYWNxdWlyZSBNTyBvbiB0aGUgZmV0Y2hfYWRk IGFib3ZlKS4KLQkgVGhlcmVmb3JlLCBpZiB3ZSBvYnNlcnZlIGEgdmFsdWUg b2YgMCBmb3IgX193cnBoYXNlX2Z1dGV4LCB3ZSBuZWVkCi0JIHRvIHN1YnNl cXVlbnRseSBjaGVjayB0aGF0IF9fcmVhZGVycyBub3cgaW5kaWNhdGVzIGEg cmVhZCBwaGFzZTsgd2UKLQkgbmVlZCB0byB1c2UgYWNxdWlyZSBNTyBmb3Ig dGhpcyBzbyB0aGF0IGlmIHdlIG9ic2VydmUgYSByZWFkIHBoYXNlLAotCSB3 ZSB3aWxsIGFsc28gc2VlIHRoZSBtb2RpZmljYXRpb24gb2YgX193cnBoYXNl X2Z1dGV4IGJ5IHRoZSBwcmV2aW91cwotCSB3cml0ZXIuICBXZSB0aGVuIG5l ZWQgdG8gbG9hZCBfX3dycGhhc2VfZnV0ZXggYWdhaW4gYW5kIGNvbnRpbnVl IHRvCi0JIHdhaXQgaWYgaXQgaXMgbm90IDAsIHNvIHRoYXQgd2UgZG8gbm90 IHNraXAgZXhwbGljaXQgaGFuZC1vdmVyLgotCSBSZWxheGVkIE1PIGlzIHN1 ZmZpY2llbnQgZm9yIHRoZSBsb2FkIGZyb20gX193cnBoYXNlX2Z1dGV4IGJl Y2F1c2UKLQkgd2UganVzdCB1c2UgaXQgYXMgYW4gaW5kaWNhdG9yIGZvciB3 aGVuIHdlIGNhbiBwcm9jZWVkOyB3ZSB1c2UKLQkgX19yZWFkZXJzIGFuZCB0 aGUgYWNxdWlyZSBNTyBhY2Nlc3NlcyB0byBpdCB0byBldmVudHVhbGx5IHJl YWQgZnJvbQotCSB0aGUgcHJvcGVyIHN0b3JlcyB0byBfX3dycGhhc2VfZnV0 ZXguICAqLwotICAgICAgdW5zaWduZWQgaW50IHdwZjsKLSAgICAgIGJvb2wg cmVhZHkgPSBmYWxzZTsKLSAgICAgIGZvciAoOzspCisgICAgICB3aGlsZSAo KCh3cGYgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEu X193cnBoYXNlX2Z1dGV4KSkKKwkgIHwgUFRIUkVBRF9SV0xPQ0tfRlVURVhf VVNFRCkgPT0gKDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSkKIAl7 Ci0JICB3aGlsZSAoKCh3cGYgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcnds b2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4KSkKLQkgICAgICB8IFBUSFJF QURfUldMT0NLX0ZVVEVYX1VTRUQpID09ICgxIHwgUFRIUkVBRF9SV0xPQ0tf RlVURVhfVVNFRCkpCisJICBpbnQgcHJpdmF0ZSA9IF9fcHRocmVhZF9yd2xv Y2tfZ2V0X3ByaXZhdGUgKHJ3bG9jayk7CisJICBpZiAoKCh3cGYgJiBQVEhS RUFEX1JXTE9DS19GVVRFWF9VU0VEKSA9PSAwKQorCSAgICAgICYmICFhdG9t aWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX3JlbGF4ZWQKKwkJICAoJnJ3bG9j ay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwKKwkJICAgJndwZiwgd3BmIHwg UFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkpCisJICAgIGNvbnRpbnVlOwor CSAgaW50IGVyciA9IGZ1dGV4X2Fic3RpbWVkX3dhaXQgKCZyd2xvY2stPl9f ZGF0YS5fX3dycGhhc2VfZnV0ZXgsCisJICAgICAgMSB8IFBUSFJFQURfUldM T0NLX0ZVVEVYX1VTRUQsIGFic3RpbWUsIHByaXZhdGUpOworCSAgaWYgKGVy ciA9PSBFVElNRURPVVQpCiAJICAgIHsKLQkgICAgICBpbnQgcHJpdmF0ZSA9 IF9fcHRocmVhZF9yd2xvY2tfZ2V0X3ByaXZhdGUgKHJ3bG9jayk7Ci0JICAg ICAgaWYgKCgod3BmICYgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkgPT0g MCkKLQkJICAmJiAhYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19yZWxh eGVkCi0JCSAgICAgICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4 LAotCQkgICAgICAgJndwZiwgd3BmIHwgUFRIUkVBRF9SV0xPQ0tfRlVURVhf VVNFRCkpCi0JCWNvbnRpbnVlOwotCSAgICAgIGludCBlcnIgPSBmdXRleF9h YnN0aW1lZF93YWl0ICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4 LAotCQkgIDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VELCBhYnN0aW1l LCBwcml2YXRlKTsKLQkgICAgICBpZiAoZXJyID09IEVUSU1FRE9VVCkKKwkg ICAgICAvKiBJZiB3ZSB0aW1lZCBvdXQsIHdlIG5lZWQgdG8gdW5yZWdpc3Rl ci4gIElmIG5vIHJlYWQgcGhhc2UKKwkJIGhhcyBiZWVuIGluc3RhbGxlZCB3 aGlsZSB3ZSB3YWl0ZWQsIHdlIGNhbiBqdXN0IGRlY3JlbWVudAorCQkgdGhl IG51bWJlciBvZiByZWFkZXJzLiAgT3RoZXJ3aXNlLCB3ZSBqdXN0IGFjcXVp cmUgdGhlCisJCSBsb2NrLCB3aGljaCBpcyBhbGxvd2VkIGJlY2F1c2Ugd2Ug Z2l2ZSBubyBwcmVjaXNlIHRpbWluZworCQkgZ3VhcmFudGVlcywgYW5kIGJl Y2F1c2UgdGhlIHRpbWVvdXQgaXMgb25seSByZXF1aXJlZCB0bworCQkgYmUg aW4gZWZmZWN0IGlmIHdlIHdvdWxkIGhhdmUgaGFkIHRvIHdhaXQgZm9yIG90 aGVyCisJCSB0aHJlYWRzIChlLmcuLCBpZiBmdXRleF93YWl0IHdvdWxkIHRp bWUtb3V0IGltbWVkaWF0ZWx5CisJCSBiZWNhdXNlIHRoZSBnaXZlbiBhYnNv bHV0ZSB0aW1lIGlzIGluIHRoZSBwYXN0KS4gICovCisJICAgICAgciA9IGF0 b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMp OworCSAgICAgIHdoaWxlICgociAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0Up ICE9IDApCiAJCXsKLQkJICAvKiBJZiB3ZSB0aW1lZCBvdXQsIHdlIG5lZWQg dG8gdW5yZWdpc3Rlci4gIElmIG5vIHJlYWQgcGhhc2UKLQkJICAgICBoYXMg YmVlbiBpbnN0YWxsZWQgd2hpbGUgd2Ugd2FpdGVkLCB3ZSBjYW4ganVzdCBk ZWNyZW1lbnQKLQkJICAgICB0aGUgbnVtYmVyIG9mIHJlYWRlcnMuICBPdGhl cndpc2UsIHdlIGp1c3QgYWNxdWlyZSB0aGUKLQkJICAgICBsb2NrLCB3aGlj aCBpcyBhbGxvd2VkIGJlY2F1c2Ugd2UgZ2l2ZSBubyBwcmVjaXNlIHRpbWlu ZwotCQkgICAgIGd1YXJhbnRlZXMsIGFuZCBiZWNhdXNlIHRoZSB0aW1lb3V0 IGlzIG9ubHkgcmVxdWlyZWQgdG8KLQkJICAgICBiZSBpbiBlZmZlY3QgaWYg d2Ugd291bGQgaGF2ZSBoYWQgdG8gd2FpdCBmb3Igb3RoZXIKLQkJICAgICB0 aHJlYWRzIChlLmcuLCBpZiBmdXRleF93YWl0IHdvdWxkIHRpbWUtb3V0IGlt bWVkaWF0ZWx5Ci0JCSAgICAgYmVjYXVzZSB0aGUgZ2l2ZW4gYWJzb2x1dGUg dGltZSBpcyBpbiB0aGUgcGFzdCkuICAqLwotCQkgIHIgPSBhdG9taWNfbG9h ZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzKTsKLQkJICB3 aGlsZSAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSAhPSAwKQotCQkg ICAgewotCQkgICAgICAvKiBXZSBkb24ndCBuZWVkIHRvIG1ha2UgYW55dGhp bmcgZWxzZSB2aXNpYmxlIHRvCi0JCQkgb3RoZXJzIGJlc2lkZXMgdW5yZWdp c3RlcmluZywgc28gcmVsYXhlZCBNTyBpcwotCQkJIHN1ZmZpY2llbnQuICAq LwotCQkgICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19y ZWxheGVkCi0JCQkgICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLCAmciwK LQkJCSAgIHIgLSAoMSA8PCBQVEhSRUFEX1JXTE9DS19SRUFERVJfU0hJRlQp KSkKLQkJCXJldHVybiBFVElNRURPVVQ7Ci0JCSAgICAgIC8qIFRPRE8gQmFj ay1vZmYuICAqLwotCQkgICAgfQotCQkgIC8qIFVzZSB0aGUgYWNxdWlyZSBN TyBmZW5jZSB0byBtaXJyb3IgdGhlIHN0ZXBzIHRha2VuIGluIHRoZQotCQkg ICAgIG5vbi10aW1lb3V0IGNhc2UuICBOb3RlIHRoYXQgdGhlIHJlYWQgY2Fu IGhhcHBlbiBib3RoCi0JCSAgICAgaW4gdGhlIGF0b21pY19sb2FkIGFib3Zl IGFzIHdlbGwgYXMgaW4gdGhlIGZhaWx1cmUgY2FzZQotCQkgICAgIG9mIHRo ZSBDQVMgb3BlcmF0aW9uLiAgKi8KLQkJICBhdG9taWNfdGhyZWFkX2ZlbmNl X2FjcXVpcmUgKCk7Ci0JCSAgLyogV2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZv ciBleHBsaWNpdCBoYW5kLW92ZXIsIGJ1dCB3ZSBtdXN0Ci0JCSAgICAgbm90 IHVzZSBmdXRleF93YWl0IGFueW1vcmUgYmVjYXVzZSB3ZSB3b3VsZCBqdXN0 IHRpbWUgb3V0Ci0JCSAgICAgaW4gdGhpcyBjYXNlIGFuZCB0aHVzIG1ha2Ug dGhlIHNwaW4td2FpdGluZyB3ZSBuZWVkCi0JCSAgICAgdW5uZWNlc3Nhcmls eSBleHBlbnNpdmUuICAqLwotCQkgIHdoaWxlICgoYXRvbWljX2xvYWRfcmVs YXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCkKLQkJICAg ICAgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQotCQkgICAgICA9PSAo MSB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpKQotCQkgICAgewotCQkg ICAgICAvKiBUT0RPIEJhY2stb2ZmPyAgKi8KLQkJICAgIH0KLQkJICByZWFk eSA9IHRydWU7Ci0JCSAgYnJlYWs7CisJCSAgLyogV2UgZG9uJ3QgbmVlZCB0 byBtYWtlIGFueXRoaW5nIGVsc2UgdmlzaWJsZSB0bworCQkgICAgIG90aGVy cyBiZXNpZGVzIHVucmVnaXN0ZXJpbmcsIHNvIHJlbGF4ZWQgTU8gaXMKKwkJ ICAgICBzdWZmaWNpZW50LiAgKi8KKwkJICBpZiAoYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2Vfd2Vha19yZWxheGVkCisJCSAgICAgICgmcndsb2NrLT5fX2Rh dGEuX19yZWFkZXJzLCAmciwKKwkJICAgICAgIHIgLSAoMSA8PCBQVEhSRUFE X1JXTE9DS19SRUFERVJfU0hJRlQpKSkKKwkJICAgIHJldHVybiBFVElNRURP VVQ7CisJCSAgLyogVE9ETyBCYWNrLW9mZi4gICovCisJCX0KKwkgICAgICAv KiBVc2UgdGhlIGFjcXVpcmUgTU8gZmVuY2UgdG8gbWlycm9yIHRoZSBzdGVw cyB0YWtlbiBpbiB0aGUKKwkJIG5vbi10aW1lb3V0IGNhc2UuICBOb3RlIHRo YXQgdGhlIHJlYWQgY2FuIGhhcHBlbiBib3RoCisJCSBpbiB0aGUgYXRvbWlj X2xvYWQgYWJvdmUgYXMgd2VsbCBhcyBpbiB0aGUgZmFpbHVyZSBjYXNlCisJ CSBvZiB0aGUgQ0FTIG9wZXJhdGlvbi4gICovCisJICAgICAgYXRvbWljX3Ro cmVhZF9mZW5jZV9hY3F1aXJlICgpOworCSAgICAgIC8qIFdlIHN0aWxsIG5l ZWQgdG8gd2FpdCBmb3IgZXhwbGljaXQgaGFuZC1vdmVyLCBidXQgd2UgbXVz dAorCQkgbm90IHVzZSBmdXRleF93YWl0IGFueW1vcmUgYmVjYXVzZSB3ZSB3 b3VsZCBqdXN0IHRpbWUgb3V0CisJCSBpbiB0aGlzIGNhc2UgYW5kIHRodXMg bWFrZSB0aGUgc3Bpbi13YWl0aW5nIHdlIG5lZWQKKwkJIHVubmVjZXNzYXJp bHkgZXhwZW5zaXZlLiAgKi8KKwkgICAgICB3aGlsZSAoKGF0b21pY19sb2Fk X3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgpCisJ CSAgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQorCQkgID09ICgxIHwg UFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkpCisJCXsKKwkJICAvKiBUT0RP IEJhY2stb2ZmPyAgKi8KIAkJfQotCSAgICAgIC8qIElmIHdlIGdvdCBpbnRl cnJ1cHRlZCAoRUlOVFIpIG9yIHRoZSBmdXRleCB3b3JkIGRvZXMgbm90IGhh dmUgdGhlCi0JCSBleHBlY3RlZCB2YWx1ZSAoRUFHQUlOKSwgcmV0cnkuICAq LworCSAgICAgIHJlYWR5ID0gdHJ1ZTsKKwkgICAgICBicmVhazsKIAkgICAg fQotCSAgaWYgKHJlYWR5KQotCSAgICAvKiBTZWUgYmVsb3cuICAqLwotCSAg ICBicmVhazsKLQkgIC8qIFdlIG5lZWQgYWNxdWlyZSBNTyBoZXJlIHNvIHRo YXQgd2Ugc3luY2hyb25pemUgd2l0aCB0aGUgbG9jawotCSAgICAgcmVsZWFz ZSBvZiB0aGUgd3JpdGVyLCBhbmQgc28gdGhhdCB3ZSBvYnNlcnZlIGEgcmVj ZW50IHZhbHVlIG9mCi0JICAgICBfX3dycGhhc2VfZnV0ZXggKHNlZSBiZWxv dykuICAqLwotCSAgaWYgKChhdG9taWNfbG9hZF9hY3F1aXJlICgmcndsb2Nr LT5fX2RhdGEuX19yZWFkZXJzKQotCSAgICAgICYgUFRIUkVBRF9SV0xPQ0tf V1JQSEFTRSkgPT0gMCkKLQkgICAgLyogV2UgYXJlIGluIGEgcmVhZCBwaGFz ZSBub3csIHNvIHRoZSBsZWFzdCByZWNlbnQgbW9kaWZpY2F0aW9uIG9mCi0J ICAgICAgIF9fd3JwaGFzZV9mdXRleCB3ZSBjYW4gcmVhZCBmcm9tIGlzIHRo ZSBzdG9yZSBieSB0aGUgd3JpdGVyCi0JICAgICAgIHdpdGggdmFsdWUgMS4g IFRodXMsIG9ubHkgbm93IHdlIGNhbiBhc3N1bWUgdGhhdCBpZiB3ZSBvYnNl cnZlCi0JICAgICAgIGEgdmFsdWUgb2YgMCwgZXhwbGljaXQgaGFuZC1vdmVy IGlzIGZpbmlzaGVkLiBSZXRyeSB0aGUgbG9vcAotCSAgICAgICBhYm92ZSBv bmUgbW9yZSB0aW1lLiAgKi8KLQkgICAgcmVhZHkgPSB0cnVlOworCSAgLyog SWYgd2UgZ290IGludGVycnVwdGVkIChFSU5UUikgb3IgdGhlIGZ1dGV4IHdv cmQgZG9lcyBub3QgaGF2ZSB0aGUKKwkgICAgIGV4cGVjdGVkIHZhbHVlIChF QUdBSU4pLCByZXRyeS4gICovCiAJfQorICAgICAgaWYgKHJlYWR5KQorCS8q IFNlZSBiZWxvdy4gICovCisJYnJlYWs7CisgICAgICAvKiBXZSBuZWVkIGFj cXVpcmUgTU8gaGVyZSBzbyB0aGF0IHdlIHN5bmNocm9uaXplIHdpdGggdGhl IGxvY2sKKwkgcmVsZWFzZSBvZiB0aGUgd3JpdGVyLCBhbmQgc28gdGhhdCB3 ZSBvYnNlcnZlIGEgcmVjZW50IHZhbHVlIG9mCisJIF9fd3JwaGFzZV9mdXRl eCAoc2VlIGJlbG93KS4gICovCisgICAgICBpZiAoKGF0b21pY19sb2FkX2Fj cXVpcmUgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMpCisJICAmIFBUSFJF QURfUldMT0NLX1dSUEhBU0UpID09IDApCisJLyogV2UgYXJlIGluIGEgcmVh ZCBwaGFzZSBub3csIHNvIHRoZSBsZWFzdCByZWNlbnQgbW9kaWZpY2F0aW9u IG9mCisJICAgX193cnBoYXNlX2Z1dGV4IHdlIGNhbiByZWFkIGZyb20gaXMg dGhlIHN0b3JlIGJ5IHRoZSB3cml0ZXIKKwkgICB3aXRoIHZhbHVlIDEuICBU aHVzLCBvbmx5IG5vdyB3ZSBjYW4gYXNzdW1lIHRoYXQgaWYgd2Ugb2JzZXJ2 ZQorCSAgIGEgdmFsdWUgb2YgMCwgZXhwbGljaXQgaGFuZC1vdmVyIGlzIGZp bmlzaGVkLiBSZXRyeSB0aGUgbG9vcAorCSAgIGFib3ZlIG9uZSBtb3JlIHRp bWUuICAqLworCXJlYWR5ID0gdHJ1ZTsKICAgICB9CiAKICAgcmV0dXJuIDA7 CkBAIC03NDEsMTAgKzc0MSwyMyBAQCBfX3B0aHJlYWRfcndsb2NrX3dybG9j a19mdWxsIChwdGhyZWFkX3J3bG9ja190ICpyd2xvY2ssCiAJICByID0gYXRv bWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycyk7 CiAJfQogICAgICAgLyogT3VyIHNuYXBzaG90IG9mIF9fcmVhZGVycyBpcyB1 cC10by1kYXRlIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSB3ZQotCSBlaXRoZXIg c2V0IFdSTE9DS0VEIHVzaW5nIGEgQ0FTIG9yIHdlcmUgaGFuZGVkIG92ZXIg V1JMT0NLRUQgZnJvbQorCSBlaXRoZXIgc2V0IFdSTE9DS0VEIHVzaW5nIGEg Q0FTIChhbmQgdXBkYXRlIHIgYWNjb3JkaW5nbHkgYmVsb3csCisJIHdoaWNo IHdhcyB1c2VkIGFzIGV4cGVjdGVkIHZhbHVlIGZvciB0aGUgQ0FTKSBvciBn b3QgV1JMT0NLRUQgZnJvbQogCSBhbm90aGVyIHdyaXRlciB3aG9zZSBzbmFw c2hvdCBvZiBfX3JlYWRlcnMgd2UgaW5oZXJpdC4gICovCisgICAgICByIHw9 IFBUSFJFQURfUldMT0NLX1dSTE9DS0VEOwogICAgIH0KIAorICAvKiBXZSBh cmUgdGhlIHByaW1hcnkgd3JpdGVyOyBlbmFibGUgYmxvY2tpbmcgb24gX193 cml0ZXJzX2Z1dGV4LiAgUmVsYXhlZAorICAgICBNTyBpcyBzdWZmaWNpZW50 IGZvciBmdXRleCB3b3JkczsgYWNxdWlyZSBNTyBvbiB0aGUgcHJldmlvdXMK KyAgICAgbW9kaWZpY2F0aW9ucyBvZiBfX3JlYWRlcnMgZW5zdXJlcyB0aGF0 IHRoaXMgc3RvcmUgaGFwcGVucyBhZnRlciB0aGUKKyAgICAgc3RvcmUgb2Yg dmFsdWUgMCBieSB0aGUgcHJldmlvdXMgcHJpbWFyeSB3cml0ZXIuICAqLwor ICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3Jp dGVyc19mdXRleCwKKyAgICAgIDEgfCAobWF5X3NoYXJlX2Z1dGV4X3VzZWRf ZmxhZyA/IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQgOiAwKSk7CisKKyAg LyogSWYgd2UgYXJlIGluIGEgd3JpdGUgcGhhc2UsIHdlIGhhdmUgYWNxdWly ZWQgdGhlIGxvY2suICAqLworICBpZiAoKHIgJiBQVEhSRUFEX1JXTE9DS19X UlBIQVNFKSAhPSAwKQorICAgIGdvdG8gZG9uZTsKKwogICAvKiBJZiB3ZSBh cmUgaW4gYSByZWFkIHBoYXNlIGFuZCB0aGVyZSBhcmUgbm8gcmVhZGVycywg dHJ5IHRvIHN0YXJ0IGEgd3JpdGUKICAgICAgcGhhc2UuICAqLwogICB3aGls ZSAoKChyICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkKQEAgLTc1 OCwxNjYgKzc3MSwxNTYgQEAgX19wdGhyZWFkX3J3bG9ja193cmxvY2tfZnVs bCAocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrLAogCSAgJnIsIHIgfCBQVEhS RUFEX1JXTE9DS19XUlBIQVNFKSkKIAl7CiAJICAvKiBXZSBoYXZlIHN0YXJ0 ZWQgYSB3cml0ZSBwaGFzZSwgc28gbmVlZCB0byBlbmFibGUgcmVhZGVycyB0 byB3YWl0LgotCSAgICAgU2VlIHRoZSBzaW1pbGFyIGNhc2UgaW5fX3B0aHJl YWRfcndsb2NrX3JkbG9ja19mdWxsLiAgKi8KKwkgICAgIFNlZSB0aGUgc2lt aWxhciBjYXNlIGluIF9fcHRocmVhZF9yd2xvY2tfcmRsb2NrX2Z1bGwuICBV bmxpa2UgaW4KKwkgICAgIHRoYXQgc2ltaWxhciBjYXNlLCB3ZSBhcmUgdGhl IChvbmx5KSBwcmltYXJ5IHdyaXRlciBhbmQgc28gZG8KKwkgICAgIG5vdCBu ZWVkIHRvIHdha2UgYW5vdGhlciB3cml0ZXIuICAqLwogCSAgYXRvbWljX3N0 b3JlX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgs IDEpOwotCSAgLyogTWFrZSBzdXJlIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUg ZW5kIG9mIHRoZSBmdW5jdGlvbi4gICovCi0JICByIHw9IFBUSFJFQURfUldM T0NLX1dSUEhBU0U7Ci0JICBicmVhazsKKworCSAgZ290byBkb25lOwogCX0K ICAgICAgIC8qIFRPRE8gQmFjay1vZmYuICAqLwogICAgIH0KIAotICAvKiBX ZSBhcmUgdGhlIHByaW1hcnkgd3JpdGVyOyBlbmFibGUgYmxvY2tpbmcgb24g X193cml0ZXJzX2Z1dGV4LiAgUmVsYXhlZAotICAgICBNTyBpcyBzdWZmaWNp ZW50IGZvciBmdXRleCB3b3JkczsgYWNxdWlyZSBNTyBvbiB0aGUgcHJldmlv dXMKLSAgICAgbW9kaWZpY2F0aW9ucyBvZiBfX3JlYWRlcnMgZW5zdXJlcyB0 aGF0IHRoaXMgc3RvcmUgaGFwcGVucyBhZnRlciB0aGUKLSAgICAgc3RvcmUg b2YgdmFsdWUgMCBieSB0aGUgcHJldmlvdXMgcHJpbWFyeSB3cml0ZXIuICAq LwotICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9f d3JpdGVyc19mdXRleCwKLSAgICAgIDEgfCAobWF5X3NoYXJlX2Z1dGV4X3Vz ZWRfZmxhZyA/IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQgOiAwKSk7Ci0K LSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKChyICYgUFRIUkVBRF9SV0xPQ0tf V1JQSEFTRSkgPT0gMCkpCisgIC8qIFdlIGJlY2FtZSB0aGUgcHJpbWFyeSB3 cml0ZXIgaW4gYSByZWFkIHBoYXNlIGFuZCB0aGVyZSB3ZXJlIHJlYWRlcnMg d2hlbgorICAgICB3ZSBkaWQgKGJlY2F1c2Ugb2YgdGhlIHByZXZpb3VzIGxv b3ApLiAgVGh1cywgd2UgaGF2ZSB0byB3YWl0IGZvcgorICAgICBleHBsaWNp dCBoYW5kLW92ZXIgZnJvbSBvbmUgb2YgdGhlc2UgcmVhZGVycy4KKyAgICAg V2UgYmFzaWNhbGx5IGRvIHRoZSBzYW1lIHN0ZXBzIGFzIGZvciB0aGUgc2lt aWxhciBjYXNlIGluCisgICAgIF9fcHRocmVhZF9yd2xvY2tfcmRsb2NrX2Z1 bGwsIGV4Y2VwdCB0aGF0IHdlIGFkZGl0aW9uYWxseSBtaWdodCB0cnkKKyAg ICAgdG8gZGlyZWN0bHkgaGFuZCBvdmVyIHRvIGFub3RoZXIgd3JpdGVyIGFu ZCBuZWVkIHRvIHdha2UgdXAKKyAgICAgb3RoZXIgd3JpdGVycyBvciB3YWl0 aW5nIHJlYWRlcnMgKGkuZS4sIFBUSFJFQURfUldMT0NLX1JXQUlUSU5HKS4g ICovCisgIHVuc2lnbmVkIGludCB3cGY7CisgIGJvb2wgcmVhZHkgPSBmYWxz ZTsKKyAgZm9yICg7OykKICAgICB7Ci0gICAgICAvKiBXZSBhcmUgbm90IGlu IGEgcmVhZCBwaGFzZSBhbmQgdGhlcmUgYXJlIHJlYWRlcnMgKGJlY2F1c2Ug b2YgdGhlCi0JIHByZXZpb3VzIGxvb3ApLiAgVGh1cywgd2UgaGF2ZSB0byB3 YWl0IGZvciBleHBsaWNpdCBoYW5kLW92ZXIgZnJvbQotCSBvbmUgb2YgdGhl c2UgcmVhZGVycy4KLQkgV2UgYmFzaWNhbGx5IGRvIHRoZSBzYW1lIHN0ZXBz IGFzIGZvciB0aGUgc2ltaWxhciBjYXNlIGluCi0JIF9fcHRocmVhZF9yd2xv Y2tfcmRsb2NrX2Z1bGwsIGV4Y2VwdCB0aGF0IHdlIGFkZGl0aW9uYWxseSBt aWdodCB0cnkKLQkgdG8gZGlyZWN0bHkgaGFuZCBvdmVyIHRvIGFub3RoZXIg d3JpdGVyIGFuZCBuZWVkIHRvIHdha2UgdXAKLQkgb3RoZXIgd3JpdGVycyBv ciB3YWl0aW5nIHJlYWRlcnMgKGkuZS4sIFBUSFJFQURfUldMT0NLX1JXQUlU SU5HKS4gICovCi0gICAgICB1bnNpZ25lZCBpbnQgd3BmOwotICAgICAgYm9v bCByZWFkeSA9IGZhbHNlOwotICAgICAgZm9yICg7OykKKyAgICAgIHdoaWxl ICgoKHdwZiA9IGF0b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0 YS5fX3dycGhhc2VfZnV0ZXgpKQorCSAgfCBQVEhSRUFEX1JXTE9DS19GVVRF WF9VU0VEKSA9PSBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQogCXsKLQkg IHdoaWxlICgoKHdwZiA9IGF0b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2st Pl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgpKQotCSAgICAgIHwgUFRIUkVBRF9S V0xPQ0tfRlVURVhfVVNFRCkgPT0gUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNF RCkKKwkgIGludCBwcml2YXRlID0gX19wdGhyZWFkX3J3bG9ja19nZXRfcHJp dmF0ZSAocndsb2NrKTsKKwkgIGlmICgoKHdwZiAmIFBUSFJFQURfUldMT0NL X0ZVVEVYX1VTRUQpID09IDApCisJICAgICAgJiYgIWF0b21pY19jb21wYXJl X2V4Y2hhbmdlX3dlYWtfcmVsYXhlZAorCQkgICgmcndsb2NrLT5fX2RhdGEu X193cnBoYXNlX2Z1dGV4LCAmd3BmLAorCQkgICBQVEhSRUFEX1JXTE9DS19G VVRFWF9VU0VEKSkKKwkgICAgY29udGludWU7CisJICBpbnQgZXJyID0gZnV0 ZXhfYWJzdGltZWRfd2FpdCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9m dXRleCwKKwkgICAgICBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VELCBhYnN0 aW1lLCBwcml2YXRlKTsKKwkgIGlmIChlcnIgPT0gRVRJTUVET1VUKQogCSAg ICB7Ci0JICAgICAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2NrX2dl dF9wcml2YXRlIChyd2xvY2spOwotCSAgICAgIGlmICgoKHdwZiAmIFBUSFJF QURfUldMT0NLX0ZVVEVYX1VTRUQpID09IDApCi0JCSAgJiYgIWF0b21pY19j b21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsYXhlZAotCQkgICAgICAoJnJ3bG9j ay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgJndwZiwKLQkJICAgICAgIFBU SFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpKQotCQljb250aW51ZTsKLQkgICAg ICBpbnQgZXJyID0gZnV0ZXhfYWJzdGltZWRfd2FpdCAoJnJ3bG9jay0+X19k YXRhLl9fd3JwaGFzZV9mdXRleCwKLQkJICBQVEhSRUFEX1JXTE9DS19GVVRF WF9VU0VELCBhYnN0aW1lLCBwcml2YXRlKTsKLQkgICAgICBpZiAoZXJyID09 IEVUSU1FRE9VVCkKKwkgICAgICBpZiAocndsb2NrLT5fX2RhdGEuX19mbGFn cworCQkgICE9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlApCiAJ CXsKLQkJICBpZiAocndsb2NrLT5fX2RhdGEuX19mbGFncwotCQkgICAgICAh PSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QKQotCQkgICAgewot CQkgICAgICAvKiBXZSB0cnkgd3JpdGVyLS13cml0ZXIgaGFuZC1vdmVyLiAg Ki8KLQkJICAgICAgdW5zaWduZWQgaW50IHcgPSBhdG9taWNfbG9hZF9yZWxh eGVkCi0JCQkgICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzKTsKLQkJICAg ICAgaWYgKHcgIT0gMCkKLQkJCXsKLQkJCSAgLyogV2UgYXJlIGFib3V0IHRv IGhhbmQgb3ZlciBXUkxPQ0tFRCwgc28gd2UgbXVzdAotCQkJICAgICByZWxl YXNlIF9fd3JpdGVyc19mdXRleCB0b287IG90aGVyd2lzZSwgd2UnZCBoYXZl Ci0JCQkgICAgIGEgcGVuZGluZyBzdG9yZSwgd2hpY2ggY291bGQgYXQgbGVh c3QgcHJldmVudAotCQkJICAgICBvdGhlciB0aHJlYWRzIGZyb20gd2FpdGlu ZyB1c2luZyB0aGUgZnV0ZXgKLQkJCSAgICAgYmVjYXVzZSBpdCBjb3VsZCBp bnRlcmxlYXZlIHdpdGggdGhlIHN0b3JlcwotCQkJICAgICBieSBzdWJzZXF1 ZW50IHdyaXRlcnMuICBJbiB0dXJuLCB0aGlzIG1lYW5zIHRoYXQKLQkJCSAg ICAgd2UgaGF2ZSB0byBjbGVhbiB1cCB3aGVuIHdlIGRvIG5vdCBoYW5kIG92 ZXIKLQkJCSAgICAgV1JMT0NLRUQuCi0JCQkgICAgIFJlbGVhc2UgTU8gc28g dGhhdCBhbm90aGVyIHdyaXRlciB0aGF0IGdldHMKLQkJCSAgICAgV1JMT0NL RUQgZnJvbSB1cyBjYW4gdGFrZSBvdmVyIG91ciB2aWV3IG9mCi0JCQkgICAg IF9fcmVhZGVycy4gICovCi0JCQkgIHVuc2lnbmVkIGludCB3ZiA9IGF0b21p Y19leGNoYW5nZV9yZWxheGVkCi0JCQkgICAgICAoJnJ3bG9jay0+X19kYXRh Ll9fd3JpdGVyc19mdXRleCwgMCk7Ci0JCQkgIHdoaWxlICh3ICE9IDApCi0J CQkgICAgewotCQkJICAgICAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdl X3dlYWtfcmVsZWFzZQotCQkJCSAgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRl cnMsICZ3LAotCQkJCSAgICAgIHcgfCBQVEhSRUFEX1JXTE9DS19XUkhBTkRP VkVSKSkKLQkJCQl7Ci0JCQkJICAvKiBXYWtlIG90aGVyIHdyaXRlcnMuICAq LwotCQkJCSAgaWYgKCh3ZiAmIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQp ICE9IDApCi0JCQkJICAgIGZ1dGV4X3dha2UKLQkJCQkJKCZyd2xvY2stPl9f ZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDEsCi0JCQkJCSBwcml2YXRlKTsKLQkJ CQkgIHJldHVybiBFVElNRURPVVQ7Ci0JCQkJfQotCQkJICAgICAgLyogVE9E TyBCYWNrLW9mZi4gICovCi0JCQkgICAgfQotCQkJICAvKiBXZSBzdGlsbCBv d24gV1JMT0NLRUQgYW5kIHNvbWVvbmUgZWxzZSBtaWdodCBzZXQKLQkJCSAg ICAgYSB3cml0ZSBwaGFzZSBjb25jdXJyZW50bHksIHNvIGVuYWJsZSB3YWl0 aW5nCi0JCQkgICAgIGFnYWluLiAgTWFrZSBzdXJlIHdlIGRvbid0IGxvb3Nl IHRoZSBmbGFnIHRoYXQKLQkJCSAgICAgc2lnbmFscyB3aGV0aGVyIHRoZXJl IGFyZSB0aHJlYWRzIHdhaXRpbmcgb24KLQkJCSAgICAgdGhpcyBmdXRleC4g ICovCi0JCQkgIGF0b21pY19zdG9yZV9yZWxheGVkCi0JCQkgICAgICAoJnJ3 bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwgd2YpOwotCQkJfQotCQkg ICAgfQotCQkgIC8qIElmIHdlIHRpbWVkIG91dCBhbmQgd2UgYXJlIG5vdCBp biBhIHdyaXRlIHBoYXNlLCB3ZSBjYW4KLQkJICAgICBqdXN0IHN0b3AgYmVp bmcgYSBwcmltYXJ5IHdyaXRlci4gIE90aGVyd2lzZSwgd2UganVzdAotCQkg ICAgIGFjcXVpcmUgdGhlIGxvY2suICAqLwotCQkgIHIgPSBhdG9taWNfbG9h ZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzKTsKLQkJICBp ZiAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSA9PSAwKQorCQkgIC8q IFdlIHRyeSB3cml0ZXItLXdyaXRlciBoYW5kLW92ZXIuICAqLworCQkgIHVu c2lnbmVkIGludCB3ID0gYXRvbWljX2xvYWRfcmVsYXhlZAorCQkgICAgICAo JnJ3bG9jay0+X19kYXRhLl9fd3JpdGVycyk7CisJCSAgaWYgKHcgIT0gMCkK IAkJICAgIHsKLQkJICAgICAgLyogV2UgYXJlIGFib3V0IHRvIHJlbGVhc2Ug V1JMT0NLRUQsIHNvIHdlIG11c3QgcmVsZWFzZQotCQkJIF9fd3JpdGVyc19m dXRleCB0b287IHNlZSB0aGUgaGFuZGxpbmcgb2YKLQkJCSB3cml0ZXItLXdy aXRlciBoYW5kLW92ZXIgYWJvdmUuICAqLworCQkgICAgICAvKiBXZSBhcmUg YWJvdXQgdG8gaGFuZCBvdmVyIFdSTE9DS0VELCBzbyB3ZSBtdXN0CisJCQkg cmVsZWFzZSBfX3dyaXRlcnNfZnV0ZXggdG9vOyBvdGhlcndpc2UsIHdlJ2Qg aGF2ZQorCQkJIGEgcGVuZGluZyBzdG9yZSwgd2hpY2ggY291bGQgYXQgbGVh c3QgcHJldmVudAorCQkJIG90aGVyIHRocmVhZHMgZnJvbSB3YWl0aW5nIHVz aW5nIHRoZSBmdXRleAorCQkJIGJlY2F1c2UgaXQgY291bGQgaW50ZXJsZWF2 ZSB3aXRoIHRoZSBzdG9yZXMKKwkJCSBieSBzdWJzZXF1ZW50IHdyaXRlcnMu ICBJbiB0dXJuLCB0aGlzIG1lYW5zIHRoYXQKKwkJCSB3ZSBoYXZlIHRvIGNs ZWFuIHVwIHdoZW4gd2UgZG8gbm90IGhhbmQgb3ZlcgorCQkJIFdSTE9DS0VE LgorCQkJIFJlbGVhc2UgTU8gc28gdGhhdCBhbm90aGVyIHdyaXRlciB0aGF0 IGdldHMKKwkJCSBXUkxPQ0tFRCBmcm9tIHVzIGNhbiB0YWtlIG92ZXIgb3Vy IHZpZXcgb2YKKwkJCSBfX3JlYWRlcnMuICAqLwogCQkgICAgICB1bnNpZ25l ZCBpbnQgd2YgPSBhdG9taWNfZXhjaGFuZ2VfcmVsYXhlZAogCQkJICAoJnJ3 bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwgMCk7Ci0JCSAgICAgIHdo aWxlICgociAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpID09IDApCisJCSAg ICAgIHdoaWxlICh3ICE9IDApCiAJCQl7Ci0JCQkgIC8qIFdoaWxlIHdlIGRv bid0IG5lZWQgdG8gbWFrZSBhbnl0aGluZyBmcm9tIGEKLQkJCSAgICAgY2Fs bGVyJ3MgY3JpdGljYWwgc2VjdGlvbiB2aXNpYmxlIHRvIG90aGVyCi0JCQkg ICAgIHRocmVhZHMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGNoYW5n ZXMgdG8KLQkJCSAgICAgX193cml0ZXJzX2Z1dGV4IGFyZSBwcm9wZXJseSBv cmRlcmVkLgotCQkJICAgICBUaGVyZWZvcmUsIHVzZSByZWxlYXNlIE1PIHRv IHN5bmNocm9uaXplIHdpdGgKLQkJCSAgICAgc3Vic2VxdWVudCBwcmltYXJ5 IHdyaXRlcnMuICBBbHNvIHdha2UgdXAgYW55Ci0JCQkgICAgIHdhaXRpbmcg cmVhZGVycyBhcyB0aGV5IGFyZSB3YWl0aW5nIGJlY2F1c2Ugb2YKLQkJCSAg ICAgdXMuICAqLwogCQkJICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vf d2Vha19yZWxlYXNlCi0JCQkgICAgICAoJnJ3bG9jay0+X19kYXRhLl9fcmVh ZGVycywgJnIsCi0JCQkgICAgICAgKHIgXiBQVEhSRUFEX1JXTE9DS19XUkxP Q0tFRCkKLQkJCSAgICAgICAmIH4odW5zaWduZWQgaW50KSBQVEhSRUFEX1JX TE9DS19SV0FJVElORykpCisJCQkgICAgICAoJnJ3bG9jay0+X19kYXRhLl9f d3JpdGVycywgJncsCisJCQkJICB3IHwgUFRIUkVBRF9SV0xPQ0tfV1JIQU5E T1ZFUikpCiAJCQkgICAgewogCQkJICAgICAgLyogV2FrZSBvdGhlciB3cml0 ZXJzLiAgKi8KIAkJCSAgICAgIGlmICgod2YgJiBQVEhSRUFEX1JXTE9DS19G VVRFWF9VU0VEKSAhPSAwKQogCQkJCWZ1dGV4X3dha2UgKCZyd2xvY2stPl9f ZGF0YS5fX3dyaXRlcnNfZnV0ZXgsCi0JCQkJICAgIDEsIHByaXZhdGUpOwot CQkJICAgICAgLyogV2FrZSB3YWl0aW5nIHJlYWRlcnMuICAqLwotCQkJICAg ICAgaWYgKChyICYgUFRIUkVBRF9SV0xPQ0tfUldBSVRJTkcpICE9IDApCi0J CQkJZnV0ZXhfd2FrZSAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywKLQkJ CQkgICAgSU5UX01BWCwgcHJpdmF0ZSk7CisJCQkJCSAgICAxLCBwcml2YXRl KTsKIAkJCSAgICAgIHJldHVybiBFVElNRURPVVQ7CiAJCQkgICAgfQorCQkJ ICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KIAkJCX0KLQkJICAgICAgLyogV2Ug c3RpbGwgb3duIFdSTE9DS0VEIGFuZCBzb21lb25lIGVsc2UgbWlnaHQgc2V0 IGEKLQkJCSB3cml0ZSBwaGFzZSBjb25jdXJyZW50bHksIHNvIGVuYWJsZSB3 YWl0aW5nIGFnYWluLgotCQkJIE1ha2Ugc3VyZSB3ZSBkb24ndCBsb29zZSB0 aGUgZmxhZyB0aGF0IHNpZ25hbHMKLQkJCSB3aGV0aGVyIHRoZXJlIGFyZSB0 aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBmdXRleC4gICovCi0JCSAgICAgIGF0 b21pY19zdG9yZV9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJz X2Z1dGV4LAotCQkJICB3Zik7CisJCSAgICAgIC8qIFdlIHN0aWxsIG93biBX UkxPQ0tFRCBhbmQgc29tZW9uZSBlbHNlIG1pZ2h0IHNldAorCQkJIGEgd3Jp dGUgcGhhc2UgY29uY3VycmVudGx5LCBzbyBlbmFibGUgd2FpdGluZworCQkJ IGFnYWluLiAgTWFrZSBzdXJlIHdlIGRvbid0IGxvb3NlIHRoZSBmbGFnIHRo YXQKKwkJCSBzaWduYWxzIHdoZXRoZXIgdGhlcmUgYXJlIHRocmVhZHMgd2Fp dGluZyBvbgorCQkJIHRoaXMgZnV0ZXguICAqLworCQkgICAgICBhdG9taWNf c3RvcmVfcmVsYXhlZAorCQkJICAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVy c19mdXRleCwgd2YpOwogCQkgICAgfQotCQkgIC8qIFVzZSB0aGUgYWNxdWly ZSBNTyBmZW5jZSB0byBtaXJyb3IgdGhlIHN0ZXBzIHRha2VuIGluIHRoZQot CQkgICAgIG5vbi10aW1lb3V0IGNhc2UuICBOb3RlIHRoYXQgdGhlIHJlYWQg Y2FuIGhhcHBlbiBib3RoCi0JCSAgICAgaW4gdGhlIGF0b21pY19sb2FkIGFi b3ZlIGFzIHdlbGwgYXMgaW4gdGhlIGZhaWx1cmUgY2FzZQotCQkgICAgIG9m IHRoZSBDQVMgb3BlcmF0aW9uLiAgKi8KLQkJICBhdG9taWNfdGhyZWFkX2Zl bmNlX2FjcXVpcmUgKCk7Ci0JCSAgLyogV2Ugc3RpbGwgbmVlZCB0byB3YWl0 IGZvciBleHBsaWNpdCBoYW5kLW92ZXIsIGJ1dCB3ZSBtdXN0Ci0JCSAgICAg bm90IHVzZSBmdXRleF93YWl0IGFueW1vcmUuICAqLwotCQkgIHdoaWxlICgo YXRvbWljX2xvYWRfcmVsYXhlZAotCQkgICAgICAoJnJ3bG9jay0+X19kYXRh Ll9fd3JwaGFzZV9mdXRleCkKLQkJICAgICAgIHwgUFRIUkVBRF9SV0xPQ0tf RlVURVhfVVNFRCkKLQkJICAgICAgPT0gUFRIUkVBRF9SV0xPQ0tfRlVURVhf VVNFRCkKKwkJfQorCSAgICAgIC8qIElmIHdlIHRpbWVkIG91dCBhbmQgd2Ug YXJlIG5vdCBpbiBhIHdyaXRlIHBoYXNlLCB3ZSBjYW4KKwkJIGp1c3Qgc3Rv cCBiZWluZyBhIHByaW1hcnkgd3JpdGVyLiAgT3RoZXJ3aXNlLCB3ZSBqdXN0 CisJCSBhY3F1aXJlIHRoZSBsb2NrLiAgKi8KKwkgICAgICByID0gYXRvbWlj X2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycyk7CisJ ICAgICAgaWYgKChyICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkK KwkJeworCQkgIC8qIFdlIGFyZSBhYm91dCB0byByZWxlYXNlIFdSTE9DS0VE LCBzbyB3ZSBtdXN0IHJlbGVhc2UKKwkJICAgICBfX3dyaXRlcnNfZnV0ZXgg dG9vOyBzZWUgdGhlIGhhbmRsaW5nIG9mCisJCSAgICAgd3JpdGVyLS13cml0 ZXIgaGFuZC1vdmVyIGFib3ZlLiAgKi8KKwkJICB1bnNpZ25lZCBpbnQgd2Yg PSBhdG9taWNfZXhjaGFuZ2VfcmVsYXhlZAorCQkgICAgICAoJnJ3bG9jay0+ X19kYXRhLl9fd3JpdGVyc19mdXRleCwgMCk7CisJCSAgd2hpbGUgKChyICYg UFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkKIAkJICAgIHsKLQkJICAg ICAgLyogVE9ETyBCYWNrLW9mZi4gICovCisJCSAgICAgIC8qIFdoaWxlIHdl IGRvbid0IG5lZWQgdG8gbWFrZSBhbnl0aGluZyBmcm9tIGEKKwkJCSBjYWxs ZXIncyBjcml0aWNhbCBzZWN0aW9uIHZpc2libGUgdG8gb3RoZXIKKwkJCSB0 aHJlYWRzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IG91ciBjaGFuZ2VzIHRv CisJCQkgX193cml0ZXJzX2Z1dGV4IGFyZSBwcm9wZXJseSBvcmRlcmVkLgor CQkJIFRoZXJlZm9yZSwgdXNlIHJlbGVhc2UgTU8gdG8gc3luY2hyb25pemUg d2l0aAorCQkJIHN1YnNlcXVlbnQgcHJpbWFyeSB3cml0ZXJzLiAgQWxzbyB3 YWtlIHVwIGFueQorCQkJIHdhaXRpbmcgcmVhZGVycyBhcyB0aGV5IGFyZSB3 YWl0aW5nIGJlY2F1c2Ugb2YKKwkJCSB1cy4gICovCisJCSAgICAgIGlmIChh dG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX3JlbGVhc2UKKwkJCSAgKCZy d2xvY2stPl9fZGF0YS5fX3JlYWRlcnMsICZyLAorCQkJICAgKHIgXiBQVEhS RUFEX1JXTE9DS19XUkxPQ0tFRCkKKwkJCSAgICYgfih1bnNpZ25lZCBpbnQp IFBUSFJFQURfUldMT0NLX1JXQUlUSU5HKSkKKwkJCXsKKwkJCSAgLyogV2Fr ZSBvdGhlciB3cml0ZXJzLiAgKi8KKwkJCSAgaWYgKCh3ZiAmIFBUSFJFQURf UldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCisJCQkgICAgZnV0ZXhfd2FrZSAo JnJ3bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwKKwkJCQkxLCBwcml2 YXRlKTsKKwkJCSAgLyogV2FrZSB3YWl0aW5nIHJlYWRlcnMuICAqLworCQkJ ICBpZiAoKHIgJiBQVEhSRUFEX1JXTE9DS19SV0FJVElORykgIT0gMCkKKwkJ CSAgICBmdXRleF93YWtlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLAor CQkJCUlOVF9NQVgsIHByaXZhdGUpOworCQkJICByZXR1cm4gRVRJTUVET1VU OworCQkJfQogCQkgICAgfQotCQkgIHJlYWR5ID0gdHJ1ZTsKLQkJICBicmVh azsKKwkJICAvKiBXZSBzdGlsbCBvd24gV1JMT0NLRUQgYW5kIHNvbWVvbmUg ZWxzZSBtaWdodCBzZXQgYQorCQkgICAgIHdyaXRlIHBoYXNlIGNvbmN1cnJl bnRseSwgc28gZW5hYmxlIHdhaXRpbmcgYWdhaW4uCisJCSAgICAgTWFrZSBz dXJlIHdlIGRvbid0IGxvb3NlIHRoZSBmbGFnIHRoYXQgc2lnbmFscworCQkg ICAgIHdoZXRoZXIgdGhlcmUgYXJlIHRocmVhZHMgd2FpdGluZyBvbiB0aGlz IGZ1dGV4LiAgKi8KKwkJICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9j ay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwgd2YpOwogCQl9Ci0JICAgICAg LyogSWYgd2UgZ290IGludGVycnVwdGVkIChFSU5UUikgb3IgdGhlIGZ1dGV4 IHdvcmQgZG9lcyBub3QgaGF2ZQotCQkgdGhlIGV4cGVjdGVkIHZhbHVlIChF QUdBSU4pLCByZXRyeS4gICovCisJICAgICAgLyogVXNlIHRoZSBhY3F1aXJl IE1PIGZlbmNlIHRvIG1pcnJvciB0aGUgc3RlcHMgdGFrZW4gaW4gdGhlCisJ CSBub24tdGltZW91dCBjYXNlLiAgTm90ZSB0aGF0IHRoZSByZWFkIGNhbiBo YXBwZW4gYm90aAorCQkgaW4gdGhlIGF0b21pY19sb2FkIGFib3ZlIGFzIHdl bGwgYXMgaW4gdGhlIGZhaWx1cmUgY2FzZQorCQkgb2YgdGhlIENBUyBvcGVy YXRpb24uICAqLworCSAgICAgIGF0b21pY190aHJlYWRfZmVuY2VfYWNxdWly ZSAoKTsKKwkgICAgICAvKiBXZSBzdGlsbCBuZWVkIHRvIHdhaXQgZm9yIGV4 cGxpY2l0IGhhbmQtb3ZlciwgYnV0IHdlIG11c3QKKwkJIG5vdCB1c2UgZnV0 ZXhfd2FpdCBhbnltb3JlLiAgKi8KKwkgICAgICB3aGlsZSAoKGF0b21pY19s b2FkX3JlbGF4ZWQKKwkJICAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9m dXRleCkKKwkJICAgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQorCQkg ID09IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpCisJCXsKKwkJICAvKiBU T0RPIEJhY2stb2ZmLiAgKi8KKwkJfQorCSAgICAgIHJlYWR5ID0gdHJ1ZTsK KwkgICAgICBicmVhazsKIAkgICAgfQotCSAgLyogU2VlIHB0aHJlYWRfcnds b2NrX3JkbG9ja19mdWxsLiAgKi8KLQkgIGlmIChyZWFkeSkKLQkgICAgYnJl YWs7Ci0JICBpZiAoKGF0b21pY19sb2FkX2FjcXVpcmUgKCZyd2xvY2stPl9f ZGF0YS5fX3JlYWRlcnMpCi0JICAgICAgJiBQVEhSRUFEX1JXTE9DS19XUlBI QVNFKSAhPSAwKQotCSAgICByZWFkeSA9IHRydWU7CisJICAvKiBJZiB3ZSBn b3QgaW50ZXJydXB0ZWQgKEVJTlRSKSBvciB0aGUgZnV0ZXggd29yZCBkb2Vz IG5vdCBoYXZlCisJICAgICB0aGUgZXhwZWN0ZWQgdmFsdWUgKEVBR0FJTiks IHJldHJ5LiAgKi8KIAl9CisgICAgICAvKiBTZWUgcHRocmVhZF9yd2xvY2tf cmRsb2NrX2Z1bGwuICAqLworICAgICAgaWYgKHJlYWR5KQorCWJyZWFrOwor ICAgICAgaWYgKChhdG9taWNfbG9hZF9hY3F1aXJlICgmcndsb2NrLT5fX2Rh dGEuX19yZWFkZXJzKQorCSAgJiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSAh PSAwKQorCXJlYWR5ID0gdHJ1ZTsKICAgICB9CiAKKyBkb25lOgogICBhdG9t aWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fY3VyX3dyaXRl ciwKICAgICAgIFRIUkVBRF9HRVRNRU0gKFRIUkVBRF9TRUxGLCB0aWQpKTsK ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ucHRsL3RzdC1yd2xvY2syMC5j IGIvbnB0bC90c3Qtcndsb2NrMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mYzYzNmUzCi0tLSAvZGV2L251bGwKKysrIGIvbnB0 bC90c3Qtcndsb2NrMjAuYwpAQCAtMCwwICsxLDEyOCBAQAorLyogVGVzdCBw cm9ncmFtIGZvciBhIHJlYWQtcGhhc2UgLyB3cml0ZS1waGFzZSBleHBsaWNp dCBoYW5kLW92ZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxNyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhlIEdOVSBDIExp YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMg TGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVk ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxlcnJvci5oPgorI2luY2x1ZGUgPHB0 aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5o PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxhdG9taWMuaD4KKwor I2RlZmluZSBUSFJFQURTIDIKKworI2RlZmluZSBLSU5EIFBUSFJFQURfUldM T0NLX1BSRUZFUl9SRUFERVJfTlAKKworc3RhdGljIHB0aHJlYWRfcndsb2Nr X3QgbG9jazsKK3N0YXRpYyBpbnQgZG9uZSA9IDA7CisKK3N0YXRpYyB2b2lk KgordGYgKHZvaWQqIGFyZykKK3sKKyAgd2hpbGUgKGF0b21pY19sb2FkX3Jl bGF4ZWQgKCZkb25lKSA9PSAwKQorICAgIHsKKyAgICAgIGludCByY250ID0g MDsKKyAgICAgIGludCB3Y250ID0gMTAwOworICAgICAgaWYgKCh1aW50cHRy X3QpIGFyZyA9PSAwKQorCXsKKwkgIHJjbnQgPSAxOworCSAgd2NudCA9IDE7 CisJfQorCisgICAgICBkbworCXsKKwkgIGlmICh3Y250KQorCSAgICB7CisJ ICAgICAgcHRocmVhZF9yd2xvY2tfd3Jsb2NrICgmbG9jayk7CisJICAgICAg cHRocmVhZF9yd2xvY2tfdW5sb2NrICgmbG9jayk7CisJICAgICAgd2NudC0t OworCSAgfQorCSAgaWYgKHJjbnQpCisJICAgIHsKKwkgICAgICBwdGhyZWFk X3J3bG9ja19yZGxvY2sgKCZsb2NrKTsKKwkgICAgICBwdGhyZWFkX3J3bG9j a191bmxvY2sgKCZsb2NrKTsKKwkgICAgICByY250LS07CisJICB9CisJfQor ICAgICAgd2hpbGUgKChhdG9taWNfbG9hZF9yZWxheGVkICgmZG9uZSkgPT0g MCkgJiYgKHJjbnQgKyB3Y250ID4gMCkpOworCisgICAgfQorICAgIHJldHVy biBOVUxMOworfQorCisKKworc3RhdGljIGludAorZG9fdGVzdCAodm9pZCkK K3sKKyAgcHRocmVhZF90IHRocltUSFJFQURTXTsKKyAgaW50IG47CisgIHZv aWQgKnJlczsKKyAgcHRocmVhZF9yd2xvY2thdHRyX3QgYTsKKworICBpZiAo cHRocmVhZF9yd2xvY2thdHRyX2luaXQgKCZhKSAhPSAwKQorICAgIHsKKyAg ICAgIHB1dHMgKCJyd2xvY2thdHRyX3QgZmFpbGVkIik7CisgICAgICBleGl0 ICgxKTsKKyAgICB9CisKKyAgaWYgKHB0aHJlYWRfcndsb2NrYXR0cl9zZXRr aW5kX25wICgmYSwgS0lORCkgIT0gMCkKKyAgICB7CisgICAgICBwdXRzICgi cndsb2NrYXR0cl9zZXRraW5kIGZhaWxlZCIpOworICAgICAgZXhpdCAoMSk7 CisgICAgfQorCisgIGlmIChwdGhyZWFkX3J3bG9ja19pbml0ICgmbG9jaywg JmEpICE9IDApCisgICAgeworICAgICAgcHV0cyAoInJ3bG9ja19pbml0IGZh aWxlZCIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8qIE1ha2Ug c3RhbmRhcmQgZXJyb3IgdGhlIHNhbWUgYXMgc3RhbmRhcmQgb3V0cHV0LiAg Ki8KKyAgZHVwMiAoMSwgMik7CisKKyAgLyogTWFrZSBzdXJlIHdlIHNlZSBh bGwgbWVzc2FnZSwgZXZlbiB0aG9zZSBvbiBzdGRvdXQuICAqLworICBzZXR2 YnVmIChzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7CisKKyAgZm9yIChuID0g MDsgbiA8IFRIUkVBRFM7ICsrbikKKyAgICBpZiAocHRocmVhZF9jcmVhdGUg KCZ0aHJbbl0sIE5VTEwsIHRmLCAodm9pZCAqKSAodWludHB0cl90KSBuKSAh PSAwKQorICAgICAgeworCXB1dHMgKCJ0aHJlYWQgY3JlYXRlIGZhaWxlZCIp OworCWV4aXQgKDEpOworICAgICAgfQorICBzdHJ1Y3QgdGltZXNwZWMgZGVs YXk7CisgIGRlbGF5LnR2X3NlYyA9IDEwOworICBkZWxheS50dl9uc2VjID0g MDsKKyAgbmFub3NsZWVwICgmZGVsYXksIE5VTEwpOworICBhdG9taWNfc3Rv cmVfcmVsYXhlZCAoJmRvbmUsIDEpOworCisgIC8qIFdhaXQgZm9yIGFsbCB0 aGUgdGhyZWFkcy4gICovCisgIGZvciAobiA9IDA7IG4gPCBUSFJFQURTOyAr K24pCisgICAgaWYgKHB0aHJlYWRfam9pbiAodGhyW25dLCAmcmVzKSAhPSAw KQorICAgICAgeworCXB1dHMgKCJ3cml0ZXIgam9pbiBmYWlsZWQiKTsKKwll eGl0ICgxKTsKKyAgICAgIH0KKworICByZXR1cm4gMDsKK30KKworI2RlZmlu ZSBUSU1FT1VUIDE1CisjZGVmaW5lIFRFU1RfRlVOQ1RJT04gZG9fdGVzdCAo KQorI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIK --=-2+CLfSGkRl9AUNcb+YeZ--