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.96) (envelope-from ) id 1vL2Cu-001HMv-23 for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 16:36:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vL2Ct-000ydd-0w for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 16:35:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vL2Cs-000ydV-2G for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 16:35:59 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vL2Cq-0001Zr-1b for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 16:35:58 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (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 4d9CzR4S6Dz49PvQ; Mon, 17 Nov 2025 18:35:47 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1763397348; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/GQ4u8q03SFpJTZzZ8f6Kx7LU6TRR6zjV8ZO867BAdQ=; b=YquRYcUuBK4UI7mikv+ix2UIifIzfJLnX7Clt2FTUIfbtjBdOdm5VvjHkTDHOAIOb56rF/ k5oYGinBRJkzjQm777r663+F/0ohG4dHoxyxVcozNaS/0rbiwjzYp96sSqv9Q5+SVwH4j/ DjgRVAKLipOyr0P/F+ihyR2606UIWrkXKDnpDifPeV5tTyEeboEgHhp+CNFmofhH1HHAre XqlNHJq+3m00phRfIOSDLKfnrCnXDTINRHu7/433vtTcK55GyJpCENv7xd6cYNo5bhe2SU bTM7j3aijlNe7q/zD4L2IGJcFhsB59X7RGie/JIyaUIE1lfAVC8fgkhBV9jApA== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1763397348; b=A4kXotTw3liPu469gnSp048KV13COB9Z8TFKRwjifN3y9eDksoc52gpIXOGcIjqw9+LhTY kG/nnhDpB7eH3/7e7v9nQBYkKw5A9C4I6OorxEhW10HUlfsNfxD97Fkba/iVqFlEhejD83 JmywxP0XIK1HfEOwgfndn+yXY4T6S0juuHIVIJ7O7piMLdHsIapXvaqKARQWXZnYp3EQOK OG8ekeMAPWulzWUusPD+F8UJ17U7a/YVaoUVs5CH/RN53n1AOAVc03EHLHcGQOOFPSvNJU +USftgisQEHUmvMonI8QfBdRuFApdsxb684qqc0RM8j/V7Iu8KakHhyCVU7oMg== 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=1763397348; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/GQ4u8q03SFpJTZzZ8f6Kx7LU6TRR6zjV8ZO867BAdQ=; b=NXjSR94UFtIpmZiREQUVlZkTeGAGS0R89IJz2qJsMXV03sMwzyHUmC6+QBWx0fK4m2sGil kT4pii5/HepcYUeRCVRBPz/5CPbYdaP97aN1GfFdWTw7NUC6+rkQf2511aY4jyNgJb6/xk BMtQYyZWJ2goY8RMCzS29C5/oWBLhC6LPWGu8fjD8AEPV7qFN1PZ0tt792RjWsCxnwnbky 4zwiMMInqKo7lUE0j/azE01dIJEIbuT7z6dWWeAe91H+fVovIbihwMjRB2s3ImSKD+H9as jdiUJIQ8VT6T/gSj+sHUhw7jWjkTo9HFHKQpDFmdc8zKNFPPat2oFflYZVqIQw== Content-Type: multipart/mixed; boundary="------------zhFLpF2wHKNujqyqfWXVcdDI" Message-ID: <46cc45e9-fddd-44bc-bcb3-96889aafd921@iki.fi> Date: Mon, 17 Nov 2025 18:35:46 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits From: Heikki Linnakangas To: Maxim Orlov , Ashutosh Bapat , Alvaro Herrera , Alexander Korotkov Cc: wenhui qiu , Postgres hackers References: <4535f3aa-3220-4760-b1f5-2bc91f248e03@iki.fi> <2bc58592-9d74-4af0-bdd1-1a88e8683f7c@iki.fi> <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> <54aa8f65-f0e4-4464-b543-e0399c1cab1e@iki.fi> <4a9dda70-0af7-41a4-9636-b168f2fc48ef@iki.fi> Content-Language: en-US In-Reply-To: <4a9dda70-0af7-41a4-9636-b168f2fc48ef@iki.fi> 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. --------------zhFLpF2wHKNujqyqfWXVcdDI Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's yet another patch version. I spent the day reviewing this in detail and doing little cleanups here and there. I squashed the commits and wrote a proper commit message. One noteworthy refactoring is in pg_upgrade.c, to make it more clear (to me at least) how upgrade from version 9.2 and below now works. It was actually broken when I tested it. Not sure if I had broken it earlier or if it never worked, but in any case it works now. I also tested upgrading a cluster from an old minor version, < 9.3.5, where the control file has a bogus oldestMultiXid==1 value (see commit b6a3444fa6). As expected, you get a "could not open file" error: > Performing Upgrade > ------------------ > Setting locale and encoding for new cluster ok > ... > Deleting files from new pg_multixact/members ok > Deleting files from new pg_multixact/offsets ok > Converting pg_multixact files > could not open file "/home/heikki/pgsql.93stable/data/pg_multixact/offsets/0000": No such file or directory > Failure, exiting I don't think we need to support that case. I hope there are no clusters in that state still in the wild, and you can work around it by upgrading to 9.3.5 or above and letting autovacuum run. But I wonder if a pre-upgrade check with a better error message would still be worthwhile. Ashutosh, you were interested in reviewing this earlier. Would you have a chance to review this now, before I commit it? Alexander, Alvaro, would you have a chance to take a final look too, please? - Heikki --------------zhFLpF2wHKNujqyqfWXVcdDI Content-Type: text/x-patch; charset=UTF-8; name="v27-0001-FIXME-bump-catversion.patch" Content-Disposition: attachment; filename="v27-0001-FIXME-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBiYTk5Mzk2NmRlMmUyZTE5M2I1MTk3NGNkMjFlYzk3MDRmY2Q1YzYwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNyAxLzNdIEZJWE1FOiBidW1wIGNhdHZlcnNpb24KClRvIGF2b2lkIGNvbnN0YW50IENG LWJvdCBjb21wbGFpbnMsIG1ha2UgY2F0dmVyc2lvbiBidW1wIGluIGEgc2VwYXJhdGUKY29t bWl0LgoKVGhpcyBpcyB0byBiZSBzcXVhc2hlZCB3aXRoIHRoZSBtYWluIGNvbW1pdCBiZWZv cmUgcHVzaGluZy4KCk5PVEU6IGtlZXAgaXQgaW4gc3luYyB3aXRoIE1VTFRJWEFDVE9GRlNF VF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVy c2lvbi5oIHwgMyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IDdlZWZjYTFhZTQy Li5iMDE2MmMyYmY2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJz aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYg KzU3LDcgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxP R19WRVJTSU9OX05PCTIwMjUxMTEwMQorLy8gRklYTUU6IGJ1bXAgaXQKKyNkZWZpbmUgQ0FU QUxPR19WRVJTSU9OX05PCTk5OTk5OTk5OQogCiAjZW5kaWYKLS0gCjIuNDcuMwoK --------------zhFLpF2wHKNujqyqfWXVcdDI Content-Type: text/x-patch; charset=UTF-8; name="v27-0002-Move-pg_multixact-SLRU-page-format-definitions-t.patch" Content-Disposition: attachment; filename*0="v27-0002-Move-pg_multixact-SLRU-page-format-definitions-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyNjU3MjY2MWRkYTJlNGMyNmU0M2JkMWE0OTRlZTQ3MTlmYjBmNWNkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMTQ6MTk6MzIgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNyAyLzNdIE1vdmUgcGdfbXVsdGl4YWN0IFNMUlUgcGFnZSBm b3JtYXQgZGVmaW5pdGlvbnMgdG8KIHNlcGFyYXRlIGhlYWRlcgoKVGhpcyBtYWtlcyB0aGVt IGFjY2Vzc2libGUgZnJvbSBwZ191cGdyYWRlLCBuZWVkZWQgYnkgdGhlIG5leHQgY29tbWl0 LgpJJ20gZG9pbmcgdGhpcyBtZWNoYW5pY2FsIG1vdmUgYXMgYSBzZXBhcmF0ZSBjb21taXQs IHRvIG1ha2UgdGhlIG5leHQKY29tbWl0J3MgY2hhbmdlcyB0byB0aGVzZSBkZWZpbml0aW9u cyBtb3JlIG9idmlvdXMuCgpBdXRob3I6IE1heGltIE9ybG92IDxvcmxvdm1nQGdtYWlsLmNv bT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QUNHJTNEZXpiWm9fM19mbnglM0RTNUJmZXB3UmZ0enJwSiUyQjdXRVQ0RWtUVTZ3bmpEVHNu amdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYyAgfCAxMTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3RfaW50ZXJuYWwuaCB8IDE0MCArKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTQwIGluc2VydGlvbnMoKyksIDExOSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVy bmFsLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDlk NWYxMzBhZjdlLi5hY2IyYTY3ODhmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKQEAgLTg5LDEyNSArODksNiBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAKIAotLyoKLSAqIERlZmluZXMgZm9yIE11bHRpWGFjdE9mZnNldCBwYWdlIHNp emVzLiAgQSBwYWdlIGlzIHRoZSBzYW1lIEJMQ0tTWiBhcyBpcwotICogdXNlZCBldmVyeXdo ZXJlIGVsc2UgaW4gUG9zdGdyZXMuCi0gKgotICogTm90ZTogYmVjYXVzZSBNdWx0aVhhY3RP ZmZzZXRzIGFyZSAzMiBiaXRzIGFuZCB3cmFwIGFyb3VuZCBhdCAweEZGRkZGRkZGLAotICog TXVsdGlYYWN0IHBhZ2UgbnVtYmVyaW5nIGFsc28gd3JhcHMgYXJvdW5kIGF0Ci0gKiAweEZG RkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFLCBhbmQgc2VnbWVudCBudW1iZXJp bmcgYXQKLSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UvU0xSVV9Q QUdFU19QRVJfU0VHTUVOVC4gIFdlIG5lZWQKLSAqIHRha2Ugbm8gZXhwbGljaXQgbm90aWNl IG9mIHRoYXQgZmFjdCBpbiB0aGlzIG1vZHVsZSwgZXhjZXB0IHdoZW4gY29tcGFyaW5nCi0g KiBzZWdtZW50IGFuZCBwYWdlIG51bWJlcnMgaW4gVHJ1bmNhdGVNdWx0aVhhY3QgKHNlZQot ICogTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKS4KLSAqLwotCi0vKiBXZSBuZWVkIGZv dXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJf UEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCi0KLXN0YXRpYyBpbmxp bmUgaW50NjQKLU11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQot ewotCXJldHVybiBtdWx0aSAvIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOwotfQotCi1z dGF0aWMgaW5saW5lIGludAotTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KE11bHRpWGFjdElk IG11bHRpKQotewotCXJldHVybiBtdWx0aSAlIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdF OwotfQotCi1zdGF0aWMgaW5saW5lIGludDY0Ci1NdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVu dChNdWx0aVhhY3RJZCBtdWx0aSkKLXsKLQlyZXR1cm4gTXVsdGlYYWN0SWRUb09mZnNldFBh Z2UobXVsdGkpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLX0KLQotLyoKLSAqIFRoZSBz aXR1YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3ZSBzdG9yZSBv bmUgYnl0ZSBvZgotICogYWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJhbnNhY3Rp b25JZC4gIFRvIGRvIHRoaXMgd2l0aG91dCBnZXR0aW5nCi0gKiBpbnRvIGFsaWdubWVudCBp c3N1ZXMsIHdlIHN0b3JlIGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQotICog Y29ycmVzcG9uZGluZyA0IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQg d2UgY2FsbCBhICJncm91cCIsIGFuZAotICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBh Z2VzLiAgVGh1cywgd2l0aCA4a0IgQkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKLSAqIHBl ciBwYWdlLiAgVGhpcyB3YXN0ZXMgMTIgYnl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sg LS0gc2ltcGxpY2l0eSAoYW5kCi0gKiBwZXJmb3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmlj aWVuY3kgaGVyZS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlICJvZmZzZXQiIG1hY3JvcyB3b3Jr IHdpdGggYnl0ZSBvZmZzZXQsIG5vdCBhcnJheSBpbmRleGVzLCBzbwotICogYXJpdGhtZXRp YyBtdXN0IGJlIGRvbmUgdXNpbmcgImNoYXIgKiIgcG9pbnRlcnMuCi0gKi8KLS8qIFdlIG5l ZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwgc28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8K LSNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QJCQk4Ci0jZGVmaW5lIE1YQUNU X01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKLSNkZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1Rf QklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkKLQotLyog aG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhlcmUgaW4gYSBncm91cD8gKi8K LSNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJCTQKLSNkZWZpbmUgTVVM VElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKLQkoTVVMVElYQUNUX0ZMQUdCWVRF U19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCi0vKiBzaXplIGlu IGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJF UkdST1VQX1NJWkUgXAotCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1RfTUVN QkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkK LSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVM VElYQUNUX01FTUJFUkdST1VQX1NJWkUpCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9QQUdFCVwKLQkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKLQotLyoKLSAqIEJlY2F1c2UgdGhlIG51bWJl ciBvZiBpdGVtcyBwZXIgcGFnZSBpcyBub3QgYSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0K LSAqIG51bWJlciAobWVtYmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMg bm90IHVzZSB0aGUgbWF4aW11bSBudW1iZXIKLSAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIg dGhlIGxhc3QgdXNlZCBwYWdlIHRoZXJlaW4gZG9lcyBub3QgdXNlIHRoZSBzYW1lCi0gKiBu dW1iZXIgb2YgaXRlbXMgYXMgcHJldmlvdXMgcGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5 IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZGRkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4g dGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBzbyB0aGUgcGFnZQotICogaGFzIHNvbWUg ZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikKLSAqCi0gKiBUaGlzIGNvbnN0YW50IGlz IHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBsYXN0IHNl Z21lbnQuCi0gKi8KLSNkZWZpbmUgTUFYX01FTUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0Ug XAotCQkoKHVpbnQzMikgKCgweEZGRkZGRkZGICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BB R0UpICsgMSkpCi0KLS8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQg Ki8KLXN0YXRpYyBpbmxpbmUgaW50NjQKLU1YT2Zmc2V0VG9NZW1iZXJQYWdlKE11bHRpWGFj dE9mZnNldCBvZmZzZXQpCi17Ci0JcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFOwotfQotCi1zdGF0aWMgaW5saW5lIGludDY0Ci1NWE9mZnNldFRvTWVtYmVy U2VnbWVudChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQotewotCXJldHVybiBNWE9mZnNldFRv TWVtYmVyUGFnZShvZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLX0KLQotLyog TG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBmbGFnIHdvcmQgZm9yIGEg Z2l2ZW4gbWVtYmVyICovCi1zdGF0aWMgaW5saW5lIGludAotTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCi17Ci0JTXVsdGlYYWN0T2Zmc2V0IGdyb3Vw ID0gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwotCWludAkJ CWdyb3Vwb25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRTsK LQlpbnQJCQlieXRlb2ZmID0gZ3JvdXBvbnBnICogTVVMVElYQUNUX01FTUJFUkdST1VQX1NJ WkU7Ci0KLQlyZXR1cm4gYnl0ZW9mZjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLU1YT2Zm c2V0VG9GbGFnc0JpdFNoaWZ0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCi17Ci0JaW50CQkJ bWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJF UkdST1VQOwotCWludAkJCWJzaGlmdCA9IG1lbWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJF Ul9CSVRTX1BFUl9YQUNUOwotCi0JcmV0dXJuIGJzaGlmdDsKLX0KLQotLyogTG9jYXRpb24g KGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBUcmFuc2FjdGlvbklkIG9mIGdpdmVuIG1l bWJlciAqLwotc3RhdGljIGlubGluZSBpbnQKLU1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZz ZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7Ci0KLQlyZXR1cm4gTVhP ZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKwotCQlNVUxUSVhBQ1RfRkxBR0JZVEVTX1BF Ul9HUk9VUCArCi0JCW1lbWJlcl9pbl9ncm91cCAqIHNpemVvZihUcmFuc2FjdGlvbklkKTsK LX0KLQogLyogTXVsdGl4YWN0IG1lbWJlcnMgd3JhcGFyb3VuZCB0aHJlc2hvbGRzLiAqLwog I2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xECQkoTWF4TXVsdGlYYWN0 T2Zmc2V0IC8gMikKICNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9EQU5HRVJfVEhSRVNIT0xE CVwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWI1NmRlYWVmMzEKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKQEAgLTAs MCArMSwxNDAgQEAKKy8qCisgKiBtdWx0aXhhY3RfaW50ZXJuYWwuaAorICoKKyAqIFBvc3Rn cmVTUUwgbXVsdGktdHJhbnNhY3Rpb24tbG9nIG1hbmFnZXIgaW50ZXJuYWwgZGVjbGFyYXRp b25zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucyBhcmUgZm9yIGRl YWxpbmcgd2l0aCBwZ19tdWx0aXhhY3QgcGFnZXMuCisgKiBUaGV5IGFyZSBpbnRlcm5hbCB0 byBtdWx0aXhhY3QuYywgYnV0IHRoZXkgYXJlIGV4cG9ydGVkIGhlcmUgdG8gYWxsb3cKKyAq IHBnX3VwZ3JhZGUgdG8gd3JpdGUgcGdfbXVsdGl4YWN0IGZpbGVzIGRpcmVjdGx5LgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKKyAqLworI2lmbmRlZiBNVUxUSVhB Q1RfSU5URVJOQUxfSAorI2RlZmluZSBNVUxUSVhBQ1RfSU5URVJOQUxfSAorCisjaW5jbHVk ZSAiYWNjZXNzL211bHRpeGFjdC5oIgorCisKKy8qCisgKiBEZWZpbmVzIGZvciBNdWx0aVhh Y3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMK KyAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgorICoKKyAqIE5vdGU6IGJl Y2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQg MHhGRkZGRkZGRiwKKyAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFy b3VuZCBhdAorICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5k IHNlZ21lbnQgbnVtYmVyaW5nIGF0CisgKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRT X1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCisgKiB0YWtlIG5v IGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3 aGVuIGNvbXBhcmluZworICogc2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRl TXVsdGlYYWN0IChzZWUKKyAqIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCisgKi8K KworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgKi8KKyNkZWZpbmUgTVVMVElY QUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQp KQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0 aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19Q RVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFjdElkVG9PZmZzZXRF bnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0 SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIE11bHRp WGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Cit9 CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1iZXJzIGlzIGEgYml0IG1vcmUgY29t cGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFkZGl0aW9uYWwgZmxhZyBiaXRzIGZv ciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlzIHdpdGhvdXQgZ2V0dGluZworICog aW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBh bmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29y ZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAiLCBhbmQKKyAqIGFyZSBzdG9yZWQg YXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0 MDkgZ3JvdXBzCisgKiBwZXIgcGFnZS4gIFRoaXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdl LCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNpdHkgKGFuZAorICogcGVyZm9ybWFuY2UpIHRy dW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUuCisgKgorICogTm90ZSB0aGF0IHRoZSAib2Zm c2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUgb2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywg c28KKyAqIGFyaXRobWV0aWMgbXVzdCBiZSBkb25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJz LgorICovCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZp dHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJ OAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUJCQkxCisjZGVmaW5lIE1Y QUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9Y QUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRoZXJl IGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQ CQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUAlcCisJKE1V TFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9C WVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCisjZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQp ICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdC WVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BB R0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorI2RlZmluZSBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVS X1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApCisKKy8qCisgKiBC ZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UgaXMgbm90IGEgZGl2aXNvciBv ZiB0aGUgbGFzdCBpdGVtCisgKiBudW1iZXIgKG1lbWJlciAweEZGRkZGRkZGKSwgdGhlIGxh c3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhlIG1heGltdW0gbnVtYmVyCisgKiBvZiBwYWdl cywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVzZWQgcGFnZSB0aGVyZWluIGRvZXMgbm90IHVz ZSB0aGUgc2FtZQorICogbnVtYmVyIG9mIGl0ZW1zIGFzIHByZXZpb3VzIHBhZ2VzLiAgKEFu b3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0IHRoZQorICogMHhGRkZGRkZGRiBtZW1iZXIg aXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxhc3QgcGFnZSwgc28gdGhlIHBh Z2UKKyAqIGhhcyBzb21lIGVtcHR5IHNwYWNlIGFmdGVyIHRoYXQgaXRlbS4pCisgKgorICog VGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gdGhlIGxhc3QgcGFn ZSBvZiB0aGUgbGFzdCBzZWdtZW50LgorICovCisjZGVmaW5lIE1BWF9NRU1CRVJTX0lOX0xB U1RfTUVNQkVSU19QQUdFIFwKKwkJKCh1aW50MzIpICgoMHhGRkZGRkZGRiAlIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQorCisvKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVy IGlzIHRvIGJlIGZvdW5kICovCitzdGF0aWMgaW5saW5lIGludDY0CitNWE9mZnNldFRvTWVt YmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCXJldHVybiBvZmZzZXQgLyBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQ2NAor TVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwly ZXR1cm4gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KSAvIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQ7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2Yg ZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01Y T2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU11bHRp WGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1C RVJHUk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUFNfUEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFD VF9NRU1CRVJHUk9VUF9TSVpFOworCisJcmV0dXJuIGJ5dGVvZmY7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9N RU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3Jv dXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVDsKKworCXJldHVybiBic2hpZnQ7Cit9 CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rp b25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRv TWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVy X2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQ OworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpICsKKwkJTVVMVElY QUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2Yo VHJhbnNhY3Rpb25JZCk7Cit9CisKKyNlbmRpZgkJCQkJCQkvKiBNVUxUSVhBQ1RfSU5URVJO QUxfSCAqLwotLSAKMi40Ny4zCgo= --------------zhFLpF2wHKNujqyqfWXVcdDI Content-Type: text/x-patch; charset=UTF-8; name="v27-0003-Widen-MultiXactOffset-to-64-bits.patch" Content-Disposition: attachment; filename="v27-0003-Widen-MultiXactOffset-to-64-bits.patch" Content-Transfer-Encoding: base64 RnJvbSBjN2I3MjAyYmFiMzc5ZTU3ZjU0Zjk1ZTk0NmY3ODJhZGRlM2RhMjBmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTcgTm92IDIwMjUgMTY6MzA6MzcgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNyAzLzNdIFdpZGVuIE11bHRpWGFjdE9mZnNldCB0byA2NCBi aXRzCgpUaGlzIGVsaW1pbmF0ZXMgb2Zmc2V0IHdyYXBhcm91bmQgYW5kIHRoZSAyXjMyIGxp bWl0IG9uIHRoZSB0b3RhbApudW1iZXIgb2YgbXVsdGl4aWQgbWVtYmVycy4gTXVsdGl4aWRz IGFyZSBzdGlsbCBsaW1pdGVkIHRvIDJeMzEsIGJ1dAp0aGlzIGlzIGEgbmljZSBpbXByb3Zl bWVudCBiZWNhdXNlICdtZW1iZXJzJyBjYW4gZ3JvdyBtdWNoIGZhc3RlciB0aGFuCnRoZSBu dW1iZXIgb2YgbXVsdGl4aWRzLiBPbiBzdWNoIHN5c3RlbXMsIHlvdSBjYW4gbm93IHJ1biBs b25nZXIKYmVmb3JlIGhpdHRpbmcgaGFyZCBsaW1pdHMgb3IgdHJpZ2dlcmluZyBhbnRpLXdy YXBhcm91bmQgdmFjdXVtcy4KCk5vdCBoYXZpbmcgdG8gZGVhbCB3aXRoIG9mZnNldCB3cmFw YXJvdW5kIGFsc28gc2ltcGxpZmllcyB0aGUgY29kZSBhbmQKcmVtb3ZlcyBzb21lIGduYXJs eSBjb3JuZXIgY2FzZXMuCgpXZSBubyBsb25nZXIgbmVlZCB0byBwZXJmb3JtIGVtZXJnZW5j eSBhbnRpLXdyYXBhcm91bmQgZnJlZXppbmcKYmVjYXVzZSBvZiBydW5uaW5nIG91dCBvZiAn bWVtYmVycycgc3BhY2UsIHNvIHRoZSBvZmZzZXQgc3RvcCBsaW1pdCBpcwpnb25lLiBCdXQg eW91IG1pZ2h0IHN0aWxsIG5vdCB3YW50ICdtZW1iZXJzJyB0byBjb25zdW1lIGh1Z2UgYW1v dW50cwpvZiBkaXNrIHNwYWNlLiBGb3IgdGhhdCByZWFzb24sIEkga2VwdCB0aGUgbG9naWMg Zm9yIGxvd2VyaW5nIHZhY3V1bSdzCm11bHRpeGlkIGZyZWV6aW5nIGN1dG9mZiBpZiBhIGxh cmdlIGFtb3VudCBvZiAnbWVtYmVycycgc3BhY2UgaXMKdXNlZC4gVGhlIHRocmVzaG9sZHMg Zm9yIHRoYXQgYXJlIHJvdWdobHkgdGhlIHNhbWUgYXMgdGhlICJzYWZlIiBhbmQKImRhbmdl ciIgdGhyZXNob2xkcyB1c2VkIGJlZm9yZSwgMiBiaWxsaW9uIHRyYW5zYWN0aW9ucyBhbmQg NCBiaWxsaW9uCnRyYW5zYWN0aW9ucy4gVGhpcyBrZWVwcyB0aGUgYmVoYXZpb3IgZm9yIHRo ZSBmcmVlemUgY3V0b2ZmIHJvdWdobHkKdGhlIHNhbWUgYXMgYmVmb3JlIC4gSXQgbWlnaHQg bWFrZSBzZW5zZSB0byBtYWtlIHRoaXMgc21hcnRlciBvcgpjb25maWd1cmFibGUsIG5vdyB0 aGF0IHRoZSB0aHJlc2hvbGQgaXMgb25seSBuZWVkZWQgdG8gbWFuYWdlIGRpc2sKdXNhZ2Us IGJ1dCB0aGF0J3MgbGVmdCBmb3IgdGhlIGZ1dHVyZS4KCkFkZCBjb2RlIHRvIHBnX3VwZ3Jh ZGUgdG8gY29udmVydCBtdWx0aXRyYW5zYWN0aW9ucyBmcm9tIHRoZSBvbGQgdG8KdGhlIG5l dyBmb3JtYXQuIEJlY2F1c2UgcGdfdXBncmFkZSBub3cgcmV3cml0ZXMgdGhlIGZpbGVzIGlu IHRoZSBuZXcKZm9ybWF0LCB3ZSBjYW4gZ2V0IHJpZCBvZiBzb21lIGhhY2tzIHdlIGhhZCBw dXQgaW4gcGxhY2UgdG8gZGVhbCB3aXRoCm9sZCBidWdzIGFuZCB1cGdyYWRlZCBjbHVzdGVy cy4KCkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpSZXZpZXdlZC1i eTogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KUmV2aWV3ZWQt Ynk6IHdlbmh1aSBxaXUgPHFpdXdlbmh1aWZ4QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUNHJTNEZXphV2c3X250LThl eTRhS3YydzlMY3VMdGhIa253Q2F3bUJnRWVUbkpySlRjd0BtYWlsLmdtYWlsLmNvbQotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgICAgICB8ICAgNCAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgICAgICAgfCA1 NDcgKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMgICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYyAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfY29udHJvbGRhdGEv cGdfY29udHJvbGRhdGEuYyAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9w Z19yZXNldHdhbC5jICAgICAgICAgICAgIHwgIDMwICstCiBzcmMvYmluL3BnX3Jlc2V0d2Fs L3QvMDAxX2Jhc2ljLnBsICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfdXBncmFk ZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3BnX3VwZ3Jh ZGUvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2Jpbi9wZ191cGdy YWRlL211bHRpeGFjdF9uZXcuYyAgICAgICAgICAgIHwgMTAxICsrKysKIHNyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3RfbmV3LmggICAgICAgICAgICB8ICAyOCArCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jICAgICAgICAgICAgfCAzMDIgKysrKysrKysrKwog c3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaCAgICAgICAgICAgIHwgIDM4ICsr CiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jICAgICAgICAgICAgICAgfCAxNjUg KysrKystCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oICAgICAgICAgICAgICAg fCAgIDcgKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYyAgICAgICAgICAgICAgICAg IHwgMjQyICsrKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oICAgICAgICAg ICAgICAgICAgfCAgNTIgKysKIC4uLi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9jb252 ZXJzaW9uLnBsICB8IDMyOSArKysrKysrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oICAgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVs dGl4YWN0X2ludGVybmFsLmggICAgICAgfCAgMjMgKy0KIHNyYy9pbmNsdWRlL2MuaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcGVybC9Qb3N0 Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbSAgICAgIHwgIDIxICstCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDMgKwogMjYgZmlsZXMgY2hhbmdl ZCwgMTQyNCBpbnNlcnRpb25zKCspLCA1MTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9jb252ZXJzaW9uLnBsCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCmluZGV4IDNjYTA1ODJkYjM2 Li4wNTJkZDBhNGNlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L214YWN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYwpAQCAtNjUsNyArNjUsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1Ziwg WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXhsX211bHRpeGFjdF9jcmVhdGUgKnhscmVj ID0gKHhsX211bHRpeGFjdF9jcmVhdGUgKikgcmVjOwogCQlpbnQJCQlpOwogCi0JCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICV1IG5tZW1iZXJzICVkOiAiLCB4bHJlYy0+ bWlkLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAlIiBQUkl1NjQgIiBu bWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKIAkJCQkJCSB4bHJlYy0+bW9mZiwgeGxyZWMt Pm5tZW1iZXJzKTsKIAkJZm9yIChpID0gMDsgaSA8IHhscmVjLT5ubWVtYmVyczsgaSsrKQog CQkJb3V0X21lbWJlcihidWYsICZ4bHJlYy0+bWVtYmVyc1tpXSk7CkBAIC03NCw3ICs3NCw3 IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAl7CiAJCXhsX211bHRpeGFjdF90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfbXVsdGl4 YWN0X3RydW5jYXRlICopIHJlYzsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm9mZnNl dHMgWyV1LCAldSksIG1lbWJlcnMgWyV1LCAldSkiLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIm9mZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQUkl1NjQg IikiLAogCQkJCQkJIHhscmVjLT5zdGFydFRydW5jT2ZmLCB4bHJlYy0+ZW5kVHJ1bmNPZmYs CiAJCQkJCQkgeGxyZWMtPnN0YXJ0VHJ1bmNNZW1iLCB4bHJlYy0+ZW5kVHJ1bmNNZW1iKTsK IAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2Mu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCmluZGV4IGNkNmMy YTJmNjUwLi40NDEwMzRmNTkyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hs b2dkZXNjLmMKQEAgLTY2LDcgKzY2LDcgQEAgeGxvZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJQ2hlY2tQb2ludCAqY2hlY2twb2ludCA9IChD aGVja1BvaW50ICopIHJlYzsKIAogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlZG8gJVgv JTA4WDsgIgotCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9sZXZl bCAlczsgeGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJXU7ICIKKwkJCQkJ CSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAldTol dTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICUiIFBSSXU2NCAiOyAiCiAJCQkJCQkgIm9s ZGVzdCB4aWQgJXUgaW4gREIgJXU7IG9sZGVzdCBtdWx0aSAldSBpbiBEQiAldTsgIgogCQkJ CQkJICJvbGRlc3QvbmV3ZXN0IGNvbW1pdCB0aW1lc3RhbXAgeGlkOiAldS8ldTsgIgogCQkJ CQkJICJvbGRlc3QgcnVubmluZyB4aWQgJXU7ICVzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggYWNiMmE2Nzg4ZjkuLmQyY2ViNTA0MGRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtNjksNiArNjksNyBA QAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0 LmgiCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3R3b3BoYXNlX3JtZ3IuaCIKQEAgLTg5LDEwICs5MCwxNCBAQAogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIAotLyogTXVsdGl4YWN0IG1lbWJlcnMgd3JhcGFy b3VuZCB0aHJlc2hvbGRzLiAqLwotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhS RVNIT0xECQkoTWF4TXVsdGlYYWN0T2Zmc2V0IC8gMikKLSNkZWZpbmUgTVVMVElYQUNUX01F TUJFUl9EQU5HRVJfVEhSRVNIT0xECVwKLQkoTWF4TXVsdGlYYWN0T2Zmc2V0IC0gTWF4TXVs dGlYYWN0T2Zmc2V0IC8gNCkKKy8qCisgKiBUaHJlc2hvbGRzIHVzZWQgdG8ga2VlcCBtZW1i ZXJzIGRpc2sgdXNhZ2UgaW4gY2hlY2sgd2hlbiBtdWx0aXhpZHMgaGF2ZSBhCisgKiBsb3Qg b2YgbWVtYmVycy4gIFdoZW4gTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNIT0xEIGlzIHJl YWNoZWQsIHZhY3V1bQorICogc3RhcnRzIGZyZWV6aW5nIG11bHRpeGlkcyBtb3JlIGFnZ3Jl c3NpdmVseSwgZXZlbiBpZiB0aGUgbm9ybWFsIG11bHRpeGlkCisgKiBhZ2UgbGltaXRzIGhh dmVuJ3QgYmVlbiByZWFjaGVkIHlldC4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVS X0xPV19USFJFU0hPTEQJCVVJTlQ2NENPTlNUKDIwMDAwMDAwMDApCisjZGVmaW5lIE1VTFRJ WEFDVF9NRU1CRVJfSElHSF9USFJFU0hPTEQJCVVJTlQ2NENPTlNUKDQwMDAwMDAwMDApCiAK IHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQKIFByZXZpb3VzTXVsdGlYYWN0SWQoTXVsdGlY YWN0SWQgbXVsdGkpCkBAIC0xMzcsMTEgKzE0Miw5IEBAIHR5cGVkZWYgc3RydWN0IE11bHRp WGFjdFN0YXRlRGF0YQogCiAJLyoKIAkgKiBPbGRlc3QgbXVsdGl4YWN0IG9mZnNldCB0aGF0 IGlzIHBvdGVudGlhbGx5IHJlZmVyZW5jZWQgYnkgYSBtdWx0aXhhY3QKLQkgKiByZWZlcmVu Y2VkIGJ5IGEgcmVsYXRpb24uICBXZSBkb24ndCBhbHdheXMga25vdyB0aGlzIHZhbHVlLCBz byB0aGVyZSdzCi0JICogYSBmbGFnIGhlcmUgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3Qg d2UgY3VycmVudGx5IGRvLgorCSAqIHJlZmVyZW5jZWQgYnkgYSByZWxhdGlvbi4KIAkgKi8K IAlNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0OwotCWJvb2wJCW9sZGVzdE9mZnNldEtu b3duOwogCiAJLyogc3VwcG9ydCBmb3IgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCiAJ TXVsdGlYYWN0SWQgbXVsdGlWYWNMaW1pdDsKQEAgLTE0OSw5ICsxNTIsNiBAQCB0eXBlZGVm IHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhhY3RJZCBtdWx0aVN0b3BMaW1p dDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAotCS8qIHN1cHBvcnQgZm9yIG1l bWJlcnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0JTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldFN0b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zmc2V0S25vd24gKi8KLQogCS8q CiAJICogVGhpcyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEgbXVsdGl4YWN0IG9mZnNldCBp cyB3cml0dGVuIHdoZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0ZSB0aGUgbmV4dCBvbmUuCkBA IC0yNzgsMTMgKzI3OCw5IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2FjaGVQdXQoTXVsdGlYYWN0 SWQgbXVsdGksIGludCBubWVtYmVycywKIC8qIG1hbmFnZW1lbnQgb2YgU0xSVSBpbmZyYXN0 cnVjdHVyZSAqLwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGlu dDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RNZW1iZXJQ YWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0YXRpYyBib29sIE11 bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAotCQkJCQkJ CQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlY YWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRp WGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpOwotc3Rh dGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3Vu ZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsIHVpbnQzMiBkaXN0YW5j ZSk7Ci1zdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXAp Oworc3RhdGljIHZvaWQgU2V0T2Zmc2V0VmFjdXVtTGltaXQodm9pZCk7CiBzdGF0aWMgYm9v bCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zm c2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKE9pZCBv bGRlc3RNdWx0aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNPZmYsCkBA IC0xMDIzLDkwICsxMDE5LDIyIEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywg TXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAJRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KHJlc3Vs dCk7CiAKIAkvKgotCSAqIFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0 byBhYm92ZS4gIEFsc28sIGJlIGNhcmVmdWwgbm90IHRvCi0JICogcmV0dXJuIHplcm8gYXMg dGhlIHN0YXJ0aW5nIG9mZnNldCBmb3IgYW55IG11bHRpeGFjdC4gU2VlCi0JICogR2V0TXVs dGlYYWN0SWRNZW1iZXJzKCkgZm9yIG1vdGl2YXRpb24uCisJICogUmVzZXJ2ZSB0aGUgbWVt YmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFib3ZlLgogCSAqLwogCW5leHRPZmZzZXQgPSBN dWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKLQlpZiAobmV4dE9mZnNldCA9PSAwKQotCXsK LQkJKm9mZnNldCA9IDE7Ci0JCW5tZW1iZXJzKys7CQkJCS8qIGFsbG9jYXRlIG1lbWJlciBz bG90IDAgdG9vICovCi0JfQotCWVsc2UKLQkJKm9mZnNldCA9IG5leHRPZmZzZXQ7Ci0KLQkv Ki0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFnYWluc3Qgb3ZlcnJ1biBvZiB0aGUgbWVtYmVy cyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQotCSAqIGZvbGxvd2luZyBydWxlczoKLQkgKgot CSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3RvcExpbWl0LCByZWZ1c2UgdG8gZ2VuZXJhdGUg bW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUgY2xvc2UgdG8gb2Zmc2V0U3RvcExpbWl0LCBl bWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFyYml0cmFyaWx5LCB3ZSBzdGFydCBlbWl0dGlu ZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNlZ21lbnRzIG9yIGxlc3MKLQkgKiBmcm9tIG9m ZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5vdGUgd2UgaGF2ZW4ndCB1cGRhdGVkIHRoZSBz aGFyZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBmYWlsIGF0IHRoaXMKLQkgKiBwb2ludCwgdGhl IG11bHRpeGFjdCBJRCB3ZSBncmFiYmVkIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0 IGd1eS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5n IGF1dG92YWN1dW0gcnVucyBoZXJlOiB0aGUKLQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRp bmdzIHdvdWxkIGhhdmUgdG8gYmUgcmVkdWNlZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAq IGVmZmVjdC4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VH TUVOVFMJMjAKLQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0J CU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExp bWl0LCBuZXh0T2Zmc2V0LAotCQkJCQkJCQkgbm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNv bW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8K LQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hF Uik7Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1f TElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2coIm11bHRpeGFjdCBcIm1lbWJlcnNcIiBs aW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJkZXRhaWxfcGx1cmFsKCJUaGlzIGNvbW1hbmQg d291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVtYmVycywgYnV0IHRoZSByZW1h aW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJlci4iLAotCQkJCQkJCQkg ICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVtYmVy cywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJl cnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4 dE9mZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1lbWJlcnMsCi0JCQkJCQkJCSAgTXVsdGlYYWN0 U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJyaGlu dCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lE ICV1IHdpdGggcmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBh bmQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAot CQkJCQkJIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQikpKTsKLQl9CiAKIAkv KgotCSAqIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFj dGlvbiwgdG8gcHJldmVudCBtZW1iZXJzCi0JICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEg bXVjaCBsYXJnZXIgd2luZG93IHRvIHRyaWdnZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVz dCB0aGUgd2FybmluZyBsaW1pdC4gVGhlIHdhcm5pbmcgaXMganVzdCBhIG1lYXN1cmUgb2Yg bGFzdCByZXNvcnQgLQotCSAqIHRoaXMgaXMgaW4gbGluZSB3aXRoIEdldE5ld1RyYW5zYWN0 aW9uSWQncyBiZWhhdmlvdXIuCisJICogT2Zmc2V0cyBhcmUgNjQtYml0IGludGVnZXJzIGFu ZCB3aWxsIG5ldmVyIHdyYXAgYXJvdW5kLiAgRmlyc3RseSwgaXQKKwkgKiB3b3VsZCB0YWtl IGFuIHVucmVhbGlzdGljIGFtb3VudCBvZiB0aW1lIGFuZCByZXNvdXJjZXMgdG8gY29uc3Vt ZSAyXjY0CisJICogb2Zmc2V0cy4gIFNlY29uZGx5LCBtdWx0aXhpZCBjcmVhdGlvbiBpcyBX QUwtbG9nZ2VkLCBzbyB5b3Ugd291bGQgcnVuCisJICogb3V0IG9mIExTTnMgYmVmb3JlIHJl YWNoaW5nIG9mZnNldCB3cmFwYXJvdW5kLiAgTmV2ZXJ0aGVsZXNzLCBjaGVjayBmb3IKKwkg KiB3cmFwYXJvdW5kIGFzIGEgc2FuaXR5IGNoZWNrLgogCSAqLwotCWlmICghTXVsdGlYYWN0 U3RhdGUtPm9sZGVzdE9mZnNldEtub3duIHx8Ci0JCShNdWx0aVhhY3RTdGF0ZS0+bmV4dE9m ZnNldCAtIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQKLQkJID4gTVVMVElYQUNUX01F TUJFUl9TQUZFX1RIUkVTSE9MRCkpCi0JewotCQkvKgotCQkgKiBUbyBhdm9pZCBzd2FtcGlu ZyB0aGUgcG9zdG1hc3RlciB3aXRoIHNpZ25hbHMsIHdlIGlzc3VlIHRoZSBhdXRvdmFjCi0J CSAqIHJlcXVlc3Qgb25seSB3aGVuIGNyb3NzaW5nIGEgc2VnbWVudCBib3VuZGFyeS4gV2l0 aCBkZWZhdWx0Ci0JCSAqIGNvbXBpbGF0aW9uIHNldHRpbmdzIHRoYXQncyByb3VnaGx5IGFm dGVyIDUwayBtZW1iZXJzLiAgVGhpcyBzdGlsbAotCQkgKiBnaXZlcyBwbGVudHkgb2YgY2hh bmNlcyBiZWZvcmUgd2UgZ2V0IGludG8gcmVhbCB0cm91YmxlLgotCQkgKi8KLQkJaWYgKChN WE9mZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zmc2V0KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQpICE9Ci0JCQkoTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCArIG5tZW1iZXJz KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpKQotCQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwo UE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0JfQotCi0JaWYgKE11bHRpWGFj dFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biAmJgotCQlNdWx0aVhhY3RPZmZzZXRXb3VsZFdy YXAoTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCwKLQkJCQkJCQkJIG5leHRPZmZz ZXQsCi0JCQkJCQkJCSBubWVtYmVycyArIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICog U0xSVV9QQUdFU19QRVJfU0VHTUVOVCAqIE9GRlNFVF9XQVJOX1NFR01FTlRTKSkKLQkJZXJl cG9ydChXQVJOSU5HLAorCWlmIChuZXh0T2Zmc2V0ICsgbm1lbWJlcnMgPCBuZXh0T2Zmc2V0 KQorCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1J VF9FWENFRURFRCksCi0JCQkJIGVycm1zZ19wbHVyYWwoImRhdGFiYXNlIHdpdGggT0lEICV1 IG11c3QgYmUgdmFjdXVtZWQgYmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1lbWJlciBpcyB1 c2VkIiwKLQkJCQkJCQkgICAiZGF0YWJhc2Ugd2l0aCBPSUQgJXUgbXVzdCBiZSB2YWN1dW1l ZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVtYmVycyBhcmUgdXNlZCIsCi0JCQkJCQkJ ICAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgKyBubWVt YmVycywKLQkJCQkJCQkgICBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0REIsCi0J CQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQg KyBubWVtYmVycyksCi0JCQkJIGVycmhpbnQoIkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZB Q1VVTSBpbiB0aGF0IGRhdGFiYXNlIHdpdGggcmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3Rf ZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9h Z2VcIiBzZXR0aW5ncy4iKSkpOworCQkJCSBlcnJtc2coIk11bHRpWGFjdCBtZW1iZXJzIHdv dWxkIHdyYXAgYXJvdW5kIikpKTsKKwkqb2Zmc2V0ID0gbmV4dE9mZnNldDsKIAogCUV4dGVu ZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0LCBubWVtYmVycyk7CiAKQEAgLTExMjcsOCAr MTA1NSw3IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zm c2V0ICpvZmZzZXQpCiAJICogdGhlIG5leHQgaXRlcmF0aW9uLiAgQnV0IG5vdGUgdGhhdCBu ZXh0TVhhY3QgbWF5IGJlIEludmFsaWRNdWx0aVhhY3RJZAogCSAqIG9yIHRoZSBmaXJzdCB2 YWx1ZSBvbiBhIHNlZ21lbnQtYmVnaW5uaW5nIHBhZ2UgYWZ0ZXIgdGhpcyByb3V0aW5lCiAJ ICogZXhpdHMsIHNvIGFueW9uZSBlbHNlIGxvb2tpbmcgYXQgdGhlIHZhcmlhYmxlIG11c3Qg YmUgcHJlcGFyZWQgdG8gZGVhbAotCSAqIHdpdGggZWl0aGVyIGNhc2UuICBTaW1pbGFybHks IG5leHRPZmZzZXQgbWF5IGJlIHplcm8sIGJ1dCB3ZSB3b24ndCB1c2UKLQkgKiB0aGF0IGFz IHRoZSBhY3R1YWwgc3RhcnQgb2Zmc2V0IG9mIHRoZSBuZXh0IG11bHRpeGFjdC4KKwkgKiB3 aXRoIGVpdGhlciBjYXNlLgogCSAqLwogCShNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KSsr OwogCkBAIC0xMTM2LDcgKzEwNjMsOCBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJl cnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhh Y3RHZW5Mb2NrKTsKIAotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5n ICV1IG9mZnNldCAldSIsIHJlc3VsdCwgKm9mZnNldCk7CisJZGVidWdfZWxvZzQoREVCVUcy LCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0ICUiIFBSSXU2NCwKKwkJCQlyZXN1bHQs ICpvZmZzZXQpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNzgsNyArMTEwNiw2IEBA IEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVt YmVyICoqbWVtYmVycywKIAlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0aDsKLQlpbnQJCQl0cnVlbGVuZ3RoOwogCU11 bHRpWGFjdElkIG9sZGVzdE1YYWN0OwogCU11bHRpWGFjdElkIG5leHRNWGFjdDsKIAlNdWx0 aVhhY3RJZCB0bXBNWGFjdDsKQEAgLTEyNzcsMTYgKzEyMDQsNyBAQCBHZXRNdWx0aVhhY3RJ ZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMs CiAJICogd2UgaGF2ZSBqdXN0IGZvciB0aGlzOyB0aGUgcHJvY2VzcyBpbiBjaGFyZ2Ugd2ls bCBzaWduYWwgdGhlIENWIGFzIHNvb24KIAkgKiBhcyBpdCBoYXMgZmluaXNoZWQgd3JpdGlu ZyB0aGUgbXVsdGl4YWN0IG9mZnNldC4KIAkgKgotCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVs dGlYYWN0SWQgaW5jcmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCi0JICog aGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBv ZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mg b2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5k cG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGlu Y3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0 aGUgemVybyd0aAotCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRh aW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0aW9uIElEIHNv IGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKLQkg KiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4K LQkgKgotCSAqIFRoaXMgaXMgYWxsIHByZXR0eSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3Vy cyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVyCisJICogVGhpcyBpcyBhIGxpdHRsZSBtZXNz eSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVyCiAJICog Y2FzZXMsIHNvIGl0IHNlZW1zIGJldHRlciB0aGFuIGhvbGRpbmcgdGhlIE11bHRpWGFjdEdl bkxvY2sgZm9yIGEgbG9uZwogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9u LgogCSAqLwpAQCAtMTM3Miw2ICsxMjkwLDkgQEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShs b2NrKTsKIAlsb2NrID0gTlVMTDsKIAorCS8qIEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJl cnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlBc3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgog CSAqIElmIHdlIHNsZXB0IGFib3ZlLCBjbGVhbiB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIg bmVlZGVkLgogCSAqLwpAQCAtMTM4MCw3ICsxMzAxLDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAo TXVsdGlYYWN0TWVtYmVyICopIHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVt YmVyKSk7CiAKLQl0cnVlbGVuZ3RoID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAo aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG9mZnNldCsrKQogCXsKQEAgLTE0MTcsMzcg KzEzMzcsMjcgQEAgcmV0cnk6CiAKIAkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopCiAJ CQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBt ZW1iZXJvZmYpOwotCi0JCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQot CQl7Ci0JCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2Vk IHNsb3QgemVybyAqLwotCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKLQkJCWNvbnRpbnVlOwot CQl9CisJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpOwogCiAJCWZs YWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWJzaGlmdCA9IE1Y T2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CiAJCWZsYWdzcHRyID0gKHVpbnQzMiAq KSAoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBm bGFnc29mZik7CiAKLQkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwotCQlwdHJb dHJ1ZWxlbmd0aF0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVN QkVSX1hBQ1RfQklUTUFTSzsKLQkJdHJ1ZWxlbmd0aCsrOworCQlwdHJbaV0ueGlkID0gKnhh Y3RwdHI7CisJCXB0cltpXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFD VF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAK LQkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICov Ci0JQXNzZXJ0KHRydWVsZW5ndGggPiAwKTsKLQogCS8qCiAJICogQ29weSB0aGUgcmVzdWx0 IGludG8gdGhlIGxvY2FsIGNhY2hlLgogCSAqLwotCW1YYWN0Q2FjaGVQdXQobXVsdGksIHRy dWVsZW5ndGgsIHB0cik7CisJbVhhY3RDYWNoZVB1dChtdWx0aSwgbGVuZ3RoLCBwdHIpOwog CiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVtYmVyczogbm8gY2FjaGUgZm9yICVzIiwK LQkJCQlteGlkX3RvX3N0cmluZyhtdWx0aSwgdHJ1ZWxlbmd0aCwgcHRyKSk7CisJCQkJbXhp ZF90b19zdHJpbmcobXVsdGksIGxlbmd0aCwgcHRyKSk7CiAJKm1lbWJlcnMgPSBwdHI7Ci0J cmV0dXJuIHRydWVsZW5ndGg7CisJcmV0dXJuIGxlbmd0aDsKIH0KIAogLyoKQEAgLTE4NTQs NyArMTc2NCw3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCQkJCSAgInBnX211bHRp eGFjdC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJ ICBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJf TVVMVElYQUNUX01FTUJFUiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRv ZXNuJ3QgY2FsbCBTaW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVu aXQgdGVzdHMgKi8KIAogCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3Qg Ki8KQEAgLTE5MTAsNDggKzE4MjAsNiBAQCBCb290U3RyYXBNdWx0aVhhY3Qodm9pZCkKIAlT aW1wbGVMcnVaZXJvQW5kV3JpdGVQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgMCk7CiB9CiAK LS8qCi0gKiBNYXliZUV4dGVuZE9mZnNldFNscnUKLSAqCQlFeHRlbmQgdGhlIG9mZnNldHMg U0xSVSBhcmVhLCBpZiBuZWNlc3NhcnkKLSAqCi0gKiBBZnRlciBhIGJpbmFyeSB1cGdyYWRl IGZyb20gPD0gOS4yLCB0aGUgcGdfbXVsdGl4YWN0L29mZnNldHMgU0xSVSBhcmVhIG1pZ2h0 Ci0gKiBjb250YWluIGZpbGVzIHRoYXQgYXJlIHNob3J0ZXIgdGhhbiBuZWNlc3Nhcnk7IHRo aXMgd291bGQgb2NjdXIgaWYgdGhlIG9sZAotICogaW5zdGFsbGF0aW9uIGhhZCB1c2VkIG11 bHRpeGFjdHMgYmV5b25kIHRoZSBmaXJzdCBwYWdlIChmaWxlcyBjYW5ub3QgYmUKLSAqIGNv cGllZCwgYmVjYXVzZSB0aGUgb24tZGlzayByZXByZXNlbnRhdGlvbiBpcyBkaWZmZXJlbnQp LiAgcGdfdXBncmFkZSB3b3VsZAotICogdXBkYXRlIHBnX2NvbnRyb2wgdG8gc2V0IHRoZSBu ZXh0IG9mZnNldCB2YWx1ZSB0byBiZSBhdCB0aGF0IHBvc2l0aW9uLCBzbwotICogdGhhdCB0 dXBsZXMgbWFya2VkIGFzIGxvY2tlZCBieSBzdWNoIE11bHRpWGFjdHMgd291bGQgYmUgc2Vl biBhcyB2aXNpYmxlCi0gKiB3aXRob3V0IGhhdmluZyB0byBjb25zdWx0IG11bHRpeGFjdC4g IEhvd2V2ZXIsIHRyeWluZyB0byBjcmVhdGUgYW5kIHVzZSBhCi0gKiBuZXcgTXVsdGlYYWN0 SWQgd291bGQgcmVzdWx0IGluIGFuIGVycm9yIGJlY2F1c2UgdGhlIHBhZ2Ugb24gd2hpY2gg dGhlIG5ldwotICogdmFsdWUgd291bGQgcmVzaWRlIGRvZXMgbm90IGV4aXN0LiAgVGhpcyBy b3V0aW5lIGlzIGluIGNoYXJnZSBvZiBjcmVhdGluZwotICogc3VjaCBwYWdlcy4KLSAqLwot c3RhdGljIHZvaWQKLU1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQotewotCWludDY0CQlw YWdlbm87Ci0JTFdMb2NrCSAgICpsb2NrOwotCi0JcGFnZW5vID0gTXVsdGlYYWN0SWRUb09m ZnNldFBhZ2UoTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCk7Ci0JbG9jayA9IFNpbXBsZUxy dUdldEJhbmtMb2NrKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKLQotCUxXTG9ja0Fj cXVpcmUobG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNp Y2FsUGFnZUV4aXN0KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKSkKLQl7Ci0JCWludAkJ CXNsb3RubzsKLQotCQkvKgotCQkgKiBGb3J0dW5hdGVseSBmb3IgdXMsIFNpbXBsZUxydVdy aXRlUGFnZSBpcyBhbHJlYWR5IHByZXBhcmVkIHRvIGRlYWwKLQkJICogd2l0aCBjcmVhdGlu ZyBhIG5ldyBzZWdtZW50IGZpbGUgZXZlbiBpZiB0aGUgcGFnZSB3ZSdyZSB3cml0aW5nIGlz Ci0JCSAqIG5vdCB0aGUgZmlyc3QgaW4gaXQsIHNvIHRoaXMgaXMgZW5vdWdoLgotCQkgKi8K LQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8pOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBzbG90bm8p OwotCX0KLQotCUxXTG9ja1JlbGVhc2UobG9jayk7Ci19Ci0KIC8qCiAgKiBUaGlzIG11c3Qg YmUgY2FsbGVkIE9OQ0UgZHVyaW5nIHBvc3RtYXN0ZXIgb3Igc3RhbmRhbG9uZS1iYWNrZW5k IHN0YXJ0dXAuCiAgKgpAQCAtMjA4Miw4ICsxOTUwLDggQEAgVHJpbU11bHRpWGFjdCh2b2lk KQogCU11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXAgPSB0cnVlOwogCUxXTG9ja1Jl bGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQkvKiBOb3cgY29tcHV0ZSBob3cgZmFyIGF3 YXkgdGhlIG5leHQgbWVtYmVycyB3cmFwYXJvdW5kIGlzLiAqLwotCVNldE11bHRpWGFjdElk TGltaXQob2xkZXN0TVhhY3QsIG9sZGVzdE1YYWN0REIsIHRydWUpOworCS8qIE5vdyBjb21w dXRlIGhvdyBmYXIgYXdheSB0aGUgbmV4dCBtdWx0aXhpZCB3cmFwYXJvdW5kIGlzLiAqLwor CVNldE11bHRpWGFjdElkTGltaXQob2xkZXN0TVhhY3QsIG9sZGVzdE1YYWN0REIpOwogfQog CiAvKgpAQCAtMjEwNCw3ICsxOTcyLDcgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRpKGJv b2wgaXNfc2h1dGRvd24sCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAog CWRlYnVnX2Vsb2c2KERFQlVHMiwKLQkJCQkiTXVsdGlYYWN0OiBjaGVja3BvaW50IGlzIG5l eHRNdWx0aSAldSwgbmV4dE9mZnNldCAldSwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAor CQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0T2Zmc2V0 ICUiIFBSSXU2NCAiLCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCiAJCQkJKm5leHRNdWx0 aSwgKm5leHRNdWx0aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CiB9 CiAKQEAgLTIxMzksMjYgKzIwMDcsMTIgQEAgdm9pZAogTXVsdGlYYWN0U2V0TmV4dE1YYWN0 KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIAkJCQkJICBNdWx0aVhhY3RPZmZzZXQgbmV4dE11 bHRpT2Zmc2V0KQogewotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGlu ZyBuZXh0IG11bHRpIHRvICV1IG9mZnNldCAldSIsCisJZGVidWdfZWxvZzQoREVCVUcyLCAi TXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICUiIFBSSXU2NCwK IAkJCQluZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJTFdMb2NrQWNxdWlyZShNdWx0 aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhh Y3QgPSBuZXh0TXVsdGk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBuZXh0TXVs dGlPZmZzZXQ7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKLQotCS8qCi0J ICogRHVyaW5nIGEgYmluYXJ5IHVwZ3JhZGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvZmZzZXRz IFNMUlUgaXMgbGFyZ2UKLQkgKiBlbm91Z2ggdG8gY29udGFpbiB0aGUgbmV4dCB2YWx1ZSB0 aGF0IHdvdWxkIGJlIGNyZWF0ZWQuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcHJl dHR5IGVhcmx5IGR1cmluZyB0aGUgZmlyc3Qgc3RhcnR1cCBpbiBiaW5hcnkKLQkgKiB1cGdy YWRlIG1vZGU6IGJlZm9yZSBTdGFydHVwTXVsdGlYYWN0KCkgaW4gZmFjdCwgYmVjYXVzZSB0 aGlzIHJvdXRpbmUKLQkgKiBpcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhhdCBieSBTdGFydHVw WExPRygpLiAgQW5kIHdlIGNhbid0IGRvIGl0Ci0JICogZWFybGllciB0aGFuIGF0IHRoaXMg cG9pbnQsIGJlY2F1c2UgZHVyaW5nIHRoYXQgZmlyc3QgY2FsbCBvZiB0aGlzCi0JICogcm91 dGluZSB3ZSBkZXRlcm1pbmUgdGhlIE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgdmFsdWUg dGhhdAotCSAqIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSBuZWVkcy4KLQkgKi8KLQlpZiAoSXNC aW5hcnlVcGdyYWRlKQotCQlNYXliZUV4dGVuZE9mZnNldFNscnUoKTsKIH0KIAogLyoKQEAg LTIxNjYsMjggKzIwMjAsMjQgQEAgTXVsdGlYYWN0U2V0TmV4dE1YYWN0KE11bHRpWGFjdElk IG5leHRNdWx0aSwKICAqIGRhdG1pbm14aWQgKGllLCB0aGUgb2xkZXN0IE11bHRpWGFjdElk IHRoYXQgbWlnaHQgZXhpc3QgaW4gYW55IGRhdGFiYXNlCiAgKiBvZiBvdXIgY2x1c3Rlciks IGFuZCB0aGUgT0lEIG9mIHRoZSAob3IgYSkgZGF0YWJhc2Ugd2l0aCB0aGF0IHZhbHVlLgog ICoKLSAqIGlzX3N0YXJ0dXAgaXMgdHJ1ZSB3aGVuIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHRo ZSBjbHVzdGVyLCBmYWxzZSB3aGVuIHdlCi0gKiBhcmUgdXBkYXRpbmcgc3RhdGUgaW4gYSBy dW5uaW5nIGNsdXN0ZXIuICBUaGlzIG9ubHkgYWZmZWN0cyBsb2cgbWVzc2FnZXMuCisgKiBU aGlzIGFsc28gdXBkYXRlcyBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0LCBieSBsb29r aW5nIHVwIHRoZSBvZmZzZXQgb2YKKyAqIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhh Y3RJZC4KICAqLwogdm9pZAotU2V0TXVsdGlYYWN0SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRl c3RfZGF0bWlubXhpZCwgT2lkIG9sZGVzdF9kYXRvaWQsCi0JCQkJCWJvb2wgaXNfc3RhcnR1 cCkKK1NldE11bHRpWGFjdElkTGltaXQoTXVsdGlYYWN0SWQgb2xkZXN0X2RhdG1pbm14aWQs IE9pZCBvbGRlc3RfZGF0b2lkKQogewogCU11bHRpWGFjdElkIG11bHRpVmFjTGltaXQ7CiAJ TXVsdGlYYWN0SWQgbXVsdGlXYXJuTGltaXQ7CiAJTXVsdGlYYWN0SWQgbXVsdGlTdG9wTGlt aXQ7CiAJTXVsdGlYYWN0SWQgbXVsdGlXcmFwTGltaXQ7CiAJTXVsdGlYYWN0SWQgY3VyTXVs dGk7Ci0JYm9vbAkJbmVlZHNfb2Zmc2V0X3ZhY3V1bTsKIAogCUFzc2VydChNdWx0aVhhY3RJ ZElzVmFsaWQob2xkZXN0X2RhdG1pbm14aWQpKTsKIAogCS8qCiAJICogV2UgcHJldGVuZCB0 aGF0IGEgd3JhcCB3aWxsIGhhcHBlbiBoYWxmd2F5IHRocm91Z2ggdGhlIG11bHRpeGFjdCBJ RAogCSAqIHNwYWNlLCBidXQgdGhhdCdzIG5vdCByZWFsbHkgdHJ1ZSwgYmVjYXVzZSBtdWx0 aXhhY3RzIHdyYXAgZGlmZmVyZW50bHkKLQkgKiBmcm9tIHRyYW5zYWN0aW9uIElEcy4gIE5v dGUgdGhhdCwgc2VwYXJhdGVseSBmcm9tIGFueSBjb25jZXJuIGFib3V0Ci0JICogbXVsdGl4 YWN0IElEcyB3cmFwcGluZywgd2UgbXVzdCBlbnN1cmUgdGhhdCBtdWx0aXhhY3QgbWVtYmVy cyBkbyBub3QKLQkgKiB3cmFwLiAgTGltaXRzIGZvciB0aGF0IGFyZSBzZXQgaW4gU2V0T2Zm c2V0VmFjdXVtTGltaXQsIG5vdCBoZXJlLgorCSAqIGZyb20gdHJhbnNhY3Rpb24gSURzLgog CSAqLwogCW11bHRpV3JhcExpbWl0ID0gb2xkZXN0X2RhdG1pbm14aWQgKyAoTWF4TXVsdGlY YWN0SWQgPj4gMSk7CiAJaWYgKG11bHRpV3JhcExpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkK QEAgLTIyNTUsOCArMjEwNSwxMyBAQCBTZXRNdWx0aVhhY3RJZExpbWl0KE11bHRpWGFjdElk IG9sZGVzdF9kYXRtaW5teGlkLCBPaWQgb2xkZXN0X2RhdG9pZCwKIAogCUFzc2VydCghSW5S ZWNvdmVyeSk7CiAKLQkvKiBTZXQgbGltaXRzIGZvciBvZmZzZXQgdmFjdXVtLiAqLwotCW5l ZWRzX29mZnNldF92YWN1dW0gPSBTZXRPZmZzZXRWYWN1dW1MaW1pdChpc19zdGFydHVwKTsK KwkvKgorCSAqIE9mZnNldHMgYXJlIDY0LWJpdHMgd2lkZSBhbmQgbmV2ZXIgd3JhcCBhcm91 bmQsIHNvIHdlIGRvbid0IG5lZWQgdG8KKwkgKiBjb25zaWRlciB0aGVtIGZvciBlbWVyZ2Vu Y3kgYXV0b3ZhY3V1bSBwdXJwb3Nlcy4gIEJ1dCBub3cgdGhhdCB3ZSdyZSBpbgorCSAqIGEg Y29uc2lzdGVudCBzdGF0ZSwgZGV0ZXJtaW5lIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZz ZXQsIHRvIGJlIHVzZWQKKwkgKiB0byBjYWxjdWxhdGUgZnJlZXppbmcgY3V0b2ZmIHRvIGtl ZXAgdGhlIG9mZnNldHMgZGlzayB1c2FnZSBpbiBjaGVjay4KKwkgKi8KKwlTZXRPZmZzZXRW YWN1dW1MaW1pdCgpOwogCiAJLyoKIAkgKiBJZiBwYXN0IHRoZSBhdXRvdmFjdXVtIGZvcmNl IHBvaW50LCBpbW1lZGlhdGVseSBzaWduYWwgYW4gYXV0b3ZhYwpAQCAtMjI2NSw4ICsyMTIw LDcgQEAgU2V0TXVsdGlYYWN0SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRlc3RfZGF0bWlubXhp ZCwgT2lkIG9sZGVzdF9kYXRvaWQsCiAJICogZGF0YWJhc2UsIGl0J2xsIGNhbGwgaGVyZSwg YW5kIHdlJ2xsIHNpZ25hbCB0aGUgcG9zdG1hc3RlciB0byBzdGFydAogCSAqIGFub3RoZXIg aXRlcmF0aW9uIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBzdGlsbCBhbnkgb2xkIGRhdGFi YXNlcy4KIAkgKi8KLQlpZiAoKE11bHRpWGFjdElkUHJlY2VkZXMobXVsdGlWYWNMaW1pdCwg Y3VyTXVsdGkpIHx8Ci0JCSBuZWVkc19vZmZzZXRfdmFjdXVtKSAmJiBJc1VuZGVyUG9zdG1h c3RlcikKKwlpZiAoTXVsdGlYYWN0SWRQcmVjZWRlcyhtdWx0aVZhY0xpbWl0LCBjdXJNdWx0 aSkgJiYgSXNVbmRlclBvc3RtYXN0ZXIpCiAJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lH TkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwogCiAJLyogR2l2ZSBhbiBpbW1lZGlhdGUg d2FybmluZyBpZiBwYXN0IHRoZSB3cmFwIHdhcm4gcG9pbnQgKi8KQEAgLTIzMjgsOSArMjE4 Miw5IEBAIE11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGks CiAJCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG11bHRp IHRvICV1IiwgbWluTXVsdGkpOwogCQlNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0ID0gbWlu TXVsdGk7CiAJfQotCWlmIChNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RTdGF0 ZS0+bmV4dE9mZnNldCwgbWluTXVsdGlPZmZzZXQpKQorCWlmIChNdWx0aVhhY3RTdGF0ZS0+ bmV4dE9mZnNldCA8IG1pbk11bHRpT2Zmc2V0KQogCXsKLQkJZGVidWdfZWxvZzMoREVCVUcy LCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICV1IiwKKwkJZGVidWdfZWxv ZzMoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICUiIFBSSVU2 NCwKIAkJCQkJbWluTXVsdGlPZmZzZXQpOwogCQlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNl dCA9IG1pbk11bHRpT2Zmc2V0OwogCX0KQEAgLTIzNDksNyArMjIwMyw3IEBAIE11bHRpWGFj dEFkdmFuY2VPbGRlc3QoTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE9pZCBvbGRlc3RNdWx0 aURCKQogCUFzc2VydChJblJlY292ZXJ5KTsKIAogCWlmIChNdWx0aVhhY3RJZFByZWNlZGVz KE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZCwgb2xkZXN0TXVsdGkpKQotCQlT ZXRNdWx0aVhhY3RJZExpbWl0KG9sZGVzdE11bHRpLCBvbGRlc3RNdWx0aURCLCBmYWxzZSk7 CisJCVNldE11bHRpWGFjdElkTGltaXQob2xkZXN0TXVsdGksIG9sZGVzdE11bHRpREIpOwog fQogCiAvKgpAQCAtMjQzMiwyMyArMjI4Niw4IEBAIEV4dGVuZE11bHRpWGFjdE1lbWJlcihN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAJCQlMV0xvY2tSZWxlYXNl KGxvY2spOwogCQl9CiAKLQkJLyoKLQkJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1z IHRpbGwgZW5kIG9mIGN1cnJlbnQgcGFnZS4gIENhcmVmdWw6IGlmCi0JCSAqIGFkZGl0aW9u IG9mIHVuc2lnbmVkIGludHMgd3JhcHMgYXJvdW5kLCB3ZSdyZSBhdCB0aGUgbGFzdCBwYWdl IG9mCi0JCSAqIHRoZSBsYXN0IHNlZ21lbnQ7IHNpbmNlIHRoYXQgcGFnZSBob2xkcyBhIGRp ZmZlcmVudCBudW1iZXIgb2YgaXRlbXMKLQkJICogdGhhbiBvdGhlciBwYWdlcywgd2UgbmVl ZCB0byBkbyBpdCBkaWZmZXJlbnRseS4KLQkJICovCi0JCWlmIChvZmZzZXQgKyBNQVhfTUVN QkVSU19JTl9MQVNUX01FTUJFUlNfUEFHRSA8IG9mZnNldCkKLQkJewotCQkJLyoKLQkJCSAq IFRoaXMgaXMgdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50OyB3ZSBjYW4gY29t cHV0ZSB0aGUKLQkJCSAqIG51bWJlciBvZiBpdGVtcyBsZWZ0IHRvIGFsbG9jYXRlIGluIGl0 IHdpdGhvdXQgbW9kdWxvCi0JCQkgKiBhcml0aG1ldGljLgotCQkJICovCi0JCQlkaWZmZXJl bmNlID0gTWF4TXVsdGlYYWN0T2Zmc2V0IC0gb2Zmc2V0ICsgMTsKLQkJfQotCQllbHNlCi0J CQlkaWZmZXJlbmNlID0gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSBvZmZzZXQgJSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKKwkJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9m IGl0ZW1zIHRpbGwgZW5kIG9mIGN1cnJlbnQgcGFnZS4gKi8KKwkJZGlmZmVyZW5jZSA9IE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNf UEVSX1BBR0U7CiAKIAkJLyoKIAkJICogQWR2YW5jZSB0byBuZXh0IHBhZ2UsIHRha2luZyBj YXJlIHRvIHByb3Blcmx5IGhhbmRsZSB0aGUgd3JhcGFyb3VuZApAQCAtMjUxNCwyOCArMjM1 MywxNyBAQCBHZXRPbGRlc3RNdWx0aVhhY3RJZCh2b2lkKQogfQogCiAvKgotICogRGV0ZXJt aW5lIGhvdyBhZ2dyZXNzaXZlbHkgd2UgbmVlZCB0byB2YWN1dW0gaW4gb3JkZXIgdG8gcHJl dmVudCBtZW1iZXIKLSAqIHdyYXBhcm91bmQuCi0gKgotICogVG8gZG8gc28gZGV0ZXJtaW5l IHdoYXQncyB0aGUgb2xkZXN0IG1lbWJlciBvZmZzZXQgYW5kIGluc3RhbGwgdGhlIGxpbWl0 Ci0gKiBpbmZvIGluIE11bHRpWGFjdFN0YXRlLCB3aGVyZSBpdCBjYW4gYmUgdXNlZCB0byBw cmV2ZW50IG92ZXJydW4gb2Ygb2xkIGRhdGEKLSAqIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJl YS4KLSAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgZW1lcmdlbmN5IGF1dG92 YWN1dW0gaXMgcmVxdWlyZWQgYW5kIGZhbHNlCi0gKiBvdGhlcndpc2UuCisgKiBDYWxjdWxh dGUgdGhlIG9sZGVzdCBtZW1iZXIgb2Zmc2V0IGFuZCBpbnN0YWxsIGl0IGluIE11bHRpWGFj dFN0YXRlLCB3aGVyZQorICogaXQgY2FuIGJlIHVzZWQgdG8gYWRqdXN0IG11bHRpeGlkIGZy ZWV6aW5nIGN1dG9mZnMuCiAgKi8KLXN0YXRpYyBib29sCi1TZXRPZmZzZXRWYWN1dW1MaW1p dChib29sIGlzX3N0YXJ0dXApCitzdGF0aWMgdm9pZAorU2V0T2Zmc2V0VmFjdXVtTGltaXQo dm9pZCkKIHsKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhhY3RJZDsKIAlNdWx0aVhhY3RJ ZCBuZXh0TVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCA9IDA7CS8qIHBs YWNhdGUgY29tcGlsZXIgKi8KLQlNdWx0aVhhY3RPZmZzZXQgcHJldk9sZGVzdE9mZnNldDsK IAlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKIAlib29sCQlvbGRlc3RPZmZzZXRLbm93 biA9IGZhbHNlOwotCWJvb2wJCXByZXZPbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0U3RvcExpbWl0ID0gMDsKLQlNdWx0aVhhY3RPZmZzZXQgcHJldk9mZnNl dFN0b3BMaW1pdDsKIAogCS8qCiAJICogTkI6IEhhdmUgdG8gcHJldmVudCBjb25jdXJyZW50 IHRydW5jYXRpb24sIHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTI1NDgsOSArMjM3 Niw2IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlvbGRlc3RN dWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKIAluZXh0 TVhhY3QgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCW5leHRPZmZzZXQgPSBNdWx0 aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKLQlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0 aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247Ci0JcHJldk9sZGVzdE9mZnNldCA9IE11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7Ci0JcHJldk9mZnNldFN0b3BMaW1pdCA9IE11 bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRl LT5maW5pc2hlZFN0YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7 CiAKQEAgLTI1NzMsMTIxICsyMzk4LDM5IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wg aXNfc3RhcnR1cCkKIAllbHNlCiAJewogCQkvKgotCQkgKiBGaWd1cmUgb3V0IHdoZXJlIHRo ZSBvbGRlc3QgZXhpc3RpbmcgbXVsdGl4YWN0J3Mgb2Zmc2V0cyBhcmUKLQkJICogc3RvcmVk LiBEdWUgdG8gYnVncyBpbiBlYXJseSByZWxlYXNlIG9mIFBvc3RncmVTUUwgOS4zLlggYW5k IDkuNC5YLAotCQkgKiB0aGUgc3VwcG9zZWRseS1lYXJsaWVzdCBtdWx0aXhhY3QgbWlnaHQg bm90IHJlYWxseSBleGlzdC4gIFdlIGFyZQotCQkgKiBjYXJlZnVsIG5vdCB0byBmYWlsIGlu IHRoYXQgY2FzZS4KKwkJICogTG9vayB1cCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBvbGRl c3QgZXhpc3RpbmcgbXVsdGl4YWN0J3MgbWVtYmVycworCQkgKiBhcmUgc3RvcmVkLiAgSWYg d2UgY2Fubm90IGZpbmQgaXQsIGJlIGNhcmVmdWwgbm90IHRvIGZhaWwsIGFuZAorCQkgKiBs ZWF2ZSBvbGRlc3RPZmZzZXQgdW5jaGFuZ2VkLiAgb2xkZXN0T2Zmc2V0IGlzIGluaXRpYWxp emVkIHRvIHplcm8KKwkJICogYXQgc3lzdGVtIHN0YXJ0dXAsIHdoaWNoIHByZXZlbnRzIHRy dW5jYXRpbmcgbWVtYmVycyB1bnRpbCBhIHByb3BlcgorCQkgKiB2YWx1ZSBpcyBjYWxjdWxh dGVkLgorCQkgKgorCQkgKiAoV2UgaGFkIGJ1Z3MgaW4gZWFybHkgcmVsZWFzZXMgb2YgUG9z dGdyZVNRTCA5LjMuWCBhbmQgOS40Llggd2hlcmUKKwkJICogdGhlIHN1cHBvc2VkbHktZWFy bGllc3QgbXVsdGl4YWN0IG1pZ2h0IG5vdCByZWFsbHkgZXhpc3QuICBUaG9zZQorCQkgKiBz aG91bGQgYmUgbG9uZyBnb25lIGJ5IG5vdywgc28gdGhpcyBzaG91bGQgbm90IGZhaWwsIGJ1 dCBsZXQncworCQkgKiBzdGlsbCBiZSBkZWZlbnNpdmUuKQogCQkgKi8KIAkJb2xkZXN0T2Zm c2V0S25vd24gPQogCQkJZmluZF9tdWx0aXhhY3Rfc3RhcnQob2xkZXN0TXVsdGlYYWN0SWQs ICZvbGRlc3RPZmZzZXQpOwogCiAJCWlmIChvbGRlc3RPZmZzZXRLbm93bikKIAkJCWVyZXBv cnQoREVCVUcxLAotCQkJCQkoZXJybXNnX2ludGVybmFsKCJvbGRlc3QgTXVsdGlYYWN0SWQg bWVtYmVyIGlzIGF0IG9mZnNldCAldSIsCisJCQkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVz dCBNdWx0aVhhY3RJZCBtZW1iZXIgaXMgYXQgb2Zmc2V0ICUiIFBSSXU2NCwKIAkJCQkJCQkJ CSBvbGRlc3RPZmZzZXQpKSk7CiAJCWVsc2UKIAkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJy bXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdyYXBhcm91bmQgcHJvdGVjdGlvbnMgYXJlIGRpc2Fi bGVkIGJlY2F1c2Ugb2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBub3Qg ZXhpc3Qgb24gZGlzayIsCisJCQkJCShlcnJtc2coIm9sZGVzdCBjaGVja3BvaW50ZWQgTXVs dGlYYWN0ICV1IGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAogCQkJCQkJCW9sZGVzdE11bHRp WGFjdElkKSkpOwogCX0KIAogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0VHJ1bmNhdGlvbkxv Y2spOwogCi0JLyoKLQkgKiBJZiB3ZSBjYW4sIGNvbXB1dGUgbGltaXRzIChhbmQgaW5zdGFs bCB0aGVtIE11bHRpWGFjdFN0YXRlKSB0byBwcmV2ZW50Ci0JICogb3ZlcnJ1biBvZiBvbGQg ZGF0YSBpbiB0aGUgbWVtYmVycyBTTFJVIGFyZWEuIFdlIGNhbiBvbmx5IGRvIHNvIGlmIHRo ZQotCSAqIG9sZGVzdCBvZmZzZXQgaXMga25vd24gdGhvdWdoLgotCSAqLworCS8qIEluc3Rh bGwgdGhlIGNvbXB1dGVkIHZhbHVlICovCiAJaWYgKG9sZGVzdE9mZnNldEtub3duKQogCXsK LQkJLyogbW92ZSBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQg Ki8KLQkJb2Zmc2V0U3RvcExpbWl0ID0gb2xkZXN0T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAl Ci0JCQkJCQkJCQkJICAoTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyogYWx3YXlzIGxlYXZlIG9uZSBzZWdtZW50IGJlZm9y ZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwotCQlvZmZzZXRTdG9wTGltaXQgLT0gKE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7Ci0KLQkJ aWYgKCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlzX3N0YXJ0dXApCi0JCQllcmVwb3J0 KExPRywKLQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3Rl Y3Rpb25zIGFyZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0JCQkJ KGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0IG1lbWJlciBzdG9wIGxpbWl0IGlzIG5vdyAl dSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJCQkJCQkgb2Zmc2V0U3RvcExpbWl0LCBv bGRlc3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9mZnNldEtu b3duKQotCXsKLQkJLyoKLQkJICogSWYgd2UgZmFpbGVkIHRvIGdldCB0aGUgb2xkZXN0IG9m ZnNldCB0aGlzIHRpbWUsIGJ1dCB3ZSBoYXZlIGEKLQkJICogdmFsdWUgZnJvbSBhIHByZXZp b3VzIHBhc3MgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB1c2UgdGhlIG9sZAotCQkgKiB2YWx1 ZXMgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseSBmb3JjaW5nIGFuIGVtZXJnZW5jeSBhdXRv dmFjdXVtCi0JCSAqIGN5Y2xlIGFnYWluLgotCQkgKi8KLQkJb2xkZXN0T2Zmc2V0ID0gcHJl dk9sZGVzdE9mZnNldDsKLQkJb2xkZXN0T2Zmc2V0S25vd24gPSB0cnVlOwotCQlvZmZzZXRT dG9wTGltaXQgPSBwcmV2T2Zmc2V0U3RvcExpbWl0OworCQlMV0xvY2tBY3F1aXJlKE11bHRp WGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RP ZmZzZXQgPSBvbGRlc3RPZmZzZXQ7CisJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9j ayk7CiAJfQotCi0JLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQgdmFsdWVzICovCi0JTFdMb2Nr QWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwotCU11bHRpWGFjdFN0 YXRlLT5vbGRlc3RPZmZzZXQgPSBvbGRlc3RPZmZzZXQ7Ci0JTXVsdGlYYWN0U3RhdGUtPm9s ZGVzdE9mZnNldEtub3duID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0U3RhdGUt Pm9mZnNldFN0b3BMaW1pdCA9IG9mZnNldFN0b3BMaW1pdDsKLQlMV0xvY2tSZWxlYXNlKE11 bHRpWGFjdEdlbkxvY2spOwotCi0JLyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5jeSBh dXRvdmFjdXVtPwlJZiB3ZSdyZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KLQkgKi8KLQlyZXR1 cm4gIW9sZGVzdE9mZnNldEtub3duIHx8Ci0JCShuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zmc2V0 ID4gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCk7Ci19Ci0KLS8qCi0gKiBSZXR1 cm4gd2hldGhlciBhZGRpbmcgImRpc3RhbmNlIiB0byAic3RhcnQiIHdvdWxkIG1vdmUgcGFz dCAiYm91bmRhcnkiLgotICoKLSAqIFdlIHVzZSB0aGlzIHRvIGRldGVybWluZSB3aGV0aGVy IHRoZSBhZGRpdGlvbiBpcyAid3JhcHBpbmcgYXJvdW5kIiB0aGUKLSAqIGJvdW5kYXJ5IHBv aW50LCBoZW5jZSB0aGUgbmFtZS4gIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2FudCB0byB1c2Ug dGhlIHJlZ3VsYXIKLSAqIDJeMzEtbW9kdWxvIGFyaXRobWV0aWMgaGVyZSBpcyB0aGF0IHdl IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHdob2xlIG9mCi0gKiB0aGUgMl4zMi0xIHNw YWNlIGhlcmUsIGFsbG93aW5nIGZvciBtb3JlIG11bHRpeGFjdHMgdGhhbiB3b3VsZCBmaXQK LSAqIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE9mZnNldFdvdWxk V3JhcChNdWx0aVhhY3RPZmZzZXQgYm91bmRhcnksIE11bHRpWGFjdE9mZnNldCBzdGFydCwK LQkJCQkJCSB1aW50MzIgZGlzdGFuY2UpCi17Ci0JTXVsdGlYYWN0T2Zmc2V0IGZpbmlzaDsK LQotCS8qCi0JICogTm90ZSB0aGF0IG9mZnNldCBudW1iZXIgMCBpcyBub3QgdXNlZCAoc2Vl IEdldE11bHRpWGFjdElkTWVtYmVycyksIHNvCi0JICogaWYgdGhlIGFkZGl0aW9uIHdyYXBz IGFyb3VuZCB0aGUgVUlOVF9NQVggYm91bmRhcnksIHNraXAgdGhhdCB2YWx1ZS4KLQkgKi8K LQlmaW5pc2ggPSBzdGFydCArIGRpc3RhbmNlOwotCWlmIChmaW5pc2ggPCBzdGFydCkKLQkJ ZmluaXNoKys7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogV2hlbiB0aGUgYm91bmRh cnkgaXMgbnVtZXJpY2FsbHkgZ3JlYXRlciB0aGFuIHRoZSBzdGFydGluZyBwb2ludCwgYW55 Ci0JICogdmFsdWUgbnVtZXJpY2FsbHkgYmV0d2VlbiB0aGUgdHdvIGlzIG5vdCB3cmFwcGVk OgotCSAqCi0JICoJPC0tLS1TLS0tLUItLS0tPgotCSAqCVstLS0pCQkJID0gRiB3cmFwcGVk IHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkgWy0tLSkJCSA9IEYgbm90IHdyYXBwZWQK LQkgKgkJCSAgWy0tLS1dID0gRiB3cmFwcGVkIHBhc3QgQgotCSAqCi0JICogV2hlbiB0aGUg Ym91bmRhcnkgaXMgbnVtZXJpY2FsbHkgbGVzcyB0aGFuIHRoZSBzdGFydGluZyBwb2ludCAo aS5lLiB0aGUKLQkgKiBVSU5UX01BWCB3cmFwYXJvdW5kIG9jY3VycyBzb21ld2hlcmUgaW4g YmV0d2VlbikgdGhlbiBhbGwgdmFsdWVzIGluCi0JICogYmV0d2VlbiBhcmUgd3JhcHBlZDoK LQkgKgotCSAqCTwtLS0tQi0tLS1TLS0tLT4KLQkgKglbLS0tKQkJCSA9IEYgbm90IHdyYXBw ZWQgcGFzdCBCIChidXQgd3JhcHBlZCBwYXN0IFVJTlRfTUFYKQotCSAqCQkgWy0tLSkJCSA9 IEYgd3JhcHBlZCBwYXN0IEIgKGFuZCBVSU5UX01BWCkKLQkgKgkJCSAgWy0tLS1dID0gRiBu b3Qgd3JhcHBlZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KLQlpZiAoc3RhcnQgPCBi b3VuZGFyeSkKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSB8fCBmaW5pc2ggPCBzdGFy dDsKLQllbHNlCi0JCXJldHVybiBmaW5pc2ggPj0gYm91bmRhcnkgJiYgZmluaXNoIDwgc3Rh cnQ7CiB9CiAKIC8qCkBAIC0yNzQxLDM3ICsyNDg0LDIzIEBAIGZpbmRfbXVsdGl4YWN0X3N0 YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKICAqIG1l bWJlcnM6IE51bWJlciBvZiBtZW1iZXIgZW50cmllcyAobmV4dE9mZnNldCAtIG9sZGVzdE9m ZnNldCkKICAqIG9sZGVzdE11bHRpWGFjdElkOiBPbGRlc3QgTXVsdGlYYWN0IElEIHN0aWxs IGluIHVzZQogICogb2xkZXN0T2Zmc2V0OiBPbGRlc3Qgb2Zmc2V0IHN0aWxsIGluIHVzZQot ICoKLSAqIFJldHVybnMgZmFsc2UgaWYgdW5hYmxlIHRvIGRldGVybWluZSwgdGhlIG9sZGVz dCBvZmZzZXQgYmVpbmcgdW5rbm93bi4KICAqLwotYm9vbAordm9pZAogR2V0TXVsdGlYYWN0 SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAkJ CQkgTXVsdGlYYWN0SWQgKm9sZGVzdE11bHRpWGFjdElkLCBNdWx0aVhhY3RPZmZzZXQgKm9s ZGVzdE9mZnNldCkKIHsKIAlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKIAlNdWx0aVhh Y3RJZCBuZXh0TXVsdGlYYWN0SWQ7Ci0JYm9vbAkJb2xkZXN0T2Zmc2V0S25vd247CiAKIAlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX1NIQVJFRCk7CiAJbmV4dE9mZnNl dCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwogCSpvbGRlc3RNdWx0aVhhY3RJZCA9 IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKIAluZXh0TXVsdGlYYWN0SWQg PSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCSpvbGRlc3RPZmZzZXQgPSBNdWx0aVhh Y3RTdGF0ZS0+b2xkZXN0T2Zmc2V0OwotCW9sZGVzdE9mZnNldEtub3duID0gTXVsdGlYYWN0 U3RhdGUtPm9sZGVzdE9mZnNldEtub3duOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2Vu TG9jayk7CiAKLQlpZiAoIW9sZGVzdE9mZnNldEtub3duKQotCXsKLQkJKm1lbWJlcnMgPSAw OwotCQkqbXVsdGl4YWN0cyA9IDA7Ci0JCSpvbGRlc3RNdWx0aVhhY3RJZCA9IEludmFsaWRN dWx0aVhhY3RJZDsKLQkJKm9sZGVzdE9mZnNldCA9IDA7Ci0JCXJldHVybiBmYWxzZTsKLQl9 Ci0KIAkqbWVtYmVycyA9IG5leHRPZmZzZXQgLSAqb2xkZXN0T2Zmc2V0OwogCSptdWx0aXhh Y3RzID0gbmV4dE11bHRpWGFjdElkIC0gKm9sZGVzdE11bHRpWGFjdElkOwotCXJldHVybiB0 cnVlOwogfQogCiAvKgpAQCAtMjc4MCwyNiArMjUwOSwyNyBAQCBHZXRNdWx0aVhhY3RJbmZv KHVpbnQzMiAqbXVsdGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAogICogdmFj dXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIHdvcmsgdG9nZXRoZXIgdG8gbWFrZSBz dXJlIHdlIG5ldmVyIGhhdmUKICAqIHRvbyBtYW55IG11bHRpeGFjdHM7IHdlIGhvcGUgdGhh dCwgYXQgbGVhc3QgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsCiAgKiB0aGlzIHdpbGwg YWxzbyBiZSBzdWZmaWNpZW50IHRvIGtlZXAgdXMgZnJvbSB1c2luZyB0b28gbWFueSBvZmZz ZXRzLgotICogSG93ZXZlciwgaWYgdGhlIGF2ZXJhZ2UgbXVsdGl4YWN0IGhhcyBtYW55IG1l bWJlcnMsIHdlIG1pZ2h0IGV4aGF1c3QgdGhlCi0gKiBtZW1iZXJzIHNwYWNlIHdoaWxlIHN0 aWxsIHVzaW5nIGZldyBlbm91Z2ggbWVtYmVycyB0aGF0IHRoZXNlIGxpbWl0cyBmYWlsCi0g KiB0byB0cmlnZ2VyIHJlbG1pbm14aWQgYWR2YW5jZW1lbnQgYnkgVkFDVVVNLiAgQXQgdGhh dCBwb2ludCwgd2UnZCBoYXZlIG5vCi0gKiBjaG9pY2UgYnV0IHRvIHN0YXJ0IGZhaWxpbmcg bXVsdGl4YWN0LWNyZWF0aW5nIG9wZXJhdGlvbnMgd2l0aCBhbiBlcnJvci4KLSAqCi0gKiBU byBwcmV2ZW50IHRoYXQsIGlmIG1vcmUgdGhhbiBhIHRocmVzaG9sZCBwb3J0aW9uIG9mIHRo ZSBtZW1iZXJzIHNwYWNlIGlzCi0gKiB1c2VkLCB3ZSBlZmZlY3RpdmVseSByZWR1Y2UgYXV0 b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB0byBhIHZhbHVlIGp1 c3QgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgbXVsdGl4YWN0cyBpbiB1c2UuICBXZSBob3Bl IHRoYXQKLSAqIHRoaXMgd2lsbCBxdWlja2x5IHRyaWdnZXIgYXV0b3ZhY3V1bWluZyBvbiB0 aGUgdGFibGUgb3IgdGFibGVzIHdpdGggdGhlCi0gKiBvbGRlc3QgcmVsbWlubXhpZCwgdGh1 cyBhbGxvd2luZyBkYXRtaW5teGlkIHZhbHVlcyB0byBhZHZhbmNlIGFuZCByZW1vdmluZwot ICogc29tZSBtZW1iZXJzLgotICoKLSAqIEFzIHRoZSBmcmFjdGlvbiBvZiB0aGUgbWVtYmVy IHNwYWNlIGN1cnJlbnRseSBpbiB1c2UgZ3Jvd3MsIHdlIGJlY29tZQotICogbW9yZSBhZ2dy ZXNzaXZlIGluIGNsYW1waW5nIHRoaXMgdmFsdWUuICBUaGF0IG5vdCBvbmx5IGNhdXNlcyBh dXRvdmFjdXVtCi0gKiB0byByYW1wIHVwLCBidXQgYWxzbyBtYWtlcyBhbnkgbWFudWFsIHZh Y3V1bXMgdGhlIHVzZXIgaXNzdWVzIG1vcmUKLSAqIGFnZ3Jlc3NpdmUuICBUaGlzIGhhcHBl bnMgYmVjYXVzZSB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB3aWxsIGNsYW1wIHRoZQotICogZnJl ZXplIHRhYmxlIGFuZCB0aGUgbWluaW11bSBmcmVlemUgYWdlIGN1dG9mZnMgYmFzZWQgb24g dGhlIGVmZmVjdGl2ZQotICogYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2Ug dGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgSW4gdGhlIHdvcnN0Ci0gKiBjYXNlLCB3ZSdsbCBj bGFpbSB0aGUgZnJlZXplX21heF9hZ2UgdG8gemVybywgYW5kIGV2ZXJ5IHZhY3V1bSBvZiBh bnkKLSAqIHRhYmxlIHdpbGwgZnJlZXplIGV2ZXJ5IG11bHRpeGFjdC4KKyAqIEhvd2V2ZXIs IGlmIHRoZSBhdmVyYWdlIG11bHRpeGFjdCBoYXMgbWFueSBtZW1iZXJzLCB3ZSBtaWdodCBh Y2N1bXVsYXRlIGEKKyAqIGxhcmdlIGFtb3VudCBvZiBtZW1iZXJzLCBjb25zdW1pbmcgZGlz ayBzcGFjZSwgd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVub3VnaAorICogbXVsdGl4aWRzIHRo YXQgdGhlIG11bHRpeGlkIGxpbWl0cyBmYWlsIHRvIHRyaWdnZXIgcmVsbWlubXhpZCBhZHZh bmNlbWVudAorICogYnkgVkFDVVVNLgorICoKKyAqIFRvIHByZXZlbnQgdGhhdCwgaWYgdGhl IG1lbWJlcnMgc3BhY2UgdXNhZ2UgZXhjZWVkcyBhIHRocmVzaG9sZAorICogKE1VTFRJWEFD VF9NRU1CRVJfTE9XX1RIUkVTSE9MRCksIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZQorICogYXV0 b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgdG8gYSB2YWx1ZSBqdXN0IGxlc3Mg dGhhbiB0aGUgbnVtYmVyIG9mCisgKiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhh dCB0aGlzIHdpbGwgcXVpY2tseSB0cmlnZ2VyIGF1dG92YWN1dW1pbmcgb24KKyAqIHRoZSB0 YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUgb2xkZXN0IHJlbG1pbm14aWQsIHRodXMgYWxsb3dp bmcgZGF0bWlubXhpZAorICogdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92aW5nIHNvbWUg bWVtYmVycy4KKyAqCisgKiBBcyB0aGUgYW1vdW50IG9mIHRoZSBtZW1iZXIgc3BhY2UgaW4g dXNlIGdyb3dzLCB3ZSBiZWNvbWUgbW9yZSBhZ2dyZXNzaXZlCisgKiBpbiBjbGFtcGluZyB0 aGlzIHZhbHVlLiAgVGhhdCBub3Qgb25seSBjYXVzZXMgYXV0b3ZhY3V1bSB0byByYW1wIHVw LCBidXQKKyAqIGFsc28gbWFrZXMgYW55IG1hbnVhbCB2YWN1dW1zIHRoZSB1c2VyIGlzc3Vl cyBtb3JlIGFnZ3Jlc3NpdmUuICBUaGlzCisgKiBoYXBwZW5zIGJlY2F1c2UgdmFjdXVtX2dl dF9jdXRvZmZzKCkgd2lsbCBjbGFtcCB0aGUgZnJlZXplIHRhYmxlIGFuZCB0aGUKKyAqIG1p bmltdW0gZnJlZXplIGFnZSBjdXRvZmZzIGJhc2VkIG9uIHRoZSBlZmZlY3RpdmUKKyAqIGF1 dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlIHRoaXMgZnVuY3Rpb24gcmV0dXJu cy4gIEF0IHRoZSBleHRyZW1lLAorICogd2hlbiB0aGUgbWVtYmVycyB1c2FnZSByZWFjaGVz IE1VTFRJWEFDVF9NRU1CRVJfSElHSF9USFJFU0hPTEQsIHdlIGNsYW1wCisgKiBmcmVlemVf bWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueSB0YWJsZSB3aWxsIGZy ZWV6ZSBldmVyeQorICogbXVsdGl4YWN0LgogICovCiBpbnQKIE11bHRpWGFjdE1lbWJlckZy ZWV6ZVRocmVzaG9sZCh2b2lkKQpAQCAtMjgxMiwyMSArMjU0MiwyNyBAQCBNdWx0aVhhY3RN ZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCkKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhh Y3RJZDsKIAlNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0OwogCi0JLyogSWYgd2UgY2Fu J3QgZGV0ZXJtaW5lIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiwgYXNzdW1lIHRoZSB3b3Jz dC4gKi8KLQlpZiAoIUdldE11bHRpWGFjdEluZm8oJm11bHRpeGFjdHMsICZtZW1iZXJzLCAm b2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQotCQlyZXR1cm4gMDsKKwkvKiBS ZWFkIHRoZSBjdXJyZW50IG9mZnNldHMgYW5kIG1lbWJlcnMgdXNhZ2UuICovCisJR2V0TXVs dGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwg Jm9sZGVzdE9mZnNldCk7CiAKIAkvKiBJZiBtZW1iZXIgc3BhY2UgdXRpbGl6YXRpb24gaXMg bG93LCBubyBzcGVjaWFsIGFjdGlvbiBpcyByZXF1aXJlZC4gKi8KLQlpZiAobWVtYmVycyA8 PSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKQorCWlmIChtZW1iZXJzIDw9IE1V TFRJWEFDVF9NRU1CRVJfTE9XX1RIUkVTSE9MRCkKIAkJcmV0dXJuIGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwogCiAJLyoKIAkgKiBDb21wdXRlIGEgdGFyZ2V0IGZv ciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0aXhhY3RzCiAJ ICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQgb24gaG93 IGZhciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQu Ci0JICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVT SE9MRCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOworCSAqIE1VTFRJWEFD VF9NRU1CRVJfTE9XX1RIUkVTSE9MRC4KKwkgKgorCSAqIFRoZSB3YXkgdGhpcyBmb3JtdWxh IHdvcmtzIGlzIHRoYXQgd2hlbiBtZW1iZXJzIGlzIGV4YWN0bHkgYXQgdGhlIGxvdworCSAq IHRocmVzaG9sZCwgZnJhY3Rpb24gPSAwLjAsIGFuZCB3ZSBzZXQgZnJlZXplX21heF9hZ2Ug ZXF1YWwgdG8KKwkgKiBteGlkX2FnZShvbGRlc3RNdWx0aVhhY3RJZCkuICBBcyBtZW1iZXJz IGdyb3dzIGZ1cnRoZXIsIHRvd2FyZHMgdGhlCisJICogaGlnaCB0aHJlc2hvbGQsIGZyYWN0 aW9uIGdyb3dzIGxpbmVhcmx5IGZyb20gMC4wIHRvIDEuMCwgYW5kIHRoZSByZXN1bHQKKwkg KiBzaHJpbmtzIGZyb20gbXhpZF9hZ2Uob2xkZXN0TXVsdGlYYWN0SWQpIHRvIDAuICBCZXlv bmQgdGhlIGhpZ2gKKwkgKiB0aHJlc2hvbGQsIGZyYWN0aW9uID4gMS4wIGFuZCB0aGUgcmVz dWx0IGlzIGNsYW1wZWQgdG8gMC4KKwkgKi8KKwlmcmFjdGlvbiA9IChkb3VibGUpIChtZW1i ZXJzIC0gTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNIT0xEKSAvCisJCShNVUxUSVhBQ1Rf TUVNQkVSX0hJR0hfVEhSRVNIT0xEIC0gTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNIT0xE KTsKIAl2aWN0aW1fbXVsdGl4YWN0cyA9IG11bHRpeGFjdHMgKiBmcmFjdGlvbjsKIAogCS8q IGZyYWN0aW9uIGNvdWxkIGJlID4gMS4wLCBidXQgbG93ZXN0IHBvc3NpYmxlIGZyZWV6ZSBh Z2UgaXMgemVybyAqLwpAQCAtMjg2NywzNiArMjYwMywxMiBAQCBTbHJ1U2NhbkRpckNiRmlu ZEVhcmxpZXN0KFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwg dm9pZCAqZGF0YQogCiAvKgogICogRGVsZXRlIG1lbWJlcnMgc2VnbWVudHMgW29sZGVzdCwg bmV3T2xkZXN0KQotICoKLSAqIFRoZSBtZW1iZXJzIFNMUlUgY2FuLCBpbiBjb250cmFzdCB0 byB0aGUgb2Zmc2V0cyBvbmUsIGJlIGZpbGxlZCB0byBhbG1vc3QKLSAqIHRoZSBmdWxsIHJh bmdlIGF0IG9uY2UuIFRoaXMgbWVhbnMgU2ltcGxlTHJ1VHJ1bmNhdGUoKSBjYW4ndCB0cml2 aWFsbHkgYmUKLSAqIHVzZWQgLSBpbnN0ZWFkIHRoZSB0by1iZS1kZWxldGVkIHJhbmdlIGlz IGNvbXB1dGVkIHVzaW5nIHRoZSBvZmZzZXRzCi0gKiBTTFJVLiBDLmYuIFRydW5jYXRlTXVs dGlYYWN0KCkuCiAgKi8KIHN0YXRpYyB2b2lkCiBQZXJmb3JtTWVtYmVyc1RydW5jYXRpb24o TXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCwgTXVsdGlYYWN0T2Zmc2V0IG5ld09sZGVz dE9mZnNldCkKIHsKLQljb25zdCBpbnQ2NCBtYXhzZWdtZW50ID0gTVhPZmZzZXRUb01lbWJl clNlZ21lbnQoTWF4TXVsdGlYYWN0T2Zmc2V0KTsKLQlpbnQ2NAkJc3RhcnRzZWdtZW50ID0g TVhPZmZzZXRUb01lbWJlclNlZ21lbnQob2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJZW5kc2Vn bWVudCA9IE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KG5ld09sZGVzdE9mZnNldCk7Ci0JaW50 NjQJCXNlZ21lbnQgPSBzdGFydHNlZ21lbnQ7Ci0KLQkvKgotCSAqIERlbGV0ZSBhbGwgdGhl IHNlZ21lbnRzIGJ1dCB0aGUgbGFzdCBvbmUuIFRoZSBsYXN0IHNlZ21lbnQgY2FuIHN0aWxs Ci0JICogY29udGFpbiwgcG9zc2libHkgcGFydGlhbGx5LCB2YWxpZCBkYXRhLgotCSAqLwot CXdoaWxlIChzZWdtZW50ICE9IGVuZHNlZ21lbnQpCi0JewotCQllbG9nKERFQlVHMiwgInRy dW5jYXRpbmcgbXVsdGl4YWN0IG1lbWJlcnMgc2VnbWVudCAlIiBQUkl4NjQsCi0JCQkgc2Vn bWVudCk7Ci0JCVNscnVEZWxldGVTZWdtZW50KE11bHRpWGFjdE1lbWJlckN0bCwgc2VnbWVu dCk7Ci0KLQkJLyogbW92ZSB0byBuZXh0IHNlZ21lbnQsIGhhbmRsaW5nIHdyYXBhcm91bmQg Y29ycmVjdGx5ICovCi0JCWlmIChzZWdtZW50ID09IG1heHNlZ21lbnQpCi0JCQlzZWdtZW50 ID0gMDsKLQkJZWxzZQotCQkJc2VnbWVudCArPSAxOwotCX0KKwlTaW1wbGVMcnVUcnVuY2F0 ZShNdWx0aVhhY3RNZW1iZXJDdGwsCisJCQkJCSAgTVhPZmZzZXRUb01lbWJlclBhZ2UobmV3 T2xkZXN0T2Zmc2V0KSk7CiB9CiAKIC8qCkBAIC0zMDQwLDcgKzI3NTIsNyBAQCBUcnVuY2F0 ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09sZGVzdE11 bHRpREIpCiAKIAllbG9nKERFQlVHMSwgInBlcmZvcm1pbmcgbXVsdGl4YWN0IHRydW5jYXRp b246ICIKIAkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4 NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCSAibWVtYmVycyBbJXUsICV1KSwgbWVtYmVycyBz ZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCisJCSAibWVtYmVycyBbJSIg UFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIs ICUiIFBSSXg2NCAiKSIsCiAJCSBvbGRlc3RNdWx0aSwgbmV3T2xkZXN0TXVsdGksCiAJCSBN dWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChvbGRlc3RNdWx0aSksCiAJCSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSksCkBAIC0zMDgxLDYgKzI3OTMsNyBA QCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5l d09sZGVzdE11bHRpREIpCiAJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19F WENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZCA9IG5ld09s ZGVzdE11bHRpOwogCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiA9IG5ld09s ZGVzdE11bHRpREI7CisJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG5ld09sZGVz dE9mZnNldDsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJLyogRmly c3QgdHJ1bmNhdGUgbWVtYmVycyAqLwpAQCAtMzEyMCwyMCArMjgzMywxMyBAQCBNdWx0aVhh Y3RPZmZzZXRQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKQogCiAvKgog ICogRGVjaWRlIHdoZXRoZXIgYSBNdWx0aVhhY3RNZW1iZXIgcGFnZSBudW1iZXIgaXMgIm9s ZGVyIiBmb3IgdHJ1bmNhdGlvbgotICogcHVycG9zZXMuICBUaGVyZSBpcyBubyAiaW52YWxp ZCBvZmZzZXQgbnVtYmVyIiBzbyB1c2UgdGhlIG51bWJlcnMgdmVyYmF0aW0uCisgKiBwdXJw b3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIGFuZCBtZW1iZXJz IG5ldmVyIHdyYXAKKyAqIGFyb3VuZCwgc28gdXNlIHRoZSBudW1iZXJzIHZlcmJhdGltLgog ICovCiBzdGF0aWMgYm9vbAogTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzKGludDY0IHBh Z2UxLCBpbnQ2NCBwYWdlMikKIHsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MTsKLQlNdWx0 aVhhY3RPZmZzZXQgb2Zmc2V0MjsKLQotCW9mZnNldDEgPSAoKE11bHRpWGFjdE9mZnNldCkg cGFnZTEpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0Jb2Zmc2V0MiA9ICgoTXVs dGlYYWN0T2Zmc2V0KSBwYWdlMikgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQot CXJldHVybiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwgb2Zmc2V0MikgJiYK LQkJCU11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsCi0JCQkJCQkJCQlvZmZzZXQy ICsgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSAxKSk7CisJcmV0dXJuIHBhZ2UxIDwg cGFnZTI7CiB9CiAKIC8qCkBAIC0zMTY1LDE3ICsyODcxLDYgQEAgTXVsdGlYYWN0SWRQcmVj ZWRlc09yRXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKQog fQogCiAKLS8qCi0gKiBEZWNpZGUgd2hpY2ggb2YgdHdvIG9mZnNldHMgaXMgZWFybGllci4K LSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9m ZnNldCBvZmZzZXQxLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MikKLXsKLQlpbnQzMgkJZGlm ZiA9IChpbnQzMikgKG9mZnNldDEgLSBvZmZzZXQyKTsKLQotCXJldHVybiAoZGlmZiA8IDAp OwotfQotCiAvKgogICogV3JpdGUgYSBUUlVOQ0FURSB4bG9nIHJlY29yZAogICoKQEAgLTMy NjgsNyArMjk2Myw3IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KQogCiAJCWVsb2coREVCVUcxLCAicmVwbGF5aW5nIG11bHRpeGFjdCB0cnVuY2F0aW9uOiAi CiAJCQkgIm9mZnNldHMgWyV1LCAldSksIG9mZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAi LCAlIiBQUkl4NjQgIiksICIKLQkJCSAibWVtYmVycyBbJXUsICV1KSwgbWVtYmVycyBzZWdt ZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCisJCQkgIm1lbWJlcnMgWyUiIFBS SXU2NCAiLCAlIiBQUkl1NjQgIiksIG1lbWJlcnMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAl IiBQUkl4NjQgIikiLAogCQkJIHhscmVjLnN0YXJ0VHJ1bmNPZmYsIHhscmVjLmVuZFRydW5j T2ZmLAogCQkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KHhscmVjLnN0YXJ0VHJ1bmNP ZmYpLAogCQkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KHhscmVjLmVuZFRydW5jT2Zm KSwKQEAgLTMyODMsNyArMjk3OCw3IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQogCQkgKiBBZHZhbmNlIHRoZSBob3Jpem9uIHZhbHVlcywgc28gdGhleSdy ZSBjdXJyZW50IGF0IHRoZSBlbmQgb2YKIAkJICogcmVjb3ZlcnkuCiAJCSAqLwotCQlTZXRN dWx0aVhhY3RJZExpbWl0KHhscmVjLmVuZFRydW5jT2ZmLCB4bHJlYy5vbGRlc3RNdWx0aURC LCBmYWxzZSk7CisJCVNldE11bHRpWGFjdElkTGltaXQoeGxyZWMuZW5kVHJ1bmNPZmYsIHhs cmVjLm9sZGVzdE11bHRpREIpOwogCiAJCVBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbih4bHJl Yy5zdGFydFRydW5jTWVtYiwgeGxyZWMuZW5kVHJ1bmNNZW1iKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IDIyZDBhMmU4YzNhLi5hMDAwYjhiZDUwOSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNTEzOSw3ICs1MTM5LDcgQEAgQm9vdFN0 cmFwWExPRyh1aW50MzIgZGF0YV9jaGVja3N1bV92ZXJzaW9uKQogCQlGdWxsVHJhbnNhY3Rp b25JZEZyb21FcG9jaEFuZFhpZCgwLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOwogCWNo ZWNrUG9pbnQubmV4dE9pZCA9IEZpcnN0R2VuYmtpT2JqZWN0SWQ7CiAJY2hlY2tQb2ludC5u ZXh0TXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOwotCWNoZWNrUG9pbnQubmV4dE11bHRpT2Zm c2V0ID0gMDsKKwljaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCA9IDE7CiAJY2hlY2tQb2lu dC5vbGRlc3RYaWQgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CiAJY2hlY2tQb2ludC5v bGRlc3RYaWREQiA9IFRlbXBsYXRlMURiT2lkOwogCWNoZWNrUG9pbnQub2xkZXN0TXVsdGkg PSBGaXJzdE11bHRpWGFjdElkOwpAQCAtNTE1NSw3ICs1MTU1LDcgQEAgQm9vdFN0cmFwWExP Ryh1aW50MzIgZGF0YV9jaGVja3N1bV92ZXJzaW9uKQogCU11bHRpWGFjdFNldE5leHRNWGFj dChjaGVja1BvaW50Lm5leHRNdWx0aSwgY2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQpOwog CUFkdmFuY2VPbGRlc3RDbG9nWGlkKGNoZWNrUG9pbnQub2xkZXN0WGlkKTsKIAlTZXRUcmFu c2FjdGlvbklkTGltaXQoY2hlY2tQb2ludC5vbGRlc3RYaWQsIGNoZWNrUG9pbnQub2xkZXN0 WGlkREIpOwotCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5vbGRlc3RNdWx0aSwg Y2hlY2tQb2ludC5vbGRlc3RNdWx0aURCLCB0cnVlKTsKKwlTZXRNdWx0aVhhY3RJZExpbWl0 KGNoZWNrUG9pbnQub2xkZXN0TXVsdGksIGNoZWNrUG9pbnQub2xkZXN0TXVsdGlEQik7CiAJ U2V0Q29tbWl0VHNMaW1pdChJbnZhbGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFRyYW5zYWN0 aW9uSWQpOwogCiAJLyogU2V0IHVwIHRoZSBYTE9HIHBhZ2UgaGVhZGVyICovCkBAIC01NjM2 LDcgKzU2MzYsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCU11bHRpWGFjdFNldE5leHRNWGFj dChjaGVja1BvaW50Lm5leHRNdWx0aSwgY2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQpOwog CUFkdmFuY2VPbGRlc3RDbG9nWGlkKGNoZWNrUG9pbnQub2xkZXN0WGlkKTsKIAlTZXRUcmFu c2FjdGlvbklkTGltaXQoY2hlY2tQb2ludC5vbGRlc3RYaWQsIGNoZWNrUG9pbnQub2xkZXN0 WGlkREIpOwotCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5vbGRlc3RNdWx0aSwg Y2hlY2tQb2ludC5vbGRlc3RNdWx0aURCLCB0cnVlKTsKKwlTZXRNdWx0aVhhY3RJZExpbWl0 KGNoZWNrUG9pbnQub2xkZXN0TXVsdGksIGNoZWNrUG9pbnQub2xkZXN0TXVsdGlEQik7CiAJ U2V0Q29tbWl0VHNMaW1pdChjaGVja1BvaW50Lm9sZGVzdENvbW1pdFRzWGlkLAogCQkJCQkg Y2hlY2tQb2ludC5uZXdlc3RDb21taXRUc1hpZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggMjFiOGYxNzliYTAuLjUxZGVhMzQyYTRk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zlcnku YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAt ODg2LDcgKzg4Niw3IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRy b2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJCQkJCQkJIFU2NEZyb21GdWxsVHJh bnNhY3Rpb25JZChjaGVja1BvaW50Lm5leHRYaWQpLAogCQkJCQkJCSBjaGVja1BvaW50Lm5l eHRPaWQpKSk7CiAJZXJlcG9ydChERUJVRzEsCi0JCQkoZXJybXNnX2ludGVybmFsKCJuZXh0 IE11bHRpWGFjdElkOiAldTsgbmV4dCBNdWx0aVhhY3RPZmZzZXQ6ICV1IiwKKwkJCShlcnJt c2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNl dDogJSIgUFJJdTY0LAogCQkJCQkJCSBjaGVja1BvaW50Lm5leHRNdWx0aSwgY2hlY2tQb2lu dC5uZXh0TXVsdGlPZmZzZXQpKSk7CiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJybXNnX2lu dGVybmFsKCJvbGRlc3QgdW5mcm96ZW4gdHJhbnNhY3Rpb24gSUQ6ICV1LCBpbiBkYXRhYmFz ZSAldSIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IGU3ODVkZDU1Y2U1Li43NzgwZWE2 ZWFlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTExNDUsOCArMTE0NSw4IEBAIHZh Y3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJh bXMsCiAKIAkvKgogCSAqIEFsc28gY29tcHV0ZSB0aGUgbXVsdGl4YWN0IGFnZSBmb3Igd2hp Y2ggZnJlZXppbmcgaXMgdXJnZW50LiAgVGhpcyBpcwotCSAqIG5vcm1hbGx5IGF1dG92YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2UgYXJl Ci0JICogc2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFjZS4KKwkgKiBub3JtYWxseSBh dXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlm CisJICogbXVsdGl4YWN0IG1lbWJlcnMgYXJlIGJsb2F0ZWQuCiAJICovCiAJZWZmZWN0aXZl X211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVz aG9sZCgpOwogCkBAIC0xOTcxLDcgKzE5NzEsNyBAQCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFu c2FjdGlvbklkIGZyb3plblhJRCwKIAkgKiBzaWduYWxpbmcgdHdpY2U/CiAJICovCiAJU2V0 VHJhbnNhY3Rpb25JZExpbWl0KGZyb3plblhJRCwgb2xkZXN0eGlkX2RhdG9pZCk7Ci0JU2V0 TXVsdGlYYWN0SWRMaW1pdChtaW5NdWx0aSwgbWlubXVsdGlfZGF0b2lkLCBmYWxzZSk7CisJ U2V0TXVsdGlYYWN0SWRMaW1pdChtaW5NdWx0aSwgbWlubXVsdGlfZGF0b2lkKTsKIAogCUxX TG9ja1JlbGVhc2UoV3JhcExpbWl0c1ZhY3V1bUxvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYwppbmRleCAxYzM4NDg4ZjJjYi4uZjQ4MzBmODk2ZjMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC0xOTM2LDggKzE5MzYsOCBAQCBk b19hdXRvdmFjdXVtKHZvaWQpCiAKIAkvKgogCSAqIENvbXB1dGUgdGhlIG11bHRpeGFjdCBh Z2UgZm9yIHdoaWNoIGZyZWV6aW5nIGlzIHVyZ2VudC4gIFRoaXMgaXMKLQkgKiBub3JtYWxs eSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNz IGlmIHdlIGFyZQotCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIgc3BhY2UuCisJICog bm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkg YmUgbGVzcyBpZgorCSAqIG11bHRpeGFjdCBtZW1iZXJzIGFyZSBibG9hdGVkLgogCSAqLwog CWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhhY3RNZW1iZXJG cmVlemVUaHJlc2hvbGQoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0 YS9wZ19jb250cm9sZGF0YS5jIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9s ZGF0YS5jCmluZGV4IDMwYWQ0NjkxMmUxLi5hNDA2MDMwOWFlMCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdf Y29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwpAQCAtMjcxLDcgKzI3MSw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRD b3B5Lm5leHRPaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0 aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5l eHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zm c2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0 aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9p bnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50 J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQ b2ludENvcHkub2xkZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwv cGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRl eCBhMzFlNzY0M2NmMC4uN2M2YzI3NDFhMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVz ZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0 d2FsLmMKQEAgLTkyLDYgKzkyLDcgQEAgc3RhdGljIHZvaWQgS2lsbEV4aXN0aW5nQXJjaGl2 ZVN0YXR1cyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2 b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQg dXNhZ2Uodm9pZCk7CitzdGF0aWMgdWludDY0IHN0cnRvdTY0X3N0cmljdChjb25zdCBjaGFy ICpzLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0xMjAsNyArMTIx LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCU11bHRpWGFjdElkIHNldF9v bGRlc3RteGlkID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAqZW5kcHRyMjsK LQlpbnQ2NAkJdG1waTY0OwogCWNoYXIJICAgKkRhdGFEaXIgPSBOVUxMOwogCWNoYXIJICAg KmxvZ19mbmFtZSA9IE5VTEw7CiAJaW50CQkJZmQ7CkBAIC0yNjksMTcgKzI2OSwxNCBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ08nOgogCQkJCWVycm5v ID0gMDsKLQkJCQl0bXBpNjQgPSBzdHJ0b2k2NChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJ CXNldF9teG9mZiA9IHN0cnRvdTY0X3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJ CWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAw KQogCQkJCXsKIAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRp b24gJXMiLCAiLU8iKTsKIAkJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJCQkJZXhpdCgxKTsK IAkJCQl9Ci0JCQkJaWYgKHRtcGk2NCA8IDAgfHwgdG1waTY0ID4gKGludDY0KSBNYXhNdWx0 aVhhY3RPZmZzZXQpCi0JCQkJCXBnX2ZhdGFsKCJtdWx0aXRyYW5zYWN0aW9uIG9mZnNldCAo LU8pIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAldSIsIE1heE11bHRpWGFjdE9mZnNldCk7CiAK LQkJCQlzZXRfbXhvZmYgPSAoTXVsdGlYYWN0T2Zmc2V0KSB0bXBpNjQ7CiAJCQkJbXhvZmZf Z2l2ZW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCkBAIC03NDksNyArNzQ2LDcgQEAgUHJpbnRD b250cm9sVmFsdWVzKGJvb2wgZ3Vlc3NlZCkKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2lu dENvcHkubmV4dE9pZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11 bHRpWGFjdElkOiAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5u ZXh0TXVsdGkpOwotCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9m ZnNldDogICV1XG4iKSwKKwlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVs dGlPZmZzZXQ6ICAlIiBQUkl1NjQgIlxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9p bnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50 J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1Bv aW50Q29weS5vbGRlc3RYaWQpOwpAQCAtODI1LDcgKzgyMiw3IEBAIFByaW50TmV3Q29udHJv bFZhbHVlcyh2b2lkKQogCiAJaWYgKG14b2ZmX2dpdmVuKQogCXsKLQkJcHJpbnRmKF8oIk5l eHRNdWx0aU9mZnNldDogICAgICAgICAgICAgICAgICAgICAgJXVcbiIpLAorCQlwcmludGYo XygiTmV4dE11bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1NjQgIlxu IiksCiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlPZmZzZXQp OwogCX0KIApAQCAtMTIxMCwzICsxMjA3LDIyIEBAIHVzYWdlKHZvaWQpCiAJcHJpbnRmKF8o IlxuUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJp bnRmKF8oIiVzIGhvbWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9V UkwpOwogfQorCisvKiBMaWtlIHN0cnRvdTY0KCksIGJ1dCBuZWdhdGl2ZSB2YWx1ZXMgYXJl IG5vdCBhY2NlcHRlZC4gKi8KK3N0YXRpYyB1aW50NjQKK3N0cnRvdTY0X3N0cmljdChjb25z dCBjaGFyICpzLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwkvKiBza2lwIGxlYWRp bmcgd2hpdGVzcGFjZSAqLworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCisJLyog cmVqZWN0IG5lZ2F0aXZlIHZhbHVlcyAqLworCWlmICgqcyA9PSAnLScpCisJeworCQkqZW5k cHRyID0gKGNoYXIgKikgczsKKwkJZXJybm8gPSBFUkFOR0U7CisJCXJldHVybiBVSU5UNjRf TUFYOworCX0KKworCXJldHVybiBzdHJ0b3U2NChzLCBlbmRwdHIsIGJhc2UpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4v cGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKaW5kZXggOTBlY2I4YWZlMTguLjVhMTc1ZTI4 NWQxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCisr KyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKQEAgLTE0NSw3ICsxNDUs NyBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ2ZhaWxzIHdpdGggaW5jb3JyZWN0IC1PIG9w dGlvbicpOwogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX3Jlc2V0d2FsJywgJy1PJyA9 PiAnLTEnLCAkbm9kZS0+ZGF0YV9kaXIgXSwKLQlxci9tdXN0IGJlIGJldHdlZW4gMCBhbmQg NDI5NDk2NzI5NS8sCisJcXIvZXJyb3I6IGludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAt Ty8sCiAJJ2ZhaWxzIHdpdGggLU8gdmFsdWUgLTEnKTsKICMgLS13YWwtc2Vnc2l6ZQogY29t bWFuZF9mYWlsc19saWtlKApAQCAtMjE1LDcgKzIxNSw3IEBAIHB1c2ggQGNtZCwKICAgc3By aW50ZigiJWQsJWQiLCBoZXgoJGZpbGVzWzBdKSA9PSAwID8gMyA6IGhleCgkZmlsZXNbMF0p LCBoZXgoJGZpbGVzWy0xXSkpOwogCiBAZmlsZXMgPSBnZXRfc2xydV9maWxlcygncGdfbXVs dGl4YWN0L29mZnNldHMnKTsKLSRtdWx0ID0gMzIgKiAkYmxja3N6IC8gNDsKKyRtdWx0ID0g MzIgKiAkYmxja3N6IC8gODsKICMgLS1tdWx0aXhhY3QtaWRzIGFyZ3VtZW50IGlzICJuZXcs b2xkIgogcHVzaCBAY21kLAogICAnLS1tdWx0aXhhY3QtaWRzJyA9PiBzcHJpbnRmKCIlZCwl ZCIsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUgYi9zcmMvYmlu L3BnX3VwZ3JhZGUvTWFrZWZpbGUKaW5kZXggNjlmY2Y1OTNjYWUuLjQyOTk1ZDUzYjBiIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9w Z191cGdyYWRlL01ha2VmaWxlCkBAIC0xOCwxMSArMTgsMTQgQEAgT0JKUyA9IFwKIAlmaWxl Lm8gXAogCWZ1bmN0aW9uLm8gXAogCWluZm8ubyBcCisJbXVsdGl4YWN0X25ldy5vIFwKKwlt dWx0aXhhY3Rfb2xkLm8gXAogCW9wdGlvbi5vIFwKIAlwYXJhbGxlbC5vIFwKIAlwZ191cGdy YWRlLm8gXAogCXJlbGZpbGVudW1iZXIubyBcCiAJc2VydmVyLm8gXAorCXNscnVfaW8ubyBc CiAJdGFibGVzcGFjZS5vIFwKIAl0YXNrLm8gXAogCXV0aWwubyBcCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVz b24uYnVpbGQKaW5kZXggYWM5OTJmMGQxNGIuLmZmZjBkYjNiNTYwIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRl L21lc29uLmJ1aWxkCkBAIC04LDExICs4LDE0IEBAIHBnX3VwZ3JhZGVfc291cmNlcyA9IGZp bGVzKAogICAnZmlsZS5jJywKICAgJ2Z1bmN0aW9uLmMnLAogICAnaW5mby5jJywKKyAgJ211 bHRpeGFjdF9uZXcuYycsCisgICdtdWx0aXhhY3Rfb2xkLmMnLAogICAnb3B0aW9uLmMnLAog ICAncGFyYWxsZWwuYycsCiAgICdwZ191cGdyYWRlLmMnLAogICAncmVsZmlsZW51bWJlci5j JywKICAgJ3NlcnZlci5jJywKKyAgJ3NscnVfaW8uYycsCiAgICd0YWJsZXNwYWNlLmMnLAog ICAndGFzay5jJywKICAgJ3V0aWwuYycsCkBAIC00Nyw2ICs1MCw3IEBAIHRlc3RzICs9IHsK ICAgICAgICd0LzAwNF9zdWJzY3JpcHRpb24ucGwnLAogICAgICAgJ3QvMDA1X2NoYXJfc2ln bmVkbmVzcy5wbCcsCiAgICAgICAndC8wMDZfdHJhbnNmZXJfbW9kZXMucGwnLAorICAgICAg J3QvMDA3X211bHRpeGFjdF9jb252ZXJzaW9uLnBsJywKICAgICBdLAogICAgICd0ZXN0X2t3 YXJncyc6IHsncHJpb3JpdHknOiA0MH0sICMgcGdfdXBncmFkZSB0ZXN0cyBhcmUgc2xvdwog ICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYyBi L3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBlZTA4ZjA3YjA3Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwpAQCAtMCwwICsxLDEwMSBAQAor LyoKKyAqIG11bHRpeGFjdF9uZXcuYworICoKKyAqIEZ1bmN0aW9ucyB0byB3cml0ZSBtdWx0 aXhhY3QgU0xSVXMgaW4gdGhlIGN1cnJlbnQgZm9ybWF0IHdpdGggNjQtYml0CisgKiBNdWx0 aVhhY3RPZmZzZXRzLCB1c2VkIHNpbmNlIFBvc3RncmVTUUwgdmVyc2lvbiAxOS4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jCisgKi8KKworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0X2lu dGVybmFsLmgiCisjaW5jbHVkZSAibXVsdGl4YWN0X25ldy5oIgorCitNdWx0aVhhY3RXcml0 ZXIgKgorQWxsb2NNdWx0aVhhY3RXcml0ZShjb25zdCBjaGFyICpwZ2RhdGEsIE11bHRpWGFj dElkIGZpcnN0TXVsdGksCisJCQkJCU11bHRpWGFjdE9mZnNldCBmaXJzdE9mZnNldCkKK3sK KwlNdWx0aVhhY3RXcml0ZXIgKnN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsK KwljaGFyCQlkaXJbTUFYUEdQQVRIXSA9IHswfTsKKworCXBnX3NwcmludGYoZGlyLCAiJXMv cGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQgPSBBbGxv Y1NscnVXcml0ZShkaXIsIGZhbHNlKTsKKwlTbHJ1V3JpdGVTd2l0Y2hQYWdlKHN0YXRlLT5v ZmZzZXQsIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKGZpcnN0TXVsdGkpKTsKKworCXBnX3Nw cmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJlcnMiLCBwZ2RhdGEpOworCXN0YXRl LT5tZW1iZXJzID0gQWxsb2NTbHJ1V3JpdGUoZGlyLCB0cnVlIC8qIHVzZSBsb25nIHNlZ21l bnQgbmFtZXMgKi8gKTsKKwlTbHJ1V3JpdGVTd2l0Y2hQYWdlKHN0YXRlLT5tZW1iZXJzLCBN WE9mZnNldFRvTWVtYmVyUGFnZShmaXJzdE9mZnNldCkpOworCisJcmV0dXJuIHN0YXRlOwor fQorCisvKgorICogV3JpdGUgYSBuZXcgbXVsdGl4YWN0IHdpdGggbWVtYmVycy4KKyAqCisg KiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvcnJlc3BvZGluZyBzZXJ2ZXIgZnVuY3Rp b24sIGhlbmNlIHRoZSBuYW1lLgorICovCit2b2lkCitSZWNvcmROZXdNdWx0aVhhY3QoTXVs dGlYYWN0V3JpdGVyICpzdGF0ZSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKKwkJCQkgICBN dWx0aVhhY3RJZCBtdWx0aSwgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJl cnMpCit7CisJaW50NjQJCXBhZ2VubzsKKwlpbnQ2NAkJcHJldl9wYWdlbm87CisJaW50CQkJ ZW50cnlubzsKKwljaGFyCSAgICpidWY7CisJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisK KwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50cnlubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CisKKwkvKiBTdG9yZSB0aGUgb2Zm c2V0ICovCisJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdl bm8pOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgYnVmOworCW9mZnB0cltlbnRy eW5vXSA9IG9mZnNldDsKKworCS8qIFN0b3JlIHRoZSBtZW1iZXJzICovCisJcHJldl9wYWdl bm8gPSAtMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5tZW1iZXJzOyBpKyssIG9mZnNldCsr KQorCXsKKwkJVHJhbnNhY3Rpb25JZCAqbWVtYmVycHRyOworCQl1aW50MzIJICAgKmZsYWdz cHRyOworCQl1aW50MzIJCWZsYWdzdmFsOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCWZs YWdzb2ZmOworCQlpbnQJCQltZW1iZXJvZmY7CisKKwkJQXNzZXJ0KG1lbWJlcnNbaV0uc3Rh dHVzIDw9IE11bHRpWGFjdFN0YXR1c1VwZGF0ZSk7CisKKwkJcGFnZW5vID0gTVhPZmZzZXRU b01lbWJlclBhZ2Uob2Zmc2V0KTsKKwkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9m ZnNldChvZmZzZXQpOworCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZz ZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCisJ CWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCXsKKwkJCWJ1ZiA9IFNscnVXcml0ZVN3 aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3BhZ2VubyA9IHBh Z2VubzsKKwkJfQorCisJCW1lbWJlcnB0ciA9IChUcmFuc2FjdGlvbklkICopIChidWYgKyBt ZW1iZXJvZmYpOworCisJCSptZW1iZXJwdHIgPSBtZW1iZXJzW2ldLnhpZDsKKworCQlmbGFn c3B0ciA9ICh1aW50MzIgKikgKGJ1ZiArIGZsYWdzb2ZmKTsKKworCQlmbGFnc3ZhbCA9ICpm bGFnc3B0cjsKKwkJZmxhZ3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVS X1hBQ1QpIC0gMSkgPDwgYnNoaWZ0KTsKKwkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNbaV0uc3Rh dHVzIDw8IGJzaGlmdCk7CisJCSpmbGFnc3B0ciA9IGZsYWdzdmFsOworCX0KK30KKwordm9p ZAorRnJlZU11bHRpWGFjdFdyaXRlKE11bHRpWGFjdFdyaXRlciAqc3RhdGUpCit7CisJRnJl ZVNscnVXcml0ZShzdGF0ZS0+b2Zmc2V0KTsKKwlGcmVlU2xydVdyaXRlKHN0YXRlLT5tZW1i ZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBn cmFkZS9tdWx0aXhhY3RfbmV3LmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25l dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOGZlNzYxYjBm NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3 LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIG11bHRpeGFjdF9uZXcuaAorICoKKyAqIENv cHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKKyAqLworI2lmbmRlZiBN VUxUSVhBQ1RfTkVXX0gKKyNkZWZpbmUgTVVMVElYQUNUX05FV19ICisKKyNpbmNsdWRlICJh Y2Nlc3MvbXVsdGl4YWN0LmgiCisKKyNpbmNsdWRlICJzbHJ1X2lvLmgiCisKK3R5cGVkZWYg c3RydWN0IE11bHRpWGFjdFdyaXRlcgoreworCVNscnVTZWdTdGF0ZSAqb2Zmc2V0OworCVNs cnVTZWdTdGF0ZSAqbWVtYmVyczsKK30gTXVsdGlYYWN0V3JpdGVyOworCitleHRlcm4gTXVs dGlYYWN0V3JpdGVyICpBbGxvY011bHRpWGFjdFdyaXRlKGNvbnN0IGNoYXIgKnBnZGF0YSwK KwkJCQkJCQkJCQkJTXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJCQkJCQkJCQkJTXVsdGlY YWN0T2Zmc2V0IGZpcnN0T2Zmc2V0KTsKK2V4dGVybiB2b2lkIFJlY29yZE5ld011bHRpWGFj dChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJ CQkJCSAgIE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCisJCQkJCQkJICAgTXVs dGlYYWN0TWVtYmVyICptZW1iZXJzKTsKK2V4dGVybiB2b2lkIEZyZWVNdWx0aVhhY3RXcml0 ZShNdWx0aVhhY3RXcml0ZXIgKndyaXRlcik7CisKKyNlbmRpZgkJCQkJCQkvKiBNVUxUSVhB Q1RfTkVXX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rf b2xkLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MjllZWViOTNiNgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKQEAgLTAsMCArMSwz MDIgQEAKKy8qCisgKiBtdWx0aXhhY3Rfb2xkLmMKKyAqCisgKiBGdW5jdGlvbnMgdG8gcmVh ZCBwcmUtdjE5IG11bHRpeGFjdCBTTFJVcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3Vw Z3JhZGUvbXVsdGl4YWN0X29sZC5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CisKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisjaW5jbHVkZSAicGdfdXBncmFkZS5o IgorCisvKgorICogTk9URTogYmVsb3cgYXJlIGEgYnVuY2ggb2YgZGVmaW5pdGlvbnMgdGhh dCBhcmUgY29weS1wYXN0ZWQgZnJvbQorICogbXVsdGl4YWN0LmMgZnJvbSB2ZXJzaW9uIDE4 LiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHdlIHVzZSB0aGUgMzItYml0CisgKiBP bGRNdWx0aVhhY3RPZmZzZXQgdHlwZSBpbnN0ZWFkIG9mIE11bHRpWGFjdE9mZnNldCwgd2hp Y2ggYmVjYW1lIDY0IGJpdHMKKyAqIHdpZGUgaW4gdmVyc2lvbiAxOS4KKyAqLworCisvKiBX ZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCBhbmQgOCBieXRlcyBwZXIgYmFzZSBmb3Ig ZWFjaCBwYWdlLiAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxD S1NaIC8gc2l6ZW9mKE9sZE11bHRpWGFjdE9mZnNldCkpCisKK3N0YXRpYyBpbmxpbmUgaW50 NjQKK011bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQoreworCXJl dHVybiBtdWx0aSAvIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQorCitzdGF0aWMg aW5saW5lIGludAorTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KE11bHRpWGFjdElkIG11bHRp KQoreworCXJldHVybiBtdWx0aSAlIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQor CisvKgorICogVGhlIHNpdHVhdGlvbiBmb3IgbWVtYmVycyBpcyBhIGJpdCBtb3JlIGNvbXBs ZXg6IHdlIHN0b3JlIG9uZSBieXRlIG9mCisgKiBhZGRpdGlvbmFsIGZsYWcgYml0cyBmb3Ig ZWFjaCBUcmFuc2FjdGlvbklkLiAgVG8gZG8gdGhpcyB3aXRob3V0IGdldHRpbmcKKyAqIGlu dG8gYWxpZ25tZW50IGlzc3Vlcywgd2Ugc3RvcmUgZm91ciBieXRlcyBvZiBmbGFncywgYW5k IHRoZW4gdGhlCisgKiBjb3JyZXNwb25kaW5nIDQgWGlkcy4gIEVhY2ggc3VjaCA1LXdvcmQg KDIwLWJ5dGUpIHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5kCisgKiBhcmUgc3RvcmVkIGFz IGEgd2hvbGUgaW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBCTENLU1osIHdlIGtlZXAgNDA5 IGdyb3VwcworICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAxMiBieXRlcyBwZXIgcGFnZSwg YnV0IHRoYXQncyBPSyAtLSBzaW1wbGljaXR5IChhbmQKKyAqIHBlcmZvcm1hbmNlKSB0cnVt cHMgc3BhY2UgZWZmaWNpZW5jeSBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgIm9mZnNl dCIgbWFjcm9zIHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90IGFycmF5IGluZGV4ZXMsIHNv CisgKiBhcml0aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAiY2hhciAqIiBwb2ludGVycy4K KyAqLworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUgeGFjdCBmaXRz IGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVAkJCTgK KyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQorI2RlZmluZSBNWEFD VF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFD VCkgLSAxKQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFyZSB0aGVyZSBp biBhIGdyb3VwPyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUAkJ NAorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShNVUxU SVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllU RSkKKy8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAq IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllU RVNfUEVSX0dST1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdF IChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElY QUNUX01FTUJFUlNfUEVSX1BBR0UJXAorCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9Q QUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQorCisvKiBwYWdlIGlu IHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCitzdGF0aWMgaW5saW5lIGludDY0 CitNWE9mZnNldFRvTWVtYmVyUGFnZShPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQorewor CXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKK30KKworLyog TG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBmbGFnIHdvcmQgZm9yIGEg Z2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJT2xkTXVsdGlYYWN0T2Zmc2V0IGdy b3VwID0gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWlu dAkJCWdyb3Vwb25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFH RTsKKwlpbnQJCQlieXRlb2ZmID0gZ3JvdXBvbnBnICogTVVMVElYQUNUX01FTUJFUkdST1VQ X1NJWkU7CisKKwlyZXR1cm4gYnl0ZW9mZjsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zm c2V0IHdpdGhpbiBwYWdlKSBvZiBUcmFuc2FjdGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLwor c3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9NZW1iZXJPZmZzZXQoT2xkTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisKKwlyZXR1cm4gTVhPZmZzZXRU b0ZsYWdzT2Zmc2V0KG9mZnNldCkgKworCQlNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9V UCArCisJCW1lbWJlcl9pbl9ncm91cCAqIHNpemVvZihUcmFuc2FjdGlvbklkKTsKK30KKwor c3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KE9sZE11bHRpWGFj dE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUg TVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWJzaGlmdCA9IG1l bWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUOworCisJcmV0dXJu IGJzaGlmdDsKK30KKworLyoKKyAqIENvbnN0cnVjdCByZWFkZXIgb2Ygb2xkIG11bHRpeGFj dHMuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFs bCBvdGhlciBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworT2xkTXVsdGlYYWN0UmVhZGVy ICoKK0FsbG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsIE11bHRpWGFjdElkIG5l eHRNdWx0aSwKKwkJCQkJICBPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldCkKK3sKKwlP bGRNdWx0aVhhY3RSZWFkZXIgKnN0YXRlID0gc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpz dGF0ZSkpOworCWNoYXIJCWRpcltNQVhQR1BBVEhdID0gezB9OworCisJc3RhdGUtPm5leHRN WGFjdCA9IG5leHRNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRPZmZzZXQ7CisK KwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9vZmZzZXRzIiwgcGdkYXRhKTsK KwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1UmVhZChkaXIsIGZhbHNlKTsKKworCXBnX3Nw cmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJlcnMiLCBwZ2RhdGEpOworCXN0YXRl LT5tZW1iZXJzID0gQWxsb2NTbHJ1UmVhZChkaXIsIGZhbHNlKTsKKworCXJldHVybiBzdGF0 ZTsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIEdl dE11bHRpWGFjdElkTWVtYmVycygpIHNlcnZlcgorICogZnVuY3Rpb246CisgKgorICogLSBP bmx5IHJldHVybiB0aGUgdXBkYXRpbmcgbWVtYmVyLCBpZiBhbnkuICBVcGdyYWRlIG9ubHkg Y2FyZXMgYWJvdXQgdGhlCisgKiAgIHVwZGF0ZXJzLiAgSWYgdGhlcmUgaXMgbm8gdXBkYXRp bmcgbWVtYmVyLCByZXR1cm4gc29tZXdoYXQgYXJiaXRyYXJpbHkKKyAqICAgdGhlIGZpcnN0 IGxvY2tpbmctb25seSBtZW1iZXIsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IHRv IHJlcHJlc2VudAorICogICAibm8gbWVtYmVycyIuCisgKgorICogLSBCZWNhdXNlIHRoZXJl J3Mgbm8gY29uY3VycmVudCBhY3Rpdml0eSwgV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91 dAorICogICBsb2NraW5nIGFuZCBzb21lIGNvcm5lciBjYXNlcy4KKyAqLwordm9pZAorR2V0 T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSwg TXVsdGlYYWN0SWQgbXVsdGksCisJCQkJCQkJICBUcmFuc2FjdGlvbklkICpyZXN1bHQsIE11 bHRpWGFjdFN0YXR1cyAqc3RhdHVzKQoreworCU11bHRpWGFjdElkIG5leHRNWGFjdCwKKwkJ CQluZXh0T2Zmc2V0LAorCQkJCXRtcE1YYWN0OworCWludDY0CQlwYWdlbm8sCisJCQkJcHJl dl9wYWdlbm87CisJaW50CQkJZW50cnlubywKKwkJCQlsZW5ndGg7CisJY2hhcgkgICAqYnVm OworCU9sZE11bHRpWGFjdE9mZnNldCAqb2ZmcHRyLAorCQkJCW9mZnNldDsKKwlUcmFuc2Fj dGlvbklkIHJlc3VsdF94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlib29sCQlyZXN1 bHRfaXN1cGRhdGUgPSBmYWxzZTsKKworCW5leHRNWGFjdCA9IHN0YXRlLT5uZXh0TVhhY3Q7 CisJbmV4dE9mZnNldCA9IHN0YXRlLT5uZXh0T2Zmc2V0OworCisJLyoKKwkgKiBTZWUgR2V0 TXVsdGlYYWN0SWRNZW1iZXJzIGluIFBvc3RncmVTUUwgdjE4IG11bHRpeGFjdC5jLgorCSAq CisJICogRmluZCBvdXQgdGhlIG9mZnNldCBhdCB3aGljaCB3ZSBuZWVkIHRvIHN0YXJ0IHJl YWRpbmcgTXVsdGlYYWN0TWVtYmVycworCSAqIGFuZCB0aGUgbnVtYmVyIG9mIG1lbWJlcnMg aW4gdGhlIG11bHRpeGFjdC4gIFdlIGRldGVybWluZSB0aGUgbGF0dGVyIGFzCisJICogdGhl IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIG11bHRpeGFjdCdzIHN0YXJ0aW5nIG9mZnNldCBh bmQgdGhlIG5leHQKKwkgKiBvbmUncy4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGNvcm5l ciBjYXNlcyB0byB3b3JyeSBhYm91dDoKKwkgKgorCSAqIDEuIFRoaXMgbXVsdGl4YWN0IG1h eSBiZSB0aGUgbGF0ZXN0IG9uZSBjcmVhdGVkLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzCisJ ICogbm8gbmV4dCBvbmUgdG8gbG9vayBhdC4gIEluIHRoaXMgY2FzZSB0aGUgbmV4dE9mZnNl dCB2YWx1ZSB3ZSBqdXN0CisJICogc2F2ZWQgaXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQuCisJ ICoKKwkgKiAyLiAoVGhlIG5leHQgbXVsdGl4YWN0IG1heSBzdGlsbCBiZSBpbiBwcm9jZXNz IG9mIGJlaW5nIGZpbGxlZCBpbi4pCisJICogVGhpcyBjYW5ub3QgaGFwcGVuIGR1cmluZyB1 cGdyYWRlLgorCSAqCisJICogMy4gQmVjYXVzZSBHZXROZXdNdWx0aVhhY3RJZCBpbmNyZW1l bnRzIG9mZnNldCB6ZXJvIHRvIG9mZnNldCBvbmUgdG8KKwkgKiBoYW5kbGUgY2FzZSAjMiwg dGhlcmUgaXMgYW4gYW1iaWd1aXR5IG5lYXIgdGhlIHBvaW50IG9mIG9mZnNldAorCSAqIHdy YXBhcm91bmQuICBJZiB3ZSBzZWUgbmV4dCBtdWx0aXhhY3QncyBvZmZzZXQgaXMgb25lLCBp cyB0aGF0IG91cgorCSAqIG11bHRpeGFjdCdzIGFjdHVhbCBlbmRwb2ludCwgb3IgZGlkIGl0 IGVuZCBhdCB6ZXJvIHdpdGggYSBzdWJzZXF1ZW50CisJICogaW5jcmVtZW50PyAgV2UgaGFu ZGxlIHRoaXMgdXNpbmcgdGhlIGtub3dsZWRnZSB0aGF0IGlmIHRoZSB6ZXJvJ3RoCisJICog bWVtYmVyIHNsb3Qgd2Fzbid0IGZpbGxlZCwgaXQnbGwgY29udGFpbiB6ZXJvLCBhbmQgemVy byBpc24ndCBhIHZhbGlkCisJICogdHJhbnNhY3Rpb24gSUQgc28gaXQgY2FuJ3QgYmUgYSBt dWx0aXhhY3QgbWVtYmVyLiAgVGhlcmVmb3JlLCBpZiB3ZQorCSAqIHJlYWQgYSB6ZXJvIGZy b20gdGhlIG1lbWJlcnMgYXJyYXksIGp1c3QgaWdub3JlIGl0LgorCSAqLworCisJcGFnZW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOworCWVudHJ5bm8gPSBNdWx0aVhh Y3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOworCisJYnVmID0gU2xydVJlYWRTd2l0Y2hQYWdl KHN0YXRlLT5vZmZzZXQsIHBhZ2Vubyk7CisJb2ZmcHRyID0gKE9sZE11bHRpWGFjdE9mZnNl dCAqKSBidWY7CisJb2ZmcHRyICs9IGVudHJ5bm87CisJb2Zmc2V0ID0gKm9mZnB0cjsKKwor CUFzc2VydChvZmZzZXQgIT0gMCk7CisKKwkvKgorCSAqIFVzZSB0aGUgc2FtZSBpbmNyZW1l bnQgcnVsZSBhcyBHZXROZXdNdWx0aVhhY3RJZCgpLCB0aGF0IGlzLCBkb24ndAorCSAqIGhh bmRsZSB3cmFwYXJvdW5kIGV4cGxpY2l0bHkgdW50aWwgbmVlZGVkLgorCSAqLworCXRtcE1Y YWN0ID0gbXVsdGkgKyAxOworCisJaWYgKG5leHRNWGFjdCA9PSB0bXBNWGFjdCkKKwl7CisJ CS8qIENvcm5lciBjYXNlIDE6IHRoZXJlIGlzIG5vIG5leHQgbXVsdGl4YWN0ICovCisJCWxl bmd0aCA9IG5leHRPZmZzZXQgLSBvZmZzZXQ7CisJfQorCWVsc2UKKwl7CisJCU9sZE11bHRp WGFjdE9mZnNldCBuZXh0TVhPZmZzZXQ7CisKKwkJLyogaGFuZGxlIHdyYXBhcm91bmQgaWYg bmVlZGVkICovCisJCWlmICh0bXBNWGFjdCA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCQl0bXBN WGFjdCA9IEZpcnN0TXVsdGlYYWN0SWQ7CisKKwkJcHJldl9wYWdlbm8gPSBwYWdlbm87CisK KwkJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UodG1wTVhhY3QpOworCQllbnRy eW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KHRtcE1YYWN0KTsKKworCQlpZiAocGFn ZW5vICE9IHByZXZfcGFnZW5vKQorCQkJYnVmID0gU2xydVJlYWRTd2l0Y2hQYWdlKHN0YXRl LT5vZmZzZXQsIHBhZ2Vubyk7CisKKwkJb2ZmcHRyID0gKE9sZE11bHRpWGFjdE9mZnNldCAq KSBidWY7CisJCW9mZnB0ciArPSBlbnRyeW5vOworCQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRy OworCisJCS8qCisJCSAqIENvcm5lciBjYXNlIDI6IG5leHQgbXVsdGl4YWN0IGlzIHN0aWxs IGJlaW5nIGZpbGxlZCBpbiwgdGhpcyBjYW5ub3QKKwkJICogaGFwcGVuIGR1cmluZyB1cGdy YWRlLgorCQkgKi8KKwkJQXNzZXJ0KG5leHRNWE9mZnNldCAhPSAwKTsKKworCQlsZW5ndGgg PSBuZXh0TVhPZmZzZXQgLSBvZmZzZXQ7CisJfQorCisJcHJldl9wYWdlbm8gPSAtMTsKKwlm b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBvZmZzZXQrKykKKwl7CisJCVRyYW5z YWN0aW9uSWQgKnhhY3RwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJCWludAkJCWZs YWdzb2ZmOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCW1lbWJlcm9mZjsKKwkJTXVsdGlY YWN0U3RhdHVzIHN0YXR1czsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShv ZmZzZXQpOworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7 CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJeworCQkJYnVmID0gU2xydVJl YWRTd2l0Y2hQYWdlKHN0YXRlLT5tZW1iZXJzLCBwYWdlbm8pOworCQkJcHJldl9wYWdlbm8g PSBwYWdlbm87CisJCX0KKworCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiAr IG1lbWJlcm9mZik7CisJCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQor CQl7CisJCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2Vk IHNsb3QgemVybyAqLworCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJ YnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKwkJZmxhZ3NwdHIg PSAodWludDMyICopIChidWYgKyBmbGFnc29mZik7CisKKwkJc3RhdHVzID0gKCpmbGFnc3B0 ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsKKworCQkvKgorCQkg KiBSZW1lbWJlciB0aGUgdXBkYXRpbmcgWElEIGFtb25nIHRoZSBtZW1iZXJzLCBvciBmaXJz dCBsb2NraW5nIFhJRAorCQkgKiBpZiBubyB1cGRhdGluZyBYSUQuCisJCSAqLworCQlpZiAo SVNVUERBVEVfZnJvbV9teHN0YXR1cyhzdGF0dXMpKQorCQl7CisJCQkvKiBzYW5pdHkgY2hl Y2sgKi8KKwkJCWlmIChyZXN1bHRfaXN1cGRhdGUpCisJCQkJcGdfZmF0YWwoIm11bHRpeGFj dCAldSBoYXMgbW9yZSB0aGFuIG9uZSB1cGRhdGluZyBtZW1iZXIiLAorCQkJCQkJIG11bHRp KTsKKwkJCXJlc3VsdF94aWQgPSAqeGFjdHB0cjsKKwkJCXJlc3VsdF9pc3VwZGF0ZSA9IHRy dWU7CisJCX0KKwkJZWxzZSBpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlc3VsdF94aWQp KQorCQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCX0KKworCS8qIEEgbXVsdGl4aWQgd2l0 aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQocmVzdWx0X3hpZCkpOworCisJKnJlc3VsdCA9IHJlc3VsdF94aWQ7CisJ KnN0YXR1cyA9IHJlc3VsdF9pc3VwZGF0ZSA/IE11bHRpWGFjdFN0YXR1c1VwZGF0ZSA6CisJ CU11bHRpWGFjdFN0YXR1c0ZvcktleVNoYXJlOworfQorCisvKgorICogRnJlZXMgdGhlIG1h bGxvY2VkIHJlYWRlci4KKyAqLwordm9pZAorRnJlZU9sZE11bHRpWGFjdFJlYWRlcihPbGRN dWx0aVhhY3RSZWFkZXIgKnN0YXRlKQoreworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+b2Zmc2V0 KTsKKwlGcmVlU2xydVJlYWQoc3RhdGUtPm1lbWJlcnMpOworCisJcGZyZWUoc3RhdGUpOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaCBiL3Ny Yy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjRmOWUwODZhMWZiCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaApAQCAtMCwwICsxLDM4IEBACisvKgor ICogbXVsdGl4YWN0X29sZC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211 bHRpeGFjdF9vbGQuaAorICovCisjaWZuZGVmIE1VTFRJWEFDVF9PTERfSAorI2RlZmluZSBN VUxUSVhBQ1RfT0xEX0gKKworI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNs dWRlICJzbHJ1X2lvLmgiCisKKy8qCisgKiBNdWx0aVhhY3RPZmZzZXQgY2hhbmdlZCBmcm9t IHVpbnQzMiB0byB1aW50NjQgYmV0d2VlbiB2ZXJzaW9ucyAxOCBhbmQgMTkuCisgKiBPbGRN dWx0aVhhY3RPZmZzZXQgaXMgdXNlZCB0byByZXByZXNlbnQgYSAzMi1iaXQgb2Zmc2V0IGZy b20gdGhlIG9sZAorICogY2x1c3Rlci4KKyAqLwordHlwZWRlZiB1aW50MzIgT2xkTXVsdGlY YWN0T2Zmc2V0OworCit0eXBlZGVmIHN0cnVjdCBPbGRNdWx0aVhhY3RSZWFkZXIKK3sKKwlN dWx0aVhhY3RJZCBuZXh0TVhhY3Q7CisJT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7 CisKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm1lbWJlcnM7Cit9 IE9sZE11bHRpWGFjdFJlYWRlcjsKKworZXh0ZXJuIE9sZE11bHRpWGFjdFJlYWRlciAqQWxs b2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJCSBNdWx0aVhh Y3RJZCBuZXh0TXVsdGksCisJCQkJCQkJCQkJCQkgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRP ZmZzZXQpOworZXh0ZXJuIHZvaWQgR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIoT2xk TXVsdGlYYWN0UmVhZGVyICpzdGF0ZSwKKwkJCQkJCQkJCQkgIE11bHRpWGFjdElkIG11bHRp LAorCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LAorCQkJCQkJCQkJCSAgTXVs dGlYYWN0U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZvaWQgRnJlZU9sZE11bHRpWGFjdFJl YWRlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnJlYWRlcik7CisKKyNlbmRpZgkJCQkJCQkvKiBN VUxUSVhBQ1RfT0xEX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191 cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jCmluZGV4IDQ5MGU5 OGZhMjZmLi5mZjkzN2I5ZTEwNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3Bn X3VwZ3JhZGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jCkBAIC00 OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJj b21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJtdWx0aXhh Y3RfbmV3LmgiCiAjaW5jbHVkZSAicGdfdXBncmFkZS5oIgogCiAvKgpAQCAtNjIsNiArNjQs NyBAQCBzdGF0aWMgdm9pZCBzZXRfbG9jYWxlX2FuZF9lbmNvZGluZyh2b2lkKTsKIHN0YXRp YyB2b2lkIHByZXBhcmVfbmV3X2NsdXN0ZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBwcmVwYXJl X25ld19nbG9iYWxzKHZvaWQpOwogc3RhdGljIHZvaWQgY3JlYXRlX25ld19vYmplY3RzKHZv aWQpOworc3RhdGljIE11bHRpWGFjdE9mZnNldCBjb252ZXJ0X211bHRpeGFjdHMoTXVsdGlY YWN0SWQgZnJvbV9tdWx0aSwgTXVsdGlYYWN0SWQgdG9fbXVsdGkpOwogc3RhdGljIHZvaWQg Y29weV94YWN0X3hsb2dfeGlkKHZvaWQpOwogc3RhdGljIHZvaWQgc2V0X2Zyb3plbnhpZHMo Ym9vbCBtaW5teGlkX29ubHkpOwogc3RhdGljIHZvaWQgbWFrZV9vdXRwdXRkaXJzKGNoYXIg KnBnZGF0YSk7CkBAIC03NjksNiArNzcyLDg4IEBAIGNvcHlfc3ViZGlyX2ZpbGVzKGNvbnN0 IGNoYXIgKm9sZF9zdWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIpCiAJY2hlY2tfb2so KTsKIH0KIAorLyoKKyAqIENvbnZlcnQgcGdfbXVsdGl4YWN0L29mZnNldCBhbmQgL21lbWJl cnMgZnJvbSB0aGUgb2xkIGZvcm1hdCB3aXRoIDMyLWJpdAorICogb2Zmc2V0cy4KKyAqCisg KiBNdWx0aXhpZHMgaW4gdGhlIHJhbmdlIFtmcm9tX211bHRpLCB0b19tdWx0aSkgYXJlIHJl YWQgZnJvbSB0aGUgb2xkIHByZS12MTkKKyAqIGNsdXN0ZXIsIGFuZCB3cml0dGVuIGluIHRo ZSBuZXcgZm9ybWF0LiAgQW4gaW1wb3J0YW50IGVkZ2UgY2FzZSBpcyB0aGF0IGlmCisgKiBm cm9tX211bHRpID09IHRvX211bHRpLCB0aGlzIGluaXRpYWxpemVzIHRoZSBuZXcgZmlsZXMg aW4gdGhlIG5ldyBmb3JtYXQKKyAqIHdpdGhvdXQgdHJ5aW5nIHRvIG9wZW4gYW55IG9sZCBm aWxlcy4gIChXZSByZWx5IG9uIHRoYXQgd2hlbiB1cGdyYWRpbmcgZnJvbQorICogUG9zdGdy ZVNRTCB2ZXJzaW9uIDkuMiBvciBiZWxvdy4pCisgKgorICogUmV0dXJucyB0aGUgbmV3IG5l eHRPZmZzZXQgdmFsdWU7IHRoZSBjYWxsZXIgc2hvdWxkIHNldCBpdCBpbiB0aGUgbmV3Cisg KiBjb250cm9sIGZpbGUuICBUaGUgbmV3IG1lbWJlcnMgYWx3YXlzIHN0YXJ0IGZyb20gb2Zm c2V0IDEsIHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBvZmZzZXQgcmFuZ2UgdXNlZCBpbiB0aGUg b2xkIGNsdXN0ZXIuCisgKi8KK3N0YXRpYyBNdWx0aVhhY3RPZmZzZXQKK2NvbnZlcnRfbXVs dGl4YWN0cyhNdWx0aVhhY3RJZCBmcm9tX211bHRpLCBNdWx0aVhhY3RJZCB0b19tdWx0aSkK K3sKKwlNdWx0aVhhY3RJZCBvbGRlc3RfbXVsdGksCisJCQkJbmV4dF9tdWx0aTsKKwlNdWx0 aVhhY3RXcml0ZXIgKm5ld193cml0ZXI7CisJTXVsdGlYYWN0T2Zmc2V0IG5leHRfb2Zmc2V0 OworCisJLyoKKwkgKiBUaGUgcmFuZ2Ugb2YgdmFsaWQgbXVsdGkgWElEcyBpcyB1bmNoYW5n ZWQgYnkgdGhlIGNvbnZlcnNpb24gKHRoZXkgYXJlCisJICogcmVmZXJlbmNlZCBmcm9tIHRo ZSBoZWFwIHRhYmxlcyksIGJ1dCB0aGUgbWVtYmVycyBTTFJVIGlzIHJld3JpdHRlbiB0bwor CSAqIHN0YXJ0IGZyb20gb2Zmc2V0IDEuCisJICovCisJb2xkZXN0X211bHRpID0gZnJvbV9t dWx0aTsKKwluZXh0X211bHRpID0gdG9fbXVsdGk7CisJbmV4dF9vZmZzZXQgPSAxOworCisJ bmV3X3dyaXRlciA9IEFsbG9jTXVsdGlYYWN0V3JpdGUobmV3X2NsdXN0ZXIucGdkYXRhLAor CQkJCQkJCQkJIG9sZGVzdF9tdWx0aSwgbmV4dF9vZmZzZXQpOworCisJLyoKKwkgKiBDb252 ZXJ0IG9sZCBtdWx0aXhpZHMsIGlmIG5lZWRlZCwgYnkgcmVhZGluZyB0aGVtIG9uZS1ieS1v bmUgZnJvbSB0aGUKKwkgKiBvbGQgY2x1c3Rlci4KKwkgKi8KKwlpZiAodG9fbXVsdGkgIT0g ZnJvbV9tdWx0aSkKKwl7CisJCU9sZE11bHRpWGFjdFJlYWRlciAqb2xkX3JlYWRlcjsKKwor CQlvbGRfcmVhZGVyID0gQWxsb2NPbGRNdWx0aVhhY3RSZWFkKG9sZF9jbHVzdGVyLnBnZGF0 YSwKKwkJCQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVs dGksCisJCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14 b2ZmKTsKKworCQlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xkZXN0X211bHRpOyBtdWx0 aSAhPSBuZXh0X211bHRpOykKKwkJeworCQkJVHJhbnNhY3Rpb25JZCB4aWQ7CisJCQlNdWx0 aVhhY3RTdGF0dXMgc3RhdHVzOworCQkJTXVsdGlYYWN0TWVtYmVyIG1lbWJlcjsKKworCQkJ LyoKKwkJCSAqIFJlYWQgdGhpcyBtdWx0aXhpZCdzIG1lbWJlcnMuICBMb2NraW5nLW9ubHkg WElEcyB0aGF0IG1heSBiZQorCQkJICogcGFydCBvZiBtdWx0aS14aWRzIGRvbid0IG1hdHRl ciBhZnRlciB1cGdyYWRlLCBhcyB0aGVyZSBjYW4gYmUKKwkJCSAqIG5vIHRyYW5zYWN0aW9u cyBydW5uaW5nIGFjcm9zcyB1cGdyYWRlLiAgU28gYXMgYSBzbWFsbAorCQkJICogb3B0aW1p emF0aW9uLCB3ZSBvbmx5IHJlYWQgb25lIG1lbWJlciBmcm9tIGVhY2ggbXVsdGl4aWQ6IHRo ZQorCQkJICogb25lIHVwZGF0aW5nIG9uZSwgb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0ZSwg YXJiaXRyYXJpbHkgdGhlCisJCQkgKiBmaXJzdCBsb2NraW5nIHhpZC4KKwkJCSAqLworCQkJ R2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIob2xkX3JlYWRlciwgbXVsdGksICZ4aWQs ICZzdGF0dXMpOworCisJCQkvKiBXcml0ZSBpdCBvdXQgaW4gbmV3IGZvcm1hdCAqLworCQkJ bWVtYmVyLnhpZCA9IHhpZDsKKwkJCW1lbWJlci5zdGF0dXMgPSBzdGF0dXM7CisJCQlSZWNv cmROZXdNdWx0aVhhY3QobmV3X3dyaXRlciwgbmV4dF9vZmZzZXQsIG11bHRpLCAxLCAmbWVt YmVyKTsKKworCQkJbmV4dF9vZmZzZXQgKz0gMTsKKwkJCW11bHRpKys7CisJCQkvKiBoYW5k bGUgd3JhcGFyb3VuZCAqLworCQkJaWYgKG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJ CQltdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7CisJCX0KKwkJRnJlZU9sZE11bHRpWGFjdFJl YWRlcihvbGRfcmVhZGVyKTsKKwl9CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcyAqLworCUZy ZWVNdWx0aVhhY3RXcml0ZShuZXdfd3JpdGVyKTsKKworCXJldHVybiBuZXh0X29mZnNldDsK K30KKwogc3RhdGljIHZvaWQKIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogewpAQCAtODA3 LDE1ICs4OTIsMTUgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJCQkgIG5ld19jbHVz dGVyLnBnZGF0YSk7CiAJY2hlY2tfb2soKTsKIAotCS8qCi0JICogSWYgdGhlIG9sZCBzZXJ2 ZXIgaXMgYmVmb3JlIHRoZSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgY2hhbmdl Ci0JICogKHNlZSBwZ191cGdyYWRlLmgpIGFuZCB0aGUgbmV3IHNlcnZlciBpcyBhZnRlciwg dGhlbiB3ZSBkb24ndCBjb3B5Ci0JICogcGdfbXVsdGl4YWN0IGZpbGVzLCBidXQgd2UgbmVl ZCB0byByZXNldCBwZ19jb250cm9sIHNvIHRoYXQgdGhlIG5ldwotCSAqIHNlcnZlciBkb2Vz bid0IGF0dGVtcHQgdG8gcmVhZCBtdWx0aXMgb2xkZXIgdGhhbiB0aGUgY3V0b2ZmIHZhbHVl LgotCSAqLwotCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJ WEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgotCQluZXdfY2x1c3Rlci5jb250cm9sZGF0 YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUikKKwkvKiBDb3B5 IG9yIGNvbnZlcnQgcGdfbXVsdGl4YWN0IGZpbGVzICovCisJQXNzZXJ0KG5ld19jbHVzdGVy LmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVS KTsKKwlBc3NlcnQobmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhB Q1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIpOworCWlmIChvbGRfY2x1c3Rlci5jb250 cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZF UikKIAl7CisJCS8qIE5vIGNoYW5nZSBpbiBtdWx0aXhhY3QgZm9ybWF0LCBqdXN0IGNvcHkg dGhlIGZpbGVzICovCisJCU11bHRpWGFjdElkIG5ld19ueHRtdWx0aSA9IG9sZF9jbHVzdGVy LmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aTsKKwkJTXVsdGlYYWN0T2Zmc2V0IG5ld19u eHRteG9mZiA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZjsKKwog CQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4 YWN0L29mZnNldHMiKTsKIAkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9tZW1i ZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CiAKQEAgLTgyNiwzOCArOTExLDY0IEBA IGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCQkgKiBjb3VudGVycyBoZXJlIGFuZCB0aGUg b2xkZXN0IG11bHRpIHByZXNlbnQgb24gc3lzdGVtLgogCQkgKi8KIAkJZXhlY19wcm9nKFVU SUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJICAiXCIlcy9wZ19yZXNl dHdhbFwiIC1PICV1IC1tICV1LCV1IFwiJXNcIiIsCi0JCQkJICBuZXdfY2x1c3Rlci5iaW5k aXIsCi0JCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmYsCi0J CQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJCQkJICAi XCIlcy9wZ19yZXNldHdhbFwiIC1PICUiIFBSSXU2NCAiIC1tICV1LCV1IFwiJXNcIiIsCisJ CQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsIG5ld19ueHRteG9mZiwgbmV3X254dG11bHRpLAog CQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29sZHN0TXVsdGksCiAJCQkJ ICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQljaGVja19vaygpOwogCX0KLQllbHNlIGlmIChu ZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFO R0VfQ0FUX1ZFUikKKwllbHNlCiAJeworCQkvKiBDb252ZXJzaW9uIGlzIG5lZWRlZCAqLwor CQlNdWx0aVhhY3RJZCBueHRtdWx0aTsKKwkJTXVsdGlYYWN0SWQgb2xkc3RNdWx0aTsKKwkJ TXVsdGlYYWN0T2Zmc2V0IG54dG14b2ZmOworCiAJCS8qCi0JCSAqIFJlbW92ZSBvZmZzZXRz LzAwMDAgZmlsZSBjcmVhdGVkIGJ5IGluaXRkYiB0aGF0IG5vIGxvbmdlciBtYXRjaGVzCi0J CSAqIHRoZSBuZXcgbXVsdGkteGlkIHZhbHVlLiAgIm1lbWJlcnMiIHN0YXJ0cyBhdCB6ZXJv IHNvIG5vIG5lZWQgdG8KLQkJICogcmVtb3ZlIGl0LgorCQkgKiBEZXRlcm1pbmUgdGhlIHJh bmdlIG9mIG11bHRpeGFjdHMgdG8gY29udmVydC4KIAkJICovCi0JCXJlbW92ZV9uZXdfc3Vi ZGlyKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIGZhbHNlKTsKKwkJbnh0bXVsdGkgPSBvbGRf Y2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGk7CisJCWlmIChvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZF UikKKwkJCW9sZHN0TXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xk c3RNdWx0aTsKKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSW4gUG9zdGdyZVNRTCA5LjIg YW5kIGJlbG93LCBtdWx0aXRyYW5zYWN0aW9ucyB3ZXJlIG9ubHkgdXNlZAorCQkJICogZm9y IHJvdyBsb2NraW5nLCBhbmQgYXMgc3VjaCBkb24ndCBuZWVkIHRvIGJlIHByZXNlcnZlZCBk dXJpbmcKKwkJCSAqIHVwZ3JhZGUuICBJbiB0aGF0IGNhc2UsIHdlIHV0aWxpemUgY29udmVy dF9tdWx0aXhhY3RzKCkganVzdCB0bworCQkJICogaW5pdGlhbGl6ZSBuZXcsIGVtcHR5IGZp bGVzIGluIHRoZSBuZXcgZm9ybWF0LgorCQkJICoKKwkJCSAqIEl0J3MgaW1wb3J0YW50IHRo YXQgdGhlIG9sZGVzdCBtdWx0aSBpcyBzZXQgdG8gdGhlIGxhdGVzdCB2YWx1ZQorCQkJICog dXNlZCBieSB0aGUgb2xkIHN5c3RlbSwgc28gdGhhdCBtdWx0aXhhY3QuYyByZXR1cm5zIHRo ZSBlbXB0eQorCQkJICogc2V0IGZvciBtdWx0aXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IG9u IGRpc2suCisJCQkgKi8KKwkJCW9sZHN0TXVsdGkgPSBueHRtdWx0aTsKKwkJfQorCQkvKiBo YW5kbGUgd3JhcGFyb3VuZCAqLworCQlpZiAobnh0bXVsdGkgPCBGaXJzdE11bHRpWGFjdElk KQorCQkJbnh0bXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOworCQlpZiAob2xkc3RNdWx0aSA8 IEZpcnN0TXVsdGlYYWN0SWQpCisJCQlvbGRzdE11bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsK IAotCQlwcmVwX3N0YXR1cygiU2V0dGluZyBvbGRlc3QgbXVsdGl4YWN0IElEIGluIG5ldyBj bHVzdGVyIik7CisJCS8qCisJCSAqIFJlbW92ZSB0aGUgZmlsZXMgY3JlYXRlZCBieSBpbml0 ZGIgaW4gdGhlIG5ldyBjbHVzdGVyLgorCQkgKiBjb252ZXJ0X211bHRpeGFjdHMoKSB3aWxs IGNyZWF0ZSBuZXcgb25lcy4KKwkJICovCisJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0 aXhhY3QvbWVtYmVycyIsIGZhbHNlKTsKKwkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRp eGFjdC9vZmZzZXRzIiwgZmFsc2UpOwogCiAJCS8qCi0JCSAqIFdlIGRvbid0IHByZXNlcnZl IGZpbGVzIGluIHRoaXMgY2FzZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlCi0JCSAq IG9sZGVzdCBtdWx0aSBpcyBzZXQgdG8gdGhlIGxhdGVzdCB2YWx1ZSB1c2VkIGJ5IHRoZSBv bGQgc3lzdGVtLCBzbwotCQkgKiB0aGF0IG11bHRpeGFjdC5jIHJldHVybnMgdGhlIGVtcHR5 IHNldCBmb3IgbXVsdGlzIHRoYXQgbWlnaHQgYmUKLQkJICogcHJlc2VudCBvbiBkaXNrLiAg V2Ugc2V0IG5leHQgbXVsdGkgdG8gdGhlIHZhbHVlIGZvbGxvd2luZyB0aGF0OyBpdAotCQkg KiBtaWdodCBlbmQgdXAgd3JhcHBlZCBhcm91bmQgKGkuZS4gMCkgaWYgdGhlIG9sZCBjbHVz dGVyIGhhZAotCQkgKiBuZXh0PU1heE11bHRpWGFjdElkLCBidXQgbXVsdGl4YWN0LmMgY2Fu IGNvcGUgd2l0aCB0aGF0IGp1c3QgZmluZS4KKwkJICogQ3JlYXRlIG5ldyBwZ19tdWx0aXhh Y3QgZmlsZXMsIGNvbnZlcnRpbmcgb2xkIG9uZXMgaWYgbmVlZGVkLgogCQkgKi8KKwkJcHJl cF9zdGF0dXMoIkNvbnZlcnRpbmcgcGdfbXVsdGl4YWN0IGZpbGVzIik7CisJCW54dG14b2Zm ID0gY29udmVydF9tdWx0aXhhY3RzKG9sZHN0TXVsdGksIG54dG11bHRpKTsKKwkJY2hlY2tf b2soKTsKKworCQlwcmVwX3N0YXR1cygiU2V0dGluZyBuZXh0IG11bHRpeGFjdCBJRCBhbmQg b2Zmc2V0IGZvciBuZXcgY2x1c3RlciIpOwogCQlleGVjX3Byb2coVVRJTElUWV9MT0dfRklM RSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKLQkJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLW0gJXUs JXUgXCIlc1wiIiwKKwkJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLU8gJSIgUFJJdTY0ICIg LW0gJXUsJXUgXCIlc1wiIiwKIAkJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwKLQkJCQkgIG9s ZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSArIDEsCi0JCQkJICBvbGRf Y2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJCQkJICBueHRteG9mZiwg bnh0bXVsdGksIG9sZHN0TXVsdGksCiAJCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQlj aGVja19vaygpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdy YWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmluZGV4IGU4NjMzNmY0 YmU5Li5kNWZjNDQ2ZDFhZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3Vw Z3JhZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBAIC0xMTQs NiArMTE0LDEzIEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICAqLwogI2RlZmlu ZSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMxCiAKKy8qCisgKiBN dWx0aVhhY3RPZmZzZXQgd2FzIGNoYW5nZWQgZnJvbSAzMi1iaXQgdG8gNjQtYml0IGluIHZl cnNpb24gMTksIGF0IHRoaXMKKyAqIGNhdGFsb2cgdmVyc2lvbi4gIHBnX211bHRpeGFjdCBm aWxlcyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB3aGVuIHVwZ3JhZGluZworICogYWNyb3NzIHRo aXMgdmVyc2lvbi4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdF X0NBVF9WRVIgOTk5OTk5OTk5CisKIC8qCiAgKiBsYXJnZSBvYmplY3QgY2h1bmsgc2l6ZSBh ZGRlZCB0byBwZ19jb250cm9sZGF0YSwKICAqIGNvbW1pdCA1ZjkzYzM3ODA1ZTc0ODU0ODg0 ODA5MTZiNDU4NWUwOThkM2NjODgzCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUv c2xydV9pby5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDEwMDk0MTg0YmUKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCkBAIC0wLDAgKzEsMjQyIEBACisv KgorICogc2xydV9pby5jCisgKgorICogUm91dGluZXMgZm9yIHJlYWRpbmcgYW5kIHdyaXRp bmcgU0xSVSBmaWxlcyBkdXJpbmcgdXBncmFkZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3Bn X3VwZ3JhZGUvc2xydV9pby5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisK KyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2ZlX21lbXV0aWxzLmgi CisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxl X3V0aWxzLmgiCisjaW5jbHVkZSAicG9ydC9wZ19pb3ZlYy5oIgorI2luY2x1ZGUgInBnX3Vw Z3JhZGUuaCIKKyNpbmNsdWRlICJzbHJ1X2lvLmgiCisKK3N0YXRpYyBTbHJ1U2VnU3RhdGUg KkFsbG9jU2xydVNlZ1N0YXRlKGNvbnN0IGNoYXIgKmRpcik7CitzdGF0aWMgY2hhciAqU2xy dUZpbGVOYW1lKFNscnVTZWdTdGF0ZSAqc3RhdGUsIGludDY0IHNlZ25vKTsKK3N0YXRpYyB2 b2lkIFNscnVGbHVzaChTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIFNscnVTZWdT dGF0ZSAqCitBbGxvY1NscnVTZWdTdGF0ZShjb25zdCBjaGFyICpkaXIpCit7CisJU2xydVNl Z1N0YXRlICpzdGF0ZSA9IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisKKwlzdGF0ZS0+ ZGlyID0gcHN0cmR1cChkaXIpOworCXN0YXRlLT5mbiA9IE5VTEw7CisJc3RhdGUtPmZkID0g LTE7CisJc3RhdGUtPnNlZ25vID0gLTE7CisJc3RhdGUtPnBhZ2VubyA9IDA7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKKy8qIHNpbWlsYXIgdG8gdGhlIGJhY2tlbmQgZnVuY3Rpb24gd2l0 aCB0aGUgc2FtZSBuYW1lICovCitzdGF0aWMgY2hhciAqCitTbHJ1RmlsZU5hbWUoU2xydVNl Z1N0YXRlICpzdGF0ZSwgaW50NjQgc2Vnbm8pCit7CisJaWYgKHN0YXRlLT5sb25nX3NlZ21l bnRfbmFtZXMpCisJeworCQlBc3NlcnQoc2Vnbm8gPj0gMCAmJiBzZWdubyA8PSBJTlQ2NENP TlNUKDB4RkZGRkZGRkZGRkZGRkZGKSk7CisJCXJldHVybiBwc3ByaW50ZigiJXMvJTAxNSIg UFJJWDY0LCBzdGF0ZS0+ZGlyLCBzZWdubyk7CisJfQorCWVsc2UKKwl7CisJCUFzc2VydChz ZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkYpKTsKKwkJcmV0dXJu IHBzcHJpbnRmKCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2lnbmVkIGludCkgc2Vnbm8p OworCX0KK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1IHJlYWRlciBmb3IgZGlyLgorICoKKyAq IFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgcmVh ZCBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xy dVJlYWQoY29uc3QgY2hhciAqZGlyLCBib29sIGxvbmdfc2VnbWVudF9uYW1lcykKK3sKKwlT bHJ1U2VnU3RhdGUgKnN0YXRlID0gQWxsb2NTbHJ1U2VnU3RhdGUoZGlyKTsKKworCXN0YXRl LT53cml0aW5nID0gZmFsc2U7CisJc3RhdGUtPmxvbmdfc2VnbWVudF9uYW1lcyA9IGxvbmdf c2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIE9wZW4gZ2l2 ZW4gcGFnZSBmb3IgcmVhZGluZy4KKyAqCisgKiBSZWFkaW5nIGNhbiBiZSBkb25lIGluIHJh bmRvbSBvcmRlci4KKyAqLworY2hhciAqCitTbHJ1UmVhZFN3aXRjaFBhZ2VTbG93KFNscnVT ZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pCit7CisJaW50NjQJCXNlZ25vOworCisJ QXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8qIHJlYWQgb25seSBtb2RlICovCisKKwlpZiAo c3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1 cm4gc3RhdGUtPmJ1Zi5kYXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOworCWlmIChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3Rh dGUtPnNlZ25vICE9IC0xKQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUt PmZkID0gLTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5V TEw7CisKKwkJCXN0YXRlLT5zZWdubyA9IC0xOworCQl9CisKKwkJLyogT3BlbiBuZXcgc2Vn bWVudCAqLworCQlzdGF0ZS0+Zm4gPSBTbHJ1RmlsZU5hbWUoc3RhdGUsIHNlZ25vKTsKKwkJ aWYgKChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRlLT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlks IDApKSA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVt Iiwgc3RhdGUtPmZuKTsKKwl9CisKKwlzdGF0ZS0+c2Vnbm8gPSBzZWdubzsKKworCXsKKwkJ c3RydWN0IGlvdmVjIGlvdmVjID0geworCQkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJ CQkuaW92X2xlbiA9IEJMQ0tTWiwKKwkJfTsKKwkJb2ZmX3QJCW9mZnNldCA9IChwYWdlbm8g JSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAqIEJMQ0tTWjsKKworCQlpZiAocGdfcHJlYWR2 KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCisJCXN0YXRlLT5w YWdlbm8gPSBwYWdlbm87CisJfQorCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKwor LyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCByZWFkZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1 UmVhZChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCUFzc2VydCghc3RhdGUtPndyaXRpbmcp OwkvKiByZWFkIG9ubHkgbW9kZSAqLworCisJaWYgKHN0YXRlLT5mZCAhPSAtMSkKKwkJY2xv c2Uoc3RhdGUtPmZkKTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KKworLyoKKyAqIENyZWF0ZSBz bHJ1IHdyaXRlciBmb3IgZGlyLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9y eSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgd3JpdGUgY2FsbHMgaW4gdGhpcyBtb2R1bGUuCisg Ki8KK1NscnVTZWdTdGF0ZSAqCitBbGxvY1NscnVXcml0ZShjb25zdCBjaGFyICpkaXIsIGJv b2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxv Y1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndyaXRpbmcgPSB0cnVlOworCXN0YXRl LT5sb25nX3NlZ21lbnRfbmFtZXMgPSBsb25nX3NlZ21lbnRfbmFtZXM7CisKKwlyZXR1cm4g c3RhdGU7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBnaXZlbiBwYWdlIGZvciB3cml0aW5nLgor ICoKKyAqIE5PVEU6IFRoaXMgdXNlcyBPX0VYQ0wgd2hlbiBzdGVwcGluZyB0byBhIG5ldyBz ZWdtZW50LCBzbyB0aGlzIGFzc3VtZXMgdGhhdAorICogZWFjaCBzZWdtZW50IGlzIHdyaXR0 ZW4gaW4gZnVsbCBiZWZvcmUgbW92aW5nIG9uIHRvIG5leHQgb25lLiAgVGhpcworICogbGlt aXRhdGlvbiB3b3VsZCBiZSBlYXN5IHRvIGxpZnQgaWYgbmVlZGVkLCBidXQgaXQgZml0cyB0 aGUgdXNhZ2UgcGF0dGVybiBvZgorICogY3VycmVudCBjYWxsZXJzLgorICovCitjaGFyICoK K1NscnVXcml0ZVN3aXRjaFBhZ2VTbG93KFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBw YWdlbm8pCit7CisJaW50NjQJCXNlZ25vOworCW9mZl90CQlvZmZzZXQ7CisKKwlpZiAoc3Rh dGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4g c3RhdGUtPmJ1Zi5kYXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UOworCW9mZnNldCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAq IEJMQ0tTWjsKKworCVNscnVGbHVzaChzdGF0ZSk7CisJbWVtc2V0KHN0YXRlLT5idWYuZGF0 YSwgMCwgQkxDS1NaKTsKKworCWlmIChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlp ZiAoc3RhdGUtPnNlZ25vICE9IC0xKQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJ c3RhdGUtPmZkID0gLTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5m biA9IE5VTEw7CisKKwkJCXN0YXRlLT5zZWdubyA9IC0xOworCQl9CisKKwkJLyogQ3JlYXRl IHRoZSBzZWdtZW50ICovCisJCXN0YXRlLT5mbiA9IFNscnVGaWxlTmFtZShzdGF0ZSwgc2Vn bm8pOworCQlpZiAoKHN0YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JEV1IgfCBPX0NS RUFUIHwgT19FWENMIHwgUEdfQklOQVJZLAorCQkJCQkJCSAgcGdfZmlsZV9jcmVhdGVfbW9k ZSkpIDwgMCkKKwkJeworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZmlsZSBcIiVz XCI6ICVtIiwgc3RhdGUtPmZuKTsKKwkJfQorCisJCXN0YXRlLT5zZWdubyA9IHNlZ25vOwor CisJCWlmIChvZmZzZXQgPiAwKQorCQl7CisJCQlpZiAocGdfcHdyaXRlX3plcm9zKHN0YXRl LT5mZCwgb2Zmc2V0LCAwKSA8IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBm aWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCQl9CisJfQorCisJc3RhdGUtPnBhZ2Vu byA9IHBhZ2VubzsKKworCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7Cit9CisKK3N0YXRpYyB2 b2lkCitTbHJ1Rmx1c2goU2xydVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW92ZWMg aW92ZWMgPSB7CisJCS5pb3ZfYmFzZSA9ICZzdGF0ZS0+YnVmLAorCQkuaW92X2xlbiA9IEJM Q0tTWiwKKwl9OworCW9mZl90CQlvZmZzZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25vID09IC0x KQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSAoc3RhdGUtPnBhZ2VubyAlIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQpICogQkxDS1NaOworCisJaWYgKHBnX3B3cml0ZXZfd2l0aF9yZXRyeShz dGF0ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKK30KKworLyoKKyAqIEZy ZWVzIHRoZSBtYWxsb2NlZCB3cml0ZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1V3JpdGUoU2xy dVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoc3RhdGUtPndyaXRpbmcpOworCisJU2xy dUZsdXNoKHN0YXRlKTsKKworCWlmIChzdGF0ZS0+ZmQgIT0gLTEpCisJCWNsb3NlKHN0YXRl LT5mZCk7CisJcGdfZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Vw Z3JhZGUvc2xydV9pby5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWM4MGE2NzliNGQKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCkBAIC0wLDAgKzEsNTIg QEAKKy8qCisgKiBzbHJ1X2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUv c2xydV9pby5oCisgKi8KKworI2lmbmRlZiBTTFJVX0lPX0gKKyNkZWZpbmUgU0xSVV9JT19I CisKKy8qCisgKiBTdGF0ZSBmb3IgcmVhZGluZyBvciB3cml0aW5nIGFuIFNMUlUsIHdpdGgg YSBvbmUgcGFnZSBidWZmZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNscnVTZWdTdGF0ZQor eworCWJvb2wJCXdyaXRpbmc7CisJYm9vbAkJbG9uZ19zZWdtZW50X25hbWVzOworCisJY2hh cgkgICAqZGlyOworCWNoYXIJICAgKmZuOworCWludAkJCWZkOworCWludDY0CQlzZWdubzsK Kwl1aW50NjQJCXBhZ2VubzsKKworCVBHQWxpZ25lZEJsb2NrIGJ1ZjsKK30gU2xydVNlZ1N0 YXRlOworCitleHRlcm4gU2xydVNlZ1N0YXRlICpBbGxvY1NscnVSZWFkKGNvbnN0IGNoYXIg KmRpciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpOworZXh0ZXJuIGNoYXIgKlNscnVSZWFk U3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vubyk7Citl eHRlcm4gdm9pZCBGcmVlU2xydVJlYWQoU2xydVNlZ1N0YXRlICpzdGF0ZSk7CisKK3N0YXRp YyBpbmxpbmUgY2hhciAqCitTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0 ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2Vu byA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworCXJldHVy biBTbHJ1UmVhZFN3aXRjaFBhZ2VTbG93KHN0YXRlLCBwYWdlbm8pOworfQorCitleHRlcm4g U2xydVNlZ1N0YXRlICpBbGxvY1NscnVXcml0ZShjb25zdCBjaGFyICpkaXIsIGJvb2wgbG9u Z19zZWdtZW50X25hbWVzKTsKK2V4dGVybiBjaGFyICpTbHJ1V3JpdGVTd2l0Y2hQYWdlU2xv dyhTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIEZy ZWVTbHJ1V3JpdGUoU2xydVNlZ1N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyBpbmxpbmUgY2hh ciAqCitTbHJ1V3JpdGVTd2l0Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBw YWdlbm8pCit7CisJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSAmJiBwYWdlbm8gPT0gc3RhdGUt PnBhZ2VubykKKwkJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKKwlyZXR1cm4gU2xydVdyaXRl U3dpdGNoUGFnZVNsb3coc3RhdGUsIHBhZ2Vubyk7Cit9CisKKyNlbmRpZgkJCQkJCQkvKiBT TFJVX0lPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19tdWx0 aXhhY3RfY29udmVyc2lvbi5wbCBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19tdWx0aXhh Y3RfY29udmVyc2lvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZmU4ZGE5YWRlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUv dC8wMDdfbXVsdGl4YWN0X2NvbnZlcnNpb24ucGwKQEAgLTAsMCArMSwzMjkgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor CisjIFZlcnNpb24gMTkgZXhwYW5kZWQgTXVsdGlYYWN0T2Zmc2V0IGZyb20gMzIgdG8gNjQg Yml0cy4gVXBncmFkaW5nCisjIGFjcm9zcyB0aGF0IHJlcXVpcmVzIHJld3JpdGluZyB0aGUg U0xSVSBmaWxlcyB0byB0aGUgbmV3IGZvcm1hdC4KKyMgVGhpcyBmaWxlIGNvbnRhaW5zIHRl c3RzIGZvciB0aGUgY29udmVyc2lvbi4KKyMKKyMgVG8gcnVuLCBzZXQgJ29sZGluc3RhbGwn IEVOViB2YXJpYWJsZSB0byBwb2ludCB0byBhIHByZS12MTkKKyMgaW5zdGFsbGF0aW9uLiBJ ZiBpdCdzIG5vdCBzZXQsIG9yIGlmIGl0IHBvaW50cyB0byBhIHYxOSBvciBhYm92ZQorIyBp bnN0YWxsYXRpb24sIHRoaXMgc3RpbGwgcGVyZm9ybXMgYSB2ZXJ5IGJhc2ljIHRlc3QsIHVw Z3JhZGluZyBhCisjIGNsdXN0ZXIgd2l0aCBzb21lIG11bHRpeGFjdHMuIEl0J3Mgbm90IHZl cnkgaW50ZXJlc3RpbmcsIGhvd2V2ZXIsCisjIGJlY2F1c2UgdGhlcmUncyBubyBjb252ZXJz aW9uIGludm9sdmVkIGluIHRoYXQgY2FzZS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIE1hdGg6OkJpZ0ludDsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRl c3Q6Ok1vcmU7CisKKyMgVGVtcCBkaXIgZm9yIGEgZHVtcHMuCitteSAkdGVtcGRpciA9IFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCisjIEEgd29ya2xvYWQgdGhhdCBj b25zdW1lcyBtdWx0aXhpZHMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8KKyMgZ2VuZXJh dGUgc29tZSBtdWx0aXhpZHMgaW4gdGhlIG9sZCBjbHVzdGVyLCBzbyB0aGF0IHdlIGNhbiB0 ZXN0CisjIHVwZ3JhZGluZyB0aGVtLiBUaGUgd29ya2xvYWQgaXMgYSBtaXggb2YgS0VZIFNI QVJFIGxvY2tpbmcgcXVlcmllcworIyBhbmQgVVBEQVRFcywgYW5kIGNvbW1pdHMgYW5kIGFi b3J0cy4gSXQgY29uc3VtZXMgYXJvdW5kIDMwMDAKKyMgbXVsdGl4aWRzIHdpdGggMzAwMDAg bWVtYmVycy4gVGhhdCdzIGVub3VnaCB0byBzcGFuIG1vcmUgdGhhbiBvbmUKKyMgbXVsdGl4 aWRzICdvZmZzZXRzJyBwYWdlLCBhbmQgbW9yZSB0aGFuIG9uZSAnbWVtYmVycycgc2VnbWVu dC4KKyMKKyMgVGhlIHdvcmtsb2FkIGxlYXZlcyBiZWhpbmQgYSB0YWJsZSBjYWxsZWQgJ214 b2ZmdGVzdCcgY29udGFpbmluZyBhCisjIHNtYWxsIG51bWJlciBvZiByb3dzIHJlZmVyZW5j aW5nIHNvbWUgb2YgdGhlIGdlbmVyYXRlZCBtdWx0aXhpZHMuCisjCisjIEJlY2F1c2UgdGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdlbmVyYXRlIHRlc3QgZGF0YSBvbiB0aGUgb2xkCisj IGluc3RhbGxhdGlvbiwgaXQgbmVlZHMgdG8gd29yayB3aXRoIG9sZGVyIFBvc3RncmVTUUwg c2VydmVyCisjIHZlcnNpb25zLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNs dXN0ZXIgdG8gY29ubmVjdCB0bywgdGhlIHNlY29uZCBhcmd1bWVudAorIyBpcyBhIGNsdXN0 ZXIgdXNpbmcgdGhlIG5ldyB2ZXJzaW9uLiBXZSBuZWVkIHRoZSAncHNxbCcgYmluYXJ5IGZy b20KKyMgdGhlIG5ldyB2ZXJzaW9uLCB0aGUgbmV3IGNsdXN0ZXIgaXMgb3RoZXJ3aXNlIHVu dXNlZC4gKFdlIG5lZWQgdG8KKyMgdXNlIHRoZSBuZXcgJ3BzcWwnIGJlY2F1c2Ugc29tZSBv ZiB0aGUgbW9yZSBhZHZhbmNlZCBiYWNrZ3JvdW5kIHBzcWwKKyMgcGVybCBtb2R1bGUgZmVh dHVyZXMgZGVwZW5kIG9uIGEgZmFpcmx5IHJlY2VudCBwc3FsIHZlcnNpb24uKQorc3ViIG14 YWN0X3dvcmtsb2FkCit7CisJbXkgJG5vZGUgPSBzaGlmdDsgICAgICAgIyBDbHVzdGVyIHRv IGNvbm5lY3QgdG8KKwlteSAkYmlubm9kZSA9IHNoaWZ0OyAgICAjIFVzZSB0aGUgcHNxbCBi aW5hcnkgZnJvbSB0aGlzIGNsdXN0ZXIKKworCW15ICRjb25uc3RyID0gJG5vZGUtPmNvbm5z dHIoJ3Bvc3RncmVzJyk7CisKKwkkbm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcVsKKwkJQ1JFQVRFIFRBQkxFIG14b2ZmdGVzdCAoaWQgSU5UIFBSSU1B UlkgS0VZLCBuX3VwZGF0ZWQgSU5UKQorCQkgIFdJVEggKEFVVE9WQUNVVU1fRU5BQkxFRD1G QUxTRSk7CisJCUlOU0VSVCBJTlRPIG14b2ZmdGVzdCBTRUxFQ1QgRywgMCBGUk9NIEdFTkVS QVRFX1NFUklFUygxLCA1MCkgRzsKKwldKTsKKworCW15ICRuY2xpZW50cyA9IDIwOworCW15 ICR1cGRhdGVfZXZlcnkgPSAxMzsKKwlteSAkYWJvcnRfZXZlcnkgPSAxMTsKKwlteSBAY29u bmVjdGlvbnMgPSAoKTsKKworCSMgT3BlbiBtdWx0aXBsZSBjb25uZWN0aW9ucyB0byB0aGUg ZGF0YWJhc2UuIFN0YXJ0IGEgdHJhbnNhY3Rpb24KKwkjIGluIGVhY2ggY29ubmVjdGlvbi4K Kwlmb3IgKDAgLi4gJG5jbGllbnRzKQorCXsKKwkJIyBVc2UgdGhlIHBzcWwgYmluYXJ5IGZy b20gdGhlIG5ldyBpbnN0YWxsYXRpb24uIFRoZQorCQkjIEJhY2tncm91bmRQc3FsIGZ1bmN0 aW9uYWxpdHkgZG9lc24ndCB3b3JrIHdpdGggb2xkZXIgcHNxbAorCQkjIHZlcnNpb25zLgor CQlteSAkY29ubiA9ICRiaW5ub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJycsCisJCQljb25uc3Ry ID0+ICRub2RlLT5jb25uc3RyKCdwb3N0Z3JlcycpKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUo IlNFVCBlbmFibGVfc2Vxc2Nhbj1vZmYiKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lO Iik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwkjIFJ1biBxdWVy aWVzIHVzaW5nIGN5Y2xpbmcgdGhyb3VnaCB0aGUgY29ubmVjdGlvbnMgaW4gYQorCSMgcm91 bmQtcm9iaW4gZmFzaGlvbi4gV2Uga2VlcCBhIHRyYW5zYWN0aW9uIG9wZW4gaW4gZWFjaAor CSMgY29ubmVjdGlvbiBhdCBhbGwgdGltZXMsIGFuZCBsb2NrL3VwZGF0ZSB0aGUgcm93cy4g V2l0aCAxMAorCSMgY29ubmVjdGlvbnMsIGVhY2ggU0VMRUNUIEZPUiBLRVkgU0hBUkUgcXVl cnkgZ2VuZXJhdGVzIGEgbmV3CisJIyBtdWx0aXhpZCwgY29udGFpbmluZyB0aGUgMTAgWElE cyBvZiBhbGwgdGhlIHRyYW5zYWN0aW9ucyBydW5uaW5nCisJIyBhdCB0aGUgdGltZS4KKwlm b3IgKG15ICRpID0gMDsgJGkgPCAzMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4gPSAkY29u bmVjdGlvbnNbICRpICUgJG5jbGllbnRzIF07CisKKwkJbXkgJHNxbDsKKwkJaWYgKCRpICUg JGFib3J0X2V2ZXJ5ID09IDApCisJCXsKKwkJCSRzcWwgPSAiQUJPUlQ7ICI7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkkc3FsID0gIkNPTU1JVDsgIjsKKwkJfQorCQkkc3FsIC49ICJCRUdJ TjsgIjsKKworCQlpZiAoJGkgJSAkdXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJCSRzcWwg Lj0gcXFbCisJCQkgIFVQREFURSBteG9mZnRlc3QgU0VUIG5fdXBkYXRlZCA9IG5fdXBkYXRl ZCArIDEgV0hFUkUgaWQgPSAke2l9ICUgNTA7CisJCQldOworCQl9CisJCWVsc2UKKwkJewor CQkJbXkgJHRocmVzaG9sZCA9IGludCgkaSAvIDMwMDAgKiA1MCk7CisJCQkkc3FsIC49IHFx WworCQkJICBzZWxlY3QgY291bnQoKikgZnJvbSAoCisJCQkJU0VMRUNUICogRlJPTSBteG9m ZnRlc3QgV0hFUkUgaWQgPj0gJHRocmVzaG9sZCBGT1IgS0VZIFNIQVJFCisJCQkgICkgYXMg eAorCQkJXTsKKwkJfQorCQkkY29ubi0+cXVlcnlfc2FmZSgkc3FsKTsKKwl9CisKKwlmb3Ig bXkgJGNvbm4gKEBjb25uZWN0aW9ucykKKwl7CisJCSRjb25uLT5xdWl0KCk7CisJfQorCisJ JG5vZGUtPnN0b3A7CisJcmV0dXJuOworfQorCisjIFJlYWQgTmV4dE11bHRpT2Zmc2V0IGZy b20gdGhlIGNvbnRyb2wgZmlsZQorIworIyBOb3RlOiBUaGlzIGlzIHVzZWQgb24gYm90aCB0 aGUgb2xkIGFuZCB0aGUgbmV3IGluc3RhbGxhdGlvbiwgc28gdGhlCisjIGNvbW1hbmQgYXJn dW1lbnRzIGFuZCB0aGUgb3V0cHV0IHBhcnNpbmcgdXNlZCBoZXJlIG11c3Qgd29yayB3aXRo CisjIGFsbCBQb3N0Z3JlU1FMIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgdGVzdC4KK3N1 YiByZWFkX25leHRfbXhvZmYKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCisJbXkgJHBnX2Nv bnRyb2xkYXRhX3BhdGggPSAkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoJ3BnX2NvbnRyb2xk YXRhJyk7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0KKwkgIHJ1bl9jb21tYW5kKFsgJHBn X2NvbnRyb2xkYXRhX3BhdGgsICRub2RlLT5kYXRhX2RpciBdKTsKKwkkc3Rkb3V0ID1+IC9e TGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6XHMqKC4qKSQvbQorCSAgb3Ig ZGllICJjb3VsZCBub3QgcmVhZCBOZXh0TXVsdGlPZmZzZXQgZnJvbSBwZ19jb250cm9sZGF0 YSI7CisJcmV0dXJuICQxOworfQorCisjIFJlc2V0IGEgY2x1c3RlcidzIG9sZGVzdCBtdWx0 aXhhY3Qtb2Zmc2V0IHRvIGdpdmVuIG9mZnNldC4KKyMKKyMgTm90ZTogVGhpcyBpcyB1c2Vk IG9uIGJvdGggdGhlIG9sZCBhbmQgdGhlIG5ldyBpbnN0YWxsYXRpb24sIHNvIHRoZQorIyBj b21tYW5kIGFyZ3VtZW50cyBhbmQgdGhlIG91dHB1dCBwYXJzaW5nIHVzZWQgaGVyZSBtdXN0 IHdvcmsgd2l0aAorIyBhbGwgUG9zdGdyZVNRTCB2ZXJzaW9ucyBzdXBwb3J0ZWQgYnkgdGhl IHRlc3QuCitzdWIgcmVzZXRfbXhvZmZfcHJlX3YxOQoreworCW15ICRub2RlID0gc2hpZnQ7 CisJbXkgJG9mZnNldCA9IHNoaWZ0OworCisJbXkgJHBnX3Jlc2V0d2FsX3BhdGggPSAkbm9k ZS0+aW5zdGFsbGVkX2NvbW1hbmQoJ3BnX3Jlc2V0d2FsJyk7CisJIyBHZXQgYmxvY2sgc2l6 ZQorCW15ICgkb3V0LCAkZXJyKSA9CisJICBydW5fY29tbWFuZChbICRwZ19yZXNldHdhbF9w YXRoLCAnLS1kcnktcnVuJywgJG5vZGUtPmRhdGFfZGlyIF0pOworCSRvdXQgPX4gL15EYXRh YmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRibGNrc3ogPSAkMTsK KwkjIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgaXMgYWx3YXlzIDMyIG9uIHByZS0xOSB2ZXJz aW9uCisJbXkgJHNscnVfcGFnZXNfcGVyX3NlZ21lbnQgPSAzMjsKKworCSMgVmVyaWZ5IHRo YXQgbm8gbXVsdGl4aWRzIGFyZSBjdXJyZW50bHkgaW4gdXNlLiBSZXNldHRpbmcgd291bGQK KwkjIGRlc3Ryb3kgdGhlbS4gKEEgZnJlc2hseSBpbml0aWFsaXplZCBjbHVzdGVyIGhhcyBu byBtdWx0aXhpZHMuKQorCSRvdXQgPX4gL15MYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0 aVhhY3RJZDogKihcZCspJC9tIG9yIGRpZTsKKwlteSAkbmV4dF9teGlkID0gJDE7CisJJG91 dCA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0TXVsdGlYaWQ6ICooXGQrKSQvbSBv ciBkaWU7CisJbXkgJG9sZGVzdF9teGlkID0gJDE7CisJZGllICJjbHVzdGVyIGhhcyBzb21l IG11bHRpeGlkcyBpbiB1c2UiIHVubGVzcyAkbmV4dF9teGlkID09ICRvbGRlc3RfbXhpZDsK KworCSMgUmVzZXQgdG8gbmV3IG9mZnNldCB1c2luZyBwZ19yZXNldHdhbAorCW15IEBjbWQg PSAoCisJCSRwZ19yZXNldHdhbF9wYXRoLAorCQknLS1wZ2RhdGEnID0+ICRub2RlLT5kYXRh X2RpciwKKwkJJy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldCk7CisJY29tbWFuZF9v ayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBwZ19yZXNl dHdhbCBqdXN0IHVwZGF0ZXMgdGhlIGNvbnRyb2wgZmlsZS4gVGhlIGNsdXN0ZXIgd2lsbAor CSMgcmVmdXNlIHRvIHN0YXJ0IHVwLCBpZiB0aGUgU0xSVSBzZWdtZW50IGNvcnJlc3BvbmRp bmcgdG8gdGhlCisJIyBvZmZzZXQgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBhIGR1bW15IHNl Z21lbnQgdGhhdCBjb3ZlcnMgdGhlCisJIyBnaXZlbiBvZmZzZXQsIGZpbGxlZCB3aXRoIHpl cm9zLiBCdXQgZmlyc3QgcmVtb3ZlIGFueSBvbGQKKwkjIHNlZ21lbnRzLgorCXVubGluayBn bG9iICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVsdGl4YWN0L21lbWJlcnMvKiI7CisKKwlt eSAkbXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0g c3ByaW50ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15ICRwYXRoID0gJG5vZGUt PmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisKKwlt eSAkbnVsbF9ibG9jayA9ICJceDAwIiB4ICRibGNrc3o7CisJb3BlbihteSAkZGgsICc+Jywg JHBhdGgpCisJICB8fCBkaWUgImNvdWxkIG5vdCBvcGVuICRwYXRoIGZvciB3cml0aW5nICQh IjsKKwlmb3IgKDAgLi4gJHNscnVfcGFnZXNfcGVyX3NlZ21lbnQpCisJeworCQlwcmludCAk ZGggJG51bGxfYmxvY2s7CisJfQorCWNsb3NlKCRkaCk7Cit9CisKKyMgRHVtcCBjb250ZW50 cyBvZiB0aGUgJ214b2ZmdGVzdCcgdGFibGUsIGNyZWF0ZWQgYnkgbXhhY3Rfd29ya2xvYWQK K3N1YiBnZXRfZHVtcF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9kZSwgJGZpbGVfcHJl Zml4KSA9IEBfOworCisJbXkgJGNvbnRlbnRzID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiU0VMRUNUIGN0aWQsIHhtaW4sIHhtYXgsICogRlJPTSBteG9mZnRlc3QiKTsK KworCW15ICRkdW1wZmlsZSA9ICR0ZW1wZGlyIC4gJy8nIC4gJGZpbGVfcHJlZml4IC4gJy5z cWwnOworCW9wZW4obXkgJGRoLCAnPicsICRkdW1wZmlsZSkKKwkgIHx8IGRpZSAiY291bGQg bm90IG9wZW4gJGR1bXBmaWxlIGZvciB3cml0aW5nICQhIjsKKwlwcmludCAkZGggJGNvbnRl bnRzOworCWNsb3NlKCRkaCk7CisKKwlyZXR1cm4gJGR1bXBmaWxlOworfQorCisjIE1haW4g dGVzdCB3b3JraG9yc2Ugcm91dGluZS4KKyMgRHVtcCBkYXRhIG9uIG9sZCB2ZXJzaW9uLCBy dW4gcGdfdXBncmFkZSwgY29tcGFyZSBkYXRhIGFmdGVyIHVwZ3JhZGUuCitzdWIgdXBncmFk ZV9hbmRfY29tcGFyZQoreworCW15ICR0YWcgPSBzaGlmdDsKKwlteSAkb2xkbm9kZSA9IHNo aWZ0OworCW15ICRuZXdub2RlID0gc2hpZnQ7CisKKwljb21tYW5kX29rKAorCQlbCisJCQkn cGdfdXBncmFkZScsICctLW5vLXN5bmMnLAorCQkJJy0tb2xkLWRhdGFkaXInID0+ICRvbGRu b2RlLT5kYXRhX2RpciwKKwkJCSctLW5ldy1kYXRhZGlyJyA9PiAkbmV3bm9kZS0+ZGF0YV9k aXIsCisJCQknLS1vbGQtYmluZGlyJyA9PiAkb2xkbm9kZS0+Y29uZmlnX2RhdGEoJy0tYmlu ZGlyJyksCisJCQknLS1uZXctYmluZGlyJyA9PiAkbmV3bm9kZS0+Y29uZmlnX2RhdGEoJy0t YmluZGlyJyksCisJCQknLS1zb2NrZXRkaXInID0+ICRuZXdub2RlLT5ob3N0LAorCQkJJy0t b2xkLXBvcnQnID0+ICRvbGRub2RlLT5wb3J0LAorCQkJJy0tbmV3LXBvcnQnID0+ICRuZXdu b2RlLT5wb3J0LAorCQldLAorCQkncnVuIG9mIHBnX3VwZ3JhZGUgZm9yIG5ldyBpbnN0YW5j ZScpOworCisJIyBOb3RlOiB3ZSBkbyB0aGlzICphZnRlciogcnVubmluZyBwZ191cGdyYWRl LCB0byBlbnN1cmUgdGhhdCB3ZQorCSMgZG9uJ3Qgc2V0IGFsbCB0aGUgaGludCBiaXRzIGJl Zm9yZSB1cGdyYWRlIGJ5IGRvaW5nIHRoZSBTRUxFQ1QKKwkjIG9uIHRoZSB0YWJsZS4KKwkk b2xkbm9kZS0+c3RhcnQ7CisJbXkgJG9sZF9kdW1wID0gZ2V0X2R1bXBfZm9yX2NvbXBhcmlz b24oJG9sZG5vZGUsICJvbGRub2RlXyR7dGFnfV9kdW1wIik7CisJJG9sZG5vZGUtPnN0b3A7 CisKKwkkbmV3bm9kZS0+c3RhcnQ7CisJbXkgJG5ld19kdW1wID0gZ2V0X2R1bXBfZm9yX2Nv bXBhcmlzb24oJG5ld25vZGUsICJuZXdub2RlXyR7dGFnfV9kdW1wIik7CisJJG5ld25vZGUt PnN0b3A7CisKKwljb21wYXJlX2ZpbGVzKCRvbGRfZHVtcCwgJG5ld19kdW1wLAorCQknZHVt cCBvdXRwdXRzIGZyb20gb3JpZ2luYWwgYW5kIHJlc3RvcmVkIHJlZ3Jlc3Npb24gZGF0YWJh c2VzIG1hdGNoJyk7Cit9CisKK215ICRvbGRfdmVyc2lvbjsKKworIyBCYXNpYyBzY2VuYXJp bzogQ3JlYXRlIGEgY2x1c3RlciB1c2luZyBvbGQgaW5zdGFsbGF0aW9uLCBydW4KKyMgbXVs dGl4aWQtY3JlYXRpbmcgd29ya2xvYWQgb24gaXQsIHRoZW4gdXBncmFkZS4KKyMKKyMgVGhp cyB3b3JrcyBldmVuIGV2ZW4gaWYgdGhlIG9sZCBhbmQgbmV3IHZlcnNpb24gaXMgdGhlIHNh bWUsCisjIGFsdGhvdWdoIGl0J3Mgbm90IHZlcnkgaW50ZXJlc3RpbmcgYXMgdGhlIGNvbnZl cnNpb24gcm91dGluZXMgb25seQorIyBydW4gd2hlbiB1cGdyYWRpbmcgZnJvbSBhIHByZS12 MTkgY2x1c3Rlci4KK3sKKwlteSAkdGFnID0gJ2Jhc2ljJzsKKwlteSAkb2xkID0KKwkgIFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygiJHt0YWd9X29sZG5vZGUiLAorCQlpbnN0 YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygiJHt0YWd9X25ld25vZGUiKTsKKworCSRvbGQtPmluaXQo ZXh0cmEgPT4gWyctayddKTsKKworCSRvbGRfdmVyc2lvbiA9ICRvbGQtPnBnX3ZlcnNpb247 CisJbm90ZSAib2xkIGluc3RhbGxhdGlvbiBpcyB2ZXJzaW9uICRvbGRfdmVyc2lvblxuIjsK KworCSMgUnVuIHRoZSB3b3JrbG9hZAorCW15ICRzdGFydF9teG9mZiA9IHJlYWRfbmV4dF9t eG9mZigkb2xkKTsKKwlteGFjdF93b3JrbG9hZCgkb2xkLCAkbmV3KTsKKwlteSAkZmluaXNo X214b2ZmID0gcmVhZF9uZXh0X214b2ZmKCRvbGQpOworCisJJG5ldy0+aW5pdDsKKwl1cGdy YWRlX2FuZF9jb21wYXJlKCR0YWcsICRvbGQsICRuZXcpOworCisJbXkgJG5ld19uZXh0X214 b2ZmID0gcmVhZF9uZXh0X214b2ZmKCRuZXcpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFn fVxuIgorCSAgLiAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2Zp bmlzaF9teG9mZn1cbiIKKwkgIC4gIiBuZXdub2RlIG14b2ZmICR7bmV3X25leHRfbXhvZmZ9 XG4iOworfQorCisjIFdyYXBhcm91bmQgc2NlbmFyaW86IFRoaXMgaXMgdGhlIHNhbWUgYXMg dGhlIGJhc2ljIHNjZW5hcmlvLCBidXQgdGhlCisjIG9sZCBjbHVzdGVyIGdvZXMgdGhyb3Vn aCBteG9mZnNldCB3cmFwYXJvdW5kLgorIworIyBUaGlzIHJlcXVpcmVzIHRoZSBvbGQgaW5z dGFsbGF0aW9uIHRvIGJlIHZlcnNpb24gMTkgb2Ygb2xkZXIsCisjIGJlY2F1c2UgdGhlIGhh Y2tzIHdlIHVzZSB0byByZXNldCB0aGUgb2xkIGNsdXN0ZXIgdG8gYSBzdGF0ZSBqdXN0Cisj IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCByZWx5IG9uIHRoZSBwcmUtdjE5IGZpbGUgZm9ybWF0 LiBJbiB2ZXJzaW9uCisjIDE5LCBvZmZzZXRzIG5vIGxvbmdlciB3cmFwIGFyb3VuZCBhbnl3 YXkuCitTS0lQOgoreworCXNraXAKKwkgICJza2lwcGluZyBteG9mZnNldCBjb252ZXJzaW9u IHRlc3RzIGJlY2F1c2UgdXBncmFkaW5nIGZyb20gdGhlIG9sZCB2ZXJzaW9uIGRvZXMgbm90 IHJlcXVpcmUgY29udmVyc2lvbiIKKwkgIGlmICgkb2xkX3ZlcnNpb24gPj0gJzE5ZGV2ZWwn KTsKKworCW15ICR0YWcgPSAnd3JhcGFyb3VuZCc7CisJbXkgJG9sZCA9CisJICBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9vbGRub2RlIiwKKwkJaW5zdGFsbF9w YXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9uZXdub2RlIik7CisKKwkkb2xkLT5pbml0KGV4dHJh ID0+IFsnLWsnXSk7CisKKwkjIFJlc2V0IHRoZSBOZXh0TXVsdGlPZmZzZXQgdmFsdWUgaW4g dGhlICBvbGQgY2x1c3RlciB0byBqdXN0IGJlZm9yZSAzMi1iaXQgd3JhcGFyb3VuZC4KKwly ZXNldF9teG9mZl9wcmVfdjE5KCRvbGQsIDB4RkZGRkVDNzcpOworCisJIyBSdW4gdGhlIHdv cmtsb2FkLiBUaGlzIGNyb3NzZXMgdGhlIHdyYXBhcm91bmQuCisJbXkgJHN0YXJ0X214b2Zm ID0gcmVhZF9uZXh0X214b2ZmKCRvbGQpOworCW14YWN0X3dvcmtsb2FkKCRvbGQsICRuZXcp OworCW15ICRmaW5pc2hfbXhvZmYgPSByZWFkX25leHRfbXhvZmYoJG9sZCk7CisKKwkjIFZl cmlmeSB0aGF0IHdyYXBhcm91bmQgaGFwcGVuZWQuCisJY21wX29rKCRmaW5pc2hfbXhvZmYs ICc8JywgJHN0YXJ0X214b2ZmLAorCQkibXhvZmYgd3JhcHBlZCBhcm91bmQgaW4gb2xkIGNs dXN0ZXIiKTsKKworCSRuZXctPmluaXQ7CisJdXBncmFkZV9hbmRfY29tcGFyZSgkdGFnLCAk b2xkLCAkbmV3KTsKKworCW15ICRuZXdfbmV4dF9teG9mZiA9IHJlYWRfbmV4dF9teG9mZigk bmV3KTsKKworCW5vdGUgIj4+PiBjYXNlICMke3RhZ31cbiIKKwkgIC4gIiBvbGRub2RlIG14 b2ZmIGZyb20gJHtzdGFydF9teG9mZn0gdG8gJHtmaW5pc2hfbXhvZmZ9XG4iCisJICAuICIg bmV3bm9kZSBteG9mZiAke25ld19uZXh0X214b2ZmfVxuIjsKK30KKworZG9uZV90ZXN0aW5n KCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggODJlNGJiOTBkZDUuLjY0MzNmZTE2 MzY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0yOCw4ICsyOCw2IEBACiAKICNk ZWZpbmUgTXVsdGlYYWN0SWRJc1ZhbGlkKG11bHRpKSAoKG11bHRpKSAhPSBJbnZhbGlkTXVs dGlYYWN0SWQpCiAKLSNkZWZpbmUgTWF4TXVsdGlYYWN0T2Zmc2V0CSgoTXVsdGlYYWN0T2Zm c2V0KSAweEZGRkZGRkZGKQotCiAvKgogICogUG9zc2libGUgbXVsdGl4YWN0IGxvY2sgbW9k ZXMgKCJzdGF0dXMiKS4gIFRoZSBmaXJzdCBmb3VyIG1vZGVzIGFyZSBmb3IKICAqIHR1cGxl IGxvY2tzIChGT1IgS0VZIFNIQVJFLCBGT1IgU0hBUkUsIEZPUiBOTyBLRVkgVVBEQVRFLCBG T1IgVVBEQVRFKTsgdGhlCkBAIC0xMTEsNyArMTA5LDcgQEAgZXh0ZXJuIGJvb2wgTXVsdGlY YWN0SWRJc1J1bm5pbmcoTXVsdGlYYWN0SWQgbXVsdGksIGJvb2wgaXNMb2NrT25seSk7CiBl eHRlcm4gdm9pZCBNdWx0aVhhY3RJZFNldE9sZGVzdE1lbWJlcih2b2lkKTsKIGV4dGVybiBp bnQJR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RN ZW1iZXIgKiptZW1iZXJzLAogCQkJCQkJCQkgIGJvb2wgZnJvbV9wZ3VwZ3JhZGUsIGJvb2wg aXNMb2NrT25seSk7Ci1leHRlcm4gYm9vbCBHZXRNdWx0aVhhY3RJbmZvKHVpbnQzMiAqbXVs dGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAorZXh0ZXJuIHZvaWQgR2V0TXVs dGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVy cywKIAkJCQkJCQkgTXVsdGlYYWN0SWQgKm9sZGVzdE11bHRpWGFjdElkLAogCQkJCQkJCSBN dWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCk7CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJ ZFByZWNlZGVzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKTsKQEAg LTEzMSw4ICsxMjksNyBAQCBleHRlcm4gdm9pZCBCb290U3RyYXBNdWx0aVhhY3Qodm9pZCk7 CiBleHRlcm4gdm9pZCBTdGFydHVwTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVHJp bU11bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFNldE11bHRpWGFjdElkTGltaXQoTXVs dGlYYWN0SWQgb2xkZXN0X2RhdG1pbm14aWQsCi0JCQkJCQkJCU9pZCBvbGRlc3RfZGF0b2lk LAotCQkJCQkJCQlib29sIGlzX3N0YXJ0dXApOworCQkJCQkJCQlPaWQgb2xkZXN0X2RhdG9p ZCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0 ZG93biwKIAkJCQkJCQkJCSBNdWx0aVhhY3RJZCAqbmV4dE11bHRpLAogCQkJCQkJCQkJIE11 bHRpWGFjdE9mZnNldCAqbmV4dE11bHRpT2Zmc2V0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211 bHRpeGFjdF9pbnRlcm5hbC5oCmluZGV4IDliNTZkZWFlZjMxLi5jNGRkMWFhMDQ0ZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaApAQCAtMjEsMTcgKzIx LDkgQEAKIC8qCiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4g IEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVzZWQgZXZlcnl3aGVyZSBl bHNlIGluIFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0 cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11bHRp WGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZGRkZG Ri9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0 Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNf UEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0 aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2Vn bWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11 bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCiAgKi8KIAotLyogV2UgbmVlZCBmb3VyIGJ5 dGVzIHBlciBvZmZzZXQgKi8KKy8qIFdlIG5lZWQgOCBieXRlcyBwZXIgb2Zmc2V0ICovCiAj ZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoTXVs dGlYYWN0T2Zmc2V0KSkKIAogc3RhdGljIGlubGluZSBpbnQ2NApAQCAtODAsMTkgKzcyLDYg QEAgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0SWQgbXVsdGkpCiAjZGVm aW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01FTUJFUkdS T1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKIAot LyoKLSAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpcyBub3QgYSBk aXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVtYmVyIDB4RkZGRkZGRkYp LCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11bSBudW1iZXIKLSAq IG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRoZXJlaW4gZG9l cyBub3QgdXNlIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlvdXMgcGFn ZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZGRkZG IG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBz byB0aGUgcGFnZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikK LSAqCi0gKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUg bGFzdCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCi0gKi8KLSNkZWZpbmUgTUFYX01FTUJF UlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgXAotCQkoKHVpbnQzMikgKCgweEZGRkZGRkZGICUg TVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCi0KIC8qIHBhZ2UgaW4gd2hpY2gg YSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KIHN0YXRpYyBpbmxpbmUgaW50NjQKIE1YT2Zm c2V0VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXggY2I4YTM4NjY5YmUuLjEx YjgzYTM0M2NlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgKKysrIGIvc3JjL2luY2x1 ZGUvYy5oCkBAIC02NzAsNyArNjcwLDcgQEAgdHlwZWRlZiB1aW50MzIgU3ViVHJhbnNhY3Rp b25JZDsKIC8qIE11bHRpWGFjdElkIG11c3QgYmUgZXF1aXZhbGVudCB0byBUcmFuc2FjdGlv bklkLCB0byBmaXQgaW4gdF94bWF4ICovCiB0eXBlZGVmIFRyYW5zYWN0aW9uSWQgTXVsdGlY YWN0SWQ7CiAKLXR5cGVkZWYgdWludDMyIE11bHRpWGFjdE9mZnNldDsKK3R5cGVkZWYgdWlu dDY0IE11bHRpWGFjdE9mZnNldDsKIAogdHlwZWRlZiB1aW50MzIgQ29tbWFuZElkOwogCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtIGIv c3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQppbmRleCAzNTQxM2Yx NDAxOS4uMzRmMDdkNTJjZDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNR TC9UZXN0L0NsdXN0ZXIucG0KKysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3Qv Q2x1c3Rlci5wbQpAQCAtMTc5MywxMyArMTc5MywyMCBAQCBzdWIgX2dldF9lbnYKIAlyZXR1 cm4gKCVpbnN0X2Vudik7CiB9CiAKLSMgUHJpdmF0ZSByb3V0aW5lIHRvIGdldCBhbiBpbnN0 YWxsYXRpb24gcGF0aCBxdWFsaWZpZWQgY29tbWFuZC4KLSMKLSMgSVBDOjpSdW4gbWFpbnRh aW5zIGEgY2FjaGUsICVjbWRfY2FjaGUsIG1hcHBpbmcgY29tbWFuZHMgdG8gcGF0aHMuICBU ZXN0cwotIyB3aGljaCB1c2Ugbm9kZXMgc3Bhbm5pbmcgbW9yZSB0aGFuIG9uZSBwb3N0Z3Jl cyBpbnN0YWxsYXRpb24gcGF0aCBuZWVkIHRvCi0jIGF2b2lkIGNvbmZ1c2luZyB3aGljaCBp bnN0YWxsYXRpb24ncyBiaW5hcmllcyBnZXQgcnVuLiAgU2V0dGluZyAkRU5We1BBVEh9IGlz Ci0jIGluc3VmZmljaWVudCwgYXMgSVBDOjpSdW4gZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlm IHRoZSBwYXRoIGhhcyBjaGFuZ2VkIHNpbmNlCi0jIGNhY2hpbmcgYSBjb21tYW5kLgorPXBv ZAorCis9aXRlbSAkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoY21kKQorCitHZXQgYW4gaW5z dGFsbGF0aW9uIHBhdGggcXVhbGlmaWVkIGNvbW1hbmQuCisKK0lQQzo6UnVuIG1haW50YWlu cyBhIGNhY2hlLCAlY21kX2NhY2hlLCBtYXBwaW5nIGNvbW1hbmRzIHRvIHBhdGhzLiAgVGVz dHMKK3doaWNoIHVzZSBub2RlcyBzcGFubmluZyBtb3JlIHRoYW4gb25lIHBvc3RncmVzIGlu c3RhbGxhdGlvbiBwYXRoIG5lZWQgdG8KK2F2b2lkIGNvbmZ1c2luZyB3aGljaCBpbnN0YWxs YXRpb24ncyBiaW5hcmllcyBnZXQgcnVuLiAgU2V0dGluZyAkRU5We1BBVEh9IGlzCitpbnN1 ZmZpY2llbnQsIGFzIElQQzo6UnVuIGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiB0aGUgcGF0 aCBoYXMgY2hhbmdlZCBzaW5jZQorY2FjaGluZyBhIGNvbW1hbmQuCisKKz1jdXQKKwogc3Vi IGluc3RhbGxlZF9jb21tYW5kCiB7CiAJbXkgKCRzZWxmLCAkY21kKSA9IEBfOwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyM2JjZTcyYWU2NC4uZjlkZGQwNmVjMWQgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNzI1LDYgKzE3MjUsNyBAQCBNdWx0 aVhhY3RNZW1iZXIKIE11bHRpWGFjdE9mZnNldAogTXVsdGlYYWN0U3RhdGVEYXRhCiBNdWx0 aVhhY3RTdGF0dXMKK011bHRpWGFjdFdyaXRlcgogTXVsdGlyYW5nZUlPRGF0YQogTXVsdGly YW5nZVBhcnNlU3RhdGUKIE11bHRpcmFuZ2VUeXBlCkBAIC0xODA4LDYgKzE4MDksNyBAQCBP ZmZzZXRWYXJOb2Rlc19jb250ZXh0CiBPaWQKIE9pZE9wdGlvbnMKIE9rZXlzU3RhdGUKK09s ZE11bHRpWGFjdFJlYWRlcgogT2xkVG9OZXdNYXBwaW5nCiBPbGRUb05ld01hcHBpbmdEYXRh CiBPbkNvbW1pdEFjdGlvbgpAQCAtMjgwNCw2ICsyODA2LDcgQEAgU2xydUN0bERhdGEKIFNs cnVFcnJvckNhdXNlCiBTbHJ1UGFnZVN0YXR1cwogU2xydVNjYW5DYWxsYmFjaworU2xydVNl Z1N0YXRlCiBTbHJ1U2hhcmVkCiBTbHJ1U2hhcmVkRGF0YQogU2xydVdyaXRlQWxsCi0tIAoy LjQ3LjMKCg== --------------zhFLpF2wHKNujqyqfWXVcdDI--