Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozK6w-0002Tf-ES for pgsql-hackers@arkaria.postgresql.org; Sun, 27 Nov 2022 16:02:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ozK6u-0005sV-9v for pgsql-hackers@arkaria.postgresql.org; Sun, 27 Nov 2022 16:02:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozK6t-0005sM-DG for pgsql-hackers@lists.postgresql.org; Sun, 27 Nov 2022 16:02:28 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ozK6o-0004ub-Ux for pgsql-hackers@postgresql.org; Sun, 27 Nov 2022 16:02:26 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5so6872174wmo.1 for ; Sun, 27 Nov 2022 08:02:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=41/GNkyJ8MZhdFBnQRoqrSQI7KJ9Lhb/5S893Epdj44=; b=URD54sO6wkvBgTEUk5lGdxysohtdT07QWD+VbEsWDe57G1tOFGcGXFg7XeCwtKnRR3 cHVGbQuSIRK87pSOtcEMsQS5thu0pom2XWJWZEVXibKPxuf1oucWMxf/QhpXo+1T52Ba t/q9hnKe7udSWgL3AdaGpwFOLVkPGEBRtucHZC4o0uD55IhGu6QKD455SMuWvsp2LCbY mxX//qsZtV2BLS6eUyOI7Soyy2xTRSRHmK5ORvMF1aGb1Mw2U83x6DO767Mr4oPvlv3E Oy/zj7+sooz8NO6NlQqydWz50zKBUxz74G2j/q4NC7/zV5S12O+j1fPWAOVy6sEQxh3s AB9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=41/GNkyJ8MZhdFBnQRoqrSQI7KJ9Lhb/5S893Epdj44=; b=uGKuAHfqyUOdag7LSlZdqujMJQRo02+6/I517YCMer0+hxsYir9jkRYndOux+x2UdU bR7Yc9aGpdSiWDamoBor4wTk0eumNoyv982XKO39PBWa/DN/7rAjoFE4CoUlCi7OQydn xDgExJ8wU7FIRJbsWlQfowRJ0TKNBlUCfBNrLycw3G42dfAp2zuUih1Ki/h+6TEuexd/ sNw4Qeo58Mfo1TjA+exrN4QYl7E3Rn0lRzrIQTkhm8ueDmm71fWGy+L295K5z/D3qF3i SBPn3ChUD1oeQnvNQ69B1Ld0iAUCDpZd/DvROiCwcJTSTwtykw9StkXSuftlZez+53wn 1ePg== X-Gm-Message-State: ANoB5pkCBuppMuqVK/tmxuG85LypvAILez5HiQWkGPySD186dU6SGhHq pRcevj4Lg8p7CuNllJw0cw89CZ67VCiEzgrInKT06zBks8PLTwL3I8zY9DSyKpq9Qg/ZFBBO1Ri ZYS9Ga1JMlBheY7u05m5FnfqP3JQdh4D3wcHfNESOqOV1SSm3MT/U6QuZrkPKIhhNhK6NJASkCi odLm/ulIA2xio9xFQdsuAHH9n++uN85w7eJHdSzvqeBiGHq0x96jRUaQqyscMQqdtCL9y/7Eg6g k9JyjdR4mTRpVZW9CHhGMirIT+mA5lKpdBq X-Google-Smtp-Source: AA0mqf6GvRr+TJ7Om1qyOljpamfITDmlGKHU//dKv5LIuv/BkvoC5PuGymfOXc2MsMISaMYqzN9aNw== X-Received: by 2002:a7b:c8c3:0:b0:3cf:b49e:1638 with SMTP id f3-20020a7bc8c3000000b003cfb49e1638mr24421835wml.50.1669564941102; Sun, 27 Nov 2022 08:02:21 -0800 (PST) Received: from [10.137.0.17] (ip-86-49-228-162.bb.vodafone.cz. [86.49.228.162]) by smtp.gmail.com with ESMTPSA id y15-20020a056000108f00b002420d51e581sm3731385wrw.67.2022.11.27.08.02.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 27 Nov 2022 08:02:20 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Ce4JWepZEfScVENch2mvihNo" Message-ID: Date: Sun, 27 Nov 2022 17:02:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: pglz compression performance, take two To: Ian Lawrence Barwick , Andrey Borodin Cc: Mark Dilger , Justin Pryzby , pgsql-hackers@postgresql.org References: <25991595-1848-4178-AA57-872B10309DA2@yandex-team.ru> <20201230043930.GG25152@telsasoft.com> <20210122024811.GE27167@telsasoft.com> <88C049C6-1B86-4EF7-940D-585B07FEB81B@yandex-team.ru> <90649B7F-EF71-40F7-93D0-1029AD0D90F3@enterprisedb.com> <84aa2da0-004d-c8f8-48c8-aa2861d1ff73@enterprisedb.com> <120DD821-48F4-446C-865A-093E560A2143@yandex-team.ru> Content-Language: en-US From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Ce4JWepZEfScVENch2mvihNo Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I took a look at the v6 patch, with the intention to get it committed. I have a couple minor comments: 1) For PGLZ_HISTORY_SIZE it uses literal 0x0fff, with the explanation: /* to avoid compare in iteration */ which I think means intent to use this value as a bit mask, but then the only place using PGLZ_HISTORY_SIZE does if (hist_next == PGLZ_HISTORY_SIZE) ... i.e. a comparison. Maybe I misunderstand the comment, though. 2) PGLZ_HistEntry was modified and replaces links (pointers) with indexes, but the comments still talk about "links", so maybe that needs to be changed. Also, I wonder why next_id is int16 while hist_idx is uint16 (and also why id vs. idx)? 3) minor formatting of comments 4) the comment in pglz_find_match about traversing the history seems too early - it's before handling invalid entries and cleanup, but it does not talk about that at all, and the actual while loop is after that. Attached is v6 in 0001 (verbatim), with the review comments in 0002. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------Ce4JWepZEfScVENch2mvihNo Content-Type: text/x-patch; charset=UTF-8; name="0001-Reorganize-pglz-compression-code-v6.patch" Content-Disposition: attachment; filename="0001-Reorganize-pglz-compression-code-v6.patch" Content-Transfer-Encoding: base64 RnJvbSA1YWVlMTY0ZTVkNmVjNzE2ZTYwNzc1MWQxNzk3NTVhMzU5NjlhMzMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCAyNyBOb3YgMjAyMiAxNTowMjoyNyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBSZW9yZ2FuaXplIHBnbHogY29tcHJlc3Npb24gY29kZQoKVGhp cyBwYXRjaCBhY2N1bXVsYXRlcyBzZXZlcmFsIGNoYW5nZXM6CjEuIENvbnZlcnQgbWFjcm8t ZnVuY3Rpb25zIHRvIHJlZ3VsYXIgZnVuY3Rpb25zIGZvciByZWFkYWJpbGl0eQoyLiBVc2Ug bW9yZSBjb21wYWN0IGhhc2ggdGFibGUgd2l0aCB1aW50MTYgaW5kZXhlcyBpbnN0ZWFkIG9m IHBvaW50ZXJzCjMuIEF2b2lkIHByZXYgcG9pbnRlciBpbiBoYXNoIHRhYmxlCjQuIFVzZSA0 LWJ5dGUgY29tcGFyaXNvbnMgaW4gYSBzZWFyY2ggaW5zdGVhZCBvZiAxLWJ5dGUKVG90YWwg c3BlZWR1cCBhYm91dCB4MS40Ci0tLQogc3JjL2NvbW1vbi9wZ19semNvbXByZXNzLmMgfCA0 MzIgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDI0MiBpbnNlcnRpb25zKCspLCAxOTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2NvbW1vbi9wZ19semNvbXByZXNzLmMgYi9zcmMvY29tbW9uL3BnX2x6Y29tcHJlc3Mu YwppbmRleCA5ZGU1ZDVhMGQ0My4uMjQ4NTQ1YTEwOGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb21t b24vcGdfbHpjb21wcmVzcy5jCisrKyBiL3NyYy9jb21tb24vcGdfbHpjb21wcmVzcy5jCkBA IC0xMTgsMTMgKzExOCwxMyBAQAogICoJCQlvdXIgNEsgbWF4aW11bSBsb29rLWJhY2sgZGlz dGFuY2UgaXMgdG9vIHNtYWxsLgogICoKICAqCQkJVGhlIGNvbXByZXNzb3IgY3JlYXRlcyBh IHRhYmxlIGZvciBsaXN0cyBvZiBwb3NpdGlvbnMuCi0gKgkJCUZvciBlYWNoIGlucHV0IHBv c2l0aW9uIChleGNlcHQgdGhlIGxhc3QgMyksIGEgaGFzaCBrZXkgaXMKKyAqCQkJRm9yIGVh Y2ggaW5wdXQgcG9zaXRpb24gKGV4Y2VwdCB0aGUgbGFzdCA0KSwgYSBoYXNoIGtleSBpcwog ICoJCQlidWlsdCBmcm9tIHRoZSA0IG5leHQgaW5wdXQgYnl0ZXMgYW5kIHRoZSBwb3NpdGlv biByZW1lbWJlcmVkCiAgKgkJCWluIHRoZSBhcHByb3ByaWF0ZSBsaXN0LiBUaHVzLCB0aGUg dGFibGUgcG9pbnRzIHRvIGxpbmtlZAogICoJCQlsaXN0cyBvZiBsaWtlbHkgdG8gYmUgYXQg bGVhc3QgaW4gdGhlIGZpcnN0IDQgY2hhcmFjdGVycwogICoJCQltYXRjaGluZyBzdHJpbmdz LiBUaGlzIGlzIGRvbmUgb24gdGhlIGZseSB3aGlsZSB0aGUgaW5wdXQKICAqCQkJaXMgY29t cHJlc3NlZCBpbnRvIHRoZSBvdXRwdXQgYXJlYS4gIFRhYmxlIGVudHJpZXMgYXJlIG9ubHkK LSAqCQkJa2VwdCBmb3IgdGhlIGxhc3QgNDA5NiBpbnB1dCBwb3NpdGlvbnMsIHNpbmNlIHdl IGNhbm5vdCB1c2UKKyAqCQkJa2VwdCBmb3IgdGhlIGxhc3QgNDA5NCBpbnB1dCBwb3NpdGlv bnMsIHNpbmNlIHdlIGNhbm5vdCB1c2UKICAqCQkJYmFjay1wb2ludGVycyBsYXJnZXIgdGhh biB0aGF0IGFueXdheS4gIFRoZSBzaXplIG9mIHRoZSBoYXNoCiAgKgkJCXRhYmxlIGlzIGNo b3NlbiBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgLSBhIGxhcmdlciB0YWJsZQog ICoJCQloYXMgYSBsYXJnZXIgc3RhcnR1cCBjb3N0LCBhcyBpdCBuZWVkcyB0byBiZSBpbml0 aWFsaXplZCB0bwpAQCAtMTQ2LDE3ICsxNDYsMTUgQEAKICAqCQkJdXNlZCBmb3IgdGhlIG5l eHQgdGFnIGluIHRoZSBvdXRwdXQuCiAgKgogICoJCQlGb3IgZWFjaCBzdWJzZXF1ZW50IGVu dHJ5IGluIHRoZSBoaXN0b3J5IGxpc3QsIHRoZSAiZ29vZF9tYXRjaCIKLSAqCQkJaXMgbG93 ZXJlZCBieSAxMCUuIFNvIHRoZSBjb21wcmVzc29yIHdpbGwgYmUgbW9yZSBoYXBweSB3aXRo Ci0gKgkJCXNob3J0IG1hdGNoZXMgdGhlIGZ1cnRoZXIgaXQgaGFzIHRvIGdvIGJhY2sgaW4g dGhlIGhpc3RvcnkuCisgKgkJCWlzIGxvd2VyZWQgcm91Z2hseSBieSAxMCUuIFNvIHRoZSBj b21wcmVzc29yIHdpbGwgYmUgbW9yZSBoYXBweQorICoJCQl3aXRoIHNob3J0IG1hdGNoZXMg dGhlIGZ1cnRoZXIgaXQgaGFzIHRvIGdvIGJhY2sgaW4gdGhlIGhpc3RvcnkuCiAgKgkJCUFu b3RoZXIgInNwZWVkIGFnYWluc3QgcmF0aW8iIHByZWZlcmVuY2UgY2hhcmFjdGVyaXN0aWMg b2YKICAqCQkJdGhlIGFsZ29yaXRobS4KICAqCi0gKgkJCVRodXMgdGhlcmUgYXJlIDMgc3Rv cCBjb25kaXRpb25zIGZvciB0aGUgbG9va3VwIG9mIG1hdGNoZXM6CisgKgkJCVRodXMgdGhl cmUgYXJlIDIgc3RvcCBjb25kaXRpb25zIGZvciB0aGUgbG9va3VwIG9mIG1hdGNoZXM6CiAg KgogICoJCQkJLSBhIG1hdGNoID49IGdvb2RfbWF0Y2ggaXMgZm91bmQKICAqCQkJCS0gdGhl cmUgYXJlIG5vIG1vcmUgaGlzdG9yeSBlbnRyaWVzIHRvIGxvb2sgYXQKLSAqCQkJCS0gdGhl IG5leHQgaGlzdG9yeSBlbnRyeSBpcyBhbHJlYWR5IHRvbyBmYXIgYmFjawotICoJCQkJICB0 byBiZSBjb2RlZCBpbnRvIGEgdGFnLgogICoKICAqCQkJRmluYWxseSB0aGUgbWF0Y2ggYWxn b3JpdGhtIGNoZWNrcyB0aGF0IGF0IGxlYXN0IGEgbWF0Y2gKICAqCQkJb2YgMyBvciBtb3Jl IGJ5dGVzIGhhcyBiZWVuIGZvdW5kLCBiZWNhdXNlIHRoYXQgaXMgdGhlIHNtYWxsZXN0CkBA IC0xODcsMTMgKzE4NSwxMiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL3BnX2x6Y29tcHJlc3Mu aCIKIAotCiAvKiAtLS0tLS0tLS0tCiAgKiBMb2NhbCBkZWZpbml0aW9ucwogICogLS0tLS0t LS0tLQogICovCiAjZGVmaW5lIFBHTFpfTUFYX0hJU1RPUllfTElTVFMJODE5MgkvKiBtdXN0 IGJlIHBvd2VyIG9mIDIgKi8KLSNkZWZpbmUgUEdMWl9ISVNUT1JZX1NJWkUJCTQwOTYKKyNk ZWZpbmUgUEdMWl9ISVNUT1JZX1NJWkUJCTB4MGZmZgkvKiB0byBhdm9pZCBjb21wYXJlIGlu IGl0ZXJhdGlvbiAqLwogI2RlZmluZSBQR0xaX01BWF9NQVRDSAkJCTI3MwogCiAKQEAgLTIw MiwxNyArMTk5LDE2IEBACiAgKgogICoJCUxpbmtlZCBsaXN0IGZvciB0aGUgYmFja3dhcmQg aGlzdG9yeSBsb29rdXAKICAqCi0gKiBBbGwgdGhlIGVudHJpZXMgc2hhcmluZyBhIGhhc2gg a2V5IGFyZSBsaW5rZWQgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuCi0gKiBUaGlzIG1ha2Vz IGl0IGVhc3kgdG8gcmVtb3ZlIGFuIGVudHJ5IHdoZW4gaXQncyB0aW1lIHRvIHJlY3ljbGUg aXQKLSAqIChiZWNhdXNlIGl0J3MgbW9yZSB0aGFuIDRLIHBvc2l0aW9ucyBvbGQpLgorICog QWxsIHRoZSBlbnRyaWVzIHNoYXJpbmcgYSBoYXNoIGtleSBhcmUgbGlua2VkIGluIGEgc2lu Z2x5IGxpbmtlZCBsaXN0LgorICogTGlua3MgYXJlIG5vdCBjaGFuZ2VkIGR1cmluZyBpbnNl cnRpb24gaW4gb3JkZXIgdG8gc3BlZWQgaXQgdXAuCisgKiBJbnN0ZWFkIG1vcmUgY29tcGxp Y2F0ZWQgc3RvcCBjb25kaXRpb24gaXMgdXNlZCBkdXJpbmcgbGlzdCBpdGVyYXRpb24uCiAg KiAtLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IFBHTFpfSGlzdEVudHJ5CiB7Ci0J c3RydWN0IFBHTFpfSGlzdEVudHJ5ICpuZXh0OwkvKiBsaW5rcyBmb3IgbXkgaGFzaCBrZXkn cyBsaXN0ICovCi0Jc3RydWN0IFBHTFpfSGlzdEVudHJ5ICpwcmV2OwotCWludAkJCWhpbmRl eDsJCQkvKiBteSBjdXJyZW50IGhhc2gga2V5ICovCi0JY29uc3QgY2hhciAqcG9zOwkJCS8q IG15IGlucHV0IHBvc2l0aW9uICovCisJaW50MTYJCW5leHRfaWQ7CQkvKiBsaW5rcyBmb3Ig bXkgaGFzaCBrZXkncyBsaXN0ICovCisJdWludDE2CQloaXN0X2lkeDsJCS8qIG15IGN1cnJl bnQgaGFzaCBrZXkgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyICpwb3M7CS8qIG15IGlucHV0 IHBvc2l0aW9uICovCiB9IFBHTFpfSGlzdEVudHJ5OwogCiAKQEAgLTI1MywxNCArMjQ5LDEy IEBAIGNvbnN0IFBHTFpfU3RyYXRlZ3kgKmNvbnN0IFBHTFpfc3RyYXRlZ3lfYWx3YXlzID0g JnN0cmF0ZWd5X2Fsd2F5c19kYXRhOwogICogLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50 MTYgaGlzdF9zdGFydFtQR0xaX01BWF9ISVNUT1JZX0xJU1RTXTsKLXN0YXRpYyBQR0xaX0hp c3RFbnRyeSBoaXN0X2VudHJpZXNbUEdMWl9ISVNUT1JZX1NJWkUgKyAxXTsKK3N0YXRpYyBQ R0xaX0hpc3RFbnRyeSBoaXN0X2VudHJpZXNbUEdMWl9ISVNUT1JZX1NJWkVdOwogCiAvKgot ICogRWxlbWVudCAwIGluIGhpc3RfZW50cmllcyBpcyB1bnVzZWQsIGFuZCBtZWFucyAnaW52 YWxpZCcuIExpa2V3aXNlLAotICogSU5WQUxJRF9FTlRSWV9QVFIgaW4gbmV4dC9wcmV2IHBv aW50ZXJzIG1lYW4gJ2ludmFsaWQnLgorICogRWxlbWVudCAwIGluIGhpc3RfZW50cmllcyBp cyB1bnVzZWQsIGFuZCBtZWFucyAnaW52YWxpZCcuCiAgKi8KICNkZWZpbmUgSU5WQUxJRF9F TlRSWQkJCTAKLSNkZWZpbmUgSU5WQUxJRF9FTlRSWV9QVFIJCSgmaGlzdF9lbnRyaWVzW0lO VkFMSURfRU5UUlldKQogCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ2x6X2hpc3RfaWR4IC0KQEAg LTI3NCw5MCArMjY4LDU4IEBAIHN0YXRpYyBQR0xaX0hpc3RFbnRyeSBoaXN0X2VudHJpZXNb UEdMWl9ISVNUT1JZX1NJWkUgKyAxXTsKICAqIGhhc2gga2V5cyBtb3JlLgogICogLS0tLS0t LS0tLQogICovCi0jZGVmaW5lIHBnbHpfaGlzdF9pZHgoX3MsX2UsIF9tYXNrKSAoCQkJCQkJ CQkJCVwKLQkJCSgoKChfZSkgLSAoX3MpKSA8IDQpID8gKGludCkgKF9zKVswXSA6CQkJCQkJ CVwKLQkJCSAoKChfcylbMF0gPDwgNikgXiAoKF9zKVsxXSA8PCA0KSBeCQkJCQkJCQlcCi0J CQkgICgoX3MpWzJdIDw8IDIpIF4gKF9zKVszXSkpICYgKF9tYXNrKQkJCQlcCi0JCSkKK3N0 YXRpYyBpbmxpbmUgdWludDE2CitwZ2x6X2hpc3RfaWR4KGNvbnN0IHVuc2lnbmVkIGNoYXIg KnMsIHVpbnQxNiBtYXNrKQoreworCS8qCisJICogTm90ZSB0aGF0IHdlIG9ubHkgY2FsY3Vs YXRlIGZ1bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29tcHJlc3NlZCBkYXRhLgorCSAq IEZ1cnRoZXIgaGFzaCB2YWx1ZWQgYXJlIGNvbXB1dGVkIGJ5IHN1YnRyYWN0aW5nIHByZXYg Ynl0ZSBhbmQgYWRkaW5nIG5leHQuCisJICogRm9yIGRldGFpbHMgc2VlIHBnbHpfaGlzdF9h ZGQoKS4KKwkgKi8KKwlyZXR1cm4gKChzWzBdIDw8IDYpIF4gKHNbMV0gPDwgNCkgXiAoc1sy XSA8PCAyKSBeIHNbM10pICYgbWFzazsKK30KIAogCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ2x6 X2hpc3RfYWRkIC0KICAqCi0gKgkJQWRkcyBhIG5ldyBlbnRyeSB0byB0aGUgaGlzdG9yeSB0 YWJsZS4KLSAqCi0gKiBJZiBfcmVjeWNsZSBpcyB0cnVlLCB0aGVuIHdlIGFyZSByZWN5Y2xp bmcgYSBwcmV2aW91c2x5IHVzZWQgZW50cnksCi0gKiBhbmQgbXVzdCBmaXJzdCBkZWxpbmsg aXQgZnJvbSBpdHMgb2xkIGhhc2hjb2RlJ3MgbGlua2VkIGxpc3QuCi0gKgotICogTk9URTog YmV3YXJlIG9mIG11bHRpcGxlIGV2YWx1YXRpb25zIG9mIG1hY3JvJ3MgYXJndW1lbnRzLCBh bmQgbm90ZSB0aGF0Ci0gKiBfaG4gYW5kIF9yZWN5Y2xlIGFyZSBtb2RpZmllZCBpbiB0aGUg bWFjcm8uCisgKgkJQWRkcyBhIG5ldyBlbnRyeSB0byB0aGUgaGlzdG9yeSB0YWJsZQorICoJ CWFuZCByZWNhbGN1bGF0ZXMgaGFzaCB2YWx1ZS4KICAqIC0tLS0tLS0tLS0KICAqLwotI2Rl ZmluZSBwZ2x6X2hpc3RfYWRkKF9ocyxfaGUsX2huLF9yZWN5Y2xlLF9zLF9lLCBfbWFzaykJ XAotZG8gewkJCQkJCQkJCVwKLQkJCWludCBfX2hpbmRleCA9IHBnbHpfaGlzdF9pZHgoKF9z KSwoX2UpLCAoX21hc2spKTsJCQkJXAotCQkJaW50MTYgKl9fbXloc3AgPSAmKF9ocylbX19o aW5kZXhdOwkJCQkJCQkJXAotCQkJUEdMWl9IaXN0RW50cnkgKl9fbXloZSA9ICYoX2hlKVtf aG5dOwkJCQkJCQlcCi0JCQlpZiAoX3JlY3ljbGUpIHsJCQkJCQkJCQkJCQkJXAotCQkJCWlm IChfX215aGUtPnByZXYgPT0gTlVMTCkJCQkJCQkJCQlcCi0JCQkJCShfaHMpW19fbXloZS0+ aGluZGV4XSA9IF9fbXloZS0+bmV4dCAtIChfaGUpOwkJCVwKLQkJCQllbHNlCQkJCQkJCQkJ CQkJCQlcCi0JCQkJCV9fbXloZS0+cHJldi0+bmV4dCA9IF9fbXloZS0+bmV4dDsJCQkJCQlc Ci0JCQkJaWYgKF9fbXloZS0+bmV4dCAhPSBOVUxMKQkJCQkJCQkJCVwKLQkJCQkJX19teWhl LT5uZXh0LT5wcmV2ID0gX19teWhlLT5wcmV2OwkJCQkJCVwKLQkJCX0JCQkJCQkJCQkJCQkJ CQkJXAotCQkJX19teWhlLT5uZXh0ID0gJihfaGUpWypfX215aHNwXTsJCQkJCQkJCVwKLQkJ CV9fbXloZS0+cHJldiA9IE5VTEw7CQkJCQkJCQkJCQlcCi0JCQlfX215aGUtPmhpbmRleCA9 IF9faGluZGV4OwkJCQkJCQkJCQlcCi0JCQlfX215aGUtPnBvcyAgPSAoX3MpOwkJCQkJCQkJ CQkJXAotCQkJLyogSWYgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGVudHJ5IGluIHRoaXMgaGFz aCBzbG90LCBsaW5rICovCVwKLQkJCS8qIHRoaXMgbmV3IGVudHJ5IHRvIGl0LiBIb3dldmVy LCB0aGUgMHRoIGVudHJ5IGluIHRoZSAqLwkJXAotCQkJLyogZW50cmllcyB0YWJsZSBpcyB1 bnVzZWQsIHNvIHdlIGNhbiBmcmVlbHkgc2NyaWJibGUgb24gaXQuICovIFwKLQkJCS8qIFNv IGRvbid0IGJvdGhlciBjaGVja2luZyBpZiB0aGUgc2xvdCB3YXMgdXNlZCAtIHdlJ2xsICov CQlcCi0JCQkvKiBzY3JpYmJsZSBvbiB0aGUgdW51c2VkIGVudHJ5IGlmIGl0IHdhcyBub3Qs IGJ1dCB0aGF0J3MgKi8JXAotCQkJLyogaGFybWxlc3MuIEF2b2lkaW5nIHRoZSBicmFuY2gg aW4gdGhpcyBjcml0aWNhbCBwYXRoICovCQlcCi0JCQkvKiBzcGVlZHMgdGhpcyB1cCBhIGxp dHRsZSBiaXQuICovCQkJCQkJCQlcCi0JCQkvKiBpZiAoKl9fbXloc3AgIT0gSU5WQUxJRF9F TlRSWSkgKi8JCQkJCQkJXAotCQkJCShfaGUpWygqX19teWhzcCldLnByZXYgPSBfX215aGU7 CQkJCQkJCVwKLQkJCSpfX215aHNwID0gX2huOwkJCQkJCQkJCQkJCQlcCi0JCQlpZiAoKyso X2huKSA+PSBQR0xaX0hJU1RPUllfU0laRSArIDEpIHsJCQkJCQkJXAotCQkJCShfaG4pID0g MTsJCQkJCQkJCQkJCQkJXAotCQkJCShfcmVjeWNsZSkgPSB0cnVlOwkJCQkJCQkJCQkJXAot CQkJfQkJCQkJCQkJCQkJCQkJCQlcCi19IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBpbnQx NgorcGdsel9oaXN0X2FkZChpbnQxNiBoaXN0X25leHQsIHVpbnQxNiAqaGlzdF9pZHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnMsIHVpbnQxNiBtYXNrKQoreworCWludDE2CSAgICpteV9o aXN0X3N0YXJ0ID0gJmhpc3Rfc3RhcnRbKmhpc3RfaWR4XTsKKwlQR0xaX0hpc3RFbnRyeSAq ZW50cnkgPSAmKGhpc3RfZW50cmllcylbaGlzdF9uZXh0XTsKIAorCS8qCisJICogSW5pdGlh bGl6ZSBlbnRyeSB3aXRoIGEgbmV3IHZhbHVlLgorCSAqLworCWVudHJ5LT5uZXh0X2lkID0g Km15X2hpc3Rfc3RhcnQ7CisJZW50cnktPmhpc3RfaWR4ID0gKmhpc3RfaWR4OworCWVudHJ5 LT5wb3MgPSBzOwogCi0vKiAtLS0tLS0tLS0tCi0gKiBwZ2x6X291dF9jdHJsIC0KLSAqCi0g KgkJT3V0cHV0cyB0aGUgbGFzdCBhbmQgYWxsb2NhdGVzIGEgbmV3IGNvbnRyb2wgYnl0ZSBp ZiBuZWVkZWQuCi0gKiAtLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgcGdsel9vdXRfY3RybChf X2N0cmxwLF9fY3RybGIsX19jdHJsLF9fYnVmKSBcCi1kbyB7IFwKLQlpZiAoKF9fY3RybCAm IDB4ZmYpID09IDApCQkJCQkJCQkJCQkJXAotCXsJCQkJCQkJCQkJCQkJCQkJCQlcCi0JCSoo X19jdHJscCkgPSBfX2N0cmxiOwkJCQkJCQkJCQkJCVwKLQkJX19jdHJscCA9IChfX2J1Zikr KzsJCQkJCQkJCQkJCQlcCi0JCV9fY3RybGIgPSAwOwkJCQkJCQkJCQkJCQkJXAotCQlfX2N0 cmwgPSAxOwkJCQkJCQkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCQkJCQkJCQkJXAotfSB3aGls ZSAoMCkKKwkvKgorCSAqIFVwZGF0ZSBsaW5rZWQgbGlzdCBoZWFkIHBvaW50ZXIuCisJICov CisJKm15X2hpc3Rfc3RhcnQgPSBoaXN0X25leHQ7CiAKKwkvKgorCSAqIFJlY2FsY3VsYXRl IGhhc2ggdmFsdWUgZm9yIG5leHQgcG9zaXRpb24uIFJlbW92ZSBjdXJyZW50IGJ5dGUgYW5k IGFkZCBuZXh0LgorCSAqLworCSpoaXN0X2lkeCA9ICgoKCgqaGlzdF9pZHgpIF4gKHNbMF0g PDwgNikpIDw8IDIpIF4gc1s0XSkgJiBtYXNrOwogCi0vKiAtLS0tLS0tLS0tCi0gKiBwZ2x6 X291dF9saXRlcmFsIC0KLSAqCi0gKgkJT3V0cHV0cyBhIGxpdGVyYWwgYnl0ZSB0byB0aGUg ZGVzdGluYXRpb24gYnVmZmVyIGluY2x1ZGluZyB0aGUKLSAqCQlhcHByb3ByaWF0ZSBjb250 cm9sIGJpdC4KLSAqIC0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBwZ2x6X291dF9saXRlcmFs KF9jdHJscCxfY3RybGIsX2N0cmwsX2J1ZixfYnl0ZSkgXAotZG8geyBcCi0JcGdsel9vdXRf Y3RybChfY3RybHAsX2N0cmxiLF9jdHJsLF9idWYpOwkJCQkJCQkJXAotCSooX2J1ZikrKyA9 ICh1bnNpZ25lZCBjaGFyKShfYnl0ZSk7CQkJCQkJCQkJCVwKLQlfY3RybCA8PD0gMTsJCQkJ CQkJCQkJCQkJCQlcCi19IHdoaWxlICgwKQorCS8qCisJICogU2hpZnQgaGlzdG9yeSBwb2lu dGVyLgorCSAqLworCWhpc3RfbmV4dCsrOworCWlmIChoaXN0X25leHQgPT0gUEdMWl9ISVNU T1JZX1NJWkUpCisJeworCQloaXN0X25leHQgPSAxOworCX0KKwlyZXR1cm4gaGlzdF9uZXh0 OworfQogCiAKIC8qIC0tLS0tLS0tLS0KQEAgLTM2OCwyMyArMzMwLDQ4IEBAIGRvIHsgXAog ICoJCWFwcHJvcHJpYXRlIGNvbnRyb2wgYml0LgogICogLS0tLS0tLS0tLQogICovCi0jZGVm aW5lIHBnbHpfb3V0X3RhZyhfY3RybHAsX2N0cmxiLF9jdHJsLF9idWYsX2xlbixfb2ZmKSBc Ci1kbyB7IFwKLQlwZ2x6X291dF9jdHJsKF9jdHJscCxfY3RybGIsX2N0cmwsX2J1Zik7CQkJ CQkJCQlcCi0JX2N0cmxiIHw9IF9jdHJsOwkJCQkJCQkJCQkJCQkJXAotCV9jdHJsIDw8PSAx OwkJCQkJCQkJCQkJCQkJCVwKLQlpZiAoX2xlbiA+IDE3KQkJCQkJCQkJCQkJCQkJCVwKLQl7 CQkJCQkJCQkJCQkJCQkJCQkJXAotCQkoX2J1ZilbMF0gPSAodW5zaWduZWQgY2hhcikoKCgo X29mZikgJiAweGYwMCkgPj4gNCkgfCAweDBmKTsJCVwKLQkJKF9idWYpWzFdID0gKHVuc2ln bmVkIGNoYXIpKCgoX29mZikgJiAweGZmKSk7CQkJCQkJXAotCQkoX2J1ZilbMl0gPSAodW5z aWduZWQgY2hhcikoKF9sZW4pIC0gMTgpOwkJCQkJCQlcCi0JCShfYnVmKSArPSAzOwkJCQkJ CQkJCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQkJCVwKLQkJKF9idWYpWzBdID0g KHVuc2lnbmVkIGNoYXIpKCgoKF9vZmYpICYgMHhmMDApID4+IDQpIHwgKChfbGVuKSAtIDMp KTsgXAotCQkoX2J1ZilbMV0gPSAodW5zaWduZWQgY2hhcikoKF9vZmYpICYgMHhmZik7CQkJ CQkJCVwKLQkJKF9idWYpICs9IDI7CQkJCQkJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJ CQkJCVwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKgorcGds el9vdXRfdGFnKHVuc2lnbmVkIGNoYXIgKmRlc3RfcHRyLCBpbnQzMiBtYXRjaF9sZW4sIGlu dDMyIG1hdGNoX29mZnNldCkKK3sKKwlpZiAobWF0Y2hfbGVuID4gMTcpCisJeworCQkqKGRl c3RfcHRyKyspID0gKHVuc2lnbmVkIGNoYXIpICgoKChtYXRjaF9vZmZzZXQpICYgMHhmMDAp ID4+IDQpIHwgMHgwZik7CisJCSooZGVzdF9wdHIrKykgPSAodW5zaWduZWQgY2hhcikgKCgo bWF0Y2hfb2Zmc2V0KSAmIDB4ZmYpKTsKKwkJKihkZXN0X3B0cisrKSA9ICh1bnNpZ25lZCBj aGFyKSAoKG1hdGNoX2xlbikgLSAxOCk7CisJfQorCWVsc2UKKwl7CisJCSooZGVzdF9wdHIr KykgPSAodW5zaWduZWQgY2hhcikgKCgoKG1hdGNoX29mZnNldCkgJiAweGYwMCkgPj4gNCkg fCAoKG1hdGNoX2xlbikgLSAzKSk7CisJCSooZGVzdF9wdHIrKykgPSAodW5zaWduZWQgY2hh cikgKChtYXRjaF9vZmZzZXQpICYgMHhmZik7CisJfQorCXJldHVybiBkZXN0X3B0cjsKK30K KworLyogLS0tLS0tLS0tLQorICogcGdsel9jb21wYXJlIC0KKyAqCisgKgkJQ29tcGFyZXMg dHdvIHNlcXVlbmNlcyBvZiBieXRlcworICoJCWFuZCByZXR1cm5zIHBvc2l0aW9uIG9mIGZp cnN0IG1pc21hdGNoLgorICogLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW5saW5lIGludDMy CitwZ2x6X2NvbXBhcmUoaW50MzIgbGVuLCBpbnQzMiBsZW5fYm91bmQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmlucHV0X3BvcywKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpoaXN0X3Bv cykKK3sKKwl3aGlsZSAobGVuIDw9IGxlbl9ib3VuZCAtIDQgJiYgbWVtY21wKGlucHV0X3Bv cywgaGlzdF9wb3MsIDQpID09IDApCisJeworCQlsZW4gKz0gNDsKKwkJaW5wdXRfcG9zICs9 IDQ7CisJCWhpc3RfcG9zICs9IDQ7CisJfQorCXdoaWxlIChsZW4gPCBsZW5fYm91bmQgJiYg KmlucHV0X3BvcyA9PSAqaGlzdF9wb3MpCisJeworCQlsZW4rKzsKKwkJaW5wdXRfcG9zKys7 CisJCWhpc3RfcG9zKys7CisJfQorCXJldHVybiBsZW47Cit9CiAKIAogLyogLS0tLS0tLS0t LQpAQCAtMzk2LDMyICszODMsNDAgQEAgZG8geyBcCiAgKiAtLS0tLS0tLS0tCiAgKi8KIHN0 YXRpYyBpbmxpbmUgaW50Ci1wZ2x6X2ZpbmRfbWF0Y2goaW50MTYgKmhzdGFydCwgY29uc3Qg Y2hhciAqaW5wdXQsIGNvbnN0IGNoYXIgKmVuZCwKLQkJCQlpbnQgKmxlbnAsIGludCAqb2Zm cCwgaW50IGdvb2RfbWF0Y2gsIGludCBnb29kX2Ryb3AsIGludCBtYXNrKQorcGdsel9maW5k X21hdGNoKHVpbnQxNiBoaXN0X2lkeCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKwkJCQlpbnQgKmxlbnAsIGludCAqb2ZmcCwgaW50 IGdvb2RfbWF0Y2gsIGludCBnb29kX2Ryb3ApCiB7Ci0JUEdMWl9IaXN0RW50cnkgKmhlbnQ7 Ci0JaW50MTYJCWhlbnRubzsKKwlQR0xaX0hpc3RFbnRyeSAqaGlzdF9lbnRyeTsKKwlpbnQx NgkgICAqaGlzdF9lbnRyeV9udW1iZXI7CiAJaW50MzIJCWxlbiA9IDA7Ci0JaW50MzIJCW9m ZiA9IDA7CisJaW50MzIJCW9mZnNldCA9IDA7CisJaW50MzIJCWN1cl9sZW4gPSAwOworCWlu dDMyCQlsZW5fYm91bmQgPSBNaW4oZW5kIC0gaW5wdXQsIFBHTFpfTUFYX01BVENIKTsKIAog CS8qCiAJICogVHJhdmVyc2UgdGhlIGxpbmtlZCBoaXN0b3J5IGxpc3QgdW50aWwgYSBnb29k IGVub3VnaCBtYXRjaCBpcyBmb3VuZC4KIAkgKi8KLQloZW50bm8gPSBoc3RhcnRbcGdsel9o aXN0X2lkeChpbnB1dCwgZW5kLCBtYXNrKV07Ci0JaGVudCA9ICZoaXN0X2VudHJpZXNbaGVu dG5vXTsKLQl3aGlsZSAoaGVudCAhPSBJTlZBTElEX0VOVFJZX1BUUikKLQl7Ci0JCWNvbnN0 IGNoYXIgKmlwID0gaW5wdXQ7Ci0JCWNvbnN0IGNoYXIgKmhwID0gaGVudC0+cG9zOwotCQlp bnQzMgkJdGhpc29mZjsKLQkJaW50MzIJCXRoaXNsZW47CisJaGlzdF9lbnRyeV9udW1iZXIg PSAmaGlzdF9zdGFydFtoaXN0X2lkeF07CisJaWYgKCpoaXN0X2VudHJ5X251bWJlciA9PSBJ TlZBTElEX0VOVFJZKQorCQlyZXR1cm4gMDsKIAorCWhpc3RfZW50cnkgPSAmaGlzdF9lbnRy aWVzWypoaXN0X2VudHJ5X251bWJlcl07CisJaWYgKGhpc3RfaWR4ICE9IGhpc3RfZW50cnkt Pmhpc3RfaWR4KQorCXsKIAkJLyoKLQkJICogU3RvcCBpZiB0aGUgb2Zmc2V0IGRvZXMgbm90 IGZpdCBpbnRvIG91ciB0YWcgYW55bW9yZS4KKwkJICogSWYgY3VycmVudCBsaW5rZWQgbGlz dCBoZWFkIHBvaW50cyB0byBpbnZhbGlkIGVudHJ5IHRoZW4gY2xlYXIgaXQKKwkJICogdG8g cmVkdWNlIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgaW4gZnV0dXJlLgogCQkgKi8KLQkJ dGhpc29mZiA9IGlwIC0gaHA7Ci0JCWlmICh0aGlzb2ZmID49IDB4MGZmZikKLQkJCWJyZWFr OworCQkqaGlzdF9lbnRyeV9udW1iZXIgPSBJTlZBTElEX0VOVFJZOworCQlyZXR1cm4gMDsK Kwl9CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0 X3BvcyA9IGlucHV0OworCQljb25zdCB1bnNpZ25lZCBjaGFyICpoaXN0X3BvcyA9IGhpc3Rf ZW50cnktPnBvczsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbXlfcG9zOworCQlpbnQzMgkJ Y3VyX29mZnNldCA9IGlucHV0X3BvcyAtIGhpc3RfcG9zOwogCiAJCS8qCiAJCSAqIERldGVy bWluZSBsZW5ndGggb2YgbWF0Y2guIEEgYmV0dGVyIG1hdGNoIG11c3QgYmUgbGFyZ2VyIHRo YW4gdGhlCkBAIC00MzEsNTggKzQyNiw2MiBAQCBwZ2x6X2ZpbmRfbWF0Y2goaW50MTYgKmhz dGFydCwgY29uc3QgY2hhciAqaW5wdXQsIGNvbnN0IGNoYXIgKmVuZCwKIAkJICogY2hhcmFj dGVyIGJ5IGNoYXJhY3RlciBjb21wYXJpc29uIHRvIGtub3cgdGhlIGV4YWN0IHBvc2l0aW9u IHdoZXJlCiAJCSAqIHRoZSBkaWZmIG9jY3VycmVkLgogCQkgKi8KLQkJdGhpc2xlbiA9IDA7 CiAJCWlmIChsZW4gPj0gMTYpCiAJCXsKLQkJCWlmIChtZW1jbXAoaXAsIGhwLCBsZW4pID09 IDApCisJCQlpZiAobWVtY21wKGlucHV0X3BvcywgaGlzdF9wb3MsIGxlbikgPT0gMCkKIAkJ CXsKLQkJCQl0aGlzbGVuID0gbGVuOwotCQkJCWlwICs9IGxlbjsKLQkJCQlocCArPSBsZW47 Ci0JCQkJd2hpbGUgKGlwIDwgZW5kICYmICppcCA9PSAqaHAgJiYgdGhpc2xlbiA8IFBHTFpf TUFYX01BVENIKQotCQkJCXsKLQkJCQkJdGhpc2xlbisrOwotCQkJCQlpcCsrOwotCQkJCQlo cCsrOwotCQkJCX0KKwkJCQlvZmZzZXQgPSBjdXJfb2Zmc2V0OworCQkJCWxlbiA9IHBnbHpf Y29tcGFyZShsZW4sIGxlbl9ib3VuZCwgaW5wdXRfcG9zICsgbGVuLCBoaXN0X3BvcyArIGxl bik7CiAJCQl9CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQl3aGlsZSAoaXAgPCBlbmQgJiYgKmlw ID09ICpocCAmJiB0aGlzbGVuIDwgUEdMWl9NQVhfTUFUQ0gpCisJCQkvKgorCQkJICogU3Rh cnQgc2VhcmNoIGZvciBzaG9ydCBtYXRjaGVzIGJ5IGNvbXBhcmluZyA0IGJ5dGVzLgorCQkJ ICogV2UgZXhwZWN0IHRoYXQgY29tcGlsZXIgd2lsbCBzdWJzdGl0dXRlIG1lbWNtcCgpIHdp dGggZml4ZWQKKwkJCSAqIGxlbmd0aCBieSBvcHRpbWFsIDQtYnl0ZXMgY29tcGFyaXNvbiBp dCBrbm93cy4KKwkJCSAqLworCQkJaWYgKG1lbWNtcChpbnB1dF9wb3MsIGhpc3RfcG9zLCA0 KSA9PSAwKQogCQkJewotCQkJCXRoaXNsZW4rKzsKLQkJCQlpcCsrOwotCQkJCWhwKys7CisJ CQkJY3VyX2xlbiA9IHBnbHpfY29tcGFyZSg0LCBsZW5fYm91bmQsIGlucHV0X3BvcyArIDQs IGhpc3RfcG9zICsgNCk7CisJCQkJaWYgKGN1cl9sZW4gPiBsZW4pCisJCQkJeworCQkJCQls ZW4gPSBjdXJfbGVuOworCQkJCQlvZmZzZXQgPSBjdXJfb2Zmc2V0OworCQkJCX0KIAkJCX0K IAkJfQogCi0JCS8qCi0JCSAqIFJlbWVtYmVyIHRoaXMgbWF0Y2ggYXMgdGhlIGJlc3QgKGlm IGl0IGlzKQotCQkgKi8KLQkJaWYgKHRoaXNsZW4gPiBsZW4pCi0JCXsKLQkJCWxlbiA9IHRo aXNsZW47Ci0JCQlvZmYgPSB0aGlzb2ZmOwotCQl9Ci0KIAkJLyoKIAkJICogQWR2YW5jZSB0 byB0aGUgbmV4dCBoaXN0b3J5IGVudHJ5CiAJCSAqLwotCQloZW50ID0gaGVudC0+bmV4dDsK KwkJbXlfcG9zID0gaGlzdF9lbnRyeS0+cG9zOworCQloaXN0X2VudHJ5ID0gJmhpc3RfZW50 cmllc1toaXN0X2VudHJ5LT5uZXh0X2lkXTsKIAogCQkvKgotCQkgKiBCZSBoYXBweSB3aXRo IGxlc3NlciBnb29kIG1hdGNoZXMgdGhlIG1vcmUgZW50cmllcyB3ZSB2aXNpdGVkLiBCdXQK LQkJICogbm8gcG9pbnQgaW4gZG9pbmcgY2FsY3VsYXRpb24gaWYgd2UncmUgYXQgZW5kIG9m IGxpc3QuCisJCSAqIElmIGN1cnJlbnQgbWF0Y2ggbGVuZ3RoIGlzIG9rIHRoZW4gc3RvcCBp dGVyYXRpb24uIEFzIG91dGRhdGVkIGxpc3QKKwkJICogbGlua3MgYXJlIG5vdCB1cGRhdGVk IGR1cmluZyBpbnNlcnRpb24gcHJvY2VzcyB0aGVuIGFkZGl0aW9uYWwgc3RvcAorCQkgKiBj b25kaXRpb24gc2hvdWxkIGJlIGludHJvZHVjZWQgdG8gYXZvaWQgZm9sbG93aW5nIHRoZW0u IElmIHJlY3ljbGVkCisJCSAqIGVudHJ5IGhhcyBhbm90aGVyIGhhc2gsIHRoZW4gaXRlcmF0 aW9uIHN0b3BzLiBJZiBpdCBoYXMgdGhlIHNhbWUKKwkJICogaGFzaCB0aGVuIHJlY3ljbGVk IGNlbGwgd291bGQgYnJlYWsgaW5wdXQgc3RyZWFtIHBvc2l0aW9uCisJCSAqIG1vbm90b25p Y2l0eSwgd2hpY2ggaXMgY2hlY2tlZCBhZnRlci4KIAkJICovCi0JCWlmIChoZW50ICE9IElO VkFMSURfRU5UUllfUFRSKQorCQlpZiAobGVuID49IGdvb2RfbWF0Y2ggfHwgaGlzdF9pZHgg IT0gaGlzdF9lbnRyeS0+aGlzdF9pZHggfHwgbXlfcG9zIDw9IGhpc3RfZW50cnktPnBvcykK IAkJewotCQkJaWYgKGxlbiA+PSBnb29kX21hdGNoKQotCQkJCWJyZWFrOwotCQkJZ29vZF9t YXRjaCAtPSAoZ29vZF9tYXRjaCAqIGdvb2RfZHJvcCkgLyAxMDA7CisJCQlicmVhazsKIAkJ fQorCisJCS8qCisJCSAqIEJlIGhhcHB5IHdpdGggbGVzcyBnb29kIG1hdGNoZXMgdGhlIG1v cmUgZW50cmllcyB3ZSB2aXNpdGVkLgorCQkgKi8KKwkJZ29vZF9tYXRjaCAtPSAoZ29vZF9t YXRjaCAqIGdvb2RfZHJvcCkgPj4gNzsKIAl9CiAKKwkvKgorCSAqIGZvdW5kIG1hdGNoIGNh biBiZSBzbGlnaHRseSBtb3JlIHRoYW4gbmVjZXNzYXJ5LCBib3VuZCBpdCB3aXRoIGxlbl9i b3VuZAorCSAqLworCWxlbiA9IE1pbihsZW4sIGxlbl9ib3VuZCk7CisKIAkvKgogCSAqIFJl dHVybiBtYXRjaCBpbmZvcm1hdGlvbiBvbmx5IGlmIGl0IHJlc3VsdHMgYXQgbGVhc3QgaW4g b25lIGJ5dGUKIAkgKiByZWR1Y3Rpb24uCkBAIC00OTAsNyArNDg5LDcgQEAgcGdsel9maW5k X21hdGNoKGludDE2ICpoc3RhcnQsIGNvbnN0IGNoYXIgKmlucHV0LCBjb25zdCBjaGFyICpl bmQsCiAJaWYgKGxlbiA+IDIpCiAJewogCQkqbGVucCA9IGxlbjsKLQkJKm9mZnAgPSBvZmY7 CisJCSpvZmZwID0gb2Zmc2V0OwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTUwOSwyNiArNTA4 LDI4IEBAIGludDMyCiBwZ2x6X2NvbXByZXNzKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50MzIg c2xlbiwgY2hhciAqZGVzdCwKIAkJCSAgY29uc3QgUEdMWl9TdHJhdGVneSAqc3RyYXRlZ3kp CiB7Ci0JdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKSBkZXN0OwotCXVu c2lnbmVkIGNoYXIgKmJzdGFydCA9IGJwOwotCWludAkJCWhpc3RfbmV4dCA9IDE7Ci0JYm9v bAkJaGlzdF9yZWN5Y2xlID0gZmFsc2U7Ci0JY29uc3QgY2hhciAqZHAgPSBzb3VyY2U7Ci0J Y29uc3QgY2hhciAqZGVuZCA9IHNvdXJjZSArIHNsZW47Ci0JdW5zaWduZWQgY2hhciBjdHJs X2R1bW15ID0gMDsKLQl1bnNpZ25lZCBjaGFyICpjdHJscCA9ICZjdHJsX2R1bW15OwotCXVu c2lnbmVkIGNoYXIgY3RybGIgPSAwOwotCXVuc2lnbmVkIGNoYXIgY3RybCA9IDA7CisJdW5z aWduZWQgY2hhciAqZGVzdF9wdHIgPSAodW5zaWduZWQgY2hhciAqKSBkZXN0OworCXVuc2ln bmVkIGNoYXIgKmRlc3Rfc3RhcnQgPSBkZXN0X3B0cjsKKwl1aW50MTYJCWhpc3RfbmV4dCA9 IDE7CisJdWludDE2CQloaXN0X2lkeDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzcmNfcHRy ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc291cmNlOworCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnNyY19lbmQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzb3VyY2UgKyBzbGVuOwor CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbXByZXNzX3NyY19lbmQgPSBzcmNfZW5kIC0gNDsK Kwl1bnNpZ25lZCBjaGFyIGNvbnRyb2xfZHVtbXkgPSAwOworCXVuc2lnbmVkIGNoYXIgKmNv bnRyb2xfcHRyID0gJmNvbnRyb2xfZHVtbXk7CisJdW5zaWduZWQgY2hhciBjb250cm9sX2J5 dGUgPSAwOworCXVuc2lnbmVkIGNoYXIgY29udHJvbF9wb3MgPSAwOwogCWJvb2wJCWZvdW5k X21hdGNoID0gZmFsc2U7CiAJaW50MzIJCW1hdGNoX2xlbjsKLQlpbnQzMgkJbWF0Y2hfb2Zm OworCWludDMyCQltYXRjaF9vZmZzZXQ7CiAJaW50MzIJCWdvb2RfbWF0Y2g7CiAJaW50MzIJ CWdvb2RfZHJvcDsKIAlpbnQzMgkJcmVzdWx0X3NpemU7CiAJaW50MzIJCXJlc3VsdF9tYXg7 CiAJaW50MzIJCW5lZWRfcmF0ZTsKIAlpbnQJCQloYXNoc3o7Ci0JaW50CQkJbWFzazsKKwl1 aW50MTYJCW1hc2s7CisKIAogCS8qCiAJICogT3VyIGZhbGxiYWNrIHN0cmF0ZWd5IGlzIHRo ZSBkZWZhdWx0LgpAQCAtNTYwLDYgKzU2MSw5IEBAIHBnbHpfY29tcHJlc3MoY29uc3QgY2hh ciAqc291cmNlLCBpbnQzMiBzbGVuLCBjaGFyICpkZXN0LAogCWVsc2UgaWYgKGdvb2RfZHJv cCA+IDEwMCkKIAkJZ29vZF9kcm9wID0gMTAwOwogCisJLyogV2UgdXNlIDw8NyBsYXRlciB0 byBjYWxjdWxhdGUgYWN0dWFsIGRyb3AsIHNvIGFsaWduIHBlcmNlbnRzIHRvIDEyOCAqLwor CWdvb2RfZHJvcCA9IGdvb2RfZHJvcCAqIDEyOCAvIDEwMDsKKwogCW5lZWRfcmF0ZSA9IHN0 cmF0ZWd5LT5taW5fY29tcF9yYXRlOwogCWlmIChuZWVkX3JhdGUgPCAwKQogCQluZWVkX3Jh dGUgPSAwOwpAQCAtNTc3LDcgKzU4MSw5IEBAIHBnbHpfY29tcHJlc3MoY29uc3QgY2hhciAq c291cmNlLCBpbnQzMiBzbGVuLCBjaGFyICpkZXN0LAogCQlyZXN1bHRfbWF4ID0gKHNsZW4g LyAxMDApICogKDEwMCAtIG5lZWRfcmF0ZSk7CiAJfQogCWVsc2UKKwl7CiAJCXJlc3VsdF9t YXggPSAoc2xlbiAqICgxMDAgLSBuZWVkX3JhdGUpKSAvIDEwMDsKKwl9CiAKIAkvKgogCSAq IEV4cGVyaW1lbnRzIHN1Z2dlc3QgdGhhdCB0aGVzZSBoYXNoIHNpemVzIHdvcmsgcHJldHR5 IHdlbGwuIEEgbGFyZ2UKQEAgLTYwMywxMCArNjA5LDIxIEBAIHBnbHpfY29tcHJlc3MoY29u c3QgY2hhciAqc291cmNlLCBpbnQzMiBzbGVuLCBjaGFyICpkZXN0LAogCSAqLwogCW1lbXNl dChoaXN0X3N0YXJ0LCAwLCBoYXNoc3ogKiBzaXplb2YoaW50MTYpKTsKIAorCS8qCisJICog SW5pdGlhbGl6ZSBJTlZBTElEX0VOVFJZIGZvciBzdG9wcGluZyBkdXJpbmcgbG9va3VwLgor CSAqLworCWhpc3RfZW50cmllc1tJTlZBTElEX0VOVFJZXS5wb3MgPSBzcmNfZW5kOworCWhp c3RfZW50cmllc1tJTlZBTElEX0VOVFJZXS5oaXN0X2lkeCA9IGhhc2hzejsKKworCS8qCisJ ICogQ2FsY3VsYXRlIGluaXRpYWwgaGFzaCB2YWx1ZS4KKwkgKi8KKwloaXN0X2lkeCA9IHBn bHpfaGlzdF9pZHgoc3JjX3B0ciwgbWFzayk7CisKIAkvKgogCSAqIENvbXByZXNzIHRoZSBz b3VyY2UgZGlyZWN0bHkgaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4KIAkgKi8KLQl3aGlsZSAo ZHAgPCBkZW5kKQorCXdoaWxlIChzcmNfcHRyIDwgY29tcHJlc3Nfc3JjX2VuZCkKIAl7CiAJ CS8qCiAJCSAqIElmIHdlIGFscmVhZHkgZXhjZWVkZWQgdGhlIG1heGltdW0gcmVzdWx0IHNp emUsIGZhaWwuCkBAIC02MTUsNyArNjMyLDcgQEAgcGdsel9jb21wcmVzcyhjb25zdCBjaGFy ICpzb3VyY2UsIGludDMyIHNsZW4sIGNoYXIgKmRlc3QsCiAJCSAqIGJ5dGVzIChhIGNvbnRy b2wgYnl0ZSBhbmQgMy1ieXRlIHRhZyksIFBHTFpfTUFYX09VVFBVVCgpIGhhZCBiZXR0ZXIK IAkJICogYWxsb3cgNCBzbG9wIGJ5dGVzLgogCQkgKi8KLQkJaWYgKGJwIC0gYnN0YXJ0ID49 IHJlc3VsdF9tYXgpCisJCWlmIChkZXN0X3B0ciAtIGRlc3Rfc3RhcnQgPj0gcmVzdWx0X21h eCkKIAkJCXJldHVybiAtMTsKIAogCQkvKgpAQCAtNjI0LDI3ICs2NDEsMzYgQEAgcGdsel9j b21wcmVzcyhjb25zdCBjaGFyICpzb3VyY2UsIGludDMyIHNsZW4sIGNoYXIgKmRlc3QsCiAJ CSAqIHJlYXNvbmFibHkgcXVpY2tseSB3aGVuIGxvb2tpbmcgYXQgaW5jb21wcmVzc2libGUg aW5wdXQgKHN1Y2ggYXMKIAkJICogcHJlLWNvbXByZXNzZWQgZGF0YSkuCiAJCSAqLwotCQlp ZiAoIWZvdW5kX21hdGNoICYmIGJwIC0gYnN0YXJ0ID49IHN0cmF0ZWd5LT5maXJzdF9zdWNj ZXNzX2J5KQorCQlpZiAoIWZvdW5kX21hdGNoICYmIGRlc3RfcHRyIC0gZGVzdF9zdGFydCA+ PSBzdHJhdGVneS0+Zmlyc3Rfc3VjY2Vzc19ieSkKIAkJCXJldHVybiAtMTsKIAorCQkvKgor CQkgKiBSZWZyZXNoIGNvbnRyb2wgYnl0ZSBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAoKGNv bnRyb2xfcG9zICYgMHhmZikgPT0gMCkKKwkJeworCQkJKihjb250cm9sX3B0cikgPSBjb250 cm9sX2J5dGU7CisJCQljb250cm9sX3B0ciA9IChkZXN0X3B0cikrKzsKKwkJCWNvbnRyb2xf Ynl0ZSA9IDA7CisJCQljb250cm9sX3BvcyA9IDE7CisJCX0KKwogCQkvKgogCQkgKiBUcnkg dG8gZmluZCBhIG1hdGNoIGluIHRoZSBoaXN0b3J5CiAJCSAqLwotCQlpZiAocGdsel9maW5k X21hdGNoKGhpc3Rfc3RhcnQsIGRwLCBkZW5kLCAmbWF0Y2hfbGVuLAotCQkJCQkJCSZtYXRj aF9vZmYsIGdvb2RfbWF0Y2gsIGdvb2RfZHJvcCwgbWFzaykpCisJCWlmIChwZ2x6X2ZpbmRf bWF0Y2goaGlzdF9pZHgsIHNyY19wdHIsIGNvbXByZXNzX3NyY19lbmQsICZtYXRjaF9sZW4s CisJCQkJCQkJJm1hdGNoX29mZnNldCwgZ29vZF9tYXRjaCwgZ29vZF9kcm9wKSkKIAkJewog CQkJLyoKIAkJCSAqIENyZWF0ZSB0aGUgdGFnIGFuZCBhZGQgaGlzdG9yeSBlbnRyaWVzIGZv ciBhbGwgbWF0Y2hlZAogCQkJICogY2hhcmFjdGVycy4KIAkJCSAqLwotCQkJcGdsel9vdXRf dGFnKGN0cmxwLCBjdHJsYiwgY3RybCwgYnAsIG1hdGNoX2xlbiwgbWF0Y2hfb2ZmKTsKKwkJ CWNvbnRyb2xfYnl0ZSB8PSBjb250cm9sX3BvczsKKwkJCWRlc3RfcHRyID0gcGdsel9vdXRf dGFnKGRlc3RfcHRyLCBtYXRjaF9sZW4sIG1hdGNoX29mZnNldCk7CiAJCQl3aGlsZSAobWF0 Y2hfbGVuLS0pCiAJCQl7Ci0JCQkJcGdsel9oaXN0X2FkZChoaXN0X3N0YXJ0LCBoaXN0X2Vu dHJpZXMsCi0JCQkJCQkJICBoaXN0X25leHQsIGhpc3RfcmVjeWNsZSwKLQkJCQkJCQkgIGRw LCBkZW5kLCBtYXNrKTsKLQkJCQlkcCsrOwkJCS8qIERvIG5vdCBkbyB0aGlzICsrIGluIHRo ZSBsaW5lIGFib3ZlISAqLwotCQkJCS8qIFRoZSBtYWNybyB3b3VsZCBkbyBpdCBmb3VyIHRp bWVzIC0gSmFuLiAgKi8KKwkJCQloaXN0X25leHQgPSBwZ2x6X2hpc3RfYWRkKGhpc3RfbmV4 dCwgJmhpc3RfaWR4LCBzcmNfcHRyLCBtYXNrKTsKKwkJCQlzcmNfcHRyKys7CiAJCQl9CiAJ CQlmb3VuZF9tYXRjaCA9IHRydWU7CiAJCX0KQEAgLTY1MywyMSArNjc5LDQ3IEBAIHBnbHpf Y29tcHJlc3MoY29uc3QgY2hhciAqc291cmNlLCBpbnQzMiBzbGVuLCBjaGFyICpkZXN0LAog CQkJLyoKIAkJCSAqIE5vIG1hdGNoIGZvdW5kLiBDb3B5IG9uZSBsaXRlcmFsIGJ5dGUuCiAJ CQkgKi8KLQkJCXBnbHpfb3V0X2xpdGVyYWwoY3RybHAsIGN0cmxiLCBjdHJsLCBicCwgKmRw KTsKLQkJCXBnbHpfaGlzdF9hZGQoaGlzdF9zdGFydCwgaGlzdF9lbnRyaWVzLAotCQkJCQkJ ICBoaXN0X25leHQsIGhpc3RfcmVjeWNsZSwKLQkJCQkJCSAgZHAsIGRlbmQsIG1hc2spOwot CQkJZHArKzsJCQkJLyogRG8gbm90IGRvIHRoaXMgKysgaW4gdGhlIGxpbmUgYWJvdmUhICov Ci0JCQkvKiBUaGUgbWFjcm8gd291bGQgZG8gaXQgZm91ciB0aW1lcyAtIEphbi4gICovCisJ CQloaXN0X25leHQgPSBwZ2x6X2hpc3RfYWRkKGhpc3RfbmV4dCwgJmhpc3RfaWR4LCBzcmNf cHRyLCBtYXNrKTsKKwkJCSooZGVzdF9wdHIpKysgPSAodW5zaWduZWQgY2hhcikgKCpzcmNf cHRyKTsKKwkJCXNyY19wdHIrKzsKKwkJfQorCQljb250cm9sX3BvcyA8PD0gMTsKKwl9CisK KworCXdoaWxlIChzcmNfcHRyIDwgc3JjX2VuZCkKKwl7CisJCS8qCisJCSAqIElmIHdlIGFs cmVhZHkgZXhjZWVkZWQgdGhlIG1heGltdW0gcmVzdWx0IHNpemUsIGZhaWwuCisJCSAqCisJ CSAqIFdlIGNoZWNrIG9uY2UgcGVyIGxvb3A7IHNpbmNlIHRoZSBsb29wIGJvZHkgY291bGQg ZW1pdCBhcyBtYW55IGFzIDQKKwkJICogYnl0ZXMgKGEgY29udHJvbCBieXRlIGFuZCAzLWJ5 dGUgdGFnKSwgUEdMWl9NQVhfT1VUUFVUKCkgaGFkIGJldHRlcgorCQkgKiBhbGxvdyA0IHNs b3AgYnl0ZXMuCisJCSAqLworCQlpZiAoZGVzdF9wdHIgLSBkZXN0X3N0YXJ0ID49IHJlc3Vs dF9tYXgpCisJCQlyZXR1cm4gLTE7CisKKwkJLyoKKwkJICogUmVmcmVzaCBjb250cm9sIGJ5 dGUgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYgKChjb250cm9sX3BvcyAmIDB4ZmYpID09IDAp CisJCXsKKwkJCSooY29udHJvbF9wdHIpID0gY29udHJvbF9ieXRlOworCQkJY29udHJvbF9w dHIgPSAoZGVzdF9wdHIpKys7CisJCQljb250cm9sX2J5dGUgPSAwOworCQkJY29udHJvbF9w b3MgPSAxOwogCQl9CisJCSooZGVzdF9wdHIpKysgPSAodW5zaWduZWQgY2hhcikgKCpzcmNf cHRyKTsKKwkJc3JjX3B0cisrOworCQljb250cm9sX3BvcyA8PD0gMTsKIAl9CiAKIAkvKgog CSAqIFdyaXRlIG91dCB0aGUgbGFzdCBjb250cm9sIGJ5dGUgYW5kIGNoZWNrIHRoYXQgd2Ug aGF2ZW4ndCBvdmVycnVuIHRoZQogCSAqIG91dHB1dCBzaXplIGFsbG93ZWQgYnkgdGhlIHN0 cmF0ZWd5LgogCSAqLwotCSpjdHJscCA9IGN0cmxiOwotCXJlc3VsdF9zaXplID0gYnAgLSBi c3RhcnQ7CisJKmNvbnRyb2xfcHRyID0gY29udHJvbF9ieXRlOworCXJlc3VsdF9zaXplID0g ZGVzdF9wdHIgLSBkZXN0X3N0YXJ0OwogCWlmIChyZXN1bHRfc2l6ZSA+PSByZXN1bHRfbWF4 KQogCQlyZXR1cm4gLTE7CiAKLS0gCjIuMzguMQoK --------------Ce4JWepZEfScVENch2mvihNo Content-Type: text/x-patch; charset=UTF-8; name="0002-review-v6.patch" Content-Disposition: attachment; filename="0002-review-v6.patch" Content-Transfer-Encoding: base64 RnJvbSBhZGQ5NGIxMDYzMDBiOWIyODYzMWE0ZjZmODJmYjg1ZDY4OTY3ZDBlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCAyNyBOb3YgMjAyMiAxNjoyNjo0NyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSByZXZpZXcKCi0tLQogc3JjL2NvbW1vbi9wZ19semNvbXByZXNz LmMgfCAxNCArKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygr KSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3BnX2x6Y29tcHJl c3MuYyBiL3NyYy9jb21tb24vcGdfbHpjb21wcmVzcy5jCmluZGV4IDI0ODU0NWExMDhlLi5i YzMzODhkNDgxZiAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9wZ19semNvbXByZXNzLmMKKysr IGIvc3JjL2NvbW1vbi9wZ19semNvbXByZXNzLmMKQEAgLTE4NSwxMSArMTg1LDEzIEBACiAK ICNpbmNsdWRlICJjb21tb24vcGdfbHpjb21wcmVzcy5oIgogCisKIC8qIC0tLS0tLS0tLS0K ICAqIExvY2FsIGRlZmluaXRpb25zCiAgKiAtLS0tLS0tLS0tCiAgKi8KICNkZWZpbmUgUEdM Wl9NQVhfSElTVE9SWV9MSVNUUwk4MTkyCS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLworLyog cmV2aWV3OiBidXQgd2Ugb25seSBkbyAiPT0iIGNvbXBhcmlzb24gYW55d2F5LCBzbyB3aHk/ IGFsc28gY291bGQgc2F5IDQwOTUgKi8KICNkZWZpbmUgUEdMWl9ISVNUT1JZX1NJWkUJCTB4 MGZmZgkvKiB0byBhdm9pZCBjb21wYXJlIGluIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBQR0xa X01BWF9NQVRDSAkJCTI3MwogCkBAIC0yMDYsNiArMjA4LDcgQEAKICAqLwogdHlwZWRlZiBz dHJ1Y3QgUEdMWl9IaXN0RW50cnkKIHsKKwkvKiByZXZpZXc6IHRoZSBjb21tZW50IGlzIG9i c29sZXRlLCB0aGVyZSBhcmUgaW5kZXhlcywgbm90IGxpbmtzKSAqLwogCWludDE2CQluZXh0 X2lkOwkJLyogbGlua3MgZm9yIG15IGhhc2gga2V5J3MgbGlzdCAqLwogCXVpbnQxNgkJaGlz dF9pZHg7CQkvKiBteSBjdXJyZW50IGhhc2gga2V5ICovCiAJY29uc3QgdW5zaWduZWQgY2hh ciAqcG9zOwkvKiBteSBpbnB1dCBwb3NpdGlvbiAqLwpAQCAtMjgzLDggKzI4Niw3IEBAIHBn bHpfaGlzdF9pZHgoY29uc3QgdW5zaWduZWQgY2hhciAqcywgdWludDE2IG1hc2spCiAvKiAt LS0tLS0tLS0tCiAgKiBwZ2x6X2hpc3RfYWRkIC0KICAqCi0gKgkJQWRkcyBhIG5ldyBlbnRy eSB0byB0aGUgaGlzdG9yeSB0YWJsZQotICoJCWFuZCByZWNhbGN1bGF0ZXMgaGFzaCB2YWx1 ZS4KKyAqCQlBZGRzIGEgbmV3IGVudHJ5IHRvIHRoZSBoaXN0b3J5IHRhYmxlIGFuZCByZWNh bGN1bGF0ZXMgaGFzaCB2YWx1ZS4KICAqIC0tLS0tLS0tLS0KICAqLwogc3RhdGljIGlubGlu ZSBpbnQxNgpAQCAtMzUwLDggKzM1Miw3IEBAIHBnbHpfb3V0X3RhZyh1bnNpZ25lZCBjaGFy ICpkZXN0X3B0ciwgaW50MzIgbWF0Y2hfbGVuLCBpbnQzMiBtYXRjaF9vZmZzZXQpCiAvKiAt LS0tLS0tLS0tCiAgKiBwZ2x6X2NvbXBhcmUgLQogICoKLSAqCQlDb21wYXJlcyB0d28gc2Vx dWVuY2VzIG9mIGJ5dGVzCi0gKgkJYW5kIHJldHVybnMgcG9zaXRpb24gb2YgZmlyc3QgbWlz bWF0Y2guCisgKgkJQ29tcGFyZXMgdHdvIHNlcXVlbmNlcyBvZiBieXRlcyBhbmQgcmV0dXJu cyBwb3NpdGlvbiBvZiBmaXJzdCBtaXNtYXRjaC4KICAqIC0tLS0tLS0tLS0KICAqLwogc3Rh dGljIGlubGluZSBpbnQzMgpAQCAtMzk1LDYgKzM5Niw5IEBAIHBnbHpfZmluZF9tYXRjaCh1 aW50MTYgaGlzdF9pZHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBjb25zdCB1bnNp Z25lZCBjaGFyCiAKIAkvKgogCSAqIFRyYXZlcnNlIHRoZSBsaW5rZWQgaGlzdG9yeSBsaXN0 IHVudGlsIGEgZ29vZCBlbm91Z2ggbWF0Y2ggaXMgZm91bmQuCisJICoKKwkgKiByZXZpZXc6 IG1pc3BsYWNlZCBjb21tZW50IC0gdGhpcyBiZWxvbmdzIHRvIHRoZSB3aGlsZSBsb29wIGZ1 cnRoZXIKKwkgKiBkb3duLCBoZXJlIHdlIHNob3VsZCBleHBsYWluIGhhbmRsaW5nIG9mIGlu dmFsaWQgZW50cmllcyBhbmQgY2xlYW51cAogCSAqLwogCWhpc3RfZW50cnlfbnVtYmVyID0g Jmhpc3Rfc3RhcnRbaGlzdF9pZHhdOwogCWlmICgqaGlzdF9lbnRyeV9udW1iZXIgPT0gSU5W QUxJRF9FTlRSWSkKQEAgLTU4MSw5ICs1ODUsNyBAQCBwZ2x6X2NvbXByZXNzKGNvbnN0IGNo YXIgKnNvdXJjZSwgaW50MzIgc2xlbiwgY2hhciAqZGVzdCwKIAkJcmVzdWx0X21heCA9IChz bGVuIC8gMTAwKSAqICgxMDAgLSBuZWVkX3JhdGUpOwogCX0KIAllbHNlCi0JewogCQlyZXN1 bHRfbWF4ID0gKHNsZW4gKiAoMTAwIC0gbmVlZF9yYXRlKSkgLyAxMDA7Ci0JfQogCiAJLyoK IAkgKiBFeHBlcmltZW50cyBzdWdnZXN0IHRoYXQgdGhlc2UgaGFzaCBzaXplcyB3b3JrIHBy ZXR0eSB3ZWxsLiBBIGxhcmdlCi0tIAoyLjM4LjEKCg== --------------Ce4JWepZEfScVENch2mvihNo--