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 1vv2wk-000lcs-2G for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 00:40:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vv2wh-0044TA-1E for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 00:40:07 +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 1vv2wg-0044T1-2t for pgsql-hackers@lists.postgresql.org; Wed, 25 Feb 2026 00:40:07 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vv2wc-000000018Zs-0icW for pgsql-hackers@lists.postgresql.org; Wed, 25 Feb 2026 00:40:06 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-437711e9195so4082082f8f.1 for ; Tue, 24 Feb 2026 16:40:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771980002; cv=none; d=google.com; s=arc-20240605; b=TNeqvaVzSa09L3QGVq3HmGML8QcQW+ATSpNmALL7G21GQ0WXE+VbrLy9tI2hLFzDjL mj4eiWulaPdNSdO7NmX3SPBjKHe56eYzN+HPGIxVIVzGaS41MNtGBbXDNeYkI6U0zPRZ OJ/euP8Pww2faun8UPjocbsxnXsbAYx5NdiaVrXemX8IR2iyCjgi6WSAhaqTKvhSfGdx t7Vsk2TAyV/Yb2opYewwxYflXhufphtjL6Xtz2D3D9nbfFqyRdxC0oSU5c+cAh1MithQ zNSlLzThksXVOKZ0IZpOkJMBaO57WyeCbfSK47Nyz9VsG7wh61CF2TwOqFtRR88VUBeD lWGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=pZtYVMVrcIHWKOc67OQAt7w/gYjS3RMwsbqFrHX84TU=; fh=BIlJ+ukK6we2LfacnjxlFDE2O9NzuboXDZPckUfb3ck=; b=Huh/D1Iu5JtUwj+OrV5MENdX9gMtXdtSciWL4lIdxTGQ0uA/E3jeMZodeNF4n5U6YG yvl+v3cJWxXSa9VjabuQZNK1gsD/M9ouxVHkJcY9UTL5wd/ZYJSTv4HRQ/a4CYBcWYIy z6JsgTb4/I9Llt4YdsK6PKKqtXftf/dl8hO8KEKIIKsIbcg4m2ApiWXQLi2JpPhocZFn W1m9As6LygvF1Meyx3aXpwLZpbbcBlKXp5103X4oMKf/I3olTlaLYOxWu9hOcAJjeVxB qPq5p/v9yUi2Q9VAHryidJaMqRBK2heH6lPfT+tZjVAFxiIVIy3xenemSzxNHNjQV1G1 NXuw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771980002; x=1772584802; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pZtYVMVrcIHWKOc67OQAt7w/gYjS3RMwsbqFrHX84TU=; b=l+CxxodrumeC5uFL3dffrwWAcGJSWRl9S+Jiay9NQR5BySp6lqDYu+FjI95gUcHrvs MKXzeaTNkHRl7QWTpIXAaCpdMvtQL38F7t/3bSgV8iprdfrxD+vYnJZsppKOI2iLti2Y hEYyfNQ5dPZ/Qkl3wA7EDG6hyOKCYPRqEPi7PRi6yPHw8ijApGyXa1AZuCHI/HjR607u x8QLyaaBFoXBwQ2/zwGi5VkzHh4PmMHK9H8+QBXP/rKojDvTauP6BzFAZEW+CvDhXyaL wiGb75bkliBfq8avCaNsWY/CWm9SyE5nckHxuLogno+LB3EpJ1MA3Os5dfdjpNBkhUsy sKjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771980002; x=1772584802; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pZtYVMVrcIHWKOc67OQAt7w/gYjS3RMwsbqFrHX84TU=; b=cI7tiVvrGuXXOuy/w+3ohzTntysh/uLxmryTkkvTPPnPObY+Mq5WXvqGFJBYHsTKbl CaJXuuF7TVgxiZqApQr/GC9/LStBFVH4Y8a3JyDYegWASg5mFuIK3kHfHeQb4loYAFaY oGhO1GT5EPL9G2qB4WfBDm1PqzUH3JDj1nIEDw1xCcFvJ/V/QupnW7x+V1OW0jiVEWPr 9tTUmkPpQ0/n9wvlMUUCn6HlSmGCQY7uaIQJxee/WlRQQvFK+JgGfBhOq8Po+f58APNU QNPdQ2FGamSCNHtAjJ+1Zgaj06+rmsuvOmR+PPTp2xm3n15y2a4WF10L+iOF1+rPp996 9WxA== X-Forwarded-Encrypted: i=1; AJvYcCUBYLnIqxSFNvx7agzXFn8PpGGFJJwtkOjoU6ouF7AGzRJTHv7m6oTl+jBttAHvifvKP2IXzLo1ZedUQrCw@lists.postgresql.org X-Gm-Message-State: AOJu0YxOwoTRlaxxkatSD6QgzVjvk6zEynGuYaUtf41aTTzcSMwaHRN2 cq91r//crfk2Eo1ul+uXfdOEDiS/lCwiECQdSELJ5vuyJMOoY5bP8kQXRuis/XOG7XOdTlHgeAR ZV4u6j1rlWrt2eDUf6AJZdtGp5epNq8U= X-Gm-Gg: ATEYQzzn487apiiqd5U978HNhCsFtrpt0dBgRDb/dfbqGG60Q2dLr7gRVHaEamB+EU5 kfhS1VLX3YlAG1+R+LnYOsysGt5M6aWg9YUTAMA6fpsQCDoM00iTk2FAP+8KyM1SuSPDD12qPgT RVJMGcce+ByjkzQljU7qc3tZMKHKQfS1GdrjUMaDkMN6AFjTbRiMct5PQNQAs8yyvmExqF9tc7+ 7vq2fXzATCXF5h1Qy/kai95O0oTctr4b9OS1Gt/acYKppA4Q+scH95kWSqJI4GhSNbve+JsAPWb 347yyGfMfRa7CxuFdK3lvq+N88N3b6ebb2yaaYKyC1jaWX5MK7hLTXcoKMGRrcSutcH0Oer2SA= = X-Received: by 2002:a05:600c:450c:b0:480:4be7:4f53 with SMTP id 5b1f17b1804b1-483a963d656mr244897695e9.31.1771980001546; Tue, 24 Feb 2026 16:40:01 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Wed, 25 Feb 2026 13:39:48 +1300 X-Gm-Features: AaiRm51tF94BqmO6CSesR_whhPuauRdhQWMFjEv0stPGmF6n8BP-yWGtg4PHpRo Message-ID: Subject: Re: More speedups for tuple deformation To: Zsolt Parragi Cc: Andres Freund , John Naylor , Chao Li , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000008ac31f064b9b3e0f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="UTF-8" Thanks for having a look at this. On Wed, 25 Feb 2026 at 07:33, Zsolt Parragi wrote: > + * We expect that 'bits' contains at least one 0 bit somewhere in the mask, > + * not necessarily < natts. > + */ > > Is this precondition really enough? > > Let's say we have 20 attributes, only attribute 20 is NULL > Caller requests natts=8 > > That sets lastByte = 1, loop only checks bits[0], which is 0xFF, exits > with bytenum=1, bits[1] is also 0xFF > > Then we execute > > + res += pg_rightmost_one_pos32(~bits[bytenum]); > > where ~0xFF = 0 I think this works ok in v9, but in v10 I've added a cast so that line becomes: res += pg_rightmost_one_pos32(~((uint32) bits[bytenum])); For the case you describe, 0xFF becomes 0xFFFFFF00 and pg_rightmost_one_pos32() returns 8, the lowest bit of the 2nd byte. > + /* convert the lower 4 bits of null bitmap word into 32 bit int */ > + isnull_8 = (nullbyte & 0xf) * SPREAD_BITS_MULTIPLIER_32; > + > + /* > + * convert the upper 4 bits of null bitmap word into 32 bit int, shift > + * into the upper 32 bit > + */ > + isnull_8 |= ((uint64) ((nullbyte >> 4) * SPREAD_BITS_MULTIPLIER_32)) << 32; > + > + /* mask out all other bits apart from the lowest bit of each byte */ > + isnull_8 &= UINT64CONST(0x0101010101010101); > + memcpy(isnull, &isnull_8, sizeof(uint64)); > > > Won't this mix up column numbers on big-endian systems? Yes, I believe you're right. I've added the following before the memcpy(). #ifdef WORDS_BIGENDIAN /* * Fix byte order on big-endian machines before copying to the array. */ isnull_8 = pg_bswap64(isnull_8); #endif > > Subject: [PATCH v9 1/5] Introduce deform_bench test module > > For benchmaring tuple deformation. > --- > > Typo: should be benchmarking Fixed. > + * firstNonGuaranteedAttr stores the index to info the compact_attrs array for > > to info should be "into"? Also fixed. I've attached a revised set of patches. David --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="US-ASCII"; name="v10-0001-Introduce-deform_bench-test-module.patch" Content-Disposition: attachment; filename="v10-0001-Introduce-deform_bench-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm1b1srg0 RnJvbSBiOWU2ZDBjYmUxOWMyZWE1NTA2ZWRlZjEzZDBhZDk2MGY4MjRlYWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNyBKYW4gMjAyNiAxNTowODowOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDEv NV0gSW50cm9kdWNlIGRlZm9ybV9iZW5jaCB0ZXN0IG1vZHVsZQoKRm9yIGJlbmNobWFya2luZyB0 dXBsZSBkZWZvcm1hdGlvbi4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0 aWdub3JlICAgICAgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZp bGUgICAgICAgIHwgIDIxICsrKysKIC4uLi9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAu c3FsICAgICAgICB8ICAgOCArKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3Jt X2JlbmNoLmMgIHwgMTA3ICsrKysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvZGVmb3JtX2Jl bmNoL2RlZm9ybV9iZW5jaC5jb250cm9sIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL21lc29uLmJ1aWxkICAgICB8ICAyMiArKysrCiBzcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2Jl bmNoLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9y bV9iZW5jaC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVm b3JtX2JlbmNoL2RlZm9ybV9iZW5jaC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmNvbnRyb2wKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9tZXNvbi5idWls ZAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBA CisjIEdlbmVyYXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVj ay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1ZmMwZjdhNTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKQEAgLTAsMCArMSwyMSBAQAorIyBz cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gZGVm b3JtX2JlbmNoCitPQkpTID0gZGVmb3JtX2JlbmNoLm8KKworRVhURU5TSU9OID0gZGVmb3JtX2Jl bmNoCitEQVRBID0gZGVmb3JtX2JlbmNoLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gImRlZm9ybV9i ZW5jaCAtIHR1cGxlIGRlZm9ybSBiZW5jaG1hcmtpbmciCisKK1JFR1JFU1MgPSBkZWZvcm1fYmVu Y2gKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNo ZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5MmI3MWRiYTNiCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAuc3FsCkBA IC0wLDAgKzEsOCBAQAorLyogZGVmb3JtX2JlbmNoLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gZGVmb3JtX2JlbmNoIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlZm9ybV9iZW5jaCh0YWJsZW9p ZCBPaWQsIGF0dG51bSBpbnRbXSkgUkVUVVJOUyBGTE9BVAorQVMgJ01PRFVMRV9QQVRITkFNRScs ICdkZWZvcm1fYmVuY2gnCitMQU5HVUFHRSBDIFZPTEFUSUxFIFNUUklDVDsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjc4MzhmNjM5YmVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKQEAgLTAsMCArMSwxMDcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRlZm9ybV9iZW5jaC5jCisgKgorICogZm9yIGJl bmNobWFya2luZyB0dXBsZSBkZWZvcm1hdGlvbiByb3V0aW5lcworICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2Fy cmF5YWNjZXNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGRlZm9ybV9iZW5jaCk7CisKK0RhdHVtCitkZWZv cm1fYmVuY2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQl0YWJsZW9pZCA9IFBHX0dFVEFS R19PSUQoMCk7CisJQXJyYXlUeXBlICAqYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7 CisJVGFibGVTY2FuRGVzYyBzY2FuOworCVJlbGF0aW9uCXJlbDsKKwlUdXBsZURlc2MJdHVwZGVz YzsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXMgPSBOVUxM OworCWJvb2wJICAgKmVsZW1fbnVsbHMgPSBOVUxMOworCWludAkJCWVsZW1fY291bnQ7CisJaW50 CQkgICAqYXR0bnVtczsKKwljbG9ja190CQlzdGFydCwKKwkJCQllbmQ7CisKKwlyZWwgPSByZWxh dGlvbl9vcGVuKHRhYmxlb2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKHJlbC0+cmRfcmVs LT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygib25seSBo ZWFwIEFNIGlzIHN1cHBvcnRlZCIpKSk7CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCXNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc0J1ZmZlckhl YXBUdXBsZSk7CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIEdldEFjdGl2ZVNu YXBzaG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsKKworCS8qCisJICogVGhlIGFycmF5IGlz IHVzZWQgdG8gYWxsb3cgY2FsbGVycyB0byBkZWZpbmUgaG93IG1hbnkgYXR0cyB0byBkZWZvcm0u CisJICogZS5nOiAnezEsMTB9Jzo6aW50W10gd291bGQgZGVmb3JtIGF0dG51bT0xLCB0aGVuIGlu IGEgMm5kIHBhc3MgZGVmb3JtCisJICogdGhlIHJlbWFpbmRlciB1cCB0byBhdHRudW09MTAuICBQ YXNzaW5nIGFuIGVsZW1lbnQgYXMgTlVMTCBtZWFucyBhbGwKKwkgKiBhdHRudW1zLiAgVGhpcyBh bGxvd3Mgc2ltdWxhdGlvbiBvZiBpbmNyZW1lbnRhbCBkZWZvcm1hdGlvbi4gIEdlbmVyYWxseQor CSAqIGlmIHlvdSdyZSBwYXNzaW5nIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDEgZWxlbWVudCwg dGhlbiB0aGUgYXJyYXkKKwkgKiBzaG91bGQgYmUgaW4gYXNjZW5kaW5nIG9yZGVyLiAgRG9pbmcg c29tZXRoaW5nIGxpa2UgJ3sxMCwxfScgd291bGQgbWVhbgorCSAqIHdlJ3ZlIGFscmVhZHkgZGVm b3JtZWQgMTAgYXR0cmlidXRlcyBhbmQgb24gdGhlIDJuZCBwYXNzIHRoZXJlJ3MKKwkgKiBub3Ro aW5nIHRvIGRvIHNpbmNlIGF0dG51bT0xIHdhcyBhbHJlYWR5IGRlZm9ybWVkIGluIHRoZSBmaXJz dCBwYXNzLgorCSAqCisJICogWW91J2xsIGdldCBhbiBFUlJPUiBpZiB5b3UgcGFzcyBhIG51bWJl ciBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogYXR0cmlidXRlcyBpbiB0aGUgdGFibGUu CisJICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyYXksCisJCQkJCSAgSU5UNE9JRCwKKwkJCQkJ ICBzaXplb2YoaW50MzIpLAorCQkJCQkgIHRydWUsCisJCQkJCSAgJ2knLAorCQkJCQkgICZlbGVt X2RhdHVtcywKKwkJCQkJICAmZWxlbV9udWxscywKKwkJCQkJICAmZWxlbV9jb3VudCk7CisKKwlh dHRudW1zID0gcGFsbG9jX2FycmF5KGludCwgZWxlbV9jb3VudCk7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGVsZW1fY291bnQ7IGkrKykKKwl7CisJCS8qIE1ha2UgYSBOVUxMIGVsZW1lbnQgbWVh biBhbGwgYXR0cmlidXRlcyAqLworCQlpZiAoZWxlbV9udWxsc1tpXSkKKwkJCWF0dG51bXNbaV0g PSB0dXBkZXNjLT5uYXR0czsKKwkJZWxzZQorCQkJYXR0bnVtc1tpXSA9IERhdHVtR2V0SW50MzIo ZWxlbV9kYXR1bXNbaV0pOworCX0KKworCXN0YXJ0ID0gY2xvY2soKTsKKworCXdoaWxlIChoZWFw X2dldG5leHRzbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwl7CisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogRGVmb3JtIGluIHN0YWdlcyBhY2NvcmRpbmcg dG8gdGhlIGF0dG51bXMgYXJyYXkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtX2NvdW50 OyBpKyspCisJCQlzbG90X2dldHNvbWVhdHRycyhzbG90LCBhdHRudW1zW2ldKTsKKwl9CisKKwll bmQgPSBjbG9jaygpOworCisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwl0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCisJLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBydW4gdGhl IHRlc3QgKi8KKwlQR19SRVRVUk5fRkxPQVQ4KChkb3VibGUpIChlbmQgLSBzdGFydCkgLyAoQ0xP Q0tTX1BFUl9TRUMgLyAxMDAwKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2Rl Zm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5hMjAyM2Y5ZDczOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorIyBk ZWZvcm1fYmVuY2ggZXh0ZW5zaW9uCitjb21tZW50ID0gJ2Z1bmN0aW9ucyBmb3IgYmVuY2htYXJr aW5nIHR1cGxlIGRlZm9ybWF0aW9uJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9w YXRobmFtZSA9ICckbGliZGlyL2RlZm9ybV9iZW5jaCcKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvZGVmb3JtX2JlbmNoL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjgyMDQ5NTg1MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2RlZm9ybV9iZW5jaF9zb3Vy Y2VzID0gZmlsZXMoCisgICdkZWZvcm1fYmVuY2guYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09 ICd3aW5kb3dzJworICBkZWZvcm1fYmVuY2hfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mo d2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ2RlZm9ybV9iZW5jaCcs CisgICAgJy0tRklMRURFU0MnLCAnZGVmb3JtX2JlbmNoIC0gYmVuY2htYXJraW5nIHR1cGxlIGRl Zm9ybWF0aW9uJyxdKQorZW5kaWYKKworZGVmb3JtX2JlbmNoID0gc2hhcmVkX21vZHVsZSgnZGVm b3JtX2JlbmNoJywKKyAgZGVmb3JtX2JlbmNoX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9t b2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IGRlZm9ybV9iZW5jaAorCit0ZXN0X2lu c3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ2RlZm9ybV9iZW5jaC0tMS4wLnNxbCcsCisgICdkZWZv cm1fYmVuY2guY29udHJvbCcsCispCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCAyNjM0YTUxOTkzNS4u ZWYyYjBhZjQ1ODEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogc3ViZGly KCdicmluJykKIHN1YmRpcignY29tbWl0X3RzJykKK3N1YmRpcignZGVmb3JtX2JlbmNoJykKIHN1 YmRpcignZGVsYXlfZXhlY3V0aW9uJykKIHN1YmRpcignZHVtbXlfaW5kZXhfYW0nKQogc3ViZGly KCdkdW1teV9zZWNsYWJlbCcpCi0tIAoyLjUxLjAKCg== --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="US-ASCII"; name="v10-0002-Add-empty-TupleDescFinalize-function.patch" Content-Disposition: attachment; filename="v10-0002-Add-empty-TupleDescFinalize-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm1b1vj01 RnJvbSAwNGRlMzBiZGM4ODMzMTQ4NTEzZmUwN2EwYjljN2ViMWUwNmM2YjgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxNTo0MTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDIv NV0gQWRkIGVtcHR5IFR1cGxlRGVzY0ZpbmFsaXplKCkgZnVuY3Rpb24KCkN1cnJlbnRseSBkb2Vz IG5vdGhpbmcsIGJ1dCB3aWxsIGluIGEgZnV0dXJlIGNvbW1pdC4KLS0tCiBjb250cmliL2RibGlu ay9kYmxpbmsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysrCiBjb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgICAgICAgfCAgMiArKwogY29u dHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyAgICAgICAgICAgICAgIHwgIDIgKysK IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyAgICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jICAgICAgICAgICAgICAgICB8 IDEzICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMg ICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dmdW5jcy5jICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwX2NvcHkuYyAgICAgICAgICAgICAgICB8ICAzICsrKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgICAg IHwgIDQgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jICAgICAgICAgICAg ICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAg ICAgICAgICAgICAgICB8ICA0ICsrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlv bnNjYW4uYyAgICAgICAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVs YXRpb24uYyAgICAgICAgICAgICAgICAgfCAgNCArKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMgICAgICAgICAgICAgICAgICAgfCAgMiArKwogLi4uL3JlcGxpY2F0aW9uL2xp YnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIHwgIDEgKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgICAgICAgICAgIHwgIDUgKysrKysKIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hY2wuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgICAgICAgICB8ICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jICAgICAgICAgICAgICAgICB8 ICA1ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYyAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAg ICAgICAgICAgfCAgOCArKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMg ICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19mdW5jcy5jICAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogc3JjL2luY2x1ZGUvYWNjZXNz L3R1cGRlc2MuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL3BsL3BscGdzcWwv c3JjL3BsX2NvbXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIC4uLi90ZXN0X2N1 c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jICAgICB8ICAxICsKIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMgICAgICB8ICAxICsKIDM5IGZp bGVzIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMgYi9jb250cmliL2RibGluay9kYmxpbmsuYwppbmRl eCAyNDk4ZDgwYzhlNy4uNDAzODk1MGE2ZWYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZGJsaW5rL2Ri bGluay5jCisrKyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC04ODEsNiArODgxLDcgQEAg bWF0ZXJpYWxpemVSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBHY29ubiAqY29ubiwg UEdyZXN1bHQgKnJlcykKIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAog CQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJbnR1cGxlcyA9IDE7CiAJCW5maWVsZHMgPSAxOwogCX0KQEAgLTEwNDQsNiArMTA0NSw3IEBA IG1hdGVyaWFsaXplUXVlcnlSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQl0dXBk ZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAogCQkJCQkJCSAgIFRFWFRPSUQsIC0x LCAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJYXR0aW5tZXRhID0gVHVw bGVEZXNjR2V0QXR0SW5NZXRhZGF0YSh0dXBkZXNjKTsKIAogCQkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhyc2luZm8tPmVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnkp OwpAQCAtMTUyOSw2ICsxNTMxLDggQEAgZGJsaW5rX2dldF9wa2V5KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgImNvbG5hbWUi LAogCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOworCiAJCS8qCiAJCSAqIEdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0 ZXIgdG8gcHJvZHVjZSB0dXBsZXMgZnJvbSByYXcKIAkJICogQyBzdHJpbmdzCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggODliODY4NTUyNDMu LmE2YjRmYjUyNTJiIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jCkBAIC0xNzQsNiArMTc0LDcgQEAgcGdfYnVmZmVyY2FjaGVfcGFnZXMoUEdfRlVO Q1RJT05fQVJHUykKIAkJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSA5LCAicGlubmluZ19iYWNrZW5kcyIsCiAJCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZjdHgtPnR1cGRlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBsZWRlc2MpOwogCiAJCS8qIEFsbG9jYXRlIE5CdWZmZXJzIHdvcnRoIG9mIEJ1 ZmZlckNhY2hlUGFnZXNSZWMgcmVjb3Jkcy4gKi8KQEAgLTQ0Miw2ICs0NDMsNyBAQCBwZ19idWZm ZXJjYWNoZV9vc19wYWdlc19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBp bmNsdWRlX251bWEpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSAzLCAibnVtYV9ub2RlIiwKIAkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURl c2NGaW5hbGl6ZSh0dXBsZWRlc2MpOwogCQlmY3R4LT50dXBkZXNjID0gQmxlc3NUdXBsZURlc2Mo dHVwbGVkZXNjKTsKIAkJZmN0eC0+aW5jbHVkZV9udW1hID0gaW5jbHVkZV9udW1hOwogCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jIGIvY29udHJpYi9w Z192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwppbmRleCA5YmMzYTc4NGJmNy4uZGZhYjBiNjRj ZjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMKKysr IGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwpAQCAtNDY5LDYgKzQ2OSw4 IEBAIHBnX3Zpc2liaWxpdHlfdHVwZGVzYyhib29sIGluY2x1ZGVfYmxrbm8sIGJvb2wgaW5jbHVk ZV9wZCkKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsICsrYSwgInBkX2FsbF92aXNpYmxl IiwgQk9PTE9JRCwgLTEsIDApOwogCUFzc2VydChhID09IG1heGF0dHIpOwogCisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CisKIAlyZXR1cm4gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA2OWMyMzNjNjJlYi4uNzQy YWMwODlhMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTg0LDYgKzg0 LDcgQEAgYnJ0dXBsZV9kaXNrX3R1cGRlc2MoQnJpbkRlc2MgKmJyZGVzYykKIAogCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJYnJkZXNjLT5iZF9kaXNrdGRlc2MgPSB0dXBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYwppbmRleCBiNjlkMTBmMGE0NS4uMjEzNzM4NWE4MzMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vdHVwZGVzYy5jCkBAIC0yMjEsNiArMjIxLDkgQEAgQ3JlYXRlVHVwbGVEZXNj KGludCBuYXR0cywgRm9ybV9wZ19hdHRyaWJ1dGUgKmF0dHJzKQogCQltZW1jcHkoVHVwbGVEZXNj QXR0cihkZXNjLCBpKSwgYXR0cnNbaV0sIEFUVFJJQlVURV9GSVhFRF9QQVJUX1NJWkUpOwogCQlw b3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShkZXNjLCBpKTsKIAl9CisKKwlUdXBsZURlc2NGaW5h bGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0yNjUsNiArMjY4LDggQEAgQ3Jl YXRlVHVwbGVEZXNjQ29weShUdXBsZURlc2MgdHVwZGVzYykKIAlkZXNjLT50ZHR5cGVpZCA9IHR1 cGRlc2MtPnRkdHlwZWlkOwogCWRlc2MtPnRkdHlwbW9kID0gdHVwZGVzYy0+dGR0eXBtb2Q7CiAK KwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0zMTEs NiArMzE2LDggQEAgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURlc2MgdHVwZGVz YywgaW50IG5hdHRzKQogCWRlc2MtPnRkdHlwZWlkID0gdHVwZGVzYy0+dGR0eXBlaWQ7CiAJZGVz Yy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRl c2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTM5Niw2ICs0MDMsOCBAQCBDcmVhdGVUdXBs ZURlc2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKQogCWRlc2MtPnRkdHlwZWlkID0gdHVw ZGVzYy0+dGR0eXBlaWQ7CiAJZGVzYy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAor CVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQzOCw2 ICs0NDcsOCBAQCBUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAJ ICogc291cmNlJ3MgcmVmY291bnQgd291bGQgYmUgd3JvbmcgaW4gYW55IGNhc2UuKQogCSAqLwog CWRzdC0+dGRyZWZjb3VudCA9IC0xOworCisJVHVwbGVEZXNjRmluYWxpemUoZHN0KTsKIH0KIAog LyoKQEAgLTEwNjUsNiArMTA3Niw4IEBAIEJ1aWxkRGVzY0Zyb21MaXN0cyhjb25zdCBMaXN0ICpu YW1lcywgY29uc3QgTGlzdCAqdHlwZXMsIGNvbnN0IExpc3QgKnR5cG1vZHMsIGNvCiAJCVR1cGxl RGVzY0luaXRFbnRyeUNvbGxhdGlvbihkZXNjLCBhdHRudW0sIGF0dGNvbGxhdGlvbik7CiAJfQog CisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwppbmRleCBmZjkyNzI3OWNjMy4uZmU3Yjk4NGZmMzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludXRpbC5jCkBAIC0xMjksNiArMTI5LDcgQEAgaW5pdEdpblN0YXRlKEdpblN0 YXRlICpzdGF0ZSwgUmVsYXRpb24gaW5kZXgpCiAJCQkJCQkJICAgYXR0ci0+YXR0bmRpbXMpOwog CQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHN0YXRlLT50dXBkZXNjW2ldLCAoQXR0ck51 bWJlcikgMiwKIAkJCQkJCQkJCQlhdHRyLT5hdHRjb2xsYXRpb24pOworCQkJVHVwbGVEZXNjRmlu YWxpemUoc3RhdGUtPnR1cGRlc2NbaV0pOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0c2Nhbi5jCmluZGV4IGYyM2JjNGE2NzU3Li5jNjVmOTNhYmRhZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0c2Nhbi5jCkBAIC0yMDEsNiArMjAxLDcgQEAgZ2lzdHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJCQkJCQkJCQkJCSBhdHRubyAtIDEp LT5hdHR0eXBpZCwKIAkJCQkJCQkgICAtMSwgMCk7CiAJCX0KKwkJVHVwbGVEZXNjRmluYWxpemUo c28tPmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjKTsKIAkJc2Nhbi0+eHNfaGl0dXBkZXNjID0gc28t Pmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjOwogCiAJCS8qIEFsc28gY3JlYXRlIGEgbWVtb3J5IGNv bnRleHQgdGhhdCB3aWxsIGhvbGQgdGhlIHJldHVybmVkIHR1cGxlcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3OWI4N2FjLi5iMjQ2ZTgxMjdkYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtMzQwLDYgKzM0MCw3IEBAIGdldFNwR2lz dFR1cGxlRGVzYyhSZWxhdGlvbiBpbmRleCwgU3BHaXN0VHlwZURlc2MgKmtleVR5cGUpCiAJCQlU dXBsZURlc2NDb21wYWN0QXR0cihvdXRUdXBEZXNjLCBpKS0+YXR0Y2FjaGVvZmYgPSAtMTsKIAog CQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShvdXRUdXBEZXNjLCBzcGdLZXlDb2x1bW4pOwor CQlUdXBsZURlc2NGaW5hbGl6ZShvdXRUdXBEZXNjKTsKIAl9CiAJcmV0dXJuIG91dFR1cERlc2M7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBlNDM0MGI1OTY0MC4u N2Y0ZWQwMmE2YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtNzQ0 LDYgKzc0NCw3IEBAIHBnX3ByZXBhcmVkX3hhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVE ZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZGJpZCIsCiAJCQkJCQkgICBP SURPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCmluZGV4IDJlZmU0MTA1ZWZiLi5iNmJjNjE2Yzc0 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKQEAgLTQwMCw2ICs0MDAs NyBAQCBwZ193YWxmaWxlX25hbWVfb2Zmc2V0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNj SW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDIsICJmaWxlX29mZnNldCIs CiAJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1 cGxlRGVzYyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVE ZXNjKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9j b3B5LmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKaW5kZXggMDdmNThi MzlkOGMuLjZjMzQ1M2VmZDgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cF9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfY29weS5jCkBA IC0zNTcsNiArMzU3LDggQEAgU2VuZFhsb2dSZWNQdHJSZXN1bHQoWExvZ1JlY1B0ciBwdHIsIFRp bWVMaW5lSUQgdGxpKQogCSAqLwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDIsICJ0bGkiLCBJTlQ4T0lELCAtMSwgMCk7CiAKKwlUdXBsZURlc2NGaW5h bGl6ZSh0dXBkZXNjKTsKKwogCS8qIHNlbmQgUm93RGVzY3JpcHRpb24gKi8KIAl0c3RhdGUgPSBi ZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwog CkBAIC0zODgsNiArMzkwLDcgQEAgU2VuZFRhYmxlc3BhY2VMaXN0KExpc3QgKnRhYmxlc3BhY2Vz KQogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJz cGNvaWQiLCBPSURPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAyLCAic3BjbG9jYXRpb24iLCBURVhUT0lELCAtMSwgMCk7CiAJVHVw bGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInNpemUiLCBJ TlQ4T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBzZW5k IFJvd0Rlc2NyaXB0aW9uICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRl c3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA0M2RlNDJj ZTM5ZS4uNzVlOTdmYjM5NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXgu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTQ4MSw2ICs0ODEsOCBAQCBD b25zdHJ1Y3RUdXBsZURlc2NyaXB0b3IoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlwb3B1bGF0 ZV9jb21wYWN0X2F0dHJpYnV0ZShpbmRleFR1cERlc2MsIGkpOwogCX0KIAorCVR1cGxlRGVzY0Zp bmFsaXplKGluZGV4VHVwRGVzYyk7CisKIAlyZXR1cm4gaW5kZXhUdXBEZXNjOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggOWE0NzkxYzU3M2UuLmZhMzUzYTBkZDM3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMjMwLDYgKzEyMzAsNyBA QCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgInF1YWwiLAogCQkJCQkJICAgUEdf Tk9ERV9UUkVFT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJ CWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dXNlcl9mY3R4ID0gdGFibGVfaW5mb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCBj NzhkY2VhOThjMS4uMDc4YTFjZjUxMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv dG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTIyOSw2 ICsyMjksMTIgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lk LCBPaWQgdG9hc3RJbmRleE9pZCwKIAlUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDEpLT5hdHRjb21w cmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAlUdXBsZURlc2NBdHRyKHR1cGRl c2MsIDIpLT5hdHRjb21wcmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAorCXBv cHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRlc2MsIDApOworCXBvcHVsYXRlX2NvbXBhY3Rf YXR0cmlidXRlKHR1cGRlc2MsIDEpOworCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRl c2MsIDIpOworCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CisKIAkvKgogCSAqIFRvYXN0 IHRhYmxlcyBmb3IgcmVndWxhciByZWxhdGlvbnMgZ28gaW4gcGdfdG9hc3Q7IHRob3NlIGZvciB0 ZW1wCiAJICogcmVsYXRpb25zIGdvIGludG8gdGhlIHBlci1iYWNrZW5kIHRlbXAtdG9hc3QtdGFi bGUgbmFtZXNwYWNlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDkzOTE4YTIyM2I4Li41Zjky MmMzZjVjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMjgxLDYgKzI4MSw3IEBAIEV4cGxh aW5SZXN1bHREZXNjKEV4cGxhaW5TdG10ICpzdG10KQogCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0 ZVR1cGxlRGVzYygxKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIp IDEsICJRVUVSWSBQTEFOIiwKIAkJCQkJICAgcmVzdWx0X3R5cGUsIC0xLCAwKTsKKwlUdXBsZURl c2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9mdW5jdGlvbmNtZHMuYwppbmRleCAyNDIzNzJiMWU2OC4uM2FmZDc2MmU5ZGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCkBAIC0yNDI0LDYgKzI0MjQsNyBAQCBDYWxsU3RtdFJl c3VsdERlc2MoQ2FsbFN0bXQgKnN0bXQpCiAJCQkJCQkJICAgLTEsCiAJCQkJCQkJICAgMCk7CiAJ CX0KKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCiAJcmV0dXJuIHR1cGRlc2M7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBlMWI4MDhiYmI2MC4uNTUxNjY3NjUwYmEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTgwOCw2ICsxODA4LDcgQEAgcGdfZ2V0X3NlcXVl bmNlX2RhdGEoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgQk9PTE9JRCwgLTEsIDApOwogCVR1 cGxlRGVzY0luaXRFbnRyeShyZXN1bHRUdXBsZURlc2MsIChBdHRyTnVtYmVyKSAzLCAicGFnZV9s c24iLAogCQkJCQkgICBMU05PSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZShyZXN1bHRU dXBsZURlc2MpOwogCXJlc3VsdFR1cGxlRGVzYyA9IEJsZXNzVHVwbGVEZXNjKHJlc3VsdFR1cGxl RGVzYyk7CiAKIAlzZXFyZWwgPSB0cnlfcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYjA0YjBkYmQyYTAuLjg2NzhjZWNk NTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTAzMCw2ICsxMDMwLDggQEAgRGVm aW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBPaWQgb3duZXJJZCwK IAkJfQogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2NyaXB0b3IpOworCiAJLyoKIAkgKiBG b3IgcmVsYXRpb25zIHdpdGggdGFibGUgQU0gYW5kIHBhcnRpdGlvbmVkIHRhYmxlcywgc2VsZWN0 IGFjY2VzcwogCSAqIG1ldGhvZCB0byB1c2U6IGFuIGV4cGxpY2l0bHkgaW5kaWNhdGVkIG9uZSwg b3IgKGluIHRoZSBjYXNlIG9mIGEKQEAgLTE0NTgsNiArMTQ2MCw4IEBAIEJ1aWxkRGVzY0ZvclJl bGF0aW9uKGNvbnN0IExpc3QgKmNvbHVtbnMpCiAJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRl KGRlc2MsIGF0dG51bSAtIDEpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJ cmV0dXJuIGRlc2M7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwppbmRleCAxMjkwZGYxMGM2Zi4uOGU5MjBh NzIzNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTMzOCw1ICszMzgsNiBAQCBXYWl0U3RtdFJlc3Vs dERlc2MoV2FpdFN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNj KDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1 cyIsCiAJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNj KTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNTUkYuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwppbmRleCBhMGIxMTFk YzBlNC4uYjQ4MWU1MGFjZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNT UkYuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU1JGLmMKQEAgLTI3Miw2ICsyNzIs NyBAQCBFeGVjTWFrZVRhYmxlRnVuY3Rpb25SZXN1bHQoU2V0RXhwclN0YXRlICpzZXRleHByLAog CQkJCQkJCQkJICAgZnVuY3JldHR5cGUsCiAJCQkJCQkJCQkgICAtMSwKIAkJCQkJCQkJCSAgIDAp OworCQkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCQkJcnNpbmZvLnNldERlc2Mg PSB0dXBkZXNjOwogCQkJCX0KIAkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CkBAIC03NzYsNiArNzc3LDcgQEAgaW5pdF9zZXhwcihPaWQgZm9pZCwgT2lkIGlucHV0X2NvbGxh dGlvbiwgRXhwciAqbm9kZSwKIAkJCQkJCQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkgICAtMSwK IAkJCQkJCQkgICAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJc2V4cHIt PmZ1bmNSZXN1bHREZXNjID0gdHVwZGVzYzsKIAkJCXNleHByLT5mdW5jUmV0dXJuc1R1cGxlID0g ZmFsc2U7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRleCBiNzY4ZWFlOWU1My4u ZTZhYjUxZTY0MDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTIxNzMsNiArMjE3 Myw4IEBAIEV4ZWNUeXBlRnJvbVRMSW50ZXJuYWwoTGlzdCAqdGFyZ2V0TGlzdCwgYm9vbCBza2lw anVuaykKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUodHlwZUluZm8p OworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCkBAIC0yMjA3LDYgKzIyMDksOCBAQCBFeGVjVHlw ZUZyb21FeHByTGlzdChMaXN0ICpleHByTGlzdCkKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVw bGVEZXNjRmluYWxpemUodHlwZUluZm8pOworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKaW5kZXggNjNlNjA1ZTFmODEuLmZlYjgy ZDY0OTY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9uc2Nhbi5jCkBAIC00MTQs NiArNDE0LDcgQEAgRXhlY0luaXRGdW5jdGlvblNjYW4oRnVuY3Rpb25TY2FuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24o dHVwZGVzYywKIAkJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJCWV4cHJDb2xs YXRpb24oZnVuY2V4cHIpKTsKKwkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKQEAgLTQ4NSw2ICs0ODYsNyBAQCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihG dW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJCSAg IDApOwogCQl9CiAKKwkJVHVwbGVEZXNjRmluYWxpemUoc2Nhbl90dXBkZXNjKTsKIAkJQXNzZXJ0 KGF0dG5vID09IG5hdHRzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKaW5k ZXggZTAwM2RiNTIwZGUuLjljNDE1ZTE2NmVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwpAQCAtMTg4Myw2ICsxODgzLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHR1cGRl c2MsCiAJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJZXhwckNvbGxhdGlvbihm dW5jZXhwcikpOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCX0KIAkJZWxzZSBp ZiAoZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkKIAkJewpAQCAtMTk0MCw2ICsxOTQx LDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAog CiAJCQkJaSsrOwogCQkJfQorCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkJCS8q CiAJCQkgKiBFbnN1cmUgdGhhdCB0aGUgY29sZGVmbGlzdCBkZWZpbmVzIGEgbGVnYWwgc2V0IG9m IG5hbWVzIChubwpAQCAtMjAwOCw3ICsyMDEwLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVu Y3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCSAgIDApOwogCQkJLyogbm8gbmVlZCB0 byBzZXQgY29sbGF0aW9uICovCiAJCX0KLQorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJQXNzZXJ0KG5hdHRzID09IHRvdGFsYXR0cyk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYwppbmRleCBkYmY1YjJiNWMwMS4uYTAzZDgyYzA1NDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdGFyZ2V0LmMKQEAgLTE1NzIsNiArMTU3Miw4IEBAIGV4cGFuZFJlY29yZFZhcmlhYmxl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVmFyICp2YXIsIGludCBsZXZlbHN1cCkKIAkJfQogCQlBc3Nl cnQobG5hbWUgPT0gTlVMTCAmJiBsdmFyID09IE5VTEwpOwkvKiBsaXN0cyBzYW1lIGxlbmd0aD8g Ki8KIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBsZURlc2MpOworCiAJCXJldHVybiB0dXBsZURl c2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJl Y2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBx d2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdjODYzOWIzMmU5Li45ZjA0Yzll ZDI1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTEwNzMsNiArMTA3Myw3IEBAIGxpYnBx cmN2X3Byb2Nlc3NUdXBsZXMoUEdyZXN1bHQgKnBncmVzLCBXYWxSY3ZFeGVjUmVzdWx0ICp3YWxy ZXMsCiAJZm9yIChjb2xuID0gMDsgY29sbiA8IG5SZXRUeXBlczsgY29sbisrKQogCQlUdXBsZURl c2NJbml0RW50cnkod2FscmVzLT50dXBsZWRlc2MsIChBdHRyTnVtYmVyKSBjb2xuICsgMSwKIAkJ CQkJCSAgIFBRZm5hbWUocGdyZXMsIGNvbG4pLCByZXRUeXBlc1tjb2xuXSwgLTEsIDApOworCVR1 cGxlRGVzY0ZpbmFsaXplKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAlhdHRpbm1ldGEgPSBUdXBsZURl c2NHZXRBdHRJbk1ldGFkYXRhKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAogCS8qIE5vIHBvaW50IGlu IGRvaW5nIG1vcmUgaGVyZSBpZiB0aGVyZSB3ZXJlIG5vIHR1cGxlcyByZXR1cm5lZC4gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMmNkZThlYmM3MjkuLjMzYTllOGQ3ZjIx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAtNDUxLDYgKzQ1MSw3IEBAIElk ZW50aWZ5U3lzdGVtKHZvaWQpCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgImRibmFtZSIsCiAJCQkJ CQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkv KiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1 cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CkBAIC00OTYs NiArNDk3LDcgQEAgUmVhZFJlcGxpY2F0aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpj bWQpCiAJLyogVGltZUxpbmVJRCBpcyB1bnNpZ25lZCwgc28gaW50NCBpcyBub3Qgd2lkZSBlbm91 Z2guICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg MywgInJlc3RhcnRfdGxpIiwKIAkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAogCW1lbXNldChudWxscywgdHJ1ZSwgUkVBRF9SRVBMSUNBVElP Tl9TTE9UX0NPTFMgKiBzaXplb2YoYm9vbCkpOwogCkBAIC01OTgsNiArNjAwLDcgQEAgU2VuZFRp bWVMaW5lSGlzdG9yeShUaW1lTGluZUhpc3RvcnlDbWQgKmNtZCkKIAl0dXBkZXNjID0gQ3JlYXRl VGVtcGxhdGVUdXBsZURlc2MoMik7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgMSwgImZpbGVuYW1lIiwgVEVYVE9JRCwgLTEsIDApOwogCVR1cGxlRGVz Y0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJjb250ZW50IiwgVEVY VE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJVExIaXN0b3J5 RmlsZU5hbWUoaGlzdGZuYW1lLCBjbWQtPnRpbWVsaW5lKTsKIAlUTEhpc3RvcnlGaWxlUGF0aChw YXRoLCBjbWQtPnRpbWVsaW5lKTsKQEAgLTEwMTUsNiArMTAxOCw3IEBAIFN0YXJ0UmVwbGljYXRp b24oU3RhcnRSZXBsaWNhdGlvbkNtZCAqY21kKQogCQkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsK IAkJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm5l eHRfdGxpX3N0YXJ0cG9zIiwKIAkJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVw bGUgKi8KIAkJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2Ms ICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTEzNjksNiArMTM3Myw3IEBAIENyZWF0ZVJlcGxpY2F0aW9u U2xvdChDcmVhdGVSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0 LCAib3V0cHV0X3BsdWdpbiIsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxl cyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAm VFRTT3BzVmlydHVhbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKaW5kZXggNjQxNjczZjBiMGUuLmNlMDdmMmJj MDQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FjbC5jCkBAIC0xODE5LDYgKzE4MTksNyBAQCBhY2xleHBsb2RlKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgNCwgImlzX2dyYW50YWJsZSIsCiAJCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAKKwkJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBkZXNjKTsKIAogCQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgY29udGV4 dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKaW5kZXggYzA4MzYwOGIxZDUuLmJmYjk0OTQwMWQw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKQEAgLTQ1NCw2ICs0NTQsNyBAQCBwZ19zdGF0X2Zp bGUoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgImNyZWF0aW9uIiwgVElNRVNUQU1QVFpPSUQs IC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDYsCiAJ CQkJCSAgICJpc2RpciIsIEJPT0xPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBk ZXNjKTsKIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAogCW1lbXNldChpc251bGwsIGZhbHNl LCBzaXplb2YoaXNudWxsKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggOWRhZGQ2 ZGE2NzIuLjQ0ODFjMzU0ZmQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCkBAIC0xNDYs NiArMTQ2LDcgQEAgcGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxNiwgIndhaXRzdGFydCIsCiAJCQkJCQkg ICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMKaW5kZXggM2I2ZGE4ZTM2YWMu LmZkOGI4Njc2NDcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNl dGFnZ3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwpAQCAt MjMzLDYgKzIzMyw3IEBAIG9yZGVyZWRfc2V0X3N0YXJ0dXAoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgdXNlX3R1cGxlcykKIAkJCQkJCQkJICAgLTEsCiAJCQkJCQkJCSAgIDApOwogCisJ CQkJVHVwbGVEZXNjRmluYWxpemUobmV3ZGVzYyk7CiAJCQkJRnJlZVR1cGxlRGVzYyhxc3RhdGUt PnR1cGRlc2MpOwogCQkJCXFzdGF0ZS0+dHVwZGVzYyA9IG5ld2Rlc2M7CiAJCQl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCmluZGV4IGIxZGY5NmU3YjBiLi4wYjEwZGEzYjE4MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTc2OSw2ICs3NjksNyBAQCBwZ19zdGF0 X2dldF9iYWNrZW5kX3N1YnhhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJbml0RW50 cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdWJ4YWN0X292ZXJmbG93IiwKIAkJCQkJICAg Qk9PTE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CiAKIAlpZiAoKGxvY2FsX2JlZW50cnkgPSBwZ3N0YXRfZ2V0X2xv Y2FsX2JlZW50cnlfYnlfcHJvY19udW1iZXIocHJvY051bWJlcikpICE9IE5VTEwpCkBAIC0xNjcw LDYgKzE2NzEsNyBAQCBwZ19zdGF0X3dhbF9idWlsZF90dXBsZShQZ1N0YXRfV2FsQ291bnRlcnMg d2FsX2NvdW50ZXJzLAogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg NiwgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAorCVR1 cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJ LyogRmlsbCB2YWx1ZXMgYW5kIE5VTExzICovCkBAIC0yMDk3LDYgKzIwOTksNyBAQCBwZ19zdGF0 X2dldF9hcmNoaXZlcihQR19GVU5DVElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgNywgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpP SUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOwogCiAJLyogR2V0IHN0YXRpc3RpY3MgYWJvdXQgdGhlIGFyY2hpdmVyIHBy b2Nlc3MgKi8KQEAgLTIxNzgsNiArMjE4MSw3IEBAIHBnX3N0YXRfZ2V0X3JlcGxpY2F0aW9uX3Ns b3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAlU dXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEzLCAic3RhdHNfcmVzZXQi LAogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1 cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJbmFtZXN0cmNweSgmc2xvdG5h bWUsIHRleHRfdG9fY3N0cmluZyhzbG90bmFtZV90ZXh0KSk7CkBAIC0yMjY1LDYgKzIyNjksNyBA QCBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJ ICAgSU5UOE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51 bWJlcikgMTMsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7 CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7 CiAKIAlpZiAoIXN1YmVudHJ5KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Rz dmVjdG9yX29wLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYwppbmRleCA3 MWM3YzdkM2IzYy4uZDhkZWNlNDJiOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC90c3ZlY3Rvcl9vcC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5j CkBAIC02NTEsNiArNjUxLDcgQEAgdHN2ZWN0b3JfdW5uZXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CQkJCQkgICBURVhUQVJSQVlPSUQsIC0xLCAwKTsKIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl KGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKIAkJCWVsb2co RVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwkJVHVwbGVEZXNjRmlu YWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSB0dXBkZXNjOwogCiAJCWZ1 bmNjdHgtPnVzZXJfZmN0eCA9IFBHX0dFVEFSR19UU1ZFQ1RPUl9DT1BZKDApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNmI2MzRjOWZmZjEuLjc3MGVkYjM0ZTA4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTcyOSw2ICs3MjksOCBAQCBSZWxhdGlvbkJ1aWxk VHVwbGVEZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQlwZnJlZShjb25zdHIpOwogCQlyZWxhdGlv bi0+cmRfYXR0LT5jb25zdHIgPSBOVUxMOwogCX0KKworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0 aW9uLT5yZF9hdHQpOwogfQogCiAvKgpAQCAtMTk4NSw2ICsxOTg3LDcgQEAgZm9ybXJkZXNjKGNv bnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwKIAogCS8qIGluaXRp YWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVpbGRUdXBs ZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZWxhdGlvbi0+cmRfYXR0LCAwKS0+YXR0 Y2FjaGVvZmYgPSAwOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0aW9uLT5yZF9hdHQpOwogCiAJ LyogbWFyayBub3QtbnVsbCBzdGF0dXMgKi8KIAlpZiAoaGFzX25vdF9udWxsKQpAQCAtMzY4OCw2 ICszNjkxLDggQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAqcmVsbmFt ZSwKIAlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKIAkJVHVwbGVEZXNjQXR0cihyZWwtPnJk X2F0dCwgaSktPmF0dHJlbGlkID0gcmVsaWQ7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZShyZWwtPnJk X2F0dCk7CisKIAlyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSA9IHJlbHRhYmxlc3BhY2U7CiAK IAlpZiAobWFwcGVkX3JlbGF0aW9uKQpAQCAtNDQ0Myw2ICs0NDQ4LDcgQEAgQnVpbGRIYXJkY29k ZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9ybURhdGFfcGdfYXR0cmlidXRlICphdHRy cykKIAogCS8qIGluaXRpYWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJl bGF0aW9uQnVpbGRUdXBsZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZXN1bHQsIDAp LT5hdHRjYWNoZW9mZiA9IDA7CisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0KTsKIAogCS8qIE5v dGU6IHdlIGRvbid0IGJvdGhlciB0byBzZXQgdXAgYSBUdXBsZUNvbnN0ciBlbnRyeSAqLwogCkBA IC02MjY4LDYgKzYyNzQsOCBAQCBsb2FkX3JlbGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkK IAkJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHJlbC0+cmRfYXR0LCBpKTsKIAkJfQogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRfYXR0KTsKKwogCQkvKiBuZXh0IHJlYWQgdGhlIGFj Y2VzcyBtZXRob2Qgc3BlY2lmaWMgZmllbGQgKi8KIAkJaWYgKGZyZWFkKCZsZW4sIDEsIHNpemVv ZihsZW4pLCBmcCkgIT0gc2l6ZW9mKGxlbikpCiAJCQlnb3RvIHJlYWRfZmFpbGVkOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMgYi9zcmMvYmFja2VuZC91dGls cy9mbWdyL2Z1bmNhcGkuYwppbmRleCA4YTkzNGVhOGRjYS4uNTE2ZDAyY2ZiODIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZnVuY2FwaS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2ZtZ3IvZnVuY2FwaS5jCkBAIC0zNDAsNiArMzQwLDggQEAgZ2V0X2V4cHJfcmVzdWx0X3R5 cGUoTm9kZSAqZXhwciwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGNvbCkpOwogCQkJaSsrOwog CQl9CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOworCiAJCWlmIChyZXN1bHRUeXBlSWQp CiAJCQkqcmVzdWx0VHlwZUlkID0gcmV4cHItPnJvd190eXBlaWQ7CiAJCWlmIChyZXN1bHRUdXBs ZURlc2MpCkBAIC0xMDQ0LDYgKzEwNDYsNyBAQCByZXNvbHZlX3BvbHltb3JwaGljX3R1cGRlc2Mo VHVwbGVEZXNjIHR1cGRlc2MsIG9pZHZlY3RvciAqZGVjbGFyZWRfYXJncywKIAkJfQogCX0KIAor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xODUz LDYgKzE4NTYsOCBAQCBidWlsZF9mdW5jdGlvbl9yZXN1bHRfdHVwZGVzY19kKGNoYXIgcHJva2lu ZCwKIAkJCQkJCSAgIDApOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0 dXJuIGRlc2M7CiB9CiAKQEAgLTE5NzAsNiArMTk3NSw3IEBAIFR5cGVHZXRUdXBsZURlc2MoT2lk IHR5cGVvaWQsIExpc3QgKmNvbGFsaWFzZXMpCiAJCQkJCQkgICB0eXBlb2lkLAogCQkJCQkJICAg LTEsCiAJCQkJCQkgICAwKTsKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCWVs c2UgaWYgKGZ1bmN0eXBjbGFzcyA9PSBUWVBFRlVOQ19SRUNPUkQpCiAJewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX2Z1bmNzLmMKaW5kZXggODUyNGRkM2E5ODEuLjQ3MmNiNTM5M2NlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX2Z1bmNzLmMKQEAgLTQ0NCw2ICs0NDQsNyBAQCBHZXRQR1ZhcmlhYmxlUmVz dWx0RGVzYyhjb25zdCBjaGFyICpuYW1lKQogCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDEsIHZhcm5hbWUsCiAJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAJfQor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCkBAIC00 NjUsNiArNDY2LDcgQEAgU2hvd0dVQ0NvbmZpZ09wdGlvbihjb25zdCBjaGFyICpuYW1lLCBEZXN0 UmVjZWl2ZXIgKmRlc3QpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIHZhcm5h bWUsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9 IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7 CkBAIC00OTksNiArNTAxLDcgQEAgU2hvd0FsbEdVQ0NvbmZpZyhEZXN0UmVjZWl2ZXIgKmRlc3Qp CiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMywgImRlc2NyaXB0aW9uIiwKIAkJCQkJCQkgIFRFWFRPSUQs IC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9y IHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBk ZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTkzNCw2ICs5MzcsOCBAQCBz aG93X2FsbF9zZXR0aW5ncyhQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDE3LCAicGVuZGluZ19yZXN0YXJ0IiwKIAkJCQkJCSAgIEJP T0xPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCQkvKgog CQkgKiBHZW5lcmF0ZSBhdHRyaWJ1dGUgbWV0YWRhdGEgbmVlZGVkIGxhdGVyIHRvIHByb2R1Y2Ug dHVwbGVzIGZyb20gcmF3CiAJCSAqIEMgc3RyaW5ncwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3R1cGRlc2MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKaW5kZXggZDQ2 Y2RiZjdhM2MuLjU5NTQxM2RiYmM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVw ZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKQEAgLTE5NSw2ICsxOTUs NyBAQCBleHRlcm4gVHVwbGVEZXNjIENyZWF0ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVwbGVE ZXNjIHR1cGRlc2MsIGludCBuYXR0cyk7CiAKIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVE ZXNjQ29weUNvbnN0cihUdXBsZURlc2MgdHVwZGVzYyk7CiAKKyNkZWZpbmUgVHVwbGVEZXNjRmlu YWxpemUoZCkgKCh2b2lkKSAwKQogI2RlZmluZSBUdXBsZURlc2NTaXplKHNyYykgXAogCShvZmZz ZXRvZihzdHJ1Y3QgVHVwbGVEZXNjRGF0YSwgY29tcGFjdF9hdHRycykgKyBcCiAJIChzcmMpLT5u YXR0cyAqIHNpemVvZihDb21wYWN0QXR0cmlidXRlKSArIFwKZGlmZiAtLWdpdCBhL3NyYy9wbC9w bHBnc3FsL3NyYy9wbF9jb21wLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCmluZGV4 IDVlY2M3NzY2NzU3Li5iNzJjOTYzYjNiZSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3Jj L3BsX2NvbXAuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCkBAIC0xOTEyLDYg KzE5MTIsOCBAQCBidWlsZF9yb3dfZnJvbV92YXJzKFBMcGdTUUxfdmFyaWFibGUgKip2YXJzLCBp bnQgbnVtdmFycykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHJvdy0+cm93dHVwZGVz YywgaSArIDEsIHR5cGNvbGwpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJvdy0+cm93dHVw ZGVzYyk7CisKIAlyZXR1cm4gcm93OwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKaW5kZXgg NDg1ZTA4ZTVjMTkuLmY5ZTdjNzE3MjgwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jCkBAIC0y MDYsNiArMjA2LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRfcmVwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRa T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURl c2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5udW1jYWxs cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcHJlZHRlc3QvdGVzdF9wcmVk dGVzdC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpp bmRleCA2NzlhNWRlNDU2ZC4uNDhjYTJhNGVhNzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpAQCAtMjMwLDYgKzIzMCw3IEBAIHRlc3RfcHJl ZHRlc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgInNfcl9ob2xkcyIsIEJPT0xPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDgsCiAJCQkJ CSAgICJ3X3JfaG9sZHMiLCBCT09MT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVw ZGVzYyk7CiAJdHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJdmFsdWVzWzBd ID0gQm9vbEdldERhdHVtKHN0cm9uZ19pbXBsaWVkX2J5KTsKLS0gCjIuNTEuMAoK --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="US-ASCII"; name="v10-0003-Optimize-tuple-deformation.patch" Content-Disposition: attachment; filename="v10-0003-Optimize-tuple-deformation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm1b1z172 RnJvbSA0NmM3ZTlkZDg4ODI0Nzg2NmIwYjI5MzFiODdkOGE3Y2ZlYzliYjFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDMv NV0gT3B0aW1pemUgdHVwbGUgZGVmb3JtYXRpb24KClRoaXMgY29tbWl0IGluY2x1ZGVzIHZhcmlv dXMgb3B0aW1pemF0aW9ucyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZgp0dXBsZSBkZWZv cm1hdGlvbi4KCldlIG5vdyBwcmVjYWxjdWxhdGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hl b2ZmLCB3aGljaCBhbGxvd3MgdXMgdG8KcmVtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIGRlZm9ybSBy b3V0aW5lcyB3aGljaCB3YXMgc2V0dGluZyB0aGUKYXR0Y2FjaGVvZmYuICBTZXR0aW5nIHRoZSBh dHRjYWNoZW9mZiBpcyBoYW5kbGVkIGJ5IFR1cGxlRGVzY0ZpbmFsaXplKCksCndoaWNoIG11c3Qg YmUgY2FsbGVkIGJlZm9yZSB0aGUgVHVwbGVEZXNjIGlzIHVzZWQgZm9yIGFueXRoaW5nLiAgSGF2 aW5nCnRoaXMgVHVwbGVEZXNjRmluYWxpemUoKSBmdW5jdGlvbiBtZWFucyB3ZSBjYW4gc3RvcmUg dGhlIGZpcnN0CmF0dHJpYnV0ZSBpbiB0aGUgVHVwbGVEZXNjIHdoaWNoIGRvZXMgbm90IGhhdmUg YW4gb2Zmc2V0IGNhY2hlZC4gIFRoYXQKYWxsb3dzIHVzIHRvIGFkZCBhIGRlZGljYXRlZCBkZWZv cm1pbmcgbG9vcCB0byBkZWZvcm0gYWxsIGF0dHJpYnV0ZXMgdXAKdG8gdGhlIGZpbmFsIG9uZSB3 aXRoIGFuIGF0dGNhY2hlb2ZmIHNldCwgb3IgdXAgdG8gdGhlIGZpcnN0IE5VTEwKYXR0cmlidXRl LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCgpXZSBhbHNvIHJlY29yZCB0aGUgbWF4aW11bSBhdHRy aWJ1dGUgbnVtYmVyIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QKaW4gdGhlIHR1cGxlLCB0 aGF0IGlzLCBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50IGFuZCBpc24ndCBhbgphdHRoYXNtaXNz aW5nIGF0dHJpYnV0ZS4gIFdoZW4gZGVmb3JtaW5nIG9ubHkgYXR0cmlidXRlcyBwcmlvciB0byB0 aGUKZ3VhcmFudGVlZCBhdHRudW0sIHdlJ3ZlIG5vIG5lZWQgdG8gYWNjZXNzIHRoZSB0dXBsZSdz IG5hdHQgY291bnQuICBBcyBhbgphZGRpdGlvbmFsIG9wdGltaXphdGlvbiwgd2Ugb25seSBjb3Vu dCBmaXhlZC13aWR0aCBjb2x1bW5zIHdoZW4KY2FsY3VsYXRpbmcgdGhlIG1heGltdW0gZ3VhcmFu dGVlZCBjb2x1bW4gYXMgdGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIHRvCmVtaXQgY29kZSB0byBm ZXRjaCBieXJlZiB0eXBlcyBpbiB0aGUgZGVmb3JtYXRpb24gbG9vcCBmb3IgZ3VhcmFudGVlZAph dHRyaWJ1dGVzLgoKU29tZSBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgZGVmb3JtIHR1cGxlcyB0aGF0 IGhhdmUgeWV0IHRvIGdvIHRocm91Z2ggTk9UCk5VTEwgY29uc3RyYWludCB2YWxpZGF0aW9uLiAg V2UncmUgdW5hYmxlIHRvIHBlcmZvcm0gdGhlIGd1YXJhbnRlZWQKYXR0cmlidXRlIG9wdGltaXph dGlvbiB3aGVuIHRoYXQncyB0aGUgY2FzZS4gIFRoZSBvcHRpbWl6YXRpb24gaXMgb3B0LWluCnZp YSB0aGUgVHVwbGVUYWJsZVNsb3QgdXNpbmcgdGhlIFRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NP TlNUUkFJTlRTCmZsYWcuCgpUaGlzIGNvbW1pdCBhbHNvIGFkZHMgYSBtb3JlIGVmZmljaWVudCB3 YXkgb2YgcG9wdWxhdGluZyB0aGUgaXNudWxsCmFycmF5IGJ5IHVzaW5nIGEgYml0LXdpc2UgdHJp Y2sgd2hpY2ggcGVyZm9ybXMgbXVsdGlwbGljYXRpb24gb24gdGhlCmludmVyc2Ugb2YgdGhlIHR1 cGxlJ3MgYml0bWFwIGJ5dGUgYW5kIG1hc2tpbmcgb3V0IGFsbCBidXQgdGhlIGxvd2VyIGJpdApv ZiBlYWNoIG9mIHRoZSBib29sZWFuJ3MgYnl0ZS4gIFRoaXMgcmVzdWx0cyBpbiBtdWNoIG1vcmUg b3B0aW1hbCBjb2RlCndoZW4gY29tcGFyZWQgdG8gZGV0ZXJtaW5pbmcgdGhlIE5VTExuZXNzIHZp YSBhdHRfaXNudWxsKCkuICA4IGlzbnVsbAplbGVtZW50cyBhcmUgcHJvY2Vzc2VkIGF0IG9uY2Ug dXNpbmcgdGhpcyBtZXRob2QsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8Kcm91bmQgdGhlIHR0c19p c251bGwgYXJyYXkgc2l6ZSB1cCB0byB0aGUgbmV4dCA4IGJ5dGVzLiAgVGhlIHBhbGxvYyBjb2Rl CmRvZXMgdGhpcyBhbnl3YXksIGJ1dCB0aGUgcm91bmQtdXAgbmVlZGVkIHRvIGJlIGZvcm1hbGl6 ZWQgc28gYXMgbm90IHRvCm92ZXJ3cml0ZSB0aGUgc2VudGluZWwgYnl0ZSBpbiBkZWJ1ZyBidWls ZHMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYyAgICAgICAgfCAz NjIgKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVw bGUuYyAgICAgICB8IDM3MSArKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyAgICAgICAgICB8ICA0NiArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndXRpbHMuYyAgICAgICAgIHwgICAzIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYyAgICAgICAgICAgIHwgMzYwICsrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYyAgICAgICAgfCAgIDYgLQogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgfCAgMTIgLQogc3JjL2luY2x1ZGUvYWNjZXNz L3R1cGRlc2MuaCAgICAgICAgICAgICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90 dXBtYWNzLmggICAgICAgICAgICAgICAgIHwgMjA2ICsrKysrKysrKy0KIHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL3R1cHRhYmxlLmggICAgICAgICAgICAgIHwgIDE2ICstCiBzcmMvdGVzdC9tb2R1bGVz L2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYyB8ICAgMSArCiAxMiBmaWxlcyBjaGFuZ2VkLCA3 ODEgaW5zZXJ0aW9ucygrKSwgNjIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9jb21tb24vaGVhcHR1cGxlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9u L2hlYXB0dXBsZS5jCmluZGV4IDExYmVjMjBlODJlLi42MDZjMWY2NzU2OCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jCkBAIC00OTgsMTkgKzQ5OCw3IEBAIGhlYXBfYXR0aXNu dWxsKEhlYXBUdXBsZSB0dXAsIGludCBhdHRudW0sIFR1cGxlRGVzYyB0dXBsZURlc2MpCiAgKgkJ bm9jYWNoZWdldGF0dHIKICAqCiAgKgkJVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZyb20gZmFzdGdl dGF0dHIoKSwgaW4gY2FzZXMgd2hlcmUgd2UKLSAqCQljYW4ndCB1c2UgYSBjYWNoZW9mZnNldCBh bmQgdGhlIHZhbHVlIGlzIG5vdCBudWxsLgotICoKLSAqCQlUaGlzIGNhY2hlcyBhdHRyaWJ1dGUg b2Zmc2V0cyBpbiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0b3IuCi0gKgotICoJCUFuIGFsdGVybmF0 aXZlIHdheSB0byBzcGVlZCB0aGluZ3MgdXAgd291bGQgYmUgdG8gY2FjaGUgb2Zmc2V0cwotICoJ CXdpdGggdGhlIHR1cGxlLCBidXQgdGhhdCBzZWVtcyBtb3JlIGRpZmZpY3VsdCB1bmxlc3MgeW91 IHRha2UKLSAqCQl0aGUgc3RvcmFnZSBoaXQgb2YgYWN0dWFsbHkgcHV0dGluZyB0aG9zZSBvZmZz ZXRzIGludG8gdGhlCi0gKgkJdHVwbGUgeW91IHNlbmQgdG8gZGlzay4gIFl1Y2suCi0gKgotICoJ CVRoaXMgc2NoZW1lIHdpbGwgYmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhhdCwgYnV0IHNob3Vs ZAotICoJCXBlcmZvcm0gd2VsbCBmb3IgcXVlcmllcyB3aGljaCBoaXQgbGFyZ2UgIydzIG9mIHR1 cGxlcy4gIEFmdGVyCi0gKgkJeW91IGNhY2hlIHRoZSBvZmZzZXRzIG9uY2UsIGV4YW1pbmluZyBh bGwgdGhlIG90aGVyIHR1cGxlcyB1c2luZwotICoJCXRoZSBzYW1lIGF0dHJpYnV0ZSBkZXNjcmlw dG9yIHdpbGwgZ28gbXVjaCBxdWlja2VyLiAtY2ltIDUvNC85MQorICoJCWNhbid0IHVzZSB0aGUg YXR0Y2FjaGVvZmYgYW5kIHRoZSB2YWx1ZSBpcyBub3QgbnVsbC4KICAqCiAgKgkJTk9URTogaWYg eW91IG5lZWQgdG8gY2hhbmdlIHRoaXMgY29kZSwgc2VlIGFsc28gaGVhcF9kZWZvcm1fdHVwbGUu CiAgKgkJQWxzbyBzZWUgbm9jYWNoZV9pbmRleF9nZXRhdHRyLCB3aGljaCBpcyB0aGUgc2FtZSBj b2RlIGZvciBpbmRleApAQCAtNTIyLDE5NCArNTEwLDEyMyBAQCBub2NhY2hlZ2V0YXR0cihIZWFw VHVwbGUgdHVwLAogCQkJICAgaW50IGF0dG51bSwKIAkJCSAgIFR1cGxlRGVzYyB0dXBsZURlc2Mp CiB7CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJSGVhcFR1cGxlSGVhZGVyIHRkID0gdHVw LT50X2RhdGE7CiAJY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byBkYXRhIHBhcnQgb2YgdHVwbGUg Ki8KIAliaXRzOAkgICAqYnAgPSB0ZC0+dF9iaXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4g dHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGRvIHdlIGhhdmUgdG8gd2FsayBhdHRy cz8gKi8KIAlpbnQJCQlvZmY7CQkJLyogY3VycmVudCBvZmZzZXQgd2l0aGluIGRhdGEgKi8KKwlp bnQJCQlzdGFydEF0dHI7CisJaW50CQkJZmlyc3ROdWxsQXR0cjsKKwlpbnQJCQlpOworCWJvb2wJ CWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVwKTsKIAotCS8qIC0tLS0tLS0tLS0tLS0t LS0KLQkgKgkgVGhyZWUgY2FzZXM6Ci0JICoKLQkgKgkgMTogTm8gbnVsbHMgYW5kIG5vIHZhcmlh YmxlLXdpZHRoIGF0dHJpYnV0ZXMuCi0JICoJIDI6IEhhcyBhIG51bGwgb3IgYSB2YXItd2lkdGgg QUZURVIgYXR0LgotCSAqCSAzOiBIYXMgbnVsbHMgb3IgdmFyLXdpZHRocyBCRUZPUkUgYXR0Lgot CSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2Fs bCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2Fj aGVkT2Zmc2V0QXR0ciA+PSAwKTsKIAogCWF0dG51bS0tOwogCi0JaWYgKCFIZWFwVHVwbGVOb051 bGxzKHR1cCkpCi0JewotCQkvKgotCQkgKiB0aGVyZSdzIGEgbnVsbCBzb21ld2hlcmUgaW4gdGhl IHR1cGxlCi0JCSAqCi0JCSAqIGNoZWNrIHRvIHNlZSBpZiBhbnkgcHJlY2VkaW5nIGJpdHMgYXJl IG51bGwuLi4KLQkJICovCi0JCWludAkJCWJ5dGUgPSBhdHRudW0gPj4gMzsKLQkJaW50CQkJZmlu YWxiaXQgPSBhdHRudW0gJiAweDA3OwotCi0JCS8qIGNoZWNrIGZvciBudWxscyAiYmVmb3JlIiBm aW5hbCBiaXQgb2YgbGFzdCBieXRlICovCi0JCWlmICgofmJwW2J5dGVdKSAmICgoMSA8PCBmaW5h bGJpdCkgLSAxKSkKLQkJCXNsb3cgPSB0cnVlOwotCQllbHNlCi0JCXsKLQkJCS8qIGNoZWNrIGZv ciBudWxscyBpbiBhbnkgImVhcmxpZXIiIGJ5dGVzICovCi0JCQlpbnQJCQlpOworCS8qCisJICog VG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyB3ZSBuZWVkIHRvIGxvb2sgYXQsIHdl IHN0YXJ0IGF0IHRoZQorCSAqIGhpZ2hlc3QgYXR0cmlidXRlIHRoYXQgd2UgY2FuIHdoaWNoIGhh cyBhIGNhY2hlZCBvZmZzZXQuICBTaW5jZSB0aGUKKwkgKiBhdHRjYWNoZW9mZiBmb3IgYW4gYXR0 cmlidXRlIGlzIG9ubHkgdmFsaWQgaWYgdGhlcmUgYXJlIG5vIE5VTExzIGluCisJICogcHJpb3Ig YXR0cmlidXRlLCB3ZSBtdXN0IGxvb2sgZm9yIE5VTExzIHRvIGRldGVybWluZSB0aGUgc3RhcnQg YXR0ci4KKwkgKi8KKwlpZiAoaGFzbnVsbHMpCisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxs X2F0dHIoYnAsIGF0dG51bSk7CisJZWxzZQorCQlmaXJzdE51bGxBdHRyID0gYXR0bnVtOwogCi0J CQlmb3IgKGkgPSAwOyBpIDwgYnl0ZTsgaSsrKQotCQkJewotCQkJCWlmIChicFtpXSAhPSAweEZG KQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJ fQorCWlmICh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+IDApCisJeworCQlz dGFydEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgLSAxLCBm aXJzdE51bGxBdHRyKTsKKwkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBz dGFydEF0dHIpLT5hdHRjYWNoZW9mZjsKKwl9CisJZWxzZQorCXsKKwkJc3RhcnRBdHRyID0gMDsK KwkJb2ZmID0gMDsKIAl9CiAKIAl0cCA9IChjaGFyICopIHRkICsgdGQtPnRfaG9mZjsKIAotCWlm ICghc2xvdykKKwkvKgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0aGUgZmlyc3QgTlVMTCBh dHRyLiAgV2UgdXNlIHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0aGUgdHVwbGUgaGFzIG5v IHZhcmlhYmxlLXdpZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdpZHRoCisJICogY29sdW1u cyBleGlzdCB3ZSB1c2UgYXR0X2FkZGxlbmd0aF9wb2ludGVyKCkgdG8gbW92ZSB0aGUgb2Zmc2V0 IGJleW9uZAorCSAqIHRoZSBjdXJyZW50IGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAoIUhlYXBUdXBs ZUhhc1ZhcldpZHRoKHR1cCkpCiAJewotCQlDb21wYWN0QXR0cmlidXRlICphdHQ7Ci0KLQkJLyoK LQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGFyZSBubyBudWxscyB1cCB0byBhbmQgaW5jbHVk aW5nIHRoZSB0YXJnZXQKLQkJICogYXR0cmlidXRlLiAgSWYgd2UgaGF2ZSBhIGNhY2hlZCBvZmZz ZXQsIHdlIGNhbiB1c2UgaXQuCi0JCSAqLwotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIGF0dG51bSk7Ci0JCWlmIChhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlyZXR1 cm4gZmV0Y2hhdHQoYXR0LCB0cCArIGF0dC0+YXR0Y2FjaGVvZmYpOwotCi0JCS8qCi0JCSAqIE90 aGVyd2lzZSwgY2hlY2sgZm9yIG5vbi1maXhlZC1sZW5ndGggYXR0cnMgdXAgdG8gYW5kIGluY2x1 ZGluZwotCQkgKiB0YXJnZXQuICBJZiB0aGVyZSBhcmVuJ3QgYW55LCBpdCdzIHNhZmUgdG8gY2hl YXBseSBpbml0aWFsaXplIHRoZQotCQkgKiBjYWNoZWQgb2Zmc2V0cyBmb3IgdGhlc2UgYXR0cnMu Ci0JCSAqLwotCQlpZiAoSGVhcFR1cGxlSGFzVmFyV2lkdGgodHVwKSkKKwkJZm9yIChpID0gc3Rh cnRBdHRyOyBpIDwgZmlyc3ROdWxsQXR0cjsgaSsrKQogCQl7Ci0JCQlpbnQJCQlqOworCQkJY2F0 dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlmb3IgKGogPSAw OyBqIDw9IGF0dG51bTsgaisrKQotCQkJewotCQkJCWlmIChUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIGopLT5hdHRsZW4gPD0gMCkKLQkJCQl7Ci0JCQkJCXNsb3cgPSB0cnVlOwotCQkJ CQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwg Y2F0dHItPmF0dGFsaWduYnkpOworCQkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAJCX0KLQl9Ci0K LQlpZiAoIXNsb3cpCi0JewotCQlpbnQJCQluYXR0cyA9IHR1cGxlRGVzYy0+bmF0dHM7Ci0JCWlu dAkJCWogPSAxOwotCi0JCS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgdHVwbGUg d2l0aCBubyBudWxscyBvciB2YXItd2lkdGhzIHVwIHRvCi0JCSAqIGFuZCBpbmNsdWRpbmcgdGhl IHRhcmdldCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCBvZmZzZXQKLQkJICog Li4uIG9ubHkgd2UgZG9uJ3QgaGF2ZSBpdCB5ZXQsIG9yIHdlJ2Qgbm90IGhhdmUgZ290IGhlcmUu ICBTaW5jZQotCQkgKiBpdCdzIGNoZWFwIHRvIGNvbXB1dGUgb2Zmc2V0cyBmb3IgZml4ZWQtd2lk dGggY29sdW1ucywgd2UgdGFrZSB0aGUKLQkJICogb3Bwb3J0dW5pdHkgdG8gaW5pdGlhbGl6ZSB0 aGUgY2FjaGVkIG9mZnNldHMgZm9yICphbGwqIHRoZSBsZWFkaW5nCi0JCSAqIGZpeGVkLXdpZHRo IGNvbHVtbnMsIGluIGhvcGUgb2YgYXZvaWRpbmcgZnV0dXJlIHZpc2l0cyB0byB0aGlzCi0JCSAq IHJvdXRpbmUuCi0JCSAqLwotCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIDApLT5h dHRjYWNoZW9mZiA9IDA7Ci0KLQkJLyogd2UgbWlnaHQgaGF2ZSBzZXQgc29tZSBvZmZzZXRzIGlu IHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3aGlsZSAoaiA8IG5hdHRzICYmIFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGNhY2hlb2ZmID4gMCkKLQkJCWorKzsK IAotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGogLSAxKS0+YXR0Y2Fj aGVvZmYgKwotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqIC0gMSktPmF0dGxl bjsKLQotCQlmb3IgKDsgaiA8IG5hdHRzOyBqKyspCisJCWZvciAoOyBpIDwgYXR0bnVtOyBpKysp CiAJCXsKLQkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgaik7Ci0KLQkJCWlmIChhdHQtPmF0dGxlbiA8PSAwKQotCQkJCWJyZWFrOwotCi0J CQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCWlm IChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJYXR0LT5hdHRjYWNoZW9m ZiA9IG9mZjsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsK IAotCQkJb2ZmICs9IGF0dC0+YXR0bGVuOworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsIGNhdHRyLT5hdHRhbGlnbmJ5LCBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9m Zik7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKIAkJfQotCi0JCUFzc2VydChqID4gYXR0bnVt KTsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSktPmF0 dGNhY2hlb2ZmOwogCX0KIAllbHNlCiAJewotCQlib29sCQl1c2VjYWNoZSA9IHRydWU7Ci0JCWlu dAkJCWk7Ci0KLQkJLyoKLQkJICogTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRvIHdhbGsgdGhl IHR1cGxlIENBUkVGVUxMWS4gIEJ1dCB3ZSBzdGlsbAotCQkgKiBtaWdodCBiZSBhYmxlIHRvIGNh Y2hlIHNvbWUgb2Zmc2V0cyBmb3IgbmV4dCB0aW1lLgotCQkgKgotCQkgKiBOb3RlIC0gVGhpcyBs b29wIGlzIGEgbGl0dGxlIHRyaWNreS4gIEZvciBlYWNoIG5vbi1udWxsIGF0dHJpYnV0ZSwKLQkJ ICogd2UgaGF2ZSB0byBmaXJzdCBhY2NvdW50IGZvciBhbGlnbm1lbnQgcGFkZGluZyBiZWZvcmUg dGhlIGF0dHIsCi0JCSAqIHRoZW4gYWR2YW5jZSBvdmVyIHRoZSBhdHRyIGJhc2VkIG9uIGl0cyBs ZW5ndGguICBOdWxscyBoYXZlIG5vCi0JCSAqIHN0b3JhZ2UgYW5kIG5vIGFsaWdubWVudCBwYWRk aW5nIGVpdGhlci4gIFdlIGNhbiB1c2Uvc2V0Ci0JCSAqIGF0dGNhY2hlb2ZmIHVudGlsIHdlIHJl YWNoIGVpdGhlciBhIG51bGwgb3IgYSB2YXItd2lkdGggYXR0cmlidXRlLgotCQkgKi8KLQkJb2Zm ID0gMDsKLQkJZm9yIChpID0gMDs7IGkrKykJCS8qIGxvb3AgZXhpdCBpcyBhdCAiYnJlYWsiICov CisJCWZvciAoaSA9IHN0YXJ0QXR0cjsgaSA8IGZpcnN0TnVsbEF0dHI7IGkrKykKIAkJewotCQkJ Q29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBp KTsKKwkJCWludAkJCWF0dGxlbjsKIAotCQkJaWYgKEhlYXBUdXBsZUhhc051bGxzKHR1cCkgJiYg YXR0X2lzbnVsbChpLCBicCkpCi0JCQl7Ci0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKLQkJCQljb250 aW51ZTsJCS8qIHRoaXMgY2Fubm90IGJlIHRoZSB0YXJnZXQgYXR0ICovCi0JCQl9CisJCQljYXR0 ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CisJCQlhdHRsZW4gPSBjYXR0 ci0+YXR0bGVuOwogCi0JCQkvKiBJZiB3ZSBrbm93IHRoZSBuZXh0IG9mZnNldCwgd2UgY2FuIHNr aXAgdGhlIHJlc3QgKi8KLQkJCWlmICh1c2VjYWNoZSAmJiBhdHQtPmF0dGNhY2hlb2ZmID49IDAp Ci0JCQkJb2ZmID0gYXR0LT5hdHRjYWNoZW9mZjsKLQkJCWVsc2UgaWYgKGF0dC0+YXR0bGVuID09 IC0xKQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBm b3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBz dWl0YWJseSBhbGlnbmVkLCBzbyB0aGF0IHRoZXJlIHdvdWxkIGJlCi0JCQkJICogbm8gcGFkIGJ5 dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IKLQkJCQkg KiBlaXRoZXIgYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFsdWUuCi0JCQkJICovCi0JCQkJaWYg KHVzZWNhY2hlICYmCi0JCQkJCW9mZiA9PSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5h dHRhbGlnbmJ5KSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCQllbHNlCi0JCQkJ ewotCQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5LCAt MSwKLQkJCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJCXVzZWNhY2hlID0gZmFsc2U7Ci0JCQkJ fQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIG5vdCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVz ZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShv ZmYsIGF0dC0+YXR0YWxpZ25ieSk7CisJCQkvKgorCQkJICogY3N0cmluZ3MgZG9uJ3QgZXhpc3Qg aW4gaGVhcCB0dXBsZXMuICBVc2UgcGdfYXNzdW1lIHRvIGluc3RydWN0CisJCQkgKiB0aGUgY29t cGlsZXIgbm90IHRvIGVtaXQgdGhlIGNzdHJpbmcgcmVsYXRlZCBjb2RlIGluCisJCQkgKiBhdHRf YWRkbGVuZ3RoX3BvaW50ZXIoKS4KKwkJCSAqLworCQkJcGdfYXNzdW1lKGF0dGxlbiA+IDAgfHwg YXR0bGVuID09IC0xKTsKIAotCQkJCWlmICh1c2VjYWNoZSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9m ZiA9IG9mZjsKLQkJCX0KKwkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAorCQkJCQkJ CQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCSAgYXR0bGVuLAorCQkJCQkJCQkJICB0 cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBhdHRsZW4sIHRw ICsgb2ZmKTsKKwkJfQogCi0JCQlpZiAoaSA9PSBhdHRudW0pCi0JCQkJYnJlYWs7CisJCWZvciAo OyBpIDwgYXR0bnVtOyBpKyspCisJCXsKKwkJCWludAkJCWF0dGxlbjsKIAotCQkJb2ZmID0gYXR0 X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKKwkJCWlmIChh dHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJaWYgKHVzZWNhY2hlICYmIGF0 dC0+YXR0bGVuIDw9IDApCi0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKKwkJCWNhdHRyID0gVHVwbGVE ZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKKwkJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47 CisKKwkJCS8qIEFzIGFib3ZlLCBoZWFwdHVwbGVzIGhhdmUgbm8gY3N0cmluZ3MgKi8KKwkJCXBn X2Fzc3VtZShhdHRsZW4gPiAwIHx8IGF0dGxlbiA9PSAtMSk7CisKKwkJCW9mZiA9IGF0dF9wb2lu dGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwgYXR0bGVuLAorCQkJCQkJCQkJICB0 cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBhdHRsZW4sIHRw ICsgb2ZmKTsKIAkJfQorCiAJfQogCi0JcmV0dXJuIGZldGNoYXR0KFR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzYywgYXR0bnVtKSwgdHAgKyBvZmYpOworCWNhdHRyID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnko b2ZmLAorCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJICBjYXR0ci0+YXR0bGVu LAorCQkJCQkJCSAgdHAgKyBvZmYpOworCisJcmV0dXJuIGZldGNoYXR0KGNhdHRyLCB0cCArIG9m Zik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNDcsNiArMTI2NCw3IEBAIGhlYXBf ZGVmb3JtX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGxlRGVzYywKIAkJCQkg IERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCkKIHsKIAlIZWFwVHVwbGVIZWFkZXIgdHVwID0g dHVwbGUtPnRfZGF0YTsKKwlDb21wYWN0QXR0cmlidXRlICpjYXR0cjsKIAlib29sCQloYXNudWxs cyA9IEhlYXBUdXBsZUhhc051bGxzKHR1cGxlKTsKIAlpbnQJCQl0ZGVzY19uYXR0cyA9IHR1cGxl RGVzYy0+bmF0dHM7CiAJaW50CQkJbmF0dHM7CQkJLyogbnVtYmVyIG9mIGF0dHMgdG8gZXh0cmFj dCAqLwpAQCAtMTM1NCw3MCArMTI3Miw5OCBAQCBoZWFwX2RlZm9ybV90dXBsZShIZWFwVHVwbGUg dHVwbGUsIFR1cGxlRGVzYyB0dXBsZURlc2MsCiAJY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byB0 dXBsZSBkYXRhICovCiAJdWludDMyCQlvZmY7CQkJLyogb2Zmc2V0IGluIHR1cGxlIGRhdGEgKi8K IAliaXRzOAkgICAqYnAgPSB0dXAtPnRfYml0czsJLyogcHRyIHRvIG51bGwgYml0bWFwIGluIHR1 cGxlICovCi0JYm9vbAkJc2xvdyA9IGZhbHNlOwkvKiBjYW4gd2UgdXNlL3NldCBhdHRjYWNoZW9m Zj8gKi8KKwlpbnQJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cjsKKwlpbnQJCQlmaXJzdE51bGxB dHRyOwogCiAJbmF0dHMgPSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXApOwogCisJLyogRGlk IHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQo dHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7CisKIAkvKgogCSAqIElu IGluaGVyaXRhbmNlIHNpdHVhdGlvbnMsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGdpdmVuIHR1 cGxlIGFjdHVhbGx5CiAJICogaGFzIG1vcmUgZmllbGRzIHRoYW4gdGhlIGNhbGxlciBpcyBleHBl Y3RpbmcuICBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YKIAkgKiB0aGUgY2FsbGVyJ3MgYXJyYXlz LgogCSAqLwogCW5hdHRzID0gTWluKG5hdHRzLCB0ZGVzY19uYXR0cyk7CisJZmlyc3ROb25DYWNo ZU9mZnNldEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIsIG5h dHRzKTsKKworCWlmIChoYXNudWxscykKKwl7CisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxs X2F0dHIoYnAsIG5hdHRzKTsKKworCQkvKgorCQkgKiBYWFg6IGl0J2QgYmUgbmljZSB0byB1c2Ug cG9wdWxhdGVfaXNudWxsX2FycmF5KCkgaGVyZSwgYnV0IHRoYXQKKwkJICogcmVxdWlyZXMgdGhh dCB0aGUgaXNudWxsIGFycmF5J3Mgc2l6ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0CisJCSAq IG11bHRpcGxlIG9mIDguICBEb2luZyB0aGF0IHdvdWxkIHJlcXVpcmUgYWRqdXN0aW5nIG1hbnkg bG9jYXRpb24KKwkJICogdGhhdCBhbGxvY2F0ZSB0aGUgYXJyYXkuCisJCSAqLworCQlmaXJzdE5v bkNhY2hlT2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgZmlyc3ROdWxs QXR0cik7CisJfQorCWVsc2UKKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOwogCiAJdHAgPSAoY2hh ciAqKSB0dXAgKyB0dXAtPnRfaG9mZjsKKwlhdHRudW0gPSAwOwogCi0Jb2ZmID0gMDsKKwlpZiAo Zmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPiAwKQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCisJCS8qIEluIEFzc2VydCBlbmFibGVkIGJ1aWxkcywgdmVyaWZ5IGF0dGNhY2hlb2ZmIGlz IGNvcnJlY3QgKi8KKwkJaW50CQkJb2ZmY2hlY2sgPSAwOworI2VuZGlmCisJCWRvCisJCXsKKwkJ CWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZjsKIAotCWZv ciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQorI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKwkJCW9mZmNoZWNrID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmZjaGVjaywg Y2F0dHItPmF0dGFsaWduYnkpOworCQkJQXNzZXJ0KG9mZmNoZWNrID09IGNhdHRyLT5hdHRjYWNo ZW9mZik7CisJCQlvZmZjaGVjayArPSBjYXR0ci0+YXR0bGVuOworI2VuZGlmCisKKwkJCXZhbHVl c1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAorCQkJCQkJCQkJCQkgY2F0dHIt PmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgY2F0dHItPmF0dGxlbik7CisJCX0gd2hpbGUgKCsrYXR0 bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOworCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsK Kwl9CisJZWxzZQorCQlvZmYgPSAwOworCisJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7 IGF0dG51bSsrKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsK KwkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCXZh bHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9m ZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0 dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJfQorCisJZm9yICg7IGF0 dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwl7CisJCUFzc2VydChoYXNudWxscyk7CiAKLQkJaWYg KGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCWlmIChhdHRfaXNudWxsKGF0 dG51bSwgYnApKQogCQl7CiAJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKIAkJCWlzbnVs bFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNlIGF0dGNhY2hl b2ZmIGFueW1vcmUgKi8KIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaXNudWxsW2F0dG51bV0gPSBm YWxzZTsKLQotCQlpZiAoIXNsb3cgJiYgdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCW9m ZiA9IHRoaXNhdHQtPmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0aGlzYXR0LT5hdHRsZW4gPT0g LTEpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUgb2Zmc2V0IGZvciBh IHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFi bHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwotCQkJICogcGFkIGJ5dGVzIGlu IGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IgZWl0aGVyCi0JCQkg KiBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCSAqLwotCQkJaWYgKCFzbG93ICYm Ci0JCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5 KSkKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCWVsc2UKLQkJCXsKLQkJCQlv ZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSwgLTEsCi0J CQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJc2xvdyA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxz ZQotCQl7Ci0JCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxp Z25ieSAqLwotCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFs aWduYnkpOwotCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7 Ci0JCX0KLQotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQsIHRwICsgb2ZmKTsK LQotCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5hdHRsZW4sIHRw ICsgb2ZmKTsKLQotCQlpZiAodGhpc2F0dC0+YXR0bGVuIDw9IDApCi0JCQlzbG93ID0gdHJ1ZTsJ CS8qIGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCisJCWNhdHRyID0gVHVwbGVEZXNj Q29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCisJCS8qIGFsaWduICdvZmYnLCBmZXRj aCB0aGUgZGF0dW0sIGFuZCBpbmNyZW1lbnQgb2ZmIGJleW9uZCB0aGUgZGF0dW0gKi8KKwkJdmFs dWVzW2F0dG51bV0gPSBhbGlnbl9mZXRjaF90aGVuX2FkZCh0cCwKKwkJCQkJCQkJCQkJICAmb2Zm LAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKIAl9CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYwppbmRleCBkNjM1MDIwMWUwMS4uOTIyODIwMzk2 NzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0dXBsZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0dXBsZS5jCkBAIC0yMjMsMTggKzIy Myw2IEBAIGluZGV4X2Zvcm1fdHVwbGVfY29udGV4dChUdXBsZURlc2MgdHVwbGVEZXNjcmlwdG9y LAogICoKICAqCQlUaGlzIGdldHMgY2FsbGVkIGZyb20gaW5kZXhfZ2V0YXR0cigpIG1hY3JvLCBh bmQgb25seSBpbiBjYXNlcwogICoJCXdoZXJlIHdlIGNhbid0IHVzZSBjYWNoZW9mZnNldCBhbmQg dGhlIHZhbHVlIGlzIG5vdCBudWxsLgotICoKLSAqCQlUaGlzIGNhY2hlcyBhdHRyaWJ1dGUgb2Zm c2V0cyBpbiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0b3IuCi0gKgotICoJCUFuIGFsdGVybmF0aXZl IHdheSB0byBzcGVlZCB0aGluZ3MgdXAgd291bGQgYmUgdG8gY2FjaGUgb2Zmc2V0cwotICoJCXdp dGggdGhlIHR1cGxlLCBidXQgdGhhdCBzZWVtcyBtb3JlIGRpZmZpY3VsdCB1bmxlc3MgeW91IHRh a2UKLSAqCQl0aGUgc3RvcmFnZSBoaXQgb2YgYWN0dWFsbHkgcHV0dGluZyB0aG9zZSBvZmZzZXRz IGludG8gdGhlCi0gKgkJdHVwbGUgeW91IHNlbmQgdG8gZGlzay4gIFl1Y2suCi0gKgotICoJCVRo aXMgc2NoZW1lIHdpbGwgYmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhhdCwgYnV0IHNob3VsZAot ICoJCXBlcmZvcm0gd2VsbCBmb3IgcXVlcmllcyB3aGljaCBoaXQgbGFyZ2UgIydzIG9mIHR1cGxl cy4gIEFmdGVyCi0gKgkJeW91IGNhY2hlIHRoZSBvZmZzZXRzIG9uY2UsIGV4YW1pbmluZyBhbGwg dGhlIG90aGVyIHR1cGxlcyB1c2luZwotICoJCXRoZSBzYW1lIGF0dHJpYnV0ZSBkZXNjcmlwdG9y IHdpbGwgZ28gbXVjaCBxdWlja2VyLiAtY2ltIDUvNC85MQogICogLS0tLS0tLS0tLS0tLS0tLQog ICovCiBEYXR1bQpAQCAtMjQyLDIwNSArMjMwLDEyNiBAQCBub2NhY2hlX2luZGV4X2dldGF0dHIo SW5kZXhUdXBsZSB0dXAsCiAJCQkJCSAgaW50IGF0dG51bSwKIAkJCQkJICBUdXBsZURlc2MgdHVw bGVEZXNjKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWNoYXIJICAgKnRwOwkJCQkv KiBwdHIgdG8gZGF0YSBwYXJ0IG9mIHR1cGxlICovCiAJYml0czgJICAgKmJwID0gTlVMTDsJCS8q IHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3cgPSBmYWxzZTsJLyog ZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJCWRhdGFfb2ZmOwkJLyogdHVwbGUg ZGF0YSBvZmZzZXQgKi8KIAlpbnQJCQlvZmY7CQkJLyogY3VycmVudCBvZmZzZXQgd2l0aGluIGRh dGEgKi8KKwlpbnQJCQlzdGFydEF0dHI7CisJaW50CQkJZmlyc3ROdWxsQXR0cjsKKwlib29sCQlo YXNudWxscyA9IEluZGV4VHVwbGVIYXNOdWxscyh0dXApOworCWludAkJCWk7CiAKLQkvKiAtLS0t LS0tLS0tLS0tLS0tCi0JICoJIFRocmVlIGNhc2VzOgotCSAqCi0JICoJIDE6IE5vIG51bGxzIGFu ZCBubyB2YXJpYWJsZS13aWR0aCBhdHRyaWJ1dGVzLgotCSAqCSAyOiBIYXMgYSBudWxsIG9yIGEg dmFyLXdpZHRoIEFGVEVSIGF0dC4KLQkgKgkgMzogSGFzIG51bGxzIG9yIHZhci13aWR0aHMgQkVG T1JFIGF0dC4KLQkgKiAtLS0tLS0tLS0tLS0tLS0tCi0JICovCi0KLQlkYXRhX29mZiA9IEluZGV4 SW5mb0ZpbmREYXRhT2Zmc2V0KHR1cC0+dF9pbmZvKTsKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQg dG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0 Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsKIAogCWF0dG51bS0tOwogCi0JaWYgKEluZGV4VHVw bGVIYXNOdWxscyh0dXApKQotCXsKLQkJLyoKLQkJICogdGhlcmUncyBhIG51bGwgc29tZXdoZXJl IGluIHRoZSB0dXBsZQotCQkgKgotCQkgKiBjaGVjayB0byBzZWUgaWYgZGVzaXJlZCBhdHQgaXMg bnVsbAotCQkgKi8KKwlkYXRhX29mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KHR1cC0+dF9p bmZvKTsKKwl0cCA9IChjaGFyICopIHR1cCArIGRhdGFfb2ZmOwogCi0JCS8qIFhYWCAia25vd3Mi IHRfYml0cyBhcmUganVzdCBhZnRlciBmaXhlZCB0dXBsZSBoZWFkZXIhICovCisJLyoKKwkgKiBU byByZWR1Y2UgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIHdlIG5lZWQgdG8gbG9vayBhdCwgd2Ug c3RhcnQgYXQgdGhlCisJICogaGlnaGVzdCBhdHRyaWJ1dGUgdGhhdCB3ZSBjYW4gd2hpY2ggaGFz IGEgY2FjaGVkIG9mZnNldC4gIFNpbmNlIHRoZQorCSAqIGF0dGNhY2hlb2ZmIGZvciBhbiBhdHRy aWJ1dGUgaXMgb25seSB2YWxpZCBpZiB0aGVyZSBhcmUgbm8gTlVMTHMgaW4KKwkgKiBwcmlvciBh dHRyaWJ1dGUsIHdlIG11c3QgbG9vayBmb3IgTlVMTHMgdG8gZGV0ZXJtaW5lIHRoZSBzdGFydCBh dHRyLgorCSAqLworCWlmIChoYXNudWxscykKKwl7CiAJCWJwID0gKGJpdHM4ICopICgoY2hhciAq KSB0dXAgKyBzaXplb2YoSW5kZXhUdXBsZURhdGEpKTsKLQotCQkvKgotCQkgKiBOb3cgY2hlY2sg dG8gc2VlIGlmIGFueSBwcmVjZWRpbmcgYml0cyBhcmUgbnVsbC4uLgotCQkgKi8KLQkJewotCQkJ aW50CQkJYnl0ZSA9IGF0dG51bSA+PiAzOwotCQkJaW50CQkJZmluYWxiaXQgPSBhdHRudW0gJiAw eDA3OwotCi0JCQkvKiBjaGVjayBmb3IgbnVsbHMgImJlZm9yZSIgZmluYWwgYml0IG9mIGxhc3Qg Ynl0ZSAqLwotCQkJaWYgKCh+YnBbYnl0ZV0pICYgKCgxIDw8IGZpbmFsYml0KSAtIDEpKQotCQkJ CXNsb3cgPSB0cnVlOwotCQkJZWxzZQotCQkJewotCQkJCS8qIGNoZWNrIGZvciBudWxscyBpbiBh bnkgImVhcmxpZXIiIGJ5dGVzICovCi0JCQkJaW50CQkJaTsKLQotCQkJCWZvciAoaSA9IDA7IGkg PCBieXRlOyBpKyspCi0JCQkJewotCQkJCQlpZiAoYnBbaV0gIT0gMHhGRikKLQkJCQkJewotCQkJ CQkJc2xvdyA9IHRydWU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQor CQlmaXJzdE51bGxBdHRyID0gZmlyc3RfbnVsbF9hdHRyKGJwLCBhdHRudW0pOwogCX0KKwllbHNl CisJCWZpcnN0TnVsbEF0dHIgPSBhdHRudW07CiAKLQl0cCA9IChjaGFyICopIHR1cCArIGRhdGFf b2ZmOwotCi0JaWYgKCFzbG93KQorCWlmICh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0 QXR0ciA+IDApCiAJewotCQlDb21wYWN0QXR0cmlidXRlICphdHQ7Ci0KLQkJLyoKLQkJICogSWYg d2UgZ2V0IGhlcmUsIHRoZXJlIGFyZSBubyBudWxscyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSB0 YXJnZXQKLQkJICogYXR0cmlidXRlLiAgSWYgd2UgaGF2ZSBhIGNhY2hlZCBvZmZzZXQsIHdlIGNh biB1c2UgaXQuCi0JCSAqLwotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2Ms IGF0dG51bSk7Ci0JCWlmIChhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlyZXR1cm4gZmV0Y2hh dHQoYXR0LCB0cCArIGF0dC0+YXR0Y2FjaGVvZmYpOwotCi0JCS8qCi0JCSAqIE90aGVyd2lzZSwg Y2hlY2sgZm9yIG5vbi1maXhlZC1sZW5ndGggYXR0cnMgdXAgdG8gYW5kIGluY2x1ZGluZwotCQkg KiB0YXJnZXQuICBJZiB0aGVyZSBhcmVuJ3QgYW55LCBpdCdzIHNhZmUgdG8gY2hlYXBseSBpbml0 aWFsaXplIHRoZQotCQkgKiBjYWNoZWQgb2Zmc2V0cyBmb3IgdGhlc2UgYXR0cnMuCi0JCSAqLwot CQlpZiAoSW5kZXhUdXBsZUhhc1ZhcndpZHRocyh0dXApKQotCQl7Ci0JCQlpbnQJCQlqOwotCi0J CQlmb3IgKGogPSAwOyBqIDw9IGF0dG51bTsgaisrKQotCQkJewotCQkJCWlmIChUdXBsZURlc2ND b21wYWN0QXR0cih0dXBsZURlc2MsIGopLT5hdHRsZW4gPD0gMCkKLQkJCQl7Ci0JCQkJCXNsb3cg PSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJc3RhcnRBdHRyID0gTWlu KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyIC0gMSwgZmlyc3ROdWxsQXR0cik7 CisJCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgc3RhcnRBdHRyKS0+YXR0 Y2FjaGVvZmY7CiAJfQotCi0JaWYgKCFzbG93KQorCWVsc2UKIAl7Ci0JCWludAkJCW5hdHRzID0g dHVwbGVEZXNjLT5uYXR0czsKLQkJaW50CQkJaiA9IDE7Ci0KLQkJLyoKLQkJICogSWYgd2UgZ2V0 IGhlcmUsIHdlIGhhdmUgYSB0dXBsZSB3aXRoIG5vIG51bGxzIG9yIHZhci13aWR0aHMgdXAgdG8K LQkJICogYW5kIGluY2x1ZGluZyB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSwgc28gd2UgY2FuIHVzZSB0 aGUgY2FjaGVkIG9mZnNldAotCQkgKiAuLi4gb25seSB3ZSBkb24ndCBoYXZlIGl0IHlldCwgb3Ig d2UnZCBub3QgaGF2ZSBnb3QgaGVyZS4gIFNpbmNlCi0JCSAqIGl0J3MgY2hlYXAgdG8gY29tcHV0 ZSBvZmZzZXRzIGZvciBmaXhlZC13aWR0aCBjb2x1bW5zLCB3ZSB0YWtlIHRoZQotCQkgKiBvcHBv cnR1bml0eSB0byBpbml0aWFsaXplIHRoZSBjYWNoZWQgb2Zmc2V0cyBmb3IgKmFsbCogdGhlIGxl YWRpbmcKLQkJICogZml4ZWQtd2lkdGggY29sdW1ucywgaW4gaG9wZSBvZiBhdm9pZGluZyBmdXR1 cmUgdmlzaXRzIHRvIHRoaXMKLQkJICogcm91dGluZS4KLQkJICovCi0JCVR1cGxlRGVzY0NvbXBh Y3RBdHRyKHR1cGxlRGVzYywgMCktPmF0dGNhY2hlb2ZmID0gMDsKKwkJc3RhcnRBdHRyID0gMDsK KwkJb2ZmID0gMDsKKwl9CiAKLQkJLyogd2UgbWlnaHQgaGF2ZSBzZXQgc29tZSBvZmZzZXRzIGlu IHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3aGlsZSAoaiA8IG5hdHRzICYmIFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGNhY2hlb2ZmID4gMCkKLQkJCWorKzsK KwkvKgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0aGUgZmlyc3QgTlVMTCBhdHRyLiAgV2Ug dXNlIHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0aGUgdHVwbGUgaGFzIG5vIHZhcmlhYmxl LXdpZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdpZHRoCisJICogY29sdW1ucyBleGlzdCB3 ZSB1c2UgYXR0X2FkZGxlbmd0aF9wb2ludGVyKCkgdG8gbW92ZSB0aGUgb2Zmc2V0IGJleW9uZAor CSAqIHRoZSBjdXJyZW50IGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAoSW5kZXhUdXBsZUhhc1Zhcndp ZHRocyh0dXApKQorCXsKKwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgdXAgdW50aWwgdGhlIGZp cnN0IE5VTEwgKi8KKwkJZm9yIChpID0gc3RhcnRBdHRyOyBpIDwgZmlyc3ROdWxsQXR0cjsgaSsr KQorCQl7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CiAK LQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqIC0gMSktPmF0dGNhY2hl b2ZmICsKLQkJCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiAtIDEpLT5hdHRsZW47 CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0 dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJCQkgIHRwICsgb2Zm KTsKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGNhdHRyLT5hdHRsZW4sIHRw ICsgb2ZmKTsKKwkJfQogCi0JCWZvciAoOyBqIDwgbmF0dHM7IGorKykKKwkJLyogQ2FsY3VsYXRl IHRoZSBvZmZzZXQgZm9yIGFueSByZW1haW5pbmcgY29sdW1ucy4gKi8KKwkJZm9yICg7IGkgPCBh dHRudW07IGkrKykKIAkJewotCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBqKTsKKwkJCUFzc2VydChoYXNudWxscyk7CiAKLQkJCWlmIChh dHQtPmF0dGxlbiA8PSAwKQotCQkJCWJyZWFrOworCQkJaWYgKGF0dF9pc251bGwoaSwgYnApKQor CQkJCWNvbnRpbnVlOwogCi0JCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5h dHRhbGlnbmJ5KTsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBp KTsKIAotCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQotCQkJb2ZmICs9IGF0dC0+YXR0bGVu OworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5h dHRhbGlnbmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9m Zik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0 cCArIG9mZik7CiAJCX0KLQotCQlBc3NlcnQoaiA+IGF0dG51bSk7Ci0KLQkJb2ZmID0gVHVwbGVE ZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pLT5hdHRjYWNoZW9mZjsKIAl9CiAJZWxz ZQogCXsKLQkJYm9vbAkJdXNlY2FjaGUgPSB0cnVlOwotCQlpbnQJCQlpOworCQkvKiBIYW5kbGUg dHVwbGVzIHdpdGggb25seSBmaXhlZC13aWR0aCBhdHRyaWJ1dGVzICovCiAKLQkJLyoKLQkJICog Tm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRvIHdhbGsgdGhlIHR1cGxlIENBUkVGVUxMWS4gIEJ1 dCB3ZSBzdGlsbAotCQkgKiBtaWdodCBiZSBhYmxlIHRvIGNhY2hlIHNvbWUgb2Zmc2V0cyBmb3Ig bmV4dCB0aW1lLgotCQkgKgotCQkgKiBOb3RlIC0gVGhpcyBsb29wIGlzIGEgbGl0dGxlIHRyaWNr eS4gIEZvciBlYWNoIG5vbi1udWxsIGF0dHJpYnV0ZSwKLQkJICogd2UgaGF2ZSB0byBmaXJzdCBh Y2NvdW50IGZvciBhbGlnbm1lbnQgcGFkZGluZyBiZWZvcmUgdGhlIGF0dHIsCi0JCSAqIHRoZW4g YWR2YW5jZSBvdmVyIHRoZSBhdHRyIGJhc2VkIG9uIGl0cyBsZW5ndGguICBOdWxscyBoYXZlIG5v Ci0JCSAqIHN0b3JhZ2UgYW5kIG5vIGFsaWdubWVudCBwYWRkaW5nIGVpdGhlci4gIFdlIGNhbiB1 c2Uvc2V0Ci0JCSAqIGF0dGNhY2hlb2ZmIHVudGlsIHdlIHJlYWNoIGVpdGhlciBhIG51bGwgb3Ig YSB2YXItd2lkdGggYXR0cmlidXRlLgotCQkgKi8KLQkJb2ZmID0gMDsKLQkJZm9yIChpID0gMDs7 IGkrKykJCS8qIGxvb3AgZXhpdCBpcyBhdCAiYnJlYWsiICovCisJCS8qIENhbGN1bGF0ZSB0aGUg b2Zmc2V0IHVwIHVudGlsIHRoZSBmaXJzdCBOVUxMICovCisJCWZvciAoaSA9IHN0YXJ0QXR0cjsg aSA8IGZpcnN0TnVsbEF0dHI7IGkrKykKIAkJewotCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKLQotCQkJaWYgKEluZGV4VHVwbGVI YXNOdWxscyh0dXApICYmIGF0dF9pc251bGwoaSwgYnApKQotCQkJewotCQkJCXVzZWNhY2hlID0g ZmFsc2U7Ci0JCQkJY29udGludWU7CQkvKiB0aGlzIGNhbm5vdCBiZSB0aGUgdGFyZ2V0IGF0dCAq LwotCQkJfQotCi0JCQkvKiBJZiB3ZSBrbm93IHRoZSBuZXh0IG9mZnNldCwgd2UgY2FuIHNraXAg dGhlIHJlc3QgKi8KLQkJCWlmICh1c2VjYWNoZSAmJiBhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0J CQkJb2ZmID0gYXR0LT5hdHRjYWNoZW9mZjsKLQkJCWVsc2UgaWYgKGF0dC0+YXR0bGVuID09IC0x KQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3Ig YSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0 YWJseSBhbGlnbmVkLCBzbyB0aGF0IHRoZXJlIHdvdWxkIGJlCi0JCQkJICogbm8gcGFkIGJ5dGVz IGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IKLQkJCQkgKiBl aXRoZXIgYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFsdWUuCi0JCQkJICovCi0JCQkJaWYgKHVz ZWNhY2hlICYmCi0JCQkJCW9mZiA9PSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRh bGlnbmJ5KSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCQllbHNlCi0JCQkJewot CQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5LCAtMSwK LQkJCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJCXVzZWNhY2hlID0gZmFsc2U7Ci0JCQkJfQot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIG5vdCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBh dHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYs IGF0dC0+YXR0YWxpZ25ieSk7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxl RGVzYywgaSk7CisKKwkJCUFzc2VydChjYXR0ci0+YXR0bGVuID4gMCk7CisJCQlvZmYgPSBhdHRf cG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJ CQkJCQkgIGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJCW9mZiArPSBj YXR0ci0+YXR0bGVuOworCQl9CiAKLQkJCQlpZiAodXNlY2FjaGUpCi0JCQkJCWF0dC0+YXR0Y2Fj aGVvZmYgPSBvZmY7Ci0JCQl9CisJCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGZvciBhbnkgcmVt YWluaW5nIGNvbHVtbnMuICovCisJCWZvciAoOyBpIDwgYXR0bnVtOyBpKyspCisJCXsKKwkJCUFz c2VydChoYXNudWxscyk7CiAKLQkJCWlmIChpID09IGF0dG51bSkKLQkJCQlicmVhazsKKwkJCWlm IChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJb2ZmID0gYXR0X2FkZGxl bmd0aF9wb2ludGVyKG9mZiwgYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKKwkJCWNhdHRyID0gVHVw bGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKIAotCQkJaWYgKHVzZWNhY2hlICYmIGF0 dC0+YXR0bGVuIDw9IDApCi0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKKwkJCUFzc2VydChjYXR0ci0+ YXR0bGVuID4gMCk7CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJ CSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJ CQkgIHRwICsgb2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+YXR0bGVuOwogCQl9CiAJfQogCi0JcmV0 dXJuIGZldGNoYXR0KFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKSwgdHAg KyBvZmYpOworCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0p OworCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJ CQkJCQkgIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKKwlyZXR1cm4gZmV0Y2hhdHQoY2F0dHIs IHRwICsgb2ZmKTsKIH0KIAogLyoKQEAgLTQ4MCw2MyArMzg5LDg3IEBAIGluZGV4X2RlZm9ybV90 dXBsZV9pbnRlcm5hbChUdXBsZURlc2MgdHVwbGVEZXNjcmlwdG9yLAogCQkJCQkJCURhdHVtICp2 YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJCQljaGFyICp0cCwgYml0czggKmJwLCBpbnQgaGFz bnVsbHMpCiB7CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJaW50CQkJbmF0dHMgPSB0dXBs ZURlc2NyaXB0b3ItPm5hdHRzOyAvKiBudW1iZXIgb2YgYXR0cyB0byBleHRyYWN0ICovCi0JaW50 CQkJYXR0bnVtOwotCWludAkJCW9mZiA9IDA7CQkvKiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwot CWJvb2wJCXNsb3cgPSBmYWxzZTsJLyogY2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVvZmY/ICovCisJ aW50CQkJYXR0bnVtID0gMDsKKwl1aW50MzIJCW9mZiA9IDA7CQkvKiBvZmZzZXQgaW4gdHVwbGUg ZGF0YSAqLworCWludAkJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyOworCWludAkJCWZpcnN0TnVs bEF0dHI7CiAKIAkvKiBBc3NlcnQgdG8gcHJvdGVjdCBjYWxsZXJzIHdobyBhbGxvY2F0ZSBmaXhl ZC1zaXplIGFycmF5cyAqLwogCUFzc2VydChuYXR0cyA8PSBJTkRFWF9NQVhfS0VZUyk7CiAKLQlm b3IgKGF0dG51bSA9IDA7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwkvKiBEaWQgc29tZW9u ZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURl c2NyaXB0b3ItPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsKKworCWZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyID0gTWluKHR1cGxlRGVzY3JpcHRvci0+Zmlyc3ROb25DYWNoZWRPZmZzZXRB dHRyLCBuYXR0cyk7CisKKwlpZiAoaGFzbnVsbHMpCisJeworCQlmaXJzdE51bGxBdHRyID0gZmly c3RfbnVsbF9hdHRyKGJwLCBuYXR0cyk7CisJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyID0gTWlu KGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyLCBmaXJzdE51bGxBdHRyKTsKKwl9CisJZWxzZQorCQlm aXJzdE51bGxBdHRyID0gbmF0dHM7CisKKwlpZiAoZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPiAw KQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCS8qIEluIEFzc2VydCBlbmFibGVk IGJ1aWxkcywgdmVyaWZ5IGF0dGNhY2hlb2ZmIGlzIGNvcnJlY3QgKi8KKwkJb2ZmID0gMDsKKyNl bmRpZgorCisJCWRvCisJCXsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQljYXR0ciA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKworI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBj YXR0ci0+YXR0YWxpZ25ieSk7CisJCQlBc3NlcnQob2ZmID09IGNhdHRyLT5hdHRjYWNoZW9mZik7 CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKKyNlbmRpZgorCisJCQl2YWx1ZXNbYXR0bnVtXSA9 IGZldGNoX2F0dF9ub2Vycih0cCArIGNhdHRyLT5hdHRjYWNoZW9mZiwgY2F0dHItPmF0dGJ5dmFs LAorCQkJCQkJCQkJCQkgY2F0dHItPmF0dGxlbik7CisJCX0gd2hpbGUgKCsrYXR0bnVtIDwgZmly c3ROb25DYWNoZU9mZnNldEF0dHIpOworCisJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZiArIGNh dHRyLT5hdHRsZW47CisJfQorCisJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51 bSsrKQorCXsKKwkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJY2F0dHIgPSBUdXBsZURlc2ND b21wYWN0QXR0cih0dXBsZURlc2NyaXB0b3IsIGF0dG51bSk7CisKKwkJLyogYWxpZ24gJ29mZics IGZldGNoIHRoZSBkYXR1bSwgYW5kIGluY3JlbWVudCBvZmYgYmV5b25kIHRoZSBkYXR1bSAqLwor CQl2YWx1ZXNbYXR0bnVtXSA9IGFsaWduX2ZldGNoX3RoZW5fYWRkKHRwLAorCQkJCQkJCQkJCQkg ICZvZmYsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgIGNhdHRy LT5hdHRsZW4sCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnkpOworCX0KKworCWZvciAo OyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAJewotCQlDb21wYWN0QXR0cmlidXRlICp0aGlz YXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjcmlwdG9yLCBhdHRudW0pOworCQlB c3NlcnQoaGFzbnVsbHMpOwogCi0JCWlmIChoYXNudWxscyAmJiBhdHRfaXNudWxsKGF0dG51bSwg YnApKQorCQlpZiAoYXR0X2lzbnVsbChhdHRudW0sIGJwKSkKIAkJewogCQkJdmFsdWVzW2F0dG51 bV0gPSAoRGF0dW0pIDA7CiAJCQlpc251bGxbYXR0bnVtXSA9IHRydWU7Ci0JCQlzbG93ID0gdHJ1 ZTsJCS8qIGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCiAJCQljb250aW51ZTsKIAkJ fQogCiAJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7Ci0KLQkJaWYgKCFzbG93ICYmIHRoaXNhdHQt PmF0dGNhY2hlb2ZmID49IDApCi0JCQlvZmYgPSB0aGlzYXR0LT5hdHRjYWNoZW9mZjsKLQkJZWxz ZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0JCQkvKgotCQkJICogV2UgY2FuIG9u bHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCSAq IG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQg YmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdpbGwg YmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFsdWUu Ci0JCQkgKi8KLQkJCWlmICghc2xvdyAmJgotCQkJCW9mZiA9PSBhdHRfbm9taW5hbF9hbGlnbmJ5 KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPSBv ZmY7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIHRo aXNhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCSAgdHAgKyBvZmYpOwotCQkJCXNsb3cg PSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHZhcmxlbmEsIHNvIHNh ZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCW9mZiA9IGF0dF9ub21pbmFsX2Fs aWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJaWYgKCFzbG93KQotCQkJCXRo aXNhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQl9Ci0KLQkJdmFsdWVzW2F0dG51bV0gPSBmZXRj aGF0dCh0aGlzYXR0LCB0cCArIG9mZik7Ci0KLQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVy KG9mZiwgdGhpc2F0dC0+YXR0bGVuLCB0cCArIG9mZik7Ci0KLQkJaWYgKHRoaXNhdHQtPmF0dGxl biA8PSAwKQotCQkJc2xvdyA9IHRydWU7CQkvKiBjYW4ndCB1c2UgYXR0Y2FjaGVvZmYgYW55bW9y ZSAqLworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0 bnVtKTsKKworCQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50 IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hf dGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0 Ynl2YWwsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+ YXR0YWxpZ25ieSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCmluZGV4 IDIxMzczODVhODMzLi40MTA4NWQ0M2M4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNj LmMKQEAgLTE5Nyw2ICsxOTcsMTAgQEAgQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoaW50IG5hdHRz KQogCWRlc2MtPnRkdHlwbW9kID0gLTE7CiAJZGVzYy0+dGRyZWZjb3VudCA9IC0xOwkJLyogYXNz dW1lIG5vdCByZWZlcmVuY2UtY291bnRlZCAqLwogCisJLyogVGhpcyB3aWxsIGJlIHNldCB0byB0 aGUgY29ycmVjdCB2YWx1ZSBieSBUdXBsZURlc2NGaW5hbGl6ZSgpICovCisJZGVzYy0+Zmlyc3RO b25DYWNoZWRPZmZzZXRBdHRyID0gLTE7CisJZGVzYy0+Zmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9 IC0xOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQ1Nyw2ICs0NjEsOSBAQCBUdXBsZURlc2ND b3B5KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAgKgkJZGVzY3JpcHRvciB0byBhbm90 aGVyLgogICoKICAqICEhISBDb25zdHJhaW50cyBhbmQgZGVmYXVsdHMgYXJlIG5vdCBjb3BpZWQg ISEhCisgKgorICogVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBjYWxsaW5nIFR1cGxlRGVz Y0ZpbmFsaXplKCkgb24gb25jZSBhbGwKKyAqIFR1cGxlRGVzYyBjaGFuZ2VzIGhhdmUgYmVlbiBt YWRlLgogICovCiB2b2lkCiBUdXBsZURlc2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0ck51 bWJlciBkc3RBdHRubywKQEAgLTQ4OSw2ICs0OTYsNDUgQEAgVHVwbGVEZXNjQ29weUVudHJ5KFR1 cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJcG9wdWxhdGVfY29tcGFjdF9hdHRy aWJ1dGUoZHN0LCBkc3RBdHRubyAtIDEpOwogfQogCisvKgorICogVHVwbGVEZXNjRmluYWxpemUK KyAqCQlGaW5hbGl6ZSB0aGUgZ2l2ZW4gVHVwbGVEZXNjLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBh ZnRlciB0aGUKKyAqCQlhdHRyaWJ1dGVzIGFycmF5cyBoYXZlIGJlZW4gcG9wdWxhdGVkIG9yIGFk anVzdGVkIGJ5IGFueSBjb2RlLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHBvcHVsYXRl X2NvbXBhY3RfYXR0cmlidXRlKCkgYW5kIGJlZm9yZQorICogQmxlc3NUdXBsZURlc2MoKS4KKyAq Lwordm9pZAorVHVwbGVEZXNjRmluYWxpemUoVHVwbGVEZXNjIHR1cGRlc2MpCit7CisJaW50CQkJ Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gMDsKKwlpbnQJCQlmaXJzdE5vbkd1YXJhbnRlZWRB dHRyID0gdHVwZGVzYy0+bmF0dHM7CisJaW50CQkJb2ZmID0gMDsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRy ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgaSk7CisKKwkJaWYgKGZpcnN0Tm9uR3Vh cmFudGVlZEF0dHIgPT0gdHVwZGVzYy0+bmF0dHMgJiYKKwkJCShjYXR0ci0+YXR0bnVsbGFiaWxp dHkgIT0gQVRUTlVMTEFCTEVfVkFMSUQgfHwgIWNhdHRyLT5hdHRieXZhbCB8fAorCQkJIGNhdHRy LT5hdHRoYXNtaXNzaW5nIHx8IGNhdHRyLT5hdHRpc2Ryb3BwZWQgfHwgY2F0dHItPmF0dGxlbiA8 PSAwKSkKKwkJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBpOworCisJCWlmIChjYXR0ci0+YXR0 bGVuIDw9IDApCisJCQlicmVhazsKKworCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwg Y2F0dHItPmF0dGFsaWduYnkpOworCisJCWNhdHRyLT5hdHRjYWNoZW9mZiA9IG9mZjsKKworCQlv ZmYgKz0gY2F0dHItPmF0dGxlbjsKKwkJZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gaSArIDE7 CisJfQorCisJdHVwZGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gZmlyc3ROb25DYWNo ZWRPZmZzZXRBdHRyOworCXR1cGRlc2MtPmZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBmaXJzdE5v bkd1YXJhbnRlZWRBdHRyOworfQorCiAvKgogICogRnJlZSBhIFR1cGxlRGVzYyBpbmNsdWRpbmcg YWxsIHN1YnN0cnVjdHVyZQogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5k ZXggYjI0NmU4MTI3ZGIuLmE0Njk0YmQ4MDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jCkBAIC0zMzUsOSArMzM1LDYgQEAgZ2V0U3BHaXN0VHVwbGVEZXNjKFJlbGF0aW9uIGlu ZGV4LCBTcEdpc3RUeXBlRGVzYyAqa2V5VHlwZSkKIAkJLyogV2Ugc2hvdWxkbid0IG5lZWQgdG8g Ym90aGVyIHdpdGggbWFraW5nIHRoZXNlIHZhbGlkOiAqLwogCQlhdHQtPmF0dGNvbXByZXNzaW9u ID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCQlhdHQtPmF0dGNvbGxhdGlvbiA9IEludmFs aWRPaWQ7Ci0JCS8qIEluIGNhc2Ugd2UgY2hhbmdlZCB0eXBsZW4sIHdlJ2QgYmV0dGVyIHJlc2V0 IGZvbGxvd2luZyBvZmZzZXRzICovCi0JCWZvciAoaW50IGkgPSBzcGdGaXJzdEluY2x1ZGVDb2x1 bW47IGkgPCBvdXRUdXBEZXNjLT5uYXR0czsgaSsrKQotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIo b3V0VHVwRGVzYywgaSktPmF0dGNhY2hlb2ZmID0gLTE7CiAKIAkJcG9wdWxhdGVfY29tcGFjdF9h dHRyaWJ1dGUob3V0VHVwRGVzYywgc3BnS2V5Q29sdW1uKTsKIAkJVHVwbGVEZXNjRmluYWxpemUo b3V0VHVwRGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggZTZhYjUxZTY0MDQu LjgwZmFmMjliNzk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC05OTMsMjE4ICs5 OTMsMjQyIEBAIHR0c19idWZmZXJfaGVhcF9zdG9yZV90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwgSGVhcFR1cGxlIHR1cGxlLAogfQogCiAvKgotICogc2xvdF9kZWZvcm1faGVhcF90dXBsZV9p bnRlcm5hbAotICoJCUFuIGFsd2F5cyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGZvciB1c2UgaW4g c2xvdF9kZWZvcm1faGVhcF90dXBsZSB0bwotICoJCWFsbG93IHRoZSBjb21waWxlciB0byBlbWl0 IHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gZm9yCi0gKgkJdmFyaW91cyBj b21iaW5hdGlvbnMgb2YgInNsb3ciIGFuZCAiaGFzbnVsbHMiLiAgRm9yIGV4YW1wbGUsIGlmIGEK LSAqCQlnaXZlbiB0dXBsZSBoYXMgbm8gbnVsbHMsIHRoZW4gd2UgbmVlZG4ndCBjaGVjayAiaGFz bnVsbHMiIGZvciBldmVyeQotICoJCWF0dHJpYnV0ZSB0aGF0IHdlJ3JlIGRlZm9ybWluZy4gIFRo ZSBjYWxsZXIgY2FuIGp1c3QgY2FsbCB0aGlzCi0gKgkJZnVuY3Rpb24gd2l0aCBoYXNudWxscyBz ZXQgdG8gY29uc3RhbnQtZmFsc2UgYW5kIGhhdmUgdGhlIGNvbXBpbGVyCi0gKgkJcmVtb3ZlIHRo ZSBjb25zdGFudC1mYWxzZSBicmFuY2hlcyBhbmQgZW1pdCBtb3JlIG9wdGltYWwgY29kZS4KLSAq Ci0gKiBSZXR1cm5zIHRoZSBuZXh0IGF0dG51bSB0byBkZWZvcm0sIHdoaWNoIGNhbiBiZSBlcXVh bCB0byBuYXR0cyB3aGVuIHRoZQotICogZnVuY3Rpb24gbWFuYWdlcyB0byBkZWZvcm0gYWxsIHJl cXVlc3RlZCBhdHRyaWJ1dGVzLiAgKm9mZnAgaXMgYW4gaW5wdXQgYW5kCi0gKiBvdXRwdXQgcGFy YW1ldGVyIHdoaWNoIGlzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIHR1cGxlIHRvIHN0YXJ0 IGRlZm9ybWluZwotICogZnJvbSB3aGljaCwgb24gcmV0dXJuLCBnZXRzIHNldCB0byB0aGUgb2Zm c2V0IHdoZXJlIHRoZSBuZXh0IGF0dHJpYnV0ZQotICogc2hvdWxkIGJlIGRlZm9ybWVkIGZyb20u ICAqc2xvd3AgaXMgc2V0IHRvIHRydWUgd2hlbiBzdWJzZXF1ZW50IGRlZm9ybWluZwotICogb2Yg dGhpcyB0dXBsZSBtdXN0IHVzZSBhIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoICJzbG93 IiBwYXNzZWQgYXMKLSAqIHRydWUuCi0gKgotICogQ2FsbGVycyBjYW5ub3QgYXNzdW1lIHdoZW4g d2UgcmV0dXJuICJhdHRudW0iIChpLmUuIGFsbCByZXF1ZXN0ZWQKLSAqIGF0dHJpYnV0ZXMgaGF2 ZSBiZWVuIGRlZm9ybWVkKSB0aGF0IHNsb3cgbW9kZSBpc24ndCByZXF1aXJlZCBmb3IgYW55Ci0g KiBhZGRpdGlvbmFsIGRlZm9ybWluZyBhcyB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlIGNh dXNlZCBhIHN3aXRjaCB0bwotICogc2xvdyBtb2RlLgorICogc2xvdF9kZWZvcm1faGVhcF90dXBs ZQorICoJCUdpdmVuIGEgVHVwbGVUYWJsZVNsb3QsIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBzbG90 J3MgcGh5c2ljYWwgdHVwbGUKKyAqCQlpbnRvIGl0cyBEYXR1bS9pc251bGwgYXJyYXlzLiAgRGF0 YSBpcyBleHRyYWN0ZWQgdXAgdGhyb3VnaCB0aGUKKyAqCQluYXR0cyd0aCBjb2x1bW4gKGNhbGxl ciBtdXN0IGVuc3VyZSB0aGlzIGlzIGEgbGVnYWwgY29sdW1uIG51bWJlcikuCisgKgorICoJCVRo aXMgaXMgZXNzZW50aWFsbHkgYW4gaW5jcmVtZW50YWwgdmVyc2lvbiBvZiBoZWFwX2RlZm9ybV90 dXBsZToKKyAqCQlvbiBlYWNoIGNhbGwgd2UgZXh0cmFjdCBhdHRyaWJ1dGVzIHVwIHRvIHRoZSBv bmUgbmVlZGVkLCB3aXRob3V0CisgKgkJcmUtY29tcHV0aW5nIGluZm9ybWF0aW9uIGFib3V0IHBy ZXZpb3VzbHkgZXh0cmFjdGVkIGF0dHJpYnV0ZXMuCisgKgkJc2xvdC0+dHRzX252YWxpZCBpcyB0 aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYWxyZWFkeSBleHRyYWN0ZWQuCisgKgorICogVGhpcyBp cyBtYXJrZWQgYXMgYWx3YXlzIGlubGluZSwgc28gdGhlIGRpZmZlcmVudCBvZmZwIGZvciBkaWZm ZXJlbnQgdHlwZXMKKyAqIG9mIHNsb3RzIGdldHMgb3B0aW1pemVkIGF3YXkuCiAgKi8KLXN0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBpbnQKLXNsb3RfZGVmb3JtX2hlYXBfdHVwbGVf aW50ZXJuYWwoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwKLQkJCQkJCQkJ aW50IGF0dG51bSwgaW50IG5hdHRzLCBib29sIHNsb3csCi0JCQkJCQkJCWJvb2wgaGFzbnVsbHMs IHVpbnQzMiAqb2ZmcCwgYm9vbCAqc2xvd3ApCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgdm9pZAorc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwg SGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCisJCQkJCSAgIGludCBuYXR0cykKIHsKKwlD b21wYWN0QXR0cmlidXRlICpjYXR0cjsKIAlUdXBsZURlc2MJdHVwbGVEZXNjID0gc2xvdC0+dHRz X3R1cGxlRGVzY3JpcHRvcjsKLQlEYXR1bQkgICAqdmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsK LQlib29sCSAgICppc251bGwgPSBzbG90LT50dHNfaXNudWxsOwogCUhlYXBUdXBsZUhlYWRlciB0 dXAgPSB0dXBsZS0+dF9kYXRhOworCWludAkJCWF0dG51bTsKKwlpbnQJCQlmaXJzdE5vbkNhY2hl T2Zmc2V0QXR0cjsKKwlpbnQJCQlmaXJzdE5vbkd1YXJhbnRlZWRBdHRyOworCWludAkJCWZpcnN0 TnVsbEF0dHI7CisJRGF0dW0JICAgKnZhbHVlczsKKwlib29sCSAgICppc251bGw7CiAJY2hhcgkg ICAqdHA7CQkJCS8qIHB0ciB0byB0dXBsZSBkYXRhICovCi0JYml0czgJICAgKmJwID0gdHVwLT50 X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3duZXh0 ID0gZmFsc2U7CisJdWludDMyCQlvZmY7CQkJLyogb2Zmc2V0IGluIHR1cGxlIGRhdGEgKi8KIAot CXRwID0gKGNoYXIgKikgdHVwICsgdHVwLT50X2hvZmY7CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0 IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjLT5maXJz dE5vbkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7CiAKLQlmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0 dG51bSsrKQorCWlzbnVsbCA9IHNsb3QtPnR0c19pc251bGw7CisKKwkvKgorCSAqIFNvbWUgY2Fs bGVycyBtYXkgZm9ybSBhbmQgZGVmb3JtIHR1cGxlcyBwcmlvciB0byBOT1QgTlVMTCBjb25zdHJh aW50cworCSAqIGJlaW5nIGNoZWNrZWQuICBIZXJlIHdlJ2QgbGlrZSB0byBvcHRpbWl6ZSB0aGUg Y2FzZSB3aGVyZSB3ZSBvbmx5IG5lZWQKKwkgKiB0byBmZXRjaCBhdHRyaWJ1dGVzIGJlZm9yZSBv ciB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGF0dHJpYnV0ZSBpcworCSAqIGd1YXJhbnRlZWQg dG8gZXhpc3QgaW4gdGhlIHR1cGxlLiAgV2UgcmVseSBvbiB0aGUgc2xvdCBmbGFnIGJlaW5nIHNl dAorCSAqIGNvcnJlY3RseSB0byBvbmx5IGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbiB3aGVuIGl0 J3MgdmFsaWQgdG8gZG8gc28uCisJICogVGhpcyBvcHRpbWl6YXRpb24gYWxsb3dzIHVzIHRvIHNh dmUgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzCisJICogZnJvbSB0aGUgdHVwbGUg YW5kIHNhdmVzIHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgaGFuZGxpbmcgbm9uLWJ5dmFsCisJICog YXR0cnMuCisJICovCisJaWYgKFRUU19PQkVZU19OT1RfTlVMTF9DT05TVFJBSU5UUyhzbG90KSkK KwkJZmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IE1pbihuYXR0cywgdHVwbGVEZXNjLT5maXJzdE5v bkd1YXJhbnRlZWRBdHRyKTsKKwllbHNlCisJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSAwOwor CisJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPSB0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zm c2V0QXR0cjsKKworCWlmIChIZWFwVHVwbGVIYXNOdWxscyh0dXBsZSkpCiAJewotCQlDb21wYWN0 QXR0cmlidXRlICp0aGlzYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRu dW0pOworCQlpbnQJCQl0dXBuYXR0cyA9IEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cCk7CiAK LQkJaWYgKGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCXRwID0gKGNoYXIg KikgdHVwICsgTUFYQUxJR04ob2Zmc2V0b2YoSGVhcFR1cGxlSGVhZGVyRGF0YSwgdF9iaXRzKSAr CisJCQkJCQkJCQkgQklUTUFQTEVOKHR1cG5hdHRzKSk7CisKKwkJbmF0dHMgPSBNaW4odHVwbmF0 dHMsIG5hdHRzKTsKKwkJaWYgKG5hdHRzID4gZmlyc3ROb25HdWFyYW50ZWVkQXR0cikKIAkJewot CQkJdmFsdWVzW2F0dG51bV0gPSAoRGF0dW0pIDA7Ci0JCQlpc251bGxbYXR0bnVtXSA9IHRydWU7 Ci0JCQlpZiAoIXNsb3cpCi0JCQl7Ci0JCQkJKnNsb3dwID0gdHJ1ZTsKLQkJCQlyZXR1cm4gYXR0 bnVtICsgMTsKLQkJCX0KLQkJCWVsc2UKLQkJCQljb250aW51ZTsKLQkJfQorCQkJYml0czgJICAg KmJwID0gdHVwLT50X2JpdHM7CiAKLQkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJCS8qIEZp bmQgdGhlIGZpcnN0IE5VTEwgYXR0ciAqLworCQkJZmlyc3ROdWxsQXR0ciA9IGZpcnN0X251bGxf YXR0cihicCwgbmF0dHMpOwogCi0JCS8qIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoaXMgYXR0 cmlidXRlICovCi0JCWlmICghc2xvdyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJ Km9mZnAgPSB0aGlzYXR0LT5hdHRjYWNoZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVu ID09IC0xKQotCQl7CiAJCQkvKgotCQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBm b3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1 aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRl cyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgot CQkJICogYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFsdWUuCisJCQkgKiBBbmQgcG9wdWxhdGUg dGhlIGlzbnVsbCBhcnJheSBmb3IgYWxsIGF0dHJpYnV0ZXMgYmVpbmcgZmV0Y2hlZAorCQkJICog ZnJvbSB0aGUgdHVwbGUuCiAJCQkgKi8KLQkJCWlmICghc2xvdyAmJiAqb2ZmcCA9PSBhdHRfbm9t aW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQl0aGlzYXR0LT5h dHRjYWNoZW9mZiA9ICpvZmZwOwotCQkJZWxzZQotCQkJewotCQkJCSpvZmZwID0gYXR0X3BvaW50 ZXJfYWxpZ25ieSgqb2ZmcCwKLQkJCQkJCQkJCQkJdGhpc2F0dC0+YXR0YWxpZ25ieSwKLQkJCQkJ CQkJCQkJLTEsCi0JCQkJCQkJCQkJCXRwICsgKm9mZnApOworCQkJcG9wdWxhdGVfaXNudWxsX2Fy cmF5KGJwLCBuYXR0cywgaXNudWxsKTsKIAotCQkJCWlmICghc2xvdykKLQkJCQkJc2xvd25leHQg PSB0cnVlOwotCQkJfQorCQkJLyogV2UgY2FuIG9ubHkgdXNlIGFueSBjYWNoZWQgb2Zmc2V0cyB1 bnRpbCB0aGUgZmlyc3QgTlVMTCBhdHRyICovCisJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9 IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgZmlyc3ROdWxsQXR0cik7CiAJCX0KIAkJZWxz ZQogCQl7Ci0JCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxp Z25ieSAqLwotCQkJKm9mZnAgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5h dHRhbGlnbmJ5KTsKLQotCQkJaWYgKCFzbG93KQotCQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0g Km9mZnA7CisJCQkvKiBPdGhlcndpc2UgYWxsIHJlcXVpcmVkIGNvbHVtbnMgYXJlIGd1YXJhbnRl ZWQgdG8gZXhpc3QgKi8KKwkJCWZpcnN0TnVsbEF0dHIgPSBuYXR0czsKIAkJfQorCX0KKwllbHNl CisJeworCQl0cCA9IChjaGFyICopIHR1cCArIE1BWEFMSUdOKG9mZnNldG9mKEhlYXBUdXBsZUhl YWRlckRhdGEsIHRfYml0cykpOworCisJCS8qCisJCSAqIFdlIG9ubHkgbmVlZCB0byBsb29rIGF0 IHRoZSB0dXBsZSdzIG5hdHRzIGlmIHdlIG5lZWQgbW9yZSB0aGFuIHRoZQorCQkgKiBndWFyYW50 ZWVkIG51bWJlciBvZiBjb2x1bW5zCisJCSAqLworCQlpZiAobmF0dHMgPiBmaXJzdE5vbkd1YXJh bnRlZWRBdHRyKQorCQkJbmF0dHMgPSBNaW4oSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwKSwg bmF0dHMpOworCisJCS8qIEFsbCBhdHRycyBjYW4gYmUgZmV0Y2hlZCB3aXRob3V0IGNoZWNraW5n IGZvciBOVUxMcyAqLworCQlmaXJzdE51bGxBdHRyID0gbmF0dHM7CisJfQogCi0JCXZhbHVlc1th dHRudW1dID0gZmV0Y2hhdHQodGhpc2F0dCwgdHAgKyAqb2ZmcCk7CisJYXR0bnVtID0gc2xvdC0+ dHRzX252YWxpZDsKKwl2YWx1ZXMgPSBzbG90LT50dHNfdmFsdWVzOworCXNsb3QtPnR0c19udmFs aWQgPSBuYXR0czsKIAotCQkqb2ZmcCA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcigqb2ZmcCwgdGhp c2F0dC0+YXR0bGVuLCB0cCArICpvZmZwKTsKKwkvKiBFbnN1cmUgd2UgY2FsY3VsYXRlZCB0cCBj b3JyZWN0bHkgKi8KKwlBc3NlcnQodHAgPT0gKGNoYXIgKikgdHVwICsgdHVwLT50X2hvZmYpOwog Ci0JCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHNsb3cgbW9kZSAqLwotCQlpZiAo IXNsb3cpCisJaWYgKGF0dG51bSA8IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpCisJeworCQlkbwog CQl7CisJCQlpbnQJCQlhdHRsZW47CisKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQlj YXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJCWF0dGxl biA9IGNhdHRyLT5hdHRsZW47CisKKwkJCS8qIFdlIGRvbid0IGV4cGVjdCBhbnkgbm9uLWJ5dmFs IHR5cGVzICovCisJCQlwZ19hc3N1bWUoYXR0bGVuID4gMCk7CisKIAkJCS8qCi0JCQkgKiBXZSdy ZSB1bmFibGUgdG8gZGVmb3JtIGFueSBmdXJ0aGVyIGlmIHRoZSBhYm92ZSBjb2RlIHNldAotCQkJ ICogJ3Nsb3duZXh0Jywgb3IgaWYgdGhpcyBpc24ndCBhIGZpeGVkLXdpZHRoIGF0dHJpYnV0ZS4K KwkJCSAqIFRlY2huaWNhbGx5IHdlIGNvdWxkIHN1cHBvcnQgbm9uLWJ5dmFsIGZpeGVkLXdpZHRo IHR5cGVzLCBidXQKKwkJCSAqIG5vdCBkb2luZyBzbyBhbGxvd3MgdXMgdG8gcGFzcyB0cnVlIHRv IGZldGNoX2F0dF9ub2VycigpIHdoaWNoCisJCQkgKiBlbGltaW5hdGVzIHRoZSAhYXR0Ynl2YWwg YnJhbmNoLgogCQkJICovCi0JCQlpZiAoc2xvd25leHQgfHwgdGhpc2F0dC0+YXR0bGVuIDw9IDAp Ci0JCQl7Ci0JCQkJKnNsb3dwID0gdHJ1ZTsKLQkJCQlyZXR1cm4gYXR0bnVtICsgMTsKLQkJCX0K LQkJfQotCX0KKwkJCUFzc2VydChjYXR0ci0+YXR0Ynl2YWwgPT0gdHJ1ZSk7CiAKLQlyZXR1cm4g bmF0dHM7Ci19Ci0KLS8qCi0gKiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlCi0gKgkJR2l2ZW4gYSBU dXBsZVRhYmxlU2xvdCwgZXh0cmFjdCBkYXRhIGZyb20gdGhlIHNsb3QncyBwaHlzaWNhbCB0dXBs ZQotICoJCWludG8gaXRzIERhdHVtL2lzbnVsbCBhcnJheXMuICBEYXRhIGlzIGV4dHJhY3RlZCB1 cCB0aHJvdWdoIHRoZQotICoJCW5hdHRzJ3RoIGNvbHVtbiAoY2FsbGVyIG11c3QgZW5zdXJlIHRo aXMgaXMgYSBsZWdhbCBjb2x1bW4gbnVtYmVyKS4KLSAqCi0gKgkJVGhpcyBpcyBlc3NlbnRpYWxs eSBhbiBpbmNyZW1lbnRhbCB2ZXJzaW9uIG9mIGhlYXBfZGVmb3JtX3R1cGxlOgotICoJCW9uIGVh Y2ggY2FsbCB3ZSBleHRyYWN0IGF0dHJpYnV0ZXMgdXAgdG8gdGhlIG9uZSBuZWVkZWQsIHdpdGhv dXQKLSAqCQlyZS1jb21wdXRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXNseSBleHRyYWN0 ZWQgYXR0cmlidXRlcy4KLSAqCQlzbG90LT50dHNfbnZhbGlkIGlzIHRoZSBudW1iZXIgb2YgYXR0 cmlidXRlcyBhbHJlYWR5IGV4dHJhY3RlZC4KLSAqCi0gKiBUaGlzIGlzIG1hcmtlZCBhcyBhbHdh eXMgaW5saW5lLCBzbyB0aGUgZGlmZmVyZW50IG9mZnAgZm9yIGRpZmZlcmVudCB0eXBlcwotICog b2Ygc2xvdHMgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KLSAqLwotc3RhdGljIHBnX2F0dHJpYnV0ZV9h bHdheXNfaW5saW5lIHZvaWQKLXNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3Qg KnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAotCQkJCQkgICBpbnQgbmF0dHMp Ci17Ci0JYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVwbGVIYXNOdWxscyh0dXBsZSk7Ci0JaW50CQkJ YXR0bnVtOwotCXVpbnQzMgkJb2ZmOwkJCS8qIG9mZnNldCBpbiB0dXBsZSBkYXRhICovCi0JYm9v bAkJc2xvdzsJCQkvKiBjYW4gd2UgdXNlL3NldCBhdHRjYWNoZW9mZj8gKi8KKwkJCW9mZiA9IGNh dHRyLT5hdHRjYWNoZW9mZjsKKwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRw ICsgb2ZmLCB0cnVlLCBhdHRsZW4pOworCQkJYXR0bnVtKys7CisJCX0gd2hpbGUgKGF0dG51bSA8 IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpOwogCi0JLyogV2UgY2FuIG9ubHkgZmV0Y2ggYXMgbWFu eSBhdHRyaWJ1dGVzIGFzIHRoZSB0dXBsZSBoYXMuICovCi0JbmF0dHMgPSBNaW4oSGVhcFR1cGxl SGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSksIG5hdHRzKTsKKwkJb2ZmICs9IGNhdHRyLT5h dHRsZW47CiAKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGZpcnN0IGNhbGwgZm9yIHRoaXMg dHVwbGUsIGFuZCBpbml0aWFsaXplIG9yIHJlc3RvcmUKLQkgKiBsb29wIHN0YXRlLgotCSAqLwot CWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7Ci0JaWYgKGF0dG51bSA9PSAwKQotCXsKLQkJLyog U3RhcnQgZnJvbSB0aGUgZmlyc3QgYXR0cmlidXRlICovCi0JCW9mZiA9IDA7Ci0JCXNsb3cgPSBm YWxzZTsKKwkJaWYgKGF0dG51bSA9PSBuYXR0cykKKwkJCWdvdG8gZG9uZTsKIAl9CiAJZWxzZQog CXsKIAkJLyogUmVzdG9yZSBzdGF0ZSBmcm9tIHByZXZpb3VzIGV4ZWN1dGlvbiAqLwogCQlvZmYg PSAqb2ZmcDsKLQkJc2xvdyA9IFRUU19TTE9XKHNsb3QpOworCisJCS8qIFdlIGV4cGVjdCAqb2Zm cCB0byBiZSBzZXQgdG8gMCB3aGVuIGF0dG51bSA9PSAwICovCisJCUFzc2VydChvZmYgPT0gMCB8 fCBhdHRudW0gPiAwKTsKIAl9CiAKKwkvKiBXZSBjYW4gb25seSBmZXRjaCBhcyBtYW55IGF0dHJp YnV0ZXMgYXMgdGhlIHR1cGxlIGhhcy4gKi8KKwlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1p bihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgbmF0dHMpOworCiAJLyoKLQkgKiBJZiAnc2xvdycg aXNuJ3Qgc2V0LCB0cnkgZGVmb3JtaW5nIHVzaW5nIGRlZm9ybWluZyBjb2RlIHRoYXQgZG9lcyBu b3QKLQkgKiBjb250YWluIGFueSBvZiB0aGUgZXh0cmEgY2hlY2tzIHJlcXVpcmVkIGZvciBub24t Zml4ZWQgb2Zmc2V0Ci0JICogZGVmb3JtaW5nLiAgRHVyaW5nIGRlZm9ybWluZywgaWYgb3Igd2hl biB3ZSBmaW5kIGEgTlVMTCBvciBhIHZhcmlhYmxlCi0JICogbGVuZ3RoIGF0dHJpYnV0ZSwgd2Un bGwgc3dpdGNoIHRvIGEgZGVmb3JtaW5nIG1ldGhvZCB3aGljaCBpbmNsdWRlcyB0aGUKLQkgKiBl eHRyYSBjb2RlIHJlcXVpcmVkIGZvciBub24tZml4ZWQgb2Zmc2V0IGRlZm9ybWluZywgYS5rLmEg c2xvdyBtb2RlLgotCSAqIEJlY2F1c2UgdGhpcyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCwgd2Ug aW5saW5lCi0JICogc2xvdF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbCBwYXNzaW5nIHRoZSAn c2xvdycgYW5kICdoYXNudWxsJwotCSAqIHBhcmFtZXRlcnMgYXMgY29uc3RhbnRzIHRvIGFsbG93 IHRoZSBjb21waWxlciB0byBlbWl0IHNwZWNpYWxpemVkIGNvZGUKLQkgKiB3aXRoIHRoZSBrbm93 bi1jb25zdCBmYWxzZSBjb21wYXJpc29ucyBhbmQgc3Vic2VxdWVudCBicmFuY2hlcyByZW1vdmVk LgorCSAqIEhhbmRsZSB0aGUgcG9ydGlvbiBvZiB0aGUgdHVwbGUgdGhhdCB3ZSBoYXZlIGNhY2hl ZCB0aGUgb2Zmc2V0IGZvciB1cAorCSAqIHRvIHRoZSBmaXJzdCBOVUxMIGF0dHJpYnV0ZS4gIFRo ZSBvZmZzZXQgaXMgZWZmZWN0aXZlbHkgZml4ZWQgZm9yIHRoZXNlCisJICogc28gd2UgY2FuIHVz ZSB0aGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmLgogCSAqLwotCWlmICghc2xvdykK KwlpZiAoYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpCiAJewotCQkvKiBUdXBsZSB3 aXRob3V0IGFueSBOVUxMcz8gV2UgY2FuIHNraXAgZG9pbmcgYW55IE5VTEwgY2hlY2tpbmcgKi8K LQkJaWYgKCFoYXNudWxscykKLQkJCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50 ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJCQkJIGF0dG51bSwK LQkJCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAvKiBzbG93ICovCi0J CQkJCQkJCQkJCQkJIGZhbHNlLCAvKiBoYXNudWxscyAqLwotCQkJCQkJCQkJCQkJCSAmb2ZmLAot CQkJCQkJCQkJCQkJCSAmc2xvdyk7Ci0JCWVsc2UKLQkJCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hl YXBfdHVwbGVfaW50ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJ CQkJIGF0dG51bSwKLQkJCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAv KiBzbG93ICovCi0JCQkJCQkJCQkJCQkJIHRydWUsCS8qIGhhc251bGxzICovCi0JCQkJCQkJCQkJ CQkJICZvZmYsCi0JCQkJCQkJCQkJCQkJICZzbG93KTsKKwkJZG8KKwkJeworCQkJaXNudWxsW2F0 dG51bV0gPSBmYWxzZTsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNj LCBhdHRudW0pOworCisJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CisJCQl2YWx1ZXNbYXR0 bnVtXSA9IGZldGNoX2F0dF9ub2Vycih0cCArIG9mZiwKKwkJCQkJCQkJCQkJIGNhdHRyLT5hdHRi eXZhbCwKKwkJCQkJCQkJCQkJIGNhdHRyLT5hdHRsZW4pOworCQl9IHdoaWxlICgrK2F0dG51bSA8 IGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyKTsKKworCQkvKgorCQkgKiBQb2ludCB0aGUgb2Zmc2V0 IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxhc3QgYXR0cmlidXRlIHdpdGggYSBjYWNoZWQKKwkJICog b2Zmc2V0LiAgV2UgZXhwZWN0IHRoZSBmaW5hbCBjYWNoZWQgb2Zmc2V0IGF0dHJpYnV0ZSB0byBo YXZlIGEKKwkJICogZml4ZWQgd2lkdGgsIHNvIGp1c3QgYWRkIHRoZSBhdHRsZW4gdG8gdGhlIGF0 dGNhY2hlb2ZmCisJCSAqLworCQlBc3NlcnQoY2F0dHItPmF0dGxlbiA+IDApOworCQlvZmYgKz0g Y2F0dHItPmF0dGxlbjsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBhbnkgcG9ydGlvbiBvZiB0aGUg dHVwbGUgdGhhdCBkb2Vzbid0IGhhdmUgYSBmaXhlZCBvZmZzZXQgdXAKKwkgKiB1bnRpbCB0aGUg Zmlyc3QgTlVMTCBhdHRyaWJ1dGUuICBUaGlzIGxvb3BzIG9ubHkgZGlmZmVycyBmcm9tIHRoZSBv bmUKKwkgKiBhZnRlciBpdCBieSB0aGUgTlVMTCBjaGVja3MuCisJICovCisJZm9yICg7IGF0dG51 bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51bSsrKQorCXsKKwkJaW50CQkJYXR0bGVuOworCisJCWlz bnVsbFthdHRudW1dID0gZmFsc2U7CisJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVw bGVEZXNjLCBhdHRudW0pOworCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOworCisJCS8qCisJCSAq IGNzdHJpbmdzIGRvbid0IGV4aXN0IGluIGhlYXAgdHVwbGVzLiAgVXNlIHBnX2Fzc3VtZSB0byBp bnN0cnVjdCB0aGUKKwkJICogY29tcGlsZXIgbm90IHRvIGVtaXQgdGhlIGNzdHJpbmcgcmVsYXRl ZCBjb2RlIGluCisJCSAqIGFsaWduX2ZldGNoX3RoZW5fYWRkKCkuCisJCSAqLworCQlwZ19hc3N1 bWUoYXR0bGVuID4gMCB8fCBhdHRsZW4gPT0gLTEpOworCisJCS8qIGFsaWduICdvZmYnLCBmZXRj aCB0aGUgZGF0dW0sIGFuZCBpbmNyZW1lbnQgb2ZmIGJleW9uZCB0aGUgZGF0dW0gKi8KKwkJdmFs dWVzW2F0dG51bV0gPSBhbGlnbl9mZXRjaF90aGVuX2FkZCh0cCwKKwkJCQkJCQkJCQkJICAmb2Zm LAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCQkJICBhdHRsZW4sCisJ CQkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnkpOwogCX0KIAotCS8qIElmIHRoZXJlJ3Mgc3Rp bGwgd29yayB0byBkbyB0aGVuIHdlIG11c3QgYmUgaW4gc2xvdyBtb2RlICovCi0JaWYgKGF0dG51 bSA8IG5hdHRzKQorCS8qCisJICogTm93IGhhbmRsZSBhbnkgcmVtYWluaW5nIGF0dHJpYnV0ZXMg aW4gdGhlIHR1cGxlIHVwIHRvIHRoZSByZXF1ZXN0ZWQKKwkgKiBhdHRudW0uICBUaGlzIHRpbWUs IGluY2x1ZGUgTlVMTCBjaGVja3MgYXMgd2UncmUgbm93IGF0IHRoZSBmaXJzdCBOVUxMCisJICog YXR0cmlidXRlLgorCSAqLworCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAJewot CQkvKiBYWFggaXMgaXQgd29ydGggYWRkaW5nIGEgc2VwYXJhdGUgY2FsbCB3aGVuIGhhc251bGxz IGlzIGZhbHNlPyAqLwotCQlhdHRudW0gPSBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFs KHNsb3QsCi0JCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJCQkgYXR0bnVtLAotCQkJCQkJ CQkJCQkJIG5hdHRzLAotCQkJCQkJCQkJCQkJIHRydWUsCS8qIHNsb3cgKi8KLQkJCQkJCQkJCQkJ CSBoYXNudWxscywKLQkJCQkJCQkJCQkJCSAmb2ZmLAotCQkJCQkJCQkJCQkJICZzbG93KTsKKwkJ aW50CQkJYXR0bGVuOworCisJCWlmIChpc251bGxbYXR0bnVtXSkKKwkJeworCQkJdmFsdWVzW2F0 dG51bV0gPSAoRGF0dW0pIDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNhdHRyID0gVHVwbGVE ZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQlhdHRsZW4gPSBjYXR0ci0+YXR0 bGVuOworCisJCS8qIEFzIGFib3ZlLCB3ZSBkb24ndCBleHBlY3QgY3N0cmluZ3MgKi8KKwkJcGdf YXNzdW1lKGF0dGxlbiA+IDAgfHwgYXR0bGVuID09IC0xKTsKKworCQkvKiBhbGlnbiAnb2ZmJywg ZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJ CXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAg Jm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgYXR0bGVu LAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKIAl9CiAKK2RvbmU6CisKIAkvKgog CSAqIFNhdmUgc3RhdGUgZm9yIG5leHQgZXhlY3V0aW9uCiAJICovCiAJc2xvdC0+dHRzX252YWxp ZCA9IGF0dG51bTsKIAkqb2ZmcCA9IG9mZjsKLQlpZiAoc2xvdykKLQkJc2xvdC0+dHRzX2ZsYWdz IHw9IFRUU19GTEFHX1NMT1c7Ci0JZWxzZQotCQlzbG90LT50dHNfZmxhZ3MgJj0gflRUU19GTEFH X1NMT1c7CiB9CiAKIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09wc1ZpcnR1YWwgPSB7CkBA IC0xNTA4LDcgKzE1MzIsNyBAQCBFeGVjU2V0U2xvdERlc2NyaXB0b3IoVHVwbGVUYWJsZVNsb3Qg KnNsb3QsIC8qIHNsb3QgdG8gY2hhbmdlICovCiAJc2xvdC0+dHRzX3ZhbHVlcyA9IChEYXR1bSAq KQogCQlNZW1vcnlDb250ZXh0QWxsb2Moc2xvdC0+dHRzX21jeHQsIHR1cGRlc2MtPm5hdHRzICog c2l6ZW9mKERhdHVtKSk7CiAJc2xvdC0+dHRzX2lzbnVsbCA9IChib29sICopCi0JCU1lbW9yeUNv bnRleHRBbGxvYyhzbG90LT50dHNfbWN4dCwgdHVwZGVzYy0+bmF0dHMgKiBzaXplb2YoYm9vbCkp OworCQlNZW1vcnlDb250ZXh0QWxsb2Moc2xvdC0+dHRzX21jeHQsIE1BWEFMSUdOKHR1cGRlc2Mt Pm5hdHRzICogc2l6ZW9mKGJvb2wpKSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0yMjU5LDEwICsyMjgzLDE2IEBAIEV4ZWNUeXBlU2V0Q29sTmFtZXMoVHVw bGVEZXNjIHR5cGVJbmZvLCBMaXN0ICpuYW1lc0xpc3QpCiAgKiBUaGlzIGhhcHBlbnMgImZvciBm cmVlIiBpZiB0aGUgdHVwZGVzYyBjYW1lIGZyb20gYSByZWxjYWNoZSBlbnRyeSwgYnV0CiAgKiBu b3QgaWYgd2UgaGF2ZSBtYW51ZmFjdHVyZWQgYSB0dXBkZXNjIGZvciBhIHRyYW5zaWVudCBSRUNP UkQgZGF0YXR5cGUuCiAgKiBJbiB0aGF0IGNhc2Ugd2UgaGF2ZSB0byBub3RpZnkgdHlwY2FjaGUu YyBvZiB0aGUgZXhpc3RlbmNlIG9mIHRoZSB0eXBlLgorICoKKyAqIFR1cGxlRGVzY0ZpbmFsaXpl KCkgbXVzdCBiZSBjYWxsZWQgb24gdGhlIFR1cGxlRGVzYyBiZWZvcmUgY2FsbGluZyB0aGlzCisg KiBmdW5jdGlvbi4KICAqLwogVHVwbGVEZXNjCiBCbGVzc1R1cGxlRGVzYyhUdXBsZURlc2MgdHVw ZGVzYykKIHsKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6 ZSgpPyAqLworCUFzc2VydCh0dXBkZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7 CisKIAlpZiAodHVwZGVzYy0+dGR0eXBlaWQgPT0gUkVDT1JET0lEICYmCiAJCXR1cGRlc2MtPnRk dHlwbW9kIDwgMCkKIAkJYXNzaWduX3JlY29yZF90eXBlX3R5cG1vZCh0dXBkZXNjKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlU2Vxc2Nhbi5jCmluZGV4IGFmM2M3ODhjZThiLi43Zjc0YThkZGNiMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCkBAIC0yNDYsNiArMjQ2LDggQEAgRXhlY0luaXRT ZXFTY2FuKFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJ ICBSZWxhdGlvbkdldERlc2NyKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKSwKIAkJ CQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3Moc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRp b24pKTsKIAorCXNjYW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9IFRU U19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOworCiAJLyoKIAkgKiBJbml0aWFsaXpl IHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1q aXRfZGVmb3JtLmMKaW5kZXggM2ViMDg3ZWI1NmIuLjEyNTIxZTNlNDZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCisrKyBiL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfZGVmb3JtLmMKQEAgLTYyLDcgKzYyLDYgQEAgc2xvdF9jb21waWxlX2Rl Zm9ybShMTFZNSml0Q29udGV4dCAqY29udGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJTExWTVZhbHVl UmVmIHZfdHRzX3ZhbHVlczsKIAlMTFZNVmFsdWVSZWYgdl90dHNfbnVsbHM7CiAJTExWTVZhbHVl UmVmIHZfc2xvdG9mZnA7Ci0JTExWTVZhbHVlUmVmIHZfZmxhZ3NwOwogCUxMVk1WYWx1ZVJlZiB2 X252YWxpZHA7CiAJTExWTVZhbHVlUmVmIHZfbnZhbGlkOwogCUxMVk1WYWx1ZVJlZiB2X21heGF0 dDsKQEAgLTE3OCw3ICsxNzcsNiBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0 ICpjb250ZXh0LCBUdXBsZURlc2MgZGVzYywKIAl2X3R0c19udWxscyA9CiAJCWxfbG9hZF9zdHJ1 Y3RfZ2VwKGIsIFN0cnVjdFR1cGxlVGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJM RVNMT1RfSVNOVUxMLAogCQkJCQkJICAidHRzX0lTTlVMTCIpOwotCXZfZmxhZ3NwID0gbF9zdHJ1 Y3RfZ2VwKGIsIFN0cnVjdFR1cGxlVGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJM RVNMT1RfRkxBR1MsICIiKTsKIAl2X252YWxpZHAgPSBsX3N0cnVjdF9nZXAoYiwgU3RydWN0VHVw bGVUYWJsZVNsb3QsIHZfc2xvdCwgRklFTEROT19UVVBMRVRBQkxFU0xPVF9OVkFMSUQsICIiKTsK IAogCWlmIChvcHMgPT0gJlRUU09wc0hlYXBUdXBsZSB8fCBvcHMgPT0gJlRUU09wc0J1ZmZlckhl YXBUdXBsZSkKQEAgLTc0NywxNCArNzQ1LDEwIEBAIHNsb3RfY29tcGlsZV9kZWZvcm0oTExWTUpp dENvbnRleHQgKmNvbnRleHQsIFR1cGxlRGVzYyBkZXNjLAogCiAJewogCQlMTFZNVmFsdWVSZWYg dl9vZmYgPSBsX2xvYWQoYiwgVHlwZVNpemVULCB2X29mZnAsICIiKTsKLQkJTExWTVZhbHVlUmVm IHZfZmxhZ3M7CiAKIAkJTExWTUJ1aWxkU3RvcmUoYiwgbF9pbnQxNl9jb25zdChsYywgbmF0dHMp LCB2X252YWxpZHApOwogCQl2X29mZiA9IExMVk1CdWlsZFRydW5jKGIsIHZfb2ZmLCBMTFZNSW50 MzJUeXBlSW5Db250ZXh0KGxjKSwgIiIpOwogCQlMTFZNQnVpbGRTdG9yZShiLCB2X29mZiwgdl9z bG90b2ZmcCk7Ci0JCXZfZmxhZ3MgPSBsX2xvYWQoYiwgTExWTUludDE2VHlwZUluQ29udGV4dChs YyksIHZfZmxhZ3NwLCAidHRzX2ZsYWdzIik7Ci0JCXZfZmxhZ3MgPSBMTFZNQnVpbGRPcihiLCB2 X2ZsYWdzLCBsX2ludDE2X2NvbnN0KGxjLCBUVFNfRkxBR19TTE9XKSwgIiIpOwotCQlMTFZNQnVp bGRTdG9yZShiLCB2X2ZsYWdzLCB2X2ZsYWdzcCk7CiAJCUxMVk1CdWlsZFJldFZvaWQoYik7CiAJ fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA3NzBlZGIzNGUwOC4uOTk4YmUy NGFjNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNjY2LDE0ICs2NjYsNiBA QCBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbG9nKEVSUk9S LCAicGdfYXR0cmlidXRlIGNhdGFsb2cgaXMgbWlzc2luZyAlZCBhdHRyaWJ1dGUocykgZm9yIHJl bGF0aW9uIE9JRCAldSIsCiAJCQkgbmVlZCwgUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpOwog Ci0JLyoKLQkgKiBXZSBjYW4gZWFzaWx5IHNldCB0aGUgYXR0Y2FjaGVvZmYgdmFsdWUgZm9yIHRo ZSBmaXJzdCBhdHRyaWJ1dGU6IGl0Ci0JICogbXVzdCBiZSB6ZXJvLiAgVGhpcyBlbGltaW5hdGVz IHRoZSBuZWVkIGZvciBzcGVjaWFsIGNhc2VzIGZvciBhdHRudW09MQotCSAqIHRoYXQgdXNlZCB0 byBleGlzdCBpbiBmYXN0Z2V0YXR0cigpIGFuZCBpbmRleF9nZXRhdHRyKCkuCi0JICovCi0JaWYg KFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSA+IDApCi0JCVR1cGxlRGVz Y0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7Ci0KIAkv KgogCSAqIFNldCB1cCBjb25zdHJhaW50L2RlZmF1bHQgaW5mbwogCSAqLwpAQCAtMTk4NSw4ICsx OTc3LDYgQEAgZm9ybXJkZXNjKGNvbnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9u UmVsdHlwZSwKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUocmVsYXRpb24tPnJkX2F0dCwg aSk7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwg Y2YgUmVsYXRpb25CdWlsZFR1cGxlRGVzYyAqLwotCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0 aW9uLT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7CiAJVHVwbGVEZXNjRmluYWxpemUocmVs YXRpb24tPnJkX2F0dCk7CiAKIAkvKiBtYXJrIG5vdC1udWxsIHN0YXR1cyAqLwpAQCAtNDQ0Niw4 ICs0NDM2LDYgQEAgQnVpbGRIYXJkY29kZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9y bURhdGFfcGdfYXR0cmlidXRlICphdHRycykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUo cmVzdWx0LCBpKTsKIAl9CiAKLQkvKiBpbml0aWFsaXplIGZpcnN0IGF0dHJpYnV0ZSdzIGF0dGNh Y2hlb2ZmLCBjZiBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjICovCi0JVHVwbGVEZXNjQ29tcGFjdEF0 dHIocmVzdWx0LCAwKS0+YXR0Y2FjaGVvZmYgPSAwOwogCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3Vs dCk7CiAKIAkvKiBOb3RlOiB3ZSBkb24ndCBib3RoZXIgdG8gc2V0IHVwIGEgVHVwbGVDb25zdHIg ZW50cnkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCmluZGV4IDU5NTQxM2RiYmM1Li44MGUxZGQwZTNjNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdHVwZGVzYy5oCkBAIC0xMzEsNiArMTMxLDE5IEBAIHR5cGVkZWYgc3RydWN0IENv bXBhY3RBdHRyaWJ1dGUKICAqIEFueSBjb2RlIG1ha2luZyBjaGFuZ2VzIG1hbnVhbGx5IHRvIGFu ZCBmaWVsZHMgaW4gdGhlIEZvcm1EYXRhX3BnX2F0dHJpYnV0ZQogICogYXJyYXkgbXVzdCBzdWJz ZXF1ZW50bHkgY2FsbCBwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZSgpIHRvIGZsdXNoIHRoZQog ICogY2hhbmdlcyBvdXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgJ2NvbXBhY3RfYXR0cnMnIGVsZW1l bnQuCisgKgorICogZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyIHN0b3JlcyB0aGUgaW5kZXggaW50 byB0aGUgY29tcGFjdF9hdHRycyBhcnJheSBmb3IKKyAqIHRoZSBmaXJzdCBhdHRyaWJ1dGUgdGhh dCB3ZSBkb24ndCBoYXZlIGEga25vd24gYXR0Y2FjaGVvZmYgZm9yLgorICoKKyAqIGZpcnN0Tm9u R3VhcmFudGVlZEF0dHIgc3RvcmVzIHRoZSBpbmRleCB0byBpbnRvIHRoZSBjb21wYWN0X2F0dHJz IGFycmF5IGZvcgorICogdGhlIGZpcnN0IGF0dHJpYnV0ZSB0aGF0IGlzIGVpdGhlciBOVUxMYWJs ZSwgbWlzc2luZywgb3IgIWF0dGJ5dmFsLiAgVGhpcworICogY2FuIGJlIHVzZWQgaW4gbG9jYXRp b25zIGFzIGEgZ3VhcmFudGVlIHRoYXQgYXR0cmlidXRlcyBiZWZvcmUgdGhpcyB3aWxsCisgKiBh bHdheXMgZXhpc3QgaW4gdHVwbGVzLiAgVGhlICFhdHRieXZhbCBwYXJ0IGlzbid0IHJlcXVpcmVk IGZvciB0aGlzLCBidXQKKyAqIGluY2x1ZGluZyB0aGlzIGFsbG93cyB2YXJpb3VzIHR1cGxlIGRl Zm9ybWluZyByb3V0aW5lcyB0byBmb3JlZ28gYW55IGNoZWNrcworICogZm9yICFhdHRieXZhbC4K KyAqCisgKiBPbmNlIGEgVHVwbGVEZXNjIGhhcyBiZWVuIHBvcHVsYXRlZCwgYmVmb3JlIGl0IGlz IHVzZWQgZm9yIGFueSBwdXJwb3NlCisgKiBUdXBsZURlc2NGaW5hbGl6ZSgpIG11c3QgYmUgY2Fs bGVkIG9uIGl0LgogICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZURlc2NEYXRhCiB7CkBAIC0xMzgs NiArMTUxLDEwIEBAIHR5cGVkZWYgc3RydWN0IFR1cGxlRGVzY0RhdGEKIAlPaWQJCQl0ZHR5cGVp ZDsJCS8qIGNvbXBvc2l0ZSB0eXBlIElEIGZvciB0dXBsZSB0eXBlICovCiAJaW50MzIJCXRkdHlw bW9kOwkJLyogdHlwbW9kIGZvciB0dXBsZSB0eXBlICovCiAJaW50CQkJdGRyZWZjb3VudDsJCS8q IHJlZmVyZW5jZSBjb3VudCwgb3IgLTEgaWYgbm90IGNvdW50aW5nICovCisJaW50CQkJZmlyc3RO b25DYWNoZWRPZmZzZXRBdHRyOwkvKiBpbmRleCBvZiB0aGUgZmlyc3QgYXR0IHdpdGhvdXQKKwkJ CQkJCQkJCQkJICogYW4gYXR0Y2FjaGVvZmYgKi8KKwlpbnQJCQlmaXJzdE5vbkd1YXJhbnRlZWRB dHRyOyAvKiBpbmRleCBvZiB0aGUgZmlyc3QgbnVsbGFibGUsCisJCQkJCQkJCQkJICogbWlzc2lu ZyBvciAhYXR0Ynl2YWwgYXR0cmlidXRlLiAqLwogCVR1cGxlQ29uc3RyICpjb25zdHI7CQkvKiBj b25zdHJhaW50cywgb3IgTlVMTCBpZiBub25lICovCiAJLyogY29tcGFjdF9hdHRyc1tOXSBpcyB0 aGUgY29tcGFjdCBtZXRhZGF0YSBvZiBBdHRyaWJ1dGUgTnVtYmVyIE4rMSAqLwogCUNvbXBhY3RB dHRyaWJ1dGUgY29tcGFjdF9hdHRyc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwpAQCAtMTk1LDcg KzIxMiw2IEBAIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShU dXBsZURlc2MgdHVwZGVzYywgaW50IG5hdHRzKTsKIAogZXh0ZXJuIFR1cGxlRGVzYyBDcmVhdGVU dXBsZURlc2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKTsKIAotI2RlZmluZSBUdXBsZURl c2NGaW5hbGl6ZShkKSAoKHZvaWQpIDApCiAjZGVmaW5lIFR1cGxlRGVzY1NpemUoc3JjKSBcCiAJ KG9mZnNldG9mKHN0cnVjdCBUdXBsZURlc2NEYXRhLCBjb21wYWN0X2F0dHJzKSArIFwKIAkgKHNy YyktPm5hdHRzICogc2l6ZW9mKENvbXBhY3RBdHRyaWJ1dGUpICsgXApAQCAtMjA2LDYgKzIyMiw3 IEBAIGV4dGVybiB2b2lkIFR1cGxlRGVzY0NvcHkoVHVwbGVEZXNjIGRzdCwgVHVwbGVEZXNjIHNy Yyk7CiBleHRlcm4gdm9pZCBUdXBsZURlc2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0ck51 bWJlciBkc3RBdHRubywKIAkJCQkJCQkgICBUdXBsZURlc2Mgc3JjLCBBdHRyTnVtYmVyIHNyY0F0 dG5vKTsKIAorZXh0ZXJuIHZvaWQgVHVwbGVEZXNjRmluYWxpemUoVHVwbGVEZXNjIHR1cGRlc2Mp OwogZXh0ZXJuIHZvaWQgRnJlZVR1cGxlRGVzYyhUdXBsZURlc2MgdHVwZGVzYyk7CiAKIGV4dGVy biB2b2lkIEluY3JUdXBsZURlc2NSZWZDb3VudChUdXBsZURlc2MgdHVwZGVzYyk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1 cG1hY3MuaAppbmRleCBkNjRjMThiOTUwYi4uNGQ5N2MyN2Q4NzIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3Mu aApAQCAtMTUsNyArMTUsOSBAQAogI2RlZmluZSBUVVBNQUNTX0gKIAogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZV9kLmgiCS8qIGZvciBUWVBBTElHTiBtYWNyb3MgKi8KLQorI2luY2x1ZGUgInBv cnQvcGdfYml0dXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCisjaW5jbHVkZSAi dmFyYXR0LmgiCiAKIC8qCiAgKiBDaGVjayBhIHR1cGxlJ3MgbnVsbCBiaXRtYXAgdG8gZGV0ZXJt aW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBudWxsLgpAQCAtMjgsNiArMzAsNTcgQEAgYXR0 X2lzbnVsbChpbnQgQVRULCBjb25zdCBiaXRzOCAqQklUUykKIAlyZXR1cm4gIShCSVRTW0FUVCA+ PiAzXSAmICgxIDw8IChBVFQgJiAweDA3KSkpOwogfQogCisvKgorICogcG9wdWxhdGVfaXNudWxs X2FycmF5CisgKgkJVHJhbnNmb3JtIGEgdHVwbGUncyBudWxsIGJpdG1hcCBpbnRvIGEgYm9vbGVh biBhcnJheS4KKyAqCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgaXNudWxsIGFycmF5 IGlzIHNpemVkIHNvIGl0IGNvbnRhaW5zCisgKiBhdCBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFz IHRoZXJlIGFyZSBiaXRzIGluIHRoZSAnYml0cycgYXJyYXkuCisgKiBUaGlzIGlzIHJlcXVpcmVk IGJlY2F1c2Ugd2UgYWx3YXlzIHJvdW5kICduYXR0cycgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUK KyAqIG9mIDguCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcG9wdWxhdGVfaXNudWxsX2FycmF5 KGNvbnN0IGJpdHM4ICpiaXRzLCBpbnQgbmF0dHMsIGJvb2wgKmlzbnVsbCkKK3sKKwlpbnQJCQlu Ynl0ZXMgPSAobmF0dHMgKyA3KSA+PiAzOworCisJLyoKKwkgKiBNdWx0aXBseWluZyBhbiBpbnZl cnRlZCBOVUxMIGJpdG1hcCBieXRlIGJ5IHRoaXMgdmFsdWUgcmVzdWx0cyBpbiB0aGUKKwkgKiBs b3dlc3QgYml0IGluIGVhY2ggYnl0ZSBiZWluZyBzZXQgdGhlIHNhbWUgYXMgZWFjaCBiaXQgb2Yg dGhlIGludmVydGVkCisJICogYnl0ZS4gIFdlIHBlcmZvcm0gdGhpcyBhcyAyIDMyLWJpdCBvcGVy YXRpb25zIHJhdGhlciB0aGFuIGEgc2luZ2xlCisJICogNjQtYml0IG9wZXJhdGlvbiBhcyBtdWx0 aXBseWluZyBieSB0aGUgcmVxdWlyZWQgdmFsdWUgdG8gZG8gdGhpcyBpbgorCSAqIDY0LWJpdHMg d291bGQgcmVzdWx0IGluIG92ZXJmbG93aW5nIGEgdWludDY0IGluIHNvbWUgY2FzZXMuCisJICov CisjZGVmaW5lIFNQUkVBRF9CSVRTX01VTFRJUExJRVJfMzIgMHgyMDQwODFVCisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IG5ieXRlczsgaSsrLCBpc251bGwgKz0gOCkKKwl7CisJCXVpbnQ2NAkJaXNu dWxsXzg7CisJCWJpdHM4CQludWxsYnl0ZSA9IH5iaXRzW2ldOworCisJCS8qIGNvbnZlcnQgdGhl IGxvd2VyIDQgYml0cyBvZiBudWxsIGJpdG1hcCB3b3JkIGludG8gMzIgYml0IGludCAqLworCQlp c251bGxfOCA9IChudWxsYnl0ZSAmIDB4ZikgKiBTUFJFQURfQklUU19NVUxUSVBMSUVSXzMyOwor CisJCS8qCisJCSAqIGNvbnZlcnQgdGhlIHVwcGVyIDQgYml0cyBvZiBudWxsIGJpdG1hcCB3b3Jk IGludG8gMzIgYml0IGludCwgc2hpZnQKKwkJICogaW50byB0aGUgdXBwZXIgMzIgYml0CisJCSAq LworCQlpc251bGxfOCB8PSAoKHVpbnQ2NCkgKChudWxsYnl0ZSA+PiA0KSAqIFNQUkVBRF9CSVRT X01VTFRJUExJRVJfMzIpKSA8PCAzMjsKKworCQkvKiBtYXNrIG91dCBhbGwgb3RoZXIgYml0cyBh cGFydCBmcm9tIHRoZSBsb3dlc3QgYml0IG9mIGVhY2ggYnl0ZSAqLworCQlpc251bGxfOCAmPSBV SU5UNjRDT05TVCgweDAxMDEwMTAxMDEwMTAxMDEpOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFO CisKKwkJLyoKKwkJICogRml4IGJ5dGUgb3JkZXIgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyBiZWZv cmUgY29weWluZyB0byB0aGUgYXJyYXkuCisJCSAqLworCQlpc251bGxfOCA9IHBnX2Jzd2FwNjQo aXNudWxsXzgpOworI2VuZGlmCisJCW1lbWNweShpc251bGwsICZpc251bGxfOCwgc2l6ZW9mKHVp bnQ2NCkpOworCX0KK30KKwogI2lmbmRlZiBGUk9OVEVORAogLyoKICAqIEdpdmVuIGFuIGF0dGJ5 dmFsIGFuZCBhbiBhdHRsZW4gZnJvbSBlaXRoZXIgYSBGb3JtX3BnX2F0dHJpYnV0ZSBvcgpAQCAt NjksNiArMTIyLDE1NyBAQCBmZXRjaF9hdHQoY29uc3Qgdm9pZCAqVCwgYm9vbCBhdHRieXZhbCwg aW50IGF0dGxlbikKIAllbHNlCiAJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oVCk7CiB9CisKKy8q CisgKiBTYW1lLCBidXQgbm8gZXJyb3IgY2hlY2tpbmcgZm9yIGludmFsaWQgYXR0bGVucyBmb3Ig Ynl2YWwgdHlwZXMuICBUaGlzCisgKiBpcyBzYWZlIHRvIHVzZSB3aGVuIGF0dGxlbiBjb21lcyBm cm9tIENvbXBhY3RBdHRyaWJ1dGUgYXMgd2UgdmFsaWRhdGUgdGhlCisgKiBsZW5ndGggd2hlbiBw b3B1bGF0aW5nIHRoYXQgc3RydWN0LgorICovCitzdGF0aWMgaW5saW5lIERhdHVtCitmZXRjaF9h dHRfbm9lcnIoY29uc3Qgdm9pZCAqVCwgYm9vbCBhdHRieXZhbCwgaW50IGF0dGxlbikKK3sKKwlp ZiAoYXR0Ynl2YWwpCisJeworCQlzd2l0Y2ggKGF0dGxlbikKKwkJeworCQkJY2FzZSBzaXplb2Yo aW50MzIpOgorCQkJCXJldHVybiBJbnQzMkdldERhdHVtKCooKGNvbnN0IGludDMyICopIFQpKTsK KwkJCWNhc2Ugc2l6ZW9mKGludDE2KToKKwkJCQlyZXR1cm4gSW50MTZHZXREYXR1bSgqKChjb25z dCBpbnQxNiAqKSBUKSk7CisJCQljYXNlIHNpemVvZihjaGFyKToKKwkJCQlyZXR1cm4gQ2hhckdl dERhdHVtKCooKGNvbnN0IGNoYXIgKikgVCkpOworCQkJZGVmYXVsdDoKKwkJCQlBc3NlcnQoYXR0 bGVuID09IHNpemVvZihpbnQ2NCkpOworCQkJCXJldHVybiBJbnQ2NEdldERhdHVtKCooKGNvbnN0 IGludDY0ICopIFQpKTsKKwkJfQorCX0KKwllbHNlCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0o VCk7Cit9CisKKworLyoKKyAqIGFsaWduX2ZldGNoX3RoZW5fYWRkCisgKgkJQXBwbGllcyBhbGwg dGhlIGZ1bmN0aW9uYWxpdHkgb2YgYXR0X3BvaW50ZXJfYWxpZ25ieSgpLAorICoJCWZldGNoX2F0 dF9ub2VycigpIGFuZCBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSByZXN1bHRpbmcgaW4gKm9mZgor ICoJCXBvaW50ZXIgdG8gdGhlIHBlcmhhcHMgdW5hbGlnbmVkIG51bWJlciBvZiBieXRlcyBpbnRv ICd0dXBwdHInLCByZWFkeQorICoJCXRvIGRlZm9ybSB0aGUgbmV4dCBhdHRyaWJ1dGUuCisgKgor ICogdHVwcHRyOiBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHR1cGxlLCBhZnRlciB0 aGUgaGVhZGVyIGFuZCBhbnkKKyAqIE5VTEwgYml0bWFzay4KKyAqIG9mZjogb2Zmc2V0IGluIGJ5 dGVzIGZvciByZWFkaW5nIHR1cGxlIGRhdGEsIHBvc3NpYmx5IHVuYWxpZ25lZC4KKyAqIGF0dGJ5 dmFsLCBhdHRsZW4sIGF0dGFsaWduYnkgYXJlIHZhbHVlcyBmcm9tIENvbXBhY3RBdHRyaWJ1dGUu CisgKi8KK3N0YXRpYyBpbmxpbmUgRGF0dW0KK2FsaWduX2ZldGNoX3RoZW5fYWRkKGNvbnN0IGNo YXIgKnR1cHB0ciwgdWludDMyICpvZmYsIGJvb2wgYXR0Ynl2YWwsIGludCBhdHRsZW4sCisJCQkJ CSB1aW50OCBhdHRhbGlnbmJ5KQoreworCURhdHVtCQlyZXM7CisKKwlpZiAoYXR0bGVuID4gMCkK Kwl7CisJCWNvbnN0IGNoYXIgKm9mZnNldF9wdHI7CisKKwkJKm9mZiA9IFRZUEVBTElHTihhdHRh bGlnbmJ5LCAqb2ZmKTsKKwkJb2Zmc2V0X3B0ciA9IHR1cHB0ciArICpvZmY7CisJCSpvZmYgKz0g YXR0bGVuOworCQlpZiAoYXR0Ynl2YWwpCisJCXsKKwkJCXN3aXRjaCAoYXR0bGVuKQorCQkJewor CQkJCWNhc2Ugc2l6ZW9mKGNoYXIpOgorCQkJCQlyZXR1cm4gQ2hhckdldERhdHVtKCooKGNvbnN0 IGNoYXIgKikgb2Zmc2V0X3B0cikpOworCQkJCWNhc2Ugc2l6ZW9mKGludDE2KToKKwkJCQkJcmV0 dXJuIEludDE2R2V0RGF0dW0oKigoY29uc3QgaW50MTYgKikgb2Zmc2V0X3B0cikpOworCQkJCWNh c2Ugc2l6ZW9mKGludDMyKToKKwkJCQkJcmV0dXJuIEludDMyR2V0RGF0dW0oKigoY29uc3QgaW50 MzIgKikgb2Zmc2V0X3B0cikpOworCQkJCWRlZmF1bHQ6CisKKwkJCQkJLyoKKwkJCQkJICogcG9w dWxhdGVfY29tcGFjdF9hdHRyaWJ1dGVfaW50ZXJuYWwoKSBzaG91bGQgaGF2ZQorCQkJCQkgKiBj aGVja2VkCisJCQkJCSAqLworCQkJCQlBc3NlcnQoYXR0bGVuID09IHNpemVvZihpbnQ2NCkpOwor CQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bSgqKChjb25zdCBpbnQ2NCAqKSBvZmZzZXRfcHRyKSk7 CisJCQl9CisJCX0KKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShvZmZzZXRfcHRyKTsKKwl9CisJ ZWxzZSBpZiAoYXR0bGVuID09IC0xKQorCXsKKwkJaWYgKCFWQVJBVFRfSVNfU0hPUlQodHVwcHRy ICsgKm9mZikpCisJCQkqb2ZmID0gVFlQRUFMSUdOKGF0dGFsaWduYnksICpvZmYpOworCisJCXJl cyA9IFBvaW50ZXJHZXREYXR1bSh0dXBwdHIgKyAqb2ZmKTsKKwkJKm9mZiArPSBWQVJTSVpFX0FO WShEYXR1bUdldFBvaW50ZXIocmVzKSk7CisJCXJldHVybiByZXM7CisJfQorCWVsc2UKKwl7CisJ CUFzc2VydChhdHRsZW4gPT0gLTIpOworCQkqb2ZmID0gVFlQRUFMSUdOKGF0dGFsaWduYnksICpv ZmYpOworCQlyZXMgPSBQb2ludGVyR2V0RGF0dW0odHVwcHRyICsgKm9mZik7CisJCSpvZmYgKz0g c3RybGVuKHR1cHB0ciArICpvZmYpICsgMTsKKwkJcmV0dXJuIHJlczsKKwl9Cit9CisKKy8qCisg KiBmaXJzdF9udWxsX2F0dHIKKyAqCQlJbnNwZWN0IGEgTlVMTCBiaXRtYXNrIGZyb20gYSB0dXBs ZSBhbmQgcmV0dXJuIHRoZSAwLWJhc2VkIGF0dG51bSBvZiB0aGUKKyAqCQlmaXJzdCBOVUxMIGF0 dHJpYnV0ZS4gIFJldHVybnMgbmF0dHMgaWYgbm8gTlVMTHMgd2VyZSBmb3VuZC4KKyAqLworc3Rh dGljIGlubGluZSBpbnQKK2ZpcnN0X251bGxfYXR0cihjb25zdCBiaXRzOCAqYml0cywgaW50IG5h dHRzKQoreworCWludAkJCW5hdHRCeXRlID0gbmF0dHMgPj4gMzsKKwlpbnQJCQlieXRlbnVtOwor CWludAkJCXJlczsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQlmaXJzdG51 bGxfY2hlY2sgPSBuYXR0czsKKworCS8qIERvIGl0IHRoZSBzbG93IHdheSBhbmQgY2hlY2sgd2Ug Z2V0IHRoZSBzYW1lIGFuc3dlci4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKysp CisJeworCQlpZiAoYXR0X2lzbnVsbChpLCBiaXRzKSkKKwkJeworCQkJZmlyc3RudWxsX2NoZWNr ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBQcm9jZXNzIGFsbCBieXRl cyB1cCB0byBqdXN0IGJlZm9yZSB0aGUgYnl0ZSBmb3IgdGhlIG5hdHRzIGF0dHJpYnV0ZSAqLwor CWZvciAoYnl0ZW51bSA9IDA7IGJ5dGVudW0gPCBuYXR0Qnl0ZTsgYnl0ZW51bSsrKQorCXsKKwkJ LyogYnJlYWsgaWYgdGhlcmUncyBhbnkgTlVMTCBhdHRycyAoYSAwIGJpdCkgKi8KKwkJaWYgKGJp dHNbYnl0ZW51bV0gIT0gMHhGRikKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogTG9vayBmb3Ig dGhlIGhpZ2hlc3QgMC1iaXQgaW4gdGhlICdieXRlbnVtJyBlbGVtZW50LiAgVG8gZG8gdGhpcywg d2UKKwkgKiBwcm9tb3RlIHRoZSB1aW50OCB0byB1aW50MzIgYmVmb3JlIHBlcmZvcm1pbmcgdGhl IGJpdHdpc2UgTk9UIGFuZAorCSAqIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCAxLWJpdC4gIFRoaXMg d29ya3MgZXZlbiB3aGVuIHRoZSBieXRlIGlzIDB4RkYsIGFzCisJICogdGhlIGJpdHdpc2UgTk9U IG9mIDB4RkYgaW4gMzIgYml0cyBpcyAweEZGRkZGRjAwLCBpbiB3aGljaCBjYXNlCisJICogcGdf cmlnaHRtb3N0X29uZV9wb3MzMigpIHdpbGwgcmV0dXJuIDguICBXZSBtYXkgZW5kIHVwIHdpdGgg YSB2YWx1ZQorCSAqIGhpZ2hlciB0aGFuIG5hdHRzIGhlcmUsIGJ1dCB3ZSdsbCBmaXggdGhhdCB3 aXRoIHRoZSBNaW4oKSBiZWxvdy4KKwkgKi8KKwlyZXMgPSBieXRlbnVtIDw8IDM7CisJcmVzICs9 IHBnX3JpZ2h0bW9zdF9vbmVfcG9zMzIofigodWludDMyKSBiaXRzW2J5dGVudW1dKSk7CisKKwkv KgorCSAqIFNpbmNlIHdlIGRpZCBubyBtYXNraW5nIHRvIG1hc2sgb3V0IGJpdHMgYmV5b25kIHRo ZSBuYXR0J3RoIGJpdCwgd2UgbWF5CisJICogaGF2ZSBmb3VuZCBhIGJpdCBoaWdoZXIgdGhhbiBu YXR0cywgc28gd2UgbXVzdCBjYXAgcmVzIHRvIG5hdHRzCisJICovCisJcmVzID0gTWluKHJlcywg bmF0dHMpOworCisJLyogRW5zdXJlIHdlIGdvdCB0aGUgc2FtZSBhbnN3ZXIgYXMgdGhlIGF0dF9p c251bGwoKSBsb29wIGdvdCAqLworCUFzc2VydChyZXMgPT0gZmlyc3RudWxsX2NoZWNrKTsKKwor CXJldHVybiByZXM7Cit9CiAjZW5kaWYJCQkJCQkJLyogRlJPTlRFTkQgKi8KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVj dXRvci90dXB0YWJsZS5oCmluZGV4IGEyZGZkNzA3ZTc4Li44MzQ2YmU3NzMwMiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci90dXB0YWJsZS5oCkBAIC04NCw5ICs4NCw2IEBACiAgKiB0dHNfdmFsdWVzL3R0c19pc251 bGwgYXJlIGFsbG9jYXRlZCBlaXRoZXIgd2hlbiB0aGUgc2xvdCBpcyBjcmVhdGVkICh3aGVuCiAg KiB0aGUgZGVzY3JpcHRvciBpcyBwcm92aWRlZCksIG9yIHdoZW4gYSBkZXNjcmlwdG9yIGlzIGFz c2lnbmVkIHRvIHRoZSBzbG90OwogICogdGhleSBhcmUgb2YgbGVuZ3RoIGVxdWFsIHRvIHRoZSBk ZXNjcmlwdG9yJ3MgbmF0dHMuCi0gKgotICogVGhlIFRUU19GTEFHX1NMT1cgZmxhZyBpcyBzYXZl ZCBzdGF0ZSBmb3IKLSAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUsIGFuZCBzaG91bGQgbm90IGJl IHRvdWNoZWQgYnkgYW55IG90aGVyIGNvZGUuCiAgKi0tLS0tLS0tLS0KICAqLwogCkBAIC05OCwx MiArOTUsMTMgQEAKICNkZWZpbmUJCQlUVFNfRkxBR19TSE9VTERGUkVFCQkoMSA8PCAyKQogI2Rl ZmluZSBUVFNfU0hPVUxERlJFRShzbG90KSAoKChzbG90KS0+dHRzX2ZsYWdzICYgVFRTX0ZMQUdf U0hPVUxERlJFRSkgIT0gMCkKIAotLyogc2F2ZWQgc3RhdGUgZm9yIHNsb3RfZGVmb3JtX2hlYXBf dHVwbGUgKi8KLSNkZWZpbmUJCQlUVFNfRkxBR19TTE9XCQkoMSA8PCAzKQotI2RlZmluZSBUVFNf U0xPVyhzbG90KSAoKChzbG90KS0+dHRzX2ZsYWdzICYgVFRTX0ZMQUdfU0xPVykgIT0gMCkKKy8q IHRydWUgPSBmb3JtZWQgdHVwbGUgZ3VhcmFudGVlZCB0byBub3QgaGF2ZSBOVUxMcyBpbiBOT1Qg TlVMTGFibGUgY29sdW1ucyAqLworI2RlZmluZQkJCVRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NP TlNUUkFJTlRTCQkoMSA8PCAzKQorI2RlZmluZSBUVFNfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlO VFMoc2xvdCkgXAorCSgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19PQkVZU19OT1RfTlVM TF9DT05TVFJBSU5UUykgIT0gMCkKIAogLyogZml4ZWQgdHVwbGUgZGVzY3JpcHRvciAqLwotI2Rl ZmluZQkJCVRUU19GTEFHX0ZJWEVECQkoMSA8PCA0KQorI2RlZmluZQkJCVRUU19GTEFHX0ZJWEVE CQkoMSA8PCA0KQkvKiBYWFggY2hhbmdlIHRvICMzPyAqLwogI2RlZmluZSBUVFNfRklYRUQoc2xv dCkgKCgoc2xvdCktPnR0c19mbGFncyAmIFRUU19GTEFHX0ZJWEVEKSAhPSAwKQogCiBzdHJ1Y3Qg VHVwbGVUYWJsZVNsb3RPcHM7CkBAIC0xMjMsNyArMTIxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgVHVw bGVUYWJsZVNsb3QKICNkZWZpbmUgRklFTEROT19UVVBMRVRBQkxFU0xPVF9WQUxVRVMgNQogCURh dHVtCSAgICp0dHNfdmFsdWVzOwkJLyogY3VycmVudCBwZXItYXR0cmlidXRlIHZhbHVlcyAqLwog I2RlZmluZSBGSUVMRE5PX1RVUExFVEFCTEVTTE9UX0lTTlVMTCA2Ci0JYm9vbAkgICAqdHRzX2lz bnVsbDsJCS8qIGN1cnJlbnQgcGVyLWF0dHJpYnV0ZSBpc251bGwgZmxhZ3MgKi8KKwlib29sCSAg ICp0dHNfaXNudWxsOwkJLyogY3VycmVudCBwZXItYXR0cmlidXRlIGlzbnVsbCBmbGFncy4gIEFy cmF5CisJCQkJCQkJCSAqIHNpemUgbXVzdCBhbHdheXMgYmUgcm91bmRlZCB1cCB0byB0aGUgbmV4 dAorCQkJCQkJCQkgKiBtdWx0aXBsZSBvZiA4IGVsZW1lbnRzLiAqLwogCU1lbW9yeUNvbnRleHQg dHRzX21jeHQ7CQkvKiBzbG90IGl0c2VsZiBpcyBpbiB0aGlzIGNvbnRleHQgKi8KIAlJdGVtUG9p bnRlckRhdGEgdHRzX3RpZDsJLyogc3RvcmVkIHR1cGxlJ3MgdGlkICovCiAJT2lkCQkJdHRzX3Rh YmxlT2lkOwkvKiB0YWJsZSBvaWQgb2YgdHVwbGUgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZv cm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKaW5kZXggNzgzOGY2MzliZWYuLmRlMzlmZWNmOGZkIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYwor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYwpAQCAtNDks NiArNDksNyBAQCBkZWZvcm1fYmVuY2goUEdfRlVOQ1RJT05fQVJHUykKIAogCXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CiAJc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdCh0dXBkZXNj LCAmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKKwlzbG90LT50dHNfZmxhZ3MgfD0gVFRTX0ZMQUdf T0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFM7CiAJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJh dChyZWwsIEdldEFjdGl2ZVNuYXBzaG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsKIAogCS8q Ci0tIAoyLjUxLjAKCg== --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="US-ASCII"; name="v10-0004-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Disposition: attachment; filename="v10-0004-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm1b21eb3 RnJvbSA4YWNmOThjNTdhN2NlZDNlMDgxYzkxMWI0N2UxZDZkNjQ0YmMxN2RiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAxNiBGZWIgMjAyNiAxNDoyMDoxOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDQv NV0gQWxsb3cgc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBpbgogc2xvdF9nZXRzb21lYXR0cnNf aW50KCkKClRoaXMgY2hhbmdlcyB0aGUgVHVwbGVUYWJsZVNsb3RPcHMgY29udHJhY3QgdG8gbWFr ZSBpdCBzbyB0aGUKZ2V0c29tZWF0dHJzKCkgZnVuY3Rpb24gaXMgaW4gY2hhcmdlIG9mIGNhbGxp bmcKc2xvdF9nZXRtaXNzaW5nYXR0cnMoKS4KClNpbmNlIHRoaXMgcmVtb3ZlcyBhbGwgY29kZSBm cm9tIHNsb3RfZ2V0c29tZWF0dHJzX2ludCgpIGFzaWRlIGZyb20gdGhlCmdldHNvbWVhdHRycygp IGNhbGwgaXRzZWxmLCB3ZSBtYXkgYXMgd2VsbCBhZGp1c3Qgc2xvdF9nZXRzb21lYXR0cnMoKSBz bwp0aGF0IGl0IGNhbGxzIGdldHNvbWVhdHRycygpIGRpcmVjdGx5LiAgV2UgbGVhdmUgc2xvdF9n ZXRzb21lYXR0cnNfaW50KCkKaW50YWN0IGFzIHRoaXMgaXMgc3RpbGwgY2FsbGVkIGZyb20gdGhl IEpJVCBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyB8IDc5ICsr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRh YmxlLmggICB8ICA3ICstLQogMiBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCA0MiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggODBmYWYyOWI3OTcu LjIwNzBjNjY1ZDJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC03Myw3ICs3Myw3 IEBACiBzdGF0aWMgVHVwbGVEZXNjIEV4ZWNUeXBlRnJvbVRMSW50ZXJuYWwoTGlzdCAqdGFyZ2V0 TGlzdCwKIAkJCQkJCQkJCQlib29sIHNraXBqdW5rKTsKIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSB2b2lkIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNs b3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAotCQkJCQkJCQkJCQkJCQkJICBpbnQg bmF0dHMpOworCQkJCQkJCQkJCQkJCQkJICBpbnQgcmVxbmF0dHMpOwogc3RhdGljIGlubGluZSB2 b2lkIHR0c19idWZmZXJfaGVhcF9zdG9yZV90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJ CQkJCQkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVy LApAQCAtOTk2LDcgKzk5NiwxMCBAQCB0dHNfYnVmZmVyX2hlYXBfc3RvcmVfdHVwbGUoVHVwbGVU YWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwKICAqIHNsb3RfZGVmb3JtX2hlYXBfdHVw bGUKICAqCQlHaXZlbiBhIFR1cGxlVGFibGVTbG90LCBleHRyYWN0IGRhdGEgZnJvbSB0aGUgc2xv dCdzIHBoeXNpY2FsIHR1cGxlCiAgKgkJaW50byBpdHMgRGF0dW0vaXNudWxsIGFycmF5cy4gIERh dGEgaXMgZXh0cmFjdGVkIHVwIHRocm91Z2ggdGhlCi0gKgkJbmF0dHMndGggY29sdW1uIChjYWxs ZXIgbXVzdCBlbnN1cmUgdGhpcyBpcyBhIGxlZ2FsIGNvbHVtbiBudW1iZXIpLgorICoJCXJlcW5h dHRzJ3RoIGNvbHVtbi4gIElmIHRoZXJlIGFyZSBpbnN1ZmZpY2llbnQgYXR0cmlidXRlcyBpbiB0 aGUgZ2l2ZW4KKyAqCQl0dXBsZSwgdGhlbiBzbG90X2dldG1pc3NpbmdhdHRycygpIGlzIGNhbGxl ZCB0byBwb3B1bGF0ZSB0aGUKKyAqCQlyZW1haW5kZXIuICBJZiByZXFuYXR0cyBpcyBhYm92ZSB0 aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgKgkJc2xvdCdzIFR1cGxlRGVzYywgYW4g ZXJyb3IgaXMgcmFpc2VkLgogICoKICAqCQlUaGlzIGlzIGVzc2VudGlhbGx5IGFuIGluY3JlbWVu dGFsIHZlcnNpb24gb2YgaGVhcF9kZWZvcm1fdHVwbGU6CiAgKgkJb24gZWFjaCBjYWxsIHdlIGV4 dHJhY3QgYXR0cmlidXRlcyB1cCB0byB0aGUgb25lIG5lZWRlZCwgd2l0aG91dApAQCAtMTAwOCw3 ICsxMDExLDcgQEAgdHRzX2J1ZmZlcl9oZWFwX3N0b3JlX3R1cGxlKFR1cGxlVGFibGVTbG90ICpz bG90LCBIZWFwVHVwbGUgdHVwbGUsCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSB2b2lkCiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBI ZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKLQkJCQkJICAgaW50IG5hdHRzKQorCQkJCQkg ICBpbnQgcmVxbmF0dHMpCiB7CiAJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJVHVwbGVEZXNj CXR1cGxlRGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3I7CkBAIC0xMDE3LDYgKzEwMjAs NyBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVw bGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAlpbnQJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cjsK IAlpbnQJCQlmaXJzdE5vbkd1YXJhbnRlZWRBdHRyOwogCWludAkJCWZpcnN0TnVsbEF0dHI7CisJ aW50CQkJbmF0dHM7CiAJRGF0dW0JICAgKnZhbHVlczsKIAlib29sCSAgICppc251bGw7CiAJY2hh cgkgICAqdHA7CQkJCS8qIHB0ciB0byB0dXBsZSBkYXRhICovCkBAIC0xMDM4LDcgKzEwNDIsNyBA QCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUg dHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkgKiBhdHRycy4KIAkgKi8KIAlpZiAoVFRTX09CRVlTX05P VF9OVUxMX0NPTlNUUkFJTlRTKHNsb3QpKQotCQlmaXJzdE5vbkd1YXJhbnRlZWRBdHRyID0gTWlu KG5hdHRzLCB0dXBsZURlc2MtPmZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpOworCQlmaXJzdE5vbkd1 YXJhbnRlZWRBdHRyID0gTWluKHJlcW5hdHRzLCB0dXBsZURlc2MtPmZpcnN0Tm9uR3VhcmFudGVl ZEF0dHIpOwogCWVsc2UKIAkJZmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IDA7CiAKQEAgLTEwNDYs MTIgKzEwNTAsMTEgQEAgc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwgSGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAKIAlpZiAoSGVhcFR1cGxlSGFzTnVs bHModHVwbGUpKQogCXsKLQkJaW50CQkJdHVwbmF0dHMgPSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0 cyh0dXApOwotCisJCW5hdHRzID0gSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwKTsKIAkJdHAg PSAoY2hhciAqKSB0dXAgKyBNQVhBTElHTihvZmZzZXRvZihIZWFwVHVwbGVIZWFkZXJEYXRhLCB0 X2JpdHMpICsKLQkJCQkJCQkJCSBCSVRNQVBMRU4odHVwbmF0dHMpKTsKKwkJCQkJCQkJCSBCSVRN QVBMRU4obmF0dHMpKTsKIAotCQluYXR0cyA9IE1pbih0dXBuYXR0cywgbmF0dHMpOworCQluYXR0 cyA9IE1pbihuYXR0cywgcmVxbmF0dHMpOwogCQlpZiAobmF0dHMgPiBmaXJzdE5vbkd1YXJhbnRl ZWRBdHRyKQogCQl7CiAJCQliaXRzOAkgICAqYnAgPSB0dXAtPnRfYml0czsKQEAgLTEwODIsOCAr MTA4NSwxMyBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBI ZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkJICogV2Ugb25seSBuZWVkIHRvIGxvb2sg YXQgdGhlIHR1cGxlJ3MgbmF0dHMgaWYgd2UgbmVlZCBtb3JlIHRoYW4gdGhlCiAJCSAqIGd1YXJh bnRlZWQgbnVtYmVyIG9mIGNvbHVtbnMKIAkJICovCi0JCWlmIChuYXR0cyA+IGZpcnN0Tm9uR3Vh cmFudGVlZEF0dHIpCi0JCQluYXR0cyA9IE1pbihIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXAp LCBuYXR0cyk7CisJCWlmIChyZXFuYXR0cyA+IGZpcnN0Tm9uR3VhcmFudGVlZEF0dHIpCisJCQlu YXR0cyA9IE1pbihIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXApLCByZXFuYXR0cyk7CisJCWVs c2UKKwkJeworCQkJLyogTm8gbmVlZCB0byBhY2Nlc3MgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVz IGluIHRoZSB0dXBsZSAqLworCQkJbmF0dHMgPSByZXFuYXR0czsKKwkJfQogCiAJCS8qIEFsbCBh dHRycyBjYW4gYmUgZmV0Y2hlZCB3aXRob3V0IGNoZWNraW5nIGZvciBOVUxMcyAqLwogCQlmaXJz dE51bGxBdHRyID0gbmF0dHM7CkBAIC0xMDkxLDcgKzEwOTksNyBAQCBzbG90X2RlZm9ybV9oZWFw X3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2Zm cCwKIAogCWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7CiAJdmFsdWVzID0gc2xvdC0+dHRzX3Zh bHVlczsKLQlzbG90LT50dHNfbnZhbGlkID0gbmF0dHM7CisJc2xvdC0+dHRzX252YWxpZCA9IHJl cW5hdHRzOwogCiAJLyogRW5zdXJlIHdlIGNhbGN1bGF0ZWQgdHAgY29ycmVjdGx5ICovCiAJQXNz ZXJ0KHRwID09IChjaGFyICopIHR1cCArIHR1cC0+dF9ob2ZmKTsKQEAgLTExMjMsNyArMTEzMSw3 IEBAIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBs ZSB0dXBsZSwgdWludDMyICpvZmZwLAogCiAJCW9mZiArPSBjYXR0ci0+YXR0bGVuOwogCi0JCWlm IChhdHRudW0gPT0gbmF0dHMpCisJCWlmIChhdHRudW0gPT0gcmVxbmF0dHMpCiAJCQlnb3RvIGRv bmU7CiAJfQogCWVsc2UKQEAgLTEyMjIsMTIgKzEyMzAsMTIgQEAgc2xvdF9kZWZvcm1faGVhcF90 dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAs CiAJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnkpOwogCX0KIAorCS8qIEZldGNoIGFueSBt aXNzaW5nIGF0dHJzIGFuZCByYWlzZSBhbiBlcnJvciBpZiByZXFuYXR0cyBpcyBpbnZhbGlkICov CisJaWYgKHVubGlrZWx5KGF0dG51bSA8IHJlcW5hdHRzKSkKKwkJc2xvdF9nZXRtaXNzaW5nYXR0 cnMoc2xvdCwgYXR0bnVtLCByZXFuYXR0cyk7CiBkb25lOgogCi0JLyoKLQkgKiBTYXZlIHN0YXRl IGZvciBuZXh0IGV4ZWN1dGlvbgotCSAqLwotCXNsb3QtPnR0c19udmFsaWQgPSBhdHRudW07CisJ LyogU2F2ZSBjdXJyZW50IG9mZnNldCBmb3IgbmV4dCBleGVjdXRpb24gKi8KIAkqb2ZmcCA9IG9m ZjsKIH0KIApAQCAtMjA4OCwyOCArMjA5NiwyOSBAQCBzbG90X2dldG1pc3NpbmdhdHRycyhUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgaW50IHN0YXJ0QXR0TnVtLCBpbnQgbGFzdEF0dE51bSkKIAlpZiAo IWF0dHJtaXNzKQogCXsKIAkJLyogbm8gbWlzc2luZyB2YWx1ZXMgYXJyYXkgYXQgYWxsLCBzbyBq dXN0IGZpbGwgZXZlcnl0aGluZyBpbiBhcyBOVUxMICovCi0JCW1lbXNldChzbG90LT50dHNfdmFs dWVzICsgc3RhcnRBdHROdW0sIDAsCi0JCQkgICAobGFzdEF0dE51bSAtIHN0YXJ0QXR0TnVtKSAq IHNpemVvZihEYXR1bSkpOwotCQltZW1zZXQoc2xvdC0+dHRzX2lzbnVsbCArIHN0YXJ0QXR0TnVt LCAxLAotCQkJICAgKGxhc3RBdHROdW0gLSBzdGFydEF0dE51bSkgKiBzaXplb2YoYm9vbCkpOwor CQlmb3IgKGludCBhdHRudW0gPSBzdGFydEF0dE51bTsgYXR0bnVtIDwgbGFzdEF0dE51bTsgYXR0 bnVtKyspCisJCXsKKwkJCXNsb3QtPnR0c192YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKKwkJ CXNsb3QtPnR0c19pc251bGxbYXR0bnVtXSA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKLQkJ aW50CQkJbWlzc2F0dG51bTsKLQotCQkvKiBpZiB0aGVyZSBpcyBhIG1pc3NpbmcgdmFsdWVzIGFy cmF5IHdlIG11c3QgcHJvY2VzcyB0aGVtIG9uZSBieSBvbmUgKi8KLQkJZm9yIChtaXNzYXR0bnVt ID0gc3RhcnRBdHROdW07Ci0JCQkgbWlzc2F0dG51bSA8IGxhc3RBdHROdW07Ci0JCQkgbWlzc2F0 dG51bSsrKQorCQkvKiB1c2UgYXR0cm1pc3MgdG8gc2V0IHRoZSBtaXNzaW5nIHZhbHVlcyAqLwor CQlmb3IgKGludCBhdHRudW0gPSBzdGFydEF0dE51bTsgYXR0bnVtIDwgbGFzdEF0dE51bTsgYXR0 bnVtKyspCiAJCXsKLQkJCXNsb3QtPnR0c192YWx1ZXNbbWlzc2F0dG51bV0gPSBhdHRybWlzc1tt aXNzYXR0bnVtXS5hbV92YWx1ZTsKLQkJCXNsb3QtPnR0c19pc251bGxbbWlzc2F0dG51bV0gPSAh YXR0cm1pc3NbbWlzc2F0dG51bV0uYW1fcHJlc2VudDsKKwkJCXNsb3QtPnR0c192YWx1ZXNbYXR0 bnVtXSA9IGF0dHJtaXNzW2F0dG51bV0uYW1fdmFsdWU7CisJCQlzbG90LT50dHNfaXNudWxsW2F0 dG51bV0gPSAhYXR0cm1pc3NbYXR0bnVtXS5hbV9wcmVzZW50OwogCQl9CiAJfQorCisJaWYgKHVu bGlrZWx5KGxhc3RBdHROdW0gPiBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cykpCisJ CWVsb2coRVJST1IsICJpbnZhbGlkIGF0dHJpYnV0ZSBudW1iZXIgJWQiLCBsYXN0QXR0TnVtKTsK IH0KIAogLyoKLSAqIHNsb3RfZ2V0c29tZWF0dHJzX2ludCAtIHdvcmtob3JzZSBmb3Igc2xvdF9n ZXRzb21lYXR0cnMoKQorICogc2xvdF9nZXRzb21lYXR0cnNfaW50CisgKgkJZXh0ZXJuYWwgZnVu Y3Rpb24gdG8gY2FsbCBnZXRzb21lYXR0cnMoKSBmb3IgdXNlIGluIEpJVAogICovCiB2b2lkCiBz bG90X2dldHNvbWVhdHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0pCkBA IC0yMTE4LDIxICsyMTI3LDEzIEBAIHNsb3RfZ2V0c29tZWF0dHJzX2ludChUdXBsZVRhYmxlU2xv dCAqc2xvdCwgaW50IGF0dG51bSkKIAlBc3NlcnQoc2xvdC0+dHRzX252YWxpZCA8IGF0dG51bSk7 CS8qIGNoZWNrZWQgaW4gc2xvdF9nZXRzb21lYXR0cnMgKi8KIAlBc3NlcnQoYXR0bnVtID4gMCk7 CiAKLQlpZiAodW5saWtlbHkoYXR0bnVtID4gc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvci0+bmF0 dHMpKQotCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhdHRyaWJ1dGUgbnVtYmVyICVkIiwgYXR0bnVt KTsKLQogCS8qIEZldGNoIGFzIG1hbnkgYXR0cmlidXRlcyBhcyBwb3NzaWJsZSBmcm9tIHRoZSB1 bmRlcmx5aW5nIHR1cGxlLiAqLwogCXNsb3QtPnR0c19vcHMtPmdldHNvbWVhdHRycyhzbG90LCBh dHRudW0pOwogCiAJLyoKLQkgKiBJZiB0aGUgdW5kZXJseWluZyB0dXBsZSBkb2Vzbid0IGhhdmUg ZW5vdWdoIGF0dHJpYnV0ZXMsIHR1cGxlCi0JICogZGVzY3JpcHRvciBtdXN0IGhhdmUgdGhlIG1p c3NpbmcgYXR0cmlidXRlcy4KKwkgKiBBdm9pZCBwdXR0aW5nIG5ldyBjb2RlIGhlcmUgYXMgdGhh dCB3b3VsZCBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tCisJICogdXNpbmcgdGhlIHNpYmxpbmcg Y2FsbCBvcHRpbWl6YXRpb24gZm9yIHRoZSBhYm92ZSBmdW5jdGlvbi4KIAkgKi8KLQlpZiAodW5s aWtlbHkoc2xvdC0+dHRzX252YWxpZCA8IGF0dG51bSkpCi0JewotCQlzbG90X2dldG1pc3Npbmdh dHRycyhzbG90LCBzbG90LT50dHNfbnZhbGlkLCBhdHRudW0pOwotCQlzbG90LT50dHNfbnZhbGlk ID0gYXR0bnVtOwotCX0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvdHVwdGFibGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKaW5k ZXggODM0NmJlNzczMDIuLjE5MjJjOTEyMDg5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVj dXRvci90dXB0YWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKQEAg LTE1Myw4ICsxNTMsOCBAQCBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3RPcHMKIAkgKiBGaWxsIHVwIGZp cnN0IG5hdHRzIGVudHJpZXMgb2YgdHRzX3ZhbHVlcyBhbmQgdHRzX2lzbnVsbCBhcnJheXMgd2l0 aAogCSAqIHZhbHVlcyBmcm9tIHRoZSB0dXBsZSBjb250YWluZWQgaW4gdGhlIHNsb3QuIFRoZSBm dW5jdGlvbiBtYXkgYmUgY2FsbGVkCiAJICogd2l0aCBuYXR0cyBtb3JlIHRoYW4gdGhlIG51bWJl ciBvZiBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBpbiB0aGUgdHVwbGUsCi0JICogaW4gd2hpY2ggY2Fz ZSBpdCBzaG91bGQgc2V0IHR0c19udmFsaWQgdG8gdGhlIG51bWJlciBvZiByZXR1cm5lZAotCSAq IGNvbHVtbnMuCisJICogaW4gd2hpY2ggY2FzZSB0aGUgZnVuY3Rpb24gbXVzdCBjYWxsIHNsb3Rf Z2V0bWlzc2luZ2F0dHJzKCkgdG8gcG9wdWxhdGUKKwkgKiB0aGUgcmVtYWluaW5nIGF0dHJpYnV0 ZXMuCiAJICovCiAJdm9pZAkJKCpnZXRzb21lYXR0cnMpIChUdXBsZVRhYmxlU2xvdCAqc2xvdCwg aW50IG5hdHRzKTsKIApAQCAtMzU3LDggKzM1Nyw5IEBAIGV4dGVybiB2b2lkIHNsb3RfZ2V0c29t ZWF0dHJzX2ludChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGF0dG51bSk7CiBzdGF0aWMgaW5s aW5lIHZvaWQKIHNsb3RfZ2V0c29tZWF0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0 bnVtKQogeworCS8qIFBvcHVsYXRlIHNsb3Qgd2l0aCBhdHRyaWJ1dGVzIHVwIHRvICdhdHRudW0n LCBpZiBpdCdzIG5vdCBhbHJlYWR5ICovCiAJaWYgKHNsb3QtPnR0c19udmFsaWQgPCBhdHRudW0p Ci0JCXNsb3RfZ2V0c29tZWF0dHJzX2ludChzbG90LCBhdHRudW0pOworCQlzbG90LT50dHNfb3Bz LT5nZXRzb21lYXR0cnMoc2xvdCwgYXR0bnVtKTsKIH0KIAogLyoKLS0gCjIuNTEuMAoK --0000000000008ac31f064b9b3e0f Content-Type: text/plain; charset="US-ASCII"; name="v10-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Disposition: attachment; filename="v10-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm1b23hf4 RnJvbSAzNzQ5YTBmOWQyOThmNWJkN2UxYWMwNjE5NWE2YTI1ZmQxMGI2M2E1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAyMyBGZWIgMjAyNiAwOTozOTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDUv NV0gUmVkdWNlIHNpemUgb2YgQ29tcGFjdEF0dHJpYnV0ZSBzdHJ1Y3QgdG8gOCBieXRlcwoKUHJl dmlvdXNseSwgdGhpcyB3YXMgMTYgYnl0ZXMuICBXaXRoIHRoZSB1c2Ugb2Ygc29tZSBiaXRmbGFn cyBhbmQgYnkKcmVkdWNpbmcgdGhlIGF0dGNhY2hlb2ZmIGZpZWxkIHNpemUgdG8gYSAxNi1iaXQg dHlwZSwgd2UgY2FuIGhhbHZlIHRoZQpzaXplIG9mIHRoZSBzdHJ1Y3QuCgpJdCdzIHVubGlrZWx5 IHRoYXQgY2FjaGluZyB0aGUgb2Zmc2V0cyBmb3Igb2Zmc2V0cyBsYXJnZXIgdGhhbiB3aGF0IHdp bGwKZml0IGluIGEgMTYtYml0IGludCB3aWxsIGhlbHAgbXVjaCBhcyB0aGUgdHVwbGUgaXMgdmVy eSBsaWtlbHkgdG8gaGF2ZQpzb21lIG5vbi1maXhlZC13aWR0aCB0eXBlcyBhbnl3YXksIHRoZSBv ZmZzZXRzIG9mIHdoaWNoIHdlIGNhbm5vdCBjYWNoZS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyB8IDEwICsrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYyAgIHwgMTYgKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3R1 cGRlc2MuaCAgICAgICAgfCAxNiArKysrKysrKy0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBk ZXNjLmMKaW5kZXggNDEwODVkNDNjODUuLmNhODQ5MTNmM2FkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYwpAQCAtNTI1LDYgKzUyNSwxNiBAQCBUdXBsZURlc2NGaW5hbGl6ZShUdXBs ZURlc2MgdHVwZGVzYykKIAogCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHIt PmF0dGFsaWduYnkpOwogCisJCS8qCisJCSAqIGF0dGNhY2hlb2ZmIGlzIGFuIGludDE2LCBzbyBk b24ndCB0cnkgYW5kIGNhY2hlIGFueSBvZmZzZXRzIGxhcmdlcgorCQkgKiB0aGFuIHdpbGwgZml0 IGluIHRoYXQgdHlwZS4gIEFueSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBvZmZzZXQgbW9yZQorCQkg KiB0aGFuIDJeMTUgYXJlIGxpa2VseSBkdWUgdG8gdmFyaWFibGUgbGVuZ3RoIGF0dHJpYnV0ZXMu ICBTaW5jZSB3ZQorCQkgKiBkb24ndCBjYWNoZSBvZmZzZXRzIGZvciBvciBiZXlvbmQgdmFyaWFi bGUgbGVuZ3RoIGF0dHJpYnV0ZXMsIHVzaW5nCisJCSAqIGFuIGludDE2IHJhdGhlciB0aGFuIGFu IGludDMyIGhlcmUgaXMgdW5saWtlbHkgdG8gY29zdCB1cyBhbnl0aGluZy4KKwkJICovCisJCWlm IChvZmYgPiBQR19JTlQxNl9NQVgpCisJCQlicmVhazsKKwogCQljYXR0ci0+YXR0Y2FjaGVvZmYg PSBvZmY7CiAKIAkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKaW5kZXggMjA3MGM2NjVkMmYuLmIzNjk5Yjc3NjQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jCkBAIC0xMDEzLDYgKzEwMTMsNyBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgdm9pZAogc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwg SGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAJCQkJCSAgIGludCByZXFuYXR0cykKIHsK KwlDb21wYWN0QXR0cmlidXRlICpjYXR0cnM7CiAJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJ VHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3I7CiAJSGVhcFR1 cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CkBAIC0xMTAxLDYgKzExMDIsMTMgQEAgc2xv dF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxl LCB1aW50MzIgKm9mZnAsCiAJdmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsKIAlzbG90LT50dHNf bnZhbGlkID0gcmVxbmF0dHM7CiAKKwkvKgorCSAqIFdlIHN0b3JlIHRoZSB0dXBsZURlc2MncyBD b21wYWN0QXR0cmlidXRlIGFycmF5IGluICdjYXR0cnMnIGFzIGdjYworCSAqIHNlZW1zIHRvIGJl IHVud2lsbGluZyB0byBvcHRpbWl6ZSBhY2Nlc3NpbmcgdGhlIENvbXBhY3RBdHRyaWJ1dGUKKwkg KiBlbGVtZW50IGVmZmljaWVudGx5IHdoZW4gYWNjZXNzaW5nIGl0IHZpYSBUdXBsZURlc2NDb21w YWN0QXR0cigpLgorCSAqLworCWNhdHRycyA9IHR1cGxlRGVzYy0+Y29tcGFjdF9hdHRyczsKKwog CS8qIEVuc3VyZSB3ZSBjYWxjdWxhdGVkIHRwIGNvcnJlY3RseSAqLwogCUFzc2VydCh0cCA9PSAo Y2hhciAqKSB0dXAgKyB0dXAtPnRfaG9mZik7CiAKQEAgLTExMTEsNyArMTExOSw3IEBAIHNsb3Rf ZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwg dWludDMyICpvZmZwLAogCQkJaW50CQkJYXR0bGVuOwogCiAJCQlpc251bGxbYXR0bnVtXSA9IGZh bHNlOwotCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7 CisJCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVtXTsKIAkJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47 CiAKIAkJCS8qIFdlIGRvbid0IGV4cGVjdCBhbnkgbm9uLWJ5dmFsIHR5cGVzICovCkBAIC0xMTU2 LDcgKzExNjQsNyBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90 LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkJZG8KIAkJewogCQkJaXNudWxsW2F0 dG51bV0gPSBmYWxzZTsKLQkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNj LCBhdHRudW0pOworCQkJY2F0dHIgPSAmY2F0dHJzW2F0dG51bV07CiAKIAkJCW9mZiA9IGNhdHRy LT5hdHRjYWNoZW9mZjsKIAkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsg b2ZmLApAQCAtMTE4Myw3ICsxMTkxLDcgQEAgc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRh YmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAJCWludAkJCWF0 dGxlbjsKIAogCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOwotCQljYXR0ciA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJY2F0dHIgPSAmY2F0dHJzW2F0dG51bV07 CiAJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47CiAKIAkJLyoKQEAgLTEyMTYsNyArMTIyNCw3IEBA IHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0 dXBsZSwgdWludDMyICpvZmZwLAogCQkJY29udGludWU7CiAJCX0KIAotCQljYXR0ciA9IFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJY2F0dHIgPSAmY2F0dHJzW2F0 dG51bV07CiAJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47CiAKIAkJLyogQXMgYWJvdmUsIHdlIGRv bid0IGV4cGVjdCBjc3RyaW5ncyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1 cGRlc2MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKaW5kZXggODBlMWRkMGUzYzcu LjljNWVhYzQ5MTcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgVHVwbGVDb25zdHIKICAqCQlkaXJlY3RseSBhZnRlciB0aGUgRm9ybURhdGFfcGdf YXR0cmlidXRlIHN0cnVjdCBpcyBwb3B1bGF0ZWQgb3IKICAqCQlhbHRlcmVkIGluIGFueSB3YXku CiAgKgotICogQ3VycmVudGx5LCB0aGlzIHN0cnVjdCBpcyAxNiBieXRlcy4gIEFueSBjb2RlIGNo YW5nZXMgd2hpY2ggZW5sYXJnZSB0aGlzCisgKiBDdXJyZW50bHksIHRoaXMgc3RydWN0IGlzIDgg Ynl0ZXMuICBBbnkgY29kZSBjaGFuZ2VzIHdoaWNoIGVubGFyZ2UgdGhpcwogICogc3RydWN0IHNo b3VsZCBiZSBjb25zaWRlcmVkIHZlcnkgY2FyZWZ1bGx5LgogICoKICAqIENvZGUgd2hpY2ggbXVz dCBhY2Nlc3MgYSBUdXBsZURlc2MncyBhdHRyaWJ1dGUgZGF0YSBzaG91bGQgYWx3YXlzIG1ha2Ug dXNlCkBAIC02NywxNyArNjcsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHVwbGVDb25zdHIKICAqLwog dHlwZWRlZiBzdHJ1Y3QgQ29tcGFjdEF0dHJpYnV0ZQogewotCWludDMyCQlhdHRjYWNoZW9mZjsJ LyogZml4ZWQgb2Zmc2V0IGludG8gdHVwbGUsIGlmIGtub3duLCBvciAtMSAqLworCWludDE2CQlh dHRjYWNoZW9mZjsJLyogZml4ZWQgb2Zmc2V0IGludG8gdHVwbGUsIGlmIGtub3duLCBvciAtMSAq LwogCWludDE2CQlhdHRsZW47CQkJLyogYXR0ciBsZW4gaW4gYnl0ZXMgb3IgLTEgPSB2YXJsZW4s IC0yID0KIAkJCQkJCQkJICogY3N0cmluZyAqLwogCWJvb2wJCWF0dGJ5dmFsOwkJLyogYXMgRm9y bURhdGFfcGdfYXR0cmlidXRlLmF0dGJ5dmFsICovCi0JYm9vbAkJYXR0aXNwYWNrYWJsZTsJLyog Rm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dHN0b3JhZ2UgIT0KLQkJCQkJCQkJICogVFlQU1RPUkFH RV9QTEFJTiAqLwotCWJvb2wJCWF0dGhhc21pc3Npbmc7CS8qIGFzIEZvcm1EYXRhX3BnX2F0dHJp YnV0ZS5hdHRoYXNtaXNzaW5nICovCi0JYm9vbAkJYXR0aXNkcm9wcGVkOwkvKiBhcyBGb3JtRGF0 YV9wZ19hdHRyaWJ1dGUuYXR0aXNkcm9wcGVkICovCi0JYm9vbAkJYXR0Z2VuZXJhdGVkOwkvKiBG b3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0Z2VuZXJhdGVkICE9ICdcMCcgKi8KLQljaGFyCQlhdHRu dWxsYWJpbGl0eTsgLyogc3RhdHVzIG9mIG5vdC1udWxsIGNvbnN0cmFpbnQsIHNlZSBiZWxvdyAq LwogCXVpbnQ4CQlhdHRhbGlnbmJ5OwkJLyogYWxpZ25tZW50IHJlcXVpcmVtZW50IGluIGJ5dGVz ICovCisJYm9vbAkJYXR0aXNwYWNrYWJsZToxOwkvKiBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0 c3RvcmFnZSAhPQorCQkJCQkJCQkJICogVFlQU1RPUkFHRV9QTEFJTiAqLworCWJvb2wJCWF0dGhh c21pc3Npbmc6MTsJLyogYXMgRm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dGhhc21pc3NpbmcgKi8K Kwlib29sCQlhdHRpc2Ryb3BwZWQ6MTsgLyogYXMgRm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dGlz ZHJvcHBlZCAqLworCWJvb2wJCWF0dGdlbmVyYXRlZDoxOyAvKiBGb3JtRGF0YV9wZ19hdHRyaWJ1 dGUuYXR0Z2VuZXJhdGVkICE9ICdcMCcgKi8KKwljaGFyCQlhdHRudWxsYWJpbGl0eTsgLyogc3Rh dHVzIG9mIG5vdC1udWxsIGNvbnN0cmFpbnQsIHNlZSBiZWxvdyAqLwogfSBDb21wYWN0QXR0cmli dXRlOwogCiAvKiBWYWxpZCB2YWx1ZXMgZm9yIENvbXBhY3RBdHRyaWJ1dGUtPmF0dG51bGxhYmls aXR5ICovCi0tIAoyLjUxLjAKCg== --0000000000008ac31f064b9b3e0f--