From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18349 invoked by alias); 18 Oct 2004 02:00:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 18327 invoked from network); 18 Oct 2004 02:00:32 -0000 Received: from unknown (HELO dberlin.org) (68.164.203.246) by sourceware.org with SMTP; 18 Oct 2004 02:00:32 -0000 Received: from [127.0.0.1] (HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.2.1) with ESMTP-TLS id 7397793; Sun, 17 Oct 2004 22:00:32 -0400 Date: Mon, 18 Oct 2004 02:29:00 -0000 From: Daniel Berlin To: gcc-patches@gcc.gnu.org cc: dnovillo@redhat.com, amacleod@redhat.com Subject: [PATCH]: Implement must-def kill operand Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1998068438-1098064831=:5720" X-SW-Source: 2004-10/txt/msg01438.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1998068438-1098064831=:5720 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Content-length: 2122 [Diego, if this isn't accepted for mainline, i'd still like to put it on TCB, so if you could take a look at it, i'd appreciate it] This large but mostly mechnanical patch implements a RHS for must-defs so that we know what they are killing. These operands are renamed just like any other ssa operand. This is necessary for sinking type optimizations (including store motion) to work properly in a safe and efficient manner. In particular, it fixes PR 17133 This is a revision of the previous patch, the main change is that it no longer requires DCE to go into and out of SSA to rename the virtual must-def operands, as Andrew requested. The renaming it does in DCE is just the 3rd phase of the regular renamer (rewriting reaching definitions), ignoring unnecessary statements, non virtual operations, etc. This was the easiest, most correct way to do it that worked out okay on my whiteboard while sitting around waiting for one of Kenny's builds to finish. I'm pretty sure we can do less work if really necessary. Note that after DCE, some kill operand PHI nodes may all have the same arguments, and thus, be unnecessary. I spoke with Diego, and he felt that Conditional Copy Propagation should take care of it. For the mainline version, i haven't bothered to make the same type of renaming fixup occur for kill_redundant_phi_nodes, since it is dead on the tcb branch. I would like this to be considered for mainline, as it does fix at least 17133, and probably some other incorrect code generation bugs we haven't discovered yet of the same form. This patch has been regtested on i686-pc-linux-gnu, ppc64-linux, and powerpc-darwin. I attempted to get it tested on more, but Steven Bosscher tells me that SUSE's auto-tester is having some issues right now, so the patch testing didn't go so well. :) It was also bootstrapped and regtested on the tcb branch, on the same platforms, minus the kill_redundant_phi_nodes portion. I'll leave it to the wisdom of our release manager to decide what to do here (Boy am i glad i'm not the one who has to make the hard decisions) :P. --Dan --8323328-1998068438-1098064831=:5720 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mustdefdiff.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="mustdefdiff.diff" Content-length: 49699 MjAwNC0xMC0wMSAgRGFuaWVsIEJlcmxpbiA8ZGJlcmxpbkBkYmVybGluLm9y Zz4NCg0KCSogdHJlZS1jZmcuYyAocmV3cml0ZV90b19uZXdfc3NhX25hbWVz X2JiKTogQWxzbyByZXdyaXRlIG11c3QNCglkZWYga2lsbCBvcGVyYW5kLg0K CSogdHJlZS1mbG93LWlubGluZS5oOiBWX01VU1RfREVGX09QIGJlY2FtZSBW X01VU1RfREVGX1JFU1VMVC4NCgkoZ2V0X3ZfbXVzdF9kZWZfcmVzdWx0X3B0 cik6IE1vZGlmeSBmb3IgbmV3IHN0cnVjdHVyZSBvZg0KCXZfbXVzdF9kZWZz IGFycmF5Lg0KCShnZXRfdl9tdXN0X2RlZl9raWxsX3B0cik6IE5ldy4NCgko b3BfaXRlcl9uZXh0X3VzZSk6IEFkZCBzdXBwb3J0IGZvciB0aGUga2lsbCB0 aGF0IG9jY3VycyBpbiBWX01VU1RfREVGcy4NCgkob3BfaXRlcl9uZXh0X3Ry ZWUpOiBEaXR0by4gQWxzbyBWX01BWV9ERUZfT1AgYmVjYW1lIFZfTUFZX0RF Rl9SRVNVTFQuDQoJKG9wX2l0ZXJfbmV4dF9kZWYpOiBWX01BWV9ERUZfT1Ag YmVjYW1lIFZfTUFZX0RFRl9SRVNVTFQuDQoJKG9wX2l0ZXJfaW5pdCk6IElu aXRpYWxpemUgbmV3IG11c3R1IG1lbWJlcnMuDQoJKG9wX2l0ZXJfbmV4dF9t dXN0ZGVmKTogTmV3IGZ1bmN0aW9uLg0KCShvcF9pdGVyX2luaXRfbXVzdGRl Zik6IERpdHRvLg0KCSogdHJlZS1pbnRvLXNzYS5jIChtYXJrX2RlZl9zaXRl cyk6IEhhbmRsZSBtdXN0ZGVma2lsbCBvcGVyYW5kcy4NCgkoc3NhX21hcmtf ZGVmX3NpdGVzKTogRGl0dG8uDQoJKHJld3JpdGVfc3RtdCk6IERpdHRvLg0K CShzc2FfcmV3cml0ZV9zdG10KTogRGl0dG8uDQoJKiB0cmVlLXByZXR0eS1w cmludC5jIChkdW1wX3ZvcHMpOiBQcmludCBvdXQgTVVTVF9ERUYncyBzbyB0 aGF0DQoJdGhleSBpbmNsdWRlIHRoZSByaHMgbm93Lg0KCSogdHJlZS1zc2Et Y2NwLmMgKHZpc2l0X2Fzc2lnbm1lbnQpOiBWX01VU1RfREVGX09QIGJlY2Ft ZQ0KCVZfTVVTVF9ERUZfUkVTVUxULiANCgkqIE1ha2VmaWxlLmluICh0cmVl LXNzYS1kY2Uubyk6IEFkZCBkb213YWxrLmggZGVwZW5kZW5jeS4NCgkqIHRy ZWUtc3NhLWRjZS5jIChibG9ja19kZWZzX3N0YWNrKTogTmV3IHZhcmlhYmxl Lg0KCShkY2VfcmVnaXN0ZXJfbmV3X2RlZik6IE5ldyBmdW5jdGlvbi4NCgko ZGNlX3Jld3JpdGVfaW5pdGlhbGl6ZV9ibG9jayk6IERpdHRvLg0KCShkY2Vf cmV3cml0ZV9zdG10KTogRGl0dG8uDQoJKGRjZV9yZXdyaXRlX3BoaV9hcmd1 bWVudHMpOiBEaXR0by4NCgkoZGNlX3Jld3JpdGVfZmluYWxpemVfYmxvY2sp OiBEaXR0by4NCgkobWFya19vcGVyYW5kX25lY2Vzc2FyeV9pZl9waGkpOiBE aXR0by4NCgkobWFya19yZWFsbHlfbmVjZXNzYXJ5X2tpbGxfb3BlcmFuZF9w aGlzKTogRGl0dG8uDQoJKGZpeHVwX211c3RfZGVmX2tpbGxzKTogRGl0dG8u DQoJKHBlcmZvcm1fdHJlZV9zc2FfZGNlKTogQ2FsbCBmaXh1cF9tdXN0X2Rl Zl9raWxscy4NCgkqIHRyZWUtc3NhLWxvb3AtbWFuaXAuYyAoZmluZF91c2Vz X3RvX3JlbmFtZV9zdG10KTogTG9vayBhdCBraWxscw0KCWFzIHdlbGwuDQoJ KiB0cmVlLXNzYS1vcGVyYW5kcy5jIChhbGxvY2F0ZV92X21heV9kZWZfb3B0 eXBlKToNCgl2X21heV9kZWZfb3BlcmFuZF90eXBlX3QgYmVjYW1lIHZfZGVm X3VzZV9vcGVyYW5kX3R5cGVfdC4NCgkoYWxsb2NhdGVfdl9tdXN0X2RlZl9v cHR5cGUpIERpdHRvLg0KCShmaW5hbGl6ZV9zc2Ffdl9tdXN0X2RlZnMpOiBV cGRhdGUgZm9yIG5ldyBvcGVyYW5kIHR5cGUsIGFzIHdlbGwNCglhcyBzZXR0 aW5nIHRoZSB1c2UgcG9ydGlvbiBhcyB3ZWxsLg0KCShjb3B5X3ZpcnR1YWxf b3BlcmFuZHMpOiBDb3B5IHRoZSBraWxsIG9wZXJhbmQgYXMgd2VsbC4NCgko Y3JlYXRlX3NzYV9hcnRmaWNpYWxfbG9hZF9zdG10KTogVl9NVVNUX0RFRl9P UCBiZWNhbWUNCglWX01VU1RfREVGX1JFU1VMVC4gDQoJKiB0cmVlLXNzYS1v cGVyYW5kcy5oICh2X21heV9kZWZfb3BlcmFuZF90eXBlKTogUmVuYW1lZCB0 bw0KCXZfZGVmX3VzZV9vcGVyYW5kX3R5cGUuIA0KCSh2X211c3RfZGVmX29w dHlwZV9kKTogVXNlIHZfZGVmX3VzZV9vcGVyYW5kX3R5cGUuDQoJKFZfTVVT VF9ERUZfT1BfKik6IFJlbmFtZWQgdG8gVl9NVVNUX0RFRl9SRVNVTFRfKg0K CShWX01VU1RfREVGX0tJTExfKik6IE5ldyBtYWNyb3MuDQoJKHN0cnVjdCBz c2Ffb3BlcmFuZF9pdGVyYXRvcl9kKTogQWRkIG51bV92X211c3R1IGFuZCB2 X211c3R1X2kNCgltZW1iZXJzLg0KCVJlbmFtZSBleGlzdGluZyBtdXN0X2kg YW5kIG51bV92X211c3QgbWVtYmVycyB0byBtdXN0ZF9pIGFuZA0KCW51bV92 X211c3RkLiANCgkoU1NBX09QX1ZNVVNUREVGS0lMTCk6IE5ldyBmbGFnLg0K CShTU0FfT1BfVklSVFVBTF9LSUxMUyk6IE5ldyBmbGFnLg0KCShTU0FfT1Bf QUxMX09QRVJBTkRTKTogQWRkIGluIFNTQV9PUF9BTExfS0lMTFMuDQoJKFNT QV9PUF9BTExfS0lMTFMpOiBOZXcgZmxhZy4NCgkoRk9SX0VBQ0hfU1NBX01V U1RERUZfT1BFUkFORCk6IE5ldyBtYWNyby4NCgkqIHRyZWUtc3NhLmMgKHZl cmlmeV9zc2EpOiBWZXJpZnkgdmlydHVhbCBraWxscyBhcyB3ZWxsLg0KCSog dHJlZS12ZWN0b3JpemVyLmMgKHZlY3RfY3JlYXRlX2RhdGFfcmVmX3B0cik6 IFZfTVVTVF9ERUZfT1ANCgliZWNhbWUgVl9NVVNUX0RFRl9SRVNVTFQuDQoJ KiB0cmVlLWRmYS5jIChjb21wdXRlX2ltbWVkaWF0ZV91c2VzX2Zvcl9zdG10 KTogQWRkIGtpbGxzIGludG8gdGhlDQoJaW1tZWRpYXRlIHVzZXMuDQoNCklu ZGV4OiBNYWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC9jdnMvZ2NjL2djYy9nY2MvTWFrZWZpbGUuaW4sdg0KcmV0cmll dmluZyByZXZpc2lvbiAxLjE0MTENCmRpZmYgLXUgLXAgLXIxLjE0MTEgTWFr ZWZpbGUuaW4NCi0tLSBNYWtlZmlsZS5pbgkxNCBPY3QgMjAwNCAyMzoxNTox OSAtMDAwMAkxLjE0MTENCisrKyBNYWtlZmlsZS5pbgkxNyBPY3QgMjAwNCAy MTowMjowNSAtMDAwMA0KQEAgLTE5NTAsNyArMTk1MCw3IEBAIGxjbS5vIDog bGNtLmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY28NCiAgICAkKEJBU0lD X0JMT0NLX0gpICQoVE1fUF9IKSAkKERGX0gpIGZ1bmN0aW9uLmgNCiB0cmVl LXNzYS1kY2UubyA6IHRyZWUtc3NhLWRjZS5jICQoQ09ORklHX0gpIHN5c3Rl bS5oIGVycm9ycy5oICQoVFJFRV9IKSBcDQogICAgICQoUlRMX0gpICQoVE1f UF9IKSAkKFRSRUVfRkxPV19IKSBkaWFnbm9zdGljLmggJChUSU1FVkFSX0gp ICQoVE1fSCkgXA0KLSAgICBjb3JldHlwZXMuaCAkKFRSRUVfRFVNUF9IKSB0 cmVlLXBhc3MuaCAkKEZMQUdTX0gpDQorICAgIGNvcmV0eXBlcy5oICQoVFJF RV9EVU1QX0gpIHRyZWUtcGFzcy5oICQoRkxBR1NfSCkgZG9td2Fsay5oDQog dHJlZS1zc2EtY2NwLm8gOiB0cmVlLXNzYS1jY3AuYyAkKFRSRUVfRkxPV19I KSAkKENPTkZJR19IKSBcDQogICAgJChTWVNURU1fSCkgJChSVExfSCkgJChU UkVFX0gpICQoVE1fUF9IKSAkKEVYUFJfSCkgJChHR0NfSCkgb3V0cHV0Lmgg XA0KICAgIGRpYWdub3N0aWMuaCBlcnJvcnMuaCBmdW5jdGlvbi5oICQoVElN RVZBUl9IKSAkKFRNX0gpIGNvcmV0eXBlcy5oIFwNCkluZGV4OiB0cmVlLWNm Zy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9n Y2MvZ2NjL2djYy90cmVlLWNmZy5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g Mi43OA0KZGlmZiAtdSAtcCAtcjIuNzggdHJlZS1jZmcuYw0KLS0tIHRyZWUt Y2ZnLmMJMTYgT2N0IDIwMDQgMTY6NTg6NTkgLTAwMDAJMi43OA0KKysrIHRy ZWUtY2ZnLmMJMTcgT2N0IDIwMDQgMjE6MDI6MDUgLTAwMDANCkBAIC00NDU3 LDggKzQ0NTcsMTIgQEAgcmV3cml0ZV90b19uZXdfc3NhX25hbWVzX2JiIChi YXNpY19ibG9jaw0KIA0KICAgICAgIHZfbXVzdF9kZWZzID0gVl9NVVNUX0RF Rl9PUFMgKGFubik7DQogICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9WX01V U1RfREVGUyAodl9tdXN0X2RlZnMpOyBpKyspDQotCXJld3JpdGVfdG9fbmV3 X3NzYV9uYW1lc19kZWYNCi0JCShWX01VU1RfREVGX09QX1BUUiAodl9tdXN0 X2RlZnMsIGkpLCBzdG10LCBtYXApOw0KKwl7DQorCSAgcmV3cml0ZV90b19u ZXdfc3NhX25hbWVzX2RlZg0KKwkgICAgKFZfTVVTVF9ERUZfUkVTVUxUX1BU UiAodl9tdXN0X2RlZnMsIGkpLCBzdG10LCBtYXApOw0KKwkgIHJld3JpdGVf dG9fbmV3X3NzYV9uYW1lc191c2UNCisJICAgIChWX01VU1RfREVGX0tJTExf UFRSICh2X211c3RfZGVmcywgaSksICBtYXApOw0KKwl9DQogICAgIH0NCiAN CiAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+c3VjY3MpDQpJbmRleDog dHJlZS1kZmEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC9jdnMvZ2NjL2djYy9nY2MvdHJlZS1kZmEuYyx2DQpyZXRyaWV2aW5nIHJl dmlzaW9uIDIuMzcNCmRpZmYgLXUgLXAgLXIyLjM3IHRyZWUtZGZhLmMNCi0t LSB0cmVlLWRmYS5jCTE0IE9jdCAyMDA0IDIzOjE1OjIwIC0wMDAwCTIuMzcN CisrKyB0cmVlLWRmYS5jCTE3IE9jdCAyMDA0IDIxOjAyOjA1IC0wMDAwDQpA QCAtMzEzLDcgKzMxMywxNCBAQCBjb21wdXRlX2ltbWVkaWF0ZV91c2VzX2Zv cl9zdG10ICh0cmVlIHN0DQogCSAgaWYgKCFJU19FTVBUWV9TVE1UIChpbW1f cmRlZl9zdG10KSAmJiAoIWNhbGNfZm9yIHx8IGNhbGNfZm9yICh1c2UpKSkN CiAJICAgIGFkZF9pbW1lZGlhdGVfdXNlIChpbW1fcmRlZl9zdG10LCBzdG10 KTsNCiAJfQ0KLSAgICB9DQorICAgICAgDQorICAgICAgRk9SX0VBQ0hfU1NB X1RSRUVfT1BFUkFORCAodXNlLCBzdG10LCBpdGVyLCBTU0FfT1BfQUxMX0tJ TExTKQ0KKwl7DQorCSAgdHJlZSBpbW1fcmRlZl9zdG10ID0gU1NBX05BTUVf REVGX1NUTVQgKHVzZSk7DQorCSAgaWYgKCFJU19FTVBUWV9TVE1UIChpbW1f cmRlZl9zdG10KSAmJiAoIWNhbGNfZm9yIHx8IGNhbGNfZm9yICh1c2UpKSkN CisJICAgIGFkZF9pbW1lZGlhdGVfdXNlIChpbW1fcmRlZl9zdG10LCBzdG10 KTsNCisJfQ0KKyAgICB9ICANCiB9DQogDQogDQpJbmRleDogdHJlZS1mbG93 LWlubGluZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L2N2cy9nY2MvZ2NjL2djYy90cmVlLWZsb3ctaW5saW5lLmgsdg0KcmV0cmll dmluZyByZXZpc2lvbiAyLjI0DQpkaWZmIC11IC1wIC1yMi4yNCB0cmVlLWZs b3ctaW5saW5lLmgNCi0tLSB0cmVlLWZsb3ctaW5saW5lLmgJNyBPY3QgMjAw NCAyMjoyNDo0MyAtMDAwMAkyLjI0DQorKysgdHJlZS1mbG93LWlubGluZS5o CTE3IE9jdCAyMDA0IDIxOjAyOjA1IC0wMDAwDQpAQCAtMjY3LDE0ICsyNjcs MjUgQEAgZ2V0X3Z1c2Vfb3BfcHRyKHZ1c2Vfb3B0eXBlIHZ1c2VzLCB1bnNp Zw0KICAgcmV0dXJuIG9wOw0KIH0NCiANCi0vKiBSZXR1cm4gYSBkZWZfb3Bl cmFuZF9wIHRoYXQgaXMgdGhlIFZfTVVTVF9ERUZfT1AgZm9yIHRoZQ0KKy8q IFJldHVybiBhIGRlZl9vcGVyYW5kX3AgdGhhdCBpcyB0aGUgVl9NVVNUX0RF Rl9SRVNVTFQgZm9yIHRoZQ0KICAgIFZfTVVTVF9ERUYgYXQgSU5ERVggaW4g dGhlIFZfTVVTVF9ERUZTIGFycmF5LiAgKi8NCiBzdGF0aWMgaW5saW5lIGRl Zl9vcGVyYW5kX3ANCi1nZXRfdl9tdXN0X2RlZl9vcF9wdHIgKHZfbXVzdF9k ZWZfb3B0eXBlIHZfbXVzdF9kZWZzLCB1bnNpZ25lZCBpbnQgaW5kZXgpDQor Z2V0X3ZfbXVzdF9kZWZfcmVzdWx0X3B0ciAodl9tdXN0X2RlZl9vcHR5cGUg dl9tdXN0X2RlZnMsIHVuc2lnbmVkIGludCBpbmRleCkNCiB7DQogICBkZWZf b3BlcmFuZF9wIG9wOw0KICAgZ2NjX2Fzc2VydCAoaW5kZXggPCB2X211c3Rf ZGVmcy0+bnVtX3ZfbXVzdF9kZWZzKTsNCi0gIG9wLmRlZiA9ICYodl9tdXN0 X2RlZnMtPnZfbXVzdF9kZWZzW2luZGV4XSk7DQorICBvcC5kZWYgPSAmKHZf bXVzdF9kZWZzLT52X211c3RfZGVmc1tpbmRleF0uZGVmKTsNCisgIHJldHVy biBvcDsNCit9DQorDQorLyogUmV0dXJuIGEgdXNlX29wZXJhbmRfcCB0aGF0 IGlzIHRoZSBWX01VU1RfREVGX0tJTEwgZm9yIHRoZSANCisgICBWX01VU1Rf REVGIGF0IElOREVYIGluIHRoZSBWX01VU1RfREVGUyBhcnJheS4gICovDQor c3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wDQorZ2V0X3ZfbXVzdF9kZWZf a2lsbF9wdHIgKHZfbXVzdF9kZWZfb3B0eXBlIHZfbXVzdF9kZWZzLCB1bnNp Z25lZCBpbnQgaW5kZXgpDQorew0KKyAgdXNlX29wZXJhbmRfcCBvcDsNCisg IGdjY19hc3NlcnQgKGluZGV4IDwgdl9tdXN0X2RlZnMtPm51bV92X211c3Rf ZGVmcyk7DQorICBvcC51c2UgPSAmKHZfbXVzdF9kZWZzLT52X211c3RfZGVm c1tpbmRleF0udXNlKTsNCiAgIHJldHVybiBvcDsNCiB9DQogDQpAQCAtNjcw LDcgKzY4MSwxMiBAQCBvcF9pdGVyX25leHRfdXNlIChzc2Ffb3BfaXRlciAq cHRyKQ0KICAgaWYgKHB0ci0+dl9tYXl1X2kgPCBwdHItPm51bV92X21heXUp DQogICAgIHsNCiAgICAgICByZXR1cm4gVl9NQVlfREVGX09QX1BUUiAocHRy LT5vcHMtPnZfbWF5X2RlZl9vcHMsDQotCQkJCSAgICAgICAocHRyLT52X21h eXVfaSkrKyk7DQorCQkJICAgICAgIChwdHItPnZfbWF5dV9pKSsrKTsNCisg ICAgfQ0KKyAgaWYgKHB0ci0+dl9tdXN0dV9pIDwgcHRyLT5udW1fdl9tdXN0 dSkNCisgICAgew0KKyAgICAgIHJldHVybiBWX01VU1RfREVGX0tJTExfUFRS IChwdHItPm9wcy0+dl9tdXN0X2RlZl9vcHMsDQorCQkJCSAgKHB0ci0+dl9t dXN0dV9pKSsrKTsNCiAgICAgfQ0KICAgcHRyLT5kb25lID0gdHJ1ZTsNCiAg IHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7DQpAQCAtNjg0LDEwICs3MDAs MTAgQEAgb3BfaXRlcl9uZXh0X2RlZiAoc3NhX29wX2l0ZXIgKnB0cikNCiAg ICAgew0KICAgICAgIHJldHVybiBERUZfT1BfUFRSIChwdHItPm9wcy0+ZGVm X29wcywgKHB0ci0+ZGVmX2kpKyspOw0KICAgICB9DQotICBpZiAocHRyLT52 X211c3RfaSA8IHB0ci0+bnVtX3ZfbXVzdCkNCisgIGlmIChwdHItPnZfbXVz dGRfaSA8IHB0ci0+bnVtX3ZfbXVzdGQpDQogICAgIHsNCi0gICAgICByZXR1 cm4gVl9NVVNUX0RFRl9PUF9QVFIgKHB0ci0+b3BzLT52X211c3RfZGVmX29w cywgDQotCQkJCQkocHRyLT52X211c3RfaSkrKyk7DQorICAgICAgcmV0dXJu IFZfTVVTVF9ERUZfUkVTVUxUX1BUUiAocHRyLT5vcHMtPnZfbXVzdF9kZWZf b3BzLCANCisJCQkJCShwdHItPnZfbXVzdGRfaSkrKyk7DQogICAgIH0NCiAg IGlmIChwdHItPnZfbWF5ZF9pIDwgcHRyLT5udW1fdl9tYXlkKQ0KICAgICB7 DQpAQCAtNzE0LDE0ICs3MzAsMTggQEAgb3BfaXRlcl9uZXh0X3RyZWUgKHNz YV9vcF9pdGVyICpwdHIpDQogICAgIHsNCiAgICAgICByZXR1cm4gVl9NQVlf REVGX09QIChwdHItPm9wcy0+dl9tYXlfZGVmX29wcywgKHB0ci0+dl9tYXl1 X2kpKyspOw0KICAgICB9DQorICBpZiAocHRyLT52X211c3R1X2kgPCBwdHIt Pm51bV92X211c3R1KQ0KKyAgICB7DQorICAgICAgcmV0dXJuIFZfTVVTVF9E RUZfS0lMTCAocHRyLT5vcHMtPnZfbXVzdF9kZWZfb3BzLCAocHRyLT52X211 c3R1X2kpKyspOw0KKyAgICB9DQogICBpZiAocHRyLT5kZWZfaSA8IHB0ci0+ bnVtX2RlZikNCiAgICAgew0KICAgICAgIHJldHVybiBERUZfT1AgKHB0ci0+ b3BzLT5kZWZfb3BzLCAocHRyLT5kZWZfaSkrKyk7DQogICAgIH0NCi0gIGlm IChwdHItPnZfbXVzdF9pIDwgcHRyLT5udW1fdl9tdXN0KQ0KKyAgaWYgKHB0 ci0+dl9tdXN0ZF9pIDwgcHRyLT5udW1fdl9tdXN0ZCkNCiAgICAgew0KLSAg ICAgIHJldHVybiBWX01VU1RfREVGX09QIChwdHItPm9wcy0+dl9tdXN0X2Rl Zl9vcHMsIA0KLQkJCQkJKHB0ci0+dl9tdXN0X2kpKyspOw0KKyAgICAgIHJl dHVybiBWX01VU1RfREVGX1JFU1VMVCAocHRyLT5vcHMtPnZfbXVzdF9kZWZf b3BzLCANCisJCQkJCShwdHItPnZfbXVzdGRfaSkrKyk7DQogICAgIH0NCiAg IGlmIChwdHItPnZfbWF5ZF9pIDwgcHRyLT5udW1fdl9tYXlkKQ0KICAgICB7 DQpAQCAtNzQ5LDE0ICs3NjksMTcgQEAgb3BfaXRlcl9pbml0IChzc2Ffb3Bf aXRlciAqcHRyLCB0cmVlIHN0bQ0KIAkJICAgICA/ICBOVU1fVl9NQVlfREVG UyAob3BzLT52X21heV9kZWZfb3BzKSA6IDA7DQogICBwdHItPm51bV92X21h eWQgPSAoZmxhZ3MgJiBTU0FfT1BfVk1BWURFRikgDQogCQkgICAgID8gIE5V TV9WX01BWV9ERUZTIChvcHMtPnZfbWF5X2RlZl9vcHMpIDogMDsNCi0gIHB0 ci0+bnVtX3ZfbXVzdCA9IChmbGFncyAmIFNTQV9PUF9WTVVTVERFRikgDQor ICBwdHItPm51bV92X211c3R1ID0gKGZsYWdzICYgU1NBX09QX1ZNVVNUREVG S0lMTCkNCisgICAgICAgICAgICAgICAgICAgICA/IE5VTV9WX01VU1RfREVG UyAob3BzLT52X211c3RfZGVmX29wcykgOiAwOw0KKyAgcHRyLT5udW1fdl9t dXN0ZCA9IChmbGFncyAmIFNTQV9PUF9WTVVTVERFRikgDQogCQkgICAgID8g TlVNX1ZfTVVTVF9ERUZTIChvcHMtPnZfbXVzdF9kZWZfb3BzKSA6IDA7DQog ICBwdHItPmRlZl9pID0gMDsNCiAgIHB0ci0+dXNlX2kgPSAwOw0KICAgcHRy LT52dXNlX2kgPSAwOw0KICAgcHRyLT52X21heXVfaSA9IDA7DQogICBwdHIt PnZfbWF5ZF9pID0gMDsNCi0gIHB0ci0+dl9tdXN0X2kgPSAwOw0KKyAgcHRy LT52X211c3R1X2kgPSAwOw0KKyAgcHRyLT52X211c3RkX2kgPSAwOw0KIH0N CiANCiAvKiBJbml0aWFsaXplIGl0ZXJhdG9yIFBUUiB0byB0aGUgdXNlIG9w ZXJhbmRzIGluIFNUTVQgYmFzZWQgb24gRkxBR1MuIFJldHVybg0KQEAgLTc4 Niw2ICs4MDksMjUgQEAgb3BfaXRlcl9pbml0X3RyZWUgKHNzYV9vcF9pdGVy ICpwdHIsIHRyZQ0KICAgcmV0dXJuIG9wX2l0ZXJfbmV4dF90cmVlIChwdHIp Ow0KIH0NCiANCisvKiBHZXQgdGhlIG5leHQgaXRlcmF0b3IgbXVzdGRlZiB2 YWx1ZSBmb3IgUFRSLCByZXR1cm5pbmcgdGhlIG11c3RkZWYgdmFsdWVzIGlu DQorICAgS0lMTCBhbmQgREVGLiAgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQN CitvcF9pdGVyX25leHRfbXVzdGRlZiAodXNlX29wZXJhbmRfcCAqa2lsbCwg ZGVmX29wZXJhbmRfcCAqZGVmLCBzc2Ffb3BfaXRlciAqcHRyKQ0KK3sNCisg IGlmIChwdHItPnZfbXVzdHVfaSA8IHB0ci0+bnVtX3ZfbXVzdHUpDQorICAg IHsNCisgICAgICAqZGVmID0gVl9NVVNUX0RFRl9SRVNVTFRfUFRSIChwdHIt Pm9wcy0+dl9tdXN0X2RlZl9vcHMsIHB0ci0+dl9tdXN0dV9pKTsNCisgICAg ICAqa2lsbCA9IFZfTVVTVF9ERUZfS0lMTF9QVFIgKHB0ci0+b3BzLT52X211 c3RfZGVmX29wcywgKHB0ci0+dl9tdXN0dV9pKSsrKTsNCisgICAgICByZXR1 cm47DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgICpkZWYgPSBO VUxMX0RFRl9PUEVSQU5EX1A7DQorICAgICAgKmtpbGwgPSBOVUxMX1VTRV9P UEVSQU5EX1A7DQorICAgIH0NCisgIHB0ci0+ZG9uZSA9IHRydWU7DQorICBy ZXR1cm47DQorfQ0KIC8qIEdldCB0aGUgbmV4dCBpdGVyYXRvciBtYXlkZWYg dmFsdWUgZm9yIFBUUiwgcmV0dXJuaW5nIHRoZSBtYXlkZWYgdmFsdWVzIGlu DQogICAgVVNFIGFuZCBERUYuICAqLw0KIHN0YXRpYyBpbmxpbmUgdm9pZA0K QEAgLTgxNSw0ICs4NTcsMTQgQEAgb3BfaXRlcl9pbml0X21heWRlZiAoc3Nh X29wX2l0ZXIgKnB0ciwgdA0KICAgb3BfaXRlcl9pbml0IChwdHIsIHN0bXQs IFNTQV9PUF9WTUFZVVNFKTsNCiAgIG9wX2l0ZXJfbmV4dF9tYXlkZWYgKHVz ZSwgZGVmLCBwdHIpOw0KIH0NCisNCisvKiBJbml0aWFsaXplIGl0ZXJhdG9y IFBUUiB0byB0aGUgb3BlcmFuZHMgaW4gU1RNVC4gIFJldHVybiB0aGUgZmly c3Qgb3BlcmFuZHMNCisgICBpbiBLSUxMIGFuZCBERUYuICAqLw0KK3N0YXRp YyBpbmxpbmUgdm9pZA0KK29wX2l0ZXJfaW5pdF9tdXN0ZGVmIChzc2Ffb3Bf aXRlciAqcHRyLCB0cmVlIHN0bXQsIHVzZV9vcGVyYW5kX3AgKmtpbGwsIA0K KwkJICAgICBkZWZfb3BlcmFuZF9wICpkZWYpDQorew0KKyAgb3BfaXRlcl9p bml0IChwdHIsIHN0bXQsIFNTQV9PUF9WTVVTVERFRktJTEwpOw0KKyAgb3Bf aXRlcl9uZXh0X211c3RkZWYgKGtpbGwsIGRlZiwgcHRyKTsNCit9DQogI2Vu ZGlmIC8qIF9UUkVFX0ZMT1dfSU5MSU5FX0ggICovDQpJbmRleDogdHJlZS1p bnRvLXNzYS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L2N2cy9nY2MvZ2NjL2djYy90cmVlLWludG8tc3NhLmMsdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAyLjI0DQpkaWZmIC11IC1wIC1yMi4yNCB0cmVlLWludG8t c3NhLmMNCi0tLSB0cmVlLWludG8tc3NhLmMJMjkgU2VwIDIwMDQgMjE6MjM6 MzUgLTAwMDAJMi4yNA0KKysrIHRyZWUtaW50by1zc2EuYwkxNyBPY3QgMjAw NCAyMTowMjowNSAtMDAwMA0KQEAgLTM3OSwxMyArMzc5LDEzIEBAIG1hcmtf ZGVmX3NpdGVzIChzdHJ1Y3QgZG9tX3dhbGtfZGF0YSAqd2ENCiAgIC8qIElm IGEgdmFyaWFibGUgaXMgdXNlZCBiZWZvcmUgYmVpbmcgc2V0LCB0aGVuIHRo ZSB2YXJpYWJsZSBpcyBsaXZlDQogICAgICBhY3Jvc3MgYSBibG9jayBib3Vu ZGFyeSwgc28gbWFyayBpdCBsaXZlLW9uLWVudHJ5IHRvIEJCLiAgKi8NCiAN Ci0gIEZPUl9FQUNIX1NTQV9VU0VfT1BFUkFORCAodXNlX3AsIHN0bXQsIGl0 ZXIsIFNTQV9PUF9VU0UgfCBTU0FfT1BfVlVTRSkNCisgIEZPUl9FQUNIX1NT QV9VU0VfT1BFUkFORCAodXNlX3AsIHN0bXQsIGl0ZXIsIFNTQV9PUF9VU0Ug fCBTU0FfT1BfVlVTRSB8IFNTQV9PUF9WTVVTVERFRktJTEwpDQogICAgIHsN CiAgICAgICBpZiAocHJlcGFyZV91c2Vfb3BlcmFuZF9mb3JfcmVuYW1lICh1 c2VfcCwgJnVpZCkNCiAJICAmJiAhVEVTVF9CSVQgKGtpbGxzLCB1aWQpKQ0K IAlzZXRfbGl2ZWluX2Jsb2NrIChVU0VfRlJPTV9QVFIgKHVzZV9wKSwgYmIp Ow0KICAgICB9DQotCSAgDQorICANCiAgIC8qIE5vdGUgdGhhdCB2aXJ0dWFs IGRlZmluaXRpb25zIGFyZSBpcnJlbGV2YW50IGZvciBjb21wdXRpbmcgS0lM TFMNCiAgICAgIGJlY2F1c2UgYSBWX01BWV9ERUYgZG9lcyBub3QgY29uc3Rp dHV0ZSBhIGtpbGxpbmcgZGVmaW5pdGlvbiBvZiB0aGUNCiAgICAgIHZhcmlh YmxlLiAgSG93ZXZlciwgdGhlIG9wZXJhbmQgb2YgYSB2aXJ0dWFsIGRlZmlu aXRpb25zIGlzIGEgdXNlDQpAQCAtNDM4LDcgKzQzOCw3IEBAIHNzYV9tYXJr X2RlZl9zaXRlcyAoc3RydWN0IGRvbV93YWxrX2RhdGENCiANCiAgIC8qIElm IGEgdmFyaWFibGUgaXMgdXNlZCBiZWZvcmUgYmVpbmcgc2V0LCB0aGVuIHRo ZSB2YXJpYWJsZSBpcyBsaXZlDQogICAgICBhY3Jvc3MgYSBibG9jayBib3Vu ZGFyeSwgc28gbWFyayBpdCBsaXZlLW9uLWVudHJ5IHRvIEJCLiAgKi8NCi0g IEZPUl9FQUNIX1NTQV9UUkVFX09QRVJBTkQgKHVzZSwgc3RtdCwgaXRlciwg U1NBX09QX0FMTF9VU0VTKQ0KKyAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFO RCAodXNlLCBzdG10LCBpdGVyLCBTU0FfT1BfQUxMX1VTRVMgfCBTU0FfT1Bf QUxMX0tJTExTKQ0KICAgICB7DQogICAgICAgdWlkID0gU1NBX05BTUVfVkVS U0lPTiAodXNlKTsNCiANCkBAIC0xMDc3LDcgKzEwNzcsNyBAQCByZXdyaXRl X3N0bXQgKHN0cnVjdCBkb21fd2Fsa19kYXRhICp3YWxrDQogICBnY2NfYXNz ZXJ0ICghYW5uLT5tb2RpZmllZCk7DQogDQogICAvKiBTdGVwIDEuICBSZXdy aXRlIFVTRVMgYW5kIFZVU0VTIGluIHRoZSBzdGF0ZW1lbnQuICAqLw0KLSAg Rk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5EICh1c2VfcCwgc3RtdCwgaXRlciwg U1NBX09QX0FMTF9VU0VTKQ0KKyAgRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5E ICh1c2VfcCwgc3RtdCwgaXRlciwgU1NBX09QX0FMTF9VU0VTIHwgU1NBX09Q X0FMTF9LSUxMUykNCiAgICAgcmV3cml0ZV9vcGVyYW5kICh1c2VfcCk7DQog DQogICAvKiBTdGVwIDIuICBSZWdpc3RlciB0aGUgc3RhdGVtZW50J3MgREVG IGFuZCBWREVGIG9wZXJhbmRzLiAgKi8NCkBAIC0xMTIxLDcgKzExMjEsNyBA QCBzc2FfcmV3cml0ZV9zdG10IChzdHJ1Y3QgZG9tX3dhbGtfZGF0YSAqDQog ICBnY2NfYXNzZXJ0ICghYW5uLT5tb2RpZmllZCk7DQogDQogICAvKiBTdGVw IDEuICBSZXdyaXRlIFVTRVMgYW5kIFZVU0VTIGluIHRoZSBzdGF0ZW1lbnQu ICAqLw0KLSAgRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5EICh1c2VfcCwgc3Rt dCwgaXRlciwgU1NBX09QX0FMTF9VU0VTKQ0KKyAgRk9SX0VBQ0hfU1NBX1VT RV9PUEVSQU5EICh1c2VfcCwgc3RtdCwgaXRlciwgU1NBX09QX0FMTF9VU0VT IHwgU1NBX09QX0FMTF9LSUxMUykNCiAgICAgew0KICAgICAgIGlmIChURVNU X0JJVCAobmFtZXNfdG9fcmVuYW1lLCBTU0FfTkFNRV9WRVJTSU9OIChVU0Vf RlJPTV9QVFIgKHVzZV9wKSkpKQ0KIAlTRVRfVVNFICh1c2VfcCwgZ2V0X3Jl YWNoaW5nX2RlZiAoVVNFX0ZST01fUFRSICh1c2VfcCkpKTsNCkluZGV4OiB0 cmVlLXByZXR0eS1wcmludC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL2N2cy9nY2MvZ2NjL2djYy90cmVlLXByZXR0eS1wcmludC5j LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMi40Ng0KZGlmZiAtdSAtcCAtcjIu NDYgdHJlZS1wcmV0dHktcHJpbnQuYw0KLS0tIHRyZWUtcHJldHR5LXByaW50 LmMJOCBPY3QgMjAwNCAyMjo1Njo1NSAtMDAwMAkyLjQ2DQorKysgdHJlZS1w cmV0dHktcHJpbnQuYwkxNyBPY3QgMjAwNCAyMTowMjowNiAtMDAwMA0KQEAg LTIxMzEsOSArMjEzMSwxMCBAQCBuZXdsaW5lX2FuZF9pbmRlbnQgKHByZXR0 eV9wcmludGVyICpidWZmDQogc3RhdGljIHZvaWQNCiBkdW1wX3ZvcHMgKHBy ZXR0eV9wcmludGVyICpidWZmZXIsIHRyZWUgc3RtdCwgaW50IHNwYywgaW50 IGZsYWdzKQ0KIHsNCi0gIHRyZWUgdXNlLCBkZWY7DQorICB0cmVlIHVzZTsN CiAgIHVzZV9vcGVyYW5kX3AgdXNlX3A7DQogICBkZWZfb3BlcmFuZF9wIGRl Zl9wOw0KKyAgdXNlX29wZXJhbmRfcCBraWxsX3A7DQogICBzc2Ffb3BfaXRl ciBpdGVyOw0KIA0KICAgRk9SX0VBQ0hfU1NBX01BWURFRl9PUEVSQU5EIChk ZWZfcCwgdXNlX3AsIHN0bXQsIGl0ZXIpDQpAQCAtMjE0OCwxMCArMjE0OSwx NCBAQCBkdW1wX3ZvcHMgKHByZXR0eV9wcmludGVyICpidWZmZXIsIHRyZWUg DQogICAgICAgbmV3bGluZV9hbmRfaW5kZW50IChidWZmZXIsIHNwYyk7DQog ICAgIH0NCiANCi0gIEZPUl9FQUNIX1NTQV9UUkVFX09QRVJBTkQgKGRlZiwg c3RtdCwgaXRlciwgU1NBX09QX1ZNVVNUREVGKQ0KKyAgRk9SX0VBQ0hfU1NB X01VU1RERUZfT1BFUkFORCAoZGVmX3AsIGtpbGxfcCwgc3RtdCwgaXRlcikN CiAgICAgew0KLSAgICAgIHBwX3N0cmluZyAoYnVmZmVyLCAiIyAgIFZfTVVT VF9ERUYgPCIpOw0KLSAgICAgIGR1bXBfZ2VuZXJpY19ub2RlIChidWZmZXIs IGRlZiwgc3BjICsgMiwgZmxhZ3MsIGZhbHNlKTsNCisgICAgICBwcF9zdHJp bmcgKGJ1ZmZlciwgIiMgICAiKTsNCisgICAgICBkdW1wX2dlbmVyaWNfbm9k ZSAoYnVmZmVyLCBERUZfRlJPTV9QVFIgKGRlZl9wKSwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgc3BjICsgMiwgZmxhZ3MsIGZhbHNlKTsNCisgICAg ICBwcF9zdHJpbmcgKGJ1ZmZlciwgIiA9IFZfTVVTVF9ERUYgPCIpOw0KKyAg ICAgIGR1bXBfZ2VuZXJpY19ub2RlIChidWZmZXIsIFVTRV9GUk9NX1BUUiAo a2lsbF9wKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BjICsgMiwg ZmxhZ3MsIGZhbHNlKTsNCiAgICAgICBwcF9zdHJpbmcgKGJ1ZmZlciwgIj47 Iik7DQogICAgICAgbmV3bGluZV9hbmRfaW5kZW50IChidWZmZXIsIHNwYyk7 DQogICAgIH0NCkluZGV4OiB0cmVlLXNzYS1jY3AuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvZ2NjL2djYy9nY2MvdHJlZS1z c2EtY2NwLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAyLjQ3DQpkaWZmIC11 IC1wIC1yMi40NyB0cmVlLXNzYS1jY3AuYw0KLS0tIHRyZWUtc3NhLWNjcC5j CTI5IFNlcCAyMDA0IDA5OjA0OjE3IC0wMDAwCTIuNDcNCisrKyB0cmVlLXNz YS1jY3AuYwkxNyBPY3QgMjAwNCAyMTowMjowNiAtMDAwMA0KQEAgLTEwNDEs NyArMTA0MSw3IEBAIHZpc2l0X2Fzc2lnbm1lbnQgKHRyZWUgc3RtdCwgdHJl ZSAqb3V0cHUNCiAgICAgew0KICAgICAgIC8qIElmIHdlIG1ha2UgaXQgaGVy ZSwgdGhlbiBzdG10IG9ubHkgaGFzIG9uZSBkZWZpbml0aW9uOg0KICAgICAg ICAgIGEgVl9NVVNUX0RFRi4gICovDQotICAgICAgbGhzID0gVl9NVVNUX0RF Rl9PUCAodl9tdXN0X2RlZnMsIDApOw0KKyAgICAgIGxocyA9IFZfTVVTVF9E RUZfUkVTVUxUICh2X211c3RfZGVmcywgMCk7DQogICAgIH0NCiANCiAgIGlm IChUUkVFX0NPREUgKHJocykgPT0gU1NBX05BTUUpDQpJbmRleDogdHJlZS1z c2EtZGNlLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv Y3ZzL2djYy9nY2MvZ2NjL3RyZWUtc3NhLWRjZS5jLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMi4yMg0KZGlmZiAtdSAtcCAtcjIuMjIgdHJlZS1zc2EtZGNl LmMNCi0tLSB0cmVlLXNzYS1kY2UuYwkyOSBTZXAgMjAwNCAyMzowODozMSAt MDAwMAkyLjIyDQorKysgdHJlZS1zc2EtZGNlLmMJMTcgT2N0IDIwMDQgMjE6 MDI6MDYgLTAwMDANCkBAIC02NCw2ICs2NCw3IEBAIFNvZnR3YXJlIEZvdW5k YXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFMNCiAjaW5jbHVkZSAidHJlZS1w YXNzLmgiDQogI2luY2x1ZGUgInRpbWV2YXIuaCINCiAjaW5jbHVkZSAiZmxh Z3MuaCINCisjaW5jbHVkZSAiZG9td2Fsay5oIg0KIAwNCiBzdGF0aWMgc3Ry dWN0IHN0bXRfc3RhdHMNCiB7DQpAQCAtNjI4LDcgKzYyOSwzMDYgQEAgcHJv cGFnYXRlX25lY2Vzc2l0eSAoc3RydWN0IGVkZ2VfbGlzdCAqZQ0KIAl9DQog ICAgIH0NCiB9DQorDQorLyogU3RhY2sgb2YgcmVhY2hpbmcgZGVmaW5pdGlv bnMuICAqLw0KK3N0YXRpYyB2YXJyYXlfdHlwZSBibG9ja19kZWZzX3N0YWNr Ow0KKw0KKy8qIFJlZ2lzdGVyIERFRiBhcyB0aGUgbmV3IGRlZmluaXRpb24g Zm9yIFZBUiwgYW5kIHB1c2ggdGhlIG9sZCBkZWZpbml0aW9uIG9uDQorICAg dGhlIGJsb2NrX2RlZnNfc3RhY2suICAqLw0KKw0KK3N0YXRpYyB2b2lkDQor ZGNlX3JlZ2lzdGVyX25ld19kZWYgKHRyZWUgdmFyLCB0cmVlIGRlZikNCit7 DQorICB0cmVlIGN1cnJkZWY7DQorICBjdXJyZGVmID0gdmFyX2FubiAoU1NB X05BTUVfVkFSICh2YXIpKS0+Y3VycmVudF9kZWY7DQorICBWQVJSQVlfUFVT SF9UUkVFIChibG9ja19kZWZzX3N0YWNrLCBjdXJyZGVmKTsNCisgIFZBUlJB WV9QVVNIX1RSRUUgKGJsb2NrX2RlZnNfc3RhY2ssIFNTQV9OQU1FX1ZBUiAo dmFyKSk7DQorICB2YXJfYW5uIChTU0FfTkFNRV9WQVIgKHZhcikpLT5jdXJy ZW50X2RlZiA9IGRlZjsNCit9DQorICAgIA0KKw0KKy8qIFJlZ2lzdGVyIGRl ZmluaXRpb25zIGZvciB0aGUgUEhJIG5vZGVzIGluIGJsb2NrIEJCLiAgKi8N CisNCitzdGF0aWMgdm9pZA0KK2RjZV9yZXdyaXRlX2luaXRpYWxpemVfYmxv Y2sgKHN0cnVjdCBkb21fd2Fsa19kYXRhICp3YWxrX2RhdGEgQVRUUklCVVRF X1VOVVNFRCwNCisJCQkgICAgICBiYXNpY19ibG9jayBiYikNCit7DQorICB0 cmVlIHBoaTsNCisNCisgIC8qIE1hcmsgdGhlIHVud2luZCBwb2ludCBmb3Ig dGhpcyBibG9jay4gICovDQorICBWQVJSQVlfUFVTSF9UUkVFIChibG9ja19k ZWZzX3N0YWNrLCBOVUxMX1RSRUUpOw0KKw0KKyAgLyogU3RlcCAxLiAgUmVn aXN0ZXIgbmV3IGRlZmluaXRpb25zIGZvciBldmVyeSBQSEkgbm9kZSBpbiB0 aGUgYmxvY2suDQorICAgICBDb25jZXB0dWFsbHksIGFsbCB0aGUgUEhJIG5v ZGVzIGFyZSBleGVjdXRlZCBpbiBwYXJhbGxlbCBhbmQgZWFjaCBQSEkNCisg ICAgIG5vZGUgaW50cm9kdWNlcyBhIG5ldyB2ZXJzaW9uIGZvciB0aGUgYXNz b2NpYXRlZCB2YXJpYWJsZS4gICovDQorICBmb3IgKHBoaSA9IHBoaV9ub2Rl cyAoYmIpOyBwaGk7IHBoaSA9IFRSRUVfQ0hBSU4gKHBoaSkpDQorICAgIHsN CisgICAgICB0cmVlIHJlc3VsdCA9IFBISV9SRVNVTFQgKHBoaSk7DQorICAg ICAgaWYgKGlzX2dpbXBsZV9yZWcgKHJlc3VsdCkpDQorCWNvbnRpbnVlOw0K KyAgICAgIC8qIFRoaXMgaXMgb25seSBoZXJlIHRvIGF2b2lkIGtlZXBpbmcg YXJvdW5kIG9uZSBhcmd1bWVudCBwaGlzLCB3aGVuDQorCSB0aGV5IGFyZSBu ZXZlciBuZWNlc3NhcnkuICAqLw0KKyAgICAgIGlmIChQSElfTlVNX0FSR1Mg KHBoaSkgPT0gMSkNCisJcmVzdWx0ID0gUEhJX0FSR19ERUYgKHBoaSwgMCk7 DQorICAgICAgZGNlX3JlZ2lzdGVyX25ld19kZWYgKHJlc3VsdCwgcmVzdWx0 KTsNCisgICAgfQ0KK30NCisNCisNCisvKiBSZXdyaXRlIHRoZSBtdXN0LWRl ZiBraWxsIG9wZXJhbmRzIG9mIHRoZSBzdGF0ZW1lbnQgcG9pbnRlZCB0byBi eSBTSSwgc28NCisgICB0aGF0IHRoZXkgaGF2ZSBjb3JyZWN0IHJlYWNoaW5n IGRlZmluaXRpb25zLiovICAgDQorDQorc3RhdGljIHZvaWQNCitkY2VfcmV3 cml0ZV9zdG10IChzdHJ1Y3QgZG9tX3dhbGtfZGF0YSAqd2Fsa19kYXRhIEFU VFJJQlVURV9VTlVTRUQsDQorCQkgIGJhc2ljX2Jsb2NrIGJiIEFUVFJJQlVU RV9VTlVTRUQsDQorCQkgIGJsb2NrX3N0bXRfaXRlcmF0b3Igc2kpDQorew0K KyAgc3RtdF9hbm5fdCBhbm47DQorICB0cmVlIHN0bXQsIHZhcjsNCisgIHNz YV9vcF9pdGVyIGl0ZXI7DQorICB1c2Vfb3BlcmFuZF9wIHVzZV9wOw0KKyAg ZGVmX29wZXJhbmRfcCBkZWZfcDsNCisNCisgIHN0bXQgPSBic2lfc3RtdCAo c2kpOw0KKyAgYW5uID0gc3RtdF9hbm4gKHN0bXQpOw0KKyAgDQorICAvKiBJ dCB3b3VsZCBkZWZlYXQgdGhlIHdob2xlIHB1cnBvc2Ugb2YgdGhpcyByZW5h bWluZyB0byBpbmNsdWRlIHVubmVjZXNzYXJ5DQorICAgICBzdGF0ZW1lbnQg dXNlcyBhbmQgZGVmaW5pdGlvbnMuICAqLw0KKyAgaWYgKCFORUNFU1NBUlkg KHN0bXQpKQ0KKyAgICByZXR1cm47DQorDQorICAvKiBXZSBoYXZlIGp1c3Qg c2Nhbm5lZCB0aGUgY29kZSBmb3Igb3BlcmFuZHMuICBObyBzdGF0ZW1lbnQg c2hvdWxkDQorICAgICBiZSBtb2RpZmllZC4gICovDQorICBnY2NfYXNzZXJ0 ICghYW5uLT5tb2RpZmllZCk7DQorDQorICAvKiBTdGVwIDEuICBSZXdyaXRl IE1VU1RERUYgb3BlcmFuZHMgaW4gdGhlIHN0YXRlbWVudC4gICovDQorICBG T1JfRUFDSF9TU0FfTVVTVERFRl9PUEVSQU5EIChkZWZfcCwgdXNlX3AsIHN0 bXQsIGl0ZXIpDQorICAgIHsNCisgICAgICB0cmVlIHVzZSA9IFVTRV9GUk9N X1BUUiAodXNlX3ApOw0KKyAgICAgIHRyZWUgcmVhY2hkZWY7DQorICAgICAg cmVhY2hkZWYgPSB2YXJfYW5uIChTU0FfTkFNRV9WQVIgKHVzZSkpLT5jdXJy ZW50X2RlZjsNCisgICAgICBTRVRfVVNFICh1c2VfcCwgcmVhY2hkZWYpOw0K KyAgICB9DQorDQorICAvKiBTdGVwIDIuICBSZWdpc3RlciB0aGUgc3RhdGVt ZW50J3MgREVGIGFuZCBWREVGIG9wZXJhbmRzLiAgKi8NCisgIEZPUl9FQUNI X1NTQV9ERUZfT1BFUkFORCAoZGVmX3AsIHN0bXQsIGl0ZXIsIA0KKwkJCSAg ICBTU0FfT1BfVklSVFVBTF9ERUZTIHwgU1NBX09QX1ZJUlRVQUxfS0lMTFMp DQorICAgIHsNCisgICAgICB2YXIgPSBERUZfRlJPTV9QVFIgKGRlZl9wKTsN CisgICAgICBkY2VfcmVnaXN0ZXJfbmV3X2RlZiAodmFyLCB2YXIpOw0KKyAg ICB9DQorfQ0KKw0KKy8qIFJld3JpdGUgdGhlIHZpcnR1YWwgcGhpIGFyZ3Vt ZW50cyBmb3IgdGhlIHN1Y2Nlc3NvcnMgb2YgQkIgc28gdGhhdCB0aGV5DQor ICAgaGF2ZSBjb3JyZWN0IHJlYWNoaW5nIGRlZmluaXRpb25zLiAgKi8NCisg ICANCitzdGF0aWMgdm9pZA0KK2RjZV9yZXdyaXRlX3BoaV9hcmd1bWVudHMg KHN0cnVjdCBkb21fd2Fsa19kYXRhICp3YWxrX2RhdGEgQVRUUklCVVRFX1VO VVNFRCwNCisJCQkgICBiYXNpY19ibG9jayBiYikNCit7DQorICBlZGdlIGU7 DQorICB1c2Vfb3BlcmFuZF9wIG9wOw0KKyAgZWRnZV9pdGVyYXRvciBlaTsN CisNCisgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+c3VjY3MpDQorICAg IHsNCisgICAgICB0cmVlIHBoaTsNCisNCisgICAgICBpZiAoZS0+ZGVzdCA9 PSBFWElUX0JMT0NLX1BUUikNCisJY29udGludWU7DQorDQorICAgICAgZm9y IChwaGkgPSBwaGlfbm9kZXMgKGUtPmRlc3QpOyBwaGk7IHBoaSA9IFBISV9D SEFJTiAocGhpKSkNCisJew0KKwkgDQorCSAgdHJlZSB1c2U7DQorCSAgdHJl ZSByZWFjaGRlZjsNCisNCisJICBpZiAoaXNfZ2ltcGxlX3JlZyAoUEhJX1JF U1VMVCAocGhpKSkpDQorCSAgICBjb250aW51ZTsNCisNCisJICBvcCA9IFBI SV9BUkdfREVGX1BUUl9GUk9NX0VER0UgKHBoaSwgZSk7DQorCSAgdXNlID0g VVNFX0ZST01fUFRSIChvcCk7DQorDQorCSAgcmVhY2hkZWYgPSB2YXJfYW5u IChTU0FfTkFNRV9WQVIgKHVzZSkpLT5jdXJyZW50X2RlZjsNCisJICANCisJ ICBTRVRfVVNFIChvcCwgcmVhY2hkZWYpOwkgDQorCSAgaWYgKGUtPmZsYWdz ICYgRURHRV9BQk5PUk1BTCkNCisJICAgIFNTQV9OQU1FX09DQ1VSU19JTl9B Qk5PUk1BTF9QSEkgKFVTRV9GUk9NX1BUUiAob3ApKSA9IDE7DQorCX0NCisg ICAgfQ0KK30NCisNCisvKiBQb3AgdGhlIGRlZmluaXRpb25zIG9mZiB0aGUg YmxvY2sgc3RhY2sgYXMgd2Ugd29yayBvdXIgd2F5IGJhY2sgdXAgdGhpcw0K KyAgIGJyYW5jaCBvZiB0aGUgZG9taW5hdG9yIHRyZWUsIHNvIHRoYXQgd2Ug cmVzdG9yZSB0aGUgY29ycmVjdCByZWFjaGluZw0KKyAgIGRlZmluaXRpb25z LiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK2RjZV9yZXdyaXRlX2ZpbmFsaXpl X2Jsb2NrIChzdHJ1Y3QgZG9tX3dhbGtfZGF0YSAqd2Fsa19kYXRhIEFUVFJJ QlVURV9VTlVTRUQsDQorCQkJICAgIGJhc2ljX2Jsb2NrIGJiIEFUVFJJQlVU RV9VTlVTRUQpDQorew0KKw0KKyAgLyogU3RlcCA1LiAgUmVzdG9yZSB0aGUg Y3VycmVudCByZWFjaGluZyBkZWZpbml0aW9uIGZvciBlYWNoIHZhcmlhYmxl DQorICAgICByZWZlcmVuY2VkIGluIHRoZSBibG9jayAoaW4gcmV2ZXJzZSBv cmRlcikuICAqLw0KKyAgd2hpbGUgKFZBUlJBWV9BQ1RJVkVfU0laRSAoYmxv Y2tfZGVmc19zdGFjaykgPiAwKQ0KKyAgICB7DQorICAgICAgdHJlZSB2YXIg PSBWQVJSQVlfVE9QX1RSRUUgKGJsb2NrX2RlZnNfc3RhY2spOw0KKyAgICAg IHRyZWUgc2F2ZWRfZGVmOw0KKw0KKyAgICAgIFZBUlJBWV9QT1AgKGJsb2Nr X2RlZnNfc3RhY2spOw0KKyAgICAgIA0KKyAgICAgIGlmICh2YXIgPT0gTlVM TCkNCisJYnJlYWs7DQorDQorICAgICAgc2F2ZWRfZGVmID0gVkFSUkFZX1RP UF9UUkVFIChibG9ja19kZWZzX3N0YWNrKTsNCisgICAgICBWQVJSQVlfUE9Q IChibG9ja19kZWZzX3N0YWNrKTsNCisNCisgICAgICB2YXJfYW5uICh2YXIp LT5jdXJyZW50X2RlZiA9IHNhdmVkX2RlZjsNCisgICAgfQ0KK30NCisNCisv KiBNYXJrIHRoZSBzdGF0ZW1lbnQgZGVmaW5pbmcgb3BlcmFuZCBPUCBhcyBu ZWNlc3NhcnkgaWYgaXQgaXMgYSBwaGkgbm9kZS4gICovDQorDQorc3RhdGlj IGlubGluZSB2b2lkDQorbWFya19vcGVyYW5kX25lY2Vzc2FyeV9pZl9waGkg KHRyZWUgb3ApDQorew0KKyAgdHJlZSBzdG10Ow0KKyAgaW50IHZlcjsNCisN CisgIGdjY19hc3NlcnQgKG9wKTsNCisNCisgIHZlciA9IFNTQV9OQU1FX1ZF UlNJT04gKG9wKTsNCisgIGlmIChURVNUX0JJVCAocHJvY2Vzc2VkLCB2ZXIp KQ0KKyAgICByZXR1cm47DQorICBTRVRfQklUIChwcm9jZXNzZWQsIHZlcik7 DQorDQorICBzdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKG9wKTsNCisgIGdj Y19hc3NlcnQgKHN0bXQpOw0KKw0KKyAgaWYgKE5FQ0VTU0FSWSAoc3RtdCkN CisgICAgICB8fCBJU19FTVBUWV9TVE1UIChzdG10KQ0KKyAgICAgIHx8IFRS RUVfQ09ERSAoc3RtdCkgIT0gUEhJX05PREUpDQorICAgIHJldHVybjsNCisN CisgIE5FQ0VTU0FSWSAoc3RtdCkgPSAxOw0KKyAgVkFSUkFZX1BVU0hfVFJF RSAod29ya2xpc3QsIHN0bXQpOw0KK30NCisNCisvKiBQcm9wYWdhdGUgbmVj ZXNzaXR5IGFyb3VuZCB2aXJ0dWFsIHBoaSBub2RlcyB1c2VkIGluIGtpbGwg b3BlcmFuZHMuDQorICAgVGhlIHJlYXNvbiB0aGlzIGlzbid0IGRvbmUgZHVy aW5nIHByb3BhZ2F0ZV9uZWNlc3NpdHkgaXMgYmVjYXVzZSB3ZSBkb24ndA0K KyAgIHdhbnQgdG8ga2VlcCBwaGlzIGFyb3VuZCB0aGF0IGFyZSBqdXN0IHRo ZXJlIGZvciBtdXN0LWRlZnMsIHVubGVzcyB3ZQ0KKyAgIGFic29sdXRlbHkg aGF2ZSB0by4gIEFmdGVyIHdlJ3ZlIHJld3JpdHRlbiB0aGUgcmVhY2hpbmcg ZGVmaW5pdGlvbnMgdG8gYmUNCisgICBjb3JyZWN0IGluIHRoZSBwcmV2aW91 cyBwYXJ0IG9mIHRoZSBmaXh1cCByb3V0aW5lLCB3ZSBjYW4gc2ltcGx5IHBy b3BhZ2F0ZQ0KKyAgIGFyb3VuZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggb2YgdGhlc2UgdmlydHVhbCBwaGkgbm9kZXMgYXJlIHJlYWxseQ0KKyAg IHVzZWQsIGFuZCBzZXQgdGhlIE5FQ0VTU0FSWSBmbGFnIGFjY29yZGluZ2x5 Lg0KKyAgIE5vdGUgdGhhdCB3ZSBkbyB0aGUgbWluaW11bSBoZXJlIHRvIGVu c3VyZSB0aGF0IHdlIGtlZXAgYWxpdmUgdGhlIHBoaXMgdGhhdA0KKyAgIGFy ZSBhY3R1YWxseSB1c2VkIGluIHRoZSBjb3JyZWN0ZWQgU1NBIGZvcm0uICBJ biBwYXJ0aWN1bGFyLCBzb21lIG9mIHRoZXNlDQorICAgcGhpcyBtYXkgbm93 IGhhdmUgYWxsIG9mIHRoZSBzYW1lIG9wZXJhbmQsIGFuZCB3aWxsIGJlIGRl bGV0ZWQgYnkgc29tZQ0KKyAgIG90aGVyIHBhc3MuICAqLw0KKw0KK3N0YXRp YyB2b2lkDQorbWFya19yZWFsbHlfbmVjZXNzYXJ5X2tpbGxfb3BlcmFuZF9w aGlzICh2b2lkKQ0KK3sNCisgIGJhc2ljX2Jsb2NrIGJiOw0KKyAgaW50IGk7 DQorDQorICAvKiBTZWVkIHRoZSB3b3JrbGlzdCB3aXRoIHRoZSBuZXcgdmly dHVhbCBwaGkgYXJndW1lbnRzIGFuZCB2aXJ0dWFsDQorICAgICB1c2VzICov DQorICBGT1JfRUFDSF9CQiAoYmIpDQorICAgIHsNCisgICAgICBibG9ja19z dG10X2l0ZXJhdG9yIGJzaTsNCisgICAgICB0cmVlIHBoaTsNCisgICAgICAN CisgICAgICBmb3IgKHBoaSA9IHBoaV9ub2RlcyAoYmIpOyBwaGk7IHBoaSA9 IFBISV9DSEFJTiAocGhpKSkNCisJew0KKwkgIGlmICghaXNfZ2ltcGxlX3Jl ZyAoUEhJX1JFU1VMVCAocGhpKSkgJiYgTkVDRVNTQVJZIChwaGkpKQ0KKwkg ICAgew0KKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgUEhJX05VTV9BUkdTIChw aGkpOyBpKyspDQorCQltYXJrX29wZXJhbmRfbmVjZXNzYXJ5X2lmX3BoaSAo UEhJX0FSR19ERUYgKHBoaSwgaSkpOw0KKwkgICAgfQ0KKwl9DQorICAgICAg DQorICAgICAgZm9yIChic2kgPSBic2lfbGFzdCAoYmIpOyAhYnNpX2VuZF9w IChic2kpOyBic2lfcHJldiAoJmJzaSkpDQorCXsNCisJICB0cmVlIHN0bXQg PSBic2lfc3RtdCAoYnNpKTsNCisJDQorCSAgaWYgKE5FQ0VTU0FSWSAoc3Rt dCkpDQorCSAgICB7DQorCSAgICAgIHVzZV9vcGVyYW5kX3AgdXNlX3A7DQor CSAgICAgIHNzYV9vcF9pdGVyIGl0ZXI7DQorCSAgICAgIEZPUl9FQUNIX1NT QV9VU0VfT1BFUkFORCAodXNlX3AsIHN0bXQsIGl0ZXIsDQorCQkJCQlTU0Ff T1BfVklSVFVBTF9VU0VTIHwgU1NBX09QX1ZJUlRVQUxfS0lMTFMpDQorCQl7 DQorCQkgIHRyZWUgdXNlID0gVVNFX0ZST01fUFRSICh1c2VfcCk7DQorCQkg IG1hcmtfb3BlcmFuZF9uZWNlc3NhcnlfaWZfcGhpICh1c2UpOw0KKwkJfQ0K KwkgICAgfQ0KKwl9DQorICAgIH0NCisgIA0KKyAgLyogTWFyayBhbGwgdmly dHVhbCBwaGlzIHN0aWxsIGluIHVzZSBhcyBuZWNlc3NhcnksIGFuZCBhbGwg b2YgdGhlaXINCisgICAgIGFyZ3VtZW50cyB0aGF0IGFyZSBwaGlzIGFzIG5l Y2Vzc2FyeS4gICovDQorICB3aGlsZSAoVkFSUkFZX0FDVElWRV9TSVpFICh3 b3JrbGlzdCkgPiAwKQ0KKyAgICB7DQorICAgICAgdHJlZSB1c2UgPSBWQVJS QVlfVE9QX1RSRUUgKHdvcmtsaXN0KTsNCisgICAgICBWQVJSQVlfUE9QICh3 b3JrbGlzdCk7DQorICAgICAgDQorICAgICAgZm9yIChpID0gMDsgaSA8IFBI SV9OVU1fQVJHUyAodXNlKTsgaSsrKQ0KKwltYXJrX29wZXJhbmRfbmVjZXNz YXJ5X2lmX3BoaSAoUEhJX0FSR19ERUYgKHVzZSwgaSkpOw0KKyAgICB9DQor fQ0KKw0KKy8qIEZpeCB1cCB0aGUgVl9NVVNUX0RFRiBraWxsIG9wZXJhbmRz Lg0KKyAgIFRoaXMgcm91dGluZSBpcyBmYXN0ZXIgdGhhbiBzaW1wbHkgY2Fs bGluZyB0aGUgcmVuYW1lciBiZWNhdXNlIGl0IG9ubHkNCisgICBmaXhlcyB0 aGUgcmVhY2hpbmcgZGVmaW5pdGlvbnMgb2YgdmlydHVhbCBtdXN0LWRlZiBv cGVyYXRpb25zLCBhbmQgbmV2ZXINCisgICBoYXMgdG8gaW5zZXJ0IHBoaSBu b2Rlcy4gICovDQorDQorc3RhdGljIHZvaWQNCitmaXh1cF9tdXN0X2RlZl9r aWxscyAodm9pZCkNCit7DQorICBzaXplX3QgaTsNCisgIHN0cnVjdCBkb21f d2Fsa19kYXRhIHdhbGtfZGF0YTsNCisNCisgIHNiaXRtYXBfemVybyAocHJv Y2Vzc2VkKTsNCisNCisgIFZBUlJBWV9UUkVFX0lOSVQgKGJsb2NrX2RlZnNf c3RhY2ssIDEwLCAiQmxvY2sgREVGUyBzdGFjayIpOw0KKw0KKyAgZm9yIChp ID0gMTsgaSA8IG51bV9zc2FfbmFtZXM7IGkrKykNCisgICAgaWYgKHNzYV9u YW1lIChpKSkNCisgICAgICB7DQorCXRyZWUgbmFtZSA9IHNzYV9uYW1lIChp KTsNCisJdHJlZSB2YXIgPSBTU0FfTkFNRV9WQVIgKG5hbWUpOw0KKwl2YXJf YW5uICh2YXIpLT5jdXJyZW50X2RlZiA9IGRlZmF1bHRfZGVmICh2YXIpOw0K KyAgICAgIH0NCisNCisgIC8qIFNldHVwIGNhbGxiYWNrcyBmb3IgdGhlIGdl bmVyaWMgZG9taW5hdG9yIHRyZWUgd2Fsa2VyLiAgKi8NCisgIHdhbGtfZGF0 YS53YWxrX3N0bXRzX2JhY2t3YXJkID0gZmFsc2U7DQorICB3YWxrX2RhdGEu ZG9tX2RpcmVjdGlvbiA9IENESV9ET01JTkFUT1JTOw0KKyAgd2Fsa19kYXRh LmluaXRpYWxpemVfYmxvY2tfbG9jYWxfZGF0YSA9IE5VTEw7DQorICB3YWxr X2RhdGEuYmVmb3JlX2RvbV9jaGlsZHJlbl9iZWZvcmVfc3RtdHMgPSBkY2Vf cmV3cml0ZV9pbml0aWFsaXplX2Jsb2NrOw0KKyAgd2Fsa19kYXRhLmJlZm9y ZV9kb21fY2hpbGRyZW5fd2Fsa19zdG10cyA9IGRjZV9yZXdyaXRlX3N0bXQ7 DQorICB3YWxrX2RhdGEuYmVmb3JlX2RvbV9jaGlsZHJlbl9hZnRlcl9zdG10 cyA9IGRjZV9yZXdyaXRlX3BoaV9hcmd1bWVudHM7DQorICB3YWxrX2RhdGEu YWZ0ZXJfZG9tX2NoaWxkcmVuX2JlZm9yZV9zdG10cyA9IE5VTEw7DQorICB3 YWxrX2RhdGEuYWZ0ZXJfZG9tX2NoaWxkcmVuX3dhbGtfc3RtdHMgPSAgTlVM TDsNCisgIHdhbGtfZGF0YS5hZnRlcl9kb21fY2hpbGRyZW5fYWZ0ZXJfc3Rt dHMgPSAgZGNlX3Jld3JpdGVfZmluYWxpemVfYmxvY2s7DQorICB3YWxrX2Rh dGEuYmxvY2tfbG9jYWxfZGF0YV9zaXplID0gMDsNCisgIA0KKyAgaW5pdF93 YWxrX2RvbWluYXRvcl90cmVlICgmd2Fsa19kYXRhKTsNCisgIHdhbGtfZG9t aW5hdG9yX3RyZWUgKCZ3YWxrX2RhdGEsIEVOVFJZX0JMT0NLX1BUUik7DQor ICBmaW5pX3dhbGtfZG9taW5hdG9yX3RyZWUgKCZ3YWxrX2RhdGEpOw0KKw0K KyAgbWFya19yZWFsbHlfbmVjZXNzYXJ5X2tpbGxfb3BlcmFuZF9waGlzICgp Ow0KKyAgDQorDQorICBmb3IgKGkgPSAxOyBpIDwgbnVtX3NzYV9uYW1lczsg aSsrKQ0KKyAgICBpZiAoc3NhX25hbWUgKGkpKQ0KKyAgICAgIHsNCisJdHJl ZSBuYW1lID0gc3NhX25hbWUgKGkpOw0KKwl0cmVlIHZhciA9IFNTQV9OQU1F X1ZBUiAobmFtZSk7DQorCXZhcl9hbm4gKHZhciktPmN1cnJlbnRfZGVmID0g TlVMTF9UUkVFOw0KKyAgICAgIH0NCit9DQogDA0KKw0KIC8qIEVsaW1pbmF0 ZSB1bm5lY2Vzc2FyeSBzdGF0ZW1lbnRzLiBBbnkgaW5zdHJ1Y3Rpb24gbm90 IG1hcmtlZCBhcyBuZWNlc3NhcnkNCiAgICBjb250cmlidXRlcyBub3RoaW5n IHRvIHRoZSBwcm9ncmFtLCBhbmQgY2FuIGJlIGRlbGV0ZWQuICAqLw0KIA0K QEAgLTY0MCw3ICs5NDAsNyBAQCBlbGltaW5hdGVfdW5uZWNlc3Nhcnlfc3Rt dHMgKHZvaWQpDQogDQogICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdz ICYgVERGX0RFVEFJTFMpKQ0KICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJc bkVsaW1pbmF0aW5nIHVubmVjZXNzYXJ5IHN0YXRlbWVudHM6XG4iKTsNCi0N CisgIA0KICAgY2xlYXJfc3BlY2lhbF9jYWxscyAoKTsNCiAgIEZPUl9FQUNI X0JCIChiYikNCiAgICAgew0KQEAgLTg3NSw2ICsxMTc0LDcgQEAgcGVyZm9y bV90cmVlX3NzYV9kY2UgKGJvb2wgYWdncmVzc2l2ZSkNCiANCiAgIHByb3Bh Z2F0ZV9uZWNlc3NpdHkgKGVsKTsNCiANCisgIGZpeHVwX211c3RfZGVmX2tp bGxzICgpOw0KICAgZWxpbWluYXRlX3VubmVjZXNzYXJ5X3N0bXRzICgpOw0K IA0KICAgaWYgKGFnZ3Jlc3NpdmUpDQpJbmRleDogdHJlZS1zc2EtbG9vcC1p bS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9n Y2MvZ2NjL2djYy90cmVlLXNzYS1sb29wLWltLmMsdg0KcmV0cmlldmluZyBy ZXZpc2lvbiAyLjE4DQpkaWZmIC11IC1wIC1yMi4xOCB0cmVlLXNzYS1sb29w LWltLmMNCi0tLSB0cmVlLXNzYS1sb29wLWltLmMJMjkgU2VwIDIwMDQgMjM6 MDg6MzIgLTAwMDAJMi4xOA0KKysrIHRyZWUtc3NhLWxvb3AtaW0uYwkxNyBP Y3QgMjAwNCAyMTowMjowNiAtMDAwMA0KQEAgLTQzNiw3ICs0MzYsNyBAQCBk ZXRlcm1pbmVfbWF4X21vdmVtZW50ICh0cmVlIHN0bXQsIGJvb2wgDQogICAg IGlmICghYWRkX2RlcGVuZGVuY3kgKHZhbCwgbGltX2RhdGEsIGxvb3AsIHRy dWUpKQ0KICAgICAgIHJldHVybiBmYWxzZTsNCiANCi0gIEZPUl9FQUNIX1NT QV9UUkVFX09QRVJBTkQgKHZhbCwgc3RtdCwgaXRlciwgU1NBX09QX1ZJUlRV QUxfVVNFUykNCisgIEZPUl9FQUNIX1NTQV9UUkVFX09QRVJBTkQgKHZhbCwg c3RtdCwgaXRlciwgU1NBX09QX1ZJUlRVQUxfVVNFUyB8IFNTQV9PUF9WSVJU VUFMX0tJTExTKQ0KICAgICBpZiAoIWFkZF9kZXBlbmRlbmN5ICh2YWwsIGxp bV9kYXRhLCBsb29wLCBmYWxzZSkpDQogICAgICAgcmV0dXJuIGZhbHNlOw0K IA0KQEAgLTEwMzQsOCArMTAzNCw3IEBAIHJld3JpdGVfbWVtX3JlZnMgKHRy ZWUgdG1wX3Zhciwgc3RydWN0IG0NCiANCiAgIGZvciAoOyBtZW1fcmVmczsg bWVtX3JlZnMgPSBtZW1fcmVmcy0+bmV4dCkNCiAgICAgew0KLSAgICAgIEZP Ul9FQUNIX1NTQV9UUkVFX09QRVJBTkQgKHZhciwgbWVtX3JlZnMtPnN0bXQs IGl0ZXIsDQotCQkJCSAoU1NBX09QX1ZJUlRVQUxfREVGUyB8IFNTQV9PUF9W VVNFKSkNCisgICAgICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5EICh2YXIs IG1lbV9yZWZzLT5zdG10LCBpdGVyLCBTU0FfT1BfQUxMX1ZJUlRVQUxTKQ0K IAl7DQogCSAgdmFyID0gU1NBX05BTUVfVkFSICh2YXIpOw0KIAkgIGJpdG1h cF9zZXRfYml0ICh2YXJzX3RvX3JlbmFtZSwgdmFyX2FubiAodmFyKS0+dWlk KTsNCkluZGV4OiB0cmVlLXNzYS1sb29wLW1hbmlwLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2djYy9nY2MvZ2NjL3RyZWUt c3NhLWxvb3AtbWFuaXAuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDIuOQ0K ZGlmZiAtdSAtcCAtcjIuOSB0cmVlLXNzYS1sb29wLW1hbmlwLmMNCi0tLSB0 cmVlLXNzYS1sb29wLW1hbmlwLmMJMjggU2VwIDIwMDQgMDc6NTk6NTIgLTAw MDAJMi45DQorKysgdHJlZS1zc2EtbG9vcC1tYW5pcC5jCTE3IE9jdCAyMDA0 IDIxOjAyOjA2IC0wMDAwDQpAQCAtMjU0LDcgKzI1NCw3IEBAIGZpbmRfdXNl c190b19yZW5hbWVfc3RtdCAodHJlZSBzdG10LCBiaXQNCiANCiAgIGdldF9z dG10X29wZXJhbmRzIChzdG10KTsNCiANCi0gIEZPUl9FQUNIX1NTQV9UUkVF X09QRVJBTkQgKHZhciwgc3RtdCwgaXRlciwgU1NBX09QX0FMTF9VU0VTKQ0K KyAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORCAodmFyLCBzdG10LCBpdGVy LCBTU0FfT1BfQUxMX1VTRVMgfCBTU0FfT1BfQUxMX0tJTExTKQ0KICAgICBm aW5kX3VzZXNfdG9fcmVuYW1lX3VzZSAoYmIsIHZhciwgdXNlX2Jsb2Nrcyk7 DQogfQ0KIA0KSW5kZXg6IHRyZWUtc3NhLW9wZXJhbmRzLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2djYy9nY2MvZ2NjL3Ry ZWUtc3NhLW9wZXJhbmRzLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAyLjQ5 DQpkaWZmIC11IC1wIC1yMi40OSB0cmVlLXNzYS1vcGVyYW5kcy5jDQotLS0g dHJlZS1zc2Etb3BlcmFuZHMuYwk1IE9jdCAyMDA0IDIyOjQyOjM0IC0wMDAw CTIuNDkNCisrKyB0cmVlLXNzYS1vcGVyYW5kcy5jCTE3IE9jdCAyMDA0IDIx OjAyOjA2IC0wMDAwDQpAQCAtMTc1LDcgKzE3NSw3IEBAIGFsbG9jYXRlX3Zf bWF5X2RlZl9vcHR5cGUgKHVuc2lnbmVkIG51bSkNCiAgIHZfbWF5X2RlZl9v cHR5cGUgdl9tYXlfZGVmX29wczsNCiAgIHVuc2lnbmVkIHNpemU7DQogICBz aXplID0gc2l6ZW9mIChzdHJ1Y3Qgdl9tYXlfZGVmX29wdHlwZV9kKSANCi0J ICAgKyBzaXplb2YgKHZfbWF5X2RlZl9vcGVyYW5kX3R5cGVfdCkgKiAobnVt IC0gMSk7DQorCSAgICsgc2l6ZW9mICh2X2RlZl91c2Vfb3BlcmFuZF90eXBl X3QpICogKG51bSAtIDEpOw0KICAgdl9tYXlfZGVmX29wcyA9ICBnZ2NfYWxs b2MgKHNpemUpOw0KICAgdl9tYXlfZGVmX29wcy0+bnVtX3ZfbWF5X2RlZnMg PSBudW07DQogICByZXR1cm4gdl9tYXlfZGVmX29wczsNCkBAIC0yMDMsNyAr MjAzLDcgQEAgYWxsb2NhdGVfdl9tdXN0X2RlZl9vcHR5cGUgKHVuc2lnbmVk IG51bQ0KIHsNCiAgIHZfbXVzdF9kZWZfb3B0eXBlIHZfbXVzdF9kZWZfb3Bz Ow0KICAgdW5zaWduZWQgc2l6ZTsNCi0gIHNpemUgPSBzaXplb2YgKHN0cnVj dCB2X211c3RfZGVmX29wdHlwZV9kKSArIHNpemVvZiAodHJlZSkgKiAobnVt IC0gMSk7DQorICBzaXplID0gc2l6ZW9mIChzdHJ1Y3Qgdl9tdXN0X2RlZl9v cHR5cGVfZCkgKyBzaXplb2YgKHZfZGVmX3VzZV9vcGVyYW5kX3R5cGVfdCkg KiAobnVtIC0gMSk7DQogICB2X211c3RfZGVmX29wcyA9ICBnZ2NfYWxsb2Mg KHNpemUpOw0KICAgdl9tdXN0X2RlZl9vcHMtPm51bV92X211c3RfZGVmcyA9 IG51bTsNCiAgIHJldHVybiB2X211c3RfZGVmX29wczsNCkBAIC02NTEsNyAr NjUxLDcgQEAgZmluYWxpemVfc3NhX3ZfbXVzdF9kZWZzICh2X211c3RfZGVm X29wdA0KICAgICAgIGJ1aWxkX2RpZmYgPSBmYWxzZTsNCiAgICAgICBmb3Ig KHggPSAwOyB4IDwgbnVtOyB4KyspDQogICAgICAgICB7DQotCSAgdHJlZSB2 YXIgPSBvbGRfb3BzLT52X211c3RfZGVmc1t4XTsNCisJICB0cmVlIHZhciA9 IG9sZF9vcHMtPnZfbXVzdF9kZWZzW3hdLmRlZjsNCiAJICBpZiAoVFJFRV9D T0RFICh2YXIpID09IFNTQV9OQU1FKQ0KIAkgICAgdmFyID0gU1NBX05BTUVf VkFSICh2YXIpOw0KIAkgIGlmICh2YXIgIT0gVkFSUkFZX1RSRUUgKGJ1aWxk X3ZfbXVzdF9kZWZzLCB4KSkNCkBAIC02NzgsMTcgKzY3OCwyMSBAQCBmaW5h bGl6ZV9zc2Ffdl9tdXN0X2RlZnMgKHZfbXVzdF9kZWZfb3B0DQogCSAgLyog TG9vayBmb3IgVkFSIGluIHRoZSBvcmlnaW5hbCB2ZWN0b3IuICAqLw0KIAkg IGZvciAoaSA9IDA7IGkgPCBvbGRfbnVtOyBpKyspDQogCSAgICB7DQotCSAg ICAgIHJlc3VsdCA9IG9sZF9vcHMtPnZfbXVzdF9kZWZzW2ldOw0KKwkgICAg ICByZXN1bHQgPSBvbGRfb3BzLT52X211c3RfZGVmc1tpXS5kZWY7DQogCSAg ICAgIGlmIChUUkVFX0NPREUgKHJlc3VsdCkgPT0gU1NBX05BTUUpDQogCQly ZXN1bHQgPSBTU0FfTkFNRV9WQVIgKHJlc3VsdCk7DQogCSAgICAgIGlmIChy ZXN1bHQgPT0gdmFyKQ0KIAkgICAgICAgIHsNCi0JCSAgdl9tdXN0X2RlZl9v cHMtPnZfbXVzdF9kZWZzW3hdID0gb2xkX29wcy0+dl9tdXN0X2RlZnNbaV07 DQorCQkgIHZfbXVzdF9kZWZfb3BzLT52X211c3RfZGVmc1t4XS5kZWYgPSBv bGRfb3BzLT52X211c3RfZGVmc1tpXS5kZWY7DQorCQkgIHZfbXVzdF9kZWZf b3BzLT52X211c3RfZGVmc1t4XS51c2UgPSBvbGRfb3BzLT52X211c3RfZGVm c1tpXS51c2U7DQogCQkgIGJyZWFrOw0KIAkJfQ0KIAkgICAgfQ0KIAkgIGlm IChpID09IG9sZF9udW0pDQotCSAgICB2X211c3RfZGVmX29wcy0+dl9tdXN0 X2RlZnNbeF0gPSB2YXI7DQorCSAgICB7DQorCSAgICAgIHZfbXVzdF9kZWZf b3BzLT52X211c3RfZGVmc1t4XS5kZWYgPSB2YXI7DQorCSAgICAgIHZfbXVz dF9kZWZfb3BzLT52X211c3RfZGVmc1t4XS51c2UgPSB2YXI7DQorCSAgICB9 DQogCX0NCiAgICAgfQ0KICAgVkFSUkFZX1BPUF9BTEwgKGJ1aWxkX3ZfbXVz dF9kZWZzKTsNCkBAIC0xNzIyLDcgKzE3MjYsMTAgQEAgY29weV92aXJ0dWFs X29wZXJhbmRzICh0cmVlIGRzdCwgdHJlZSBzcg0KICAgICB7DQogICAgICAg KnZfbXVzdF9kZWZzX25ldyA9IGFsbG9jYXRlX3ZfbXVzdF9kZWZfb3B0eXBl IChOVU1fVl9NVVNUX0RFRlMgKHZfbXVzdF9kZWZzKSk7DQogICAgICAgZm9y IChpID0gMDsgaSA8IE5VTV9WX01VU1RfREVGUyAodl9tdXN0X2RlZnMpOyBp KyspDQotCVNFVF9WX01VU1RfREVGX09QICgqdl9tdXN0X2RlZnNfbmV3LCBp LCBWX01VU1RfREVGX09QICh2X211c3RfZGVmcywgaSkpOw0KKwl7DQorCSAg U0VUX1ZfTVVTVF9ERUZfUkVTVUxUICgqdl9tdXN0X2RlZnNfbmV3LCBpLCBW X01VU1RfREVGX1JFU1VMVCAodl9tdXN0X2RlZnMsIGkpKTsNCisJICBTRVRf Vl9NVVNUX0RFRl9LSUxMICgqdl9tdXN0X2RlZnNfbmV3LCBpLCBWX01VU1Rf REVGX0tJTEwgKHZfbXVzdF9kZWZzLCBpKSk7DQorCX0NCiAgICAgfQ0KIH0N CiANCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBjcmVhdGVfc3NhX2FydGZpY2lh bF9sb2FkX3N0bXQgKHN0bXRfb3BlDQogICBmcmVlX3Z1c2VzICgmKGFubi0+ b3BlcmFuZHMudnVzZV9vcHMpKTsNCiAgIGZyZWVfdl9tYXlfZGVmcyAoJihh bm4tPm9wZXJhbmRzLnZfbWF5X2RlZl9vcHMpKTsNCiAgIGZyZWVfdl9tdXN0 X2RlZnMgKCYoYW5uLT5vcGVyYW5kcy52X211c3RfZGVmX29wcykpOw0KLQ0K KyAgDQogICAvKiBGb3IgZWFjaCBWREVGIG9uIHRoZSBvcmlnaW5hbCBzdGF0 ZW1lbnQsIHdlIHdhbnQgdG8gY3JlYXRlIGENCiAgICAgIFZVU0Ugb2YgdGhl IFZfTUFZX0RFRiByZXN1bHQgb3IgVl9NVVNUX0RFRiBvcCBvbiB0aGUgbmV3 IA0KICAgICAgc3RhdGVtZW50LiAgKi8NCkBAIC0xNzYzLDcgKzE3NzAsNyBA QCBjcmVhdGVfc3NhX2FydGZpY2lhbF9sb2FkX3N0bXQgKHN0bXRfb3BlDQog ICAgIA0KICAgZm9yIChqID0gMDsgaiA8IE5VTV9WX01VU1RfREVGUyAob2xk X29wcy0+dl9tdXN0X2RlZl9vcHMpOyBqKyspDQogICAgIHsNCi0gICAgICBv cCA9IFZfTVVTVF9ERUZfT1AgKG9sZF9vcHMtPnZfbXVzdF9kZWZfb3BzLCBq KTsNCisgICAgICBvcCA9IFZfTVVTVF9ERUZfUkVTVUxUIChvbGRfb3BzLT52 X211c3RfZGVmX29wcywgaik7DQogICAgICAgYXBwZW5kX3Z1c2UgKG9wKTsN CiAgICAgfQ0KIA0KSW5kZXg6IHRyZWUtc3NhLW9wZXJhbmRzLmgNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2djYy9nY2MvZ2Nj L3RyZWUtc3NhLW9wZXJhbmRzLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAy LjcNCmRpZmYgLXUgLXAgLXIyLjcgdHJlZS1zc2Etb3BlcmFuZHMuaA0KLS0t IHRyZWUtc3NhLW9wZXJhbmRzLmgJNSBTZXAgMjAwNCAxNToyNDoxNSAtMDAw MAkyLjcNCisrKyB0cmVlLXNzYS1vcGVyYW5kcy5oCTE3IE9jdCAyMDA0IDIx OjAyOjA2IC0wMDAwDQpAQCAtNTgsMTcgKzU4LDE3IEBAIHR5cGVkZWYgc3Ry dWN0IHVzZV9vcHR5cGVfZCBHVFkoKCkpDQogdHlwZWRlZiB1c2Vfb3B0eXBl X3QgKnVzZV9vcHR5cGU7DQogDQogLyogT3BlcmFuZCB0eXBlIHdoaWNoIHN0 b3JlcyBhIGRlZiBhbmQgYSB1c2UgdHJlZS4gICovDQotdHlwZWRlZiBzdHJ1 Y3Qgdl9tYXlfZGVmX29wZXJhbmRfdHlwZSBHVFkoKCkpDQordHlwZWRlZiBz dHJ1Y3Qgdl9kZWZfdXNlX29wZXJhbmRfdHlwZSBHVFkoKCkpDQogew0KICAg dHJlZSBkZWY7DQogICB0cmVlIHVzZTsNCi19IHZfbWF5X2RlZl9vcGVyYW5k X3R5cGVfdDsNCit9IHZfZGVmX3VzZV9vcGVyYW5kX3R5cGVfdDsNCiANCiAv KiBUaGlzIHJlcHJlc2VudHMgdGhlIE1BWV9ERUZTIGZvciBhIHN0bXQuICAq Lw0KIHR5cGVkZWYgc3RydWN0IHZfbWF5X2RlZl9vcHR5cGVfZCBHVFkoKCkp DQogew0KICAgdW5zaWduZWQgbnVtX3ZfbWF5X2RlZnM7IA0KLSAgc3RydWN0 IHZfbWF5X2RlZl9vcGVyYW5kX3R5cGUgR1RZKChsZW5ndGggKCIlaC5udW1f dl9tYXlfZGVmcyIpKSkNCisgIHN0cnVjdCB2X2RlZl91c2Vfb3BlcmFuZF90 eXBlIEdUWSgobGVuZ3RoICgiJWgubnVtX3ZfbWF5X2RlZnMiKSkpDQogCQkJ CQkJCSAgICAgIHZfbWF5X2RlZnNbMV07DQogfSB2X21heV9kZWZfb3B0eXBl X3Q7DQogDQpAQCAtODcsNyArODcsNyBAQCB0eXBlZGVmIHZ1c2Vfb3B0eXBl X3QgKnZ1c2Vfb3B0eXBlOw0KIHR5cGVkZWYgc3RydWN0IHZfbXVzdF9kZWZf b3B0eXBlX2QgR1RZKCgpKQ0KIHsNCiAgIHVuc2lnbmVkIG51bV92X211c3Rf ZGVmczsgDQotICB0cmVlIEdUWSgobGVuZ3RoKCIlaC5udW1fdl9tdXN0X2Rl ZnMiKSkpIHZfbXVzdF9kZWZzWzFdOw0KKyAgdl9kZWZfdXNlX29wZXJhbmRf dHlwZV90IEdUWSgobGVuZ3RoKCIlaC5udW1fdl9tdXN0X2RlZnMiKSkpIHZf bXVzdF9kZWZzWzFdOw0KIH0gdl9tdXN0X2RlZl9vcHR5cGVfdDsNCiANCiB0 eXBlZGVmIHZfbXVzdF9kZWZfb3B0eXBlX3QgKnZfbXVzdF9kZWZfb3B0eXBl Ow0KQEAgLTE1NywxMiArMTU3LDE0IEBAIHR5cGVkZWYgc3RtdF9vcGVyYW5k c190ICpzdG10X29wZXJhbmRzX3ANCiAjZGVmaW5lIFZfTVVTVF9ERUZfT1BT KEFOTikJCWdldF92X211c3RfZGVmX29wcyAoQU5OKQ0KICNkZWZpbmUgU1RN VF9WX01VU1RfREVGX09QUyhTVE1UKQlnZXRfdl9tdXN0X2RlZl9vcHMgKHN0 bXRfYW5uIChTVE1UKSkNCiAjZGVmaW5lIE5VTV9WX01VU1RfREVGUyhPUFMp CQkoKE9QUykgPyAoT1BTKS0+bnVtX3ZfbXVzdF9kZWZzIDogMCkNCi0jZGVm aW5lIFZfTVVTVF9ERUZfT1BfUFRSKE9QUywgSSkJZ2V0X3ZfbXVzdF9kZWZf b3BfcHRyICgoT1BTKSwgKEkpKQ0KLSNkZWZpbmUgVl9NVVNUX0RFRl9PUChP UFMsIEkpCQkJCQkJXA0KLQkJCQkoREVGX0ZST01fUFRSIChWX01VU1RfREVG X09QX1BUUiAoKE9QUyksIChJKSkpKQ0KLSNkZWZpbmUgU0VUX1ZfTVVTVF9E RUZfT1AoT1BTLCBJLCBWKQkJCQkJXA0KLQkJCQkoU0VUX0RFRiAoVl9NVVNU X0RFRl9PUF9QVFIgKChPUFMpLCAoSSkpLCAoVikpKQ0KLQ0KKyNkZWZpbmUg Vl9NVVNUX0RFRl9SRVNVTFRfUFRSKE9QUywgSSkJZ2V0X3ZfbXVzdF9kZWZf cmVzdWx0X3B0ciAoKE9QUyksIChJKSkNCisjZGVmaW5lIFZfTVVTVF9ERUZf UkVTVUxUKE9QUywgSSkgXA0KKwkJCQkoREVGX0ZST01fUFRSIChWX01VU1Rf REVGX1JFU1VMVF9QVFIgKChPUFMpLCAoSSkpKSkNCisjZGVmaW5lIFNFVF9W X01VU1RfREVGX1JFU1VMVChPUFMsIEksIFYpIFwNCisJCQkJKFNFVF9ERUYg KFZfTVVTVF9ERUZfUkVTVUxUX1BUUiAoKE9QUyksIChJKSksIChWKSkpDQor I2RlZmluZSBWX01VU1RfREVGX0tJTExfUFRSKE9QUywgSSkgIGdldF92X211 c3RfZGVmX2tpbGxfcHRyICgoT1BTKSwgKEkpKQ0KKyNkZWZpbmUgVl9NVVNU X0RFRl9LSUxMKE9QUywgSSkgKFVTRV9GUk9NX1BUUiAoVl9NVVNUX0RFRl9L SUxMX1BUUiAoKE9QUyksIChJKSkpKQ0KKyNkZWZpbmUgU0VUX1ZfTVVTVF9E RUZfS0lMTChPUFMsIEksIFYpIChTRVRfVVNFIChWX01VU1RfREVGX0tJTExf UFRSICgoT1BTKSwgKEkpKSwgKFYpKSkNCiANCiAjZGVmaW5lIFBISV9SRVNV TFRfUFRSKFBISSkJZ2V0X3BoaV9yZXN1bHRfcHRyIChQSEkpDQogI2RlZmlu ZSBQSElfUkVTVUxUKFBISSkJCURFRl9GUk9NX1BUUiAoUEhJX1JFU1VMVF9Q VFIgKFBISSkpDQpAQCAtMTk5LDEzICsyMDEsMTUgQEAgdHlwZWRlZiBzdHJ1 Y3Qgc3NhX29wZXJhbmRfaXRlcmF0b3JfZA0KICAgaW50IG51bV92dXNlOw0K ICAgaW50IG51bV92X21heXU7DQogICBpbnQgbnVtX3ZfbWF5ZDsNCi0gIGlu dCBudW1fdl9tdXN0Ow0KKyAgaW50IG51bV92X211c3R1Ow0KKyAgaW50IG51 bV92X211c3RkOw0KICAgaW50IHVzZV9pOw0KICAgaW50IGRlZl9pOw0KICAg aW50IHZ1c2VfaTsNCiAgIGludCB2X21heXVfaTsNCiAgIGludCB2X21heWRf aTsNCi0gIGludCB2X211c3RfaTsNCisgIGludCB2X211c3R1X2k7DQorICBp bnQgdl9tdXN0ZF9pOw0KICAgc3RtdF9vcGVyYW5kc19wIG9wczsNCiAgIGJv b2wgZG9uZTsNCiB9IHNzYV9vcF9pdGVyOw0KQEAgLTIxOCwxMyArMjIyLDE3 IEBAIHR5cGVkZWYgc3RydWN0IHNzYV9vcGVyYW5kX2l0ZXJhdG9yX2QNCiAj ZGVmaW5lIFNTQV9PUF9WTUFZVVNFCQkweDA4CS8qIFVTRSBwb3J0aW9uIG9m IFZfTUFZX0RFRlMuICAqLw0KICNkZWZpbmUgU1NBX09QX1ZNQVlERUYJCTB4 MTAJLyogREVGIHBvcnRpb24gb2YgVl9NQVlfREVGUy4gICovDQogI2RlZmlu ZSBTU0FfT1BfVk1VU1RERUYJCTB4MjAJLyogVl9NVVNUX0RFRiBkZWZpbml0 aW9ucy4gICovDQorI2RlZmluZSBTU0FfT1BfVk1VU1RERUZLSUxMICAgICAw eDQwICAgIC8qIFZfTVVTVF9ERUYga2lsbHMuICAqLw0KIA0KIC8qIFRoZXNl IGFyZSBjb21tb25seSBncm91cGVkIG9wZXJhbmQgZmxhZ3MuICAqLw0KICNk ZWZpbmUgU1NBX09QX1ZJUlRVQUxfVVNFUwkoU1NBX09QX1ZVU0UgfCBTU0Ff T1BfVk1BWVVTRSkNCiAjZGVmaW5lIFNTQV9PUF9WSVJUVUFMX0RFRlMJKFNT QV9PUF9WTUFZREVGIHwgU1NBX09QX1ZNVVNUREVGKQ0KKyNkZWZpbmUgU1NB X09QX1ZJUlRVQUxfS0lMTFMgICAgKFNTQV9PUF9WTVVTVERFRktJTEwpDQor I2RlZmluZSBTU0FfT1BfQUxMX1ZJUlRVQUxTICAgICAoU1NBX09QX1ZJUlRV QUxfVVNFUyB8IFNTQV9PUF9WSVJUVUFMX0tJTExTIHwgU1NBX09QX1ZJUlRV QUxfREVGUykNCiAjZGVmaW5lIFNTQV9PUF9BTExfVVNFUwkJKFNTQV9PUF9W SVJUVUFMX1VTRVMgfCBTU0FfT1BfVVNFKQ0KICNkZWZpbmUgU1NBX09QX0FM TF9ERUZTCQkoU1NBX09QX1ZJUlRVQUxfREVGUyB8IFNTQV9PUF9ERUYpDQot I2RlZmluZSBTU0FfT1BfQUxMX09QRVJBTkRTCShTU0FfT1BfQUxMX1VTRVMg fCBTU0FfT1BfQUxMX0RFRlMpDQorI2RlZmluZSBTU0FfT1BfQUxMX0tJTExT ICAgICAgICAoU1NBX09QX1ZJUlRVQUxfS0lMTFMpDQorI2RlZmluZSBTU0Ff T1BfQUxMX09QRVJBTkRTCShTU0FfT1BfQUxMX1VTRVMgfCBTU0FfT1BfQUxM X0RFRlMgfCBTU0FfT1BfQUxMX0tJTExTKQ0KIA0KIC8qIFRoaXMgbWFjcm8g ZXhlY3V0ZXMgYSBsb29wIG92ZXIgdGhlIG9wZXJhbmRzIG9mIFNUTVQgc3Bl Y2lmaWVkIGluIEZMQUcsIA0KICAgIHJldHVybmluZyBlYWNoIG9wZXJhbmQg YXMgYSAndHJlZScgaW4gdGhlIHZhcmlhYmxlIFRSRUVWQVIuICBJVEVSIGlz IGFuDQpAQCAtMjU4LDQgKzI2NiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBzc2Ff b3BlcmFuZF9pdGVyYXRvcl9kDQogICAgICAgICFvcF9pdGVyX2RvbmUgKCYo SVRFUikpOwkJCQkJXA0KICAgICAgICBvcF9pdGVyX25leHRfbWF5ZGVmICgm KFVTRVZBUiksICYoREVGVkFSKSwgJihJVEVSKSkpDQogDQorLyogVGhpcyBt YWNybyBleGVjdXRlcyBhIGxvb3Agb3ZlciB0aGUgVl9NVVNUX0RFRiBvcGVy YW5kcyBvZiBTVE1ULiAgVGhlIGRlZg0KKyAgIGFuZCBraWxsIGZvciBlYWNo IFZfTVVTVF9ERUYgaXMgcmV0dXJuZWQgaW4gREVGVkFSIGFuZCBLSUxMVkFS LiANCisgICBJVEVSIGlzIGFuIHNzYV9vcF9pdGVyIHN0cnVjdHVyZSB1c2Vk IHRvIGNvbnRyb2wgdGhlIGxvb3AuICAqLw0KKyNkZWZpbmUgRk9SX0VBQ0hf U1NBX01VU1RERUZfT1BFUkFORChERUZWQVIsIEtJTExWQVIsIFNUTVQsIElU RVIpCVwNCisgIGZvciAob3BfaXRlcl9pbml0X211c3RkZWYgKCYoSVRFUiks IFNUTVQsICYoS0lMTFZBUiksICYoREVGVkFSKSk7CVwNCisgICAgICAgIW9w X2l0ZXJfZG9uZSAoJihJVEVSKSk7CQkJCQlcDQorICAgICAgIG9wX2l0ZXJf bmV4dF9tdXN0ZGVmICgmKEtJTExWQVIpLCAmKERFRlZBUiksICYoSVRFUikp KQ0KKw0KICNlbmRpZiAgLyogR0NDX1RSRUVfU1NBX09QRVJBTkRTX0ggICov DQpJbmRleDogdHJlZS1zc2EuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9jdnMvZ2NjL2djYy9nY2MvdHJlZS1zc2EuYyx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDIuNDcNCmRpZmYgLXUgLXAgLXIyLjQ3IHRyZWUt c3NhLmMNCi0tLSB0cmVlLXNzYS5jCTEyIE9jdCAyMDA0IDE4OjMxOjQyIC0w MDAwCTIuNDcNCisrKyB0cmVlLXNzYS5jCTE3IE9jdCAyMDA0IDIxOjAyOjA2 IC0wMDAwDQpAQCAtNjcyLDcgKzY3Miw3IEBAIHZlcmlmeV9zc2EgKHZvaWQp DQogCXsNCiAJICB0cmVlIHN0bXQgPSBic2lfc3RtdCAoYnNpKTsNCiANCi0J ICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5EIChvcCwgc3RtdCwgaXRlciwg U1NBX09QX1ZJUlRVQUxfVVNFUykNCisJICBGT1JfRUFDSF9TU0FfVFJFRV9P UEVSQU5EIChvcCwgc3RtdCwgaXRlciwgU1NBX09QX1ZJUlRVQUxfVVNFUyB8 IFNTQV9PUF9WSVJUVUFMX0tJTExTKQ0KIAkgICAgew0KIAkgICAgICBpZiAo dmVyaWZ5X3VzZSAoYmIsIGRlZmluaXRpb25fYmxvY2tbU1NBX05BTUVfVkVS U0lPTiAob3ApXSwNCiAJCQkgICAgICBvcCwgc3RtdCwgZmFsc2UsIHRydWUs DQpAQCAtMTA4Miw3ICsxMDgyLDggQEAgcmVwbGFjZV9pbW1lZGlhdGVfdXNl cyAodHJlZSB2YXIsIHRyZWUgcg0KIAl9DQogICAgICAgZWxzZQ0KIAl7DQot CSAgRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5EICh1c2VfcCwgc3RtdCwgaXRl ciwgU1NBX09QX1ZJUlRVQUxfVVNFUykNCisJICBGT1JfRUFDSF9TU0FfVVNF X09QRVJBTkQgKHVzZV9wLCBzdG10LCBpdGVyLCANCisJCQkJICAgIFNTQV9P UF9WSVJUVUFMX1VTRVMgfCBTU0FfT1BfVklSVFVBTF9LSUxMUykNCiAJICAg IGlmIChVU0VfRlJPTV9QVFIgKHVzZV9wKSA9PSB2YXIpDQogCSAgICAgIHBy b3BhZ2F0ZV92YWx1ZSAodXNlX3AsIHJlcGwpOw0KIAl9DQpJbmRleDogdHJl ZS12ZWN0b3JpemVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm aWxlOiAvY3ZzL2djYy9nY2MvZ2NjL3RyZWUtdmVjdG9yaXplci5jLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMi4xOQ0KZGlmZiAtdSAtcCAtcjIuMTkgdHJl ZS12ZWN0b3JpemVyLmMNCi0tLSB0cmVlLXZlY3Rvcml6ZXIuYwkxNSBPY3Qg MjAwNCAxNDozNjozMiAtMDAwMAkyLjE5DQorKysgdHJlZS12ZWN0b3JpemVy LmMJMTcgT2N0IDIwMDQgMjE6MDI6MDcgLTAwMDANCkBAIC0zODEsNyArMzgx LDEwIEBAIHJlbmFtZV92YXJpYWJsZXNfaW5fYmIgKGJhc2ljX2Jsb2NrIGJi KQ0KIA0KICAgICAgIHZfbXVzdF9kZWZzID0gVl9NVVNUX0RFRl9PUFMgKGFu bik7DQogICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9WX01VU1RfREVGUyAo dl9tdXN0X2RlZnMpOyBpKyspDQotCXJlbmFtZV9kZWZfb3AgKFZfTVVTVF9E RUZfT1BfUFRSICh2X211c3RfZGVmcywgaSksIHN0bXQpOw0KKwl7DQorCSAg cmVuYW1lX3VzZV9vcCAoVl9NVVNUX0RFRl9LSUxMX1BUUiAodl9tdXN0X2Rl ZnMsIGkpKTsNCisJICByZW5hbWVfZGVmX29wIChWX01VU1RfREVGX1JFU1VM VF9QVFIgKHZfbXVzdF9kZWZzLCBpKSwgc3RtdCk7DQorCX0NCiAgICAgfQ0K IA0KICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5zdWNjcykNCkBAIC0x ODUzLDcgKzE4NTYsNyBAQCB2ZWN0X2NyZWF0ZV9kYXRhX3JlZl9wdHIgKHRy ZWUgc3RtdCwgYmxvDQogICAgIH0NCiAgIGZvciAoaSA9IDA7IGkgPCBudl9t dXN0X2RlZnM7IGkrKykNCiAgICAgew0KLSAgICAgIHRyZWUgZGVmID0gVl9N VVNUX0RFRl9PUCAodl9tdXN0X2RlZnMsIGkpOw0KKyAgICAgIHRyZWUgZGVm ID0gVl9NVVNUX0RFRl9SRVNVTFQgKHZfbXVzdF9kZWZzLCBpKTsNCiAgICAg ICBpZiAoVFJFRV9DT0RFIChkZWYpID09IFNTQV9OQU1FKQ0KICAgICAgICAg Yml0bWFwX3NldF9iaXQgKHZhcnNfdG9fcmVuYW1lLCB2YXJfYW5uIChTU0Ff TkFNRV9WQVIgKGRlZikpLT51aWQpOw0KICAgICB9DQo= --8323328-1998068438-1098064831=:5720--