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 1p39ts-0006T1-7u for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Dec 2022 05:56:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p39tr-0005QH-4C for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Dec 2022 05:56:51 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p39tq-0005Q7-EB for pgsql-hackers@lists.postgresql.org; Thu, 08 Dec 2022 05:56:50 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p39tk-0005pk-5l for pgsql-hackers@postgresql.org; Thu, 08 Dec 2022 05:56:49 +0000 Received: by mail-pj1-x1029.google.com with SMTP id n65-20020a17090a2cc700b0021bc5ef7a14so551442pjd.0 for ; Wed, 07 Dec 2022 21:56:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=YbiwylyjOiPgNjY8Zj8RkGwYW8VTh0RPv3qHOOr1V6c=; b=XfglCov4H3mpf7taNckEA10d/XiRxzqRjAQwnXWCjjKRO+LH8YWuPbLG7vzOeJbwSW z26+7fj42VqO8+yLMdBnFykbs2zCVsMCMKUy6DyRdiIovFlB32cNKfSOeJ1jrMdgtJGd OTA1zhdbyOfu9vOCJi9E1GjuCNGp3GDdZ3mtqm0l8yy56q5m4Iv12lQ+Qu2INwV7Wty1 Ep0SK7gW9WTgMcCPBJd/IbzuYYFX1h6nbXp9NS/vafq6GmoiDo2VWvVU8FeH9/t6ymaU wzdhSRx1gjO8Y6XiWPCKO6crNV9oDrFf+iJKISpsH9eZb5QK4NSnmQF/Vyw0U1e6qgnf /HuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=YbiwylyjOiPgNjY8Zj8RkGwYW8VTh0RPv3qHOOr1V6c=; b=avocGqC9tOu3loqV7MlZTSRgVWgWe3Bsjz5XQlolrzTGikQf6OSiTfM5rYSxtRyqzs UdEJ2HIrmpzUsZOsXUsIljoZUuRPruMcKveG8SE7QWXF5WHVT9Mdf9XfRebL9h2hQi9U IALSbBSpn+7QomFZliiQ7i+b1Lco6Fmr9D5GerdxkctD1Qox8dS4ARBrMIhJh6xkmObM nh59Kexvn5WqlfAuCZbhAcLmuFALnybGSzCLC5LaVm76PedlGHDCvGAOFn6AB5mxCrSf JDZsVqXMkDYi0if52AAMKkD6//fCPB/UK8wA4sFHknuAhq2txjRyzFqp0EPrcRxTNPNt zxQQ== X-Gm-Message-State: ANoB5pnaE9hFFyvKI3c3T9tdZtcbqobgKkFfdkR/B4XyBlzIjDQU80aA tPFJf0jFCerocwA2DFaWJx5ktg== X-Google-Smtp-Source: AA0mqf4xn4K9oowwCkNndSZaahYLyNPrZZX7ISp3aRWg+XDVR3XuNZGybgkxKPCNGnb7g/jS7pqO8Q== X-Received: by 2002:a17:90b:238b:b0:219:7904:6de with SMTP id mr11-20020a17090b238b00b00219790406demr34048191pjb.136.1670479001669; Wed, 07 Dec 2022 21:56:41 -0800 (PST) Received: from jeff-laptop.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id q9-20020a170902bd8900b0017a032d7ae4sm15559171pls.104.2022.12.07.21.56.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Dec 2022 21:56:40 -0800 (PST) Message-ID: Subject: Re: Collation version tracking for macOS From: Jeff Davis To: Thomas Munro , Joe Conway Cc: Peter Eisentraut , Jeremy Schneider , Peter Geoghegan , "Nasby, Jim" , Tom Lane , pgsql-hackers Date: Wed, 07 Dec 2022 21:56:38 -0800 In-Reply-To: References: <398aabd1-ad95-ba2d-d70a-dd5d90bf6e07@enterprisedb.com> <606bd2baa6d65b38fee6eb23bba40c5da210255b.camel@j-davis.com> <9f8e9b5a3352478d4cf7d6c0a5dd7e82496be4b6.camel@j-davis.com> <346f836208a39009c1998ed5a41c7f1a0be36911.camel@j-davis.com> <776e9ddb-a0e6-3f29-9368-a194be30d1a6@joeconway.com> Content-Type: multipart/mixed; boundary="=-HN8GqdZSiO/qo3uzBaZ6" User-Agent: Evolution 3.44.4-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-HN8GqdZSiO/qo3uzBaZ6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2022-12-06 at 10:33 +1300, Thomas Munro wrote: > OK, I'm going to see what happens if I try to wrangle that stuff into > a new catalogue table. I've been hacking on a major refactor of the locale-related code. I attached my progress and I think several patches are ready. The main motivation is that I was frustrated by the special cases everywhere. I wanted to make it easier to hack on this code going forward, now that we are adding even more complexity for multiple ICU libraries. I'm posting to this thread (rather than my previous refactoring thread[1]) because a lot of the people interested in working on this code are here. So, if you like (or don't like) the structure of these changes, please let me know. Changes: * Introduce pg_locale_internal.h to hide all USE_ICU code, including all callers of the ICU routines. The files that still need to include pg_locale_internal.h are: - pg_locale.c - regc_pg_locale.c - formatting.c - like.c - like_support.c - collationcmds.c * Other callers (in files that don't include=C2=A0 pg_locale_internal.h) don't need to branch based on the provider, platform, database encoding, USE_ICU, HAVE_LOCALE_T, etc. * ICU and libc are treated the same way in more places. * I made it so pg_locale_t is constructed first, then moved to TopMemoryContext, so that it won't leak in TopMemoryContext if errors are encountered. * Introduce pg_strcoll, pg_strncoll, pg_strxfrm, and pg_strnxfrm so that varlena/hash/verchar code doesn't worry about the details. * Add method structure pg_icu_library, borrowed from Thomas's patch, that provides one convenient place to provide multiple-ICU-library support. * Add a hook that allows you to fill in the pg_icu_library structure however you want while a pg_locale_t is being constructed. This allows do-it-yourself ICU library lockdown. On the negative side, it increases the line count. Part of that is because adding indirection for the ICU library is just more lines of code, but a lot of it is just that I used a lot of smaller functions. Perhaps my style is a bit verbose? Even though we're close to consensus on how we should offer control over the ICU libraries, having the hook may be useful for experimentation, testing, or as a last resort. Right now the hook has limited information to use to find the right library -- just the ICU collation name and the version, because that's what we have in the catalog. But I assume the patch Thomas is working on will change that. Performance: I did brief performance sanity tests on several paths and the results are unremarkable (which is generally good for a refactor). On the path I was watching most closely, ICU/UTF8/en-US-x-icu, it came in about 2% faster, which was a pleasant surprise. This was true both when I disabled abbreviated keys (to stress localized comparison paths) and also with abbreviated keys enabled. My previous refactoring work[1] ended up a percent or two slower. My guess right now is that I moved some code around after I noticed that ICU accepts NUL-terminated strings (by specifying the lenght as -1), and that helped. But I'll need to profile and look more closely to be more certain of my results, these are preliminary. There are a few things that could be done differently: * I am still a bit confused about why someone would want a collation with a different lc_collate and lc_ctype in libc; and assuming there is a reason, why it can't be done with ICU. The way I did the refactoring tries to accommodate them as different concepts, but I can rip that out. * In theory, we could also support multilib libc, and an associated get_libc_library() and hook, but there are a couple big challenges. Firstly, if it's the default locale, it relies on setlocale(), so we'd have to figure out what to do about that. Second, having an a second version of glibc on your system is not as normal or trivial as having a second version of ICU. * I made the hook simple, but all it can do is replace the ICU library. It's possible that it would want to construct it's own entire pg_locale_t for some reason, and keep more complex state in a private pointer, or something like that. It seemed better to keep it simple, but maybe someone would want more flexibility there? * I used the library indirection for pretty much all ICU calls, including the ucnv_ and the uloc_ functions. I did this mainly because, if we are so paranoid about ICU changing in subtle ways, we might as well make it possible to lock down everything. I can rip this out, too, but it didn't add many lines. Loose ends: * I need to do something with get_collation_actual_version. I had an earlier iteration that went through pg_newlocale() and then queried the resulting pg_locale_t structure, but that changed the error paths in a way that failed a couple tests, so I left that out. * Error paths could be improved further to make sure that libc locale_t and UCollator structures are freed in error paths during construction. I was thinking about using resowner for this, and then if the pg_locale_t structure gets moved to TopMemoryContext, just doing a ResourceOwnerForget. Alternatively, I could just be careful about the error paths. * We'd need to adapt this and make sure it works with whatever scheme we decide is best for finding the right library. I suspect this would just be adding another parameter to get_icu_library (and the hook) to represent the new collation provider Oid (and get_icu_library could use that to look up the library names and load them). Comments welcome. [1] https://www.postgresql.org/message-id/99aa79cceefd1fe84fda23510494b8fbb7ad1= e70.camel@j-davis.com --=20 Jeff Davis PostgreSQL Contributor Team - AWS --=-HN8GqdZSiO/qo3uzBaZ6 Content-Disposition: attachment; filename="v2-0001-Add-pg_strcoll-and-pg_strncoll.patch" Content-Type: text/x-patch; name="v2-0001-Add-pg_strcoll-and-pg_strncoll.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA1ZDE0NGUxOTY4NmEwYWUwMWUxZDgwYTlmOGMzNTYwNzlmNDFiOWViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDU6MTUgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyIDEvNl0gQWRk IHBnX3N0cmNvbGwoKSBhbmQgcGdfc3RybmNvbGwoKS4KCkNhbGxlcnMgd2l0aCBOVUwtdGVybWlu YXRlZCBzdHJpbmdzIHNob3VsZCBjYWxsIHRoZSBmb3JtZXI7IGNhbGxlcnMKd2l0aCBzdHJpbmdz IGFuZCB0aGVpciBsZW5ndGggc2hvdWxkIGNhbGwgdGhlIGxhdHRlci4KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgfCA0MjAgKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgfCAyMzAgKy0tLS0tLS0tLS0t LS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgIHwgICAzICsKIDMgZmlsZXMg Y2hhbmdlZCwgNDA2IGluc2VydGlvbnMoKyksIDI0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlLmMKaW5kZXggMmI0MmQ5Y2NkOC4uNmNkNjI5ZWNiNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGUuYwpAQCAtNzksNiArNzksMTIgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+ CiAjZW5kaWYKIAorLyoKKyAqIFRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0aGF0IG1vc3Qg c3RyaW5ncyB3aWxsIGZpdCwgYnV0IHNtYWxsIGVub3VnaAorICogdGhhdCB3ZSBmZWVsIGNvbWZv cnRhYmxlIHB1dHRpbmcgaXQgb24gdGhlIHN0YWNrCisgKi8KKyNkZWZpbmUJCVRFWFRCVUZMRU4J CQkxMDI0CisKICNkZWZpbmUJCU1BWF9MMTBOX0RBVEEJCTgwCiAKIApAQCAtMTIzLDYgKzEyOSwx OSBAQCBzdGF0aWMgY2hhciAqSXNvTG9jYWxlTmFtZShjb25zdCBjaGFyICopOwogI2VuZGlmCiAK ICNpZmRlZiBVU0VfSUNVCisvKgorICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBi ZXR3ZWVuIElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncworICogaW4gZGF0YWJhc2Ug ZW5jb2RpbmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdl IG9ubHkKKyAqIG5lZWQgb25lIG9mIHRoZXNlIHBlciBzZXNzaW9uLgorICovCitzdGF0aWMgVUNv bnZlcnRlciAqaWN1X2NvbnZlcnRlciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGluaXRfaWN1X2Nv bnZlcnRlcih2b2lkKTsKK3N0YXRpYyBzaXplX3QgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNv bnZlcnRlciwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CitzdGF0aWMg aW50MzJfdCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKKwkJCQkJCQkgVUNo YXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqc3RyLCBzaXpl X3Qgc3JjbGVuKTsKIHN0YXRpYyB2b2lkIGljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoVUNv bGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hhciAqbG9jKTsKICNlbmRpZgogCkBAIC0xNzMxLDE1 ICsxNzUwLDM1NiBAQCBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIgY29sbHByb3Zp ZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSkKIAlyZXR1cm4gY29sbHZlcnNpb247CiB9CiAK Ky8qCisgKiBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgKKyAqCisgKiBXaW4zMiBkb2VzIG5v dCBoYXZlIFVURi04LiBDb252ZXJ0IFVURjggYXJndW1lbnRzIHRvIHdpZGUgY2hhcmFjdGVycyBh bmQKKyAqIGludm9rZSB3Y3Njb2xsKCkgb3Igd2NzY29sbF9sKCkuCisgKi8KKyNpZmRlZiBXSU4z Mgorc3RhdGljIGludAorcGdfc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFy ZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLAorCQkJCQkJCXNpemVfdCBsZW4yLCBw Z19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkJc2J1ZltURVhUQlVGTEVOXTsKKwljaGFyCSAg ICpidWYgPSBzYnVmOworCWNoYXIJICAgKmExcCwKKwkJCSAgICphMnA7CisJaW50CQkJYTFsZW4g PSBsZW4xICogMiArIDI7CisJaW50CQkJYTJsZW4gPSBsZW4yICogMiArIDI7CisJaW50CQkJcjsK KwlpbnQJCQlyZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBH X1VURjgpOworI2lmbmRlZiBXSU4zMgorCUFzc2VydChmYWxzZSk7CisjZW5kaWYKKworCWlmIChh MWxlbiArIGEybGVuID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKGExbGVuICsgYTJsZW4p OworCisJYTFwID0gYnVmOworCWEycCA9IGJ1ZiArIGExbGVuOworCisJLyogQVBJIGRvZXMgbm90 IHdvcmsgZm9yIHplcm8tbGVuZ3RoIGlucHV0ICovCisJaWYgKGxlbjEgPT0gMCkKKwkJciA9IDA7 CisJZWxzZQorCXsKKwkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgYXJnMSwg bGVuMSwKKwkJCQkJCQkJKExQV1NUUikgYTFwLCBhMWxlbiAvIDIpOworCQlpZiAoIXIpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8g VVRGLTE2OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJfQor CSgoTFBXU1RSKSBhMXApW3JdID0gMDsKKworCWlmIChsZW4yID09IDApCisJCXIgPSAwOworCWVs c2UKKwl7CisJCXIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIGFyZzIsIGxlbjIs CisJCQkJCQkJCShMUFdTVFIpIGEycCwgYTJsZW4gLyAyKTsKKwkJaWYgKCFyKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVURi0x NjogZXJyb3IgY29kZSAlbHUiLAorCQkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCX0KKwkoKExQ V1NUUikgYTJwKVtyXSA9IDA7CisKKwllcnJubyA9IDA7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAor CWlmIChsb2NhbGUpCisJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIp IGEycCwgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNlCisjZW5kaWYKKwkJcmVzdWx0ID0gd2NzY29s bCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCk7CisJaWYgKHJlc3VsdCA9PSAyMTQ3NDgzNjQ3 KQkvKiBfTkxTQ01QRVJST1I7IG1pc3NpbmcgZnJvbSBtaW5ndworCQkJCQkJCQkgKiBoZWFkZXJz ICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGNvbXBhcmUgVW5p Y29kZSBzdHJpbmdzOiAlbSIpKSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisg KiBwZ19zdHJjb2xsX2xpYmMKKyAqCisgKiBDYWxsIHN0cmNvbGwoKSwgc3RyY29sbF9sKCksIHdj c2NvbGwoKSwgb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9yCisgKiB0aGUgZ2l2ZW4g bG9jYWxlLCBwbGF0Zm9ybSwgYW5kIGRhdGFiYXNlIGVuY29kaW5nLiBJZiB0aGUgbG9jYWxlIGlz IE5VTEwsCisgKiB1c2UgdGhlIGRhdGFiYXNlIGNvbGxhdGlvbi4KKyAqCisgKiBBcmd1bWVudHMg bXVzdCBiZSBlbmNvZGVkIGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBhbmQgbnVsLXRlcm1pbmF0 ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBj b25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaW50IHJlc3VsdDsKKwor CUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMp OworI2lmZGVmIFdJTjMyCisJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQor CXsKKwkJc2l6ZV90IGxlbjEgPSBzdHJsZW4oYXJnMSk7CisJCXNpemVfdCBsZW4yID0gc3RybGVu KGFyZzIpOworCQlyZXN1bHQgPSBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoYXJnMSwgbGVu MSwgYXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisJZWxzZQorI2VuZGlmCQkJCQkJCS8qIFdJTjMy ICovCisJaWYgKGxvY2FsZSkKKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlyZXN1bHQgPSBz dHJjb2xsX2woYXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmx0KTsKKyNlbHNlCisJCS8qIHNob3Vs ZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjog JWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKyNlbmRpZgorCX0KKwllbHNlCisJCXJlc3VsdCA9IHN0 cmNvbGwoYXJnMSwgYXJnMik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcGdfc3Ry bmNvbGxfbGliYworICoKKyAqIE51bGwtdGVybWluYXRlIHRoZSBhcmd1bWVudHMgYW5kIGNhbGwg cGdfc3RyY29sbF9saWJjKCkuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2xpYmMoY29u c3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4y LAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkgc2J1ZltURVhUQlVGTEVOXTsK KwljaGFyCSpidWYJICA9IHNidWY7CisJc2l6ZV90CSBidWZzaXplMSA9IGxlbjEgKyAxOworCXNp emVfdAkgYnVmc2l6ZTIgPSBsZW4yICsgMTsKKwljaGFyCSphcmcxbjsKKwljaGFyCSphcmcybjsK KwlpbnQJCSByZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKworI2lmZGVmIFdJTjMyCisJLyogY2hlY2sgZm9yIHRoaXMg Y2FzZSBiZWZvcmUgZG9pbmcgdGhlIHdvcmsgZm9yIG51bC10ZXJtaW5hdGlvbiAqLworCWlmIChH ZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwkJcmV0dXJuIHBnX3N0cm5jb2xsX2xp YmNfd2luMzJfdXRmOChhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCQkJ CQkJCS8qIFdJTjMyICovCisKKwlpZiAoYnVmc2l6ZTEgKyBidWZzaXplMiA+IFRFWFRCVUZMRU4p CisJCWJ1ZiA9IHBhbGxvYyhidWZzaXplMSArIGJ1ZnNpemUyKTsKKworCWFyZzFuID0gYnVmOwor CWFyZzJuID0gYnVmICsgYnVmc2l6ZTE7CisKKwkvKiBudWwtdGVybWluYXRlIGFyZ3VtZW50cyAq LworCW1lbWNweShhcmcxbiwgYXJnMSwgbGVuMSk7CisJYXJnMW5bbGVuMV0gPSAnXDAnOworCW1l bWNweShhcmcybiwgYXJnMiwgbGVuMik7CisJYXJnMm5bbGVuMl0gPSAnXDAnOworCisJcmVzdWx0 ID0gcGdfc3RyY29sbF9saWJjKGFyZzFuLCBhcmcybiwgbG9jYWxlKTsKKworCWlmIChidWYgIT0g c2J1ZikKKwkJcGZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHQ7Cit9CiAKICNpZmRlZiBVU0Vf SUNVCisKIC8qCi0gKiBDb252ZXJ0ZXIgb2JqZWN0IGZvciBjb252ZXJ0aW5nIGJldHdlZW4gSUNV J3MgVUNoYXIgc3RyaW5ncyBhbmQgQyBzdHJpbmdzCi0gKiBpbiBkYXRhYmFzZSBlbmNvZGluZy4g IFNpbmNlIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBkb2Vzbid0IGNoYW5nZSwgd2Ugb25seQotICog bmVlZCBvbmUgb2YgdGhlc2UgcGVyIHNlc3Npb24uCisgKiBwZ19zdHJuY29sbF9pY3Vfbm9fdXRm OAorICoKKyAqIENvbnZlcnQgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBkYXRhYmFzZSBlbmNvZGlu ZyB0byBVQ2hhciBzdHJpbmdzLCB0aGVuCisgKiBjYWxsIHVjb2xfc3RyY29sbCgpLgorICoKKyAq IFdoZW4gdGhlIGRhdGFiYXNlIGVuY29kaW5nIGlzIFVURi04LCBhbmQgSUNVIHN1cHBvcnRzIHVj b2xfc3RyY29sbFVURjgoKSwKKyAqIGNhbGxlciBzaG91bGQgY2FsbCB0aGF0IGluc3RlYWQuCiAg Ki8KLXN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKK3N0YXRpYyBpbnQK K3BnX3N0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLAor CQkJCQkJY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSkK K3sKKwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1ZiA9IHNidWY7CisJaW50MzJf dAkgdWxlbjE7CisJaW50MzJfdAkgdWxlbjI7CisJc2l6ZV90ICAgYnVmc2l6ZTE7CisJc2l6ZV90 ICAgYnVmc2l6ZTI7CisJVUNoYXIJKnVjaGFyMSwKKwkJCSp1Y2hhcjI7CisJaW50CQkgcmVzdWx0 OworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisjaWZk ZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAh PSBQR19VVEY4KTsKKyNlbmRpZgorCisJaW5pdF9pY3VfY29udmVydGVyKCk7CisKKwl1bGVuMSA9 IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcxLCBsZW4xKTsKKwl1bGVuMiA9IHVjaGFy X2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcyLCBsZW4yKTsKKworCWJ1ZnNpemUxID0gKHVsZW4x ICsgMSkgKiBzaXplb2YoVUNoYXIpOworCWJ1ZnNpemUyID0gKHVsZW4yICsgMSkgKiBzaXplb2Yo VUNoYXIpOworCisJaWYgKGJ1ZnNpemUxICsgYnVmc2l6ZTIgPiBURVhUQlVGTEVOKQorCQlidWYg PSBwYWxsb2MoYnVmc2l6ZTEgKyBidWZzaXplMik7CisKKwl1Y2hhcjEgPSAoVUNoYXIgKikgYnVm OworCXVjaGFyMiA9IChVQ2hhciAqKSAoYnVmICsgYnVmc2l6ZTEpOwogCisJdWxlbjEgPSB1Y2hh cl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwgdWxlbjEgKyAxLCBhcmcxLCBsZW4xKTsK Kwl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIyLCB1bGVuMiArIDEs IGFyZzIsIGxlbjIpOworCisJcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3Uu dWNvbCwKKwkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKKwkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisK KwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogcGdfc3RybmNvbGxfaWN1CisgKgorICogQ2FsbCB1Y29sX3N0cmNvbGxVVEY4KCkg b3IgdWNvbF9zdHJjb2xsKCkgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbgorICogZGF0YWJh c2UgZW5jb2RpbmcuCisgKgorICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0 YWJhc2UgZW5jb2RpbmcuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2ljdShjb25zdCBj aGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJ CQkJcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWludCByZXN1bHQ7CisKKwlBc3NlcnQobG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAorCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwl7CisJCVVF cnJvckNvZGUJc3RhdHVzOworCisJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJcmVzdWx0ID0g dWNvbF9zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCSAgYXJnMSwg bGVuMSwKKwkJCQkJCQkJICBhcmcyLCBsZW4yLAorCQkJCQkJCQkgICZzdGF0dXMpOworCQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb2xs YXRpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJfQorCWVsc2UKKyNl bmRpZgorCXsKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfaWN1X25vX3V0ZjgoYXJnMSwgbGVuMSwg YXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog cGdfc3RyY29sbF9pY3UKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHN0cmluZyBsZW5ndGhzIGFuZCBj YWxsIHBnX3N0cm5jb2xsX2ljdSgpLgorICovCitzdGF0aWMgaW50CitwZ19zdHJjb2xsX2ljdShj b25zdCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJcmV0dXJu IHBnX3N0cm5jb2xsX2ljdShhcmcxLCAtMSwgYXJnMiwgLTEsIGxvY2FsZSk7Cit9CisKKyNlbmRp ZgkJCQkJCQkvKiBVU0VfSUNVICovCisKKy8qCisgKiBwZ19zdHJjb2xsCisgKgorICogQ2FsbCB1 Y29sX3N0cmNvbGxVVEY4KCksIHVjb2xfc3RyY29sbCgpLCBzdHJjb2xsKCksIHN0cmNvbGxfbCgp LCB3Y3Njb2xsKCksCisgKiBvciB3Y3Njb2xsX2woKSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGdp dmVuIGxvY2FsZSwgcGxhdGZvcm0sIGFuZCBkYXRhYmFzZQorICogZW5jb2RpbmcuIElmIHRoZSBs b2NhbGUgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBkYXRhYmFzZSBjb2xsYXRpb24uCisgKgor ICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgYW5k IG51bC10ZXJtaW5hdGVkLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3Rp YywgYnJlYWsgdGllcyB3aXRoIHN0cmNtcCgpLgorICovCitpbnQKK3BnX3N0cmNvbGwoY29uc3Qg Y2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlu dAkJCXJlc3VsdDsKKworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0xJQkMpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfbGliYyhhcmcxLCBhcmcyLCBsb2Nh bGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQ Uk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfaWN1KGFyZzEsIGFyZzIsIGxvY2Fs ZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJP UiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKwor CS8qIEJyZWFrIHRpZSBpZiBuZWNlc3NhcnkuICovCisJaWYgKHJlc3VsdCA9PSAwICYmICghbG9j YWxlIHx8IGxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykpCisJCXJlc3VsdCA9IHN0cmNtcChhcmcxLCBh cmcyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJuY29sbAorICoKKyAq IENhbGwgdWNvbF9zdHJjb2xsVVRGOCgpLCB1Y29sX3N0cmNvbGwoKSwgc3RyY29sbCgpLCBzdHJj b2xsX2woKSwgd2NzY29sbCgpLAorICogb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9y IHRoZSBnaXZlbiBsb2NhbGUsIHBsYXRmb3JtLCBhbmQgZGF0YWJhc2UKKyAqIGVuY29kaW5nLiBJ ZiB0aGUgbG9jYWxlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgZGF0YWJhc2UgY29sbGF0aW9u LgorICoKKyAqIEFyZ3VtZW50cyBtdXN0IGJlIGVuY29kZWQgaW4gdGhlIGRhdGFiYXNlIGVuY29k aW5nLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3RpYywgYnJlYWsgdGll cyB3aXRoIG1lbWNtcCgpLCBhbmQgdGhlbiB3aXRoCisgKiB0aGUgc3RyaW5nIGxlbmd0aC4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5hdGUgdGhlIGFyZ3VtZW50 cyBmb3IgbGliYyBmdW5jdGlvbnM7CisgKiBzbyBpZiB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIG51 bC10ZXJtaW5hdGVkIHN0cmluZ3MsIGl0IHNob3VsZCBjYWxsCisgKiBwZ19zdHJjb2xsKCkgaW5z dGVhZC4KKyAqLworaW50CitwZ19zdHJuY29sbChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVu MSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJCQlwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJaW50CQkgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfbGliYyhhcmcxLCBs ZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2Nh bGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cm5jb2xs X2ljdShhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCisJZWxzZQorCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJv dmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CisKKwkvKiBCcmVhayB0aWUgaWYgbmVjZXNz YXJ5LiAqLworCWlmIChyZXN1bHQgPT0gMCAmJiAoIWxvY2FsZSB8fCBsb2NhbGUtPmRldGVybWlu aXN0aWMpKQorCXsKKwkJcmVzdWx0ID0gbWVtY21wKGFyZzEsIGFyZzIsIE1pbihsZW4xLCBsZW4y KSk7CisJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQorCQkJcmVzdWx0ID0g KGxlbjEgPCBsZW4yKSA/IC0xIDogMTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKyNp ZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiB7CkBA IC0xNzY3LDYgKzIxMjcsMzkgQEAgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiAJaWN1X2NvbnZl cnRlciA9IGNvbnY7CiB9CiAKKy8qCisgKiBGaW5kIGxlbmd0aCwgaW4gVUNoYXJzLCBvZiBnaXZl biBzdHJpbmcgaWYgY29udmVydGVkIHRvIFVDaGFyIHN0cmluZy4KKyAqLworc3RhdGljIHNpemVf dAordWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBz aXplX3QgbGVuKQoreworCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCWludDMy X3QJCXVsZW47CisJdWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBOVUxMLCAwLCBzdHIs IGxlbiwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JV RkZFUl9PVkVSRkxPV19FUlJPUikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCIlcyBm YWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCXJl dHVybiB1bGVuOworfQorCisvKgorICogQ29udmVydCB0aGUgZ2l2ZW4gc291cmNlIHN0cmluZyBp bnRvIGEgVUNoYXIgc3RyaW5nLCBzdG9yZWQgaW4gZGVzdCwgYW5kCisgKiByZXR1cm4gdGhlIGxl bmd0aCAoaW4gVUNoYXJzKS4KKyAqLworc3RhdGljIGludDMyX3QKK3VjaGFyX2NvbnZlcnQoVUNv bnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAorCQkJICBj b25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJVUVycm9yQ29kZQlzdGF0dXMgPSBV X1pFUk9fRVJST1I7CisJaW50MzJfdAkJdWxlbjsKKwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJ dWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBzcmMsIHNyY2xl biwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVfZXJyb3JOYW1l KHN0YXR1cykpKSk7CisJcmV0dXJuIHVsZW47Cit9CisKIC8qCiAgKiBDb252ZXJ0IGEgc3RyaW5n IGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBpbnRvIGEgc3RyaW5nIG9mIFVDaGFycy4KICAqCkBA IC0xNzgyLDI2ICsyMTc1LDE1IEBAIGluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQogaW50MzJfdAog aWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90 IG5ieXRlcykKIHsKLQlVRXJyb3JDb2RlCXN0YXR1czsKLQlpbnQzMl90CQlsZW5fdWNoYXI7CisJ aW50MzJfdCBsZW5fdWNoYXI7CiAKIAlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKIAotCXN0YXR1cyA9 IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIs IE5VTEwsIDAsCi0JCQkJCQkJICBidWZmLCBuYnl0ZXMsICZzdGF0dXMpOwotCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwg dV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5fdWNoYXIgPSB1Y2hhcl9sZW5ndGgoaWN1X2Nv bnZlcnRlciwgYnVmZiwgbmJ5dGVzKTsKIAogCSpidWZmX3VjaGFyID0gcGFsbG9jKChsZW5fdWNo YXIgKyAxKSAqIHNpemVvZigqKmJ1ZmZfdWNoYXIpKTsKLQotCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIsICpidWZmX3VjaGFy LCBsZW5fdWNoYXIgKyAxLAotCQkJCQkJCSAgYnVmZiwgbmJ5dGVzLCAmc3RhdHVzKTsKLQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFp bGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5f dWNoYXIgPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsCisJCQkJCQkJICAqYnVmZl91Y2hh ciwgbGVuX3VjaGFyICsgMSwgYnVmZiwgbmJ5dGVzKTsKIAogCXJldHVybiBsZW5fdWNoYXI7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCBjNWU3ZWU3Y2EyLi5jOTA0YmMwODI1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTE1MzUsMTAgKzE1MzUsNiBAQCB2YXJzdHJfY21wKGNv bnN0IGNoYXIgKmFyZzEsIGludCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBpbnQgbGVuMiwgT2lk IGNvbGxpZCkKIAl9CiAJZWxzZQogCXsKLQkJY2hhcgkJYTFidWZbVEVYVEJVRkxFTl07Ci0JCWNo YXIJCWEyYnVmW1RFWFRCVUZMRU5dOwotCQljaGFyCSAgICphMXAsCi0JCQkJICAgKmEycDsKIAkJ cGdfbG9jYWxlX3QgbXlsb2NhbGU7CiAKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9j b2xsYXRpb24oY29sbGlkKTsKQEAgLTE1NTUsMTcxICsxNTUxLDcgQEAgdmFyc3RyX2NtcChjb25z dCBjaGFyICphcmcxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgaW50IGxlbjIsIE9pZCBj b2xsaWQpCiAJCWlmIChsZW4xID09IGxlbjIgJiYgbWVtY21wKGFyZzEsIGFyZzIsIGxlbjEpID09 IDApCiAJCQlyZXR1cm4gMDsKIAotI2lmZGVmIFdJTjMyCi0JCS8qIFdpbjMyIGRvZXMgbm90IGhh dmUgVVRGLTgsIHNvIHdlIG5lZWQgdG8gbWFwIHRvIFVURi0xNiAqLwotCQlpZiAoR2V0RGF0YWJh c2VFbmNvZGluZygpID09IFBHX1VURjgKLQkJCSYmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKSkKLQkJewotCQkJaW50CQkJYTFsZW47Ci0JCQlp bnQJCQlhMmxlbjsKLQkJCWludAkJCXI7Ci0KLQkJCWlmIChsZW4xID49IFRFWFRCVUZMRU4gLyAy KQotCQkJewotCQkJCWExbGVuID0gbGVuMSAqIDIgKyAyOwotCQkJCWExcCA9IHBhbGxvYyhhMWxl bik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJYTFsZW4gPSBURVhUQlVGTEVOOwotCQkJCWEx cCA9IGExYnVmOwotCQkJfQotCQkJaWYgKGxlbjIgPj0gVEVYVEJVRkxFTiAvIDIpCi0JCQl7Ci0J CQkJYTJsZW4gPSBsZW4yICogMiArIDI7Ci0JCQkJYTJwID0gcGFsbG9jKGEybGVuKTsKLQkJCX0K LQkJCWVsc2UKLQkJCXsKLQkJCQlhMmxlbiA9IFRFWFRCVUZMRU47Ci0JCQkJYTJwID0gYTJidWY7 Ci0JCQl9Ci0KLQkJCS8qIHN0dXBpZCBNaWNyb3Nsb3RoIEFQSSBkb2VzIG5vdCB3b3JrIGZvciB6 ZXJvLWxlbmd0aCBpbnB1dCAqLwotCQkJaWYgKGxlbjEgPT0gMCkKLQkJCQlyID0gMDsKLQkJCWVs c2UKLQkJCXsKLQkJCQlyID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBhcmcxLCBs ZW4xLAotCQkJCQkJCQkJCShMUFdTVFIpIGExcCwgYTFsZW4gLyAyKTsKLQkJCQlpZiAoIXIpCi0J CQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3Ry aW5nIHRvIFVURi0xNjogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJR2V0TGFzdEVycm9yKCkp KSk7Ci0JCQl9Ci0JCQkoKExQV1NUUikgYTFwKVtyXSA9IDA7Ci0KLQkJCWlmIChsZW4yID09IDAp Ci0JCQkJciA9IDA7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIo Q1BfVVRGOCwgMCwgYXJnMiwgbGVuMiwKLQkJCQkJCQkJCQkoTFBXU1RSKSBhMnAsIGEybGVuIC8g Mik7Ci0JCQkJaWYgKCFyKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJtc2coImNv dWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBVVEYtMTY6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJCUdldExhc3RFcnJvcigpKSkpOwotCQkJfQotCQkJKChMUFdTVFIpIGEycClbcl0gPSAwOwot Ci0JCQllcnJubyA9IDA7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQkJaWYgKG15bG9jYWxlKQot CQkJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbXlsb2Nh bGUtPmluZm8ubHQpOwotCQkJZWxzZQotI2VuZGlmCi0JCQkJcmVzdWx0ID0gd2NzY29sbCgoTFBX U1RSKSBhMXAsIChMUFdTVFIpIGEycCk7Ci0JCQlpZiAocmVzdWx0ID09IDIxNDc0ODM2NDcpCS8q IF9OTFNDTVBFUlJPUjsgbWlzc2luZyBmcm9tIG1pbmd3Ci0JCQkJCQkJCQkJICogaGVhZGVycyAq LwotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29tcGFyZSBV bmljb2RlIHN0cmluZ3M6ICVtIikpKTsKLQotCQkJLyogQnJlYWsgdGllIGlmIG5lY2Vzc2FyeS4g Ki8KLQkJCWlmIChyZXN1bHQgPT0gMCAmJgotCQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRl dGVybWluaXN0aWMpKQotCQkJewotCQkJCXJlc3VsdCA9IG1lbWNtcChhcmcxLCBhcmcyLCBNaW4o bGVuMSwgbGVuMikpOwotCQkJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQot CQkJCQlyZXN1bHQgPSAobGVuMSA8IGxlbjIpID8gLTEgOiAxOwotCQkJfQotCi0JCQlpZiAoYTFw ICE9IGExYnVmKQotCQkJCXBmcmVlKGExcCk7Ci0JCQlpZiAoYTJwICE9IGEyYnVmKQotCQkJCXBm cmVlKGEycCk7Ci0KLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLSNlbmRpZgkJCQkJCQkvKiBXSU4z MiAqLwotCi0JCWlmIChsZW4xID49IFRFWFRCVUZMRU4pCi0JCQlhMXAgPSAoY2hhciAqKSBwYWxs b2MobGVuMSArIDEpOwotCQllbHNlCi0JCQlhMXAgPSBhMWJ1ZjsKLQkJaWYgKGxlbjIgPj0gVEVY VEJVRkxFTikKLQkJCWEycCA9IChjaGFyICopIHBhbGxvYyhsZW4yICsgMSk7Ci0JCWVsc2UKLQkJ CWEycCA9IGEyYnVmOwotCi0JCW1lbWNweShhMXAsIGFyZzEsIGxlbjEpOwotCQlhMXBbbGVuMV0g PSAnXDAnOwotCQltZW1jcHkoYTJwLCBhcmcyLCBsZW4yKTsKLQkJYTJwW2xlbjJdID0gJ1wwJzsK LQotCQlpZiAobXlsb2NhbGUpCi0JCXsKLQkJCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKLQkJCXsKLSNpZmRlZiBVU0VfSUNVCi0jaWZkZWYgSEFWRV9VQ09MX1NU UkNPTExVVEY4Ci0JCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJ CXsKLQkJCQkJVUVycm9yQ29kZQlzdGF0dXM7Ci0KLQkJCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9S OwotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxVVEY4KG15bG9jYWxlLT5pbmZvLmljdS51Y29s LAotCQkJCQkJCQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCQkJCSAgYXJnMiwgbGVuMiwKLQkJ CQkJCQkJCQkJICAmc3RhdHVzKTsKLQkJCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1 X2Vycm9yTmFtZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0jZW5kaWYKLQkJCQl7Ci0J CQkJCWludDMyX3QJCXVsZW4xLAotCQkJCQkJCQl1bGVuMjsKLQkJCQkJVUNoYXIJICAgKnVjaGFy MSwKLQkJCQkJCQkgICAqdWNoYXIyOwotCi0JCQkJCXVsZW4xID0gaWN1X3RvX3VjaGFyKCZ1Y2hh cjEsIGFyZzEsIGxlbjEpOwotCQkJCQl1bGVuMiA9IGljdV90b191Y2hhcigmdWNoYXIyLCBhcmcy LCBsZW4yKTsKLQotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGwobXlsb2NhbGUtPmluZm8uaWN1 LnVjb2wsCi0JCQkJCQkJCQkJICB1Y2hhcjEsIHVsZW4xLAotCQkJCQkJCQkJCSAgdWNoYXIyLCB1 bGVuMik7Ci0KLQkJCQkJcGZyZWUodWNoYXIxKTsKLQkJCQkJcGZyZWUodWNoYXIyKTsKLQkJCQl9 Ci0jZWxzZQkJCQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQkJCS8qIHNob3VsZG4ndCBoYXBwZW4g Ki8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIG15bG9j YWxlLT5wcm92aWRlcik7Ci0jZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLSNpZmRlZiBIQVZFX0xPQ0FMRV9UCi0JCQkJcmVzdWx0ID0gc3RyY29sbF9s KGExcCwgYTJwLCBteWxvY2FsZS0+aW5mby5sdCk7Ci0jZWxzZQotCQkJCS8qIHNob3VsZG4ndCBo YXBwZW4gKi8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIs IG15bG9jYWxlLT5wcm92aWRlcik7Ci0jZW5kaWYKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlyZXN1 bHQgPSBzdHJjb2xsKGExcCwgYTJwKTsKLQotCQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAq LwotCQlpZiAocmVzdWx0ID09IDAgJiYKLQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVy bWluaXN0aWMpKQotCQkJcmVzdWx0ID0gc3RyY21wKGExcCwgYTJwKTsKLQotCQlpZiAoYTFwICE9 IGExYnVmKQotCQkJcGZyZWUoYTFwKTsKLQkJaWYgKGEycCAhPSBhMmJ1ZikKLQkJCXBmcmVlKGEy cCk7CisJCXJlc3VsdCA9IHBnX3N0cm5jb2xsKGFyZzEsIGxlbjEsIGFyZzIsIGxlbjIsIG15bG9j YWxlKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjM3Nyw2NSArMjIwOSw3IEBAIHZhcnN0 cmZhc3RjbXBfbG9jYWxlKGNoYXIgKmExcCwgaW50IGxlbjEsIGNoYXIgKmEycCwgaW50IGxlbjIs IFNvcnRTdXBwb3J0IHNzdXApCiAJCXJldHVybiBzc3MtPmxhc3RfcmV0dXJuZWQ7CiAJfQogCi0J aWYgKHNzcy0+bG9jYWxlKQotCXsKLQkJaWYgKHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xM UFJPVklERVJfSUNVKQotCQl7Ci0jaWZkZWYgVVNFX0lDVQotI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAotCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJewot CQkJCVVFcnJvckNvZGUJc3RhdHVzOwotCi0JCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQkJ CXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0J CQkJCQkJCQkJICBhMXAsIGxlbjEsCi0JCQkJCQkJCQkJICBhMnAsIGxlbjIsCi0JCQkJCQkJCQkJ ICAmc3RhdHVzKTsKLQkJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShz dGF0dXMpKSkpOwotCQkJfQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJaW50MzJfdAkJdWxl bjEsCi0JCQkJCQkJdWxlbjI7Ci0JCQkJVUNoYXIJICAgKnVjaGFyMSwKLQkJCQkJCSAgICp1Y2hh cjI7Ci0KLQkJCQl1bGVuMSA9IGljdV90b191Y2hhcigmdWNoYXIxLCBhMXAsIGxlbjEpOwotCQkJ CXVsZW4yID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjIsIGEycCwgbGVuMik7Ci0KLQkJCQlyZXN1bHQg PSB1Y29sX3N0cmNvbGwoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkgIHVj aGFyMSwgdWxlbjEsCi0JCQkJCQkJCQkgIHVjaGFyMiwgdWxlbjIpOwotCi0JCQkJcGZyZWUodWNo YXIxKTsKLQkJCQlwZnJlZSh1Y2hhcjIpOwotCQkJfQotI2Vsc2UJCQkJCQkJLyogbm90IFVTRV9J Q1UgKi8KLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnByb3ZpZGVyKTsKLSNlbmRpZgkJ CQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQl9Ci0JCWVsc2UKLQkJewotI2lmZGVmIEhBVkVfTE9D QUxFX1QKLQkJCXJlc3VsdCA9IHN0cmNvbGxfbChzc3MtPmJ1ZjEsIHNzcy0+YnVmMiwgc3NzLT5s b2NhbGUtPmluZm8ubHQpOwotI2Vsc2UKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnBy b3ZpZGVyKTsKLSNlbmRpZgotCQl9Ci0JfQotCWVsc2UKLQkJcmVzdWx0ID0gc3RyY29sbChzc3Mt PmJ1ZjEsIHNzcy0+YnVmMik7Ci0KLQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAqLwotCWlm IChyZXN1bHQgPT0gMCAmJgotCQkoIXNzcy0+bG9jYWxlIHx8IHNzcy0+bG9jYWxlLT5kZXRlcm1p bmlzdGljKSkKLQkJcmVzdWx0ID0gc3RyY21wKHNzcy0+YnVmMSwgc3NzLT5idWYyKTsKKwlyZXN1 bHQgPSBwZ19zdHJjb2xsKHNzcy0+YnVmMSwgc3NzLT5idWYyLCBzc3MtPmxvY2FsZSk7CiAKIAkv KiBDYWNoZSByZXN1bHQsIHBlcmhhcHMgc2F2aW5nIGFuIGV4cGVuc2l2ZSBzdHJjb2xsKCkgY2Fs bCBuZXh0IHRpbWUgKi8KIAlzc3MtPmNhY2hlX2Jsb2IgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxl LmgKaW5kZXggYTg3NTk0MjEyMy4uYmY3MGFlMDhjYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAg LTEwMCw2ICsxMDAsOSBAQCBleHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFy ICppY3Vsb2NzdHIsCiBleHRlcm4gcGdfbG9jYWxlX3QgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0 aW9uKE9pZCBjb2xsaWQpOwogCiBleHRlcm4gY2hhciAqZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVy c2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpOworZXh0ZXJu IGludCBwZ19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBnX2xv Y2FsZV90IGxvY2FsZSk7CitleHRlcm4gaW50IHBnX3N0cm5jb2xsKGNvbnN0IGNoYXIgKmFyZzEs IHNpemVfdCBsZW4xLAorCQkJCQkgICBjb25zdCBjaGFyICphcmcyLCBzaXplX3QgbGVuMiwgcGdf bG9jYWxlX3QgbG9jYWxlKTsKIAogI2lmZGVmIFVTRV9JQ1UKIGV4dGVybiBpbnQzMl90IGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpOwotLSAKMi4zNC4xCgo= --=-HN8GqdZSiO/qo3uzBaZ6 Content-Disposition: attachment; filename="v2-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch" Content-Type: text/x-patch; name="v2-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiYmVlNzA2Y2ZhOGEwNzRjMzE0MjliMTc4MjQyYzc3MDg0YWY5ZDZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDE6MzggLTA4MDAKU3ViamVjdDogW1BBVENIIHYyIDIvNl0gQWRk IHBnX3N0cnhmcm0oKSBhbmQgcGdfc3RyeGZybV9wcmVmaXgoKS4KCkNhbGxlcnMgd2l0aCBhIE5V TC10ZXJtaW5hdGVkIHN0cmluZyBzaG91bGQgY2FsbCB0aGUgZm9ybWVyOyBjYWxsZXJzCndpdGgg YSBzdHJpbmcgYW5kIGxlbmd0aCBzaG91bGQgY2FsbCB0aGUgbGF0dGVyLgotLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMgfCAgNDUgKystLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3BnX2xvY2FsZS5jICB8IDM4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYyAgICB8ICA0MSArKy0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvdmFybGVuYS5jICAgIHwgMTQyICsrKy0tLS0tLS0tCiBzcmMvaW5jbHVkZS91dGls cy9wZ19sb2NhbGUuaCAgICAgIHwgIDEwICsKIDUgZmlsZXMgY2hhbmdlZCwgNDcwIGluc2VydGlv bnMoKyksIDE1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoZnVuYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYwppbmRl eCBmODkwZjc5ZWUxLi5iODEzNmU0OTZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoZnVuYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMK QEAgLTI5MSwyMSArMjkxLDE5IEBAIGhhc2h0ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAjaWZkZWYg VVNFX0lDVQogCQlpZiAobXlsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCiAJ CXsKLQkJCWludDMyX3QJCXVsZW4gPSAtMTsKLQkJCVVDaGFyCSAgICp1Y2hhciA9IE5VTEw7Ci0J CQlTaXplCQlic2l6ZTsKLQkJCXVpbnQ4X3QgICAgKmJ1ZjsKKwkJCVNpemUJCWJzaXplLCByc2l6 ZTsKKwkJCWNoYXIJICAgKmJ1ZjsKKwkJCWNvbnN0IGNoYXIgKmtleWRhdGEgPSBWQVJEQVRBX0FO WShrZXkpOworCQkJc2l6ZV90CQlrZXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpOwogCi0J CQl1bGVuID0gaWN1X3RvX3VjaGFyKCZ1Y2hhciwgVkFSREFUQV9BTlkoa2V5KSwgVkFSU0laRV9B TllfRVhIRFIoa2V5KSk7Ci0KLQkJCWJzaXplID0gdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxlLT5p bmZvLmljdS51Y29sLAotCQkJCQkJCQkJdWNoYXIsIHVsZW4sIE5VTEwsIDApOworCQkJYnNpemUg PSBwZ19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKIAkJCWJ1 ZiA9IHBhbGxvYyhic2l6ZSk7Ci0JCQl1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1 LnVjb2wsCi0JCQkJCQkJdWNoYXIsIHVsZW4sIGJ1ZiwgYnNpemUpOwotCQkJcGZyZWUodWNoYXIp OwogCi0JCQlyZXN1bHQgPSBoYXNoX2FueShidWYsIGJzaXplKTsKKwkJCXJzaXplID0gcGdfc3Ry bnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNp emUgIT0gYnNpemUpCisJCQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5l eHBlY3RlZCByZXN1bHQiKTsKKworCQkJcmVzdWx0ID0gaGFzaF9hbnkoKHVpbnQ4X3QgKikgYnVm LCBic2l6ZSk7CiAKIAkJCXBmcmVlKGJ1Zik7CiAJCX0KQEAgLTM0OSwyMSArMzQ3LDIwIEBAIGhh c2h0ZXh0ZXh0ZW5kZWQoUEdfRlVOQ1RJT05fQVJHUykKICNpZmRlZiBVU0VfSUNVCiAJCWlmICht eWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJewotCQkJaW50MzJfdAkJ dWxlbiA9IC0xOwotCQkJVUNoYXIJICAgKnVjaGFyID0gTlVMTDsKLQkJCVNpemUJCWJzaXplOwot CQkJdWludDhfdCAgICAqYnVmOworCQkJU2l6ZQkJYnNpemUsIHJzaXplOworCQkJY2hhcgkgICAq YnVmOworCQkJY29uc3QgY2hhciAqa2V5ZGF0YSA9IFZBUkRBVEFfQU5ZKGtleSk7CisJCQlzaXpl X3QJCWtleWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKGtleSk7CiAKLQkJCXVsZW4gPSBpY3VfdG9f dWNoYXIoJnVjaGFyLCBWQVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsK LQotCQkJYnNpemUgPSB1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0J CQkJCQkJCQl1Y2hhciwgdWxlbiwgTlVMTCwgMCk7CisJCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5V TEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwogCQkJYnVmID0gcGFsbG9jKGJzaXpl KTsKLQkJCXVjb2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQl1 Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7Ci0JCQlwZnJlZSh1Y2hhcik7CiAKLQkJCXJlc3VsdCA9 IGhhc2hfYW55X2V4dGVuZGVkKGJ1ZiwgYnNpemUsIFBHX0dFVEFSR19JTlQ2NCgxKSk7CisJCQly c2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUp OworCQkJaWYgKHJzaXplICE9IGJzaXplKQorCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgp IHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CisKKwkJCXJlc3VsdCA9IGhhc2hfYW55X2V4 dGVuZGVkKCh1aW50OF90ICopIGJ1ZiwgYnNpemUsCisJCQkJCQkJCQkgICBQR19HRVRBUkdfSU5U NjQoMSkpOwogCiAJCQlwZnJlZShidWYpOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMK aW5kZXggNmNkNjI5ZWNiNC4uMTMzYmIwM2ExMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUu YwpAQCAtMjA5OSw2ICsyMDk5LDM4OCBAQCBwZ19zdHJuY29sbChjb25zdCBjaGFyICphcmcxLCBz aXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCiB9CiAKIAorc3RhdGlj IHNpemVfdAorcGdfc3RyeGZybV9saWJjKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6 ZV90IGRlc3RzaXplLAorCQkJCXBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoIWxvY2Fs ZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKKworI2lmZGVmIFRS VVNUX1NUWEZSTQorI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwlpZiAobG9jYWxlKQorCQlyZXR1cm4g c3RyeGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZS0+aW5mby5sdCk7CisJZWxzZQor I2VuZGlmCisJCXJldHVybiBzdHJ4ZnJtKGRlc3QsIHNyYywgZGVzdHNpemUpOworI2Vsc2UKKwkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92 aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgc2l6ZV90 CitwZ19zdHJueGZybV9saWJjKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNy Y2xlbiwgc2l6ZV90IGRlc3RzaXplLAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hh cgkgc2J1ZltURVhUQlVGTEVOXTsKKwljaGFyCSpidWYJID0gc2J1ZjsKKwlzaXplX3QJIGJ1ZnNp emUgPSBzcmNsZW4gKyAxOworCXNpemVfdAkgcmVzdWx0OworCisJQXNzZXJ0KCFsb2NhbGUgfHwg bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7CisKKwlpZiAoYnVmc2l6ZSA+ IFRFWFRCVUZMRU4pCisJCWJ1ZiA9IHBhbGxvYyhidWZzaXplKTsKKworCS8qIG51bC10ZXJtaW5h dGUgYXJndW1lbnRzICovCisJbWVtY3B5KGJ1Ziwgc3JjLCBzcmNsZW4pOworCWJ1ZltzcmNsZW5d ID0gJ1wwJzsKKworCXJlc3VsdCA9IHBnX3N0cnhmcm1fbGliYyhkZXN0LCBidWYsIGRlc3RzaXpl LCBsb2NhbGUpOworCisJaWYgKGJ1ZiAhPSBzYnVmKQorCQlwZnJlZShidWYpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworc3RhdGljIHNpemVfdAorcGdfc3RyeGZybV9wcmVmaXhfbGliYyhjaGFy ICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJICAgcGdfbG9j YWxlX3QgbG9jYWxlKQoreworCUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0g Q09MTFBST1ZJREVSX0xJQkMpOworCS8qIHVuc3VwcG9ydGVkOyBzaG91bGRuJ3QgaGFwcGVuICov CisJZWxvZyhFUlJPUiwgImNvbGxwcm92aWRlciAnJWMnIGRvZXMgbm90IHN1cHBvcnQgcGdfc3Ry eGZybV9wcmVmaXgoKSIsCisJCSBsb2NhbGUtPnByb3ZpZGVyKTsKK30KKworc3RhdGljIHNpemVf dAorcGdfc3Rybnhmcm1fcHJlZml4X2xpYmMoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBz aXplX3Qgc3JjbGVuLAorCQkJCQkJc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJQXNzZXJ0KCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf TElCQyk7CisJLyogdW5zdXBwb3J0ZWQ7IHNob3VsZG4ndCBoYXBwZW4gKi8KKwllbG9nKEVSUk9S LCAiY29sbHByb3ZpZGVyICclYycgZG9lcyBub3Qgc3VwcG9ydCBwZ19zdHJueGZybV9wcmVmaXgo KSIsCisJCSBsb2NhbGUtPnByb3ZpZGVyKTsKK30KKworI2lmZGVmIFVTRV9JQ1UKKworc3RhdGlj IHNpemVfdAorcGdfc3Rybnhmcm1faWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6 ZV90IHNyY2xlbiwgc2l6ZV90IGRlc3RzaXplLAorCQkJCXBnX2xvY2FsZV90IGxvY2FsZSkKK3sK KwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1Zgk9IHNidWY7CisJVUNoYXIJKnVj aGFyOworCWludDMyX3QJIHVsZW47CisJc2l6ZV90ICAgdWNoYXJfYnNpemU7CisJU2l6ZQkgcmVz dWx0X2JzaXplOworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lD VSk7CisKKwlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKKworCXVsZW4gPSB1Y2hhcl9sZW5ndGgoaWN1 X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOworCisJdWNoYXJfYnNpemUgPSAodWxlbiArIDEpICog c2l6ZW9mKFVDaGFyKTsKKworCWlmICh1Y2hhcl9ic2l6ZSA+IFRFWFRCVUZMRU4pCisJCWJ1ZiA9 IHBhbGxvYyh1Y2hhcl9ic2l6ZSk7CisKKwl1Y2hhciA9IChVQ2hhciAqKSBidWY7CisKKwl1bGVu ID0gdWNoYXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3Jj bGVuKTsKKworCXJlc3VsdF9ic2l6ZSA9IHVjb2xfZ2V0U29ydEtleShsb2NhbGUtPmluZm8uaWN1 LnVjb2wsCisJCQkJCQkJCSAgIHVjaGFyLCB1bGVuLAorCQkJCQkJCQkgICAodWludDhfdCAqKSBk ZXN0LCBkZXN0c2l6ZSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7CisKKwly ZXR1cm4gcmVzdWx0X2JzaXplOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJ4ZnJtX2ljdShj aGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCSAgIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKTsKKwlyZXR1cm4gcGdfc3Rybnhmcm1faWN1KGRlc3QsIHNyYywgLTEsIGRlc3RzaXpl LCBsb2NhbGUpOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9wcmVmaXhfaWN1X25v X3V0ZjgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAorCQkJCQkJ CSAgIHNpemVfdCBkZXN0c2l6ZSwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWNoYXIJCQkgc2J1 ZltURVhUQlVGTEVOXTsKKwljaGFyCQkJKmJ1ZiAgID0gc2J1ZjsKKwlVQ2hhckl0ZXJhdG9yCSBp dGVyOworCXVpbnQzMl90CQkgc3RhdGVbMl07CisJVUVycm9yQ29kZQkJIHN0YXR1czsKKwlpbnQz Ml90CQkJIHVsZW4gID0gLTE7CisJVUNoYXIJCQkqdWNoYXIgPSBOVUxMOworCXNpemVfdAkJCSB1 Y2hhcl9ic2l6ZTsKKwlTaXplCQkJIHJlc3VsdF9ic2l6ZTsKKworCUFzc2VydChsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOworCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5n KCkgIT0gUEdfVVRGOCk7CisKKwlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKKworCXVsZW4gPSB1Y2hh cl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOworCisJdWNoYXJfYnNpemUgPSAo dWxlbiArIDEpICogc2l6ZW9mKFVDaGFyKTsKKworCWlmICh1Y2hhcl9ic2l6ZSA+IFRFWFRCVUZM RU4pCisJCWJ1ZiA9IHBhbGxvYyh1Y2hhcl9ic2l6ZSk7CisKKwl1Y2hhciA9IChVQ2hhciAqKSBi dWY7CisKKwl1bGVuID0gdWNoYXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiAr IDEsIHNyYywgc3JjbGVuKTsKKworCXVpdGVyX3NldFN0cmluZygmaXRlciwgdWNoYXIsIHVsZW4p OworCXN0YXRlWzBdID0gc3RhdGVbMV0gPSAwOwkvKiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8K KwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJcmVzdWx0X2JzaXplID0gdWNvbF9uZXh0U29ydEtl eVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCQkJCQkJCQkJCSZpdGVyLAorCQkJCQkJCQkJ CXN0YXRlLAorCQkJCQkJCQkJCSh1aW50OF90ICopIGRlc3QsCisJCQkJCQkJCQkJZGVzdHNpemUs CisJCQkJCQkJCQkJJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJtc2coInNvcnQga2V5IGdlbmVyYXRpb24gZmFpbGVkOiAlcyIsCisJ CQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCisJcmV0dXJuIHJlc3VsdF9ic2l6ZTsKK30K Kworc3RhdGljIHNpemVfdAorcGdfc3Rybnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBjb25z dCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCisJCQkJCSAgIHNpemVfdCBkZXN0c2l6ZSwgcGdf bG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlBc3NlcnQobG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworCWlmIChHZXREYXRhYmFzZUVuY29kaW5n KCkgPT0gUEdfVVRGOCkKKwl7CisJCVVDaGFySXRlcmF0b3IgaXRlcjsKKwkJdWludDMyX3QJc3Rh dGVbMl07CisJCVVFcnJvckNvZGUJc3RhdHVzOworCisJCXVpdGVyX3NldFVURjgoJml0ZXIsIHNy Yywgc3JjbGVuKTsKKwkJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdvbid0IG5lZWQgdGhh dCBhZ2FpbiAqLworCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJCXJlc3VsdCA9IHVjb2xfbmV4 dFNvcnRLZXlQYXJ0KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJCSAgJml0ZXIsCisJ CQkJCQkJCQkgIHN0YXRlLAorCQkJCQkJCQkJICAodWludDhfdCAqKSBkZXN0LAorCQkJCQkJCQkJ ICBkZXN0c2l6ZSwKKwkJCQkJCQkJCSAgJnN0YXR1cyk7CisJCWlmIChVX0ZBSUxVUkUoc3RhdHVz KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coInNvcnQga2V5IGdlbmVyYXRpb24g ZmFpbGVkOiAlcyIsCisJCQkJCQkJdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwl9CisJZWxzZQor CQlyZXN1bHQgPSBwZ19zdHJueGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoZGVzdCwgc3JjLCBzcmNs ZW4sIGRlc3RzaXplLAorCQkJCQkJCQkJCQkJbG9jYWxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKK3N0YXRpYyBzaXplX3QKK3BnX3N0cnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBjb25z dCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJcmV0 dXJuIHBnX3N0cm54ZnJtX3ByZWZpeF9pY3UoZGVzdCwgc3JjLCAtMSwgZGVzdHNpemUsIGxvY2Fs ZSk7Cit9CisKKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGNvbGxhdGlvbiBw cm92aWRlciBzdXBwb3J0cyBwZ19zdHJ4ZnJtKCkgYW5kCisgKiBwZ19zdHJueGZybSgpOyBvdGhl cndpc2UgZmFsc2UuCisgKgorICogVW5mb3J0dW5hdGVseSwgaXQgc2VlbXMgdGhhdCBzdHJ4ZnJt KCkgZm9yIG5vbi1DIGNvbGxhdGlvbnMgaXMgYnJva2VuIG9uCisgKiBtYW55IGNvbW1vbiBwbGF0 Zm9ybXM7IHRlc3Rpbmcgb2YgbXVsdGlwbGUgdmVyc2lvbnMgb2YgZ2xpYmMgcmV2ZWFscyB0aGF0 LAorICogZm9yIG1hbnkgbG9jYWxlcywgc3RyY29sbCgpIGFuZCBzdHJ4ZnJtKCkgZG8gbm90IHJl dHVybiBjb25zaXN0ZW50CisgKiByZXN1bHRzLiBXaGlsZSBubyBvdGhlciBsaWJjIG90aGVyIHRo YW4gQ3lnd2luIGhhcyBzbyBmYXIgYmVlbiBzaG93biB0bworICogaGF2ZSBhIHByb2JsZW0sIHdl IHRha2UgdGhlIGNvbnNlcnZhdGl2ZSBjb3Vyc2Ugb2YgYWN0aW9uIGZvciByaWdodCBub3cgYW5k CisgKiBkaXNhYmxlIHRoaXMgY2F0ZWdvcmljYWxseS4gIChVc2VycyB3aG8gYXJlIGNlcnRhaW4g dGhpcyBpc24ndCBhIHByb2JsZW0gb24KKyAqIHRoZWlyIHN5c3RlbSBjYW4gZGVmaW5lIFRSVVNU X1NUUlhGUk0uKQorICovCitib29sCitwZ19zdHJ4ZnJtX2VuYWJsZWQocGdfbG9jYWxlX3QgbG9j YWxlKQoreworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0xJQkMpCisJeworI2lmZGVmIFRSVVNUX1NUUlhGUk0KKwkJcmV0dXJuIHRydWU7CisjZWxzZQor CQlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKwl9CisJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCS8qIHNob3VsZG4n dCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMi LCBsb2NhbGUtPnByb3ZpZGVyKTsKK30KKworLyoKKyAqIHBnX3N0cnhmcm0KKyAqCisgKiBUcmFu c2Zvcm1zICdzcmMnIHRvIGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nIHN0b3JlZCBpbiAnZGVzdCcg c3VjaCB0aGF0CisgKiBvcmRpbmFyeSBzdHJjbXAoKSBvbiB0cmFuc2Zvcm1lZCBzdHJpbmdzIGlz IGVxdWl2YWxlbnQgdG8gcGdfc3RyY29sbCgpIG9uCisgKiB1bnRyYW5zZm9ybWVkIHN0cmluZ3Mu CisgKgorICogVGhlIHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgor ICogSWYgZGVzdHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgcmV0dXJu cyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBjb3BpZWQgdG8gJ2Rlc3QnOyBvdGhlcndpc2UsIHJl dHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdCBh bmQgbGVhdmVzIHRoZSBjb250ZW50cyBvZiAnZGVzdCcgdW5kZWZpbmVkLiBJZiBkZXN0c2l6ZSBp cyB6ZXJvLAorICogJ2Rlc3QnIG1heSBiZSBOVUxMLgorICovCitzaXplX3QKK3BnX3N0cnhmcm0o Y2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsIHBnX2xvY2FsZV90 IGxvY2FsZSkKK3sKKwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9saWJj KGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYg KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3Ry eGZybV9pY3UoZGVzdCwgc3JjLCBkZXN0c2l6ZSwgbG9jYWxlKTsKKyNlbmRpZgorCWVsc2UKKwkJ Lyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHBy b3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIHBnX3N0cm54ZnJtCisgKgorICogVHJhbnNmb3JtcyAnc3JjJyB0byBhIG51bC10ZXJt aW5hdGVkIHN0cmluZyBzdG9yZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdAorICogb3JkaW5hcnkgc3Ry Y21wKCkgb24gdHJhbnNmb3JtZWQgc3RyaW5ncyBpcyBlcXVpdmFsZW50IHRvIHBnX3N0cmNvbGwo KSBvbgorICogdW50cmFuc2Zvcm1lZCBzdHJpbmdzLgorICoKKyAqIElmIGRlc3RzaXplIGlzIGxh cmdlIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRl cworICogY29waWVkIHRvICdkZXN0Jzsgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgbmVlZGVkIHRvIGhvbGQgdGhlCisgKiByZXN1bHQgYW5kIGxlYXZlcyB0aGUgY29udGVu dHMgb2YgJ2Rlc3QnIHVuZGVmaW5lZC4gSWYgZGVzdHNpemUgaXMgemVybywKKyAqICdkZXN0JyBt YXkgYmUgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5h dGUgdGhlIGFyZ3VtZW50IGZvciBsaWJjIGZ1bmN0aW9uczsKKyAqIHNvIGlmIHRoZSBjYWxsZXIg YWxyZWFkeSBoYXMgYSBudWwtdGVybWluYXRlZCBzdHJpbmcsIGl0IHNob3VsZCBjYWxsCisgKiBw Z19zdHJ4ZnJtKCkgaW5zdGVhZC4KKyAqLworc2l6ZV90CitwZ19zdHJueGZybShjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKKwkJCXBn X2xvY2FsZV90IGxvY2FsZSkKK3sKKwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwg bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3Ry bnhmcm1fbGliYyhkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYg VVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK KwkJcmVzdWx0ID0gcGdfc3Rybnhmcm1faWN1KGRlc3QsIHNyYywgc3JjbGVuLCBkZXN0c2l6ZSwg bG9jYWxlKTsKKyNlbmRpZgorCWVsc2UKKwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9n KEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIp OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBjb2xs YXRpb24gcHJvdmlkZXIgc3VwcG9ydHMgcGdfc3RyeGZybV9wcmVmaXgoKSBhbmQKKyAqIHBnX3N0 cm54ZnJtX3ByZWZpeCgpOyBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wKK3BnX3N0cnhmcm1f cHJlZml4X2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlmICghbG9jYWxlIHx8IGxv Y2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJCXJldHVybiBmYWxzZTsKKwll bHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJldHVybiB0 cnVlOworCWVsc2UKKwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworfQorCisvKgor ICogcGdfc3RyeGZybV9wcmVmaXgKKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBz ZXF1ZW5jZSBzdG9yZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkg b24gdGhlIGJ5dGUgc2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAq IHVudHJhbnNmb3JtZWQgc3RyaW5ncy4gVGhlIHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQu CisgKgorICogVGhlIHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgor ICogSWYgZGVzdHNpemUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVz dWx0LCBzdG9yZXMganVzdCB0aGUKKyAqIHByZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51 bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3BpZWQgdG8gJ2Rlc3QnLgorICovCitzaXplX3QKK3Bn X3N0cnhmcm1fcHJlZml4KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3Rz aXplLAorCQkJCSAgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlp ZiAoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCQly ZXN1bHQgPSBwZ19zdHJ4ZnJtX3ByZWZpeF9saWJjKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2Fs ZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9wcmVmaXhfaWN1KGRlc3QsIHNyYywg ZGVzdHNpemUsIGxvY2FsZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4g Ki8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUt PnByb3ZpZGVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJueGZybV9w cmVmaXgKKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBzZXF1ZW5jZSBzdG9yZWQg aW4gJ2Rlc3QnIHN1Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkgb24gdGhlIGJ5dGUgc2Vx dWVuY2UgaXMgZXF1aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAqIHVudHJhbnNmb3JtZWQg c3RyaW5ncy4gVGhlIHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogVGhlIHBy b3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNpemUg aXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0LCBzdG9yZXMganVz dCB0aGUKKyAqIHByZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBh Y3R1YWxseSBjb3BpZWQgdG8gJ2Rlc3QnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IG5lZWQg dG8gbnVsLXRlcm1pbmF0ZSB0aGUgYXJndW1lbnQgZm9yIGxpYmMgZnVuY3Rpb25zOworICogc28g aWYgdGhlIGNhbGxlciBhbHJlYWR5IGhhcyBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgaXQgc2hv dWxkIGNhbGwKKyAqIHBnX3N0cnhmcm1fcHJlZml4KCkgaW5zdGVhZC4KKyAqLworc2l6ZV90Citw Z19zdHJueGZybV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFy ICpzcmMsCisJCQkJICAgc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNp emVfdCByZXN1bHQ7CisKKwlpZiAoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQ Uk9WSURFUl9MSUJDKQorCQlyZXN1bHQgPSBwZ19zdHJueGZybV9wcmVmaXhfbGliYyhkZXN0LCBz cmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYg KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3Ry bnhmcm1fcHJlZml4X2ljdShkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7Cisj ZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKworCXJldHVy biByZXN1bHQ7Cit9CisKICNpZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29u dmVydGVyKHZvaWQpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwppbmRleCBhNjNjNDk4MTgxLi5kMGJj NTI4ZTlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMKQEAgLTEwMTksMjEgKzEwMTksMTcgQEAg aGFzaGJwY2hhcihQR19GVU5DVElPTl9BUkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9j YWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVu ID0gLTE7Ci0JCQlVQ2hhcgkgICAqdWNoYXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1 aW50OF90ICAgICpidWY7CisJCQlTaXplCQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7 CiAKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0J CQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJ CQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAwKTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwg MCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwot CQkJdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFy LCB1bGVuLCBidWYsIGJzaXplKTsKLQkJCXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFz aF9hbnkoYnVmLCBic2l6ZSk7CisJCQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtl eWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOworCQkJaWYgKHJzaXplICE9IGJzaXplKQorCQkJCWVs b2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CisK KwkJCXJlc3VsdCA9IGhhc2hfYW55KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOwogCiAJCQlwZnJl ZShidWYpOwogCQl9CkBAIC0xMDgxLDIxICsxMDc3LDE4IEBAIGhhc2hicGNoYXJleHRlbmRlZChQ R19GVU5DVElPTl9BUkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlV Q2hhcgkgICAqdWNoYXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpi dWY7CisJCQlTaXplCQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CiAKLQkJCXVsZW4g PSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0JCQlic2l6ZSA9IHVj b2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1 bGVuLCBOVUxMLCAwKTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwg a2V5bGVuLCBteWxvY2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRT b3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYs IGJzaXplKTsKLQkJCXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5k ZWQoYnVmLCBic2l6ZSwgUEdfR0VUQVJHX0lOVDY0KDEpKTsKKwkJCXJzaXplID0gcGdfc3Rybnhm cm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNpemUg IT0gYnNpemUpCisJCQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBl Y3RlZCByZXN1bHQiKTsKKworCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3Qg KikgYnVmLCBic2l6ZSwKKwkJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAKIAkJCXBm cmVlKGJ1Zik7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5h LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4IGM5MDRiYzA4MjUuLjJk ZmJhNGI0ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtMTg4NywyMCArMTg4Nyw2IEBA IHZhcnN0cl9zb3J0c3VwcG9ydChTb3J0U3VwcG9ydCBzc3VwLCBPaWQgdHlwaWQsIE9pZCBjb2xs aWQpCiAJCSAqLwogCQlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlk KTsKIAotCQkvKgotCQkgKiBUaGVyZSBpcyBhIGZ1cnRoZXIgZXhjZXB0aW9uIG9uIFdpbmRvd3Mu ICBXaGVuIHRoZSBkYXRhYmFzZQotCQkgKiBlbmNvZGluZyBpcyBVVEYtOCBhbmQgd2UgYXJlIG5v dCB1c2luZyB0aGUgQyBjb2xsYXRpb24sIGNvbXBsZXgKLQkJICogaGFja3MgYXJlIHJlcXVpcmVk LiAgV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBjb21wYXJhdG9yIHRoYXQKLQkJICogaGFuZGxl cyB0aGF0IGNhc2UsIHNvIHdlIGZhbGwgYmFjayBvbiB0aGUgc2xvdyBtZXRob2Qgb2YgaGF2aW5n IHRoZQotCQkgKiBzb3J0IGNvZGUgaW52b2tlIGJ0dGV4dGNtcCgpIChpbiB0aGUgY2FzZSBvZiB0 ZXh0KSB2aWEgdGhlIGZtZ3IKLQkJICogdHJhbXBvbGluZS4gIElDVSBsb2NhbGVzIHdvcmsganVz dCB0aGUgc2FtZSBvbiBXaW5kb3dzLCBob3dldmVyLgotCQkgKi8KLSNpZmRlZiBXSU4zMgotCQlp ZiAoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjggJiYKLQkJCSEobG9jYWxlICYmIGxv Y2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkpCi0JCQlyZXR1cm47Ci0jZW5kaWYK LQogCQkvKgogCQkgKiBXZSB1c2UgdmFybGVuYWZhc3RjbXBfbG9jYWxlIGV4Y2VwdCBmb3IgdHlw ZSBOQU1FLgogCQkgKi8KQEAgLTE5MTYsMTMgKzE5MDIsNyBAQCB2YXJzdHJfc29ydHN1cHBvcnQo U29ydFN1cHBvcnQgc3N1cCwgT2lkIHR5cGlkLCBPaWQgY29sbGlkKQogCiAJLyoKIAkgKiBVbmZv cnR1bmF0ZWx5LCBpdCBzZWVtcyB0aGF0IGFiYnJldmlhdGlvbiBmb3Igbm9uLUMgY29sbGF0aW9u cyBpcwotCSAqIGJyb2tlbiBvbiBtYW55IGNvbW1vbiBwbGF0Zm9ybXM7IHRlc3Rpbmcgb2YgbXVs dGlwbGUgdmVyc2lvbnMgb2YgZ2xpYmMKLQkgKiByZXZlYWxzIHRoYXQsIGZvciBtYW55IGxvY2Fs ZXMsIHN0cmNvbGwoKSBhbmQgc3RyeGZybSgpIGRvIG5vdCByZXR1cm4KLQkgKiBjb25zaXN0ZW50 IHJlc3VsdHMsIHdoaWNoIGlzIGZhdGFsIHRvIHRoaXMgb3B0aW1pemF0aW9uLiAgV2hpbGUgbm8K LQkgKiBvdGhlciBsaWJjIG90aGVyIHRoYW4gQ3lnd2luIGhhcyBzbyBmYXIgYmVlbiBzaG93biB0 byBoYXZlIGEgcHJvYmxlbSwKLQkgKiB3ZSB0YWtlIHRoZSBjb25zZXJ2YXRpdmUgY291cnNlIG9m IGFjdGlvbiBmb3IgcmlnaHQgbm93IGFuZCBkaXNhYmxlCi0JICogdGhpcyBjYXRlZ29yaWNhbGx5 LiAgKFVzZXJzIHdobyBhcmUgY2VydGFpbiB0aGlzIGlzbid0IGEgcHJvYmxlbSBvbgotCSAqIHRo ZWlyIHN5c3RlbSBjYW4gZGVmaW5lIFRSVVNUX1NUUlhGUk0uKQorCSAqIGJyb2tlbiBvbiBtYW55 IGNvbW1vbiBwbGF0Zm9ybXM7IHNlZSBwZ19zdHJ4ZnJtX2VuYWJsZWQoKS4KIAkgKgogCSAqIEV2 ZW4gYXBhcnQgZnJvbSB0aGUgcmlzayBvZiBicm9rZW4gbG9jYWxlcywgaXQncyBwb3NzaWJsZSB0 aGF0IHRoZXJlCiAJICogYXJlIHBsYXRmb3JtcyB3aGVyZSB0aGUgdXNlIG9mIGFiYnJldmlhdGVk IGtleXMgc2hvdWxkIGJlIGRpc2FibGVkIGF0CkBAIC0xOTM1LDEwICsxOTE1LDggQEAgdmFyc3Ry X3NvcnRzdXBwb3J0KFNvcnRTdXBwb3J0IHNzdXAsIE9pZCB0eXBpZCwgT2lkIGNvbGxpZCkKIAkg KiBjYXRlZ29yaWNhbGx5LCB3ZSBtYXkgc3RpbGwgd2FudCBvciBuZWVkIHRvIGRpc2FibGUgaXQg Zm9yIHBhcnRpY3VsYXIKIAkgKiBwbGF0Zm9ybXMuCiAJICovCi0jaWZuZGVmIFRSVVNUX1NUUlhG Uk0KLQlpZiAoIWNvbGxhdGVfYyAmJiAhKGxvY2FsZSAmJiBsb2NhbGUtPnByb3ZpZGVyID09IENP TExQUk9WSURFUl9JQ1UpKQorCWlmICghY29sbGF0ZV9jICYmICFwZ19zdHJ4ZnJtX2VuYWJsZWQo bG9jYWxlKSkKIAkJYWJicmV2aWF0ZSA9IGZhbHNlOwotI2VuZGlmCiAKIAkvKgogCSAqIElmIHdl J3JlIHVzaW5nIGFiYnJldmlhdGVkIGtleXMsIG9yIGlmIHdlJ3JlIHVzaW5nIGEgbG9jYWxlLWF3 YXJlCkBAIC0yMjI3LDYgKzIyMDUsNyBAQCB2YXJzdHJmYXN0Y21wX2xvY2FsZShjaGFyICphMXAs IGludCBsZW4xLCBjaGFyICphMnAsIGludCBsZW4yLCBTb3J0U3VwcG9ydCBzc3VwKQogc3RhdGlj IERhdHVtCiB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0 IHNzdXApCiB7CisJY29uc3Qgc2l6ZV90IG1heF9wcmVmaXhfYnl0ZXMgPSBzaXplb2YoRGF0dW0p OwogCVZhclN0cmluZ1NvcnRTdXBwb3J0ICpzc3MgPSAoVmFyU3RyaW5nU29ydFN1cHBvcnQgKikg c3N1cC0+c3N1cF9leHRyYTsKIAlWYXJTdHJpbmcgICphdXRob3JpdGF0aXZlID0gRGF0dW1HZXRW YXJTdHJpbmdQUChvcmlnaW5hbCk7CiAJY2hhcgkgICAqYXV0aG9yaXRhdGl2ZV9kYXRhID0gVkFS REFUQV9BTlkoYXV0aG9yaXRhdGl2ZSk7CkBAIC0yMjM5LDcgKzIyMTgsNyBAQCB2YXJzdHJfYWJi cmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAKIAlwcmVzID0g KGNoYXIgKikgJnJlczsKIAkvKiBtZW1zZXQoKSwgc28gYW55IG5vbi1vdmVyd3JpdHRlbiBieXRl cyBhcmUgTlVMICovCi0JbWVtc2V0KHByZXMsIDAsIHNpemVvZihEYXR1bSkpOworCW1lbXNldChw cmVzLCAwLCBtYXhfcHJlZml4X2J5dGVzKTsKIAlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihhdXRo b3JpdGF0aXZlKTsKIAogCS8qIEdldCBudW1iZXIgb2YgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5n IHNwYWNlcyAqLwpAQCAtMjI3NCwxNCArMjI1MywxMCBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQo RGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJICogdGhpbmc6IGV4cGxpY2l0bHkg Y29uc2lkZXIgc3RyaW5nIGxlbmd0aC4KIAkgKi8KIAlpZiAoc3NzLT5jb2xsYXRlX2MpCi0JCW1l bWNweShwcmVzLCBhdXRob3JpdGF0aXZlX2RhdGEsIE1pbihsZW4sIHNpemVvZihEYXR1bSkpKTsK KwkJbWVtY3B5KHByZXMsIGF1dGhvcml0YXRpdmVfZGF0YSwgTWluKGxlbiwgbWF4X3ByZWZpeF9i eXRlcykpOwogCWVsc2UKIAl7CiAJCVNpemUJCWJzaXplOwotI2lmZGVmIFVTRV9JQ1UKLQkJaW50 MzJfdAkJdWxlbiA9IC0xOwotCQlVQ2hhcgkgICAqdWNoYXIgPSBOVUxMOwotI2VuZGlmCiAKIAkJ LyoKIAkJICogV2UncmUgbm90IHVzaW5nIHRoZSBDIGNvbGxhdGlvbiwgc28gZmFsbCBiYWNrIG9u IHN0cnhmcm0gb3IgSUNVCkBAIC0yMjk5LDcgKzIyNzQsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZl cnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCWlmIChzc3MtPmxhc3RfbGVu MSA9PSBsZW4gJiYgc3NzLT5jYWNoZV9ibG9iICYmCiAJCQltZW1jbXAoc3NzLT5idWYxLCBhdXRo b3JpdGF0aXZlX2RhdGEsIGxlbikgPT0gMCkKIAkJewotCQkJbWVtY3B5KHByZXMsIHNzcy0+YnVm MiwgTWluKHNpemVvZihEYXR1bSksIHNzcy0+bGFzdF9sZW4yKSk7CisJCQltZW1jcHkocHJlcywg c3NzLT5idWYyLCBNaW4obWF4X3ByZWZpeF9ieXRlcywgc3NzLT5sYXN0X2xlbjIpKTsKIAkJCS8q IE5vIGNoYW5nZSBhZmZlY3RpbmcgY2FyZGluYWxpdHksIHNvIG5vIGhhc2hpbmcgcmVxdWlyZWQg Ki8KIAkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtMjMwNyw4MSArMjI4Miw0OSBAQCB2YXJzdHJfYWJi cmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCW1lbWNweShz c3MtPmJ1ZjEsIGF1dGhvcml0YXRpdmVfZGF0YSwgbGVuKTsKIAogCQkvKgotCQkgKiBKdXN0IGxp a2Ugc3RyY29sbCgpLCBzdHJ4ZnJtKCkgZXhwZWN0cyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4g Tm90Ci0JCSAqIG5lY2Vzc2FyeSBmb3IgSUNVLCBidXQgZG9lc24ndCBodXJ0LgorCQkgKiBwZ19z dHJ4ZnJtKCkgYW5kIHBnX3N0cnhmcm1fcHJlZml4IGV4cGVjdCBOVUwtdGVybWluYXRlZAorCQkg KiBzdHJpbmdzLgogCQkgKi8KIAkJc3NzLT5idWYxW2xlbl0gPSAnXDAnOwogCQlzc3MtPmxhc3Rf bGVuMSA9IGxlbjsKIAotI2lmZGVmIFVTRV9JQ1UKLQkJLyogV2hlbiB1c2luZyBJQ1UgYW5kIG5v dCBVVEY4LCBjb252ZXJ0IHN0cmluZyB0byBVQ2hhci4gKi8KLQkJaWYgKHNzcy0+bG9jYWxlICYm IHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVICYmCi0JCQlHZXREYXRh YmFzZUVuY29kaW5nKCkgIT0gUEdfVVRGOCkKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFy LCBzc3MtPmJ1ZjEsIGxlbik7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBMb29wOiBDYWxsIHN0cnhm cm0oKSBvciB1Y29sX2dldFNvcnRLZXkoKSwgcG9zc2libHkgZW5sYXJnZSBidWZmZXIsCi0JCSAq IGFuZCB0cnkgYWdhaW4uICBCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRoZSByZXN1bHQg YnVmZmVyCi0JCSAqIGNvbnRlbnQgdW5kZWZpbmVkIGlmIHRoZSByZXN1bHQgZGlkIG5vdCBmaXQs IHNvIHdlIG5lZWQgdG8gcmV0cnkKLQkJICogdW50aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRo b3VnaCB3ZSBvbmx5IG5lZWQgdGhlIGZpcnN0IGZldyBieXRlcwotCQkgKiBpbiB0aGUgZW5kLiAg V2hlbiB1c2luZyB1Y29sX25leHRTb3J0S2V5UGFydCgpLCBob3dldmVyLCB3ZSBvbmx5Ci0JCSAq IGFzayBmb3IgYXMgbWFueSBieXRlcyBhcyB3ZSBhY3R1YWxseSBuZWVkLgotCQkgKi8KLQkJZm9y ICg7OykKKwkJaWYgKHBnX3N0cnhmcm1fcHJlZml4X2VuYWJsZWQoc3NzLT5sb2NhbGUpKQogCQl7 Ci0jaWZkZWYgVVNFX0lDVQotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQkJaWYgKHNzcy0+YnVmbGVuMiA8IG1heF9wcmVm aXhfYnl0ZXMpCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBXaGVuIHVzaW5nIFVURjgsIHVzZSB0aGUg aXRlcmF0aW9uIGludGVyZmFjZSBzbyB3ZSBvbmx5Ci0JCQkJICogbmVlZCB0byBwcm9kdWNlIGFz IG1hbnkgYnl0ZXMgYXMgd2UgYWN0dWFsbHkgbmVlZC4KLQkJCQkgKi8KLQkJCQlpZiAoR2V0RGF0 YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpCi0JCQkJewotCQkJCQlVQ2hhckl0ZXJhdG9yIGl0 ZXI7Ci0JCQkJCXVpbnQzMl90CXN0YXRlWzJdOwotCQkJCQlVRXJyb3JDb2RlCXN0YXR1czsKLQot CQkJCQl1aXRlcl9zZXRVVEY4KCZpdGVyLCBzc3MtPmJ1ZjEsIGxlbik7Ci0JCQkJCXN0YXRlWzBd ID0gc3RhdGVbMV0gPSAwOwkvKiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KLQkJCQkJc3RhdHVz ID0gVV9aRVJPX0VSUk9SOwotCQkJCQlic2l6ZSA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KHNzcy0+ bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCQkJICZpdGVyLAotCQkJCQkJCQkJCQkJ IHN0YXRlLAotCQkJCQkJCQkJCQkJICh1aW50OF90ICopIHNzcy0+YnVmMiwKLQkJCQkJCQkJCQkJ CSBNaW4oc2l6ZW9mKERhdHVtKSwgc3NzLT5idWZsZW4yKSwKLQkJCQkJCQkJCQkJCSAmc3RhdHVz KTsKLQkJCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkJCQkJKGVycm1zZygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJCQkJ CQl1X2Vycm9yTmFtZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCWJzaXplID0g dWNvbF9nZXRTb3J0S2V5KHNzcy0+bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCQl1 Y2hhciwgdWxlbiwKLQkJCQkJCQkJCQkJKHVpbnQ4X3QgKikgc3NzLT5idWYyLCBzc3MtPmJ1Zmxl bjIpOworCQkJCXNzcy0+YnVmbGVuMiA9IE1heChtYXhfcHJlZml4X2J5dGVzLAorCQkJCQkJCQkg ICBNaW4oc3NzLT5idWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0g cmVwYWxsb2Moc3NzLT5idWYyLCBzc3MtPmJ1ZmxlbjIpOwogCQkJfQotCQkJZWxzZQotI2VuZGlm Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKLQkJCQlic2l6ZSA9IHN0cnhmcm1fbChz c3MtPmJ1ZjIsIHNzcy0+YnVmMSwKLQkJCQkJCQkJICBzc3MtPmJ1ZmxlbjIsIHNzcy0+bG9jYWxl LT5pbmZvLmx0KTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJCWJzaXplID0gc3RyeGZybShzc3MtPmJ1 ZjIsIHNzcy0+YnVmMSwgc3NzLT5idWZsZW4yKTsKLQotCQkJc3NzLT5sYXN0X2xlbjIgPSBic2l6 ZTsKLQkJCWlmIChic2l6ZSA8IHNzcy0+YnVmbGVuMikKLQkJCQlicmVhazsKIAorCQkJYnNpemUg PSBwZ19zdHJ4ZnJtX3ByZWZpeChzc3MtPmJ1ZjIsIHNzcy0+YnVmMSwKKwkJCQkJCQkJCSAgbWF4 X3ByZWZpeF9ieXRlcywgc3NzLT5sb2NhbGUpOworCQl9CisJCWVsc2UKKwkJewogCQkJLyoKLQkJ CSAqIEdyb3cgYnVmZmVyIGFuZCByZXRyeS4KKwkJCSAqIExvb3A6IENhbGwgcGdfc3RyeGZybSgp LCBwb3NzaWJseSBlbmxhcmdlIGJ1ZmZlciwgYW5kIHRyeQorCQkJICogYWdhaW4uICBUaGUgcGdf c3RyeGZybSgpIGZ1bmN0aW9uIGxlYXZlcyB0aGUgcmVzdWx0IGJ1ZmZlcgorCQkJICogY29udGVu dCB1bmRlZmluZWQgaWYgdGhlIHJlc3VsdCBkaWQgbm90IGZpdCwgc28gd2UgbmVlZCB0bworCQkJ ICogcmV0cnkgdW50aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRob3VnaCB3ZSBvbmx5IG5lZWQg dGhlIGZpcnN0CisJCQkgKiBmZXcgYnl0ZXMgaW4gdGhlIGVuZC4KIAkJCSAqLwotCQkJc3NzLT5i dWZsZW4yID0gTWF4KGJzaXplICsgMSwKLQkJCQkJCQkgICBNaW4oc3NzLT5idWZsZW4yICogMiwg TWF4QWxsb2NTaXplKSk7Ci0JCQlzc3MtPmJ1ZjIgPSByZXBhbGxvYyhzc3MtPmJ1ZjIsIHNzcy0+ YnVmbGVuMik7CisJCQlmb3IgKDs7KQorCQkJeworCQkJCWJzaXplID0gcGdfc3RyeGZybShzc3Mt PmJ1ZjIsIHNzcy0+YnVmMSwgc3NzLT5idWZsZW4yLAorCQkJCQkJCQkgICBzc3MtPmxvY2FsZSk7 CisKKwkJCQlzc3MtPmxhc3RfbGVuMiA9IGJzaXplOworCQkJCWlmIChic2l6ZSA8IHNzcy0+YnVm bGVuMikKKwkJCQkJYnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIEdyb3cgYnVmZmVyIGFuZCByZXRy eS4KKwkJCQkgKi8KKwkJCQlzc3MtPmJ1ZmxlbjIgPSBNYXgoYnNpemUgKyAxLAorCQkJCQkJCQkg ICBNaW4oc3NzLT5idWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0g cmVwYWxsb2Moc3NzLT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJfQogCQl9CiAKIAkJLyoKQEAg LTIzOTMsMTIgKzIzMzYsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWws IFNvcnRTdXBwb3J0IHNzdXApCiAJCSAqIChBY3R1YWxseSwgZXZlbiBpZiB0aGVyZSB3ZXJlIE5V TCBieXRlcyBpbiB0aGUgYmxvYiBpdCB3b3VsZCBiZQogCQkgKiBva2F5LiAgU2VlIHJlbWFya3Mg b24gYnl0ZWEgY2FzZSBhYm92ZS4pCiAJCSAqLwotCQltZW1jcHkocHJlcywgc3NzLT5idWYyLCBN aW4oc2l6ZW9mKERhdHVtKSwgYnNpemUpKTsKLQotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKHVjaGFy KQotCQkJcGZyZWUodWNoYXIpOwotI2VuZGlmCisJCW1lbWNweShwcmVzLCBzc3MtPmJ1ZjIsIE1p bihtYXhfcHJlZml4X2J5dGVzLCBic2l6ZSkpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o CmluZGV4IGJmNzBhZTA4Y2EuLmNlYWIwZDQzMDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBAIC0x MDMsNiArMTAzLDE2IEBAIGV4dGVybiBjaGFyICpnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9u KGNoYXIgY29sbHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsY29sCiBleHRlcm4gaW50IHBnX3N0 cmNvbGwoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9j YWxlKTsKIGV4dGVybiBpbnQgcGdfc3RybmNvbGwoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxl bjEsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4yLCBwZ19sb2NhbGVfdCBs b2NhbGUpOworZXh0ZXJuIGJvb2wgcGdfc3RyeGZybV9lbmFibGVkKHBnX2xvY2FsZV90IGxvY2Fs ZSk7CitleHRlcm4gc2l6ZV90IHBnX3N0cnhmcm0oY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3Jj LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBz aXplX3QgcGdfc3Rybnhmcm0oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFy ICpzcmMsCisJCQkJCQkgIHNpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRl cm4gYm9vbCBwZ19zdHJ4ZnJtX3ByZWZpeF9lbmFibGVkKHBnX2xvY2FsZV90IGxvY2FsZSk7Citl eHRlcm4gc2l6ZV90IHBnX3N0cnhmcm1fcHJlZml4KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNy Yywgc2l6ZV90IGRlc3RzaXplLAorCQkJCQkJCQlwZ19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJu IHNpemVfdCBwZ19zdHJueGZybV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBj b25zdCBjaGFyICpzcmMsCisJCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2Nh bGUpOwogCiAjaWZkZWYgVVNFX0lDVQogZXh0ZXJuIGludDMyX3QgaWN1X3RvX3VjaGFyKFVDaGFy ICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Ci0tIAoyLjM0 LjEKCg== --=-HN8GqdZSiO/qo3uzBaZ6 Content-Disposition: attachment; filename="v2-0003-Refactor-pg_locale_t-routines.patch" Content-Type: text/x-patch; name="v2-0003-Refactor-pg_locale_t-routines.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwMTQ1ZDkwNTBiYTNmZWVmMTYzYzFkNGExMzY2MGY5MDQxNjc0NThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDUgRGVjIDIwMjIgMTA6NDM6NTIgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyIDMvNl0gUmVm YWN0b3IgcGdfbG9jYWxlX3Qgcm91dGluZXMuCgogICogYWRkIHBnX2xvY2FsZV9pbnRlcm5hbC5o IHRvIGhpZGUgcGdfbG9jYWxlX3N0cnVjdAogICogbW92ZSBpbmZvLmx0IGludG8gaW5mby5saWJj Lmx0IHRvIG1hdGNoIGljdQogICogaW50cm9kdWNlIGluaXRfZGVmYXVsdF9sb2NhbGUoKQogICog aW50cm9kdWNlIGNvbGxhdGlvbl92ZXJzaW9uX2RlZmF1bHRfbG9jYWxlKCkKICAqIGludHJvZHVj ZSBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYygpIGFjY2Vzc29yCiAgKiBtYWtlIGRlZmF1bHRfbG9j YWxlIGEgc3RhdGljIGdsb2JhbCBpbiBwZ19sb2NhbGUuYwogICogcmVmYWN0b3IgcGdfbmV3bG9j YWxlX2Zyb21fY29sbGF0aW9uKCkgdG8gdXNlIG11bHRpcGxlIHN0YXRpYwogICAgZnVuY3Rpb25z IGFuZCBhdm9pZCBhbGxvY2F0aW5nIGluIFRvcE1lbW9yeUNvbnRleHQgdW50aWwKICAgIG5lY2Vz c2FyeQogICogcmVmYWN0b3IgZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbigpIHRvIHVzZQog ICAgcGdfbmV3bG9jYWxlKCkKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5j ICAgICB8ICA4MiArKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jICAg fCAgIDEgKwogc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYyAgICAgfCAgNDUgKy0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jICAgICB8ICAyNSArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2xpa2UuYyAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9saWtlX3N1cHBvcnQuYyAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlLmMgICAgICB8IDQ1OSArKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvdmFyY2hhci5jICAgICAgICB8ICA2MiArKy0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvdmFybGVuYS5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9wb3N0aW5pdC5jICAgICAgfCAgMzAgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o ICAgICAgICAgIHwgIDU1ICstLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFs LmggfCAgNjggKysrKwogMTIgZmlsZXMgY2hhbmdlZCwgNTA4IGluc2VydGlvbnMoKyksIDMzMyBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGVfaW50ZXJuYWwuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hm dW5jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5jCmluZGV4IGI4MTM2ZTQ5 NmYuLjZkOWYwMTRjNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hm dW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYwpAQCAtMjgxLDM2 ICsyODEsMjggQEAgaGFzaHRleHQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAoIWxjX2NvbGxhdGVf aXNfYyhjb2xsaWQpKQogCQlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihj b2xsaWQpOwogCi0JaWYgKCFteWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKKwlp ZiAocGdfbG9jYWxlX2RldGVybWluaXN0aWMobXlsb2NhbGUpKQogCXsKIAkJcmVzdWx0ID0gaGFz aF9hbnkoKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkoa2V5KSwKIAkJCQkJCSAgVkFSU0la RV9BTllfRVhIRFIoa2V5KSk7CiAJfQogCWVsc2UKIAl7Ci0jaWZkZWYgVVNFX0lDVQotCQlpZiAo bXlsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCi0JCXsKLQkJCVNpemUJCWJz aXplLCByc2l6ZTsKLQkJCWNoYXIJICAgKmJ1ZjsKLQkJCWNvbnN0IGNoYXIgKmtleWRhdGEgPSBW QVJEQVRBX0FOWShrZXkpOwotCQkJc2l6ZV90CQlrZXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihr ZXkpOwotCi0JCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwg bXlsb2NhbGUpOwotCQkJYnVmID0gcGFsbG9jKGJzaXplKTsKLQotCQkJcnNpemUgPSBwZ19zdHJu eGZybShidWYsIGJzaXplLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWlmIChyc2l6 ZSAhPSBic2l6ZSkKLQkJCQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4 cGVjdGVkIHJlc3VsdCIpOwotCi0JCQlyZXN1bHQgPSBoYXNoX2FueSgodWludDhfdCAqKSBidWYs IGJzaXplKTsKLQotCQkJcGZyZWUoYnVmKTsKLQkJfQotCQllbHNlCi0jZW5kaWYKLQkJCS8qIHNo b3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlk ZXI6ICVjIiwgbXlsb2NhbGUtPnByb3ZpZGVyKTsKKwkJU2l6ZQkJYnNpemUsIHJzaXplOworCQlj aGFyCSAgICpidWY7CisJCWNvbnN0IGNoYXIgKmtleWRhdGEgPSBWQVJEQVRBX0FOWShrZXkpOwor CQlzaXplX3QJCWtleWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKGtleSk7CisKKwkJYnNpemUgPSBw Z19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKKwkJYnVmID0g cGFsbG9jKGJzaXplKTsKKworCQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRh dGEsIGtleWxlbiwgbXlsb2NhbGUpOworCQlpZiAocnNpemUgIT0gYnNpemUpCisJCQllbG9nKEVS Uk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOworCisJCXJl c3VsdCA9IGhhc2hfYW55KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOworCisJCXBmcmVlKGJ1Zik7 CiAJfQogCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgZm9yIHRvYXN0ZWQgaW5wdXRzICovCkBA IC0zMzYsNyArMzI4LDcgQEAgaGFzaHRleHRleHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogCWlm ICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zy b21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRl cm1pbmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJewog CQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FO WShrZXkpLAogCQkJCQkJCQkgICBWQVJTSVpFX0FOWV9FWEhEUihrZXkpLApAQCAtMzQ0LDMwICsz MzYsMjIgQEAgaGFzaHRleHRleHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogCX0KIAllbHNlCiAJ ewotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQotCQl7Ci0JCQlTaXplCQlic2l6ZSwgcnNpemU7Ci0JCQljaGFyCSAgICpidWY7Ci0J CQljb25zdCBjaGFyICprZXlkYXRhID0gVkFSREFUQV9BTlkoa2V5KTsKLQkJCXNpemVfdAkJa2V5 bGVuID0gVkFSU0laRV9BTllfRVhIRFIoa2V5KTsKLQotCQkJYnNpemUgPSBwZ19zdHJueGZybShO VUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWJ1ZiA9IHBhbGxvYyhic2l6 ZSk7Ci0KLQkJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVu LCBteWxvY2FsZSk7Ci0JCQlpZiAocnNpemUgIT0gYnNpemUpCi0JCQkJZWxvZyhFUlJPUiwgInBn X3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQiKTsKLQotCQkJcmVzdWx0ID0g aGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSwKLQkJCQkJCQkJCSAgIFBH X0dFVEFSR19JTlQ2NCgxKSk7Ci0KLQkJCXBmcmVlKGJ1Zik7Ci0JCX0KLQkJZWxzZQotI2VuZGlm Ci0JCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQg Y29sbHByb3ZpZGVyOiAlYyIsIG15bG9jYWxlLT5wcm92aWRlcik7CisJCVNpemUJCWJzaXplLCBy c2l6ZTsKKwkJY2hhcgkgICAqYnVmOworCQljb25zdCBjaGFyICprZXlkYXRhID0gVkFSREFUQV9B Tlkoa2V5KTsKKwkJc2l6ZV90CQlrZXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpOworCisJ CWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7 CisJCWJ1ZiA9IHBhbGxvYyhic2l6ZSk7CisKKwkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJz aXplLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKKwkJaWYgKHJzaXplICE9IGJzaXplKQor CQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQi KTsKKworCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodWludDhfdCAqKSBidWYsIGJzaXpl LAorCQkJCQkJCQkgICBQR19HRVRBUkdfSU5UNjQoMSkpOworCisJCXBmcmVlKGJ1Zik7CiAJfQog CiAJUEdfRlJFRV9JRl9DT1BZKGtleSwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRz LmMKaW5kZXggODFlNTRlMGNlNi4uOWU4NGRhNDg5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxl LmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2Nf cGdfbG9jYWxlLmMKaW5kZXggMDJkNDYyYTY1OS4uYWMwNWVmYjU1OCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYworKysgYi9zcmMvYmFja2VuZC9yZWdleC9y ZWdjX3BnX2xvY2FsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUgInV0 aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oIgogCiAvKgogICogVG8gcHJvdmlkZSBhcyBtdWNoIGZ1 bmN0aW9uYWxpdHkgYXMgcG9zc2libGUgb24gYSB2YXJpZXR5IG9mIHBsYXRmb3JtcywKQEAgLTMw NiwxMyArMzA3LDEzIEBAIHBnX3djX2lzZGlnaXQocGdfd2NoYXIgYykKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yod2No YXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dkaWdp dF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIGlz d2RpZ2l0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vu ZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9N QVggJiYKLQkJCQkJaXNkaWdpdF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubHQpKTsKKwkJCQkJaXNkaWdpdF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfSUNVOgpAQCAtMzQyLDEzICszNDMsMTMgQEAgcGdfd2NfaXNhbHBoYShwZ193Y2hh ciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVf VAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYp Ci0JCQkJcmV0dXJuIGlzd2FscGhhX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv Lmx0KTsKKwkJCQlyZXR1cm4gaXN3YWxwaGFfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JF R0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAoYyA8 PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2FscGhhX2woKHVuc2lnbmVkIGNoYXIp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc2FscGhhX2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJCWJy ZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC0zNzgsMTMgKzM3OSwxMyBAQCBw Z193Y19pc2FsbnVtKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8 PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3YWxudW1fbCgod2ludF90KSBjLCBw Z19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dhbG51bV9sKCh3aW50X3Qp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFMTCBU SFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzYWxu dW1fbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJCQkJ CWlzYWxudW1fbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMu bHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAg LTQyMywxMyArNDI0LDEzIEBAIHBnX3djX2lzdXBwZXIocGdfd2NoYXIgYykKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yo d2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3d1 cHBlcl9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJu IGlzd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwog I2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hB Ul9NQVggJiYKLQkJCQkJaXN1cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubHQpKTsKKwkJCQkJaXN1cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdl eF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfSUNVOgpAQCAtNDU5LDEzICs0NjAsMTMgQEAgcGdfd2NfaXNsb3dlcihwZ193 Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZG RkYpCi0JCQkJcmV0dXJuIGlzd2xvd2VyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5p bmZvLmx0KTsKKwkJCQlyZXR1cm4gaXN3bG93ZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBH X1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAo YyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2xvd2VyX2woKHVuc2lnbmVkIGNo YXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc2xvd2VyX2woKHVuc2ln bmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJ CWJyZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC00OTUsMTMgKzQ5NiwxMyBA QCBwZ193Y19pc2dyYXBoKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwg YyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3Z3JhcGhfbCgod2ludF90KSBj LCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dncmFwaF9sKCh3aW50 X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFM TCBUSFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlz Z3JhcGhfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJ CQkJCWlzZ3JhcGhfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxp YmMubHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToK QEAgLTUzMSwxMyArNTMyLDEzIEBAIHBnX3djX2lzcHJpbnQocGdfd2NoYXIgYykKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXpl b2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBp c3dwcmludF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0 dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQp OwogI2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZ VEVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBV Q0hBUl9NQVggJiYKLQkJCQkJaXNwcmludF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubHQpKTsKKwkJCQkJaXNwcmludF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfSUNVOgpAQCAtNTY3LDEzICs1NjgsMTMgQEAgcGdfd2NfaXNwdW5jdChw Z193Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCQkJcmV0dXJuIGlzd3B1bmN0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxl LT5pbmZvLmx0KTsKKwkJCQlyZXR1cm4gaXN3cHVuY3RfbCgod2ludF90KSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNl IFBHX1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVy biAoYyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3B1bmN0X2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc3B1bmN0X2woKHVu c2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYK IAkJCWJyZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC02MDMsMTMgKzYwNCwx MyBAQCBwZ193Y19pc3NwYWNlKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJ REVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQg fHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3c3BhY2VfbCgod2ludF90 KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dzcGFjZV9sKCh3 aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyog RkFMTCBUSFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFW RV9MT0NBTEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJ CWlzc3BhY2VfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7 CisJCQkJCWlzc3BhY2VfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv LmxpYmMubHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lD VToKQEAgLTY0NywxMyArNjQ4LDEzIEBAIHBnX3djX3RvdXBwZXIocGdfd2NoYXIgYykKIAkJY2Fz ZSBQR19SRUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChz aXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVy biB0b3d1cHBlcl9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJ cmV0dXJuIHRvd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMu bHQpOwogI2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVf MUJZVEVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoYyA8PSAocGdfd2NoYXIpIFVD SEFSX01BWCkKLQkJCQlyZXR1cm4gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdl eF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiB0b3VwcGVyX2woKHVuc2lnbmVkIGNoYXIp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJcmV0dXJuIGM7 CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAgLTY5MSwxMyArNjkyLDEzIEBAIHBnX3dj X3RvbG93ZXIocGdfd2NoYXIgYykKIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfV0lERV9MOgogI2lm ZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChw Z193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiB0b3dsb3dlcl9sKCh3aW50X3QpIGMsIHBnX3Jl Z2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIHRvd2xvd2VyX2woKHdpbnRfdCkgYywg cGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUg Ki8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9U CiAJCQlpZiAoYyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCkKLQkJCQlyZXR1cm4gdG9sb3dlcl9s KCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVy biB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJj Lmx0KTsKICNlbmRpZgogCQkJcmV0dXJuIGM7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDI2ZjQ5OGI1ZGYuLmE0YmM3ZmE1ZjUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtODcsNiArODcsNyBAQAogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1 ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZV9pbnRlcm5h bC5oIgogCiAvKiAtLS0tLS0tLS0tCiAgKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIGVycm9yIGhh bmRsaW5nCkBAIC0xNjExLDcgKzE2MTIsNyBAQCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0 X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2NhbGUsCiAJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhs ZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOwogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsK IAlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5f c291cmNlLAotCQkJCQlteWxvY2FsZS0+aW5mby5pY3UubG9jYWxlLCAmc3RhdHVzKTsKKwkJCQkJ bXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsKIAlpZiAoc3RhdHVzID09IFVfQlVGRkVSX09WRVJG TE9XX0VSUk9SKQogCXsKIAkJLyogdHJ5IGFnYWluIHdpdGggYWRqdXN0ZWQgbGVuZ3RoICovCkBA IC0xNjE5LDcgKzE2MjAsNyBAQCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVu YywgcGdfbG9jYWxlX3QgbXlsb2NhbGUsCiAJCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3Qg KiBzaXplb2YoKipidWZmX2Rlc3QpKTsKIAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCQlsZW5f ZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291cmNl LAotCQkJCQkJbXlsb2NhbGUtPmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJCQkJCQlteWxv Y2FsZS0+Y3R5cGUsICZzdGF0dXMpOwogCX0KIAlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVy ZXBvcnQoRVJST1IsCkBAIC0xNzMyLDcgKzE3MzMsNyBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFy ICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsKICNpZmRlZiBIQVZFX0xP Q0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0g dG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubHQpOworCQkJ CQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJd LCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJZWxzZQogI2VuZGlmCiAJCQkJCQl3b3Jr c3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyKHdvcmtzcGFjZVtjdXJyX2NoYXJdKTsKQEAgLTE3 NjUsNyArMTc2Niw3IEBAIHN0cl90b2xvd2VyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMsIE9pZCBjb2xsaWQpCiAJCQkJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCQkJaWYgKG15 bG9jYWxlKQotCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBteWxvY2Fs ZS0+aW5mby5sdCk7CisJCQkJCQkqcCA9IHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15 bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQllbHNlCiAjZW5kaWYKIAkJCQkJCSpwID0gcGdf dG9sb3dlcigodW5zaWduZWQgY2hhcikgKnApOwpAQCAtMTg1NCw3ICsxODU1LDcgQEAgc3RyX3Rv dXBwZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKIAkJCQl7 CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2NhbGUpCi0JCQkJCQl3b3Jrc3Bh Y2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxl LT5pbmZvLmx0KTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXJfbCh3b3Jr c3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAJCQkJCWVsc2UKICNl bmRpZgogCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBlcih3b3Jrc3BhY2VbY3Vy cl9jaGFyXSk7CkBAIC0xODg3LDcgKzE4ODgsNyBAQCBzdHJfdG91cHBlcihjb25zdCBjaGFyICpi dWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsKICNpZmRlZiBIQVZFX0xPQ0FM RV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBj aGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOworCQkJCQkJKnAgPSB0b3VwcGVyX2woKHVuc2ln bmVkIGNoYXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJZWxzZQogI2VuZGlm CiAJCQkJCQkqcCA9IHBnX3RvdXBwZXIoKHVuc2lnbmVkIGNoYXIpICpwKTsKQEAgLTE5NzksMTAg KzE5ODAsMTAgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywg T2lkIGNvbGxpZCkKIAkJCQkJaWYgKG15bG9jYWxlKQogCQkJCQl7CiAJCQkJCQlpZiAod2FzYWxu dW0pCi0JCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtj dXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hh cl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJj Lmx0KTsKIAkJCQkJCWVsc2UKLQkJCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVy X2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKLQkJCQkJCXdhc2Fs bnVtID0gaXN3YWxudW1fbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubHQp OworCQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXJfbCh3b3Jrc3BhY2VbY3Vy cl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJCQkJCQl3YXNhbG51bSA9IGlzd2Fs bnVtX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJ CQl9CiAJCQkJCWVsc2UKICNlbmRpZgpAQCAtMjAyNCwxMCArMjAyNSwxMCBAQCBzdHJfaW5pdGNh cChjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCQlpZiAo bXlsb2NhbGUpCiAJCQkJCXsKIAkJCQkJCWlmICh3YXNhbG51bSkKLQkJCQkJCQkqcCA9IHRvbG93 ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmx0KTsKKwkJCQkJCQkqcCA9 IHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwog CQkJCQkJZWxzZQotCQkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXls b2NhbGUtPmluZm8ubHQpOwotCQkJCQkJd2FzYWxudW0gPSBpc2FsbnVtX2woKHVuc2lnbmVkIGNo YXIpICpwLCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQkJKnAgPSB0b3VwcGVyX2woKHVuc2ln bmVkIGNoYXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJCXdhc2FsbnVtID0g aXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAJ CQkJCX0KIAkJCQkJZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvbGlrZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYwppbmRleCA4ZTY3MWI5ZmFi Li45ODcxNGEwNDkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5o IgogCiAKICNkZWZpbmUgTElLRV9UUlVFCQkJCQkJMQpAQCAtOTYsNyArOTcsNyBAQCBTQl9sb3dl cl9jaGFyKHVuc2lnbmVkIGNoYXIgYywgcGdfbG9jYWxlX3QgbG9jYWxlLCBib29sIGxvY2FsZV9p c19jKQogCQlyZXR1cm4gcGdfYXNjaWlfdG9sb3dlcihjKTsKICNpZmRlZiBIQVZFX0xPQ0FMRV9U CiAJZWxzZSBpZiAobG9jYWxlKQotCQlyZXR1cm4gdG9sb3dlcl9sKGMsIGxvY2FsZS0+aW5mby5s dCk7CisJCXJldHVybiB0b2xvd2VyX2woYywgbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2VuZGlm CiAJZWxzZQogCQlyZXR1cm4gcGdfdG9sb3dlcihjKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1 cHBvcnQuYwppbmRleCAyZDNhYWFhZjZiLi4yOGQyM2FjM2FiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2xpa2Vfc3VwcG9ydC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0dW0u aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2Nh bGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJ1 dGlscy9zZWxmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIApAQCAtMTUxMSw3 ICsxNTEyLDcgQEAgcGF0dGVybl9jaGFyX2lzYWxwaGEoY2hhciBjLCBib29sIGlzX211bHRpYnl0 ZSwKIAkJCShjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKTsK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJZWxzZSBpZiAobG9jYWxlICYmIGxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCi0JCXJldHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNo YXIpIGMsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJldHVybiBpc2FscGhhX2woKHVuc2lnbmVkIGNo YXIpIGMsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCWVsc2UKIAkJcmV0dXJuIGlz YWxwaGEoKHVuc2lnbmVkIGNoYXIpIGMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3BnX2xvY2FsZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCmluZGV4 IDEzM2JiMDNhMTMuLjBhMTk4NDVkZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKQEAg LTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUg InV0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CiAKICNpZmRlZiBVU0VfSUNVCkBAIC0xMjgsNiArMTI5LDExIEBAIHN0YXRpYyBIVEFCICpjb2xs YXRpb25fY2FjaGUgPSBOVUxMOwogc3RhdGljIGNoYXIgKklzb0xvY2FsZU5hbWUoY29uc3QgY2hh ciAqKTsKICNlbmRpZgogCisvKgorICogRGF0YWJhc2UgZGVmYXVsdCBsb2NhbGUuCisgKi8KK3N0 YXRpYyBwZ19sb2NhbGVfdCBkZWZhdWx0X2xvY2FsZSA9IE5VTEw7CisKICNpZmRlZiBVU0VfSUNV CiAvKgogICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBiZXR3ZWVuIElDVSdzIFVD aGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncwpAQCAtMTMzMyw3ICsxMzM5LDcgQEAgbGNfY29sbGF0 ZV9pc19jKE9pZCBjb2xsYXRpb24pCiAJCXN0YXRpYyBpbnQJcmVzdWx0ID0gLTE7CiAJCWNoYXIJ ICAgKmxvY2FsZXB0cjsKIAotCQlpZiAoZGVmYXVsdF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0lDVSkKKwkJaWYgKGRlZmF1bHRfbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCWlmIChyZXN1bHQgPj0gMCkKQEAgLTEzODYs NyArMTM5Miw3IEBAIGxjX2N0eXBlX2lzX2MoT2lkIGNvbGxhdGlvbikKIAkJc3RhdGljIGludAly ZXN1bHQgPSAtMTsKIAkJY2hhcgkgICAqbG9jYWxlcHRyOwogCi0JCWlmIChkZWZhdWx0X2xvY2Fs ZS5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQlpZiAoZGVmYXVsdF9sb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJaWYgKHJl c3VsdCA+PSAwKQpAQCAtMTQxNywzOCArMTQyMyw2IEBAIGxjX2N0eXBlX2lzX2MoT2lkIGNvbGxh dGlvbikKIAlyZXR1cm4gKGxvb2t1cF9jb2xsYXRpb25fY2FjaGUoY29sbGF0aW9uLCB0cnVlKSkt PmN0eXBlX2lzX2M7CiB9CiAKLXN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IGRlZmF1bHRfbG9jYWxl OwotCi12b2lkCi1tYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIsCi0JCQkJ ICBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcmVzdWx0cCkKLXsKLSNpZmRlZiBVU0VfSUNVCi0J VUNvbGxhdG9yICAqY29sbGF0b3I7Ci0JVUVycm9yQ29kZQlzdGF0dXM7Ci0KLQlzdGF0dXMgPSBV X1pFUk9fRVJST1I7Ci0JY29sbGF0b3IgPSB1Y29sX29wZW4oaWN1bG9jc3RyLCAmc3RhdHVzKTsK LQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycm1zZygi Y291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKLQkJCQkJCWlj dWxvY3N0ciwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKLQotCWlmIChVX0lDVV9WRVJTSU9OX01B Sk9SX05VTSA8IDU0KQotCQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxhdG9yLCBp Y3Vsb2NzdHIpOwotCi0JLyogV2Ugd2lsbCBsZWFrIHRoaXMgc3RyaW5nIGlmIHRoZSBjYWxsZXIg ZXJyb3JzIGxhdGVyIDotKCAqLwotCXJlc3VsdHAtPmluZm8uaWN1LmxvY2FsZSA9IE1lbW9yeUNv bnRleHRTdHJkdXAoVG9wTWVtb3J5Q29udGV4dCwgaWN1bG9jc3RyKTsKLQlyZXN1bHRwLT5pbmZv LmljdS51Y29sID0gY29sbGF0b3I7Ci0jZWxzZQkJCQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCS8q IGNvdWxkIGdldCBoZXJlIGlmIGEgY29sbGF0aW9uIHdhcyBjcmVhdGVkIGJ5IGEgYnVpbGQgd2l0 aCBJQ1UgKi8KLQllcmVwb3J0KEVSUk9SLAotCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAotCQkJIGVycm1zZygiSUNVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBi dWlsZCIpKSk7Ci0jZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLX0KLQotCiAvKiBzaW1w bGUgc3Vicm91dGluZSBmb3IgcmVwb3J0aW5nIGVycm9ycyBmcm9tIG5ld2xvY2FsZSgpICovCiAj aWZkZWYgSEFWRV9MT0NBTEVfVAogc3RhdGljIHZvaWQKQEAgLTE0ODIsNiArMTQ1NiwyNjEgQEAg cmVwb3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiAjZW5kaWYJ CQkJCQkJLyogSEFWRV9MT0NBTEVfVCAqLwogCiAKKy8qCisgKiBDb25zdHJ1Y3QgYSBuZXcgcGdf bG9jYWxlX3Qgb2JqZWN0LgorICoKKyAqIFBhc3NpbmcgTlVMTCBmb3IgdGhlIHZlcnNpb24gaXMg YWxsb3dlZDsgYW5kIGV2ZW4gaWYgaXQgaXMgc3BlY2lmaWVkLCB0aGUKKyAqIHJlc3VsdCBtYXkg b3IgbWF5IG5vdCBoYXZlIGFuIGV4YWN0bHkgbWF0Y2hpbmcgdmVyc2lvbi4gT3RoZXIgcGFyYW1l dGVycworICogYXJlIHJlcXVpcmVkLiBDYWxsZXIgc2hvdWxkIHBhc3MgaXNkZWZhdWx0PXRydWUg aWYgaW5pdGlhbGl6aW5nCisgKiBkZWZhdWx0X2xvY2FsZTsgZmFsc2Ugb3RoZXJ3aXNlLgorICoK KyAqIFN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBpbiBDdXJyZW50TWVtb3J5Q29udGV4dC4gVGhl IGxpYmMgbG9jYWxlX3Qgb3IKKyAqIFVDb2xsYXRvciBpcyBub3QgYWxsb2NhdGVkIGluIGFueSBt ZW1vcnkgY29udGV4dCwgc28gdGhlIGNhbGxlciBzaG91bGQgYmUKKyAqIHN1cmUgdG8gY2FsbCBw Z19mcmVlbG9jYWxlKCkgdG8gY2xvc2UgaXQuCisgKi8KK3N0YXRpYyBwZ19sb2NhbGVfdAorcGdf bmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgaXNkZWZhdWx0LCBib29sIGRldGVybWluaXN0 aWMsCisJCQkgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5cGUsIGNvbnN0IGNo YXIgKnZlcnNpb24pCit7CisJcGdfbG9jYWxlX3QgcmVzdWx0ID0gcGFsbG9jMChzaXplb2Yoc3Ry dWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKKworCS8qCisJICogSWYgQ09MTFBST1ZJREVSX0RFRkFV TFQsIGNhbGxlciBzaG91bGQgdXNlIGRlZmF1bHRfbG9jYWxlIG9yIE5VTEwKKwkgKiBpbnN0ZWFk LgorCSAqLworCUFzc2VydChwcm92aWRlciAhPSBDT0xMUFJPVklERVJfREVGQVVMVCk7CisKKwlp ZiAocHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMgJiYgaXNkZWZhdWx0KQorCXsKKwkJLyoK KwkJICogV2hlbiB0aGUgZGVmYXVsdCBsb2NhbGUgaXMgbGliYywgdGhlIGFjdHVhbCBsb2NhbGUg c2V0dGluZ3MgYXJlCisJCSAqIGNvbnRyb2xsZWQgYnkgc2V0bG9jYWxlKCksIHNvIHRoZXJlJ3Mg bm90aGluZyB0byBkbyBoZXJlLgorCQkgKi8KKwl9CisJZWxzZSBpZiAocHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0xJQkMpCisJeworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwkJbG9jYWxlX3QgICAg ICAgIGxvYzsKKworCQkvKiBuZXdsb2NhbGUncyByZXN1bHQgbWF5IGJlIGxlYWtlZCBpZiB3ZSBl bmNvdW50ZXIgYW4gZXJyb3IgKi8KKworCQlpZiAoc3RyY21wKGNvbGxhdGUsIGN0eXBlKSA9PSAw KQorCQl7CisJCQkvKiBOb3JtYWwgY2FzZSB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lICovCisJCQll cnJubyA9IDA7CisjaWZuZGVmIFdJTjMyCisJCQlsb2MgPSBuZXdsb2NhbGUoTENfQ09MTEFURV9N QVNLIHwgTENfQ1RZUEVfTUFTSywgY29sbGF0ZSwKKwkJCQkJCQlOVUxMKTsKKyNlbHNlCisJCQls b2MgPSBfY3JlYXRlX2xvY2FsZShMQ19BTEwsIGNvbGxhdGUpOworI2VuZGlmCisJCQlpZiAoIWxv YykKKwkJCQlyZXBvcnRfbmV3bG9jYWxlX2ZhaWx1cmUoY29sbGF0ZSk7CisJCX0KKwkJZWxzZQor CQl7CisjaWZuZGVmIFdJTjMyCisJCQkvKiBXZSBuZWVkIHR3byBuZXdsb2NhbGUoKSBzdGVwcyAq LworCQkJbG9jYWxlX3QJbG9jMTsKKworCQkJZXJybm8gPSAwOworCQkJbG9jMSA9IG5ld2xvY2Fs ZShMQ19DT0xMQVRFX01BU0ssIGNvbGxhdGUsIE5VTEwpOworCQkJaWYgKCFsb2MxKQorCQkJCXJl cG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKKwkJCWVycm5vID0gMDsKKwkJCWxvYyA9 IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBjdHlwZSwgbG9jMSk7CisJCQlpZiAoIWxvYykKKwkJ CQlyZXBvcnRfbmV3bG9jYWxlX2ZhaWx1cmUoY3R5cGUpOworI2Vsc2UKKworCQkJLyoKKwkJCSAq IFhYWCBUaGUgX2NyZWF0ZV9sb2NhbGUoKSBBUEkgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydAor CQkJICogdGhpcy4gQ291bGQgcGVyaGFwcyBiZSB3b3JrZWQgYXJvdW5kIGJ5IGNoYW5naW5nCisJ CQkgKiBwZ19sb2NhbGVfdCB0byBjb250YWluIHR3byBzZXBhcmF0ZSBmaWVsZHMuCisJCQkgKi8K KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKKwkJCQkJIGVycm1zZygiY29sbGF0aW9ucyB3aXRoIGRpZmZlcmVudCBjb2xsYXRl IGFuZCBjdHlwZSB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpKSk7 CisjZW5kaWYKKwkJfQorCisJCXJlc3VsdC0+aW5mby5saWJjLmx0ID0gbG9jOworI2Vsc2UJCQkJ CQkJLyogbm90IEhBVkVfTE9DQUxFX1QgKi8KKwkJLyogcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHN1 cHBvcnQgbG9jYWxlX3QgKi8KKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiY29sbGF0aW9uIHByb3ZpZGVy IExJQkMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikpKTsKKyNlbmRpZgkJCQkJ CQkvKiBub3QgSEFWRV9MT0NBTEVfVCAqLworCX0KKyNpZmRlZiBVU0VfSUNVCisJZWxzZSBpZiAo cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCVVDb2xsYXRvciAgKmNvbGxhdG9y OworCQlVRXJyb3JDb2RlCXN0YXR1czsKKworCQkvKiBjb2xsYXRvciBtYXkgYmUgbGVha2VkIGlm IHdlIGVuY291bnRlciBhbiBlcnJvciAqLworCisJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJ Y29sbGF0b3IgPSB1Y29sX29wZW4oY29sbGF0ZSwgJnN0YXR1cyk7CisJCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVu IGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCisJCQkJCQkJY29sbGF0ZSwgdV9lcnJv ck5hbWUoc3RhdHVzKSkpKTsKKworCQlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NCkK KwkJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoY29sbGF0b3IsIGNvbGxhdGUpOworCisJ CXJlc3VsdC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9yOworCX0KKyNlbmRpZgorCWVsc2UKKwkJ Lyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHBy b3ZpZGVyOiAlYyIsIHByb3ZpZGVyKTsKKworCXJlc3VsdC0+cHJvdmlkZXIgPSBwcm92aWRlcjsK KwlyZXN1bHQtPmRldGVybWluaXN0aWMgPSBkZXRlcm1pbmlzdGljOworCXJlc3VsdC0+Y29sbGF0 ZSA9IHBzdHJkdXAoY29sbGF0ZSk7CisJcmVzdWx0LT5jdHlwZSA9IHBzdHJkdXAoY3R5cGUpOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE1vdmUgcmVzb3VyY2VzIGZyb20gdGhlIGdp dmVuIGxvY2FsZSBpbnRvIHRoZSBnaXZlbiBtY3h0LCBjb25zdW1pbmcgYW5kCisgKiBmcmVlaW5n IHRoZSBnaXZlbiBsb2NhbGUgYW5kIHJldHVybmluZyB0aGUgbmV3IG9uZS4KKyAqLworc3RhdGlj IHBnX2xvY2FsZV90CitwZ19tb3ZlbG9jYWxlKE1lbW9yeUNvbnRleHQgbWN4dCwgcGdfbG9jYWxl X3QgKnBsb2NhbGUpCit7CisJcGdfbG9jYWxlX3QgbG9jYWxlID0gKnBsb2NhbGU7CisJcGdfbG9j YWxlX3QgcmVzdWx0OworCisJQXNzZXJ0KGxvY2FsZSAhPSBkZWZhdWx0X2xvY2FsZSk7CisKKwly ZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKG1jeHQsIHNpemVvZihzdHJ1Y3QgcGdfbG9j YWxlX3N0cnVjdCkpOworCisJcmVzdWx0LT5wcm92aWRlciA9IGxvY2FsZS0+cHJvdmlkZXI7CisJ cmVzdWx0LT5kZXRlcm1pbmlzdGljID0gbG9jYWxlLT5kZXRlcm1pbmlzdGljOworCisJaWYgKGxv Y2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJeworI2lmZGVmIEhBVkVfTE9D QUxFX1QKKwkJaWYgKGxvY2FsZS0+aW5mby5saWJjLmx0ICE9IE5VTEwpCisJCXsKKwkJCS8qIG5v dCBpbiBhIG1lbW9yeSBjb250ZXh0OyBqdXN0IHJlYXNzaWduIHRoZSBwb2ludGVyICovCisJCQly ZXN1bHQtPmluZm8ubGliYy5sdCA9IGxvY2FsZS0+aW5mby5saWJjLmx0OworCQl9CisjZW5kaWYK Kwl9CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0lDVSkKKwl7CisJCS8qIG5vdCBpbiBhIG1lbW9yeSBjb250ZXh0OyBqdXN0IHJlYXNz aWduIHRoZSBwb2ludGVyICovCisJCXJlc3VsdC0+aW5mby5pY3UudWNvbCA9IGxvY2FsZS0+aW5m by5pY3UudWNvbDsKKwl9CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8K KwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnBy b3ZpZGVyKTsKKworCXJlc3VsdC0+Y29sbGF0ZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAobWN4dCwg bG9jYWxlLT5jb2xsYXRlKTsKKwlwZnJlZShsb2NhbGUtPmNvbGxhdGUpOworCisJcmVzdWx0LT5j dHlwZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAobWN4dCwgbG9jYWxlLT5jdHlwZSk7CisJcGZyZWUo bG9jYWxlLT5jdHlwZSk7CisKKwlwZnJlZShsb2NhbGUpOworCSpwbG9jYWxlID0gTlVMTDsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBGcmVlIHBnX2xvY2FsZV90IGFuZCBjbG9zZSBs aWJjIGxvY2FsZV90IG9yIFVDb2xsYXRvci4KKyAqLworI2lmZGVmIFVTRV9JQ1UKK3N0YXRpYyB2 b2lkCitwZ19mcmVlbG9jYWxlKHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlpZiAoIWxvY2FsZSkK KwkJcmV0dXJuOworCisJQXNzZXJ0KGxvY2FsZSAhPSBkZWZhdWx0X2xvY2FsZSk7CisKKwlwZnJl ZShsb2NhbGUtPmNvbGxhdGUpOworCXBmcmVlKGxvY2FsZS0+Y3R5cGUpOworCisJaWYgKGxvY2Fs ZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJeworI2lmZGVmIEhBVkVfTE9DQUxF X1QKKwkJaWYgKGxvY2FsZS0+aW5mby5saWJjLmx0ICE9IE5VTEwpCisJCXsKKyNpZm5kZWYgV0lO MzIKKwkJCWZyZWVsb2NhbGUobG9jYWxlLT5pbmZvLmxpYmMubHQpOworI2Vsc2UKKwkJCV9mcmVl X2xvY2FsZShsb2NhbGUtPmluZm8ubGliYy5sdCk7CisjZW5kaWYKKwkJfQorI2VuZGlmCisJfQor I2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURF Ul9JQ1UpCisJeworCQl1Y29sX2Nsb3NlKGxvY2FsZS0+aW5mby5pY3UudWNvbCk7CisJfQorI2Vu ZGlmCisJZWxzZQorCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1 cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CisKKwlwZnJlZShs b2NhbGUpOworfQorI2VuZGlmCisKKy8qCisgKiBBY2Nlc3NvciBzbyB0aGF0IGNhbGxlcnMgZG9u J3QgbmVlZCB0byBpbmNsdWRlIHBnX2xvY2FsZV9pbnRlcm5hbC5oLgorICovCitib29sCitwZ19s b2NhbGVfZGV0ZXJtaW5pc3RpYyhwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaWYgKGxvY2FsZSA9 PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBsb2NhbGUtPmRldGVybWlu aXN0aWM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGRlZmF1bHQgZGF0YWJhc2UgbG9jYWxlLgor ICovCit2b2lkCitpbml0X2RlZmF1bHRfbG9jYWxlKGNoYXIgcHJvdmlkZXIsIGNvbnN0IGNoYXIg KmNvbGxhdGUsIGNvbnN0IGNoYXIgKmN0eXBlLAorCQkJCQljb25zdCBjaGFyICp2ZXJzaW9uKQor eworCXBnX2xvY2FsZV90IHRlbXBfbG9jYWxlOworCWJvb2wgZGV0ZXJtaW5pc3RpYzsKKworCS8q CisJICogRGVmYXVsdCBsb2NhbGUgaXMgY3VycmVudGx5IGFsd2F5cyBkZXRlcm1pbmlzdGljLiAg Tm9uZGV0ZXJtaW5pc3RpYworCSAqIGxvY2FsZXMgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGF0 dGVybiBtYXRjaGluZywgd2hpY2ggd291bGQgYnJlYWsgYQorCSAqIGxvdCBvZiB0aGluZ3MgaWYg YXBwbGllZCBnbG9iYWxseS4KKwkgKi8KKwlkZXRlcm1pbmlzdGljID0gdHJ1ZTsKKwl0ZW1wX2xv Y2FsZSA9IHBnX25ld2xvY2FsZShwcm92aWRlciwgdHJ1ZSwgZGV0ZXJtaW5pc3RpYywgY29sbGF0 ZSwKKwkJCQkJCQkgICBjdHlwZSwgdmVyc2lvbik7CisKKwlkZWZhdWx0X2xvY2FsZSA9IHBnX21v dmVsb2NhbGUoVG9wTWVtb3J5Q29udGV4dCwgJnRlbXBfbG9jYWxlKTsKK30KKworLyoKKyAqIFJl dHVybiBwYWxsb2MnZCB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICov CitjaGFyICoKK2RlZmF1bHRfbG9jYWxlX2NvbGxhdGlvbl92ZXJzaW9uKCkKK3sKKwlyZXR1cm4g Z2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihkZWZhdWx0X2xvY2FsZS0+cHJvdmlkZXIsCisJ CQkJCQkJCQkJZGVmYXVsdF9sb2NhbGUtPmNvbGxhdGUpOworfQorCiAvKgogICogQ3JlYXRlIGEg bG9jYWxlX3QgZnJvbSBhIGNvbGxhdGlvbiBPSUQuICBSZXN1bHRzIGFyZSBjYWNoZWQgZm9yIHRo ZQogICogbGlmZXRpbWUgb2YgdGhlIGJhY2tlbmQuICBUaHVzLCBkbyBub3QgZnJlZSB0aGUgcmVz dWx0IHdpdGggZnJlZWxvY2FsZSgpLgpAQCAtMTUwNiw4ICsxNzM1LDggQEAgcGdfbmV3bG9jYWxl X2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpCiAKIAlpZiAoY29sbGlkID09IERFRkFVTFRfQ09M TEFUSU9OX09JRCkKIAl7Ci0JCWlmIChkZWZhdWx0X2xvY2FsZS5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKQotCQkJcmV0dXJuICZkZWZhdWx0X2xvY2FsZTsKKwkJaWYgKGRlZmF1bHRfbG9j YWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQkJcmV0dXJuIGRlZmF1bHRfbG9j YWxlOwogCQllbHNlCiAJCQlyZXR1cm4gKHBnX2xvY2FsZV90KSAwOwogCX0KQEAgLTE1MTksMTA3 ICsxNzQ4LDY1IEBAIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKQogCQkv KiBXZSBoYXZlbid0IGNvbXB1dGVkIHRoaXMgeWV0IGluIHRoaXMgc2Vzc2lvbiwgc28gZG8gaXQg Ki8KIAkJSGVhcFR1cGxlCXRwOwogCQlGb3JtX3BnX2NvbGxhdGlvbiBjb2xsZm9ybTsKLQkJc3Ry dWN0IHBnX2xvY2FsZV9zdHJ1Y3QgcmVzdWx0OwotCQlwZ19sb2NhbGVfdCByZXN1bHRwOworCQlw Z19sb2NhbGVfdCB0ZW1wX2xvY2FsZTsKKwkJcGdfbG9jYWxlX3QgcGVybV9sb2NhbGU7CiAJCURh dHVtCQlkYXR1bTsKIAkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpjb2xsYXRlOworCQljaGFy CSAgICpjdHlwZTsKKwkJY2hhcgkgICAqY29sbHZlcnNpb25zdHI7CiAKIAkJdHAgPSBTZWFyY2hT eXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKIAkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOwogCQljb2xsZm9ybSA9IChGb3JtX3BnX2NvbGxhdGlv bikgR0VUU1RSVUNUKHRwKTsKIAotCQkvKiBXZSdsbCBmaWxsIGluIHRoZSByZXN1bHQgc3RydWN0 IGxvY2FsbHkgYmVmb3JlIGFsbG9jYXRpbmcgbWVtb3J5ICovCi0JCW1lbXNldCgmcmVzdWx0LCAw LCBzaXplb2YocmVzdWx0KSk7Ci0JCXJlc3VsdC5wcm92aWRlciA9IGNvbGxmb3JtLT5jb2xscHJv dmlkZXI7Ci0JCXJlc3VsdC5kZXRlcm1pbmlzdGljID0gY29sbGZvcm0tPmNvbGxpc2RldGVybWlu aXN0aWM7CisJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2Nv bGxhdGlvbl9jb2xsdmVyc2lvbiwKKwkJCQkJCQkJJmlzbnVsbCk7CisJCWlmICghaXNudWxsKQor CQkJY29sbHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJZWxzZQor CQkJY29sbHZlcnNpb25zdHIgPSBOVUxMOwogCiAJCWlmIChjb2xsZm9ybS0+Y29sbHByb3ZpZGVy ID09IENPTExQUk9WSURFUl9MSUJDKQogCQl7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQkJY29u c3QgY2hhciAqY29sbGNvbGxhdGU7Ci0JCQljb25zdCBjaGFyICpjb2xsY3R5cGUgcGdfYXR0cmli dXRlX3VudXNlZCgpOwotCQkJbG9jYWxlX3QJbG9jOwotCi0JCQlkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwp OworCQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0 aW9uX2NvbGxjb2xsYXRlLAorCQkJCQkJCQkJJmlzbnVsbCk7CiAJCQlBc3NlcnQoIWlzbnVsbCk7 Ci0JCQljb2xsY29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwotCQkJZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjdHlw ZSwgJmlzbnVsbCk7CisJCQljb2xsYXRlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJ CQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25f Y29sbGN0eXBlLAorCQkJCQkJCQkJJmlzbnVsbCk7CiAJCQlBc3NlcnQoIWlzbnVsbCk7Ci0JCQlj b2xsY3R5cGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQotCQkJaWYgKHN0cmNtcChj b2xsY29sbGF0ZSwgY29sbGN0eXBlKSA9PSAwKQotCQkJewotCQkJCS8qIE5vcm1hbCBjYXNlIHdo ZXJlIHRoZXkncmUgdGhlIHNhbWUgKi8KLQkJCQllcnJubyA9IDA7Ci0jaWZuZGVmIFdJTjMyCi0J CQkJbG9jID0gbmV3bG9jYWxlKExDX0NPTExBVEVfTUFTSyB8IExDX0NUWVBFX01BU0ssIGNvbGxj b2xsYXRlLAotCQkJCQkJCQlOVUxMKTsKLSNlbHNlCi0JCQkJbG9jID0gX2NyZWF0ZV9sb2NhbGUo TENfQUxMLCBjb2xsY29sbGF0ZSk7Ci0jZW5kaWYKLQkJCQlpZiAoIWxvYykKLQkJCQkJcmVwb3J0 X25ld2xvY2FsZV9mYWlsdXJlKGNvbGxjb2xsYXRlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLSNp Zm5kZWYgV0lOMzIKLQkJCQkvKiBXZSBuZWVkIHR3byBuZXdsb2NhbGUoKSBzdGVwcyAqLwotCQkJ CWxvY2FsZV90CWxvYzE7Ci0KLQkJCQllcnJubyA9IDA7Ci0JCQkJbG9jMSA9IG5ld2xvY2FsZShM Q19DT0xMQVRFX01BU0ssIGNvbGxjb2xsYXRlLCBOVUxMKTsKLQkJCQlpZiAoIWxvYzEpCi0JCQkJ CXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsY29sbGF0ZSk7Ci0JCQkJZXJybm8gPSAwOwot CQkJCWxvYyA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBjb2xsY3R5cGUsIGxvYzEpOwotCQkJ CWlmICghbG9jKQotCQkJCQlyZXBvcnRfbmV3bG9jYWxlX2ZhaWx1cmUoY29sbGN0eXBlKTsKLSNl bHNlCi0KLQkJCQkvKgotCQkJCSAqIFhYWCBUaGUgX2NyZWF0ZV9sb2NhbGUoKSBBUEkgZG9lc24n dCBhcHBlYXIgdG8gc3VwcG9ydAotCQkJCSAqIHRoaXMuIENvdWxkIHBlcmhhcHMgYmUgd29ya2Vk IGFyb3VuZCBieSBjaGFuZ2luZwotCQkJCSAqIHBnX2xvY2FsZV90IHRvIGNvbnRhaW4gdHdvIHNl cGFyYXRlIGZpZWxkcy4KLQkJCQkgKi8KLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJIGVycm1zZygiY29sbGF0 aW9ucyB3aXRoIGRpZmZlcmVudCBjb2xsYXRlIGFuZCBjdHlwZSB2YWx1ZXMgYXJlIG5vdCBzdXBw b3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpKSk7Ci0jZW5kaWYKLQkJCX0KLQotCQkJcmVzdWx0Lmlu Zm8ubHQgPSBsb2M7Ci0jZWxzZQkJCQkJCQkvKiBub3QgSEFWRV9MT0NBTEVfVCAqLwotCQkJLyog cGxhdGZvcm0gdGhhdCBkb2Vzbid0IHN1cHBvcnQgbG9jYWxlX3QgKi8KLQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJ IGVycm1zZygiY29sbGF0aW9uIHByb3ZpZGVyIExJQkMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlz IHBsYXRmb3JtIikpKTsKLSNlbmRpZgkJCQkJCQkvKiBub3QgSEFWRV9MT0NBTEVfVCAqLworCQkJ Y3R5cGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKIAkJfQorI2lmZGVmIFVTRV9JQ1UK IAkJZWxzZSBpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQog CQl7Ci0JCQljb25zdCBjaGFyICppY3Vsb2NzdHI7Ci0KLQkJCWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlLCAmaXNudWxs KTsKKwkJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxh dGlvbl9jb2xsaWN1bG9jYWxlLAorCQkJCQkJCQkJJmlzbnVsbCk7CiAJCQlBc3NlcnQoIWlzbnVs bCk7Ci0JCQlpY3Vsb2NzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJCW1ha2Vf aWN1X2NvbGxhdG9yKGljdWxvY3N0ciwgJnJlc3VsdCk7CisJCQljb2xsYXRlID0gVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSk7CisKKwkJCS8qIGZvciBJQ1UsIGNvbGxhdGUgYW5kIGN0eXBlIGFy ZSBib3RoIHNldCBmcm9tIGljdWxvY2FsZSAqLworCQkJY3R5cGUgPSBjb2xsYXRlOwogCQl9Cisj ZW5kaWYKKwkJZWxzZQorCQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBjb2xsZm9ybS0+Y29sbHByb3ZpZGVyKTsK IAotCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRp b25fY29sbHZlcnNpb24sCi0JCQkJCQkJCSZpc251bGwpOwotCQlpZiAoIWlzbnVsbCkKKwkJdGVt cF9sb2NhbGUgPSBwZ19uZXdsb2NhbGUoY29sbGZvcm0tPmNvbGxwcm92aWRlciwgZmFsc2UsCisJ CQkJCQkJCSAgIGNvbGxmb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGljLAorCQkJCQkJCQkgICBjb2xs YXRlLCBjdHlwZSwgY29sbHZlcnNpb25zdHIpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisK KwkJaWYgKGNvbGx2ZXJzaW9uc3RyICE9IE5VTEwpCiAJCXsKIAkJCWNoYXIJICAgKmFjdHVhbF92 ZXJzaW9uc3RyOwotCQkJY2hhcgkgICAqY29sbHZlcnNpb25zdHI7Ci0KLQkJCWNvbGx2ZXJzaW9u c3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CiAKLQkJCWRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKENPTExPSUQsIHRwLCBjb2xsZm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURF Ul9JQ1UgPyBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlIDogQW51bV9wZ19jb2xsYXRp b25fY29sbGNvbGxhdGUsICZpc251bGwpOwotCQkJQXNzZXJ0KCFpc251bGwpOworCQkJYWN0dWFs X3ZlcnNpb25zdHIgPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNvbGxmb3JtLT5jb2xs cHJvdmlkZXIsIGNvbGxhdGUpOwogCi0JCQlhY3R1YWxfdmVyc2lvbnN0ciA9IGdldF9jb2xsYXRp b25fYWN0dWFsX3ZlcnNpb24oY29sbGZvcm0tPmNvbGxwcm92aWRlciwKLQkJCQkJCQkJCQkJCQkJ CSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSk7CiAJCQlpZiAoIWFjdHVhbF92ZXJzaW9uc3Ry KQogCQkJewogCQkJCS8qCkBAIC0xNjQ2LDEzICsxODMzLDEwIEBAIHBnX25ld2xvY2FsZV9mcm9t X2NvbGxhdGlvbihPaWQgY29sbGlkKQogCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihjb2xsZm9ybS0+ Y29sbG5hbWUpKSkpKTsKIAkJfQogCi0JCVJlbGVhc2VTeXNDYWNoZSh0cCk7Ci0KLQkJLyogV2Un bGwga2VlcCB0aGUgcGdfbG9jYWxlX3Qgc3RydWN0dXJlcyBpbiBUb3BNZW1vcnlDb250ZXh0ICov Ci0JCXJlc3VsdHAgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9m KCpyZXN1bHRwKSk7Ci0JCSpyZXN1bHRwID0gcmVzdWx0OworCQkvKiBtb3ZlIGludG8gVG9wTWVt b3J5Q29udGV4dCAqLworCQlwZXJtX2xvY2FsZSA9IHBnX21vdmVsb2NhbGUoVG9wTWVtb3J5Q29u dGV4dCwgJnRlbXBfbG9jYWxlKTsKIAotCQljYWNoZV9lbnRyeS0+bG9jYWxlID0gcmVzdWx0cDsK KwkJY2FjaGVfZW50cnktPmxvY2FsZSA9IHBlcm1fbG9jYWxlOwogCX0KIAogCXJldHVybiBjYWNo ZV9lbnRyeS0+bG9jYWxlOwpAQCAtMTgxMiw3ICsxOTk2LDcgQEAgcGdfc3RybmNvbGxfbGliY193 aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcy LAogCWVycm5vID0gMDsKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJaWYgKGxvY2FsZSkKLQkJcmVz dWx0ID0gd2NzY29sbF9sKChMUFdTVFIpIGExcCwgKExQV1NUUikgYTJwLCBsb2NhbGUtPmluZm8u bHQpOworCQlyZXN1bHQgPSB3Y3Njb2xsX2woKExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnAsIGxv Y2FsZS0+aW5mby5saWJjLmx0KTsKIAllbHNlCiAjZW5kaWYKIAkJcmVzdWx0ID0gd2NzY29sbCgo TFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCk7CkBAIC0xODU1LDcgKzIwMzksNyBAQCBwZ19zdHJj b2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3Qg bG9jYWxlKQogCWlmIChsb2NhbGUpCiAJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKLQkJcmVzdWx0 ID0gc3RyY29sbF9sKGFyZzEsIGFyZzIsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJlc3VsdCA9IHN0 cmNvbGxfbChhcmcxLCBhcmcyLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZWxzZQogCQkvKiBz aG91bGRuJ3QgaGFwcGVuICovCiAJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlk ZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CkBAIC0yMTA4LDcgKzIyOTIsNyBAQCBwZ19zdHJ4 ZnJtX2xpYmMoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCiAj aWZkZWYgVFJVU1RfU1RYRlJNCiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCWlmIChsb2NhbGUpCi0J CXJldHVybiBzdHJ4ZnJtX2woZGVzdCwgc3JjLCBkZXN0c2l6ZSwgbG9jYWxlLT5pbmZvLmx0KTsK KwkJcmV0dXJuIHN0cnhmcm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubGli Yy5sdCk7CiAJZWxzZQogI2VuZGlmCiAJCXJldHVybiBzdHJ4ZnJtKGRlc3QsIHNyYywgZGVzdHNp emUpOwpAQCAtMjcxOCwxOSArMjkwMiwxNiBAQCB2b2lkCiBjaGVja19pY3VfbG9jYWxlKGNvbnN0 IGNoYXIgKmljdV9sb2NhbGUpCiB7CiAjaWZkZWYgVVNFX0lDVQotCVVDb2xsYXRvciAgKmNvbGxh dG9yOwotCVVFcnJvckNvZGUJc3RhdHVzOworCXBnX2xvY2FsZV90IGxvY2FsZTsKIAotCXN0YXR1 cyA9IFVfWkVST19FUlJPUjsKLQljb2xsYXRvciA9IHVjb2xfb3BlbihpY3VfbG9jYWxlLCAmc3Rh dHVzKTsKLQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVy cm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKLQkJ CQkJCWljdV9sb2NhbGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7Ci0KLQlpZiAoVV9JQ1VfVkVS U0lPTl9NQUpPUl9OVU0gPCA1NCkKLQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xs YXRvciwgaWN1X2xvY2FsZSk7Ci0JdWNvbF9jbG9zZShjb2xsYXRvcik7CisJLyoKKwkgKiBXaGV0 aGVyIGl0J3MgZGV0ZXJtaW5pc3RpYyBkb2Vzbid0IG1hdHRlciBpbiB0aGlzIGNhc2UsIGJlY2F1 c2UgaXQKKwkgKiBkb2Vzbid0IGFmZmVjdCB3aGV0aGVyIHRoZSBsb2NhbGUgaXMgdmFsaWQgb3Ig bm90OyBhbmQgd2UncmUgZ29pbmcgdG8KKwkgKiBkaXNjYXJkIHRoZSBsb2NhbGUgYW55d2F5Lgor CSAqLworCWxvY2FsZSA9IHBnX25ld2xvY2FsZShDT0xMUFJPVklERVJfSUNVLCBmYWxzZSwgdHJ1 ZSwgaWN1X2xvY2FsZSwKKwkJCQkJCSAgaWN1X2xvY2FsZSwgTlVMTCk7CisJcGdfZnJlZWxvY2Fs ZShsb2NhbGUpOwogI2Vsc2UKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLApAQCAtMjc5MywxMCArMjk3NCwxMCBAQCB3Y2hhcjJjaGFy KGNoYXIgKnRvLCBjb25zdCB3Y2hhcl90ICpmcm9tLCBzaXplX3QgdG9sZW4sIHBnX2xvY2FsZV90 IGxvY2FsZSkKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAjaWZkZWYgSEFWRV9XQ1NUT01CU19MCiAJ CS8qIFVzZSB3Y3N0b21ic19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJcmVzdWx0ID0g d2NzdG9tYnNfbCh0bywgZnJvbSwgdG9sZW4sIGxvY2FsZS0+aW5mby5sdCk7CisJCXJlc3VsdCA9 IHdjc3RvbWJzX2wodG8sIGZyb20sIHRvbGVuLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZWxz ZQkJCQkJCQkvKiAhSEFWRV9XQ1NUT01CU19MICovCiAJCS8qIFdlIGhhdmUgdG8gdGVtcG9yYXJp bHkgc2V0IHRoZSBsb2NhbGUgYXMgY3VycmVudCAuLi4gdWdoICovCi0JCWxvY2FsZV90CXNhdmVf bG9jYWxlID0gdXNlbG9jYWxlKGxvY2FsZS0+aW5mby5sdCk7CisJCWxvY2FsZV90CXNhdmVfbG9j YWxlID0gdXNlbG9jYWxlKGxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAogCQlyZXN1bHQgPSB3Y3N0 b21icyh0bywgZnJvbSwgdG9sZW4pOwogCkBAIC0yODcwLDEwICszMDUxLDEwIEBAIGNoYXIyd2No YXIod2NoYXJfdCAqdG8sIHNpemVfdCB0b2xlbiwgY29uc3QgY2hhciAqZnJvbSwgc2l6ZV90IGZy b21sZW4sCiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogI2lmZGVmIEhBVkVfTUJTVE9XQ1NfTAogCQkJ LyogVXNlIG1ic3Rvd2NzX2wgZm9yIG5vbmRlZmF1bHQgbG9jYWxlcyAqLwotCQkJcmVzdWx0ID0g bWJzdG93Y3NfbCh0bywgc3RyLCB0b2xlbiwgbG9jYWxlLT5pbmZvLmx0KTsKKwkJCXJlc3VsdCA9 IG1ic3Rvd2NzX2wodG8sIHN0ciwgdG9sZW4sIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbHNl CQkJCQkJCS8qICFIQVZFX01CU1RPV0NTX0wgKi8KIAkJCS8qIFdlIGhhdmUgdG8gdGVtcG9yYXJp bHkgc2V0IHRoZSBsb2NhbGUgYXMgY3VycmVudCAuLi4gdWdoICovCi0JCQlsb2NhbGVfdAlzYXZl X2xvY2FsZSA9IHVzZWxvY2FsZShsb2NhbGUtPmluZm8ubHQpOworCQkJbG9jYWxlX3QJc2F2ZV9s b2NhbGUgPSB1c2Vsb2NhbGUobG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCiAJCQlyZXN1bHQgPSBt YnN0b3djcyh0bywgc3RyLCB0b2xlbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC92YXJjaGFyLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCmluZGV4IGQw YmM1MjhlOWYuLjUyZjI3ZDQ4M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92 YXJjaGFyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwpAQCAtNzU3LDcg Kzc1Nyw3IEBAIGJwY2hhcmVxKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZWxzZQogCQlteWxvY2FsZSA9 IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQpOwogCi0JaWYgKGxvY2FsZV9pc19j IHx8ICFteWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKKwlpZiAobG9jYWxlX2lz X2MgfHwgcGdfbG9jYWxlX2RldGVybWluaXN0aWMobXlsb2NhbGUpKQogCXsKIAkJLyoKIAkJICog U2luY2Ugd2Ugb25seSBjYXJlIGFib3V0IGVxdWFsaXR5IG9yIG5vdC1lcXVhbGl0eSwgd2UgY2Fu IGF2b2lkIGFsbApAQCAtODAyLDcgKzgwMiw3IEBAIGJwY2hhcm5lKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJZWxzZQogCQlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQp OwogCi0JaWYgKGxvY2FsZV9pc19jIHx8ICFteWxvY2FsZSB8fCBteWxvY2FsZS0+ZGV0ZXJtaW5p c3RpYykKKwlpZiAobG9jYWxlX2lzX2MgfHwgcGdfbG9jYWxlX2RldGVybWluaXN0aWMobXlsb2Nh bGUpKQogCXsKIAkJLyoKIAkJICogU2luY2Ugd2Ugb25seSBjYXJlIGFib3V0IGVxdWFsaXR5IG9y IG5vdC1lcXVhbGl0eSwgd2UgY2FuIGF2b2lkIGFsbApAQCAtMTAxMCwzMyArMTAxMCwyNSBAQCBo YXNoYnBjaGFyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlk KSkKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAot CWlmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKHBnX2xvY2Fs ZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7CiAJCXJlc3VsdCA9IGhhc2hfYW55KCh1bnNp Z25lZCBjaGFyICopIGtleWRhdGEsIGtleWxlbik7CiAJfQogCWVsc2UKIAl7Ci0jaWZkZWYgVVNF X0lDVQotCQlpZiAobXlsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCi0JCXsK LQkJCVNpemUJCWJzaXplLCByc2l6ZTsKLQkJCWNoYXIJICAgKmJ1ZjsKKwkJU2l6ZQkJYnNpemUs IHJzaXplOworCQljaGFyCSAgICpidWY7CiAKLQkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwg MCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlidWYgPSBwYWxsb2MoYnNpemUpOwor CQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUp OworCQlidWYgPSBwYWxsb2MoYnNpemUpOwogCi0JCQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1Ziwg YnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJaWYgKHJzaXplICE9IGJzaXpl KQotCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVz dWx0Iik7CisJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVu LCBteWxvY2FsZSk7CisJCWlmIChyc2l6ZSAhPSBic2l6ZSkKKwkJCWVsb2coRVJST1IsICJwZ19z dHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CiAKLQkJCXJlc3VsdCA9IGhh c2hfYW55KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOworCQlyZXN1bHQgPSBoYXNoX2FueSgodWlu dDhfdCAqKSBidWYsIGJzaXplKTsKIAotCQkJcGZyZWUoYnVmKTsKLQkJfQotCQllbHNlCi0jZW5k aWYKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRl ZCBjb2xscHJvdmlkZXI6ICVjIiwgbXlsb2NhbGUtPnByb3ZpZGVyKTsKKwkJcGZyZWUoYnVmKTsK IAl9CiAKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBmb3IgdG9hc3RlZCBpbnB1dHMgKi8KQEAg LTEwNjcsMzUgKzEwNTksMjcgQEAgaGFzaGJwY2hhcmV4dGVuZGVkKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2Nh bGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUt PmRldGVybWluaXN0aWMpCisJaWYgKHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkK IAl7CiAJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1bnNpZ25lZCBjaGFyICopIGtleWRh dGEsIGtleWxlbiwKIAkJCQkJCQkJICAgUEdfR0VUQVJHX0lOVDY0KDEpKTsKIAl9CiAJZWxzZQog CXsKLSNpZmRlZiBVU0VfSUNVCi0JCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSkKLQkJewotCQkJU2l6ZQkJYnNpemUsIHJzaXplOwotCQkJY2hhcgkgICAqYnVmOwor CQlTaXplCQlic2l6ZSwgcnNpemU7CisJCWNoYXIJICAgKmJ1ZjsKIAotCQkJYnNpemUgPSBwZ19z dHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWJ1ZiA9IHBh bGxvYyhic2l6ZSk7CisJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5 bGVuLCBteWxvY2FsZSk7CisJCWJ1ZiA9IHBhbGxvYyhic2l6ZSk7CiAKLQkJCXJzaXplID0gcGdf c3Rybnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlpZiAo cnNpemUgIT0gYnNpemUpCi0JCQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQg dW5leHBlY3RlZCByZXN1bHQiKTsKKwkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXplLCBr ZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKKwkJaWYgKHJzaXplICE9IGJzaXplKQorCQkJZWxv ZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQiKTsKIAot CQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSwKLQkJ CQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CisJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVu ZGVkKCh1aW50OF90ICopIGJ1ZiwgYnNpemUsCisJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgx KSk7CiAKLQkJCXBmcmVlKGJ1Zik7Ci0JCX0KLQkJZWxzZQotI2VuZGlmCi0JCQkvKiBzaG91bGRu J3QgaGFwcGVuICovCi0JCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAl YyIsIG15bG9jYWxlLT5wcm92aWRlcik7CisJCXBmcmVlKGJ1Zik7CiAJfQogCiAJUEdfRlJFRV9J Rl9DT1BZKGtleSwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVu YS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCAyZGZiYTRiNDg4Li5h N2MzOWQ3YWZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTEyMDMsNyArMTIwMyw3IEBA IHRleHRfcG9zaXRpb25fc2V0dXAodGV4dCAqdDEsIHRleHQgKnQyLCBPaWQgY29sbGlkLCBUZXh0 UG9zaXRpb25TdGF0ZSAqc3RhdGUpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkKIAkJ bXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmICht eWxvY2FsZSAmJiAhbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKCFwZ19sb2NhbGVfZGV0 ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIm5vbmRldGVybWluaXN0 aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3Igc3Vic3RyaW5nIHNlYXJjaGVzIikp KTsKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHRleHRlcShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UK IAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlm IChsb2NhbGVfaXNfYyB8fCAhbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJ aWYgKGxvY2FsZV9pc19jIHx8IHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7 CiAJCURhdHVtCQlhcmcxID0gUEdfR0VUQVJHX0RBVFVNKDApOwogCQlEYXR1bQkJYXJnMiA9IFBH X0dFVEFSR19EQVRVTSgxKTsKQEAgLTE2NjAsNyArMTY2MCw3IEBAIHRleHRuZShQR19GVU5DVElP Tl9BUkdTKQogCWVsc2UKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24o Y29sbGlkKTsKIAotCWlmIChsb2NhbGVfaXNfYyB8fCAhbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRl dGVybWluaXN0aWMpCisJaWYgKGxvY2FsZV9pc19jIHx8IHBnX2xvY2FsZV9kZXRlcm1pbmlzdGlj KG15bG9jYWxlKSkKIAl7CiAJCURhdHVtCQlhcmcxID0gUEdfR0VUQVJHX0RBVFVNKDApOwogCQlE YXR1bQkJYXJnMiA9IFBHX0dFVEFSR19EQVRVTSgxKTsKQEAgLTE3NzQsNyArMTc3NCw3IEBAIHRl eHRfc3RhcnRzX3dpdGgoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAoIWxjX2NvbGxhdGVfaXNfYyhj b2xsaWQpKQogCQlteWxvY2FsZSA9IHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihjb2xsaWQp OwogCi0JaWYgKG15bG9jYWxlICYmICFteWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKKwlpZiAoIXBn X2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygibm9u ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBzdWJzdHJpbmcg c2VhcmNoZXMiKSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5p dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCmluZGV4IGE5OTBjODMzYzUu LmM1NTI4Y2JmNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTMxNyw2ICszMTcs NyBAQCBDaGVja015RGF0YWJhc2UoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBhbV9zdXBlcnVzZXIs IGJvb2wgb3ZlcnJpZGVfYWxsb3dfY29ubmVjdAogCWNoYXIJICAgKmNvbGxhdGU7CiAJY2hhcgkg ICAqY3R5cGU7CiAJY2hhcgkgICAqaWN1bG9jYWxlOworCWNoYXIJICAgKmNvbGx2ZXJzaW9uc3Ry OwogCiAJLyogRmV0Y2ggb3VyIHBnX2RhdGFiYXNlIHJvdyBub3JtYWxseSwgdmlhIHN5c2NhY2hl ICovCiAJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJZEdldERhdHVt KE15RGF0YWJhc2VJZCkpOwpAQCAtNDI0LDM1ICs0MjUsMzIgQEAgQ2hlY2tNeURhdGFiYXNlKGNv bnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29sIG92ZXJyaWRlX2FsbG93X2Nv bm5lY3QKIAkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9w Z19kYXRhYmFzZV9kYXRpY3Vsb2NhbGUsICZpc251bGwpOwogCQlBc3NlcnQoIWlzbnVsbCk7CiAJ CWljdWxvY2FsZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwotCQltYWtlX2ljdV9jb2xs YXRvcihpY3Vsb2NhbGUsICZkZWZhdWx0X2xvY2FsZSk7CiAJfQogCWVsc2UKIAkJaWN1bG9jYWxl ID0gTlVMTDsKIAotCWRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID0gZGJmb3JtLT5kYXRsb2Nwcm92 aWRlcjsKKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwLCBBbnVtX3Bn X2RhdGFiYXNlX2RhdGNvbGx2ZXJzaW9uLAorCQkJCQkJCSZpc251bGwpOworCWlmICghaXNudWxs KQorCQljb2xsdmVyc2lvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCWVsc2UK KwkJY29sbHZlcnNpb25zdHIgPSBOVUxMOwogCi0JLyoKLQkgKiBEZWZhdWx0IGxvY2FsZSBpcyBj dXJyZW50bHkgYWx3YXlzIGRldGVybWluaXN0aWMuICBOb25kZXRlcm1pbmlzdGljCi0JICogbG9j YWxlcyBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBwYXR0ZXJuIG1hdGNoaW5nLCB3aGljaCB3b3Vs ZCBicmVhayBhCi0JICogbG90IG9mIHRoaW5ncyBpZiBhcHBsaWVkIGdsb2JhbGx5LgotCSAqLwot CWRlZmF1bHRfbG9jYWxlLmRldGVybWluaXN0aWMgPSB0cnVlOworCWluaXRfZGVmYXVsdF9sb2Nh bGUoZGJmb3JtLT5kYXRsb2Nwcm92aWRlciwKKwkJCQkJCWRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSA/IGljdWxvY2FsZSA6IGNvbGxhdGUsCisJCQkJCQlkYmZvcm0t PmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBpY3Vsb2NhbGUgOiBjdHlwZSwK KwkJCQkJCWNvbGx2ZXJzaW9uc3RyKTsKIAogCS8qCiAJICogQ2hlY2sgY29sbGF0aW9uIHZlcnNp b24uICBTZWUgc2ltaWxhciBjb2RlIGluCiAJICogcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9u KCkuICBOb3RlIHRoYXQgaGVyZSB3ZSB3YXJuIGluc3RlYWQgb2YgZXJyb3IKIAkgKiBpbiBhbnkg Y2FzZSwgc28gdGhhdCB3ZSBkb24ndCBwcmV2ZW50IGNvbm5lY3RpbmcuCiAJICovCi0JZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFzZV9kYXRj b2xsdmVyc2lvbiwKLQkJCQkJCQkmaXNudWxsKTsKLQlpZiAoIWlzbnVsbCkKKwlpZiAoY29sbHZl cnNpb25zdHIgIT0gTlVMTCkKIAl7CiAJCWNoYXIJICAgKmFjdHVhbF92ZXJzaW9uc3RyOwotCQlj aGFyCSAgICpjb2xsdmVyc2lvbnN0cjsKIAotCQljb2xsdmVyc2lvbnN0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoZGF0dW0pOwotCi0JCWFjdHVhbF92ZXJzaW9uc3RyID0gZ2V0X2NvbGxhdGlvbl9h Y3R1YWxfdmVyc2lvbihkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyLCBkYmZvcm0tPmRhdGxvY3Byb3Zp ZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBpY3Vsb2NhbGUgOiBjb2xsYXRlKTsKKwkJYWN0dWFs X3ZlcnNpb25zdHIgPSBkZWZhdWx0X2xvY2FsZV9jb2xsYXRpb25fdmVyc2lvbigpOwogCQlpZiAo IWFjdHVhbF92ZXJzaW9uc3RyKQogCQkJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJCWVsb2co V0FSTklORywKQEAgLTQ3MCw2ICs0NjgsOCBAQCBDaGVja015RGF0YWJhc2UoY29uc3QgY2hhciAq bmFtZSwgYm9vbCBhbV9zdXBlcnVzZXIsIGJvb2wgb3ZlcnJpZGVfYWxsb3dfY29ubmVjdAogCQkJ CQkJCSAib3IgYnVpbGQgUG9zdGdyZVNRTCB3aXRoIHRoZSByaWdodCBsaWJyYXJ5IHZlcnNpb24u IiwKIAkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihuYW1lKSkpKTsKIAl9CisJZWxzZQorCQljb2xs dmVyc2lvbnN0ciA9IE5VTEw7CiAKIAkvKiBNYWtlIHRoZSBsb2NhbGUgc2V0dGluZ3MgdmlzaWJs ZSBhcyBHVUMgdmFyaWFibGVzLCB0b28gKi8KIAlTZXRDb25maWdPcHRpb24oImxjX2NvbGxhdGUi LCBjb2xsYXRlLCBQR0NfSU5URVJOQUwsIFBHQ19TX0RZTkFNSUNfREVGQVVMVCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bn X2xvY2FsZS5oCmluZGV4IGNlYWIwZDQzMDcuLjBkN2JjMDUzNGYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2Fs ZS5oCkBAIC0xNSwyMiArMTUsNiBAQAogI2lmIGRlZmluZWQoTE9DQUxFX1RfSU5fWExPQ0FMRSkg fHwgZGVmaW5lZChXQ1NUT01CU19MX0lOX1hMT0NBTEUpCiAjaW5jbHVkZSA8eGxvY2FsZS5oPgog I2VuZGlmCi0jaWZkZWYgVVNFX0lDVQotI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgotI2VuZGlm Ci0KLSNpZmRlZiBVU0VfSUNVCi0vKgotICogdWNvbF9zdHJjb2xsVVRGOCgpIHdhcyBpbnRyb2R1 Y2VkIGluIElDVSA1MCwgYnV0IGl0IGlzIGJ1Z2d5IGJlZm9yZSBJQ1UgNTMuCi0gKiAoc2VlCi0g KiA8aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L2YxNDM4ZWM2LTIy YWEtNDAyOS05YTNiLTI2Zjc5ZDMzMGU3MiU0MG1hbml0b3UtbWFpbC5vcmc+KQotICovCi0jaWYg VV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTMKLSNkZWZpbmUgSEFWRV9VQ09MX1NUUkNPTExV VEY4IDEKLSNlbHNlCi0jdW5kZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4Ci0jZW5kaWYKLSNlbmRp ZgogCiAvKiB1c2UgZm9yIGxpYmMgbG9jYWxlIG5hbWVzICovCiAjZGVmaW5lIExPQ0FMRV9OQU1F X0JVRkxFTiAxMjgKQEAgLTY0LDM5ICs0OCwxMiBAQCBleHRlcm4gc3RydWN0IGxjb252ICpQR0xD X2xvY2FsZWNvbnYodm9pZCk7CiBleHRlcm4gdm9pZCBjYWNoZV9sb2NhbGVfdGltZSh2b2lkKTsK IAogCi0vKgotICogV2UgZGVmaW5lIG91ciBvd24gd3JhcHBlciBhcm91bmQgbG9jYWxlX3Qgc28g d2UgY2FuIGtlZXAgdGhlIHNhbWUKLSAqIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIGFsbCBidWls ZHMsIHdoaWxlIG5vdCBoYXZpbmcgdG8gY3JlYXRlIGEKLSAqIGZha2UgdmVyc2lvbiBvZiB0aGUg c3RhbmRhcmQgdHlwZSBsb2NhbGVfdCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4KLSAqIHBnX2xv Y2FsZV90IGlzIG9jY2FzaW9uYWxseSBjaGVja2VkIGZvciB0cnV0aCwgc28gbWFrZSBpdCBhIHBv aW50ZXIuCi0gKi8KLXN0cnVjdCBwZ19sb2NhbGVfc3RydWN0Ci17Ci0JY2hhcgkJcHJvdmlkZXI7 Ci0JYm9vbAkJZGV0ZXJtaW5pc3RpYzsKLQl1bmlvbgotCXsKLSNpZmRlZiBIQVZFX0xPQ0FMRV9U Ci0JCWxvY2FsZV90CWx0OwotI2VuZGlmCi0jaWZkZWYgVVNFX0lDVQotCQlzdHJ1Y3QKLQkJewot CQkJY29uc3QgY2hhciAqbG9jYWxlOwotCQkJVUNvbGxhdG9yICAqdWNvbDsKLQkJfQkJCWljdTsK LSNlbmRpZgotCQlpbnQJCQlkdW1teTsJCS8qIGluIGNhc2Ugd2UgaGF2ZSBuZWl0aGVyIExPQ0FM RV9UIG5vciBJQ1UgKi8KLQl9CQkJaW5mbzsKLX07Ci0KIHR5cGVkZWYgc3RydWN0IHBnX2xvY2Fs ZV9zdHJ1Y3QgKnBnX2xvY2FsZV90OwogCi1leHRlcm4gUEdETExJTVBPUlQgc3RydWN0IHBnX2xv Y2FsZV9zdHJ1Y3QgZGVmYXVsdF9sb2NhbGU7Ci0KLWV4dGVybiB2b2lkIG1ha2VfaWN1X2NvbGxh dG9yKGNvbnN0IGNoYXIgKmljdWxvY3N0ciwKLQkJCQkJCQkgIHN0cnVjdCBwZ19sb2NhbGVfc3Ry dWN0ICpyZXN1bHRwKTsKLQorZXh0ZXJuIHZvaWQgaW5pdF9kZWZhdWx0X2xvY2FsZShjaGFyIHBy b3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsYXRlLAorCQkJCQkJCQljb25zdCBjaGFyICpjdHlwZSwg Y29uc3QgY2hhciAqdmVyc2lvbik7CitleHRlcm4gY2hhciAqZGVmYXVsdF9sb2NhbGVfY29sbGF0 aW9uX3ZlcnNpb24odm9pZCk7CitleHRlcm4gYm9vbCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhw Z19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIHBnX2xvY2FsZV90IHBnX25ld2xvY2FsZV9mcm9t X2NvbGxhdGlvbihPaWQgY29sbGlkKTsKIAogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25fYWN0 dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKTsK QEAgLTExNCwxMCArNzEsNiBAQCBleHRlcm4gc2l6ZV90IHBnX3N0cnhmcm1fcHJlZml4KGNoYXIg KmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAogZXh0ZXJuIHNpemVfdCBw Z19zdHJueGZybV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFy ICpzcmMsCiAJCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogCi0j aWZkZWYgVVNFX0lDVQotZXh0ZXJuIGludDMyX3QgaWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91 Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Ci1leHRlcm4gaW50MzJfdCBp Y3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwgaW50 MzJfdCBsZW5fdWNoYXIpOwotI2VuZGlmCiBleHRlcm4gdm9pZCBjaGVja19pY3VfbG9jYWxlKGNv bnN0IGNoYXIgKmljdV9sb2NhbGUpOwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBmcm9t L3RvIGxpYmMncyB3Y2hhcl90LCAqbm90KiBwZ193Y2hhcl90ICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bn X2xvY2FsZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjMzNDY1YWQ5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGVfaW50ZXJuYWwuaApAQCAtMCwwICsxLDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog UG9zdGdyZVNRTCBsb2NhbGUgdXRpbGl0aWVzCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMvcGdf bG9jYWxlX2ludGVybmFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAyMiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworCisjaWZuZGVmIF9QR19MT0NBTEVfSU5URVJOQUxfCisjZGVmaW5lIF9QR19MT0NBTEVfSU5U RVJOQUxfCisKKyNpZmRlZiBVU0VfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjZW5k aWYKKworI2lmZGVmIFVTRV9JQ1UKKy8qCisgKiB1Y29sX3N0cmNvbGxVVEY4KCkgd2FzIGludHJv ZHVjZWQgaW4gSUNVIDUwLCBidXQgaXQgaXMgYnVnZ3kgYmVmb3JlIElDVSA1My4KKyAqIChzZWUK KyAqIDxodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvZjE0MzhlYzYt MjJhYS00MDI5LTlhM2ItMjZmNzlkMzMwZTcyJTQwbWFuaXRvdS1tYWlsLm9yZz4pCisgKi8KKyNp ZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1MworI2RlZmluZSBIQVZFX1VDT0xfU1RSQ09M TFVURjggMQorI2Vsc2UKKyN1bmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKKyNlbmRpZgorI2Vu ZGlmCisKKy8qCisgKiBXZSBkZWZpbmUgb3VyIG93biB3cmFwcGVyIGFyb3VuZCBsb2NhbGVfdCBz byB3ZSBjYW4ga2VlcCB0aGUgc2FtZQorICogZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYWxsIGJ1 aWxkcywgd2hpbGUgbm90IGhhdmluZyB0byBjcmVhdGUgYQorICogZmFrZSB2ZXJzaW9uIG9mIHRo ZSBzdGFuZGFyZCB0eXBlIGxvY2FsZV90IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgorICogcGdf bG9jYWxlX3QgaXMgb2NjYXNpb25hbGx5IGNoZWNrZWQgZm9yIHRydXRoLCBzbyBtYWtlIGl0IGEg cG9pbnRlci4KKyAqLworc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKK3sKKwljaGFyCQlwcm92aWRl cjsKKwlib29sCQlkZXRlcm1pbmlzdGljOworCWNoYXIJICAgKmNvbGxhdGU7CisJY2hhcgkgICAq Y3R5cGU7CisJdW5pb24KKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlzdHJ1Y3QKKwkJewor CQkJbG9jYWxlX3QJbHQ7CisJCX0JCQlsaWJjOworI2VuZGlmCisjaWZkZWYgVVNFX0lDVQorCQlz dHJ1Y3QKKwkJeworCQkJVUNvbGxhdG9yCSp1Y29sOworCQl9CQkJaWN1OworI2VuZGlmCisJCWlu dAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5laXRoZXIgTE9DQUxFX1Qgbm9yIElDVSAq LworCX0JCQlpbmZvOworfTsKKworI2lmZGVmIFVTRV9JQ1UKK2V4dGVybiBpbnQzMl90IGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpOworZXh0ZXJuIGludDMyX3QgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29uc3Qg VUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKTsKKyNlbmRpZgorCisjZW5kaWYJ CQkJCQkJLyogX1BHX0xPQ0FMRV9JTlRFUk5BTF8gKi8KLS0gCjIuMzQuMQoK --=-HN8GqdZSiO/qo3uzBaZ6 Content-Disposition: attachment; filename*0=v2-0004-Add-method-structure-toward-ICU-multi-library-sup.pat; filename*1=ch Content-Type: text/x-patch; name="v2-0004-Add-method-structure-toward-ICU-multi-library-sup.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkYWVmNGM1ZjZlYmY2Y2Q3M2RjYWU1NDAyZmViNWVjMjY5YTUwNjUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDcgRGVjIDIwMjIgMTE6MDc6MzEgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyIDQvNl0gQWRk IG1ldGhvZCBzdHJ1Y3R1cmUsIHRvd2FyZCBJQ1UgbXVsdGktbGlicmFyeQogc3VwcG9ydC4KCklu dHJvZHVjZSBzdHJ1Y3R1cmUgcGdfaWN1X2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRv IGVhY2gKcmVxdWlyZWQgSUNVIG1ldGhvZCwgYW5kIHN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19s b2NhbGVfdC4gRWFjaCBjYWxsCnRvIGFuIElDVSBmdW5jdGlvbiBpbnN0ZWFkIGdvZXMgdGhyb3Vn aCB0aGlzIHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQg YnkgYSBub24tYnVpbHRpbiBJQ1UgbGlicmFyeS4KClRoaXMgaXMgYSBzdGVwIHRvd2FyZCBzdXBw b3J0IGZvciBtdWx0aXBsZSBJQ1UgbGlicmFyaWVzLCB0byBhbGxvdwpjb250cm9sIG92ZXIgcHJl Y2lzZWx5IHdoaWNoIHZlcnNpb24gb2YgYSBsaWJyYXJ5IGlzIHVzZWQgYW5kIHByZXZlbnQKcHJv YmxlbXMgZnJvbSBzdWJ0bGUgY2hhbmdlcyBpbiBjb2xsYXRpb24gb3JkZXIuCgpBdXRob3I6IFRo b21hcyBNdW5ybywgSmVmZiBEYXZpcwotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlv bmNtZHMuYyAgIHwgIDE3ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jICAg ICB8ICA2NyArKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAg fCAyMjcgKysrKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9j YWxlX2ludGVybmFsLmggfCAxMTMgKysrKysrKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDMyMiBp bnNlcnRpb25zKCspLCAxMDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jCmluZGV4IDllODRkYTQ4OTEuLjE2YjFiY2JkYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j b2xsYXRpb25jbWRzLmMKQEAgLTU2MCwxMyArNTYwLDE0IEBAIGdldF9pY3VfbGFuZ3VhZ2VfdGFn KGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB7CiAJY2hhcgkJYnVmW1VMT0NfRlVMTE5BTUVfQ0FQ QUNJVFldOwogCVVFcnJvckNvZGUJc3RhdHVzOworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBn ZXRfYnVpbHRpbl9pY3VfbGlicmFyeSgpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCXVs b2NfdG9MYW5ndWFnZVRhZyhsb2NhbGVuYW1lLCBidWYsIHNpemVvZihidWYpLCB0cnVlLCAmc3Rh dHVzKTsKKwlpY3VsaWItPnRvTGFuZ3VhZ2VUYWcobG9jYWxlbmFtZSwgYnVmLCBzaXplb2YoYnVm KSwgdHJ1ZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb252ZXJ0IGxvY2FsZSBuYW1lIFwiJXNcIiB0 byBsYW5ndWFnZSB0YWc6ICVzIiwKLQkJCQkJCWxvY2FsZW5hbWUsIHVfZXJyb3JOYW1lKHN0YXR1 cykpKSk7CisJCQkJCQlsb2NhbGVuYW1lLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwog CiAJcmV0dXJuIHBzdHJkdXAoYnVmKTsKIH0KQEAgLTU4NSwxMSArNTg2LDEyIEBAIGdldF9pY3Vf bG9jYWxlX2NvbW1lbnQoY29uc3QgY2hhciAqbG9jYWxlbmFtZSkKIAlpbnQzMgkJbGVuX3VjaGFy OwogCWludDMyCQlpOwogCWNoYXIJICAgKnJlc3VsdDsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGli ID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKIAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsK LQlsZW5fdWNoYXIgPSB1bG9jX2dldERpc3BsYXlOYW1lKGxvY2FsZW5hbWUsICJlbiIsCi0JCQkJ CQkJCQlkaXNwbGF5bmFtZSwgbGVuZ3Rob2YoZGlzcGxheW5hbWUpLAotCQkJCQkJCQkJJnN0YXR1 cyk7CisJbGVuX3VjaGFyID0gaWN1bGliLT5nZXREaXNwbGF5TmFtZShsb2NhbGVuYW1lLCAiZW4i LAorCQkJCQkJCQkJICAgZGlzcGxheW5hbWUsIGxlbmd0aG9mKGRpc3BsYXluYW1lKSwKKwkJCQkJ CQkJCSAgICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIE5VTEw7 CQkJLyogbm8gZ29vZCByZWFzb24gdG8gcmFpc2UgYW4gZXJyb3IgKi8KIApAQCAtODA5LDEyICs4 MTEsMTMgQEAgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAj aWZkZWYgVVNFX0lDVQogCXsKIAkJaW50CQkJaTsKKwkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9 IGdldF9idWlsdGluX2ljdV9saWJyYXJ5KCk7CiAKIAkJLyoKIAkJICogU3RhcnQgdGhlIGxvb3Ag YXQgLTEgdG8gc25lYWsgaW4gdGhlIHJvb3QgbG9jYWxlIHdpdGhvdXQgdG9vIG11Y2gKIAkJICog Y29kZSBkdXBsaWNhdGlvbi4KIAkJICovCi0JCWZvciAoaSA9IC0xOyBpIDwgdWxvY19jb3VudEF2 YWlsYWJsZSgpOyBpKyspCisJCWZvciAoaSA9IC0xOyBpIDwgaWN1bGliLT5jb3VudEF2YWlsYWJs ZSgpOyBpKyspCiAJCXsKIAkJCWNvbnN0IGNoYXIgKm5hbWU7CiAJCQljaGFyCSAgICpsYW5ndGFn OwpAQCAtODI1LDcgKzgyOCw3IEBAIHBnX2ltcG9ydF9zeXN0ZW1fY29sbGF0aW9ucyhQR19GVU5D VElPTl9BUkdTKQogCQkJaWYgKGkgPT0gLTEpCiAJCQkJbmFtZSA9ICIiOwkJLyogSUNVIHJvb3Qg bG9jYWxlICovCiAJCQllbHNlCi0JCQkJbmFtZSA9IHVsb2NfZ2V0QXZhaWxhYmxlKGkpOworCQkJ CW5hbWUgPSBpY3VsaWItPmdldEF2YWlsYWJsZShpKTsKIAogCQkJbGFuZ3RhZyA9IGdldF9pY3Vf bGFuZ3VhZ2VfdGFnKG5hbWUpOwogCQkJaWN1bG9jc3RyID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9O VU0gPj0gNTQgPyBsYW5ndGFnIDogbmFtZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmlu ZGV4IGE0YmM3ZmE1ZjUuLjI4OWFhNTY5ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcu YwpAQCAtMTYwMCw2ICsxNjAwLDExIEBAIHR5cGVkZWYgaW50MzJfdCAoKklDVV9Db252ZXJ0X0Z1 bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAJCQkJCQkJCQkgY29uc3Qg VUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCiAJCQkJCQkJCQkgY29uc3QgY2hhciAqbG9j YWxlLAogCQkJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwordHlwZWRlZiBpbnQzMl90 ICgqSUNVX0NvbnZlcnRfQklfRnVuYykgKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0 eSwKKwkJCQkJCQkJCQljb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJ CQkJCQlVQnJlYWtJdGVyYXRvciAqYmksCisJCQkJCQkJCQkJY29uc3QgY2hhciAqbG9jYWxlLAor CQkJCQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwogCiBzdGF0aWMgaW50MzJfdAogaWN1 X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxl LApAQCAtMTYwNyw2ICsxNjEyLDcgQEAgaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5j IGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLAogewogCVVFcnJvckNvZGUJc3RhdHVzOwogCWlu dDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15 bG9jYWxlKTsKIAogCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNh bWUgbGVuZ3RoICovCiAJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1 ZmZfZGVzdCkpOwpAQCAtMTYyNCwxOCArMTYzMCw0MiBAQCBpY3VfY29udmVydF9jYXNlKElDVV9D b252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2NhbGUsCiAJfQogCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCJjYXNlIGNvbnZlcnNp b24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJKGVycm1zZygiY2Fz ZSBjb252ZXJzaW9uIGZhaWxlZDogJXMiLAorCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVz KSkpKTsKIAlyZXR1cm4gbGVuX2Rlc3Q7CiB9CiAKKy8qCisgKiBMaWtlIGljdV9jb252ZXJ0X2Nh c2UsIGJ1dCBmdW5jIHRha2VzIGEgYnJlYWsgaXRlcmF0b3IgKHdoaWNoIHdlIGRvbid0CisgKiBt YWtlIHVzZSBvZikuCisgKi8KIHN0YXRpYyBpbnQzMl90Ci11X3N0clRvVGl0bGVfZGVmYXVsdF9C SShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCi0JCQkJCQljb25zdCBVQ2hhciAq c3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLQkJCQkJCWNvbnN0IGNoYXIgKmxvY2FsZSwKLQkJCQkJ CVVFcnJvckNvZGUgKnBFcnJvckNvZGUpCitpY3VfY29udmVydF9jYXNlX2JpKElDVV9Db252ZXJ0 X0JJX0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2NhbGUsCisJCQkJCVVDaGFyICoqYnVmZl9k ZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMyX3QgbGVuX3NvdXJjZSkKIHsKLQlyZXR1cm4g dV9zdHJUb1RpdGxlKGRlc3QsIGRlc3RDYXBhY2l0eSwgc3JjLCBzcmNMZW5ndGgsCi0JCQkJCQlO VUxMLCBsb2NhbGUsIHBFcnJvckNvZGUpOworCVVFcnJvckNvZGUJc3RhdHVzOworCWludDMyX3QJ CWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxl KTsKKworCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVu Z3RoICovCisJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVz dCkpOworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVz dCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291cmNlLCBOVUxMLAorCQkJCQlteWxvY2Fs ZS0+Y3R5cGUsICZzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJS T1IpCisJeworCQkvKiB0cnkgYWdhaW4gd2l0aCBhZGp1c3RlZCBsZW5ndGggKi8KKwkJcGZyZWUo KmJ1ZmZfZGVzdCk7CisJCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXplb2YoKipi dWZmX2Rlc3QpKTsKKwkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCQlsZW5fZGVzdCA9IGZ1bmMo KmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291cmNlLCBOVUxMLAorCQkJ CQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsKKwl9CisJaWYgKFVfRkFJTFVSRShzdGF0dXMp KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6 ICVzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJcmV0dXJuIGxlbl9k ZXN0OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0lDVSAqLwpAQCAtMTcwMSwxMSArMTczMSwx MiBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29s bGlkKQogCQkJaW50MzJfdAkJbGVuX2NvbnY7CiAJCQlVQ2hhcgkgICAqYnVmZl91Y2hhcjsKIAkJ CVVDaGFyCSAgICpidWZmX2NvbnY7CisJCQlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gUEdfSUNV X0xJQihteWxvY2FsZSk7CiAKLQkJCWxlbl91Y2hhciA9IGljdV90b191Y2hhcigmYnVmZl91Y2hh ciwgYnVmZiwgbmJ5dGVzKTsKLQkJCWxlbl9jb252ID0gaWN1X2NvbnZlcnRfY2FzZSh1X3N0clRv TG93ZXIsIG15bG9jYWxlLAorCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKGljdWxpYiwgJmJ1 ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7CisJCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2Uo aWN1bGliLT5zdHJUb0xvd2VyLCBteWxvY2FsZSwKIAkJCQkJCQkJCQkmYnVmZl9jb252LCBidWZm X3VjaGFyLCBsZW5fdWNoYXIpOwotCQkJaWN1X2Zyb21fdWNoYXIoJnJlc3VsdCwgYnVmZl9jb252 LCBsZW5fY29udik7CisJCQlpY3VfZnJvbV91Y2hhcihpY3VsaWIsICZyZXN1bHQsIGJ1ZmZfY29u diwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVmZl91Y2hhcik7CiAJCQlwZnJlZShidWZmX2NvbnYp OwogCQl9CkBAIC0xODIzLDExICsxODU0LDEyIEBAIHN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1 ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJCQlsZW5fY29udjsKIAkJCVVDaGFy CSAgICpidWZmX3VjaGFyOwogCQkJVUNoYXIJICAgKmJ1ZmZfY29udjsKKwkJCXBnX2ljdV9saWJy YXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKIAotCQkJbGVuX3VjaGFyID0gaWN1 X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3Vf Y29udmVydF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2NhbGUsCisJCQlsZW5fdWNoYXIgPSBpY3Vf dG9fdWNoYXIoaWN1bGliLCAmYnVmZl91Y2hhciwgYnVmZiwgbmJ5dGVzKTsKKwkJCWxlbl9jb252 ID0gaWN1X2NvbnZlcnRfY2FzZShpY3VsaWItPnN0clRvVXBwZXIsIG15bG9jYWxlLAogCQkJCQkJ CQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hh cigmcmVzdWx0LCBidWZmX2NvbnYsIGxlbl9jb252KTsKKwkJCWljdV9mcm9tX3VjaGFyKGljdWxp YiwgJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CiAJCQlwZnJlZShidWZmX3VjaGFyKTsK IAkJCXBmcmVlKGJ1ZmZfY29udik7CiAJCX0KQEAgLTE5NDYsMTEgKzE5NzgsMTIgQEAgc3RyX2lu aXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJ CWxlbl9jb252OwogCQkJVUNoYXIJICAgKmJ1ZmZfdWNoYXI7CiAJCQlVQ2hhcgkgICAqYnVmZl9j b252OworCQkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IFBHX0lDVV9MSUIobXlsb2NhbGUpOwog Ci0JCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7 Ci0JCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2UodV9zdHJUb1RpdGxlX2RlZmF1bHRfQkks IG15bG9jYWxlLAotCQkJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7 Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZmX2NvbnYsIGxlbl9jb252KTsKKwkJCWxl bl91Y2hhciA9IGljdV90b191Y2hhcihpY3VsaWIsICZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMp OworCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlX2JpKGljdWxpYi0+c3RyVG9UaXRsZSwg bXlsb2NhbGUsCisJCQkJCQkJCQkJICAgJmJ1ZmZfY29udiwgYnVmZl91Y2hhciwgbGVuX3VjaGFy KTsKKwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29u dik7CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBmcmVlKGJ1ZmZfY29udik7CiAJCX0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCAwYTE5ODQ1ZGY0Li40ZGFmZjhiN2I1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC03MCw2ICs3MCw4IEBACiAKICNpZmRlZiBVU0Vf SUNVCiAjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bG9jZGF0 YS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgogI2VuZGlmCiAKICNpZmRlZiBfX0dM SUJDX18KQEAgLTEzNSw2ICsxMzcsNyBAQCBzdGF0aWMgY2hhciAqSXNvTG9jYWxlTmFtZShjb25z dCBjaGFyICopOwogc3RhdGljIHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVMTDsKIAog I2lmZGVmIFVTRV9JQ1UKKwogLyoKICAqIENvbnZlcnRlciBvYmplY3QgZm9yIGNvbnZlcnRpbmcg YmV0d2VlbiBJQ1UncyBVQ2hhciBzdHJpbmdzIGFuZCBDIHN0cmluZ3MKICAqIGluIGRhdGFiYXNl IGVuY29kaW5nLiAgU2luY2UgdGhlIGRhdGFiYXNlIGVuY29kaW5nIGRvZXNuJ3QgY2hhbmdlLCB3 ZSBvbmx5CkBAIC0xNDIsMTMgKzE0NSwxNyBAQCBzdGF0aWMgcGdfbG9jYWxlX3QgZGVmYXVsdF9s b2NhbGUgPSBOVUxMOwogICovCiBzdGF0aWMgVUNvbnZlcnRlciAqaWN1X2NvbnZlcnRlciA9IE5V TEw7CiAKLXN0YXRpYyB2b2lkIGluaXRfaWN1X2NvbnZlcnRlcih2b2lkKTsKLXN0YXRpYyBzaXpl X3QgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKK3N0YXRpYyB2b2lkIGluaXRf aWN1X2NvbnZlcnRlcihwZ19pY3VfbGlicmFyeSAqaWN1bGliKTsKK3N0YXRpYyBzaXplX3QgdWNo YXJfbGVuZ3RoKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsCisJCQkJCQkgICBVQ29udmVydGVyICpj b252ZXJ0ZXIsCiAJCQkJCQkgICBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pOwotc3RhdGlj IGludDMyX3QgdWNoYXJfY29udmVydChVQ29udmVydGVyICpjb252ZXJ0ZXIsCitzdGF0aWMgaW50 MzJfdCB1Y2hhcl9jb252ZXJ0KHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsCisJCQkJCQkJIFVDb252 ZXJ0ZXIgKmNvbnZlcnRlciwKIAkJCQkJCQkgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwK IAkJCQkJCQkgY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgc3JjbGVuKTsKLXN0YXRpYyB2b2lkIGlj dV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoVUNvbGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hh ciAqbG9jKTsKK3N0YXRpYyB2b2lkIGljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMocGdfaWN1 X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCQkJCQkgVUNvbGxhdG9yICpjb2xsYXRvciwKKwkJCQkJ CQkJCQkgY29uc3QgY2hhciAqbG9jKTsKICNlbmRpZgogCiAvKgpAQCAtMTQ1NSw2ICsxNDYyLDU5 IEBAIHJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQogfQog I2VuZGlmCQkJCQkJCS8qIEhBVkVfTE9DQUxFX1QgKi8KIAorI2lmZGVmIFVTRV9JQ1UKK3BnX2lj dV9saWJyYXJ5ICoKK2dldF9idWlsdGluX2ljdV9saWJyYXJ5KCkKK3sKKwlwZ19pY3VfbGlicmFy eSAqbGliOworCisJLyoKKwkgKiBUaGVzZSBhc3NpZ25tZW50cyB3aWxsIGZhaWwgdG8gY29tcGls ZSBpZiBhbiBpbmNvbXBhdGlibGUgQVBJIGNoYW5nZSBpcworCSAqIG1hZGUgdG8gc29tZSBmdXR1 cmUgdmVyc2lvbiBvZiBJQ1UsIGF0IHdoaWNoIHBvaW50IHdlIG1pZ2h0IG5lZWQgdG8KKwkgKiBj b25zaWRlciBzcGVjaWFsIHRyZWF0bWVudCBmb3IgZGlmZmVyZW50IG1ham9yIHZlcnNpb24gcmFu Z2VzLCB3aXRoCisJICogaW50ZXJtZWRpYXRlIHRyYW1wb2xpbmUgZnVuY3Rpb25zLgorCSAqLwor CWxpYiA9IHBhbGxvYzAoc2l6ZW9mKCpsaWIpKTsKKwlsaWItPmdldElDVVZlcnNpb24gPSB1X2dl dFZlcnNpb247CisJbGliLT5nZXRVbmljb2RlVmVyc2lvbiA9IHVfZ2V0VW5pY29kZVZlcnNpb247 CisJbGliLT5nZXRDTERSVmVyc2lvbiA9IHVsb2NkYXRhX2dldENMRFJWZXJzaW9uOworCWxpYi0+ b3BlbkNvbGxhdG9yID0gdWNvbF9vcGVuOworCWxpYi0+Y2xvc2VDb2xsYXRvciA9IHVjb2xfY2xv c2U7CisJbGliLT5nZXRDb2xsYXRvclZlcnNpb24gPSB1Y29sX2dldFZlcnNpb247CisJbGliLT5n ZXRVQ0FWZXJzaW9uID0gdWNvbF9nZXRVQ0FWZXJzaW9uOworCWxpYi0+dmVyc2lvblRvU3RyaW5n ID0gdV92ZXJzaW9uVG9TdHJpbmc7CisJbGliLT5zdHJjb2xsID0gdWNvbF9zdHJjb2xsOworCWxp Yi0+c3RyY29sbFVURjggPSB1Y29sX3N0cmNvbGxVVEY4OworCWxpYi0+Z2V0U29ydEtleSA9IHVj b2xfZ2V0U29ydEtleTsKKwlsaWItPm5leHRTb3J0S2V5UGFydCA9IHVjb2xfbmV4dFNvcnRLZXlQ YXJ0OworCWxpYi0+c2V0VVRGOCA9IHVpdGVyX3NldFVURjg7CisJbGliLT5lcnJvck5hbWUgPSB1 X2Vycm9yTmFtZTsKKwlsaWItPnN0clRvVXBwZXIgPSB1X3N0clRvVXBwZXI7CisJbGliLT5zdHJU b0xvd2VyID0gdV9zdHJUb0xvd2VyOworCWxpYi0+c3RyVG9UaXRsZSA9IHVfc3RyVG9UaXRsZTsK KwlsaWItPnNldEF0dHJpYnV0ZSA9IHVjb2xfc2V0QXR0cmlidXRlOworCWxpYi0+b3BlbkNvbnZl cnRlciA9IHVjbnZfb3BlbjsKKwlsaWItPmNsb3NlQ29udmVydGVyID0gdWNudl9jbG9zZTsKKwls aWItPmZyb21VQ2hhcnMgPSB1Y252X2Zyb21VQ2hhcnM7CisJbGliLT50b1VDaGFycyA9IHVjbnZf dG9VQ2hhcnM7CisJbGliLT50b0xhbmd1YWdlVGFnID0gdWxvY190b0xhbmd1YWdlVGFnOworCWxp Yi0+Z2V0RGlzcGxheU5hbWUgPSB1bG9jX2dldERpc3BsYXlOYW1lOworCWxpYi0+Y291bnRBdmFp bGFibGUgPSB1bG9jX2NvdW50QXZhaWxhYmxlOworCWxpYi0+Z2V0QXZhaWxhYmxlID0gdWxvY19n ZXRBdmFpbGFibGU7CisKKwkvKgorCSAqIEFsc28gYXNzZXJ0IHRoZSBzaXplIG9mIGEgY291cGxl IG9mIHR5cGVzIHVzZWQgYXMgb3V0cHV0IGJ1ZmZlcnMsIGFzIGEKKwkgKiBjYW5hcnkgdG8gdGVs bCB1cyB0byBhZGQgZXh0cmEgcGFkZGluZyBpbiB0aGUgKHVubGlrZWx5KSBldmVudCB0aGF0IGEK KwkgKiBsYXRlciByZWxlYXNlIG1ha2VzIHRoZXNlIHZhbHVlcyBzbWFsbGVyLgorCSAqLworCVN0 YXRpY0Fzc2VydFN0bXQoVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIID09IDIwLAorCQkJCQkg InVfdmVyc2lvblRvU3RyaW5nIG91dHB1dCBidWZmZXIgc2l6ZSBjaGFuZ2VkIGluY29tcGF0aWJs eSIpOworCVN0YXRpY0Fzc2VydFN0bXQoVV9NQVhfVkVSU0lPTl9MRU5HVEggPT0gNCwKKwkJCQkJ ICJ1Y29sX2dldFZlcnNpb24gb3V0cHV0IGJ1ZmZlciBzaXplIGNoYW5nZWQgaW5jb21wYXRpYmx5 Iik7CisKKwlyZXR1cm4gbGliOworfQorI2VuZGlmCiAKIC8qCiAgKiBDb25zdHJ1Y3QgYSBuZXcg cGdfbG9jYWxlX3Qgb2JqZWN0LgpAQCAtMTU0NywyMCArMTYwNywyMiBAQCBwZ19uZXdsb2NhbGUo Y2hhciBwcm92aWRlciwgYm9vbCBpc2RlZmF1bHQsIGJvb2wgZGV0ZXJtaW5pc3RpYywKIAl7CiAJ CVVDb2xsYXRvciAgKmNvbGxhdG9yOwogCQlVRXJyb3JDb2RlCXN0YXR1czsKKwkJcGdfaWN1X2xp YnJhcnkgKmljdWxpYiA9IGdldF9idWlsdGluX2ljdV9saWJyYXJ5KCk7CiAKIAkJLyogY29sbGF0 b3IgbWF5IGJlIGxlYWtlZCBpZiB3ZSBlbmNvdW50ZXIgYW4gZXJyb3IgKi8KIAogCQlzdGF0dXMg PSBVX1pFUk9fRVJST1I7Ci0JCWNvbGxhdG9yID0gdWNvbF9vcGVuKGNvbGxhdGUsICZzdGF0dXMp OworCQljb2xsYXRvciA9IGljdWxpYi0+b3BlbkNvbGxhdG9yKGNvbGxhdGUsICZzdGF0dXMpOwog CQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJybXNn KCJjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAotCQkJCQkJ CWNvbGxhdGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQkJY29sbGF0ZSwgaWN1bGli LT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAogCQlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0g PCA1NCkKLQkJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoY29sbGF0b3IsIGNvbGxhdGUp OworCQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhpY3VsaWIsIGNvbGxhdG9yLCBjb2xs YXRlKTsKIAogCQlyZXN1bHQtPmluZm8uaWN1LnVjb2wgPSBjb2xsYXRvcjsKKwkJcmVzdWx0LT5p bmZvLmljdS5saWIgPSBpY3VsaWI7CiAJfQogI2VuZGlmCiAJZWxzZQpAQCAtMTYwNyw2ICsxNjY5 LDEwIEBAIHBnX21vdmVsb2NhbGUoTWVtb3J5Q29udGV4dCBtY3h0LCBwZ19sb2NhbGVfdCAqcGxv Y2FsZSkKIAl7CiAJCS8qIG5vdCBpbiBhIG1lbW9yeSBjb250ZXh0OyBqdXN0IHJlYXNzaWduIHRo ZSBwb2ludGVyICovCiAJCXJlc3VsdC0+aW5mby5pY3UudWNvbCA9IGxvY2FsZS0+aW5mby5pY3Uu dWNvbDsKKworCQlyZXN1bHQtPmluZm8uaWN1LmxpYiA9IE1lbW9yeUNvbnRleHRBbGxvYyhtY3h0 LCBzaXplb2YocGdfaWN1X2xpYnJhcnkpKTsKKwkJbWVtY3B5KHJlc3VsdC0+aW5mby5pY3UubGli LCBsb2NhbGUtPmluZm8uaWN1LmxpYiwgc2l6ZW9mKHBnX2ljdV9saWJyYXJ5KSk7CisJCXBmcmVl KGxvY2FsZS0+aW5mby5pY3UubGliKTsKIAl9CiAjZW5kaWYKIAllbHNlCkBAIC0xNjU2LDcgKzE3 MjIsOSBAQCBwZ19mcmVlbG9jYWxlKHBnX2xvY2FsZV90IGxvY2FsZSkKICNpZmRlZiBVU0VfSUNV CiAJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCXsKLQkJ dWNvbF9jbG9zZShsb2NhbGUtPmluZm8uaWN1LnVjb2wpOworCQlwZ19pY3VfbGlicmFyeSAqaWN1 bGliID0gUEdfSUNVX0xJQihsb2NhbGUpOworCQlpY3VsaWItPmNsb3NlQ29sbGF0b3IobG9jYWxl LT5pbmZvLmljdS51Y29sKTsKKwkJcGZyZWUobG9jYWxlLT5pbmZvLmljdS5saWIpOwogCX0KICNl bmRpZgogCWVsc2UKQEAgLTE4NTgsMTcgKzE5MjYsMTggQEAgZ2V0X2NvbGxhdGlvbl9hY3R1YWxf dmVyc2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpCiAJCVVF cnJvckNvZGUJc3RhdHVzOwogCQlVVmVyc2lvbkluZm8gdmVyc2lvbmluZm87CiAJCWNoYXIJCWJ1 ZltVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworCQlwZ19pY3VfbGlicmFyeQkqaWN1bGli ID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKIAogCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7 Ci0JCWNvbGxhdG9yID0gdWNvbF9vcGVuKGNvbGxjb2xsYXRlLCAmc3RhdHVzKTsKKwkJY29sbGF0 b3IgPSBpY3VsaWItPm9wZW5Db2xsYXRvcihjb2xsY29sbGF0ZSwgJnN0YXR1cyk7CiAJCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJtc2coImNvdWxk IG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQkJY29sbGNv bGxhdGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7Ci0JCXVjb2xfZ2V0VmVyc2lvbihjb2xsYXRv ciwgdmVyc2lvbmluZm8pOwotCQl1Y29sX2Nsb3NlKGNvbGxhdG9yKTsKKwkJCQkJCQljb2xsY29s bGF0ZSwgaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJaWN1bGliLT5nZXRDb2xsYXRv clZlcnNpb24oY29sbGF0b3IsIHZlcnNpb25pbmZvKTsKKwkJaWN1bGliLT5jbG9zZUNvbGxhdG9y KGNvbGxhdG9yKTsKIAotCQl1X3ZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uaW5mbywgYnVmKTsKKwkJ aWN1bGliLT52ZXJzaW9uVG9TdHJpbmcodmVyc2lvbmluZm8sIGJ1Zik7CiAJCWNvbGx2ZXJzaW9u ID0gcHN0cmR1cChidWYpOwogCX0KIAllbHNlCkBAIC0yMTIwLDE2ICsyMTg5LDE3IEBAIHBnX3N0 cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLAogCVVDaGFy CSp1Y2hhcjEsCiAJCQkqdWNoYXIyOwogCWludAkJIHJlc3VsdDsKKwlwZ19pY3VfbGlicmFyeSAq aWN1bGliID0gUEdfSUNVX0xJQihsb2NhbGUpOwogCiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSk7CiAjaWZkZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CiAJQXNz ZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKICNlbmRpZgogCi0JaW5pdF9p Y3VfY29udmVydGVyKCk7CisJaW5pdF9pY3VfY29udmVydGVyKGljdWxpYik7CiAKLQl1bGVuMSA9 IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcxLCBsZW4xKTsKLQl1bGVuMiA9IHVjaGFy X2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcyLCBsZW4yKTsKKwl1bGVuMSA9IHVjaGFyX2xlbmd0 aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIGFyZzEsIGxlbjEpOworCXVsZW4yID0gdWNoYXJfbGVu Z3RoKGljdWxpYiwgaWN1X2NvbnZlcnRlciwgYXJnMiwgbGVuMik7CiAKIAlidWZzaXplMSA9ICh1 bGVuMSArIDEpICogc2l6ZW9mKFVDaGFyKTsKIAlidWZzaXplMiA9ICh1bGVuMiArIDEpICogc2l6 ZW9mKFVDaGFyKTsKQEAgLTIxNDAsMTIgKzIyMTAsMTIgQEAgcGdfc3RybmNvbGxfaWN1X25vX3V0 ZjgoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsCiAJdWNoYXIxID0gKFVDaGFyICopIGJ1 ZjsKIAl1Y2hhcjIgPSAoVUNoYXIgKikgKGJ1ZiArIGJ1ZnNpemUxKTsKIAotCXVsZW4xID0gdWNo YXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hhcjEsIHVsZW4xICsgMSwgYXJnMSwgbGVuMSk7 Ci0JdWxlbjIgPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMiwgdWxlbjIgKyAx LCBhcmcyLCBsZW4yKTsKKwl1bGVuMSA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVy dGVyLCB1Y2hhcjEsIHVsZW4xICsgMSwgYXJnMSwgbGVuMSk7CisJdWxlbjIgPSB1Y2hhcl9jb252 ZXJ0KGljdWxpYiwgaWN1X2NvbnZlcnRlciwgdWNoYXIyLCB1bGVuMiArIDEsIGFyZzIsIGxlbjIp OwogCi0JcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJ CSAgdWNoYXIxLCB1bGVuMSwKLQkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisJcmVzdWx0ID0gaWN1 bGliLT5zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkgdWNoYXIxLCB1bGVu MSwKKwkJCQkJCQkgdWNoYXIyLCB1bGVuMik7CiAKIAlpZiAoYnVmICE9IHNidWYpCiAJCXBmcmVl KGJ1Zik7CkBAIC0yMTY2LDYgKzIyMzYsNyBAQCBwZ19zdHJuY29sbF9pY3UoY29uc3QgY2hhciAq YXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4yLAogCQkJCXBn X2xvY2FsZV90IGxvY2FsZSkKIHsKIAlpbnQgcmVzdWx0OworCXBnX2ljdV9saWJyYXJ5ICppY3Vs aWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfSUNVKTsKIApAQCAtMjE3NSwxMyArMjI0NiwxNCBAQCBwZ19zdHJuY29sbF9p Y3UoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVf dCBsZW4yLAogCQlVRXJyb3JDb2RlCXN0YXR1czsKIAogCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7 Ci0JCXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgobG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJ CQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCSAgYXJnMiwgbGVuMiwKLQkJCQkJCQkJICAmc3Rh dHVzKTsKKwkJcmVzdWx0ID0gaWN1bGliLT5zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVj b2wsCisJCQkJCQkJCQkgYXJnMSwgbGVuMSwKKwkJCQkJCQkJCSBhcmcyLCBsZW4yLAorCQkJCQkJ CQkJICZzdGF0dXMpOwogCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQllcmVwb3J0KEVSUk9S LAotCQkJCQkoZXJybXNnKCJjb2xsYXRpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1 cykpKSk7CisJCQkJCShlcnJtc2coImNvbGxhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCQlpY3Vs aWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCX0KIAllbHNlCiAjZW5kaWYKQEAgLTIzNjAsMTIg KzI0MzIsMTMgQEAgcGdfc3Rybnhmcm1faWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywg c2l6ZV90IHNyY2xlbiwgc2l6ZV90IGRlc3RzaXplLAogCWludDMyX3QJIHVsZW47CiAJc2l6ZV90 ICAgdWNoYXJfYnNpemU7CiAJU2l6ZQkgcmVzdWx0X2JzaXplOworCXBnX2ljdV9saWJyYXJ5ICpp Y3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKTsKIAotCWluaXRfaWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1 X2NvbnZlcnRlcihpY3VsaWIpOwogCi0JdWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVy LCBzcmMsIHNyY2xlbik7CisJdWxlbiA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0 ZXIsIHNyYywgc3JjbGVuKTsKIAogCXVjaGFyX2JzaXplID0gKHVsZW4gKyAxKSAqIHNpemVvZihV Q2hhcik7CiAKQEAgLTIzNzQsMTEgKzI0NDcsMTEgQEAgcGdfc3Rybnhmcm1faWN1KGNoYXIgKmRl c3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGRlc3RzaXplLAogCiAJ dWNoYXIgPSAoVUNoYXIgKikgYnVmOwogCi0JdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZl cnRlciwgdWNoYXIsIHVsZW4gKyAxLCBzcmMsIHNyY2xlbik7CisJdWxlbiA9IHVjaGFyX2NvbnZl cnQoaWN1bGliLCBpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3JjbGVuKTsK IAotCXJlc3VsdF9ic2l6ZSA9IHVjb2xfZ2V0U29ydEtleShsb2NhbGUtPmluZm8uaWN1LnVjb2ws Ci0JCQkJCQkJCSAgIHVjaGFyLCB1bGVuLAotCQkJCQkJCQkgICAodWludDhfdCAqKSBkZXN0LCBk ZXN0c2l6ZSk7CisJcmVzdWx0X2JzaXplID0gaWN1bGliLT5nZXRTb3J0S2V5KGxvY2FsZS0+aW5m by5pY3UudWNvbCwKKwkJCQkJCQkJCSAgdWNoYXIsIHVsZW4sCisJCQkJCQkJCQkgICh1aW50OF90 ICopIGRlc3QsIGRlc3RzaXplKTsKIAogCWlmIChidWYgIT0gc2J1ZikKIAkJcGZyZWUoYnVmKTsK QEAgLTI0MDcsMTMgKzI0ODAsMTQgQEAgcGdfc3Rybnhmcm1fcHJlZml4X2ljdV9ub191dGY4KGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAlVQ2hhcgkJCSp1Y2hh ciA9IE5VTEw7CiAJc2l6ZV90CQkJIHVjaGFyX2JzaXplOwogCVNpemUJCQkgcmVzdWx0X2JzaXpl OworCXBnX2ljdV9saWJyYXJ5CSppY3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAKIAlBc3Nl cnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKIAlBc3NlcnQoR2V0RGF0 YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwogCi0JaW5pdF9pY3VfY29udmVydGVyKCk7CisJ aW5pdF9pY3VfY29udmVydGVyKGljdWxpYik7CiAKLQl1bGVuID0gdWNoYXJfbGVuZ3RoKGljdV9j b252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsKKwl1bGVuID0gdWNoYXJfbGVuZ3RoKGljdWxpYiwgaWN1 X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOwogCiAJdWNoYXJfYnNpemUgPSAodWxlbiArIDEpICog c2l6ZW9mKFVDaGFyKTsKIApAQCAtMjQyMiwyMSArMjQ5NiwxOSBAQCBwZ19zdHJueGZybV9wcmVm aXhfaWN1X25vX3V0ZjgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVu LAogCiAJdWNoYXIgPSAoVUNoYXIgKikgYnVmOwogCi0JdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1 X2NvbnZlcnRlciwgdWNoYXIsIHVsZW4gKyAxLCBzcmMsIHNyY2xlbik7CisJdWxlbiA9IHVjaGFy X2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3Jj bGVuKTsKIAogCXVpdGVyX3NldFN0cmluZygmaXRlciwgdWNoYXIsIHVsZW4pOwogCXN0YXRlWzBd ID0gc3RhdGVbMV0gPSAwOwkvKiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KIAlzdGF0dXMgPSBV X1pFUk9fRVJST1I7Ci0JcmVzdWx0X2JzaXplID0gdWNvbF9uZXh0U29ydEtleVBhcnQobG9jYWxl LT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCSZpdGVyLAotCQkJCQkJCQkJCXN0YXRlLAotCQkJ CQkJCQkJCSh1aW50OF90ICopIGRlc3QsCi0JCQkJCQkJCQkJZGVzdHNpemUsCi0JCQkJCQkJCQkJ JnN0YXR1cyk7CisJcmVzdWx0X2JzaXplID0gaWN1bGliLT5uZXh0U29ydEtleVBhcnQoCisJCWxv Y2FsZS0+aW5mby5pY3UudWNvbCwgJml0ZXIsIHN0YXRlLAorCQkodWludDhfdCAqKSBkZXN0LCBk ZXN0c2l6ZSwgJnN0YXR1cyk7CisKIAlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycm1zZygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJ CQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0 dXMpKSkpOwogCiAJcmV0dXJuIHJlc3VsdF9ic2l6ZTsKIH0KQEAgLTI0NDUsNiArMjUxNyw3IEBA IHN0YXRpYyBzaXplX3QKIHBnX3N0cm54ZnJtX3ByZWZpeF9pY3UoY2hhciAqZGVzdCwgY29uc3Qg Y2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJCQkgICBzaXplX3QgZGVzdHNpemUsIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihs b2NhbGUpOwogCXNpemVfdCByZXN1bHQ7CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfSUNVKTsKQEAgLTI0NTUsMTkgKzI1MjgsMTcgQEAgcGdfc3Rybnhmcm1fcHJl Zml4X2ljdShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCXVp bnQzMl90CXN0YXRlWzJdOwogCQlVRXJyb3JDb2RlCXN0YXR1czsKIAotCQl1aXRlcl9zZXRVVEY4 KCZpdGVyLCBzcmMsIHNyY2xlbik7CisJCWljdWxpYi0+c2V0VVRGOCgmaXRlciwgc3JjLCBzcmNs ZW4pOwogCQlzdGF0ZVswXSA9IHN0YXRlWzFdID0gMDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWlu ICovCiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQkJcmVzdWx0ID0gdWNvbF9uZXh0U29ydEtl eVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJICAmaXRlciwKLQkJCQkJCQkJ CSAgc3RhdGUsCi0JCQkJCQkJCQkgICh1aW50OF90ICopIGRlc3QsCi0JCQkJCQkJCQkgIGRlc3Rz aXplLAotCQkJCQkJCQkJICAmc3RhdHVzKTsKKwkJcmVzdWx0ID0gaWN1bGliLT5uZXh0U29ydEtl eVBhcnQoCisJCQlsb2NhbGUtPmluZm8uaWN1LnVjb2wsICZpdGVyLCBzdGF0ZSwKKwkJCSh1aW50 OF90ICopIGRlc3QsIGRlc3RzaXplLCAmc3RhdHVzKTsKKwogCQlpZiAoVV9GQUlMVVJFKHN0YXR1 cykpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJzb3J0IGtleSBnZW5lcmF0aW9u IGZhaWxlZDogJXMiLAotCQkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQkJaWN1 bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAl9CiAJZWxzZQogCQlyZXN1bHQgPSBwZ19zdHJu eGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoZGVzdCwgc3JjLCBzcmNsZW4sIGRlc3RzaXplLApAQCAt MjY2Nyw3ICsyNzM4LDcgQEAgcGdfc3Rybnhmcm1fcHJlZml4KGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCiAjaWZkZWYgVVNFX0lDVQogc3RhdGljIHZvaWQK LWluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQoraW5pdF9pY3VfY29udmVydGVyKHBnX2ljdV9saWJy YXJ5ICppY3VsaWIpCiB7CiAJY29uc3QgY2hhciAqaWN1X2VuY29kaW5nX25hbWU7CiAJVUVycm9y Q29kZQlzdGF0dXM7CkBAIC0yNjg0LDExICsyNzU1LDExIEBAIGluaXRfaWN1X2NvbnZlcnRlcih2 b2lkKQogCQkJCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihHZXREYXRhYmFzZUVuY29kaW5nKCkpKSkp OwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWNvbnYgPSB1Y252X29wZW4oaWN1X2VuY29k aW5nX25hbWUsICZzdGF0dXMpOworCWNvbnYgPSBpY3VsaWItPm9wZW5Db252ZXJ0ZXIoaWN1X2Vu Y29kaW5nX25hbWUsICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9y dChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBJQ1UgY29udmVydGVyIGZvciBl bmNvZGluZyBcIiVzXCI6ICVzIiwKLQkJCQkJCWljdV9lbmNvZGluZ19uYW1lLCB1X2Vycm9yTmFt ZShzdGF0dXMpKSkpOworCQkJCQkJaWN1X2VuY29kaW5nX25hbWUsIGljdWxpYi0+ZXJyb3JOYW1l KHN0YXR1cykpKSk7CiAKIAlpY3VfY29udmVydGVyID0gY29udjsKIH0KQEAgLTI2OTcsMTQgKzI3 NjgsMTUgQEAgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiAgKiBGaW5kIGxlbmd0aCwgaW4gVUNo YXJzLCBvZiBnaXZlbiBzdHJpbmcgaWYgY29udmVydGVkIHRvIFVDaGFyIHN0cmluZy4KICAqLwog c3RhdGljIHNpemVfdAotdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3Qg Y2hhciAqc3RyLCBzaXplX3QgbGVuKQordWNoYXJfbGVuZ3RoKHBnX2ljdV9saWJyYXJ5ICppY3Vs aWIsIFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQog ewogCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCWludDMyX3QJCXVsZW47Ci0J dWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBOVUxMLCAwLCBzdHIsIGxlbiwgJnN0YXR1 cyk7CisJdWxlbiA9IGljdWxpYi0+dG9VQ2hhcnMoY29udmVydGVyLCBOVUxMLCAwLCBzdHIsIGxl biwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JVRkZF Ul9PVkVSRkxPV19FUlJPUikKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCIlcyBmYWls ZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCShl cnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsCisJCQkJCQlpY3VsaWItPmVy cm9yTmFtZShzdGF0dXMpKSkpOwogCXJldHVybiB1bGVuOwogfQogCkBAIC0yNzEzLDE2ICsyNzg1 LDE3IEBAIHVjaGFyX2xlbmd0aChVQ29udmVydGVyICpjb252ZXJ0ZXIsIGNvbnN0IGNoYXIgKnN0 ciwgc2l6ZV90IGxlbikKICAqIHJldHVybiB0aGUgbGVuZ3RoIChpbiBVQ2hhcnMpLgogICovCiBz dGF0aWMgaW50MzJfdAotdWNoYXJfY29udmVydChVQ29udmVydGVyICpjb252ZXJ0ZXIsIFVDaGFy ICpkZXN0LCBpbnQzMl90IGRlc3RsZW4sCi0JCQkgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNy Y2xlbikKK3VjaGFyX2NvbnZlcnQocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwgVUNvbnZlcnRlciAq Y29udmVydGVyLCBVQ2hhciAqZGVzdCwKKwkJCSAgaW50MzJfdCBkZXN0bGVuLCBjb25zdCBjaGFy ICpzcmMsIHNpemVfdCBzcmNsZW4pCiB7CiAJVUVycm9yQ29kZQlzdGF0dXMgPSBVX1pFUk9fRVJS T1I7CiAJaW50MzJfdAkJdWxlbjsKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JdWxlbiA9IHVj bnZfdG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBzcmMsIHNyY2xlbiwgJnN0YXR1 cyk7CisJdWxlbiA9IGljdWxpYi0+dG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBz cmMsIHNyY2xlbiwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0 KEVSUk9SLAotCQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVf ZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252 X3RvVUNoYXJzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAJcmV0dXJu IHVsZW47CiB9CiAKQEAgLTI3MzksMTYgKzI4MTIsMTcgQEAgdWNoYXJfY29udmVydChVQ29udmVy dGVyICpjb252ZXJ0ZXIsIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RsZW4sCiAgKiByZXN1bHQg bGVuZ3RoIGluc3RlYWQuCiAgKi8KIGludDMyX3QKLWljdV90b191Y2hhcihVQ2hhciAqKmJ1ZmZf dWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpCitpY3VfdG9fdWNoYXIocGdf aWN1X2xpYnJhcnkgKmljdWxpYiwgVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZm LAorCQkJIHNpemVfdCBuYnl0ZXMpCiB7CiAJaW50MzJfdCBsZW5fdWNoYXI7CiAKLQlpbml0X2lj dV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252ZXJ0ZXIoaWN1bGliKTsKIAotCWxlbl91Y2hh ciA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBidWZmLCBuYnl0ZXMpOworCWxlbl91Y2hh ciA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIGJ1ZmYsIG5ieXRlcyk7CiAK IAkqYnVmZl91Y2hhciA9IHBhbGxvYygobGVuX3VjaGFyICsgMSkgKiBzaXplb2YoKipidWZmX3Vj aGFyKSk7Ci0JbGVuX3VjaGFyID0gdWNoYXJfY29udmVydChpY3VfY29udmVydGVyLAorCWxlbl91 Y2hhciA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVyLAogCQkJCQkJCSAgKmJ1 ZmZfdWNoYXIsIGxlbl91Y2hhciArIDEsIGJ1ZmYsIG5ieXRlcyk7CiAKIAlyZXR1cm4gbGVuX3Vj aGFyOwpAQCAtMjc2NiwzMCArMjg0MCwzMiBAQCBpY3VfdG9fdWNoYXIoVUNoYXIgKipidWZmX3Vj aGFyLCBjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzKQogICogVGhlIHJlc3VsdCBzdHJp bmcgaXMgbnVsLXRlcm1pbmF0ZWQuCiAgKi8KIGludDMyX3QKLWljdV9mcm9tX3VjaGFyKGNoYXIg KipyZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcikKK2lj dV9mcm9tX3VjaGFyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsIGNoYXIgKipyZXN1bHQsIGNvbnN0 IFVDaGFyICpidWZmX3VjaGFyLAorCQkJICAgaW50MzJfdCBsZW5fdWNoYXIpCiB7CiAJVUVycm9y Q29kZQlzdGF0dXM7CiAJaW50MzJfdAkJbGVuX3Jlc3VsdDsKIAotCWluaXRfaWN1X2NvbnZlcnRl cigpOworCWluaXRfaWN1X2NvbnZlcnRlcihpY3VsaWIpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOwotCWxlbl9yZXN1bHQgPSB1Y252X2Zyb21VQ2hhcnMoaWN1X2NvbnZlcnRlciwgTlVMTCwg MCwKLQkJCQkJCQkJIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhciwgJnN0YXR1cyk7CisJbGVuX3Jlc3Vs dCA9IGljdWxpYi0+ZnJvbVVDaGFycyhpY3VfY29udmVydGVyLCBOVUxMLCAwLAorCQkJCQkJCQkJ YnVmZl91Y2hhciwgbGVuX3VjaGFyLCAmc3RhdHVzKTsKIAlpZiAoVV9GQUlMVVJFKHN0YXR1cykg JiYgc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogCQllcmVwb3J0KEVSUk9SLAog CQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl9mcm9tVUNoYXJzIiwKLQkJCQkJCXVf ZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkp OwogCiAJKnJlc3VsdCA9IHBhbGxvYyhsZW5fcmVzdWx0ICsgMSk7CiAKIAlzdGF0dXMgPSBVX1pF Uk9fRVJST1I7Ci0JbGVuX3Jlc3VsdCA9IHVjbnZfZnJvbVVDaGFycyhpY3VfY29udmVydGVyLCAq cmVzdWx0LCBsZW5fcmVzdWx0ICsgMSwKLQkJCQkJCQkJIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhciwg JnN0YXR1cyk7CisJbGVuX3Jlc3VsdCA9IGljdWxpYi0+ZnJvbVVDaGFycyhpY3VfY29udmVydGVy LCAqcmVzdWx0LAorCQkJCQkJCQkJbGVuX3Jlc3VsdCArIDEsIGJ1ZmZfdWNoYXIsCisJCQkJCQkJ CQlsZW5fdWNoYXIsICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9y dChFUlJPUiwKIAkJCQkoZXJybXNnKCIlcyBmYWlsZWQ6ICVzIiwgInVjbnZfZnJvbVVDaGFycyIs Ci0JCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJaWN1bGliLT5lcnJvck5hbWUo c3RhdHVzKSkpKTsKIAogCXJldHVybiBsZW5fcmVzdWx0OwogfQpAQCAtMjgwNSw3ICsyODgxLDgg QEAgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIs IGludDMyX3QgbGVuX3VjaGFyKQogICovCiBwZ19hdHRyaWJ1dGVfdW51c2VkKCkKIHN0YXRpYyB2 b2lkCi1pY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNv bnN0IGNoYXIgKmxvYykKK2ljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMocGdfaWN1X2xpYnJh cnkgKmljdWxpYiwgVUNvbGxhdG9yICpjb2xsYXRvciwKKwkJCQkJCQkgY29uc3QgY2hhciAqbG9j KQogewogCWNoYXIJICAgKnN0ciA9IGFzY190b2xvd2VyKGxvYywgc3RybGVuKGxvYykpOwogCkBA IC0yODc5LDcgKzI5NTYsNyBAQCBpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRv ciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYykKIAkJCQlzdGF0dXMgPSBVX0lMTEVHQUxfQVJH VU1FTlRfRVJST1I7CiAKIAkJCWlmIChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKQotCQkJCXVjb2xf c2V0QXR0cmlidXRlKGNvbGxhdG9yLCB1YXR0ciwgdXZhbHVlLCAmc3RhdHVzKTsKKwkJCQlpY3Vs aWItPnNldEF0dHJpYnV0ZShjb2xsYXRvciwgdWF0dHIsIHV2YWx1ZSwgJnN0YXR1cyk7CiAKIAkJ CS8qCiAJCQkgKiBQcmV0ZW5kIHRoZSBlcnJvciBjYW1lIGZyb20gdWNvbF9vcGVuKCksIGZvciBj b25zaXN0ZW50IGVycm9yCkBAIC0yODg4LDcgKzI5NjUsNyBAQCBpY3Vfc2V0X2NvbGxhdGlvbl9h dHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYykKIAkJCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycm1zZygiY291 bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKLQkJCQkJCQkJbG9j LCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJCQlsb2MsIGljdWxpYi0+ZXJyb3JOYW1l KHN0YXR1cykpKSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9w Z19sb2NhbGVfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5h bC5oCmluZGV4IDMzNDY1YWQ5MmQuLjU0NDQ1ZDhiODcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xv Y2FsZV9pbnRlcm5hbC5oCkBAIC0xNCw2ICsxNCw4IEBACiAjZGVmaW5lIF9QR19MT0NBTEVfSU5U RVJOQUxfCiAKICNpZmRlZiBVU0VfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+CisjaW5j bHVkZSA8dW5pY29kZS91Y252Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CiAjZW5kaWYK IApAQCAtMzAsNiArMzIsMTA0IEBACiAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgVVNFX0lDVQor LyoKKyAqIEFuIElDVSBsaWJyYXJ5IHZlcnNpb24gdGhhdCB3ZSdyZSBlaXRoZXIgbGlua2VkIGFn YWluc3Qgb3IgaGF2ZSBsb2FkZWQgYXQKKyAqIHJ1bnRpbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBnX2ljdV9saWJyYXJ5Cit7CisJaW50CQkJbWFqb3JfdmVyc2lvbjsKKwlpbnQJCQltaW5vcl92 ZXJzaW9uOworCXZvaWQJCSgqZ2V0SUNVVmVyc2lvbikgKFVWZXJzaW9uSW5mbyBpbmZvKTsKKwl2 b2lkCQkoKmdldFVuaWNvZGVWZXJzaW9uKSAoVVZlcnNpb25JbmZvIGludG8pOworCXZvaWQJCSgq Z2V0Q0xEUlZlcnNpb24pIChVVmVyc2lvbkluZm8gaW5mbywgVUVycm9yQ29kZSAqc3RhdHVzKTsK KwlVQ29sbGF0b3IgICooKm9wZW5Db2xsYXRvcikgKGNvbnN0IGNoYXIgKmxvYywgVUVycm9yQ29k ZSAqc3RhdHVzKTsKKwl2b2lkCQkoKmNsb3NlQ29sbGF0b3IpIChVQ29sbGF0b3IgKmNvbGwpOwor CXZvaWQJCSgqZ2V0Q29sbGF0b3JWZXJzaW9uKSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVVmVy c2lvbkluZm8gaW5mbyk7CisJdm9pZAkJKCpnZXRVQ0FWZXJzaW9uKSAoY29uc3QgVUNvbGxhdG9y ICpjb2xsLCBVVmVyc2lvbkluZm8gaW5mbyk7CisJdm9pZAkJKCp2ZXJzaW9uVG9TdHJpbmcpIChj b25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LAorCQkJCQkJCQkJY2hhciAqdmVyc2lvblN0 cmluZyk7CisJVUNvbGxhdGlvblJlc3VsdCAoKnN0cmNvbGwpIChjb25zdCBVQ29sbGF0b3IgKmNv bGwsCisJCQkJCQkJCSBjb25zdCBVQ2hhciAqc291cmNlLAorCQkJCQkJCQkgaW50MzJfdCBzb3Vy Y2VMZW5ndGgsCisJCQkJCQkJCSBjb25zdCBVQ2hhciAqdGFyZ2V0LAorCQkJCQkJCQkgaW50MzJf dCB0YXJnZXRMZW5ndGgpOworCVVDb2xsYXRpb25SZXN1bHQgKCpzdHJjb2xsVVRGOCkgKGNvbnN0 IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpzb3VyY2UsCisJCQkJCQkJ CQkgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqdGFyZ2V0LAor CQkJCQkJCQkJIGludDMyX3QgdGFyZ2V0TGVuZ3RoLAorCQkJCQkJCQkJIFVFcnJvckNvZGUgKnN0 YXR1cyk7CisJaW50MzJfdAkJKCpnZXRTb3J0S2V5KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAor CQkJCQkJCSAgIGNvbnN0IFVDaGFyICpzb3VyY2UsCisJCQkJCQkJICAgaW50MzJfdCBzb3VyY2VM ZW5ndGgsCisJCQkJCQkJICAgdWludDhfdCAqcmVzdWx0LAorCQkJCQkJCSAgIGludDMyX3QgcmVz dWx0TGVuZ3RoKTsKKwlpbnQzMl90CQkoKm5leHRTb3J0S2V5UGFydCkgKGNvbnN0IFVDb2xsYXRv ciAqY29sbCwKKwkJCQkJCQkJCVVDaGFySXRlcmF0b3IgKml0ZXIsCisJCQkJCQkJCQl1aW50MzJf dCBzdGF0ZVsyXSwKKwkJCQkJCQkJCXVpbnQ4X3QgKmRlc3QsCisJCQkJCQkJCQlpbnQzMl90IGNv dW50LAorCQkJCQkJCQkJVUVycm9yQ29kZSAqc3RhdHVzKTsKKwl2b2lkCQkoKnNldFVURjgpIChV Q2hhckl0ZXJhdG9yICppdGVyLAorCQkJCQkJCWNvbnN0IGNoYXIgKnMsCisJCQkJCQkJaW50MzJf dCBsZW5ndGgpOworCWNvbnN0IGNoYXIgKigqZXJyb3JOYW1lKSAoVUVycm9yQ29kZSBjb2RlKTsK KwlpbnQzMl90CQkoKnN0clRvVXBwZXIpIChVQ2hhciAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90 IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25zdCBVQ2hhciAqc3JjLAorCQkJCQkJCSAgIGlu dDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkg ICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlpbnQzMl90CQkoKnN0clRvTG93ZXIpIChVQ2hh ciAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25z dCBVQ2hhciAqc3JjLAorCQkJCQkJCSAgIGludDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIGNv bnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlp bnQzMl90CQkoKnN0clRvVGl0bGUpIChVQ2hhciAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGRl c3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25zdCBVQ2hhciAqc3JjLAorCQkJCQkJCSAgIGludDMy X3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIFVCcmVha0l0ZXJhdG9yICp0aXRsZUl0ZXIsCisJCQkJ CQkJICAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCSAgIFVFcnJvckNvZGUgKnBFcnJvckNv ZGUpOworCXZvaWQJCSgqc2V0QXR0cmlidXRlKSAoVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCQkg VUNvbEF0dHJpYnV0ZSBhdHRyLAorCQkJCQkJCQkgVUNvbEF0dHJpYnV0ZVZhbHVlIHZhbHVlLAor CQkJCQkJCQkgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwlVQ29udmVydGVyICooKm9wZW5Db252ZXJ0 ZXIpIChjb25zdCBjaGFyICpjb252ZXJ0ZXJOYW1lLAorCQkJCQkJCQkgIFVFcnJvckNvZGUgKiAg CWVycik7CisJdm9pZAkJKCpjbG9zZUNvbnZlcnRlcikgKFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7 CisJaW50MzJfdAkJKCpmcm9tVUNoYXJzKSAoVUNvbnZlcnRlciAqY252LAorCQkJCQkJCSAgIGNo YXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29u c3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBV RXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlpbnQzMl90CQkoKnRvVUNoYXJzKSAoVUNvbnZlcnRl ciAqY252LAorCQkJCQkJCSBVQ2hhciAqZGVzdCwKKwkJCQkJCQkgaW50MzJfdCBkZXN0Q2FwYWNp dHksCisJCQkJCQkJIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCQkgaW50MzJfdCBzcmNMZW5ndGgs CisJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCWludDMyX3QJCSgqdG9MYW5ndWFn ZVRhZykgKGNvbnN0IGNoYXIgKmxvY2FsZUlELAorCQkJCQkJCQkgIGNoYXIgKmxhbmd0YWcsCisJ CQkJCQkJCSAgaW50MzJfdCBsYW5ndGFnQ2FwYWNpdHksCisJCQkJCQkJCSAgVUJvb2wgc3RyaWN0 LAorCQkJCQkJCQkgIFVFcnJvckNvZGUgKmVycik7CisJaW50MzJfdAkJKCpnZXREaXNwbGF5TmFt ZSkgKGNvbnN0IGNoYXIgKmxvY2FsZUlELAorCQkJCQkJCQkgICBjb25zdCBjaGFyICppbkxvY2Fs ZUlELAorCQkJCQkJCQkgICBVQ2hhciAqcmVzdWx0LAorCQkJCQkJCQkgICBpbnQzMl90IG1heFJl c3VsdFNpemUsCisJCQkJCQkJCSAgIFVFcnJvckNvZGUgKmVycik7CisJaW50MzJfdAkJKCpjb3Vu dEF2YWlsYWJsZSkgKHZvaWQpOworCWNvbnN0IGNoYXIgKigqZ2V0QXZhaWxhYmxlKSAoaW50MzJf dCBuKTsKK30gcGdfaWN1X2xpYnJhcnk7CisKKyNlbmRpZgorCiAvKgogICogV2UgZGVmaW5lIG91 ciBvd24gd3JhcHBlciBhcm91bmQgbG9jYWxlX3Qgc28gd2UgY2FuIGtlZXAgdGhlIHNhbWUKICAq IGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIGFsbCBidWlsZHMsIHdoaWxlIG5vdCBoYXZpbmcgdG8g Y3JlYXRlIGEKQEAgLTUzLDcgKzE1Myw4IEBAIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0CiAjaWZk ZWYgVVNFX0lDVQogCQlzdHJ1Y3QKIAkJewotCQkJVUNvbGxhdG9yCSp1Y29sOworCQkJVUNvbGxh dG9yCQkqdWNvbDsKKwkJCXBnX2ljdV9saWJyYXJ5CSpsaWI7CiAJCX0JCQlpY3U7CiAjZW5kaWYK IAkJaW50CQkJZHVtbXk7CQkvKiBpbiBjYXNlIHdlIGhhdmUgbmVpdGhlciBMT0NBTEVfVCBub3Ig SUNVICovCkBAIC02MSw4ICsxNjIsMTQgQEAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKIH07CiAK ICNpZmRlZiBVU0VfSUNVCi1leHRlcm4gaW50MzJfdCBpY3VfdG9fdWNoYXIoVUNoYXIgKipidWZm X3VjaGFyLCBjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzKTsKLWV4dGVybiBpbnQzMl90 IGljdV9mcm9tX3VjaGFyKGNoYXIgKipyZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBp bnQzMl90IGxlbl91Y2hhcik7CisjZGVmaW5lIFBHX0lDVV9MSUIoeCkgKCh4KS0+aW5mby5pY3Uu bGliKQorI2RlZmluZSBQR19JQ1VfQ09MKHgpICgoeCktPmluZm8uaWN1LnVjb2wpCisKK2V4dGVy biBwZ19pY3VfbGlicmFyeSAqZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkodm9pZCk7CitleHRlcm4g aW50MzJfdCBpY3VfdG9fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmxpYiwgVUNoYXIgKipidWZmX3Vj aGFyLAorCQkJCQkJCWNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIGlu dDMyX3QgaWN1X2Zyb21fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmxpYiwgY2hhciAqKnJlc3VsdCwK KwkJCQkJCQkgIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcik7CiAj ZW5kaWYKIAogI2VuZGlmCQkJCQkJCS8qIF9QR19MT0NBTEVfSU5URVJOQUxfICovCi0tIAoyLjM0 LjEKCg== --=-HN8GqdZSiO/qo3uzBaZ6 Content-Disposition: attachment; filename="v2-0005-Add-get_icu_library_hook.patch" Content-Type: text/x-patch; name="v2-0005-Add-get_icu_library_hook.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3ZGNhODhhYTlmNTFlNzY3NDE1MWJiOTA1MDZiNTMwNWY5MTA3YmFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDUgRGVjIDIwMjIgMTY6MTQ6MTggLTA4MDAKU3ViamVjdDogW1BBVENIIHYyIDUvNl0gQWRk IGdldF9pY3VfbGlicmFyeV9ob29rLgoKQ29udHJvbHMgaG93IElDVSBsaWJyYXJ5IHN5bWJvbHMg YXJlIGxvYWRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICB8 ICA2ICstLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgfCA1NiArKysr KysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVy bmFsLmggfCAxMCArKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAxMSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25j bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKaW5kZXggMTZiMWJj YmRjMC4uZjQzOWU4MzJkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwpAQCAt NTYwLDcgKzU2MCw3IEBAIGdldF9pY3VfbGFuZ3VhZ2VfdGFnKGNvbnN0IGNoYXIgKmxvY2FsZW5h bWUpCiB7CiAJY2hhcgkJYnVmW1VMT0NfRlVMTE5BTUVfQ0FQQUNJVFldOwogCVVFcnJvckNvZGUJ c3RhdHVzOwotCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfYnVpbHRpbl9pY3VfbGlicmFy eSgpOworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfaWN1X2xpYnJhcnkoTlVMTCwgTlVM TCwgTlVMTCk7CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJaWN1bGliLT50b0xhbmd1YWdl VGFnKGxvY2FsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHRydWUsICZzdGF0dXMpOwpAQCAtNTg2 LDcgKzU4Niw3IEBAIGdldF9pY3VfbG9jYWxlX2NvbW1lbnQoY29uc3QgY2hhciAqbG9jYWxlbmFt ZSkKIAlpbnQzMgkJbGVuX3VjaGFyOwogCWludDMyCQlpOwogCWNoYXIJICAgKnJlc3VsdDsKLQlw Z19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKKwlwZ19p Y3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2ljdV9saWJyYXJ5KE5VTEwsIE5VTEwsIE5VTEwpOwog CiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCWxlbl91Y2hhciA9IGljdWxpYi0+Z2V0RGlzcGxh eU5hbWUobG9jYWxlbmFtZSwgImVuIiwKQEAgLTgxMSw3ICs4MTEsNyBAQCBwZ19pbXBvcnRfc3lz dGVtX2NvbGxhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKICNpZmRlZiBVU0VfSUNVCiAJewogCQlp bnQJCQlpOwotCQlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJh cnkoKTsKKwkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9pY3VfbGlicmFyeShOVUxMLCBO VUxMLCBOVUxMKTsKIAogCQkvKgogCQkgKiBTdGFydCB0aGUgbG9vcCBhdCAtMSB0byBzbmVhayBp biB0aGUgcm9vdCBsb2NhbGUgd2l0aG91dCB0b28gbXVjaApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2Fs ZS5jCmluZGV4IDRkYWZmOGI3YjUuLmI3NWE4MjVkZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlLmMKQEAgLTEwOSw2ICsxMDksMzQgQEAgY2hhcgkgICAqbG9jYWxpemVkX2Z1bGxfZGF5c1s3 ICsgMV07CiBjaGFyCSAgICpsb2NhbGl6ZWRfYWJicmV2X21vbnRoc1sxMiArIDFdOwogY2hhcgkg ICAqbG9jYWxpemVkX2Z1bGxfbW9udGhzWzEyICsgMV07CiAKKy8qCisgKiBnZXRfaWN1X2xpYnJh cnlfaG9vayBjYW4gYmUgc2V0IHRvIGNvbnRyb2wgaG93IHRoZSBwZ19pY3VfbGlicmFyeSBpcwor ICogY29uc3RydWN0ZWQgaW5zaWRlIGEgcGdfbG9jYWxlX3Qgc3RydWN0dXJlLCBhbmQgdGhlcmVm b3JlIHdoaWNoIHNwZWNpZmljCisgKiBJQ1Ugc3ltYm9scyBhcmUgY2FsbGVkLgorICoKKyAqIFdp dGhvdXQgdGhlIGhvb2ssIFBvc3RncmVzIGNvbnN0cnVjdHMgdGhlIHBnX2ljdV9saWJyYXJ5IGZy b20gdGhlIHZlcnNpb24KKyAqIG9mIElDVSB0aGF0IFBvc3RncmVzIGlzIGxpbmtlZCBhZ2FpbnN0 IGF0IGJ1aWxkIHRpbWUuCisgKgorICogVGhlIGhvb2sgY2FuIGluc3RlYWQgbG9hZCB0aGUgSUNV IHN5bWJvbHMgZnJvbSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZQorICogSUNVIGxpYnJhcnkg b24gdGhlIHN5c3RlbSwgd2hpY2ggY2FuIGF2b2lkIHByb2JsZW1zIHdoZW4gdGhlIGNvbGxhdGlv bgorICogc3VidGx5IGNoYW5nZXMgYWNyb3NzIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBJQ1UuCisg KgorICogSWYgdGhlIGhvb2sgcmV0dXJucyB0cnVlLCBpdCBpbmRpY2F0ZXMgdGhhdCBpdCBoYXMg c3VjY2Vzc2Z1bGx5IGZpbGxlZCBpbgorICogdGhlIHBnX2ljdV9saWJyYXJ5IHN0cnVjdHVyZSB0 aGF0IHdhcyBwYXNzZWQgaW4uIElmIGl0IHJldHVybnMgZmFsc2UsCisgKiBQb3N0Z3JlcyB3aWxs IGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBpdHNlbGYuIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRp b24KKyAqIHJldHVybmVkIGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggZXhhY3RseSB0aGUgdmVyc2lv biB0aGF0IHdhcyBwYXNzZWQgaW47CisgKiB0aG91Z2ggaWYgbm90LCBQb3N0Z3JlcyB3aWxsIGlz c3VlIGEgV0FSTklORy4KKyAqCisgKiBYWFg6IEZvciBub3csIHRoZSBvbmx5IGluZm9ybWF0aW9u IHRoZSBob29rIGhhcyBhY2Nlc3MgdG8gaXMgdGhlIElDVQorICogY29sbGF0aW9uIG5hbWUsIElD VSBjdHlwZSwgYW5kIHRoZSBJQ1UgdmVyc2lvbiBzdHJpbmcgdGhhdCB3YXMgb2J0YWluZWQgYXQK KyAqIHRoZSB0aW1lIHRoZSBjb2xsYXRpb24gd2FzIGNyZWF0ZWQgKG9yIHdoZW4gaXQgd2FzIGxh c3QgcmVmcmVzaGVkKS4gV2UKKyAqIHNob3VsZCBjb25zaWRlciB3aGF0IG90aGVyIGluZm9ybWF0 aW9uIGNhbiBiZSBwcm92aWRlZCB0byBhbGxvdyBmb3IgZ3JlYXRlcgorICogY29udHJvbCB3aGlj aCBsaWJyYXJ5IGlzIGxvYWRlZC4KKyAqLworI2lmZGVmIFVTRV9JQ1UKK2dldF9pY3VfbGlicmFy eV9ob29rX3R5cGUgZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBOVUxMOworI2VuZGlmCisKIC8qIGlu ZGljYXRlcyB3aGV0aGVyIGxvY2FsZSBpbmZvcm1hdGlvbiBjYWNoZSBpcyB2YWxpZCAqLwogc3Rh dGljIGJvb2wgQ3VycmVudExvY2FsZUNvbnZWYWxpZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgQ3Vy cmVudExDVGltZVZhbGlkID0gZmFsc2U7CkBAIC0xNDYzLDE4ICsxNDkxLDE1IEBAIHJlcG9ydF9u ZXdsb2NhbGVfZmFpbHVyZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQogI2VuZGlmCQkJCQkJCS8q IEhBVkVfTE9DQUxFX1QgKi8KIAogI2lmZGVmIFVTRV9JQ1UKLXBnX2ljdV9saWJyYXJ5ICoKLWdl dF9idWlsdGluX2ljdV9saWJyYXJ5KCkKK3N0YXRpYyBib29sCitnZXRfYnVpbHRpbl9pY3VfbGli cmFyeShwZ19pY3VfbGlicmFyeSAqbGliKQogewotCXBnX2ljdV9saWJyYXJ5ICpsaWI7Ci0KIAkv KgogCSAqIFRoZXNlIGFzc2lnbm1lbnRzIHdpbGwgZmFpbCB0byBjb21waWxlIGlmIGFuIGluY29t cGF0aWJsZSBBUEkgY2hhbmdlIGlzCiAJICogbWFkZSB0byBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9m IElDVSwgYXQgd2hpY2ggcG9pbnQgd2UgbWlnaHQgbmVlZCB0bwogCSAqIGNvbnNpZGVyIHNwZWNp YWwgdHJlYXRtZW50IGZvciBkaWZmZXJlbnQgbWFqb3IgdmVyc2lvbiByYW5nZXMsIHdpdGgKIAkg KiBpbnRlcm1lZGlhdGUgdHJhbXBvbGluZSBmdW5jdGlvbnMuCiAJICovCi0JbGliID0gcGFsbG9j MChzaXplb2YoKmxpYikpOwogCWxpYi0+Z2V0SUNVVmVyc2lvbiA9IHVfZ2V0VmVyc2lvbjsKIAls aWItPmdldFVuaWNvZGVWZXJzaW9uID0gdV9nZXRVbmljb2RlVmVyc2lvbjsKIAlsaWItPmdldENM RFJWZXJzaW9uID0gdWxvY2RhdGFfZ2V0Q0xEUlZlcnNpb247CkBAIC0xNTEyLDggKzE1MzcsMjUg QEAgZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKQogCVN0YXRpY0Fzc2VydFN0bXQoVV9NQVhfVkVS U0lPTl9MRU5HVEggPT0gNCwKIAkJCQkJICJ1Y29sX2dldFZlcnNpb24gb3V0cHV0IGJ1ZmZlciBz aXplIGNoYW5nZWQgaW5jb21wYXRpYmx5Iik7CiAKKwlyZXR1cm4gdHJ1ZTsKK30KKworcGdfaWN1 X2xpYnJhcnkgKgorZ2V0X2ljdV9saWJyYXJ5KGNvbnN0IGNoYXIgKmNvbGxhdGUsIGNvbnN0IGNo YXIgKmN0eXBlLCBjb25zdCBjaGFyICp2ZXJzaW9uKQoreworCXBnX2ljdV9saWJyYXJ5ICpsaWIg PSBwYWxsb2MwKHNpemVvZigqbGliKSk7CisJYm9vbCBmaWxsZWQgPSBmYWxzZTsKKworCWlmIChn ZXRfaWN1X2xpYnJhcnlfaG9vayAhPSBOVUxMKQorCQlmaWxsZWQgPSBnZXRfaWN1X2xpYnJhcnlf aG9vayhsaWIsIGNvbGxhdGUsIGN0eXBlLCB2ZXJzaW9uKTsKKworCWlmKCFmaWxsZWQpCisJCWZp bGxlZCA9IGdldF9idWlsdGluX2ljdV9saWJyYXJ5KGxpYik7CisKKwlBc3NlcnQoZmlsbGVkKTsK IAlyZXR1cm4gbGliOwogfQorCiAjZW5kaWYKIAogLyoKQEAgLTE2MDcsNyArMTY0OSw3IEBAIHBn X25ld2xvY2FsZShjaGFyIHByb3ZpZGVyLCBib29sIGlzZGVmYXVsdCwgYm9vbCBkZXRlcm1pbmlz dGljLAogCXsKIAkJVUNvbGxhdG9yICAqY29sbGF0b3I7CiAJCVVFcnJvckNvZGUJc3RhdHVzOwot CQlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKKwkJ cGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9pY3VfbGlicmFyeShjb2xsYXRlLCBjdHlwZSwg dmVyc2lvbik7CiAKIAkJLyogY29sbGF0b3IgbWF5IGJlIGxlYWtlZCBpZiB3ZSBlbmNvdW50ZXIg YW4gZXJyb3IgKi8KIApAQCAtMTkyNiw3ICsxOTY4LDcgQEAgZ2V0X2NvbGxhdGlvbl9hY3R1YWxf dmVyc2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpCiAJCVVF cnJvckNvZGUJc3RhdHVzOwogCQlVVmVyc2lvbkluZm8gdmVyc2lvbmluZm87CiAJCWNoYXIJCWJ1 ZltVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOwotCQlwZ19pY3VfbGlicmFyeQkqaWN1bGli ID0gZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKKwkJcGdfaWN1X2xpYnJhcnkJKmljdWxpYiA9 IGdldF9pY3VfbGlicmFyeShOVUxMLCBOVUxMLCBOVUxMKTsKIAogCQlzdGF0dXMgPSBVX1pFUk9f RVJST1I7CiAJCWNvbGxhdG9yID0gaWN1bGliLT5vcGVuQ29sbGF0b3IoY29sbGNvbGxhdGUsICZz dGF0dXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFs LmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaAppbmRleCA1NDQ0NWQ4 Yjg3Li4xYmUwMjA1MzkxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVf aW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaApA QCAtMTYyLDEwICsxNjIsMTggQEAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKIH07CiAKICNpZmRl ZiBVU0VfSUNVCisKK3R5cGVkZWYgYm9vbCAoKmdldF9pY3VfbGlicmFyeV9ob29rX3R5cGUpKAor CXBnX2ljdV9saWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKmN0 eXBlLAorCWNvbnN0IGNoYXIgKnZlcnNpb24pOworCitleHRlcm4gUEdETExJTVBPUlQgZ2V0X2lj dV9saWJyYXJ5X2hvb2tfdHlwZSBnZXRfaWN1X2xpYnJhcnlfaG9vazsKKwogI2RlZmluZSBQR19J Q1VfTElCKHgpICgoeCktPmluZm8uaWN1LmxpYikKICNkZWZpbmUgUEdfSUNVX0NPTCh4KSAoKHgp LT5pbmZvLmljdS51Y29sKQogCi1leHRlcm4gcGdfaWN1X2xpYnJhcnkgKmdldF9idWlsdGluX2lj dV9saWJyYXJ5KHZvaWQpOworZXh0ZXJuIHBnX2ljdV9saWJyYXJ5ICpnZXRfaWN1X2xpYnJhcnko Y29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5cGUsCisJCQkJCQkJCQkgICBjb25z dCBjaGFyICp2ZXJzaW9uKTsKIGV4dGVybiBpbnQzMl90IGljdV90b191Y2hhcihwZ19pY3VfbGli cmFyeSAqbGliLCBVQ2hhciAqKmJ1ZmZfdWNoYXIsCiAJCQkJCQkJY29uc3QgY2hhciAqYnVmZiwg c2l6ZV90IG5ieXRlcyk7CiBleHRlcm4gaW50MzJfdCBpY3VfZnJvbV91Y2hhcihwZ19pY3VfbGli cmFyeSAqbGliLCBjaGFyICoqcmVzdWx0LAotLSAKMi4zNC4xCgo= --=-HN8GqdZSiO/qo3uzBaZ6--