Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qkAm1-00DQYN-Im for pgsql-bugs@arkaria.postgresql.org; Sat, 23 Sep 2023 22:06:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qkAly-001nVV-9S for pgsql-bugs@arkaria.postgresql.org; Sat, 23 Sep 2023 22:06:46 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qkAlx-001nUs-Bf for pgsql-bugs@lists.postgresql.org; Sat, 23 Sep 2023 22:06:45 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qkAls-006GZa-CU for pgsql-bugs@lists.postgresql.org; Sat, 23 Sep 2023 22:06:43 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4RtNWw25G0z49Q0K; Sun, 24 Sep 2023 01:06:36 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1695506796; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WcW3+b2QuncXg7j1muCmIJ027lGUkkdL5cCrP8QOENs=; b=GmCA/O6VCDYF5vm7OyxAHX1WRnCJyJpJTVPBp1u27MRils061YKUbaU0BFVrENtEoapOad ijzMpPEu2x00Pg4w67AocpjHaSBC9J9s+dK7JByGlt2tqsy34n+p9CgQ/XvN0hp+kofLjo tzvX3YCbyETKjPOE4gKdUBm/VPFNCF85c9oel7FcE9fBAB/jzE2zbxYqoqXPMmioUH7unD 45R+thfNysoftyoRnsfQXO0kPqjlsPX3tb+oT/UU3Si9sX2bVjCzpMCK6fN3PZMjHvgT74 y3QWIxjQIhJFw59VC/DmcZ8CgEnpM98DHnFqeU1jMcW6rBQRyJ4mPST+PNzTXQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1695506796; a=rsa-sha256; cv=none; b=bzafbdq+HwVDjekwaQBGFTjKyzK0lPywSbAIot+HOa8jNRpLeXPw0PBS3c4FTjgEte6oB7 HtLtllSNGLA9VigB2vnw1vNeHFIHuVmmOl8StOxvfr2+WG4wfBmCUrrYaxAC/Ac4PEzjZ5 A9wAJhIKxbRRRa2pm1yY2p1j1ZKEnc8Y9bDxbjo87Au9fFz+HW+rDkvHUL7NlgsQ+nTX1q 6BNAQCtrmtEJoIul0Fh0lOu7zPEgwYtF6HOjn6fjFk5kq+3gY3sgeSintlXB6Cx+vCq0gY lCw8n+3g7sez0xzgqD38grreySmxW8yhvYhoi9VyZBWUXy6Ats5Kue0tZKtNAg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1695506796; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WcW3+b2QuncXg7j1muCmIJ027lGUkkdL5cCrP8QOENs=; b=ie5yZORhcK1nGt/j3UUl7zSrWX2ydNi9MlhvwnWwBWLmfGzmnqTl+9l/lEbA+mMk5Bz/3+ yRKJKh3hWB3Wn0WXgCUf2cckZT7zyEIyBssjSYnj9DR4uIO4ehIR9pSg6xV37g/9uD3u2R KBTdIZ2wxM5VWbAm7Ax8CxAzn1ULYXReqNO02iu9icnPdv39YV+uFBa4ByvhM7QsrlLzLA EGmjhUtKWdiH11I7S+EpwxRAtH9b7dFB0+YilWCqR+kJJ49OsZePew881NWBlb3nbNXiR0 lRvxSvRfOZ/FVn+O34kLYwToPdGhQUueOyPn+8KlXSvGlWg4j5a/bXCcO/HyNw== Content-Type: multipart/mixed; boundary="------------yjpPVxV9gf2zH248yXRBFpS0" Message-ID: <80e4ef74-4a00-4631-963f-3dd11e64c6fe@iki.fi> Date: Sun, 24 Sep 2023 01:06:35 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Subject: Re: BUG #18129: GiST index produces incorrect query results Content-Language: en-US To: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org References: <18129-caca016eaf0c3702@postgresql.org> From: Heikki Linnakangas In-Reply-To: <18129-caca016eaf0c3702@postgresql.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 22/09/2023 09:00, PG Bug reporting form wrote: > First bad commit is 9155580fd, on which three different outcomes are > possible: test passes/test fails/assertion fails. > Assertion failures, that we had observed after 9155580fd, were fixed by > a7ee7c851 and 741b88435, but apparently there is another defect induced > by that gist implementation change. This is indeed a similar bug to that fixed in 741b88435 and a7ee7c851. In those commits, we fixed the insertion code so that whenever we insert a downlink to the parent page and that causes the parent page to split, we invalidate the 'downlinkoffnum' we had memorized for the child. Because when the parent page is split, the downlink for the child likely moves. However, the downlink can move even when we *don't* split the parent. Splitting a page not only inserts the new tuple for the new right page, but also updates the old downlink, because the key representing what is now the left page covers less keys than the original page. And updating a tuple is implemented as delete+insert. The delete moves existing tuples on the page! In other words, this code and comment in gistfinishsplit(): > if (gistinserttuples(state, stack->parent, giststate, > tuples, 2, > stack->downlinkoffnum, > left->buf, right->buf, > true, /* Unlock parent */ > unlockbuf /* Unlock stack->buffer if caller wants > * that */ > )) > { > /* > * If the parent page was split, the downlink might have moved. > */ > stack->downlinkoffnum = InvalidOffsetNumber; > } is wrong. We must invalidate 'downlinkoffnum' whether or not the parent page was split, because updating an existing tuple can also move other tuples on the page. Attached is a set of patches to fix this: 1. To catch the problem earlier - already during the index build - I modified getFindCorrectParent() to always find the parent the hard way by scanning the parent page, even if 'downlinkoffnum' is set. Once the downlink is found, it compares it with the 'downlinkoffnum', and PANICs if it wasn't where we expected. That defeats the point of memorizing the 'downlinkoffnum' in the first place, but it's a useful cross-check. I don't intend to commit this, but it was useful during debugging. 2. A straightforward fix for the bug. 3. Looking at gistFindCorrectParent, when it steps right, it also doesn't update 'downlinkoffnum' of the parent page. Surely if we step to a different block altogether, the memorized downlink position of the previous block no longer applies. Worryingly, I haven't been able to get a test failure caused by that. Maybe there are some reasons why we never need to split the parent after that, not sure. But it sure looks wrong. 4. Given how many bugs we've already had with this, I'd like to make this more robust. Currently, we meticulously track if we have made any inserts that invalidate the memorized location of the downlink. Instead, gistFindCorrectParent() could treat the memorized location as just a hint, and always check if the downlink is still at the memorized location. If it is, great, and if it's not, find it the hard way. That makes it unnecessary to clear 'downlinkoffnum' at the right places. We still need the 'retry_from_parent' flag, though. 5. Re-indent the code after previous commit. Separated for easier review. I'd also like to add something to our regression test suite for better coverage of this. The intarray test case is very useful, but it'd be nice to have something in the main regression suite, as this is a general GiST issue, not related to intarray. I haven't spent any time on that yet. -- Heikki Linnakangas Neon (https://neon.tech) --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-assertion-that-downlinkoffnum-is-set-correctly.patch" Content-Disposition: attachment; filename*0="0001-Add-assertion-that-downlinkoffnum-is-set-correctly.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSBhZGNhMDFmZDdkZDU2NmY2ZGE5MDVjODAwNDgwMTc2OTc4YjU2NjNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMjQgU2VwIDIwMjMgMDA6NTI6MjAgKzAzMDAK U3ViamVjdDogW1BBVENIIDEvNV0gQWRkIGFzc2VydGlvbiB0aGF0ICdkb3dubGlua29mZm51 bScgaXMgc2V0IGNvcnJlY3RseS4KCkkgZG9uJ3QgaW50ZW5kIHRvIHB1c2ggdGhpcywgYnV0 IGl0IHdhcyB1c2VmdWwgd2hpbGUgZGVidWdnaW5nLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3QuYyB8IDE2ICsrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAx NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IGIxZjE5ZjZh OGU2Li4xMDQwNTIzOTAyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAyMiw2 ICsxMDIyLDEzIEBAIGdpc3RGaW5kQ29ycmVjdFBhcmVudChSZWxhdGlvbiByLCBHSVNUSW5z ZXJ0U3RhY2sgKmNoaWxkKQogewogCUdJU1RJbnNlcnRTdGFjayAqcGFyZW50ID0gY2hpbGQt PnBhcmVudDsKIAorI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQlzYXZlX2Rv d25saW5rb2ZmbnVtID0gY2hpbGQtPmRvd25saW5rb2ZmbnVtOworCUJsb2NrTnVtYmVyIHNh dmVfcGFyZW50X2Jsa25vID0gcGFyZW50LT5ibGtubzsKKworCWNoaWxkLT5kb3dubGlua29m Zm51bSA9IEludmFsaWRPZmZzZXROdW1iZXI7CisjZW5kaWYKKwogCWdpc3RjaGVja3BhZ2Uo ciwgcGFyZW50LT5idWZmZXIpOwogCXBhcmVudC0+cGFnZSA9IChQYWdlKSBCdWZmZXJHZXRQ YWdlKHBhcmVudC0+YnVmZmVyKTsKIApAQCAtMTA0Nyw2ICsxMDU0LDE1IEBAIGdpc3RGaW5k Q29ycmVjdFBhcmVudChSZWxhdGlvbiByLCBHSVNUSW5zZXJ0U3RhY2sgKmNoaWxkKQogCQkJ CXsKIAkJCQkJLyogeWVzISEsIGZvdW5kICovCiAJCQkJCWNoaWxkLT5kb3dubGlua29mZm51 bSA9IGk7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJCQlpZiAocGFyZW50LT5s c24gPT0gUGFnZUdldExTTihwYXJlbnQtPnBhZ2UpICYmIHNhdmVfZG93bmxpbmtvZmZudW0g IT0gSW52YWxpZE9mZnNldE51bWJlcikgIHsKKwkJCQkJCWlmIChpICE9IHNhdmVfZG93bmxp bmtvZmZudW0pIHsKKwkJCQkJCQllbG9nKFBBTklDLCAiZXhwZWN0ZWQgdG8gZmluZCBkb3du bGluayBmb3IgJXUgb24gYmxrICV1IG9mZnNldCAldSwgYnV0IGl0IHdhcyBmb3VuZCBvbiBi bGsgJXUgb2Zmc2V0ICV1IiwKKwkJCQkJCQkJIGNoaWxkLT5ibGtubywgc2F2ZV9wYXJlbnRf Ymxrbm8sIHNhdmVfZG93bmxpbmtvZmZudW0sCisJCQkJCQkJCSBwYXJlbnQtPmJsa25vLCBp KTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCiAJCQkJCXJldHVybjsKIAkJCQl9CiAJCQl9 Ci0tIAoyLjM5LjIKCg== --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/x-patch; charset=UTF-8; name="0002-Fix-another-bug-in-GiST-index-build.patch" Content-Disposition: attachment; filename="0002-Fix-another-bug-in-GiST-index-build.patch" Content-Transfer-Encoding: base64 RnJvbSBmNDA1ZGIyMmI2ZWEyY2IzOWE5YjA2M2U0NzU5YzBmOTdmYTI4MWE2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMjQgU2VwIDIwMjMgMDA6MjI6MzAgKzAzMDAK U3ViamVjdDogW1BBVENIIDIvNV0gRml4IGFub3RoZXIgYnVnIGluIEdpU1QgaW5kZXggYnVp bGQuCgpZZXQgYW5vdGhlciBidWcgaW4gdGhlIGlsayBvZiBjb21taXRzIGE3ZWU3Yzg1MSBh bmQgNzQxYjg4NDM1LiBJbgo3NDFiODg0MzUsIHdlIHRvb2sgY2FyZSB0byBjbGVhciB0aGUg bWVtb3JpemVkIGxvY2F0aW9uIG9mIHRoZQpkb3dubGluayB3aGVuIHdlIHNwbGl0IHRoZSBw YXJlbnQgcGFnZSwgYmVjYXVzZSBzcGxpdHRpbmcgdGhlIHBhcmVudApwYWdlIGNhbiBtb3Zl IHRoZSBkb3dubGluay4gQnV0IHdlIG1pc3NlZCB0aGF0IGV2ZW4gKnVwZGF0aW5nKiBhIHR1 cGxlCm9uIHRoZSBwYXJlbnQgY2FuIG1vdmUgaXQsIGJlY2F1c2UgdXBkYXRpbmcgYSB0dXBs ZSBvbiBhIGdpc3QgcGFnZSBpcwppbXBsZW1lbnRlZCBhcyBhIGRlbGV0ZStpbnNlcnQsIHNv IHRoZSB1cGRhdGVkIHR1cGxlIGdldHMgbW92ZWQgdG8gdGhlCmVuZCBvZiB0aGUgcGFnZS4g VG8gZml4LCBjbGVhciB0aGUgZG93bmxpbmsgd2hlbiB3ZSB1cGRhdGllIGEgdHVwbGUgb24K dGhlIHBhcmVudCBwYWdlLCBldmVuIGlmIGl0J3Mgbm90IHNwbGl0LgoKQmFja3BhdGNoIFhY WAoKUmVwb3J0ZWQtYnk6IEFsZXhhbmRlciBMYWtoaW4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93 d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8xODEyOS1jYWNhMDE2ZWFmMGMzNzAyQHBv c3RncmVzcWwub3JnCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIHwgMzcg KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIx IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YwppbmRleCAxMDQwNTIzOTAyNy4uZDQ0NjllYjdjYzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0LmMKQEAgLTEyNzIsNyArMTI3MiwxMCBAQCBnaXN0aW5zZXJ0dHVwbGUoR0lTVEluc2Vy dFN0YXRlICpzdGF0ZSwgR0lTVEluc2VydFN0YWNrICpzdGFjaywKICAqCiAgKiBSZXR1cm5z ICd0cnVlJyBpZiB0aGUgcGFnZSBoYWQgdG8gYmUgc3BsaXQuIE5vdGUgdGhhdCBpZiB0aGUg cGFnZSB3YXMKICAqIHNwbGl0LCB0aGUgaW5zZXJ0ZWQvdXBkYXRlZCB0dXBsZXMgbWlnaHQn dmUgYmVlbiBpbnNlcnRlZCB0byBhIHJpZ2h0Ci0gKiBzaWJsaW5nIG9mIHN0YWNrLT5idWZm ZXIgaW5zdGVhZCBvZiBzdGFjay0+YnVmZmVyIGl0c2VsZi4KKyAqIHNpYmxpbmcgb2Ygc3Rh Y2stPmJ1ZmZlciBpbnN0ZWFkIG9mIHN0YWNrLT5idWZmZXIgaXRzZWxmLiBFdmVuIGlmIHRo ZSBwYWdlCisgKiB3YXMgbm90IHNwbGl0IGJ1dCBhbiBvbGQgdHVwbGUgd2FzIHVwZGF0ZWQs IGFueSBleGlzdGluZyB0dXBsZXMgb24gdGhlIHBhZ2UKKyAqIGluY2x1ZGluZyB0aGUgb25l IHRoYXQncyB1cGRhdGVkIG1pZ2h0IG1vdmUgdG8gYSBkaWZmZXJlbnQgb2Zmc2V0IG9uIHRo CisgKiBlcGFnZS4KICAqLwogc3RhdGljIGJvb2wKIGdpc3RpbnNlcnR0dXBsZXMoR0lTVElu c2VydFN0YXRlICpzdGF0ZSwgR0lTVEluc2VydFN0YWNrICpzdGFjaywKQEAgLTEzNzEsNyAr MTM3NCw4IEBAIGdpc3RmaW5pc2hzcGxpdChHSVNUSW5zZXJ0U3RhdGUgKnN0YXRlLCBHSVNU SW5zZXJ0U3RhY2sgKnN0YWNrLAogCQl7CiAJCQkvKgogCQkJICogSWYgdGhlIHBhcmVudCBw YWdlIHdhcyBzcGxpdCwgdGhlIGV4aXN0aW5nIGRvd25saW5rIG1pZ2h0IGhhdmUKLQkJCSAq IG1vdmVkLgorCQkJICogbW92ZWQuIFRoaXMgYXNzdW1lcyB0aGF0IGdpc3RpbnNldHR1cGxl cygpIGRvZXNuJ3QgbW92ZSB0aGUKKwkJCSAqIHR1cGxlcyBhcm91bmQgdW5sZXNzIHRoZSBw YWdlIGlzIHNwbGl0LgogCQkJICovCiAJCQlzdGFjay0+ZG93bmxpbmtvZmZudW0gPSBJbnZh bGlkT2Zmc2V0TnVtYmVyOwogCQl9CkBAIC0xMzg5LDIwICsxMzkzLDIxIEBAIGdpc3RmaW5p c2hzcGxpdChHSVNUSW5zZXJ0U3RhdGUgKnN0YXRlLCBHSVNUSW5zZXJ0U3RhY2sgKnN0YWNr LAogCXR1cGxlc1swXSA9IGxlZnQtPmRvd25saW5rOwogCXR1cGxlc1sxXSA9IHJpZ2h0LT5k b3dubGluazsKIAlnaXN0RmluZENvcnJlY3RQYXJlbnQoc3RhdGUtPnIsIHN0YWNrKTsKLQlp ZiAoZ2lzdGluc2VydHR1cGxlcyhzdGF0ZSwgc3RhY2stPnBhcmVudCwgZ2lzdHN0YXRlLAot CQkJCQkJIHR1cGxlcywgMiwKLQkJCQkJCSBzdGFjay0+ZG93bmxpbmtvZmZudW0sCi0JCQkJ CQkgbGVmdC0+YnVmLCByaWdodC0+YnVmLAotCQkJCQkJIHRydWUsCS8qIFVubG9jayBwYXJl bnQgKi8KLQkJCQkJCSB1bmxvY2tidWYJLyogVW5sb2NrIHN0YWNrLT5idWZmZXIgaWYgY2Fs bGVyIHdhbnRzCi0JCQkJCQkJCQkgKiB0aGF0ICovCi0JCQkJCQkgKSkKLQl7Ci0JCS8qCi0J CSAqIElmIHRoZSBwYXJlbnQgcGFnZSB3YXMgc3BsaXQsIHRoZSBkb3dubGluayBtaWdodCBo YXZlIG1vdmVkLgotCQkgKi8KLQkJc3RhY2stPmRvd25saW5rb2ZmbnVtID0gSW52YWxpZE9m ZnNldE51bWJlcjsKLQl9CisJKHZvaWQpIGdpc3RpbnNlcnR0dXBsZXMoc3RhdGUsIHN0YWNr LT5wYXJlbnQsIGdpc3RzdGF0ZSwKKwkJCQkJCQl0dXBsZXMsIDIsCisJCQkJCQkJc3RhY2st PmRvd25saW5rb2ZmbnVtLAorCQkJCQkJCWxlZnQtPmJ1ZiwgcmlnaHQtPmJ1ZiwKKwkJCQkJ CQl0cnVlLAkvKiBVbmxvY2sgcGFyZW50ICovCisJCQkJCQkJdW5sb2NrYnVmCS8qIFVubG9j ayBzdGFjay0+YnVmZmVyIGlmIGNhbGxlcgorCQkJCQkJCQkJCSAqIHdhbnRzIHRoYXQgKi8K KwkJKTsKKworCS8qCisJICogVGhlIGRvd25saW5rIG1pZ2h0IGhhdmUgbW92ZWQgd2hlbiB3 ZSB1cGRhdGVkIGl0LiBFdmVuIGlmIHRoZSBwYWdlCisJICogd2Fzbid0IHNwbGl0LCBiZWNh dXNlIGdpc3RpbnNlcnR0dXBsZXMoKSBpbXBsZW1lbnRzIHVwZGF0aW5nIHRoZSBvbGQKKwkg KiB0dXBsZSBieSByZW1vdmluZyBhbmQgcmUtaW5zZXJ0aW5nIGl0IQorCSAqLworCXN0YWNr LT5kb3dubGlua29mZm51bSA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKIAlBc3NlcnQobGVm dC0+YnVmID09IHN0YWNrLT5idWZmZXIpOwogCi0tIAoyLjM5LjIKCg== --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/x-patch; charset=UTF-8; name="0003-Also-clear-downlinkoffnum-when-the-parent-block-is-c.patch" Content-Disposition: attachment; filename*0="0003-Also-clear-downlinkoffnum-when-the-parent-block-is-c.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5OWE3MWU5NTQzYmEyY2FlMGJmOTE0MDNmNzhjNTc2NzFhNmFlYmY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjMgU2VwIDIwMjMgMjA6NTA6MzggKzAzMDAK U3ViamVjdDogW1BBVENIIDMvNV0gQWxzbyBjbGVhciAnZG93bmxpbmtvZmZudW0nIHdoZW4g dGhlIHBhcmVudCBibG9jayBpcwogY2hhbmdlZC4KCldoaWxlIGxvb2tpbmcgYXQgYnVnICMx ODEyOSwgSSBub3RpY2VkIHRoaXMgc3BvdCB3aGVyZSB3ZSB1cGRhdGUgdGhlCnBhcmVudCBi bG9jayBpbiB0aGUgc3RhY2ssIGJ1dCB3ZSBkb24ndCBjbGVhciB0aGUKJ2Rvd25saW5rb2Zm bnVtJy4gVGhpcyBjYXNlIHdhc24ndCBoaXQgYnkgdGhlIHRlc3QgY2FzZSwgYnV0IGl0IGNv dWxkCmxlYWQgdG8gc2ltaWxhciBidWdzLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3QuYyB8IDEgKwogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdC5jCmluZGV4IGQ0NDY5ZWI3Y2M0Li5iMzc0OWJiYjQzMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTA2OCw2ICsxMDY4LDcgQEAgZ2lzdEZpbmRDb3Jy ZWN0UGFyZW50KFJlbGF0aW9uIHIsIEdJU1RJbnNlcnRTdGFjayAqY2hpbGQpCiAJCQl9CiAK IAkJCXBhcmVudC0+Ymxrbm8gPSBHaXN0UGFnZUdldE9wYXF1ZShwYXJlbnQtPnBhZ2UpLT5y aWdodGxpbms7CisJCQlwYXJlbnQtPmRvd25saW5rb2ZmbnVtID0gSW52YWxpZE9mZnNldE51 bWJlcjsKIAkJCVVubG9ja1JlbGVhc2VCdWZmZXIocGFyZW50LT5idWZmZXIpOwogCQkJaWYg KHBhcmVudC0+Ymxrbm8gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQkJewotLSAKMi4zOS4y Cgo= --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/x-patch; charset=UTF-8; name="0004-Treat-downlinkoffnum-only-as-a-hint-in-gistFindCorre.patch" Content-Disposition: attachment; filename*0="0004-Treat-downlinkoffnum-only-as-a-hint-in-gistFindCorre.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NjFiZDFiYmIwMjlmNzFlMGRiZTdkMzdhNzMxY2FlNTBhZmI4NjJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMjQgU2VwIDIwMjMgMDA6NDk6MDggKzAzMDAK U3ViamVjdDogW1BBVENIIDQvNV0gVHJlYXQgJ2Rvd25saW5rb2ZmbnVtJyBvbmx5IGFzIGEg aGludCBpbgogZ2lzdEZpbmRDb3JyZWN0UGFyZW50LgoKV2UgaGF2ZSBoYWQgYSBudW1iZXIg b2YgYnVncyBpbiB0cnlpbmcgdG8gbWV0aWN1bG91c2x5IGNsZWFyCidkb3dubGlua29mZm51 bScgd2hlbiB3ZSB1cGRhdGUgYSBwYXJlbnQgcGFnZS4gQnV0IGluc3RlYWQgb2YgdHJ5aW5n CmhhcmQgdG8gY2xlYXIgaXQgYWxsIHRoZSByaWdodCBwbGFjZXMsIHdlIGNhbiB0cmVhdCBp cyBtZXJlbHkgYXMgYQpoaW50LCBzbyB0aGF0IGlmIHdlIGZvcmdldCB0byBjbGVhciBpdCwg aXQgc3RpbGwgd29ya3MuCgpUaGlzIG1ha2VzIHRoZSBmaXhlcyBpbiBjb21taXQgWFhYIGFu ZCBhN2VlN2M4NTEzIHVubmVjZXNzYXJ5LiBJdApkb2Vzbid0IGh1cnQgdG8gc3RpbGwgY2xl YXIgJ2Rvd25saW5rb2ZmbnVtJywgYnV0IGV2ZXJ5dGhpbmcgd291bGQKd29yayB3aXRob3V0 IGl0IG5vdy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgfCA2OSArKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzYgaW5z ZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmlu ZGV4IGIzNzQ5YmJiNDMyLi40MmY5NDA4YmVjYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YwpAQCAtMTAxOCwzNCArMTAxOCw0NiBAQCBnaXN0RmluZFBhdGgoUmVsYXRpb24gciwgQmxv Y2tOdW1iZXIgY2hpbGQsIE9mZnNldE51bWJlciAqZG93bmxpbmtvZmZudW0pCiAgKiByZW1h aW4gc28gYXQgZXhpdCwgYnV0IGl0IG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBwYWdlIGFueW1v cmUuCiAgKi8KIHN0YXRpYyB2b2lkCi1naXN0RmluZENvcnJlY3RQYXJlbnQoUmVsYXRpb24g ciwgR0lTVEluc2VydFN0YWNrICpjaGlsZCkKK2dpc3RGaW5kQ29ycmVjdFBhcmVudChSZWxh dGlvbiByLCBHSVNUSW5zZXJ0U3RhY2sgKmNoaWxkLCBib29sIGlzX2J1aWxkKQogewogCUdJ U1RJbnNlcnRTdGFjayAqcGFyZW50ID0gY2hpbGQtPnBhcmVudDsKLQotI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKLQlpbnQJCQlzYXZlX2Rvd25saW5rb2ZmbnVtID0gY2hpbGQtPmRv d25saW5rb2ZmbnVtOwotCUJsb2NrTnVtYmVyIHNhdmVfcGFyZW50X2Jsa25vID0gcGFyZW50 LT5ibGtubzsKLQotCWNoaWxkLT5kb3dubGlua29mZm51bSA9IEludmFsaWRPZmZzZXROdW1i ZXI7Ci0jZW5kaWYKKwlJdGVtSWQJCWlpZDsKKwlJbmRleFR1cGxlCWlkeHR1cGxlOworCU9m ZnNldE51bWJlciBpLAorCQkJCW1heG9mZjsKKwlHSVNUSW5zZXJ0U3RhY2sgKnB0cjsKIAog CWdpc3RjaGVja3BhZ2UociwgcGFyZW50LT5idWZmZXIpOwogCXBhcmVudC0+cGFnZSA9IChQ YWdlKSBCdWZmZXJHZXRQYWdlKHBhcmVudC0+YnVmZmVyKTsKKwltYXhvZmYgPSBQYWdlR2V0 TWF4T2Zmc2V0TnVtYmVyKHBhcmVudC0+cGFnZSk7CiAKLQkvKiBoZXJlIHdlIGRvbid0IG5l ZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzcGxpdCBhbmQgcGFnZSB1cGRhdGUgKi8KLQlp ZiAoY2hpbGQtPmRvd25saW5rb2ZmbnVtID09IEludmFsaWRPZmZzZXROdW1iZXIgfHwKLQkJ cGFyZW50LT5sc24gIT0gUGFnZUdldExTTihwYXJlbnQtPnBhZ2UpKQorCS8qIENoZWNrIGlm IHRoZSBkb3dubGluayBpcyBzdGlsbCB3aGVyZSBpdCB3YXMgYmVmb3JlICovCisJaWYgKGNo aWxkLT5kb3dubGlua29mZm51bSAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyICYmIGNoaWxkLT5k b3dubGlua29mZm51bSA8PSBtYXhvZmYpCiAJewotCQkvKiBwYXJlbnQgaXMgY2hhbmdlZCwg bG9vayBjaGlsZCBpbiByaWdodCBsaW5rcyB1bnRpbCBmb3VuZCAqLwotCQlPZmZzZXROdW1i ZXIgaSwKLQkJCQkJbWF4b2ZmOwotCQlJdGVtSWQJCWlpZDsKLQkJSW5kZXhUdXBsZQlpZHh0 dXBsZTsKLQkJR0lTVEluc2VydFN0YWNrICpwdHI7CisJCWlpZCA9IFBhZ2VHZXRJdGVtSWQo cGFyZW50LT5wYWdlLCBjaGlsZC0+ZG93bmxpbmtvZmZudW0pOworCQlpZHh0dXBsZSA9IChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYXJlbnQtPnBhZ2UsIGlpZCk7CisJCWlmIChJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKCYoaWR4dHVwbGUtPnRfdGlkKSkgPT0gY2hpbGQtPmJs a25vKQorCQkJcmV0dXJuOwkJCQkvKiBzdGlsbCB0aGVyZSAqLworCX0KIAorCS8qCisJICog VGhlIHBhZ2UgaGFzIGNoYW5nZWQgc2luY2Ugd2UgbG9va2VkLiBEdXJpbmcgbm9ybWFsIG9w ZXJhdGlvbiwgZXZlcnkKKwkgKiB1cGRhdGUgb2YgYSBwYWdlIGNoYW5nZXMgaXRzIExTTiwg c28gdGhlIExTTiB3ZSBtZW1vcml6ZWQgc2hvdWxkIGhhdmUKKwkgKiBjaGFuZ2VkIHRvby4g RHVyaW5nIGluZGV4IGJ1aWxkLCBob3dldmVyLCB3ZSBkb24ndCBXQUwtbG9nIHRoZSBjaGFu Z2VzCisJICogdW50aWwgd2UgaGF2ZSBidWlsdCB0aGUgaW5kZXgsIHNvIHRoZSBMU04gZG9l c24ndCBjaGFuZ2UuIFRoZXJlIGlzIG5vCisJICogY29uY3VycmVudCBhY3Rpdml0eSBkdXJp bmcgaW5kZXggYnVpbGQsIGJ1dCB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlCisJICogcGFy ZW50IG91cnNlbHZlcy4KKwkgKi8KKwlBc3NlcnQocGFyZW50LT5sc24gIT0gUGFnZUdldExT TihwYXJlbnQtPnBhZ2UpIHx8IGlzX2J1aWxkKTsKKworCS8qCisJICogU2NhbiB0aGUgcGFn ZSB0byByZS1maW5kIHRoZSBkb3dubGluay4gSWYgdGhlIHBhZ2Ugd2FzIHNwbGl0LCBpdCBt aWdodAorCSAqIGhhdmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSwgc28gZm9sbG93IHRo ZSByaWdodCBsaW5rcyB1bnRpbCB3ZSBmaW5kCisJICogaXQuCisJICovCisJewogCQl3aGls ZSAodHJ1ZSkKIAkJewotCQkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYXJl bnQtPnBhZ2UpOwogCQkJZm9yIChpID0gRmlyc3RPZmZzZXROdW1iZXI7IGkgPD0gbWF4b2Zm OyBpID0gT2Zmc2V0TnVtYmVyTmV4dChpKSkKIAkJCXsKIAkJCQlpaWQgPSBQYWdlR2V0SXRl bUlkKHBhcmVudC0+cGFnZSwgaSk7CkBAIC0xMDU0LDE1ICsxMDY2LDYgQEAgZ2lzdEZpbmRD b3JyZWN0UGFyZW50KFJlbGF0aW9uIHIsIEdJU1RJbnNlcnRTdGFjayAqY2hpbGQpCiAJCQkJ ewogCQkJCQkvKiB5ZXMhISwgZm91bmQgKi8KIAkJCQkJY2hpbGQtPmRvd25saW5rb2ZmbnVt ID0gaTsKLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0JCQkJCWlmIChwYXJlbnQtPmxz biA9PSBQYWdlR2V0TFNOKHBhcmVudC0+cGFnZSkgJiYgc2F2ZV9kb3dubGlua29mZm51bSAh PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKSAgewotCQkJCQkJaWYgKGkgIT0gc2F2ZV9kb3dubGlu a29mZm51bSkgewotCQkJCQkJCWVsb2coUEFOSUMsICJleHBlY3RlZCB0byBmaW5kIGRvd25s aW5rIGZvciAldSBvbiBibGsgJXUgb2Zmc2V0ICV1LCBidXQgaXQgd2FzIGZvdW5kIG9uIGJs ayAldSBvZmZzZXQgJXUiLAotCQkJCQkJCQkgY2hpbGQtPmJsa25vLCBzYXZlX3BhcmVudF9i bGtubywgc2F2ZV9kb3dubGlua29mZm51bSwKLQkJCQkJCQkJIHBhcmVudC0+Ymxrbm8sIGkp OwotCQkJCQkJfQotCQkJCQl9Ci0jZW5kaWYKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCX0K QEAgLTExMTQsNyArMTExNyw3IEBAIGdpc3RGaW5kQ29ycmVjdFBhcmVudChSZWxhdGlvbiBy LCBHSVNUSW5zZXJ0U3RhY2sgKmNoaWxkKQogCiAJCS8qIG1ha2UgcmVjdXJzaXZlIGNhbGwg dG8gbm9ybWFsIHByb2Nlc3NpbmcgKi8KIAkJTG9ja0J1ZmZlcihjaGlsZC0+cGFyZW50LT5i dWZmZXIsIEdJU1RfRVhDTFVTSVZFKTsKLQkJZ2lzdEZpbmRDb3JyZWN0UGFyZW50KHIsIGNo aWxkKTsKKwkJZ2lzdEZpbmRDb3JyZWN0UGFyZW50KHIsIGNoaWxkLCBpc19idWlsZCk7CiAJ fQogfQogCkBAIC0xMTIzLDcgKzExMjYsNyBAQCBnaXN0RmluZENvcnJlY3RQYXJlbnQoUmVs YXRpb24gciwgR0lTVEluc2VydFN0YWNrICpjaGlsZCkKICAqLwogc3RhdGljIEluZGV4VHVw bGUKIGdpc3Rmb3JtZG93bmxpbmsoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBHSVNUU1RB VEUgKmdpc3RzdGF0ZSwKLQkJCQkgR0lTVEluc2VydFN0YWNrICpzdGFjaykKKwkJCQkgR0lT VEluc2VydFN0YWNrICpzdGFjaywgYm9vbCBpc19idWlsZCkKIHsKIAlQYWdlCQlwYWdlID0g QnVmZmVyR2V0UGFnZShidWYpOwogCU9mZnNldE51bWJlciBtYXhvZmY7CkBAIC0xMTY0LDcg KzExNjcsNyBAQCBnaXN0Zm9ybWRvd25saW5rKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Ziwg R0lTVFNUQVRFICpnaXN0c3RhdGUsCiAJCUl0ZW1JZAkJaWlkOwogCiAJCUxvY2tCdWZmZXIo c3RhY2stPnBhcmVudC0+YnVmZmVyLCBHSVNUX0VYQ0xVU0lWRSk7Ci0JCWdpc3RGaW5kQ29y cmVjdFBhcmVudChyZWwsIHN0YWNrKTsKKwkJZ2lzdEZpbmRDb3JyZWN0UGFyZW50KHJlbCwg c3RhY2ssIGlzX2J1aWxkKTsKIAkJaWlkID0gUGFnZUdldEl0ZW1JZChzdGFjay0+cGFyZW50 LT5wYWdlLCBzdGFjay0+ZG93bmxpbmtvZmZudW0pOwogCQlkb3dubGluayA9IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShzdGFjay0+cGFyZW50LT5wYWdlLCBpaWQpOwogCQlkb3dubGlu ayA9IENvcHlJbmRleFR1cGxlKGRvd25saW5rKTsKQEAgLTEyMTAsNyArMTIxMyw3IEBAIGdp c3RmaXhzcGxpdChHSVNUSW5zZXJ0U3RhdGUgKnN0YXRlLCBHSVNUU1RBVEUgKmdpc3RzdGF0 ZSkKIAkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAogCQkvKiBGb3JtIHRoZSBuZXcg ZG93bmxpbmsgdHVwbGVzIHRvIGluc2VydCB0byBwYXJlbnQgKi8KLQkJZG93bmxpbmsgPSBn aXN0Zm9ybWRvd25saW5rKHN0YXRlLT5yLCBidWYsIGdpc3RzdGF0ZSwgc3RhY2spOworCQlk b3dubGluayA9IGdpc3Rmb3JtZG93bmxpbmsoc3RhdGUtPnIsIGJ1ZiwgZ2lzdHN0YXRlLCBz dGFjaywgc3RhdGUtPmlzX2J1aWxkKTsKIAogCQlzaS0+YnVmID0gYnVmOwogCQlzaS0+ZG93 bmxpbmsgPSBkb3dubGluazsKQEAgLTEzNjcsNyArMTM3MCw3IEBAIGdpc3RmaW5pc2hzcGxp dChHSVNUSW5zZXJ0U3RhdGUgKnN0YXRlLCBHSVNUSW5zZXJ0U3RhY2sgKnN0YWNrLAogCQly aWdodCA9IChHSVNUUGFnZVNwbGl0SW5mbyAqKSBsaXN0X250aChzcGxpdGluZm8sIHBvcyk7 CiAJCWxlZnQgPSAoR0lTVFBhZ2VTcGxpdEluZm8gKikgbGlzdF9udGgoc3BsaXRpbmZvLCBw b3MgLSAxKTsKIAotCQlnaXN0RmluZENvcnJlY3RQYXJlbnQoc3RhdGUtPnIsIHN0YWNrKTsK KwkJZ2lzdEZpbmRDb3JyZWN0UGFyZW50KHN0YXRlLT5yLCBzdGFjaywgc3RhdGUtPmlzX2J1 aWxkKTsKIAkJaWYgKGdpc3RpbnNlcnR0dXBsZXMoc3RhdGUsIHN0YWNrLT5wYXJlbnQsIGdp c3RzdGF0ZSwKIAkJCQkJCQkgJnJpZ2h0LT5kb3dubGluaywgMSwKIAkJCQkJCQkgSW52YWxp ZE9mZnNldE51bWJlciwKQEAgLTEzOTMsNyArMTM5Niw3IEBAIGdpc3RmaW5pc2hzcGxpdChH SVNUSW5zZXJ0U3RhdGUgKnN0YXRlLCBHSVNUSW5zZXJ0U3RhY2sgKnN0YWNrLAogCSAqLwog CXR1cGxlc1swXSA9IGxlZnQtPmRvd25saW5rOwogCXR1cGxlc1sxXSA9IHJpZ2h0LT5kb3du bGluazsKLQlnaXN0RmluZENvcnJlY3RQYXJlbnQoc3RhdGUtPnIsIHN0YWNrKTsKKwlnaXN0 RmluZENvcnJlY3RQYXJlbnQoc3RhdGUtPnIsIHN0YWNrLCBzdGF0ZS0+aXNfYnVpbGQpOwog CSh2b2lkKSBnaXN0aW5zZXJ0dHVwbGVzKHN0YXRlLCBzdGFjay0+cGFyZW50LCBnaXN0c3Rh dGUsCiAJCQkJCQkJdHVwbGVzLCAyLAogCQkJCQkJCXN0YWNrLT5kb3dubGlua29mZm51bSwK LS0gCjIuMzkuMgoK --------------yjpPVxV9gf2zH248yXRBFpS0 Content-Type: text/x-patch; charset=UTF-8; name="0005-Re-indent-the-code.patch" Content-Disposition: attachment; filename="0005-Re-indent-the-code.patch" Content-Transfer-Encoding: base64 RnJvbSAyZGUyMjgzYmJhMTQ2NzRhNjZlZWNiNDZmYzk5ZDk1YjI2YmIxMDAyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMjQgU2VwIDIwMjMgMDA6NTg6MjQgKzAzMDAK U3ViamVjdDogW1BBVENIIDUvNV0gUmUtaW5kZW50IHRoZSBjb2RlLgoKUmVtb3ZlIHRoZSBz dHJheSBicmFjZXMgYW5kIHJlLWluZGVudCB0aGUgY29kZS4gVGhpcyBzaG91bGQgYmUKc3F1 YXNoZWQgd2l0aCB0aGUgcHJldmlvdXMgY29tbWl0LCBidXQgaXQgbWFrZXMgaXQgZWFzaWVy IHRvIHJldmlldwp3aGVuIHRoZXJlJ3Mgbm90IHNvIG11Y2ggd2hpdGVzcGFjZSBjaGFuZ2Uu Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIHwgOTkgKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMo KyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA0MmY5 NDA4YmVjYi4uZWM5ZDcwMzU0NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEw NTUsNzAgKzEwNTUsNjcgQEAgZ2lzdEZpbmRDb3JyZWN0UGFyZW50KFJlbGF0aW9uIHIsIEdJ U1RJbnNlcnRTdGFjayAqY2hpbGQsIGJvb2wgaXNfYnVpbGQpCiAJICogaGF2ZSBtb3ZlZCB0 byBhIGRpZmZlcmVudCBwYWdlLCBzbyBmb2xsb3cgdGhlIHJpZ2h0IGxpbmtzIHVudGlsIHdl IGZpbmQKIAkgKiBpdC4KIAkgKi8KKwl3aGlsZSAodHJ1ZSkKIAl7Ci0JCXdoaWxlICh0cnVl KQorCQlmb3IgKGkgPSBGaXJzdE9mZnNldE51bWJlcjsgaSA8PSBtYXhvZmY7IGkgPSBPZmZz ZXROdW1iZXJOZXh0KGkpKQogCQl7Ci0JCQlmb3IgKGkgPSBGaXJzdE9mZnNldE51bWJlcjsg aSA8PSBtYXhvZmY7IGkgPSBPZmZzZXROdW1iZXJOZXh0KGkpKQotCQkJewotCQkJCWlpZCA9 IFBhZ2VHZXRJdGVtSWQocGFyZW50LT5wYWdlLCBpKTsKLQkJCQlpZHh0dXBsZSA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYXJlbnQtPnBhZ2UsIGlpZCk7Ci0JCQkJaWYgKEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIoJihpZHh0dXBsZS0+dF90aWQpKSA9PSBjaGlsZC0+Ymxr bm8pCi0JCQkJewotCQkJCQkvKiB5ZXMhISwgZm91bmQgKi8KLQkJCQkJY2hpbGQtPmRvd25s aW5rb2ZmbnVtID0gaTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQotCQkJcGFyZW50 LT5ibGtubyA9IEdpc3RQYWdlR2V0T3BhcXVlKHBhcmVudC0+cGFnZSktPnJpZ2h0bGluazsK LQkJCXBhcmVudC0+ZG93bmxpbmtvZmZudW0gPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOwotCQkJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihwYXJlbnQtPmJ1ZmZlcik7Ci0JCQlpZiAocGFyZW50LT5i bGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBh cmVudC0+cGFnZSwgaSk7CisJCQlpZHh0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRl bShwYXJlbnQtPnBhZ2UsIGlpZCk7CisJCQlpZiAoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cigmKGlkeHR1cGxlLT50X3RpZCkpID09IGNoaWxkLT5ibGtubykKIAkJCXsKLQkJCQkvKgot CQkJCSAqIEVuZCBvZiBjaGFpbiBhbmQgc3RpbGwgZGlkbid0IGZpbmQgcGFyZW50LiBJdCdz IGEgdmVyeS12ZXJ5Ci0JCQkJICogcmFyZSBzaXR1YXRpb24gd2hlbiByb290IHNwbGl0dGVk LgotCQkJCSAqLwotCQkJCWJyZWFrOworCQkJCS8qIHllcyEhLCBmb3VuZCAqLworCQkJCWNo aWxkLT5kb3dubGlua29mZm51bSA9IGk7CisJCQkJcmV0dXJuOwogCQkJfQotCQkJcGFyZW50 LT5idWZmZXIgPSBSZWFkQnVmZmVyKHIsIHBhcmVudC0+Ymxrbm8pOwotCQkJTG9ja0J1ZmZl cihwYXJlbnQtPmJ1ZmZlciwgR0lTVF9FWENMVVNJVkUpOwotCQkJZ2lzdGNoZWNrcGFnZShy LCBwYXJlbnQtPmJ1ZmZlcik7Ci0JCQlwYXJlbnQtPnBhZ2UgPSAoUGFnZSkgQnVmZmVyR2V0 UGFnZShwYXJlbnQtPmJ1ZmZlcik7CiAJCX0KIAotCQkvKgotCQkgKiBhd2Z1bCEhLCB3ZSBu ZWVkIHNlYXJjaCB0cmVlIHRvIGZpbmQgcGFyZW50IC4uLiAsIGJ1dCBiZWZvcmUgd2UKLQkJ ICogc2hvdWxkIHJlbGVhc2UgYWxsIG9sZCBwYXJlbnQKLQkJICovCi0KLQkJcHRyID0gY2hp bGQtPnBhcmVudC0+cGFyZW50OwkvKiBjaGlsZC0+cGFyZW50IGFscmVhZHkgcmVsZWFzZWQK LQkJCQkJCQkJCQkgKiBhYm92ZSAqLwotCQl3aGlsZSAocHRyKQorCQlwYXJlbnQtPmJsa25v ID0gR2lzdFBhZ2VHZXRPcGFxdWUocGFyZW50LT5wYWdlKS0+cmlnaHRsaW5rOworCQlwYXJl bnQtPmRvd25saW5rb2ZmbnVtID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihwYXJlbnQtPmJ1ZmZlcik7CisJCWlmIChwYXJlbnQtPmJsa25vID09IElu dmFsaWRCbG9ja051bWJlcikKIAkJewotCQkJUmVsZWFzZUJ1ZmZlcihwdHItPmJ1ZmZlcik7 Ci0JCQlwdHIgPSBwdHItPnBhcmVudDsKKwkJCS8qCisJCQkgKiBFbmQgb2YgY2hhaW4gYW5k IHN0aWxsIGRpZG4ndCBmaW5kIHBhcmVudC4gSXQncyBhIHZlcnktdmVyeQorCQkJICogcmFy ZSBzaXR1YXRpb24gd2hlbiByb290IHNwbGl0dGVkLgorCQkJICovCisJCQlicmVhazsKIAkJ fQorCQlwYXJlbnQtPmJ1ZmZlciA9IFJlYWRCdWZmZXIociwgcGFyZW50LT5ibGtubyk7CisJ CUxvY2tCdWZmZXIocGFyZW50LT5idWZmZXIsIEdJU1RfRVhDTFVTSVZFKTsKKwkJZ2lzdGNo ZWNrcGFnZShyLCBwYXJlbnQtPmJ1ZmZlcik7CisJCXBhcmVudC0+cGFnZSA9IChQYWdlKSBC dWZmZXJHZXRQYWdlKHBhcmVudC0+YnVmZmVyKTsKKwl9CiAKLQkJLyogb2ssIGZpbmQgbmV3 IHBhdGggKi8KLQkJcHRyID0gcGFyZW50ID0gZ2lzdEZpbmRQYXRoKHIsIGNoaWxkLT5ibGtu bywgJmNoaWxkLT5kb3dubGlua29mZm51bSk7CisJLyoKKwkgKiBhd2Z1bCEhLCB3ZSBuZWVk IHNlYXJjaCB0cmVlIHRvIGZpbmQgcGFyZW50IC4uLiAsIGJ1dCBiZWZvcmUgd2Ugc2hvdWxk CisJICogcmVsZWFzZSBhbGwgb2xkIHBhcmVudAorCSAqLwogCi0JCS8qIHJlYWQgYWxsIGJ1 ZmZlcnMgYXMgZXhwZWN0ZWQgYnkgY2FsbGVyICovCi0JCS8qIG5vdGUgd2UgZG9uJ3QgbG9j ayB0aGVtIG9yIGdpc3RjaGVja3BhZ2UgdGhlbSBoZXJlISAqLwotCQl3aGlsZSAocHRyKQot CQl7Ci0JCQlwdHItPmJ1ZmZlciA9IFJlYWRCdWZmZXIociwgcHRyLT5ibGtubyk7Ci0JCQlw dHItPnBhZ2UgPSAoUGFnZSkgQnVmZmVyR2V0UGFnZShwdHItPmJ1ZmZlcik7Ci0JCQlwdHIg PSBwdHItPnBhcmVudDsKLQkJfQorCXB0ciA9IGNoaWxkLT5wYXJlbnQtPnBhcmVudDsJLyog Y2hpbGQtPnBhcmVudCBhbHJlYWR5IHJlbGVhc2VkIGFib3ZlICovCisJd2hpbGUgKHB0cikK Kwl7CisJCVJlbGVhc2VCdWZmZXIocHRyLT5idWZmZXIpOworCQlwdHIgPSBwdHItPnBhcmVu dDsKKwl9CiAKLQkJLyogaW5zdGFsbCBuZXcgY2hhaW4gb2YgcGFyZW50cyB0byBzdGFjayAq LwotCQljaGlsZC0+cGFyZW50ID0gcGFyZW50OworCS8qIG9rLCBmaW5kIG5ldyBwYXRoICov CisJcHRyID0gcGFyZW50ID0gZ2lzdEZpbmRQYXRoKHIsIGNoaWxkLT5ibGtubywgJmNoaWxk LT5kb3dubGlua29mZm51bSk7CiAKLQkJLyogbWFrZSByZWN1cnNpdmUgY2FsbCB0byBub3Jt YWwgcHJvY2Vzc2luZyAqLwotCQlMb2NrQnVmZmVyKGNoaWxkLT5wYXJlbnQtPmJ1ZmZlciwg R0lTVF9FWENMVVNJVkUpOwotCQlnaXN0RmluZENvcnJlY3RQYXJlbnQociwgY2hpbGQsIGlz X2J1aWxkKTsKKwkvKiByZWFkIGFsbCBidWZmZXJzIGFzIGV4cGVjdGVkIGJ5IGNhbGxlciAq LworCS8qIG5vdGUgd2UgZG9uJ3QgbG9jayB0aGVtIG9yIGdpc3RjaGVja3BhZ2UgdGhlbSBo ZXJlISAqLworCXdoaWxlIChwdHIpCisJeworCQlwdHItPmJ1ZmZlciA9IFJlYWRCdWZmZXIo ciwgcHRyLT5ibGtubyk7CisJCXB0ci0+cGFnZSA9IChQYWdlKSBCdWZmZXJHZXRQYWdlKHB0 ci0+YnVmZmVyKTsKKwkJcHRyID0gcHRyLT5wYXJlbnQ7CiAJfQorCisJLyogaW5zdGFsbCBu ZXcgY2hhaW4gb2YgcGFyZW50cyB0byBzdGFjayAqLworCWNoaWxkLT5wYXJlbnQgPSBwYXJl bnQ7CisKKwkvKiBtYWtlIHJlY3Vyc2l2ZSBjYWxsIHRvIG5vcm1hbCBwcm9jZXNzaW5nICov CisJTG9ja0J1ZmZlcihjaGlsZC0+cGFyZW50LT5idWZmZXIsIEdJU1RfRVhDTFVTSVZFKTsK KwlnaXN0RmluZENvcnJlY3RQYXJlbnQociwgY2hpbGQsIGlzX2J1aWxkKTsKIH0KIAogLyoK LS0gCjIuMzkuMgoK --------------yjpPVxV9gf2zH248yXRBFpS0--