From owner-freebsd-amd64@freebsd.org Sat Dec 3 06:40:19 2016 Return-Path: Delivered-To: freebsd-amd64@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DA271C629C3; Sat, 3 Dec 2016 06:40:19 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: from mail-io0-x233.google.com (mail-io0-x233.google.com [IPv6:2607:f8b0:4001:c06::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8CBF6184; Sat, 3 Dec 2016 06:40:19 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: by mail-io0-x233.google.com with SMTP id c21so474941161ioj.1; Fri, 02 Dec 2016 22:40:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=tK09wVe1HF9xICJ3AS7r1B3PbABBZSB4Ok8lnXl3r6w=; b=gxaqePDSlRcZcTXwZdrUtRvz3nVh3kkgR4S59Q3Ki2dR9QP1okzGbM5udvK9XEauGi ydoIOLMNzut223PCYjeq1455PnWH7d6S/Em8YvoBPZszo0fZkpg5sH7MEP8fa5Q5Gtv+ ZyaXU2rGm3JThhCiEXA1hfWyY8i+f3H9phzSEjx890MQwev2LKHpQ/79dCyn5qIVoN5f qCnqMXx9KV5/SM5fIIfnDLZL6iUhrn3cel6F8O2rZUQIykdzJQgiONxf6sAwLrTcnrxc ZuUik9wW3rfAViZsHvSqgYRYuQMBTDuZB8aINffGNDijUDgBDWzCNxbZmqAVREn/R2fp tQrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=tK09wVe1HF9xICJ3AS7r1B3PbABBZSB4Ok8lnXl3r6w=; b=aSQHnnigGnn6t6OanN9Ver+uq9mk1DIOJykdbwRLYmhAmCZQywkh500MUt7cVQRbIW KS3wy0XTjyrhREykBvT7V0Pw52jzONV+ta1W3R32hQx3vstQbYwUNBOFf8AkMg5HHPa+ RVHzuR6KziDMnT7zX3wC2qbA729VWw2QTPFQ1Iw+yyiFwXEXSjetAfAay/1vPJ7ve+W1 FFc4sydlbuOTm1eZ+6ufFapGdBbZNxT0t3C7g9OmbDC+iOsj0j7DJXy6FCCYpcp1qs2O nI2FhCIAOgDIhI9ltJCfXwhHvsY0qpPHiiPEoJHHdGag2Ng5U/lmtQ5gWKyvw0YAQ+1I TG/A== X-Gm-Message-State: AKaTC00wBlN0atB1csbrBspMvrF1KTA2Llw83V9DkDvaS01sLNMkraaYHmghuD0NEqyxzao+nGqqDh8EQlMi/g== X-Received: by 10.36.192.84 with SMTP id u81mr708837itf.51.1480747218893; Fri, 02 Dec 2016 22:40:18 -0800 (PST) MIME-Version: 1.0 Received: by 10.79.136.197 with HTTP; Fri, 2 Dec 2016 22:40:18 -0800 (PST) In-Reply-To: References: From: Ben Woods Date: Sat, 3 Dec 2016 14:40:18 +0800 Message-ID: Subject: Re: CFT EFI Boot Refactoring To: Eric McCorkle Cc: freebsd-hackers@freebsd.org, freebsd-amd64@freebsd.org, "current@freebsd.org" Content-Type: multipart/mixed; boundary=94eb2c058ce8fc2ff60542bb5373 X-Mailman-Approved-At: Sat, 03 Dec 2016 12:49:00 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 06:40:20 -0000 --94eb2c058ce8fc2ff60542bb5373 Content-Type: text/plain; charset=UTF-8 Hi Eric, Thanks for your work on this. I just applied your diff to my subversion repository, and tried to buildworld, but the build failed with the following error: make[6]: make[6]: don't know how to make efipart.c. Stop make[6]: stopped in /usr/src/sys/boot/efi/drivers *** [all_subdir_sys/boot/efi/drivers] Error code 2 Does it build ok for you? Because I use subversion, and I wanted to build it from my main tree, I had to regenerate your patch using "git diff --no-prefix master..origin/efize_new > /tmp/efize_new.diff". I could then apply this cleanly with "svn patch /tmp/efize_new.diff". I checked the difference between your diff and the diff I generated, and the only differences were in the file headers. Therefore I don't think the patch change should make any difference. I have attached my version of the patch for reference. For example: diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile index 0ebcaf1..3b608c5 100644 --- a/lib/libstand/Makefile +++ b/lib/libstand/Makefile Became: diff --git lib/libstand/Makefile lib/libstand/Makefile index 0ebcaf1ccfd..3b608c5bc92 100644 --- lib/libstand/Makefile +++ lib/libstand/Makefile To show the differences with your patch applied: $ svn status M lib/libstand/Makefile M lib/libstand/stand.h M sys/boot/efi/Makefile M sys/boot/efi/boot1/Makefile M sys/boot/efi/boot1/Makefile.fat M sys/boot/efi/boot1/boot1.c D sys/boot/efi/boot1/boot_module.h M sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu M sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu M sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu M sys/boot/efi/boot1/fat-i386.tmpl.bz2.uu M sys/boot/efi/boot1/generate-fat.sh D sys/boot/efi/boot1/ufs_module.c D sys/boot/efi/boot1/zfs_module.c A sys/boot/efi/drivers A sys/boot/efi/drivers/Makefile A sys/boot/efi/drivers/efi_drivers.h A sys/boot/efi/drivers/fs_driver.c M sys/boot/efi/include/efilib.h M sys/boot/efi/include/efiprot.h A sys/boot/efi/include/string16.h M sys/boot/efi/libefi/Makefile A sys/boot/efi/libefi/efifs.c M sys/boot/efi/libefi/efipart.c M sys/boot/efi/libefi/errno.c M sys/boot/efi/libefi/handles.c A sys/boot/efi/libefi/string16.c M sys/boot/efi/libefi/time.c M sys/boot/efi/loader/Makefile M sys/boot/efi/loader/conf.c M sys/boot/efi/loader/loader_efi.h M sys/boot/efi/loader/main.c Regards, Ben -- From: Benjamin Woods woodsb02@gmail.com On 3 December 2016 at 01:02, Eric McCorkle wrote: > Hello everyone, > > My work to refactor the EFI boot loader has been in review for some time > now. This work is a behavior-neutral refactoring which eliminates > duplicated code in boot1, provides better integration of boot1 and > loader with the EFI API, and moves towards better compliance with the > recommendations of the UEFI driver writer's guide. This work also > serves as a precursor to more work, such as GELI, hot-plugging, and > other things. > > One of the reviewers was able to trigger a hang on his setup; however, > it's not clear whether this is a problem in the refactoring, or whether > it's due to a related bug: > > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214423 > > Therefore, I would like to issue a CFT for this changeset. We need > people using the boot1/loader EFI boot setup to test their setup using > boot1 and loader as built with this patch applied. > > You can also get the source tree directly from my github > (https://github.com/emc2/freebsd.git). Use the efize_new branch to get > this changeset. Note that I am maintaining the state of this branch in > a single change at this point using rebase -i, so there *will* be forced > pushes to this branch. > > > Here are some notes on testing the changeset: > > * To test it, just do a buildworld, then copy loader.efi in place and > copy boot1.efi to /efi/BOOT/BOOTX64.EFI on your ESP. If your system > boots, then the test was successful (there are no new features in this > changeset). > > * The output of boot1 is slightly different, so you'll be able to tell > if you installed it correctly. > > * I recommend keeping a copy of the basic boot1 around on your ESP, just > in case something goes wrong. On my setup, I have a backup at > /efi/BOOT/BOOTX64.BAK (with the main program at /efi/BOOT/BOOTX64.EFI, > of course) > > * I have been using this on a machine with two disks, a ZFS pool > spanning both disks, and a dummy UFS filesystem for months now, so it > can be considered relatively safe. > > * This has also been tested on basic setups without incident, so > priority is on complex or odd setups. > > * If something goes wrong, you will most likely get a boot-hang. If > this happens, please contact me directly with the details, and I'll > coordinate on diagnosis. > --94eb2c058ce8fc2ff60542bb5373 Content-Type: text/plain; charset=US-ASCII; name="efize_new.diff" Content-Disposition: attachment; filename="efize_new.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iw8unfrw2 ZGlmZiAtLWdpdCBsaWIvbGlic3RhbmQvTWFrZWZpbGUgbGliL2xpYnN0YW5kL01ha2VmaWxlCmlu ZGV4IDBlYmNhZjFjY2ZkLi4zYjYwOGM1YmM5MiAxMDA2NDQKLS0tIGxpYi9saWJzdGFuZC9NYWtl ZmlsZQorKysgbGliL2xpYnN0YW5kL01ha2VmaWxlCkBAIC00MSw3ICs0MSw3IEBAIFNSQ1MrPSBu dG9oLmMKIC5QQVRIOiAke0xJQkNfU1JDfS9zdHJpbmcKIFNSQ1MrPQliY21wLmMgYmNvcHkuYyBi emVyby5jIGZmcy5jIGZscy5jIFwKIAltZW1jY3B5LmMgbWVtY2hyLmMgbWVtY21wLmMgbWVtY3B5 LmMgbWVtbW92ZS5jIG1lbXNldC5jIFwKLQlxZGl2cmVtLmMgc3RyY2F0LmMgc3RyY2hyLmMgc3Ry Y21wLmMgc3RyY3B5LmMgXAorCXFkaXZyZW0uYyBzdHJjYXQuYyBzdHJjaHIuYyBzdHJjbXAuYyBz dHJjcHkuYyBzdHBjcHkuYyBzdHBuY3B5LmMgXAogCXN0cmNzcG4uYyBzdHJsY2F0LmMgc3RybGNw eS5jIHN0cmxlbi5jIHN0cm5jYXQuYyBzdHJuY21wLmMgc3RybmNweS5jIFwKIAlzdHJwYnJrLmMg c3RycmNoci5jIHN0cnNlcC5jIHN0cnNwbi5jIHN0cnN0ci5jIHN0cnRvay5jIHN3YWIuYwogLmlm ICR7TUFDSElORV9DUFVBUkNIfSA9PSAiYXJtIgpkaWZmIC0tZ2l0IGxpYi9saWJzdGFuZC9zdGFu ZC5oIGxpYi9saWJzdGFuZC9zdGFuZC5oCmluZGV4IGY3N2E1ODZmYjA2Li4wNjZhZmYwNWQ2NSAx MDA2NDQKLS0tIGxpYi9saWJzdGFuZC9zdGFuZC5oCisrKyBsaWIvbGlic3RhbmQvc3RhbmQuaApA QCAtMjQsNyArMjQsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKgogICogJEZyZWVCU0QkCi0gKiBG cm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6NDAgZHJvY2huZXIg RXhwICQJCisgKiBGcm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6 NDAgZHJvY2huZXIgRXhwICQKICAqLwogCiAvKi0KQEAgLTEzMSw3ICsxMzEsNyBAQCBleHRlcm4g c3RydWN0IGZzX29wcyBwa2dmc19mc29wczsKICNkZWZpbmUJU0VFS19DVVIJMQkvKiBzZXQgZmls ZSBvZmZzZXQgdG8gY3VycmVudCBwbHVzIG9mZnNldCAqLwogI2RlZmluZQlTRUVLX0VORAkyCS8q IHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KIAotLyogCisvKgogICogRGV2 aWNlIHN3aXRjaAogICovCiBzdHJ1Y3QgZGV2c3cgewpAQCAtMTY2LDggKzE2Niw5IEBAIHN0cnVj dCBkZXZkZXNjCiAjZGVmaW5lIERFVlRfTk9ORQkwCiAjZGVmaW5lIERFVlRfRElTSwkxCiAjZGVm aW5lIERFVlRfTkVUCTIKLSNkZWZpbmUgREVWVF9DRAkJMworI2RlZmluZSBERVZUX0NECTMKICNk ZWZpbmUgREVWVF9aRlMJNAorI2RlZmluZSBERVZUX0VGSQk1CiAgICAgaW50CQkJZF91bml0Owog ICAgIHZvaWQJCSpkX29wZW5kYXRhOwogfTsKQEAgLTI3OSw3ICsyODAsNyBAQCBleHRlcm4gc3Ry dWN0CWRpcmVudCAqcmVhZGRpcmZkKGludCk7CiAKIGV4dGVybiB2b2lkCXNyYW5kb20odV9sb25n IHNlZWQpOwogZXh0ZXJuIHVfbG9uZwlyYW5kb20odm9pZCk7Ci0gICAgCisKIC8qIGltcG9ydHMg ZnJvbSBzdGRsaWIsIGxvY2FsbHkgbW9kaWZpZWQgKi8KIGV4dGVybiBsb25nCXN0cnRvbChjb25z dCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZwlzdHJ0b3VsKGNv bnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKQEAgLTM2OCw5ICszNjksOSBAQCBleHRlcm4gaW50 CW51bGxfc3RhdChzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpOwogZXh0ZXJu IGludAludWxsX3JlYWRkaXIoc3RydWN0IG9wZW5fZmlsZSAqZiwgc3RydWN0IGRpcmVudCAqZCk7 CiAKIAotLyogCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3Qg YmUgcHJvdmlkZWQgb3Igc3R1YmJlZCBieSAKLSAqIHRoZSBjb25zdW1lciAKKy8qCisgKiBNYWNo aW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3QgYmUgcHJvdmlkZWQgb3Igc3R1 YmJlZCBieQorICogdGhlIGNvbnN1bWVyCiAgKi8KIGV4dGVybiBpbnQJCWdldGNoYXIodm9pZCk7 CiBleHRlcm4gaW50CQlpc2NoYXIodm9pZCk7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL01ha2Vm aWxlIHN5cy9ib290L2VmaS9NYWtlZmlsZQppbmRleCA2NjQ4MWY4NTEzZi4uMDA0OTBkMGU5NDMg MTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvTWFrZWZpbGUKKysrIHN5cy9ib290L2VmaS9NYWtlZmls ZQpAQCAtMTUsNyArMTUsNyBAQCBTVUJESVIrPQlmZHQKIC5pZiAke01BQ0hJTkVfQ1BVQVJDSH0g PT0gImFhcmNoNjQiIHx8IFwKICAgICAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCBc CiAgICAgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhcm0iCi1TVUJESVIrPQlsaWJlZmkgbG9hZGVy IGJvb3QxCitTVUJESVIrPQlsaWJlZmkgZHJpdmVycyBsb2FkZXIgYm9vdDEKIC5lbmRpZgogCiAu ZW5kaWYgIyAke0NPTVBJTEVSX1RZUEV9ICE9ICJnY2MiIHx8ICR7Q09NUElMRVJfVkVSU0lPTn0g Pj0gNDA1MDAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvYm9vdDEvTWFrZWZpbGUgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL01ha2VmaWxlCmluZGV4IDExMGE4NTc3NDkxLi43NDgwYzljM2VjYSAxMDA2NDQK LS0tIHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZQorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01h a2VmaWxlCkBAIC04LDM0ICs4LDUwIEBAIE1LX1NTUD0JCW5vCiAKIFBST0c9CQlib290MS5zeW0K IElOVEVSTkFMUFJPRz0KLVdBUk5TPz0JCTYKK1dBUk5TPz0JCTMKKworIyBJbmNsdWRlIGJjYWNo ZSBjb2RlLgorSEFWRV9CQ0FDSEU9ICAgIHllcwogCiAuaWYgJHtNS19aRlN9ICE9ICJubyIKICMg RGlzYWJsZSB3YXJuaW5ncyB0aGF0IGFyZSBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggdGhl IHpmcyBib290IGNvZGUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tYXJyYXktYm91 bmRzCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUuYyArPSAtV25vLWNhc3QtYWxpZ24KLUNXQVJORkxB R1MuemZzX21vZHVsZS5jICs9IC1Xbm8tY2FzdC1xdWFsCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUu YyArPSAtV25vLW1pc3NpbmctcHJvdG90eXBlcwotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0g LVduby1zaWduLWNvbXBhcmUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tdW51c2Vk LXBhcmFtZXRlcgotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0gLVduby11bnVzZWQtZnVuY3Rp b24KK0NXQVJORkxBR1MuYm9vdDEuYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRp b25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMt ZGlzY2FyZHMtcXVhbGlmaWVycworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctdmFy aWFibGUtZGVjbGFyYXRpb25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tYXJyYXktYm91bmRz CitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tY2FzdC1hbGlnbgorQ1dBUk5GTEFHUy56ZnMuYyAr PSAtV25vLWNhc3QtcXVhbAorQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctcHJvdG90 eXBlcworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLXNpZ24tY29tcGFyZQorQ1dBUk5GTEFHUy56 ZnMuYyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKK0NXQVJORkxBR1MuemZzLmMgKz0gLVduby11 bnVzZWQtZnVuY3Rpb24KIENXQVJORkxBR1Muc2tlaW4uYyArPSAtV25vLWNhc3QtYWxpZ24KIENX QVJORkxBR1Muc2tlaW4uYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zCiAu ZW5kaWYKIAorCiAjIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsb2FkZXIgY29kZQotU1JDUz0JYm9v dDEuYyBzZWxmX3JlbG9jLmMgc3RhcnQuUyB1ZnNfbW9kdWxlLmMKK1NSQ1M9CWJvb3QxLmMgc2Vs Zl9yZWxvYy5jIHN0YXJ0LlMKIC5pZiAke01LX1pGU30gIT0gIm5vIgotU1JDUys9CQl6ZnNfbW9k dWxlLmMKKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KIFNSQ1MrPQkJ c2tlaW4uYyBza2Vpbl9ibG9jay5jCiAjIERvIG5vdCB1bnJvbGwgc2tlaW4gbG9vcHMsIHJlZHVj ZSBjb2RlIHNpemUKIENGTEFHUys9CS1EU0tFSU5fTE9PUD0xMTEKLS5QQVRIOgkJJHsuQ1VSRElS fS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi96ZnMKK1NS Q1MrPQkJemZzLmMKIC5lbmRpZgogCisjIEFsd2F5cyBhZGQgTUkgc291cmNlcworLlBBVEg6CQkk ey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgorLmluY2x1ZGUJIiR7LkNVUkRJUn0vLi4vLi4vY29tbW9u L01ha2VmaWxlLmluYyIKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi8uLi9jb21tb24KKworLlBB VEg6ICR7LkNVUkRJUn0vYXJjaC8ke01BQ0hJTkV9CisKIENGTEFHUys9CS1JLgogQ0ZMQUdTKz0J LUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKIENGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9pbmNsdWRl LyR7TUFDSElORX0KK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzLwogQ0ZMQUdTKz0J LUkkey5DVVJESVJ9Ly4uLy4uLy4uL2NvbnRyaWIvZGV2L2FjcGljYS9pbmNsdWRlCiBDRkxBR1Mr PQktSSR7LkNVUkRJUn0vLi4vLi4vLi4KIENGTEFHUys9CS1ERUZJX1VGU19CT09UCkBAIC01Niw2 ICs3MiwyMCBAQCBDRkxBR1MrPQktREVGSV9aRlNfQk9PVAogLlBBVEg6CQkkey5DVVJESVJ9Ly4u Ly4uL2NvbW1vbgogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgogCisjIG1ha2Ug YnVpbGRlbnYgZG9lc24ndCBzZXQgREVTVERJUiwgdGhpcyBtZWFucyBMSUJTVEFORAorIyB3aWxs IGJlIHdyb25nIHdoZW4gY3Jvc3NidWlsZGluZy4KKy5pZiBleGlzdHMoJHsuT0JKRElSfS8uLi8u Li8uLi8uLi9saWIvbGlic3RhbmQvbGlic3RhbmQuYSkKK0xJQlNUQU5EPQkkey5PQkpESVJ9Ly4u Ly4uLy4uLy4uL2xpYi9saWJzdGFuZC9saWJzdGFuZC5hCisuZW5kaWYKKworIyBBZGQgbGliZWZp CisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vbGliZWZpCitMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xp YmVmaS9saWJlZmkuYQorCisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vZHJpdmVycworTElCRUZJX0RS SVZFUlM9CSR7Lk9CSkRJUn0vLi4vZHJpdmVycy9saWJlZmlfZHJpdmVycy5hCisKKwogRklMRVM9 CWJvb3QxLmVmaSBib290MS5lZmlmYXQKIEZJTEVTTU9ERV9ib290MS5lZmk9CSR7QklOTU9ERX0K IApAQCAtNzUsOCArMTA1LDggQEAgTERGTEFHUys9CS1XbCwtem5vY29tYnJlbG9jCiAjIF9fYWVh YmlfKiAoYXJtKSBvciBfX2RpdmRpMyAoaTM4NikuCiAjIGFzIHdlbGwgYXMgcmVxdWlyZWQgc3Ry aW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zIGZvciBhbGwgcGxhdGZvcm1zLgogIwotRFBBREQrPQkJ JHtMSUJTVEFORH0KLUxEQUREKz0JCS1sc3RhbmQKK0RQQUREKz0JCSR7TElCRUZJX0RSSVZFUlN9 ICR7TElCRUZJfSAke0xJQlNUQU5EfQorTERBREQrPQkJJHtMSUJFRklfRFJJVkVSU30gJHtMSUJF Rkl9ICR7TElCU1RBTkR9CiAKIERQQUREKz0JCSR7TERTQ1JJUFR9CiAKQEAgLTEwMiw3ICsxMzIs NyBAQCBib290MS5lZmk6ICR7UFJPR30KIAlTT1VSQ0VfREFURV9FUE9DSD0ke1NPVVJDRV9EQVRF X0VQT0NIfSBcCiAJJHtPQkpDT1BZfSAtaiAucGVoZWFkZXIgLWogLnRleHQgLWogLnNkYXRhIC1q IC5kYXRhIFwKIAkJLWogLmR5bmFtaWMgLWogLmR5bnN5bSAtaiAucmVsLmR5biBcCi0JCS1qIC5y ZWxhLmR5biAtaiAucmVsb2MgLWogLmVoX2ZyYW1lIFwKKwkJLWogLnJlbGEuZHluIC1qIC5yZWxv YyAtaiAuZWhfZnJhbWUgLWogc2V0X1hjb21tYW5kX3NldCBcCiAJCS0tb3V0cHV0LXRhcmdldD0k e0VGSV9UQVJHRVR9ICR7LkFMTFNSQ30gJHsuVEFSR0VUfQogCiBib290MS5vOiAkey5DVVJESVJ9 Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKQEAgLTExMSw3ICsxNDEsNyBAQCBib290MS5vOiAkey5D VVJESVJ9Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKICMgY3JlYXRlZCBieSBnZW5lcmF0ZS1mYXQu c2gKIAogLmluY2x1ZGUgIiR7LkNVUkRJUn0vTWFrZWZpbGUuZmF0IgotQk9PVDFfTUFYU0laRT89 CTEzMTA3MgorQk9PVDFfTUFYU0laRT89CTUyNDI4OAogCiBib290MS5lZmlmYXQ6IGJvb3QxLmVm aQogCUBzZXQgLS0gYGxzIC1sIGJvb3QxLmVmaWA7IFwKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkv Ym9vdDEvTWFrZWZpbGUuZmF0IHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZS5mYXQKaW5kZXgg Yzg2YTdjM2Y1ODUuLmUyY2RhMWNlYjc5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL01h a2VmaWxlLmZhdAorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01ha2VmaWxlLmZhdApAQCAtMSw0ICsx LDQgQEAKICMgVGhpcyBmaWxlIGF1dG9nZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtZmF0LnNoIC0gRE8g Tk9UIEVESVQKICMgJEZyZWVCU0QkCiBCT09UMV9PRkZTRVQ9MHgyZAotQk9PVDFfTUFYU0laRT0x MzEwNzIKK0JPT1QxX01BWFNJWkU9NTI0Mjg4CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3Qx L2Jvb3QxLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKaW5kZXggODBiMTg5NWQ0YjIuLjll MDJiZmEzODQ5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKKysrIHN5cy9i b290L2VmaS9ib290MS9ib290MS5jCkBAIC0yNiw2MiArMjYsMTE4IEBAIF9fRkJTRElEKCIkRnJl ZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL2VsZi5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc3Rk YXJnLmg+CiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgogCiAjaW5j bHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgog I2luY2x1ZGUgPGVmaWNvbnNjdGwuaD4KKyNpZmRlZiBFRklfWkZTX0JPT1QKKyNpbmNsdWRlIDxs aWJ6ZnMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vdHN0cmFwLmg+CiAKLSNpbmNsdWRlICJi b290X21vZHVsZS5oIgorI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCiAjaW5jbHVkZSAicGF0aHMu aCIKIAotc3RhdGljIGNvbnN0IGJvb3RfbW9kdWxlX3QgKmJvb3RfbW9kdWxlc1tdID0KLXsKLSNp ZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX21vZHVsZSwKLSNlbmRpZgotI2lmZGVmIEVGSV9VRlNf Qk9PVAotCSZ1ZnNfbW9kdWxlCisjaWZkZWYgRUZJX0RFQlVHCisjZGVmaW5lIERQUklOVEYoZm10 LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCisjZGVmaW5lIERTVEFMTChkKSBicy0+U3Rh bGwoZCkKKyNlbHNlCisjZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9CisjZGVmaW5lIERTVEFM TChkKSB7fQogI2VuZGlmCisKK3N0cnVjdCBhcmNoX3N3aXRjaCBhcmNoc3c7CS8qIE1JL01EIGlu dGVyZmFjZSBib3VuZGFyeSAqLworCitzdGF0aWMgY29uc3QgZWZpX2RyaXZlcl90ICplZmlfZHJp dmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCiB9OwogCi0jZGVm aW5lCU5VTV9CT09UX01PRFVMRVMJbml0ZW1zKGJvb3RfbW9kdWxlcykKLS8qIFRoZSBpbml0aWFs IG51bWJlciBvZiBoYW5kbGVzIHVzZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLwot I2RlZmluZSBOVU1fSEFORExFU19JTklUCTI0CitleHRlcm4gc3RydWN0IGNvbnNvbGUgZWZpX2Nv bnNvbGU7CisjaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pCitleHRl cm4gc3RydWN0IGNvbnNvbGUgY29tY29uc29sZTsKK2V4dGVybiBzdHJ1Y3QgY29uc29sZSBudWxs Y29uc29sZTsKKyNlbmRpZgogCi12b2lkIHB1dGNoYXIoaW50IGMpOwotRUZJX1NUQVRVUyBlZmlf bWFpbihFRklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSogWHN5c3RhYik7CitzdHJ1 Y3QgZnNfb3BzICpmaWxlX3N5c3RlbVtdID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3Bz LAorCSZjZDk2NjBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlw ZnNfZnNvcHMsCisJTlVMTAorfTsKIAotRUZJX1NZU1RFTV9UQUJMRSAqc3lzdGFiOwotRUZJX0JP T1RfU0VSVklDRVMgKmJzOwotc3RhdGljIEVGSV9IQU5ETEUgKmltYWdlOworc3RydWN0IGRldnN3 ICpkZXZzd1tdID0geworCSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZz X2RldiwKKyNlbmRpZgorCU5VTEwKK307CiAKLXN0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9j b2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdV SUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NPTDsKLXN0YXRpYyBFRklfR1VJRCBMb2FkZWRJbWFnZUdV SUQgPSBMT0FERURfSU1BR0VfUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgQ29uc29sZUNvbnRy b2xHVUlEID0gRUZJX0NPTlNPTEVfQ09OVFJPTF9QUk9UT0NPTF9HVUlEOworc3RydWN0IGNvbnNv bGUgKmNvbnNvbGVzW10gPSB7CisJJmVmaV9jb25zb2xlLAorCU5VTEwKK307CiAKLS8qCi0gKiBQ cm92aWRlIE1hbGxvYyAvIEZyZWUgYmFja2VkIGJ5IEVGSXMgQWxsb2NhdGVQb29sIC8gRnJlZVBv b2wgd2hpY2ggZW5zdXJlcwotICogbWVtb3J5IGlzIGNvcnJlY3RseSBhbGlnbmVkIGF2b2lkaW5n IEVGSV9JTlZBTElEX1BBUkFNRVRFUiByZXR1cm5zIGZyb20KLSAqIEVGSSBtZXRob2RzLgorLyog RGVmaW5pdGlvbnMgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBmb3IgYm9vdCwgYnV0IHdlIG5lZWQg dG8gZGVmaW5lCisgKiB0byBtYWtlIHRoZSBsaW5rZXIgaGFwcHkuCiAgKi8KLXZvaWQgKgotTWFs bG9jKHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmZpbGUgX191bnVzZWQsIGludCBsaW5lIF9fdW51 c2VkKQorc3RydWN0IGZpbGVfZm9ybWF0ICpmaWxlX2Zvcm1hdHNbXSA9IHsgTlVMTCB9OworCitz dHJ1Y3QgbmV0aWZfZHJpdmVyICpuZXRpZl9kcml2ZXJzW10gPSB7IE5VTEwgfTsKKworc3RhdGlj IGludAorZWZpX2F1dG9sb2FkKHZvaWQpCiB7Ci0Jdm9pZCAqb3V0OworICBwcmludGYoIioqKioq KioqIEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGF1dG9sb2FkXG4iKTsKKyAgcmV0dXJuICgt MSk7Cit9CiAKLQlpZiAoYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBsZW4sICZvdXQp ID09IEVGSV9TVUNDRVNTKQotCQlyZXR1cm4gKG91dCk7CitzdGF0aWMgaW50IGVmaV9nZXRkZXYo dm9pZCAqKnZkZXYgX191bnVzZWQsIGNvbnN0IGNoYXIgKmRldnNwZWMgX191bnVzZWQsCisgICAg Y29uc3QgY2hhciAqKnBhdGggX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBi bG9jayBzaG91bGQgbm90IGNhbGwgZ2V0ZGV2XG4iKTsKKyAgcmV0dXJuICgtMSk7Cit9CiAKLQly ZXR1cm4gKE5VTEwpOworc3RhdGljIHNzaXplX3QKK2VmaV9jb3B5aW4oY29uc3Qgdm9pZCAqc3Jj IF9fdW51c2VkLCB2bV9vZmZzZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBs ZW4gX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90 IGNhbGwgY29weWluXG4iKTsKKyAgcmV0dXJuICgtMSk7CiB9CiAKLXZvaWQKLUZyZWUodm9pZCAq YnVmLCBjb25zdCBjaGFyICpmaWxlIF9fdW51c2VkLCBpbnQgbGluZSBfX3VudXNlZCkKK3N0YXRp YyBzc2l6ZV90CitlZmlfY29weW91dCh2bV9vZmZzZXRfdCBzcmMgX191bnVzZWQsIHZvaWQgKmRl c3QgX191bnVzZWQsCisgICAgY29uc3Qgc2l6ZV90IGxlbiBfX3VudXNlZCkKIHsKLQlpZiAoYnVm ICE9IE5VTEwpCi0JCSh2b2lkKWJzLT5GcmVlUG9vbChidWYpOworICBwcmludGYoIioqKioqKioq IEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGNvcHlvdXRcbiIpOworICByZXR1cm4gKC0xKTsK K30KKworc3RhdGljIHNzaXplX3QKK2VmaV9yZWFkaW4oaW50IGZkIF9fdW51c2VkLCB2bV9vZmZz ZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBsZW4gX191bnVzZWQpCit7Cisg IHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90IGNhbGwgcmVhZGluXG4iKTsK KyAgcmV0dXJuICgtMSk7CiB9CiAKKy8qIFRoZSBpbml0aWFsIG51bWJlciBvZiBoYW5kbGVzIHVz ZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLworI2RlZmluZSBOVU1fSEFORExFU19J TklUCTI0CisKK3N0YXRpYyBFRklfR1VJRCBEZXZpY2VQYXRoR1VJRCA9IERFVklDRV9QQVRIX1BS T1RPQ09MOworc3RhdGljIEVGSV9HVUlEIExvYWRlZEltYWdlR1VJRCA9IExPQURFRF9JTUFHRV9Q Uk9UT0NPTDsKK3N0YXRpYyBFRklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0g U0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MOworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJ RCA9IEVGSV9GSUxFX0lORk9fSUQ7OworCiAvKgogICogbm9kZXNfbWF0Y2ggcmV0dXJucyBUUlVF IGlmIHRoZSBpbWdwYXRoIGlzbid0IE5VTEwgYW5kIHRoZSBub2RlcyBtYXRjaCwKICAqIEZBTFNF IG90aGVyd2lzZS4KQEAgLTE0Miw2ICsxOTgsNyBAQCBkZXZwYXRoX2xhc3QoRUZJX0RFVklDRV9Q QVRIICpkZXZwYXRoKQogCXJldHVybiAoZGV2cGF0aCk7CiB9CiAKKyNpZmRlZiBFRklfREVCVUcK IC8qCiAgKiBkZXZwYXRoX25vZGVfc3RyIGlzIGEgYmFzaWMgb3V0cHV0IG1ldGhvZCBmb3IgYSBk ZXZwYXRoIG5vZGUgd2hpY2gKICAqIG9ubHkgdW5kZXJzdGFuZHMgYSBzdWJzZXQgb2YgdGhlIGF2 YWlsYWJsZSBzdWIgdHlwZXMuCkBAIC0yNzMsNyArMzMwLDcgQEAgZGV2cGF0aF9ub2RlX3N0cihj aGFyICpidWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZw YXRoX3N0cmxjYXQgYXBwZW5kcyBhIHRleHQgZGVzY3JpcHRpb24gb2YgZGV2cGF0aCB0byBidWYg YnV0IG5vdCBtb3JlCiAgKiB0aGFuIHNpemUgLSAxIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgTlVM LXRlcm1pbmF0b3IuCiAgKi8KLWludAorc3RhdGljIGludAogZGV2cGF0aF9zdHJsY2F0KGNoYXIg KmJ1Ziwgc2l6ZV90IHNpemUsIEVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzaXplX3Qg bGVuLCB1c2VkOwpAQCAtMzA0LDQ4ICszNjEsMjA3IEBAIGRldnBhdGhfc3RybGNhdChjaGFyICpi dWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZwYXRoX3N0 ciBpcyBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgdGV4dCBkZXNjcmlwdGlv biBvZgogICogZGV2cGF0aCB1c2luZyBhIHN0YXRpYyBidWZmZXIsIHNvIGl0IGlzbid0IHRocmVh ZCBzYWZlIQogICovCi1jaGFyICoKK3N0YXRpYyBjaGFyICoKIGRldnBhdGhfc3RyKEVGSV9ERVZJ Q0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzdGF0aWMgY2hhciBidWZbMjU2XTsKIAogCWRldnBhdGhf c3RybGNhdChidWYsIHNpemVvZihidWYpLCBkZXZwYXRoKTsKIAotCXJldHVybiBidWY7CisJcmV0 dXJuIChidWYpOworfQorI2VuZGlmCisKK3N0YXRpYyBFRklfU1RBVFVTCitlZmlfbG9hZChFRklf SEFORExFIGRldiwgY29uc3QgY2hhciAqZmlsZXBhdGgsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1 ZnNpemUpCit7CisgICAgICAgIFVJTlROIGluZm9zaXplID0gc2l6ZW9mKEVGSV9GSUxFX0lORk8p ICsKKyAgICAgICAgICAoKHN0cmxlbihmaWxlcGF0aCkgKyAxKSAqIHNpemVvZihDSEFSMTYpKTsK KyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87CisJRUZJX1NUQVRVUyBzdGF0dXM7CisgICAg ICAgIEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqaWZhY2U7CisgICAgICAgIEVGSV9GSUxFX0hBTkRM RSByb290OworICAgICAgICBFRklfRklMRV9IQU5ETEUgdGFyZ2V0OworICAgICAgICBDSEFSMTYg cGF0aDE2W3N0cmxlbihmaWxlcGF0aCkgKyAxXTsKKwl2b2lkICpidWY7CisKKyAgICAgICAgZmlu Zm8gPSBtYWxsb2MoaW5mb3NpemUpOworCisgICAgICAgIGlmIChmaW5mbyA9PSBOVUxMKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0K KworCXN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv Y29sR1VJRCwKKyAgICAgICAgICAgICh2b2lkICoqKSZpZmFjZSwgSUgsIE5VTEwsIEVGSV9PUEVO X1BST1RPQ09MX0dFVF9QUk9UT0NPTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBFRklfU1VD Q0VTUykgeworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHBy aW50ZigiT3BlbiBwcm90b2NvbCBmYWlsZWQhICVsZFxuIiwgRUZJX0VSUk9SX0NPREUoc3RhdHVz KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKyAgICAg ICAgc3RhdHVzID0gaWZhY2UtPk9wZW5Wb2x1bWUoaWZhY2UsICZyb290KTsKKworICAgICAgICBp ZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgQlMtPkNsb3NlUHJv dG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgSUgsIE5VTEwpOworICAg ICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHByaW50ZigiT3BlbiB2 b2x1bWUgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAg ICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV90b18x NihwYXRoMTYsIGZpbGVwYXRoKTsKKyAgICAgICAgc3RhdHVzID0gcm9vdC0+T3Blbihyb290LCAm dGFyZ2V0LCBwYXRoMTYsIEVGSV9GSUxFX01PREVfUkVBRCwgMCk7CisKKyAgICAgICAgaWYgKHN0 YXR1cyAhPSBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIEJTLT5DbG9zZVByb3RvY29s KGRldiwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAg ICAgICAgICBmcmVlKGZpbmZvKTsKKworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsK KyAgICAgICAgfQorCisgICAgICAgICpidWZzaXplID0gaW5mb3NpemU7CisgICAgICAgIHN0YXR1 cyA9IHRhcmdldC0+R2V0SW5mbyh0YXJnZXQsICZGaWxlSW5mb0dVSUQsIGJ1ZnNpemUsIGZpbmZv KTsKKworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAg ICAgQlMtPkNsb3NlUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwg SUgsIE5VTEwpOworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAg IHByaW50ZigiR2V0IGluZm8gZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykp OworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAg ICpidWZzaXplID0gZmluZm8tPkZpbGVTaXplOworCisgICAgICAgIGlmICgoYnVmID0gbWFsbG9j KGZpbmZvLT5GaWxlU2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQ cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg ICAgICAgICAgICAgICAgZnJlZShmaW5mbyk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWls ZWQgdG8gYWxsb2NhdGUgbG9hZCBidWZmZXIgJXpkIGZvciAnJXMnICIKKyAgICAgICAgICAgICAg ICAgICAgICAgIiglbHUpXG4iLCBmaW5mby0+RmlsZVNpemUsIGZpbGVwYXRoLCBFRklfRVJST1Jf Q09ERShzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VS Q0VTKTsKKyAgICAgICAgfQorCisgICAgICAgICpidWZwID0gYnVmOworICAgICAgICBzdGF0dXMg PSB0YXJnZXQtPlJlYWQodGFyZ2V0LCBidWZzaXplLCBidWYpOworICAgICAgICBCUy0+Q2xvc2VQ cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg ICAgICAgIGZyZWUoZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlJlYWQgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJP Ul9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAg ICAgfQorCisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOwogfQogCiAvKgogICogbG9hZF9s b2FkZXIgYXR0ZW1wdHMgdG8gbG9hZCB0aGUgbG9hZGVyIGltYWdlIGRhdGEuCiAgKgotICogSXQg dHJpZXMgZWFjaCBtb2R1bGUgYW5kIGl0cyByZXNwZWN0aXZlIGRldmljZXMsIGlkZW50aWZpZWQg YnkgbW9kLT5wcm9iZSwKLSAqIGluIG9yZGVyIHVudGlsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9jY3Vy cyBhdCB3aGljaCBwb2ludCBpdCByZXR1cm5zIEVGSV9TVUNDRVNTCi0gKiBhbmQgRUZJX05PVF9G T1VORCBvdGhlcndpc2UuCisgKiBUaGlzIHRyaWVzIGFsbCBoYW5kbGVzIHdoaWNoIHN1cHBvcnQg dGhlIEVGSV9TSU1QTEVfRklMRV9TWVNURU0gaW50ZXJmYWNlLgorICogSXQgaXMgZXhwZWN0ZWQg dGhhdCB0aGUgZHJpdmVycyB3aWxsIGhhdmUgaW5zdGFsbGVkIHRoaXMgaW50ZXJmYWNlIG9uIGV2 ZXJ5CisgKiBoYW5kbGUgcmVwcmVzZW50aW5nIGEgZGV2aWNlIGNvbnRhaW5pbmcgYSBzdXBwb3J0 ZWQgZmlsZSBzeXN0ZW0uCisgKgorICogTm90ZTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYXkgYmUg YWx0ZXJlZCB0byB1c2UgdGhlIEVGSV9MT0FEX0ZJTEUgaW50ZXJmYWNlLAorICogd2hpY2ggc2hv dWxkIHdvcmsgdHJhbnNwYXJlbnRseSB3aXRoIG5ldHdvcmsgYm9vdGluZy4KICAqCiAgKiBPbmx5 IGRldmljZXMgd2hpY2ggaGF2ZSBwcmVmZXJyZWQgbWF0Y2hpbmcgdGhlIHByZWZlcnJlZCBwYXJh bWV0ZXIgYXJlIHRyaWVkLgogICovCiBzdGF0aWMgRUZJX1NUQVRVUwotbG9hZF9sb2FkZXIoY29u c3QgYm9vdF9tb2R1bGVfdCAqKm1vZHAsIGRldl9pbmZvX3QgKipkZXZpbmZvcCwgdm9pZCAqKmJ1 ZnAsCi0gICAgc2l6ZV90ICpidWZzaXplLCBCT09MRUFOIHByZWZlcnJlZCkKK2xvYWRfbG9hZGVy KEVGSV9IQU5ETEUgKmhhbmRsZXAsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1ZnNpemUpCiB7Ci0J VUlOVE4gaTsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29uc3QgYm9vdF9tb2R1bGVfdCAqbW9kOwot Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7IGkrKykgewotCQltb2QgPSBib290 X21vZHVsZXNbaV07Ci0JCWZvciAoZGV2ID0gbW9kLT5kZXZpY2VzKCk7IGRldiAhPSBOVUxMOyBk ZXYgPSBkZXYtPm5leHQpIHsKLQkJCWlmIChkZXYtPnByZWZlcnJlZCAhPSBwcmVmZXJyZWQpCi0J CQkJY29udGludWU7Ci0KLQkJCWlmIChtb2QtPmxvYWQoUEFUSF9MT0FERVJfRUZJLCBkZXYsIGJ1 ZnAsIGJ1ZnNpemUpID09Ci0JCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJCQkqZGV2aW5mb3AgPSBk ZXY7Ci0JCQkJKm1vZHAgPSBtb2Q7Ci0JCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCQl9CisJ RUZJX0RFVklDRV9QQVRIICppbWdwYXRoOworCUVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aDsKKwlF RklfTE9BREVEX0lNQUdFICpib290X2ltYWdlOworICAgICAgICBFRklfSEFORExFICpib290X2hh bmRsZTsKKwlFRklfSEFORExFICpwcmVmZXJyZWQ7CisJRUZJX0hBTkRMRSAqaGFuZGxlczsKKyAg ICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisJVUlOVE4gaSwgaHNpemUsIG5oYW5kbGVzLCBucHJl ZmVycmVkOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKElILCAmTG9hZGVkSW1h Z2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmYm9vdF9pbWFnZSwgSUgsIE5VTEwsCisgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wpKSAhPSBFRklfU1VDQ0VTUykg eworCQlwYW5pYygiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUpXG4iLAorCQkgICAg RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJfQorCisgICAgICAgIGJvb3RfaGFuZGxlID0gYm9v dF9pbWFnZS0+RGV2aWNlSGFuZGxlOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29s KGJvb3RfaGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAodm9pZCAqKikmaW1n cGF0aCwgSUgsIE5VTEwsIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpKSB7CisgICAg ICAgICAgICAgICAgcGFuaWMoIkZhaWxlZCB0byBnZXQgaW1hZ2UgRGV2aWNlUGF0aCAoJWx1KVxu IiwKKyAgICAgICAgICAgICAgICAgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAg IH0KKyAgICAgICAgRFBSSU5URigiYm9vdDEgaW1hZ2VwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIo aW1ncGF0aCkpOworCisgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgaGFuZGxlcyAq LworCWhzaXplID0gKFVJTlROKU5VTV9IQU5ETEVTX0lOSVQgKiBzaXplb2YoRUZJX0hBTkRMRSk7 CisJaWYgKChoYW5kbGVzID0gbWFsbG9jKGhzaXplKSkgPT0gTlVMTCkKKwkJcGFuaWMoIkZhaWxl ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKKwkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworCisJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShC eVByb3RvY29sLCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgTlVMTCwKKwkgICAgJmhz aXplLCBoYW5kbGVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBFRklfU1VDQ0VTUzoK KwkJYnJlYWs7CisJY2FzZSBFRklfQlVGRkVSX1RPT19TTUFMTDoKKwkJKHZvaWQpQlMtPkZyZWVQ b29sKGhhbmRsZXMpOworCQlpZiAoKGhhbmRsZXMgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKSB7 CisJCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlICV6dSBoYW5kbGVzICglbHUpIiwgaHNpemUg LworCQkJICAgIHNpemVvZigqaGFuZGxlcyksIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQl9 CisJCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwKKyAgICAgICAgICAgICAg ICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIE5VTEwsICZoc2l6ZSwgaGFuZGxl cyk7CisJCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCisJCQlwYW5pYygiRmFpbGVkIHRvIGdl dCBkZXZpY2UgaGFuZGxlcyAoJWx1KVxuIiwKKwkJCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMp KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGFuaWMoIkZhaWxlZCB0byBnZXQgZGV2aWNlIGhh bmRsZXMgKCVsdSkiLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJfQogCisJaWYg KChwcmVmZXJyZWQgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKQorCQlwYW5pYygiRmFpbGVkIHRv IGFsbG9jYXRlICVkIGhhbmRsZXMgKCVsdSkiLCBOVU1fSEFORExFU19JTklULAorCQkgICAgRUZJ X0VSUk9SX0NPREUoc3RhdHVzKSk7CisKKyAgICAgICAgbnByZWZlcnJlZCA9IDA7CisJbmhhbmRs ZXMgPSBoc2l6ZSAvIHNpemVvZigqaGFuZGxlcyk7CisKKyAgICAgICAgLyogRmlndXJlIG91dCB3 aGljaCBoYW5kbGVzIGFyZSBwcmVmZXJyZWQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5o YW5kbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoQlMtPk9wZW5Qcm90b2NvbChoYW5k bGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSZk ZXZwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKSA9PQorICAg ICAgICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRbbnByZWZlcnJlZF0gPSBoYW5kbGVzW2ldOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHJlZmVycmVkKys7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQcm90b2Nv bChoYW5kbGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICBCUy0+Q2xvc2VQcm90b2NvbChib290X2hhbmRsZSwg JkRldmljZVBhdGhHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgLyogVHJ5IHRoZSBwcmVmZXJy ZWQgaGFuZGxlcyBmaXJzdCwgdGhlbiBhbGwgdGhlIGhhbmRsZXMgKi8KKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5wcmVmZXJyZWQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h ZChwcmVmZXJyZWRbaV0sIFBBVEhfTE9BREVSX0VGSSwgYnVmcCwgYnVmc2l6ZSkgPT0KKyAgICAg ICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmhh bmRsZXAgPSBwcmVmZXJyZWRbaV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEVG SV9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h ZChoYW5kbGVzW2ldLCBQQVRIX0xPQURFUl9FRkksIGJ1ZnAsIGJ1ZnNpemUpID09CisgICAgICAg ICAgICAgICAgICAgRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpoYW5k bGVwID0gaGFuZGxlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX1NV Q0NFU1MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaW50Zigi RmFpbGVkIHRvIGxvYWQgJXMgZnJvbSBhbnkgZGV2aWNlIVxuIiwgUEFUSF9MT0FERVJfRUZJKTsK KwogCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiB9CiAKQEAgLTM1OSwyMCArNTc1LDI3IEBAIHRy eV9ib290KHZvaWQpCiAJc2l6ZV90IGJ1ZnNpemUsIGxvYWRlcnNpemUsIGNtZHNpemU7CiAJdm9p ZCAqYnVmLCAqbG9hZGVyYnVmOwogCWNoYXIgKmNtZDsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29u c3QgYm9vdF9tb2R1bGVfdCAqbW9kOworICAgICAgICBFRklfSEFORExFIGZzaGFuZGxlOwogCUVG SV9IQU5ETEUgbG9hZGVyaGFuZGxlOwogCUVGSV9MT0FERURfSU1BR0UgKmxvYWRlZF9pbWFnZTsK IAlFRklfU1RBVFVTIHN0YXR1czsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpmc3BhdGg7CisK KwlzdGF0dXMgPSBsb2FkX2xvYWRlcigmZnNoYW5kbGUsICZsb2FkZXJidWYsICZsb2FkZXJzaXpl KTsKIAotCXN0YXR1cyA9IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2Fk ZXJzaXplLCBUUlVFKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCXN0YXR1cyA9 IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2FkZXJzaXplLAotCQkgICAg RkFMU0UpOworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKwlmc3BhdGggPSBOVUxMOworCWlm IChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gQlMtPk9wZW5Qcm90b2NvbChm c2hhbmRsZSwgJkRldmljZVBhdGhHVUlELAorICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikm ZnNwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKTsKIAkJaWYg KHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQkJcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCAnJXMn XG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCQkJcmV0dXJuIChzdGF0dXMpOwotCQl9CisJCQlEUFJJ TlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCisJCQkgICAgRUZJ X0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgfQorCQlEUFJJTlRGKCJmaWxl c3lzdGVtIGRldmljZSBwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIoZnNwYXRoKSk7CiAJfQogCiAJ LyoKQEAgLTM4Nyw5ICs2MTAsOSBAQCB0cnlfYm9vdCh2b2lkKQogCSAqLwogCWNtZCA9IE5VTEw7 CiAJY21kc2l6ZSA9IDA7Ci0Jc3RhdHVzID0gbW9kLT5sb2FkKFBBVEhfRE9UQ09ORklHLCBkZXYs ICZidWYsICZidWZzaXplKTsKKwlzdGF0dXMgPSBlZmlfbG9hZChmc2hhbmRsZSwgUEFUSF9ET1RD T05GSUcsICZidWYsICZidWZzaXplKTsKIAlpZiAoc3RhdHVzID09IEVGSV9OT1RfRk9VTkQpCi0J CXN0YXR1cyA9IG1vZC0+bG9hZChQQVRIX0NPTkZJRywgZGV2LCAmYnVmLCAmYnVmc2l6ZSk7CisJ CXN0YXR1cyA9IGVmaV9sb2FkKGZzaGFuZGxlLCBQQVRIX0NPTkZJRywgJmJ1ZiwgJmJ1ZnNpemUp OwogCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKIAkJY21kc2l6ZSA9IGJ1ZnNpemUgKyAx OwogCQljbWQgPSBtYWxsb2MoY21kc2l6ZSk7CkBAIC00MDEsMjQgKzYyNCwyNSBAQCB0cnlfYm9v dCh2b2lkKQogCQlidWYgPSBOVUxMOwogCX0KIAotCWlmICgoc3RhdHVzID0gYnMtPkxvYWRJbWFn ZShUUlVFLCBpbWFnZSwgZGV2cGF0aF9sYXN0KGRldi0+ZGV2cGF0aCksCisJaWYgKChzdGF0dXMg PSBCUy0+TG9hZEltYWdlKFRSVUUsIElILCBkZXZwYXRoX2xhc3QoZnNwYXRoKSwKIAkgICAgbG9h ZGVyYnVmLCBsb2FkZXJzaXplLCAmbG9hZGVyaGFuZGxlKSkgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJ cHJpbnRmKCJGYWlsZWQgdG8gbG9hZCBpbWFnZSBwcm92aWRlZCBieSAlcywgc2l6ZTogJXp1LCAo JWx1KVxuIiwKLQkJICAgICBtb2QtPm5hbWUsIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0 YXR1cykpOworCQlwcmludGYoIkZhaWxlZCB0byBsb2FkIGltYWdlLCBzaXplOiAlenUsICglbHUp XG4iLAorCQkgICAgIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQlnb3Rv IGVycm91dDsKIAl9CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5IYW5kbGVQcm90b2NvbChsb2FkZXJo YW5kbGUsICZMb2FkZWRJbWFnZUdVSUQsCi0JICAgIChWT0lEKiopJmxvYWRlZF9pbWFnZSkpICE9 IEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlIHBy b3ZpZGVkIGJ5ICVzICglbHUpXG4iLAotCQkgICAgbW9kLT5uYW1lLCBFRklfRVJST1JfQ09ERShz dGF0dXMpKTsKKwlpZiAoKHN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2wobG9hZGVyaGFuZGxlLCAm TG9hZGVkSW1hZ2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmbG9hZGVkX2ltYWdlLCBJSCwg TlVMTCwKKyAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpICE9IEVG SV9TVUNDRVNTKSB7CisJCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUp XG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJCWdvdG8gZXJyb3V0OwogCX0K IAogCWlmIChjbWQgIT0gTlVMTCkKIAkJcHJpbnRmKCIgICAgY29tbWFuZCBhcmdzOiAlc1xuIiwg Y21kKTsKIAotCWxvYWRlZF9pbWFnZS0+RGV2aWNlSGFuZGxlID0gZGV2LT5kZXZoYW5kbGU7CisJ bG9hZGVkX2ltYWdlLT5EZXZpY2VIYW5kbGUgPSBmc2hhbmRsZTsKIAlsb2FkZWRfaW1hZ2UtPkxv YWRPcHRpb25zU2l6ZSA9IGNtZHNpemU7CiAJbG9hZGVkX2ltYWdlLT5Mb2FkT3B0aW9ucyA9IGNt ZDsKIApAQCAtNDM0LDEwICs2NTgsMTAgQEAgdHJ5X2Jvb3Qodm9pZCkKIAlEU1RBTEwoMTAwMDAw MCk7CiAJRFBSSU5URigiLlxuIik7CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5TdGFydEltYWdlKGxv YWRlcmhhbmRsZSwgTlVMTCwgTlVMTCkpICE9CisJaWYgKChzdGF0dXMgPSBCUy0+U3RhcnRJbWFn ZShsb2FkZXJoYW5kbGUsIE5VTEwsIE5VTEwpKSAhPQogCSAgICBFRklfU1VDQ0VTUykgewotCQlw cmludGYoIkZhaWxlZCB0byBzdGFydCBpbWFnZSBwcm92aWRlZCBieSAlcyAoJWx1KVxuIiwKLQkJ ICAgIG1vZC0+bmFtZSwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJCXByaW50ZigiRmFpbGVk IHRvIHN0YXJ0IGltYWdlICglbHUpXG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7 CiAJCWxvYWRlZF9pbWFnZS0+TG9hZE9wdGlvbnNTaXplID0gMDsKIAkJbG9hZGVkX2ltYWdlLT5M b2FkT3B0aW9ucyA9IE5VTEw7CiAJfQpAQCAtNDUzLDEzNCArNjc3LDE5IEBAIGVycm91dDoKIAly ZXR1cm4gKHN0YXR1cyk7CiB9CiAKLS8qCi0gKiBwcm9iZV9oYW5kbGUgZGV0ZXJtaW5lcyBpZiB0 aGUgcGFzc2VkIGhhbmRsZSByZXByZXNlbnRzIGEgbG9naWNhbCBwYXJ0aXRpb24KLSAqIGlmIGl0 IGRvZXMgaXQgdXNlcyBlYWNoIG1vZHVsZSBpbiBvcmRlciB0byBwcm9iZSBpdCBhbmQgaWYgc3Vj Y2Vzc2Z1bCBpdAotICogcmV0dXJucyBFRklfU1VDQ0VTUy4KLSAqLwotc3RhdGljIEVGSV9TVEFU VVMKLXByb2JlX2hhbmRsZShFRklfSEFORExFIGgsIEVGSV9ERVZJQ0VfUEFUSCAqaW1ncGF0aCwg Qk9PTEVBTiAqcHJlZmVycmVkKQotewotCWRldl9pbmZvX3QgKmRldmluZm87Ci0JRUZJX0JMT0NL X0lPICpibGtpbzsKLQlFRklfREVWSUNFX1BBVEggKmRldnBhdGg7Ci0JRUZJX1NUQVRVUyBzdGF0 dXM7Ci0JVUlOVE4gaTsKLQotCS8qIEZpZ3VyZSBvdXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIGFu IGFjdHVhbCBwYXJ0aXRpb24uICovCi0Jc3RhdHVzID0gYnMtPkhhbmRsZVByb3RvY29sKGgsICZE ZXZpY2VQYXRoR1VJRCwgKHZvaWQgKiopJmRldnBhdGgpOwotCWlmIChzdGF0dXMgPT0gRUZJX1VO U1VQUE9SVEVEKQotCQlyZXR1cm4gKHN0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICE9IEVGSV9TVUND RVNTKSB7Ci0JCURQUklOVEYoIlxuRmFpbGVkIHRvIHF1ZXJ5IERldmljZVBhdGggKCVsdSlcbiIs Ci0JCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0K LQotCURQUklOVEYoInByb2Jpbmc6ICVzXG4iLCBkZXZwYXRoX3N0cihkZXZwYXRoKSk7Ci0KLQlz dGF0dXMgPSBicy0+SGFuZGxlUHJvdG9jb2woaCwgJkJsb2NrSW9Qcm90b2NvbEdVSUQsICh2b2lk ICoqKSZibGtpbyk7Ci0JaWYgKHN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpCi0JCXJldHVybiAo c3RhdHVzKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJRFBSSU5URigiXG5G YWlsZWQgdG8gcXVlcnkgQmxvY2tJb1Byb3RvY29sICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9S X0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlpZiAoIWJsa2lvLT5N ZWRpYS0+TG9naWNhbFBhcnRpdGlvbikKLQkJcmV0dXJuIChFRklfVU5TVVBQT1JURUQpOwotCi0J KnByZWZlcnJlZCA9IGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKTsKLQotCS8q IFJ1biB0aHJvdWdoIGVhY2ggbW9kdWxlLCBzZWUgaWYgaXQgY2FuIGxvYWQgdGhpcyBwYXJ0aXRp b24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JPT1RfTU9EVUxFUzsgaSsrKSB7Ci0JCWlmICgo c3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLAotCQkgICAgc2l6ZW9mKCpk ZXZpbmZvKSwgKHZvaWQgKiopJmRldmluZm8pKSAhPQotCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJ CURQUklOVEYoIlxuRmFpbGVkIHRvIGFsbG9jYXRlIGRldmluZm8gKCVsdSlcbiIsCi0JCQkgICAg RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXZpbmZvLT5k ZXYgPSBibGtpbzsKLQkJZGV2aW5mby0+ZGV2cGF0aCA9IGRldnBhdGg7Ci0JCWRldmluZm8tPmRl dmhhbmRsZSA9IGg7Ci0JCWRldmluZm8tPmRldmRhdGEgPSBOVUxMOwotCQlkZXZpbmZvLT5wcmVm ZXJyZWQgPSAqcHJlZmVycmVkOwotCQlkZXZpbmZvLT5uZXh0ID0gTlVMTDsKLQotCQlzdGF0dXMg PSBib290X21vZHVsZXNbaV0tPnByb2JlKGRldmluZm8pOwotCQlpZiAoc3RhdHVzID09IEVGSV9T VUNDRVNTKQotCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChk ZXZpbmZvKTsKLQl9Ci0KLQlyZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Ci19Ci0KLS8qCi0gKiBw cm9iZV9oYW5kbGVfc3RhdHVzIGNhbGxzIHByb2JlX2hhbmRsZSBhbmQgb3V0cHV0cyB0aGUgcmV0 dXJuZWQgc3RhdHVzCi0gKiBvZiB0aGUgY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLXByb2JlX2hh bmRsZV9zdGF0dXMoRUZJX0hBTkRMRSBoLCBFRklfREVWSUNFX1BBVEggKmltZ3BhdGgpCi17Ci0J RUZJX1NUQVRVUyBzdGF0dXM7Ci0JQk9PTEVBTiBwcmVmZXJyZWQ7Ci0KLQlzdGF0dXMgPSBwcm9i ZV9oYW5kbGUoaCwgaW1ncGF0aCwgJnByZWZlcnJlZCk7Ci0JCi0JRFBSSU5URigicHJvYmU6ICIp OwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBFRklfVU5TVVBQT1JURUQ6Ci0JCXByaW50Zigi LiIpOwotCQlEUFJJTlRGKCIgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRUZJ X1NVQ0NFU1M6Ci0JCWlmIChwcmVmZXJyZWQpIHsKLQkJCXByaW50ZigiJWMiLCAnKicpOwotCQkJ RFBSSU5URigiIHN1cHBvcnRlZCAocHJlZmVycmVkKVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmlu dGYoIiVjIiwgJysnKTsKLQkJCURQUklOVEYoIiBzdXBwb3J0ZWRcbiIpOwotCQl9Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCXByaW50ZigieCIpOwotCQlEUFJJTlRGKCIgZXJyb3IgKCVsdSlcbiIs IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQl9Ci0JRFNUQUxMKDUwMDAwMCk7 Ci19Ci0KIEVGSV9TVEFUVVMKLWVmaV9tYWluKEVGSV9IQU5ETEUgWGltYWdlLCBFRklfU1lTVEVN X1RBQkxFICpYc3lzdGFiKQorbWFpbihpbnQgYXJnYyBfX3VudXNlZCwgQ0hBUjE2ICphcmd2W10g X191bnVzZWQpCiB7Ci0JRUZJX0hBTkRMRSAqaGFuZGxlczsKLQlFRklfTE9BREVEX0lNQUdFICpp bWc7Ci0JRUZJX0RFVklDRV9QQVRIICppbWdwYXRoOwogCUVGSV9TVEFUVVMgc3RhdHVzOwotCUVG SV9DT05TT0xFX0NPTlRST0xfUFJPVE9DT0wgKkNvbnNvbGVDb250cm9sID0gTlVMTDsKIAlTSU1Q TEVfVEVYVF9PVVRQVVRfSU5URVJGQUNFICpjb25vdXQgPSBOVUxMOwotCVVJTlROIGksIG1heF9k aW0sIGJlc3RfbW9kZSwgY29scywgcm93cywgaHNpemUsIG5oYW5kbGVzOwotCi0JLyogQmFzaWMg aW5pdGlhbGl6YXRpb24qLwotCXN5c3RhYiA9IFhzeXN0YWI7Ci0JaW1hZ2UgPSBYaW1hZ2U7Ci0J YnMgPSBYc3lzdGFiLT5Cb290U2VydmljZXM7Ci0KLQkvKiBTZXQgdXAgdGhlIGNvbnNvbGUsIHNv IHByaW50ZiB3b3Jrcy4gKi8KLQlzdGF0dXMgPSBicy0+TG9jYXRlUHJvdG9jb2woJkNvbnNvbGVD b250cm9sR1VJRCwgTlVMTCwKLQkgICAgKFZPSUQgKiopJkNvbnNvbGVDb250cm9sKTsKLQlpZiAo c3RhdHVzID09IEVGSV9TVUNDRVNTKQotCQkodm9pZClDb25zb2xlQ29udHJvbC0+U2V0TW9kZShD b25zb2xlQ29udHJvbCwKLQkJICAgIEVmaUNvbnNvbGVDb250cm9sU2NyZWVuVGV4dCk7CisJVUlO VE4gaSwgbWF4X2RpbSwgYmVzdF9tb2RlLCBjb2xzLCByb3dzOworCisJY29uc19wcm9iZSgpOwor CiAJLyoKIAkgKiBSZXNldCB0aGUgY29uc29sZSBhbmQgZmluZCB0aGUgYmVzdCB0ZXh0IG1vZGUu CiAJICovCi0JY29ub3V0ID0gc3lzdGFiLT5Db25PdXQ7CisJY29ub3V0ID0gU1QtPkNvbk91dDsK IAljb25vdXQtPlJlc2V0KGNvbm91dCwgVFJVRSk7CiAJbWF4X2RpbSA9IGJlc3RfbW9kZSA9IDA7 CiAJZm9yIChpID0gMDsgOyBpKyspIHsKQEAgLTU5NywxMjMgKzcwNiwzMSBAQCBlZmlfbWFpbihF RklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSAqWHN5c3RhYikKIAljb25vdXQtPkVu YWJsZUN1cnNvcihjb25vdXQsIFRSVUUpOwogCWNvbm91dC0+Q2xlYXJTY3JlZW4oY29ub3V0KTsK IAotCXByaW50ZigiXG4+PiBGcmVlQlNEIEVGSSBib290IGJsb2NrXG4iKTsKLQlwcmludGYoIiAg IExvYWRlciBwYXRoOiAlc1xuXG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCXByaW50ZigiICAgSW5p dGlhbGl6aW5nIG1vZHVsZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7 IGkrKykgewotCQlwcmludGYoIiAlcyIsIGJvb3RfbW9kdWxlc1tpXS0+bmFtZSk7Ci0JCWlmIChi b290X21vZHVsZXNbaV0tPmluaXQgIT0gTlVMTCkKLQkJCWJvb3RfbW9kdWxlc1tpXS0+aW5pdCgp OwotCX0KLQlwdXRjaGFyKCdcbicpOwotCi0JLyogR2V0IGFsbCB0aGUgZGV2aWNlIGhhbmRsZXMg Ki8KLQloc2l6ZSA9IChVSU5UTilOVU1fSEFORExFU19JTklUICogc2l6ZW9mKEVGSV9IQU5ETEUp OwotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBoc2l6ZSwg KHZvaWQgKiopJmhhbmRsZXMpKQotCSAgICAhPSBFRklfU1VDQ0VTUykKLQkJcGFuaWMoIkZhaWxl ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKLQkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCi0Jc3RhdHVzID0gYnMtPkxvY2F0ZUhhbmRsZShC eVByb3RvY29sLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwgTlVMTCwKLQkgICAgJmhzaXplLCBoYW5k bGVzKTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgRUZJX1NVQ0NFU1M6Ci0JCWJyZWFrOwot CWNhc2UgRUZJX0JVRkZFUl9UT09fU01BTEw6Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChoYW5kbGVz KTsKLQkJaWYgKChzdGF0dXMgPSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIGhzaXpl LAotCQkgICAgKHZvaWQgKiopJmhhbmRsZXMpKSAhPSBFRklfU1VDQ0VTUykgewotCQkJcGFuaWMo IkZhaWxlZCB0byBhbGxvY2F0ZSAlenUgaGFuZGxlcyAoJWx1KSIsIGhzaXplIC8KLQkJCSAgICBz aXplb2YoKmhhbmRsZXMpLCBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJfQotCQlzdGF0dXMg PSBicy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZCbG9ja0lvUHJvdG9jb2xHVUlELAotCQkg ICAgTlVMTCwgJmhzaXplLCBoYW5kbGVzKTsKLQkJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykK LQkJCXBhbmljKCJGYWlsZWQgdG8gZ2V0IGRldmljZSBoYW5kbGVzICglbHUpXG4iLAotCQkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwYW5pYygi RmFpbGVkIHRvIGdldCBkZXZpY2UgaGFuZGxlcyAoJWx1KSIsCi0JCSAgICBFRklfRVJST1JfQ09E RShzdGF0dXMpKTsKLQl9CisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBibG9jayBjYWNoZS4gU2V0 IHRoZSB1cHBlciBsaW1pdC4KKwkgKi8KKwliY2FjaGVfaW5pdCgzMjc2OCwgNTEyKTsKIAotCS8q IFNjYW4gYWxsIHBhcnRpdGlvbnMsIHByb2Jpbmcgd2l0aCBhbGwgbW9kdWxlcy4gKi8KLQluaGFu ZGxlcyA9IGhzaXplIC8gc2l6ZW9mKCpoYW5kbGVzKTsKLQlwcmludGYoIiAgIFByb2JpbmcgJXp1 IGJsb2NrIGRldmljZXMuLi4iLCBuaGFuZGxlcyk7Ci0JRFBSSU5URigiXG4iKTsKKwlwcmludGYo IlxuPj4gRnJlZUJTRCBFRkkgYm9vdCBibG9ja1xuIik7CiAKLQkvKiBEZXRlcm1pbmUgdGhlIGRl dnBhdGggb2Ygb3VyIGltYWdlIHNvIHdlIGNhbiBwcmVmZXIgaXQuICovCi0Jc3RhdHVzID0gYnMt PkhhbmRsZVByb3RvY29sKGltYWdlLCAmTG9hZGVkSW1hZ2VHVUlELCAoVk9JRCoqKSZpbWcpOwot CWltZ3BhdGggPSBOVUxMOwotCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKLQkJc3RhdHVz ID0gYnMtPkhhbmRsZVByb3RvY29sKGltZy0+RGV2aWNlSGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQs Ci0JCSAgICAodm9pZCAqKikmaW1ncGF0aCk7Ci0JCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCi0J CQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCURQUklOVEYoImJvb3QxIGltYWdlcGF0 aDogJXNcbiIsIGRldnBhdGhfc3RyKGltZ3BhdGgpKTsKLQl9CisJYXJjaHN3LmFyY2hfYXV0b2xv YWQgPSBlZmlfYXV0b2xvYWQ7CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gZWZpX2dldGRldjsKKwlh cmNoc3cuYXJjaF9jb3B5aW4gPSBlZmlfY29weWluOworCWFyY2hzdy5hcmNoX2NvcHlvdXQgPSBl ZmlfY29weW91dDsKKwlhcmNoc3cuYXJjaF9yZWFkaW4gPSBlZmlfcmVhZGluOwogCi0JZm9yIChp ID0gMDsgaSA8IG5oYW5kbGVzOyBpKyspCi0JCXByb2JlX2hhbmRsZV9zdGF0dXMoaGFuZGxlc1tp XSwgaW1ncGF0aCk7Ci0JcHJpbnRmKCIgZG9uZVxuIik7CisJcHJpbnRmKCIgICBMb2FkZXIgcGF0 aDogJXNcblxuIiwgUEFUSF9MT0FERVJfRUZJKTsKKwlwcmludGYoIiAgIEluaXRpYWxpemluZyBt b2R1bGVzOiIpOwogCi0JLyogU3RhdHVzIHN1bW1hcnkuICovCi0JZm9yIChpID0gMDsgaSA8IE5V TV9CT09UX01PRFVMRVM7IGkrKykgewotCQlwcmludGYoIiAgICAiKTsKLQkJYm9vdF9tb2R1bGVz W2ldLT5zdGF0dXMoKTsKKwlmb3IgKGkgPSAwOyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKysp IHsKKwkJcHJpbnRmKCIgJXMiLCBlZmlfZHJpdmVyc1tpXS0+bmFtZSk7CisJCWlmIChlZmlfZHJp dmVyc1tpXS0+aW5pdCAhPSBOVUxMKQorCQkJZWZpX2RyaXZlcnNbaV0tPmluaXQoKTsKIAl9CisJ cHV0Y2hhcignXG4nKTsKIAogCXRyeV9ib290KCk7CiAKIAkvKiBJZiB3ZSBnZXQgaGVyZSwgd2Un cmUgb3V0IG9mIGx1Y2suLi4gKi8KIAlwYW5pYygiTm8gYm9vdGFibGUgcGFydGl0aW9ucyBmb3Vu ZCEiKTsKIH0KLQotLyoKLSAqIGFkZF9kZXZpY2UgYWRkcyBhIGRldmljZSB0byB0aGUgcGFzc2Vk IGRldmluZm8gbGlzdC4KLSAqLwotdm9pZAotYWRkX2RldmljZShkZXZfaW5mb190ICoqZGV2aW5m b3AsIGRldl9pbmZvX3QgKmRldmluZm8pCi17Ci0JZGV2X2luZm9fdCAqZGV2OwotCi0JaWYgKCpk ZXZpbmZvcCA9PSBOVUxMKSB7Ci0JCSpkZXZpbmZvcCA9IGRldmluZm87Ci0JCXJldHVybjsKLQl9 Ci0KLQlmb3IgKGRldiA9ICpkZXZpbmZvcDsgZGV2LT5uZXh0ICE9IE5VTEw7IGRldiA9IGRldi0+ bmV4dCkKLQkJOwotCi0JZGV2LT5uZXh0ID0gZGV2aW5mbzsKLX0KLQotdm9pZAotcGFuaWMoY29u c3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXByaW50ZigicGFuaWM6ICIp OwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZwcmludGYoZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsK LQlwcmludGYoIlxuIik7Ci0KLQl3aGlsZSAoMSkge30KLX0KLQotdm9pZAotcHV0Y2hhcihpbnQg YykKLXsKLQlDSEFSMTYgYnVmWzJdOwotCi0JaWYgKGMgPT0gJ1xuJykgewotCQlidWZbMF0gPSAn XHInOwotCQlidWZbMV0gPSAwOwotCQlzeXN0YWItPkNvbk91dC0+T3V0cHV0U3RyaW5nKHN5c3Rh Yi0+Q29uT3V0LCBidWYpOwotCX0KLQlidWZbMF0gPSBjOwotCWJ1ZlsxXSA9IDA7Ci0Jc3lzdGFi LT5Db25PdXQtPk91dHB1dFN0cmluZyhzeXN0YWItPkNvbk91dCwgYnVmKTsKLX0KZGlmZiAtLWdp dCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9v dF9tb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2ZDVhNjdhMTAuLjAw MDAwMDAwMDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaAorKysgL2Rldi9u dWxsCkBAIC0xLDExNyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAxNSBFcmljIE1j Q29ya2xlCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNp Zm5kZWYgX0JPT1RfTU9EVUxFX0hfCi0jZGVmaW5lIF9CT09UX01PRFVMRV9IXwotCi0jaW5jbHVk ZSA8c3RkYm9vbC5oPgotCi0jaW5jbHVkZSA8ZWZpLmg+Ci0jaW5jbHVkZSA8ZWZpbGliLmg+Ci0j aW5jbHVkZSA8ZWZpY29uc2N0bC5oPgotCi0jaWZkZWYgRUZJX0RFQlVHCi0jZGVmaW5lIERQUklO VEYoZm10LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCi0jZGVmaW5lIERTVEFMTChkKSBi cy0+U3RhbGwoZCkKLSNlbHNlCi0jZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9Ci0jZGVmaW5l IERTVEFMTChkKSB7fQotI2VuZGlmCi0KLS8qIEVGSSBkZXZpY2UgaW5mbyAqLwotdHlwZWRlZiBz dHJ1Y3QgZGV2X2luZm8KLXsKLQlFRklfQkxPQ0tfSU8gKmRldjsKLQlFRklfREVWSUNFX1BBVEgg KmRldnBhdGg7Ci0JRUZJX0hBTkRMRSAqZGV2aGFuZGxlOwotCXZvaWQgKmRldmRhdGE7Ci0JQk9P TEVBTiBwcmVmZXJyZWQ7Ci0Jc3RydWN0IGRldl9pbmZvICpuZXh0OwotfSBkZXZfaW5mb190Owot Ci0vKgotICogQSBib290IGxvYWRlciBtb2R1bGUuCi0gKgotICogVGhpcyBpcyBhIHN0YW5kYXJk IGludGVyZmFjZSBmb3IgZmlsZXN5c3RlbSBtb2R1bGVzIGluIHRoZSBFRkkgc3lzdGVtLgotICov Ci10eXBlZGVmIHN0cnVjdCBib290X21vZHVsZV90Ci17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQot CS8qIGluaXQgaXMgdGhlIG9wdGlvbmFsIGluaXRpYWxpc2VyIGZvciB0aGUgbW9kdWxlLiAqLwot CXZvaWQgKCppbml0KSgpOwotCi0JLyoKLQkgKiBwcm9iZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBt b2R1bGUgY2FuIGhhbmRsZSBkZXYuCi0JICoKLQkgKiBSZXR1cm4gY29kZXM6Ci0JICogRUZJX1NV Q0NFU1MgPSBUaGUgbW9kdWxlIGNhbiBoYW5kbGUgdGhlIGRldmljZS4KLQkgKiBFRklfTk9UX0ZP VU5EID0gVGhlIG1vZHVsZSBjYW4gbm90IGhhbmRsZSB0aGUgZGV2aWNlLgotCSAqIE90aGVyID0g VGhlIG1vZHVsZSBlbmNvdW50ZXJlZCBhbiBlcnJvci4KLQkgKi8KLQlFRklfU1RBVFVTICgqcHJv YmUpKGRldl9pbmZvX3QqIGRldik7Ci0KLQkvKgotCSAqIGxvYWQgc2hvdWxkIHNlbGVjdCB0aGUg YmVzdCBvdXQgb2YgYSBzZXQgb2YgZGV2aWNlcyB0aGF0IHByb2JlCi0JICogaW5kaWNhdGVkIHdl cmUgbG9hZGFibGUgYW5kIGxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLgotCSAqCi0JICogUmV0dXJu IGNvZGVzOgotCSAqIEVGSV9TVUNDRVNTID0gVGhlIG1vZHVsZSBjYW4gaGFuZGxlIHRoZSBkZXZp Y2UuCi0JICogRUZJX05PVF9GT1VORCA9IFRoZSBtb2R1bGUgY2FuIG5vdCBoYW5kbGUgdGhlIGRl dmljZS4KLQkgKiBPdGhlciA9IFRoZSBtb2R1bGUgZW5jb3VudGVyZWQgYW4gZXJyb3IuCi0JICov Ci0JRUZJX1NUQVRVUyAoKmxvYWQpKGNvbnN0IGNoYXIgKmZpbGVwYXRoLCBkZXZfaW5mb190ICpk ZXZpbmZvLAotCSAgICB2b2lkICoqYnVmLCBzaXplX3QgKmJ1ZnNpemUpOwotCi0JLyogc3RhdHVz IG91dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2JlZCBkZXZpY2VzLiAqLwotCXZvaWQg KCpzdGF0dXMpKCk7Ci0KLQkvKiB2YWxpZCBkZXZpY2VzIGFzIGZvdW5kIGJ5IHByb2JlLiAqLwot CWRldl9pbmZvX3QgKigqZGV2aWNlcykoKTsKLX0gYm9vdF9tb2R1bGVfdDsKLQotLyogU3RhbmRh cmQgYm9vdCBtb2R1bGVzLiAqLwotI2lmZGVmIEVGSV9VRlNfQk9PVAotZXh0ZXJuIGNvbnN0IGJv b3RfbW9kdWxlX3QgdWZzX21vZHVsZTsKLSNlbmRpZgotI2lmZGVmIEVGSV9aRlNfQk9PVAotZXh0 ZXJuIGNvbnN0IGJvb3RfbW9kdWxlX3QgemZzX21vZHVsZTsKLSNlbmRpZgotCi0vKiBGdW5jdGlv bnMgYXZhaWxhYmxlIHRvIG1vZHVsZXMuICovCi1leHRlcm4gdm9pZCBhZGRfZGV2aWNlKGRldl9p bmZvX3QgKipkZXZpbmZvcCwgZGV2X2luZm9fdCAqZGV2aW5mbyk7Ci1leHRlcm4gdm9pZCBwYW5p Yyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19kZWFkMjsKLWV4dGVybiBpbnQgcHJpbnRmKGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90 IHN6LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotCi1leHRlcm4gRUZJX1NZU1RFTV9U QUJMRSAqc3lzdGFiOwotZXh0ZXJuIEVGSV9CT09UX1NFUlZJQ0VTICpiczsKLQotZXh0ZXJuIGlu dCBkZXZwYXRoX3N0cmxjYXQoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgRUZJX0RFVklDRV9QQVRI ICpkZXZwYXRoKTsKLWV4dGVybiBjaGFyICpkZXZwYXRoX3N0cihFRklfREVWSUNFX1BBVEggKmRl dnBhdGgpOwotI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hbWQ2NC50 bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFtZDY0LnRtcGwuYnoyLnV1CmluZGV4 IGEzZWMzMmQxNDUxLi5jNzMwOGE0Nzk4NSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9ib290MS9m YXQtYW1kNjQudG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYW1kNjQudG1w bC5iejIudXUKQEAgLTIsMjUgKzIsNTAgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmlsZXN5c3RlbSBj cmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNEJAogYmVnaW4g NjQ0IGZhdC1hbWQ2NC50bXBsLmJ6MgotTTBFSUguMyUhNjI5MzY/JCkzJCxgJlU5X19fX19aXktK Wl9eTl9eT15aX15bT05fTkteSkpeS1pOS05OSgotTVpOS05aT0peUGArXCMkITAkIzFELSxAIylE VCMxQiZBSURRLEFEOiMxSFRSYC0jKUQ4MFEhRDosKURgYAotTSMxQEYzMGBgYCZAYCRKSjkhX0hV NDoiLDMhLEYwJkMoODNgRjMwVGBUIUImISxGYChQM2AiIzAsQGAvMgotTTo6YCMwIURgLEMxYFQ5 IzMoYFI5LWBUOEFIOjksMyg5JkBUOi0sQCMwUjkmJCwwOSZDIjlgYGBUOClEVAotTWBgYCFIYGBK QkRAXzJCOkZGOSlJSFEvMSM6QC1gOmBSIyhUYCZAOi1gIUg4RkFIOjo6J0o6Oi1gOSYxWgotTUZG ISdIQUI4VS8xLyo4LS0tM0VWKyo8WkxcUzlCWEVDWzZJIixCRSQwQkRBJDEkJUc2NlRINlBGJDAo MAotTVhEQSEiJjxISiw9LVc9Sz5QWjU6TF5cMTk+PlQySzNPQT5UVVM4TT5WSl87OVA3Ijg7Jjcm OFI1MU4+RgotTTFFJUEjNitGOSpIQCQoOUo8SzJWNz1ESFtZU0spTERONjE4XTBTJDMiTTZKSzVK VTpNOUoqNSk0NDQ0NAotTTQ1SlUlOjU6OlU6TTZLPDpUNDJISEhISEhZSTpKKTQ0NDQ0LCtCO1I1 PiUlJSUlJSUkPiEhISEhISEhIQotTSEhISEhISEjNzZDQDxDMUhUOi0mQzEhISEhISEhISFUWCYj IUBQOCwmI0o4WSpCQkJCQkJCQidAPCMhQAotTVA4LCYjIiQ0KioqKioqKi4/Wk8pVTU5Tlc5WV81 UkI5PVNHSyVBTzkxRC8sUlc6SlVFV0o3Q0lDVCRNLAotTV1dPk9NOy1OJV5XWyE8PUhbPC0xPFFZ KVc8YCVCUlQ8RGArMzM3NVtcRk9TXFlCRDBgUlNMOCxVVjUxPgotTVJSIlNWTEw+TEcqWjFHK0sl TjspOz5JSVlMLTdMKkQ8QjVVKzIvMjo1SjZLN0srT043UzwtWldbYDg7JAotTTlFU1M2WT5bUS1T SDs1RDtSVV8rWksuK1RFTVglSyhRUTgxM1Y6R1MxWlQ7IlJcIUgkSy9aOj0lMzg2TQotTVBKTC48 Sz9DKko2QERJKVwjNktVPSxAVjM6LUpXMz4uYFg7Qk4wU1MyLEk7VSpJOzsuXU81Wk1JOUNNVgot TVkoOzgqXENYWC1TUFcoXlo1V0lXUFcwVkA/N0RMR1pAUUpRSEM2IUotXFVbPkBUJDJGKTMiN1VN MlYrOgotTStZTUZXO01PNl48LUBMKVI3KzxXTFZKRU8sJkhOSSs+WFUwSkIoTCxLSTpGW09EJVpV Qz0tMFdCXDdDPwotTS4iUCclODNDTDFCTSRSTEhEKTomNyxET1NMWTE9MlksSF9FT0dgPCVZUzAs IVEmJFhTXScpOENYRVhQXwotTUZYMi03KiwjJVA7IVFdVilFI0JPIjgzIz9cVjNDLi5ZI0UsMT9M NVMmLE5DJURRST47K2BEUz5OUUw1PwotPys2SUY5MTVWJDAiJClAYE0rIlEpQChfOSshP14rTjIq PCokQVhBKjhBQGBgCitNMEVJSC4zJSE2MjkzNjMkIiUmXGAnWUFfX19fX19fX19fX19fX15PXlpf XltfTlteSl5OS15LWk9LT05KCitNWk5LXlpOW15YYENfJS1gYEhIYCU0MSIxKCopYEJKIUg6YGBg P001YGBgIzBgYGBgYGBgYC1gOi0jMGBgCitNYGBgYGBgYGBgYGBgYDU1NSRfMkAhT19VMkovX1RK QV9KSj40IUhgYGBgVGBgYGBgYCZAYGBgYGA6YGBgCitNIUhgYD5IYCZAIUhSYDAsRjMoIURSYGBU UDBUYDpgYCMwUSMzMCMoYGAtYC1gUiZAJkAhRCFIJkZDJCZDCitNMGBgJkBgIzBAOSxGMCMpRGAh SUBBSGBUYGAmQUImRkAmMGBgOmA6IUQtYC1gIygjMC0tJigtJkBgYC1gCitNYCZBYFI5LEAmMyhg IzMhIzAhSGBgLSMkLS1gLEBgYFRgVCMoOmA6YCYwJkA6OiwwOi1gYGA6YGAtYDU1CitNKF8yM10i MTMtM1RJWko/WypEOiRfXTUtM1RWQkZVLUo7MSYzKUEnSDBcRjIvNFEmR0ohWkZgM1UjVSdFCitN LzAzMUI4VSMkOSdKIVpBTShcKiNSIzAsNFM0XzUsVS8wVko+JFxCKjlPNy45SFEmS0BGIVJWODg4 ODVTCitNLCYjIyMjIyZQT0ZQUCFAPFctQFImOyNgUFBQJ0pKTFlFVC8wTEovUTRPN086Ki88Tk85 XlQ/Iz1KXjJfCitNUD9UTlo/MD1YXClYO1E3RU03Ry8uWVcxTC1LX0IsLCwsLCwsYCVAVzQkXEoh YC5AKCFgKkAwIiEjYCgiCitNYEAoImBAKCJgQCgiYEAoIlohXmBcUFhHSyZRUidGXCxTPFMtUzxF TjtFNlkuWU47RllOO0ZZTjtGWU47CitNRllOO0dgWScvPEInKFklJyhZJyhZJyhZJyhZJVVVVVVV VVVVVVVWLkxRVSw9Rkw5Q0xKUUY1TFUlQFJTCitNNFw7MEpTKkpKSkpKTkA6RTZJRjc5RVVVVVVV V1w3Sls/XFlMK0tLS0tLS0k6NTZFJiY9OTk5OTk5KjRJCitNMkUqNEsqSy5GWzMsUTQ5LEYzKURS MkUqNEkyRSspNURVVDBOTk5OTk5YLzI9Sz09PT09PT09KzRKVS5cCitNSEE9PT09PT1RSkxFRjIm PT09PT09PVMvMDlNPj9JTEdKR00nOS9DTlg9XFwxXTdTMkpKSkpKSko3SUU3CitNNyg5VUVFRUVF REkyRSo0STJMSkxBRzY2NjY2NjJFKjRJMkUqUkpSJj05OTk5OTk/SysrKysrKysrKTkqCitNTEQs WlJSUlJSUypKSkpKSkpKSjVVNVdAPTNCSFI5LEYzKURZNTU1NTU1NTU0TSpLMkFHNjY2NjY2MkUq CitNNEkyRSpSSlImPTk5OTk5OSpSSlImPTk5OTk5OU1dU1Q2RURSOFo3NUxbNFM4PUJTQzFEPVBa XUojUldBCitNKj5YU1MrT0k5KyxPUDohRyxgWyMoUkctJyE5Myo4YCQ0XUtGI2AhSF1bU19SP1lf RV0zRkdgUGA+PD9ACitNTko7VUZdTztWXU87Vl1PO1ZdTztWXU87Vl1PO1ZdU1NWM0I+Ozs2VUJW TUswVk1LOlZNSzpWTUs6Vk1LCitNOlZNSzpWTUs6Wl5aWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlsr TVNCO0ZVMSNCPE1QTjRUTERJMkUqNEkyCitNTkpOQUc2NjY2NjYzQSo0STJFKjVFNUdHWig3Nzc3 Nzc9OTU1NTU1NTU1Kyk1REFHNjY2NjY2MkUqNEkyCitNRSpSSlImPTk5OTk5OVxCSkpKSkpKSko1 VTVXMS41NyxaJSswVE0rMkVJOjRNKksyQUc2NjY2NjYyWyFWCitNQ1hbTVc+L0ovXzdDXkM1NTU1 NTU1MlpHXUU5VjNJXylZREw2SUo6RklKOkRJMkUqNEkyVEpNK0deU14jCitNRlQsNkVJOjZFSTo0 STJFKjRJMlRKTSteO15bJTFEUjksRjMpKjRJMkUqNExFNjImPTk5OTk5OSo0STJFCitNKjRLKkso OVVFRUVFRURJMkUqNEkyTEpMXlsxIlpaWlpaWjRJMkUqNEk3NTcwU0srKysrKy9SKktLK0g5CitN VVVVVVVVVUU1NUczTSw5VUlLPCZHLzc6Pl41RUdXSFQqLCYjISQxJDEkPCNAPCNAPShfPTxNVDtI TkA9CitNTVFOLVFOLVFOLVFOLVFOLVFOLVFOLVFMUFM2UF9XWz8iVjY2NjY2NjY2NjY2NjY2Njkj KDkjKDk7PT0yCitNXENUXTU1NTQ/VCY5MTExXSdgN1MjSCMwVC0jMEEiJCgwQSMrXVslQlE4TkdQ XVVBXFI/U1c6T1hXUTZNCitNMTExMTdZPypZRjdTK1smPicsVE0rMlRPXEoqKiosOioqKigwQSIk KDBPMUMsOUMsMyRRLDMsLCdHLzM+CitNUF1ZRE9KOV1eO142WihCKEIoQihCKEIoWT1XQ1A2Ozkl RUVFRUVFRUVFRUVFRUVFRkVRJDEkOjBCKEIoCitNQihMTExYRyUxMTFXRitVJ0pYWydFVTU1NT1V VzYrJUJRPF9VJkswVC0jME0xMTExXkteRUJROEw3KlonCitNSk5CTFUsLk0/TS5TPU5JUF1BR1k8 STJFVj5TTC5XXztVK1pMRjMpREEiJC5EXUdJSyo0STBBIicqSEhICitNSEEiJCgwQSNfLVcrTlc+ Tl4+YF5MXlJZS1E3Q09SRyNQTiVQTiVQTCYjIUBQOCwmIyFAUD4sXFVZMy8qCitNNEkyRSo0STJF KjRJMihCKEIoQihCKEIqNElMPV9YRislQlEwQSIkKDBBIiQoMEEiJ0Y+VVE4TDYrTz5YCitNPUxf RD1WQSIkKDBBI11CQkJCQiQoMEEiJCgwQSNGXiVcKDlcLCwtIzBULSIkKDBeJF4+WjVUS1pTUFY/ CitNP0RfMUgmQj9YQihCKEIoQihCKENDNj0/IlI1KjRJMkUqNEkyRSo7Lzk5QFA4LCYjIUBYNyJY NyJYNyJYCitNN2BYJyRYRyRYRCgwQSIkKDBBIic2VDQ0ND41MTExMSIkKD9dLl8/Mj8zMEEiJ0sq KioqLy0hMTExMSIkCitNKDtKKioqL080NDQ0MEEiJCgwQV09WDNKV1YnLT87PixbSV1ZU0dRJ0gn Ql1NSzpWTUs6Vk1LOlZNSzpWCitNTUs6Vk1LPiJcLV1FVFs4Vi1DOFYtQzhWLUM4Vi1DOFYqNEIo QihCKEIoQihCRSo0USwzJEFcJkJCQkIkCitNKDBBIiQvXl8oXzNULSMwVCgwQSNbRz9PJD5RPFUi JCgwQSIkKDBBMkJCQkIkKDBBIiQoMEEiJCgwXlReCitNVltVWFNbQ1tLUVcuPy8+MFxFWTtAPCNA MSQxJDEkMSQxRjZBPSpUMkUqNEkyRSo0STJFKjRCKEIoQihCCitNKEIoQkZRTDsnQFQ0NDQwQSIn RTQ0NDQ+QkhISEhcLkJCQkIkKDBaQ0tPKllTRy48WVIkKDBbRVQ+KyVCCitNUT07MTExMTNMO1lR WSsjUD9ANjY2NjZLQUA4ODgjLUFBQGA+NUg6JkFIOioqKiooPzo0NDQwPjZTL19HCisrV1E9UjEz QTBEIyQiJSZcYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0u dG1wbC5iejIudXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0udG1wbC5iejIudXUKaW5kZXgg MjNlMDYzZWUyM2QuLmVlMmVlOTk1NGY1IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Zh dC1hcm0udG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtLnRtcGwuYnoy LnV1CkBAIC0yLDI1ICsyLDUwIEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRl ZCBieSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBm YXQtYXJtLnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNj4jNjcpSGAmVTlfX19fX1peS0paX1pOX15P XkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcYGBgImBgOmBUOjotYDo4QFBAJjFE LSFIOjgwOClCOiMwYFRgYCwkVCMhLEBQQzA5Ci1NIzMzIjksMGBUKGAhSCMxSUhUIUlCIyJgOSYw VCZBSUEhQEYpSC1gIzBgYFAzMCwkUiMiLSFELS0sKURRCi1NYCMwQGAmQC0mRkMwJkYoLCghRDkj MDomRiQmIjhGQFRgLWBgIyEtYFAzKCwoVCYwVFRQRjMkYC1gNTIyCi1NJF8oSDItRFQwVDo4QyhU IUghWkMzMFItJkAtYCxAJkMxSDpgOiMxTTMoVCxAOjo6LzEjMzMxRklJQClACi1NKVo6KVJLNU42 PDcsTzwlWylTNFpEKE9ERDEiKjIiKEIoK0U5OSkiUDJBJCIkLiMoKCgwWl5CSE8pOTcqCi1NS05U UzI7Ly8hNl8sOik1SVZJPkxQR1VNOF8pTVYmX1FPJyQ8UT5ZO2BKL1RFVFIuPTUwOlwyQmAwQUY5 Ci1NPF8uTUU7OjswTjw5JUQlXFFbJyomNkI0KlU6Sk02SzVKVVExMkkpMTExMTExNks0NUkqVEpV Ok02Szw6Ci1NWjQyNDQ0NDQ0OFktMSkxMTExMTFbRjxfNlIrJUJROEw2KyRYMzMzMzMzMzMzMzMz MzMzMz03WlxFMk02Ci1NSzVKVTpNLS0tLS0tLS0tPlI0NDQ0NDQ0N04jWyVCUThMNislQlEtTSkq KioqKioqLCEwSEhISEhISFlbCi1NLVJSNTc1NzsuTVM/SEUpR0xbOk0tUSkmL1RHMDlRNk1aJSlY SjQ+PERdNVtTNU0+Xl1NNlc4Q0AuLlQ9Ci1NViZIT1hcQFQkYCVKV0hZJGAtL1pWIUE/KUs+WUVF WjFgIyosJiMsXUc0ODRGLzcvUkRSJVk8P11GRzhYCi1NJi0/VlVXSipBUikrWjMyLy86OVsjNE02 Ujs4LUZWSzwsMU9HJDhLKkxFJkpSPjRRP1VbSjpeUyRdRVBLCi1NRDgxKV5EIjxBPiVIXj4yT1U6 RkxDMzFLSz8/LF8kRVM3NFMlKylVN0pVNUQ6VlFEKVItMlUzIjdbRldXCi1NLURQVlY7QU5WXjkt UiYiVDtHLEE+NkVKMzo9RVZFNkVOS0MjUFpHLl09OTo3NSpHPT4tNE5cT0FdJz0tCi1NYExbUk5c TU0vPlonODo2US5SQVdVKz1IT0hEQ1o2SD84XyFeKzotSlZTXjZaO1VQJyM8RVJHLVskVydgCi1N SiteMTk+PlQqSEIrM0dNKzRWVlMoTlEpJks/YF85SVdcLFBTIyQ7UU9HIjwtUVYqUUZCOF4yKSEp SCkuCi1NNyhfQFA5KFIkRylEQzxMMU5WXDtVR1ZfPClRJyY/RlkrJT8kWjFRP0RXUi8/RENAOFci TScoXzxSVEJKCi1NMicjPV5YSzguLFVbQ04wUSdfLDVNVixZO0YsYFFJJyxEVzdFVS1fKFM+TVlG LF8tLklUPEQ1OCwwIiQpCi02MGA3NUk6RDtdJlYyPCVfWE5ZKElQSDInIUsrRFRgYGAKK00wRUlI LjMlITYyOTM2MydaSVFQYCdaI19fX19fX19fX19fX19fXk9eSl9eW09KW15KXkpLXktaTktPTloK K01aTkteWk5bXlhgQ19gYGA6KmAhKCkiMSgyKSEhSCZAJjA5IUgmQDosMyhUIzBgOEBgVCMiJkMw LWBgYGAKK00tYDkmQzBgYGBgIzFEOSxGKUghRFQ4JTU1MjohRDkvX100NTNfXTUzXzU0X101M100 YGAtYGBgYGBgYGAKK01gYCZAYGBgYCFIYGBgJkBgVDpgYFQhSDpgMDohSCFEJjA6IUgmQyRSLWBU YCYoYC1gUEFIVCMwYGBgIzAKK00mMUhUYGBgYGBUOSYzKUI6YDktJigtYFRgUiMoLWBUIzFCOSZA OmAjJGAmQDgwVDohSGBgYCFIIyhUOmAKK01gYGBgOixDKURRLWAsRkMkJkA6YDkhRCZAOiFIUSxD MC1gIUJgIzAsKDotYFRgYGBgVCFEOi1gYGBgYC0KK00mMURSOEZAJjMxQDU1KF8yLzBFLSZIVkUt WEo5WkozOkdfSkRDOTBdMyg6JkMwOi0vNF0wLzQ+SF0wOzQKK01gIzAtJkBWSVpGRkY6RkMwOj5J SFZIPkghSUhXSElIPjI6OiNVLzRdMyM0XSYzOkZEWyQ0VD1UWzsrJDoKK01OOjgnMzohQUFBNzBQ OCwsLCwsOyJeQUAjYE4tJ1EtYFBQUFAnSzpNKUdWTzpMWi9IRE5bMVdTMV42X2AKK006P1UnQE5f Plo+KFwpW1lYW18hX1RcRVlDWUM1QD5FWFo3QlouVjg7VkVBQFBQUCdJTSc1Wy5TSyouTFoKK01S S0suTFtVUDwnIVA8JyFQPCchUDwnIVA8JyFVJzlNQ043LlZHSTwtIz5ULVs+RU87VTZdLl1PO1Zd TzsKK01WXU87Vl1PO1ZdTztXLFZOQzpBTTs1JlVNOzZVTTs2VU07NlVNOzZVTTs2VU07NlVPOyZd U01bTSotWzAKK01IVDsnMzpXKlUvLVI1OiU1NTU1NTchSjU6RkE/IzBOTk5OTk5dS109WFVcK0tL S0tLS0k8QktEMUFJNjYKK002NjY2MkUqNEkyRSpSSlNOLl9ULDUmOy1GUzlMVEkyRSo0STJTNTlO RTEiWlpaWlpbRl03WCVVVVVVVVUKK01VVE0ySzRdXzEiWlpaWlpbTEU2OlMtIzJOTk5OTk5bO1Um Q0k6PlhTPk0/P09UR043XSNYI1JXUF8yKkoKK01KSkpKSkk+TDU9WkFJNjY2NjY2MkUqNEkyRSpS SlM1UiNQVic7X1I1Mlk3Klk3Klk3KkUqNEkyRSo3KkoKK01ZNC0qUlJSUlJTRkpKSkpKSkpKRT01 PVdFJCtLS0tLS0xaSkpKSkpKSkk5SkxXUDooNzc3Nzc3PVVUSysKK00rKysrKyspPEJLRDBUSysr KysrKTJFKjRJMkU5NTkjMkxMTExMTEU5NTkjMkxMTExMTFpPWVc7PEMtRlEKK01TI0I2NTlFSSY0 WkVHJjUxV0NNJitTJ0JKPlhdNTldIy9LT1A6KUcsYF1NVj4nTCNOXCwsYCIqP0U6YFAKK01gPlRd S1U/PV4lW1NOTSRYJmAjTSdTO1s9UTY8NyVRPDclUTw3JVE8NyVRPDclUTw3JVE8NzBbWUw/LS0K K01TPFE7RllEVy1TPFctUzxXLVM8Vy1TPFcsQyhSLEMoTk5OTk5OTk5OTk5OTk5OTk5OTk5aQ0ou SFpDSDsKK01GUU47RSQtQ0lNO0U8Qy0qNEkyRSo0S0pLSDo1RUVFRUVEWDJFKjRJMkU5NTlaQkIl VVVVVVVXPjU1NTUKK001NTU1MlM1OUg6NUVFRUVFREkyRSo0STJMSkxBSTY2NjY2Nj5bSkpKSkpK SkpFPTU9WjlSVVQvRz5USkUKK01KOkZJNUo6RE0ySzRBSTY2NjY2NjJdQF1IXz8/Uy8/T0EvQk8v Xkg1NTU1NTU1MltLXEE5V1tVL1JeV0UKK01CVS0zNFUtMzRFKjRJMkUqNyhKWSc1XVFCSFM5TFY7 LUZFKjRJMkUqNjpLLSMyTExMTExMRSo0STJFKjUKK01FNUQtKlJSUlJSUjRJMkUqNEk2NTYwVEsr KysrKykyRSo0STJFOTU5XEZCJVVVVVVVVEkyRSo0STJOSk4KK01BSTY2NjY2Nj8zVTc2NzBUS0tL S0tLSyxMUlMrTks6PFNLM1ZXTFBTUyxNYFUhXVovWTFAUDgoQihCKEIKK00oQixWWkFKKzg2Sjkz LlY2NjY2NjY2NjY2NjY9I0g9I0FaP0w9U1c+UUw7JlFMOyZRTDsmUUw7JlFMOyYKK01RTztWXU88 T0stVzhbWkpKSkovIi0iQkJDUiwhPzAuIURSOSxEKDBBW1JCQkJDRF8xUThMNitOLC9TLC8KK00j R1tJWCNQN1tDTjwqKioqKl4nUl1PR0tPSVlUOj5XWScoWScoX0xISEhIQSIkKDBBIiQoME8xMTEx IiQKK00oPURVT1pHTzc3P1kvQE9eN0UvQy8uPzROOVMuOSQxJDEkMSQxJy1OXj4oXEVKTVsrKysr KysrKysrKysKK00rKyssTyQxJDFJQihCKEIoQ0g9I0g9I0hISEhcNyVdNV07J0xORzU1NTVVXk9C UThMNzVdNUpSOSxGMlYKK00+KyVCUT9AXk9ROEw2K0VbN1svWVJTW0FYM101WEM3XitTPS40STJc I0dfJlwzVjZJPzVGUzlMVCgwQV0KK01dRy4zKURSMEEiJlZCQkJCJCgwQSIkLz5PPy8lPixfVD9a T11XRS9fN0YvLz5OOl07NlVNOyFAUDgsJiMKK00hQFA4LCYjUkc3Ly05WTJFKjRJMkUqNEkyRSox JDEkMSQxJDEkMTJHLllXRD43QlE4TDQoMEEiJCgwQSIKK00kKDBBVjMjSl4hRFI5LEYzWCddO1cz UDdDKDBBIiQoMEEiJC9QSioqKigwQSIkKDBZXkNWWFRYODg5LEYKK00zKSIkKD5XPi5TOy1PRz80 XlVIN1ktJFQ7XyQxJDEkMSQxJDEkPD5dWUdWQDRJMkUqNEkyRSo0SURTMy0KK00sJiMhQFVNOzZV TTs2VU07NlVOOVMtQzhWLUIkKDBBIiQoMEEjWzpCQkJDVDoqKiooMEEjXy1YW1gzWDoKK00kKDBd PTExMTEiJCg+RCJCQkJDP1xDJUJROE8uSEhISEEiJCgwQSNSN187WzVfWF4qXi5cVVslWVNZM1cK K00jVStfW1cvMj0pVEcyPSlCUThMNislQlE4TDYrWydXLSJWUTJFKjRJMkUqNEkyRSoxJDEkMSQx JDEkMTIKK01FLj0iJCg+VkhISEhBIiQuJSUlJSdFXUNVXjMpRFIwQSInN1xBXDFXS1hSJCgwQSIk KDBBIkUlJSUkKDAKK01BIiQoMEEiJCgwQVVXRi9aN0ZPRC9ETy8/Kj4uWyNZO19EMSQxJDEkMSQx JDc6LVRbXkUqNEkyRSo0STIKK01FKjRJJDEkMSQxJDEnLFlHLFlXLllXLlxGQkJCQiQoMF0mQkJC Q0s0NDQ0PjUxMTExIiQoPkpeW10nVCcKK01ILzA+QEEiJC9bR0lcNislQltSQkJCQkdMPDYrJUJJ Q0FAODg4IzFBQUBgPkNEUjksRjUlJSUkL0NKKioKKzEoL0YtI1M3X1hOWShJUEgyIUNdNFhYYGAK IGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtNjQudG1wbC5iejIu dXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm02NC50bXBsLmJ6Mi51dQppbmRleCAxMTAxZGVi MDIyNy4uMWZhNDEzODA1NDIgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0 LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0LnRtcGwuYnoyLnV1 CkBAIC0yLDI1ICsyLDQ5IEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRlZCBi eSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBmYXQt YXJtNjQudG1wbC5iejIKLU0wRUlILjMlITYyOTM2NEM2NSNUYCZVO19fX19fWl5LSlpfXk5fXk9e Sl9eW09KW05LXkpKXktaTktOTkoKLU1aTktOWk9KXlBgK1wjMGBgMGAjMCMpRCZAVFI4QURgLDAh RC0tJmBAOiFIJkBgIUIjKUlIUjotLSMoOSwKLU1BQWA4RkBRLDAsIzUyYF9VND9KQGAmQUhgYGA6 YDpgYGBgYGBULWBUJkBSJkBUYGBgYGBgYGBgYCRgYFQKLU1gUjkhSC0sRig5YCMkYDkjMzFAKCZA OiFIYGA4QFI6OixGQzMwUiYzKDgwJilILDMkI2A1MjEoXUkxSSkKLU1GKjo4QzFaYEYwOmBUUixA OiZDMzA6YFIhSFRULCQhRFRULUo6JkBSJkMpSUEsOkYzMyhTNF0tM2AtLSQKLU1aLS1CNj02RjFN ITwyOEZKQSIrRSkkMEI8QEIoQiJUSys6MiVMKTBCISInKEQkJCg5RjpATFJPK1E7VEwKLU1OSjlZ WTJRWksxKi0wVVM1K1VNNlI7RT8tVF9RUUcqPS08OSNKOiM+UlshJi00MDsoMkJgMEFFOT05NTYK LU1PKyJJSCYsOE09S0VCRigzLEEkSDVKVSU6TTZLNUsxLS5BKS0tLS0tLTZLMzVJKlRKVTpNNks8 UlUzMjMKLU0zMzMzMzhBNEZERkZGRkZGTVg7Oyw8LCNgUCwjYFAsIi5gQDAoJCIhYEAwKCQiIWBA MEo1LE9KWSolOk0KLU02SzVKVTpJNEo1KkUySTRKKkUySTRKNSpFUTw5T1c+W0xLKlJMSypSTEsq SU5ZKUlJSUlJSUw2RjMzMzMKLU0zMzM9N1ZMTDkxVkVOW1VQW00kSSw1WC0tK0BSMTpYS1RMP0cl TEw+LERcWSotKkRVKzZNQl5ZTUZcN1MKLU1CLCFTNkNNUFVFVSdIJ0IwYDRWLScoQCFKS05dXj9a PF0qVUJgJi85SiMqOU5ATzkuSDZGWURONUFULEwKLU1TLVVBVy1BOzpPM0o2MVI9Ii49KUVZLShU SzNNOFVTOE5NOzFOJlw8JVElXlkzIjklPThaLUFVTVlBO1cKLU1QWUtLKTU7P0A2RDskRFdMIkow TEUqLlFdUkE+UVssOy5RSCVWRE0vS0dFKVsuSkJYNFQ9NTZfLjBKRDoKLU1VTCZRNzMkT1I7PU5G Xj9QWEtDTCVTRj06MUZLTyZXJUExKU8sWVdVJkZNOzFOXVcwUVc9NlUqVURTXVEKLU0wTVxDTlxH OkxeS1QlTzJVJUcwOzMzNUpKWUZBRzhJLDUkRD86VUNcJ1ovVTtRTzdgPClfM0NMIVI3Lz0KLU0l Qj1MPCtgSCtKMTs2Pz8lJDElKkg4WzM0TV9OJCtWME82TztZSjchOTVFNyU8OT9MJVI3LTgzIzop QlkKLU0oRCRGP0RaNEJeLFcpJVcpU1koWDtCL1s8OT9MXFAnXy0qWUM8Tj5QR1JMTFk9Wz9IVVxE P1tBXEJET0wKLU1QKTIwUDZBPEVSRys7NVMnLTxZVCYkT0YmWjNJS0xQWSczRFBJLCIxRi1FVFwt XlNVWiYyREJDLTFgKDAKLTZFYCE6VEo5JmBDP0ksJV9YTlkoSVBIMiIxSypBWmBgYAorTTBFSUgu MyUhNjI5MzY2TSskVlBgJ1olX19fX19fX19fX19fX19eT15KX15bT0pbXkpeTkteS1pOS19OSgor TVpOS15aTlteWGBDXyVgYCZCQGApIjBEMiRCMCZKSjo4RmBGYGA+XTVgYGBgYGBgYGBgYGBgYGBg YGBgYAorTWBgYGBgYGBgYGAqSkpEVGAmR19eSjJJX15JNF9SSkdKYGAhSGBgLWBgYGBgYGBgJkAt YGBgYGBgYGBgJgorTUAjMGAmQUghYDohSCFIYDojMzBSYCZGQUBGQFQtIUlCIUgjKCMzJGBgOWBg YDpgIyIsYEBgLEA6YGBgYAorTTAmQDpgOmAmQFRULEAhSUg4KUgtIzA6OEA6YFJgVFFgYCYwYGAm QGBQQ2AoYCMoJkBgYGAkIUgmQCZAIQorTUgtLSMoYDo6JiI6IzBUJkYoJkAsQC0sMGAhRGBgIUhg LChQImBgUiFIYGBgYCpKRD9JJ0gxKjsyOTMvJQorTSpGVko7P0pKP0pGR00yJkYwVkJgLzQnSmA+ MiZAUjojMCMxSC0nSDMpSVkwJ0onSWBUOiZAVFRUXzEoVAorTVZJRkgnSS1JLzMzNF0mMylFLy1C RktbNVVcTDFMVlNgWis0LCwsKlpGIyFBQUFBQzg3VTg4YFArQ1FNOAorTVBQUFAnO1U6Uy9LPTlH MV0qRVcqLzZNN1lLVVM3XkpbVVstV1teSV8kXV5cKVYnQi9CTyg+PlY4JzpMLgorTUZbM0s0PiNK UFBQODg4YDUjMSwyU0gmYFYhQCwhWCNgOCgsJCIhYEAwKCQiIWBAMCgkIj1GWjtMVy5bQQorTVMt UVonIzRYLTNAWCk8JyE1UDNQPCchUDwnIVA8JyFQPCchUDwnIVItU0xNUiZZTjQ7RllOO0ZZTjtG WQorTU47RllOO0ZZTjtGWU47RyFTTiNGPCc6NDwmSTFKWVcxOzcwOydEWSpNMkpKSkpKS0xWUTVM OkVcLTJaWgorTVpaWltdP1sjWCVcK0tLS0tLS0k6Kk0kODpVRUVFRUVESTJFKjRJMkxKTFpfTF0z JTFGUzlMVjstKjRJMgorTUUqNExVNjomTTk5OTk5OVJcR1UnTTxWOy1GUzlMVjo2UTVMPUJCJVVV VVVVVzI1OUssVC06WlpaWlpbSworTV8yOk43N1ozLVZbXClbKV5aXVheIl4uX1haSkpKSkpKSko3 VTpLVTomTTk5OTk5OSo0STJFKjRLKksoOgorTVVFRUVFRURJMkUqNEkyTEpMQUs2NjY2NjY3SkpK SkpKSkpFPTU9VzUkK0tLS0tLTFpKSkpKSkpKSTlKTAorTVdRLUc8OSw2QzFIVDotJEkyRSo0STJU NTooOlVFRUVFRUZXMD5MUFBdO0ZTOUxWOy1GUzJWKk1CJk05OQorTTk5OTkqUkpSJk05OTk5OTlV Lzg9S0hTOUw9Jz0sTlMjMSxNRycuLE5DTUc3LENSN0AqPlZdLUY3VCxcTgorTV5dSCcvOCFWJzRQ XysuWVBQUGAoSV45SiNgIVs7Sj5ZX0FfRF5UVTk4JmAjVCtNJzxOKlNCWE4rQlhOKworTUJYTitC WE4rQlhOK0JYTitCWylaUVNOSldNWyVPO1YzPldNWz5XTVs+V01bPldNWz5XTVsqOTMqNzc3Nwor TTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz0tVFc5LVtHO1ZdMSNHPSVNPSFIUzJFKjRJMkUqWkpaJk05OTk5 OTkuJAorTUkyRSo0STY1Nj5ESEE9PT09PT1aSkpKSkpKSkpKNjpLLSM2TExMTExMRSo0STJFKjVF NUQtOlJSUlJSUworTVctNTU1NTU1NTRLSktOTFolPTNUMjYzMUhUMlQ6KToqTSQtOlJSUlJSUjdZ M1ZDT0dcW0wvXVdSJ0VeSQorTTU1NTU1NTUyW0NcQTlXO1RPUz5PKyVMOyZRTDsmUSo0STJFKjRN JTZDSj1ZVlYzJUtUOi0mQzFIXTNBQQorTTk5NTU1NTU1KzhKViteQ15CUjhNJkMxSFQ6KTJFKjRJ MkVISlQwVUsrKysrKykyRSo0STJFOTU5IzZMTAorTUxMTExFKjRJMkUqNUU1R1JaKDc3Nzc3NzJF KjRJMkUqWkpaJk05OTk5OTlMSk5MTkFLNzc3Nzc3NjU1NgorTT5SNz9PTFc7LSdPVlFYO0gvQ04x WTtEOzZVTTxDRDxCKEIoQihDLSxYVSFMKlZKWTtOWysrKysrKysrKworTSsrKysrKy05UzddXlVQ RislQlE4TDYrJUJROEw2KyVCUTpGWkNKLkhaJks9WU9RSTJFRENPUzRISEheJworTUArOkFaYFI5 LEYyJCgwQSIkL0tfVFw2KyVCXStBWyMjVzRfPU86Tl09Ul5ANDQ0NDVfRlonN1NdVT83UworTShV XkNUOi0mQ15aQkJCQiQoMEEiJCgwQSJdJSUlJCgwQVRGVV84XVpbI1grWENRJ0JPJz40Xkw8QihC KAorTUIoQihCKENERz0vITlNRltaSTk5OTk5OTk5OTk5OTk5OTlJPDEkMSZEKEIoQi4xUi4xVEcy PSlURy8xMQorTTFYJitaV01YXUNUOkpKSk5RViw2KyVCXSFWVlMpRFI5KzQ0NDQ+TlpOKyVCUT0j Sz87XkJMW0lXW05XTgorTVcpWl9FUjksRjNOXkNaX1c/TD0lXSxWOy1GQSIkL1AsWVI5LEYyJCgw Wj0lJSUkKDBBIiQoP1dPPy9gPgorTSJfVT4mX1o+Klw5WSNSV1YzO007NiMhQFA4LCYjIUBQOCwm IyFYU0pHRC81NEkyRSo0STJFKjRJMkQxJAorTTEkMSQxJDEkPFNGPFNGPiVfW0JROEw0KDBBIiQo MEEiJCgwQVxZWzMlQlE4T0A+XD1cW1FYIiQoMEEiJAorTS8+VDQ0ND9YVDQ0NDBBIiQoMEFTPUVX SFVYODg5LEYzKSIkKD1aXiRaWzhHUyxeXlVeK1xWQDolX0IoQgorTShCKEIoQihCLi05RVwjLyo0 STJFKjRJMkUqNFY7JUJQOCwmIzpWTUs6Vk1LOlZNSzpZJyhZVy5ZVy5BIgorTSQoMEEiJCgwXlpI SEhIXFpCQkJCJCgwX1Q/Ij8jPiZBIiQvTDoqKiooMEEjSkExMTExUEhISEhcSkJCQgorTUNRWioq KigwQSNfTVw1XVBeLFw5XEVZK0wvKj8sP04vMy8oW1tFPEtFPEtFPEsoUixDKFIsQyhSLEMoUwor TVtbJ1ctSjRJMkUqNEkyRSo0STJEMSQxJDEkMSQxJDRJMkQoMEFXRSUlJSQoMEEiJCg+K1lPWC4z KURSMAorTUEiJ1JPIj01XVpeMEEiJCgwQSIkKDBJMTExMSIkKDBBIiQoMEEiJCg/KT4wXCVZK1kz WTtSV1MnQS8tPworTS0+PkIoQihCKEIoQihCWzBORD9USTJFKjRJMkUqNEkyRShCKEIoQihCKENE PENGPFNGPFNRKioqKigwQQorTSNTSioqKi8zNDQ0ND9eNDQ0NDBBIidUV0pfLlxRWUNTJ0YoMEEj V1NNPDYrJUJdNTExMTEzXF8lQlE4SgorRzhYOCYmJmBVODg4YCdHOSxGMylFMTExMSNRVSUlJCdH TTNfWV9eK04yKjwqJEBVSThGVmAKIGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290 MS9mYXQtaTM4Ni50bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWkzODYudG1wbC5i ejIudXUKaW5kZXggNzRjNzM0ZDJkMzcuLmMwNDQwY2FlNDIxIDEwMDY0NAotLS0gc3lzL2Jvb3Qv ZWZpL2Jvb3QxL2ZhdC1pMzg2LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0 LWkzODYudG1wbC5iejIudXUKQEAgLTIsMjUgKzIsNDkgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmls ZXN5c3RlbSBjcmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNE JAogYmVnaW4gNjQ0IGZhdC1pMzg2LnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNjEvIjEmJGAmVTtf X19fX1peS0paX1pOX15PXkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcIzBgYDBg IzAmQzMxSCMzJCYkYFIsQUgtIzMiIyEsMzA6YCZAYCFARkA4KUQmJDojCi1NKDo6ODMpQmAmQDpK MDo/WkovVTMwYCxAYGBgLWAsRkBgYGBgYGBSLWBgYFJgYGBgYGBgYGBgJGBgVCFICi1NVFQ6YFRR IUFgLEMoOiMwVFBAUDMkVCZAIUhgYDgpSCYiOSFBJkBSJkZGJFI4QCFIIkpCKEdNKjooM1ZJCi1N Sjo7MjktREYpWkMxSCMpSUEmMCxDMUhgUmBWSCMzJCMoI1IoUiMoVDhGRlIkUChSOCZBSFEzVFRV Lk0vCi1NNENINTZYSkJTQlIlJFIiJUhCQSIiJEhBIiQoMCpNKThRMDYoQyEiYEBAT1hBYEBAW14y OExIWT8rSlRaCi1NWTQtKlxRNF09SkRXUC1EVVJcO0VNNl48MU9XKzxRQCw5OVZdSyw8IiojPig7 VUckLEhKMEAiIiMtUVJMCi1NSyU7VSVAVSMpTERNNT06Ky0oTigxQEk0SUo1KkUySTU0RElENERE RERERSpFKTJCSTFJNEo1KkVVOyEpCi1NJSkpKSkpKUNFIjIqMjIyMjIyVkFNTFFQUCwjYFAsI2BQ KFgiIWBAMCgkIiFgQDAoJCIhIkEwWz83UTMqCi1NNSpFMkk0SjUiQTBINColIkEwNColIkEwSDQr LlNUJlFLKlJMSypSTEsqUkE+UTIyMjIyMjI2SjEpKSkpCi1NKSkpRS5bQ0RJTFs2OjFfPT08MSlI TS1JKVlXJkJBMTo6Uys6KTY1LTBCXSUmJ00oTTxWMlw7QU5VXFhDCi1NRE5AUDZLSyFMKlwvNC8o QGAzVS03JEBgXisoWzJbXl9ROFYkKGAsSlwmIUZNISw7MisnSk5fQk0sPzU/Ci1NXTxMXTdROl1U TVxRMFFWT0YmJSU8UTpRWzpFTCZTN0MrLVJXU0BOLFkrRywhQitBPFZTWlxNO1hHIlw6Ci1NMk9G Ki1bWDU2JVYxPCJgSEIrKExaQiY8XV45PjBOSDs+SUlXOyhKTlZFRkk7PkMnKVlYVjUrXVhCQilc Ci1NW1pFVktMQFczPi1eX0lRVyo8VVQ2JFQzVTdOOS5SRzMxN1ZBXC46WkwqSl1NS1Y9OzleTS5I QlReRUY2Ci1NNjhPPFM4LS5JXE5NLktWN0U7QzZUSio5JklFNEcuUEElI1w2Tz9IVzteJVxYI0FO MFkzRk5AWjsjPTlECi1NL1YuL005Qk8kTDsrOEI6JCgzSzpaRjwrPiglVlY7QE8vPDVGNjk8RVMn Lz0lVFYiUSYqVTMqMTBCJDdDCi1NUTMoPT4qOFg5R1hIOSYrI0JBUideLjRZO0ZNLFlbSEwhQE9Z ODskPzhTO0o3Ry4wXkYqJy9RO148V1YlCi1NUFEmKiNJLTJQJzQ9NU5GIlBGJl9VQi4qUTc3OFJV LDYpQzE4RDVfJFNOVlFMNT8tOyxbNiokVj5BYCQkCi03JDhgJUEuR0I3WickMT0pX1hOWShJUEgy YEdBKEMiYGAKK00wRUlILjMlITYyOTM2PVNPI0NAYCdZQ19fX19fX19fX19fX19fXk9eSl9eW09K W15KXk5LXktaT0tPTkoKK01aTkteWk5bXlhgQ18qYGAmQkBgNCIwRDIoQjAmSSpgYGBgYGBgYCMw YGBgYGBgYCMoLWBgUmBgYGBgYGAKK01gYGBgYGBgIkpKRSdaSGA6P19aREpHX1pKPkpHX0pKYGBg YGBgYGBgYGBgYGBgYCMwYGBUYGBgYGBgYCMKK00wOiZBWkAkIUgmQCZAIUgtLSMoYDo6JiI6IzBU JkYoJkAsQC0sMGAhRGBgIUhgLChQImBgUiFIYGBgIWAKK006IUghSGA6IzMwUmAmRkFARkBULSFJ QiFIIygjMyRgYDlgYGA6YCMiLGBAYCxAOmBgYGAwJkA6YDpgJkAKK01UVCxAIUlIOClILSMwOjhA OmBSYFRRYGAmMGBgJkBgUENgKGAjKCZAYGBgYEpKMV5FJ1o6MjI+RS0vVTMKK01VKj9fSTJHTTIp X1pKRjNUVko+SD5JSDosQzAsVEA6OzQnSiZAOiNVLS1gOmA5YD5IIVpDMzA6YD5IYD4KK01VM1Um M1RDVS0tJkFaM1QzMyM0XUo6M00xOzVdLFtTO0wnLVNTYFpLNCxMTEtaRjMpRUVFRUxIOFU5OWAK K01SLytVIysrKyg5Q1ouWiMvVC9INj1HSSRPNk9MVUdXS1s1S0lBOCJIJVYsPDdIVEFOQzQnLi5A PjBfQEEKK01LWChGSyEyVj0jNyooMEEiJChgJVBLU1c2SVVVRzc9PUFVVzc+Ilo3Mlo3Mlo3Mlo3 Mlo3Mlo3Mlo3MloKK003PE5FUD5LPU5eMC8vWTpHJUo8NyUrQlhLTio+K0JYTitCWE4rQlhOK0JY TitCWE1bT10nMUhMVDorLSYKK01DMUhUOi0mQzFIVDotJkMxSFQ6LSc2PCc2PU5YTjVHJUo2Ok4j Sk49VScsXiVNNzpFVVVVVVVXPS45PVMKK00tMyM0UFBQUFBQXy1dMzdeJksrIyMjIyMjIjZZPU4x RUs0STJFKjJFKjRJMkUqRVUuUV4zSjslRjstRlMKK005TFRJMkUqNEkyUzc5SDpVKjRJMkc7O18z XlRTOUxWOy1GUzlJPFJbRj1GUiYmJiYmJicwTlM0UzBVTCwKK00sLCwsLlFXVktNTT9SXjtaMV1I XyU/Sk8lPlk+Xj9aXVROTk5OTk5ORVpBPVgqJk0yRSo0SSo0STJFKjQKK01KNzRBSzRJMkUqMkUq NEkyRSpFVSg6VSo0STJGL0paNEkyRSo0RUZOUzBVSjRJMkUsW0tLS0tLS0tJODcKK004PjNTPktW TUM8Vy1TPFctUjRJMkUqNEk7RVZZIzZJMkUqNEUqNEkyRSo1K0owVUo0STJFKTROSSM2STIKK01F KjRUXl5eM1csVjs5Tj5NOlcsVTk+Uj5QOiJDTVc4LCdETFhJWztUVitaN1FLT1A5XVNFQFM+SFk3 LUcKK00iOTY1RWAkNl1BSiMoIV43VU87PlVfPFtfNU1SLEAnSCdSK1pJUjRZLjNEWS4zRFkuM0RZ LjNEWS4zRFkKK00uM0RZLlg+TjwnPS0mQzhUOi1LMUhUOi0mQzFIVDotJkMxSFQ6LSZDTjc8S0tL S0tLS0tLS0tLS0tLS0sKK01LS0tLS0w2R0xNSFQ2MFguSllXNDtGOjRJMkUqNEk4NzgwVUo0STJF KVJFKjRJMkUqRVUuXUxBQUFBQUEKK01BWCVVVVVVVVVVVExVVjomTTJFKjRJKjRJMkUqNEo3NEFL NEkyRSo+T11NMkUqNEkyRExVVjtUMz8/NFsKK01OVE1LPFctUls8Vyk7RVUoOlUqNEkyRE9OV0xX Qi9XVzk+Wz5fPjlaNT09PT09PT0rT18iNF8mPyw/JlsKK00kTUNGPFNGPFNGOFlGSltUPzhQUFBQ UFBQSVUlVjtLXidMNjlMVjstRlMyRSo0STJFKy09RkFLNEkyRSoKK00yRSo0STJFKkVVKDpVKjRJ MkRJMkUqNEkyST0yJk0yRSo0SSo0STJFKjRKNzReKTkjIyMjIyMiNEkyRSoKK000STg3OD5GOTYw UFBQUFBQTk5QSUEjNlBQUEcjIyMiRS0oPS5URVdLMkZWTFRdOUZHUk0rOVUnXEhMTEwKK01CKEIo Qz5XTVs+V05QXURaS05XVCc3PilULkFULkFULkFULkFULkFULkFULkFULkFaI0w9S1FfNjwnIVAK K008JyFQPCchUDwnIVA8JyFQPCc2PTlVRzY9M089LlVKRSo0SF1KOkVFRUdeNjBLNC5OPSxJMkUi JCgwQSIKK00nVDdYPlFMOyZRV1Y3TDxPO1NYI1Y7XF1eRltVOTk5OT9dV0o9Qy9WXi4iKFU9NzxX LVM8X0ZMTExMQSIKK00kKDBBIiQoMFE5OTk5IiQoPSNHPipfSD4sXVBfUz9bTyo/YD8lPkg7Vl1P O1ZdJDEkMSQxJDxKW01HJ0IKK00uRVUrJUJROEw2KyVCUThMNislQlE4TSdCKEIoVDEkMSQxJDFC W0FXI04nIlJSU0xbJ1QvSjhfIlpNVVUKK01VV0M9P1FNSzpWTUtLXkVaRlVNOzZVQlJSUlNVXz9b JlFMOyZfVDdLLltJXThcKV4uX0A7XyJbOzpWTUsKK006W09KXz0/Sj9AO0YtVjstRlMwQSInVi48 WzZVTTs0KDBBVy1FRUVEKDBBIiQoP1NPWkc5P1cvPE8pPlwKK00+NFxNXCVZQ1UzR1lXLllXLllX LkxMTExMTExMTExcNVlDUidKKjRJMkUqNEkyRSo0STIoQihCKEIoQigKK01CKjRJM1IvPzsmUUw7 JCgwQSIkKDBBIiQoMEFZW1ZGUUw7JlFYX0JPJD4mWyokKDBBIiQqTExMTEEiJCgKK00wQSIkKDBc T1dPWmBVWTk5OzZVTTs0KDBBWyVbSVdDTydPJ18jUkdZLFxTWyw/WEIoQihCKEIoQihDQzYKK007 PyJeMTJFKjRJMkUqNEkyRlM5Oys2NjY2NjY2NjxbRzxbRzxbRztWXVA8JyFQMEEiJCgwQSIkKD4h OTkKK005OVlVRUVFRCgwQVtBWSNSN05UKDBBWkpSUlJTTkBMTExMQSIkLi1FRUVHUTsrKysoMEEi JCxDKF5JXUMKK01AV1cvUTlZXlNVV1wsUVcrIV5HPjgsJiMhQFA4LCYjIUBQOCwmIyFdO1s2PTsu STJFKjRJMkUqNEkyRSgKK01CKEIoQihCKEIoSTJFLEMoUixDUFsrKysoMEEiJCgwX1pbN0tNSzpW TUokKDBeJ1kjX01YK1daJCgwQSIKK00kKDBBIlVFRUVEKDBBIiQoMEEiJCgwQV9YXiJcPVwpXC1c MVlDX1lbSVZHUUdRVl1PO1ZdJDEkMSQxJDEKK009Ri5GP1RJMkUqNEkyRSo0STJFKEIoQihCKEIo QihJM01XO08+VjY2NjBBIidHNjY2Nj1dOTk5OV9TOTkKK005OSIkKD5EXk5cW1M3Rk8tPjpBIiQv WydIXUM4Vi1DUCsrKysrP0BbJlFMOyVNRjYxRUVELTY2NjAhWVYKK0E8I1NbK0ZWVEkyJlZSUlJS J1AlRUVEJ1FWSV9aX18lVyklLiUiMFcuXC4uYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL2dlbmVyYXRlLWZhdC5zaCBzeXMvYm9vdC9lZmkvYm9vdDEvZ2VuZXJhdGUtZmF0 LnNoCmluZGV4IGQ5ZGZiMjdkZTI1Li43YzQ2ZTkyNmY2MCAxMDA3NTUKLS0tIHN5cy9ib290L2Vm aS9ib290MS9nZW5lcmF0ZS1mYXQuc2gKKysrIHN5cy9ib290L2VmaS9ib290MS9nZW5lcmF0ZS1m YXQuc2gKQEAgLTEzLDcgKzEzLDcgQEAKIAogRkFUX1NJWkU9MTYwMCAJCQkjU2l6ZSBpbiA1MTIt Ynl0ZSBibG9ja3Mgb2YgdGhlIHByb2R1Y2VkIGltYWdlCiAKLUJPT1QxX1NJWkU9MTI4aworQk9P VDFfU0laRT01MTJrCiAKICMKICMgS25vd24gZmlsZW5hbWVzCmRpZmYgLS1naXQgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL3Vmc19tb2R1bGUuYyBzeXMvYm9vdC9lZmkvYm9vdDEvdWZzX21vZHVsZS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODYwYTg2MGZkZi4uMDAwMDAwMDAwMDAKLS0t IHN5cy9ib290L2VmaS9ib290MS91ZnNfbW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAg KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggUm9iZXJ0IE5vcmRpZXIKLSAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgUm9iZXJ0IERyZWhtZWwK LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTmF0aGFuIFdo aXRlaG9ybgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNSBF cmljIE1jQ29ya2xlCi0gKiBBbGwgcmlnaHRzIHJldmVydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICov Ci0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8 c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0K LSNpbmNsdWRlICJib290X21vZHVsZS5oIgotCi1zdGF0aWMgZGV2X2luZm9fdCAqZGV2aW5mbzsK LXN0YXRpYyBkZXZfaW5mb190ICpkZXZpY2VzOwotCi1zdGF0aWMgaW50Ci1kc2tyZWFkKHZvaWQg KmJ1ZiwgdV9pbnQ2NF90IGxiYSwgaW50IG5ibGspCi17Ci0JaW50IHNpemU7Ci0JRUZJX1NUQVRV UyBzdGF0dXM7Ci0KLQlsYmEgPSBsYmEgLyAoZGV2aW5mby0+ZGV2LT5NZWRpYS0+QmxvY2tTaXpl IC8gREVWX0JTSVpFKTsKLQlzaXplID0gbmJsayAqIERFVl9CU0laRTsKLQotCXN0YXR1cyA9IGRl dmluZm8tPmRldi0+UmVhZEJsb2NrcyhkZXZpbmZvLT5kZXYsCi0JICAgIGRldmluZm8tPmRldi0+ TWVkaWEtPk1lZGlhSWQsIGxiYSwgc2l6ZSwgYnVmKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NV Q0NFU1MpIHsKLQkJRFBSSU5URigiZHNrcmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJh OiAlanUsIHNpemU6ICVkLCAiCi0JCSAgICAic3RhdHVzOiAlbHVcbiIsIGRldmluZm8tPmRldiwK LQkJICAgIGRldmluZm8tPmRldi0+TWVkaWEtPk1lZGlhSWQsICh1aW50bWF4X3QpbGJhLCBzaXpl LAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQot CXJldHVybiAoMCk7Ci19Ci0KLSNpbmNsdWRlICJ1ZnNyZWFkLmMiCi0KLXN0YXRpYyBzdHJ1Y3Qg ZG1hZGF0IF9fZG1hZGF0OwotCi1zdGF0aWMgaW50Ci1pbml0X2RldihkZXZfaW5mb190KiBkZXYp Ci17Ci0KLQlkZXZpbmZvID0gZGV2OwotCWRtYWRhdCA9ICZfX2RtYWRhdDsKLQotCXJldHVybiBm c3JlYWQoMCwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyBFRklfU1RBVFVTCi1wcm9iZShkZXZfaW5m b190KiBkZXYpCi17Ci0KLQlpZiAoaW5pdF9kZXYoZGV2KSA8IDApCi0JCXJldHVybiAoRUZJX1VO U1VQUE9SVEVEKTsKLQotCWFkZF9kZXZpY2UoJmRldmljZXMsIGRldik7Ci0KLQlyZXR1cm4gKEVG SV9TVUNDRVNTKTsKLX0KLQotc3RhdGljIEVGSV9TVEFUVVMKLWxvYWQoY29uc3QgY2hhciAqZmls ZXBhdGgsIGRldl9pbmZvX3QgKmRldiwgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVmc2l6ZSkKLXsK LQl1ZnNfaW5vX3QgaW5vOwotCUVGSV9TVEFUVVMgc3RhdHVzOwotCXNpemVfdCBzaXplOwotCXNz aXplX3QgcmVhZDsKLQl2b2lkICpidWY7Ci0KLQlEUFJJTlRGKCJMb2FkaW5nICclcycgZnJvbSAl c1xuIiwgZmlsZXBhdGgsIGRldnBhdGhfc3RyKGRldi0+ZGV2cGF0aCkpOwotCi0JaWYgKGluaXRf ZGV2KGRldikgPCAwKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBpbml0IGRldmljZVxuIik7Ci0J CXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlpZiAoKGlubyA9IGxvb2t1cChmaWxl cGF0aCkpID09IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIGxvb2t1cCAnJXMnIChmaWxlIG5v dCBmb3VuZD8pXG4iLCBmaWxlcGF0aCk7Ci0JCXJldHVybiAoRUZJX05PVF9GT1VORCk7Ci0JfQot Ci0JaWYgKGZzcmVhZF9zaXplKGlubywgTlVMTCwgMCwgJnNpemUpIDwgMCB8fCBzaXplIDw9IDAp IHsKLQkJcHJpbnRmKCJGYWlsZWQgdG8gcmVhZCBzaXplIG9mICclcycgaW5vOiAlZFxuIiwgZmls ZXBhdGgsIGlubyk7Ci0JCXJldHVybiAoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsKLQl9Ci0KLQlp ZiAoKHN0YXR1cyA9IGJzLT5BbGxvY2F0ZVBvb2woRWZpTG9hZGVyRGF0YSwgc2l6ZSwgJmJ1Zikp ICE9Ci0JICAgIEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIHJl YWQgYnVmZmVyICV6dSBmb3IgJyVzJyAoJWx1KVxuIiwKLQkJICAgIHNpemUsIGZpbGVwYXRoLCBF RklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCXJlYWQg PSBmc3JlYWQoaW5vLCBidWYsIHNpemUpOwotCWlmICgoc2l6ZV90KXJlYWQgIT0gc2l6ZSkgewot CQlwcmludGYoIkZhaWxlZCB0byByZWFkICclcycgKCV6ZCAhPSAlenUpXG4iLCBmaWxlcGF0aCwg cmVhZCwKLQkJICAgIHNpemUpOwotCQkodm9pZClicy0+RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJu IChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQotCURQUklOVEYoIkxvYWQgY29tcGxldGVc biIpOwotCi0JKmJ1ZnAgPSBidWY7Ci0JKmJ1ZnNpemUgPSBzaXplOwotCi0JcmV0dXJuIChFRklf U1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGF0dXModm9pZCkKLXsKLQlpbnQgaTsKLQlk ZXZfaW5mb190ICpkZXY7Ci0KLQlmb3IgKGRldiA9IGRldmljZXMsIGkgPSAwOyBkZXYgIT0gTlVM TDsgZGV2ID0gZGV2LT5uZXh0LCBpKyspCi0JCTsKLQotCXByaW50ZigiJXMgZm91bmQgIiwgdWZz X21vZHVsZS5uYW1lKTsKLQlzd2l0Y2ggKGkpIHsKLQljYXNlIDA6Ci0JCXByaW50Zigibm8gcGFy dGl0aW9uc1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcHJpbnRmKCIlZCBwYXJ0aXRpb25c biIsIGkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoIiVkIHBhcnRpdGlvbnNcbiIs IGkpOwotCX0KLX0KLQotc3RhdGljIGRldl9pbmZvX3QgKgotX2RldmljZXModm9pZCkKLXsKLQot CXJldHVybiAoZGV2aWNlcyk7Ci19Ci0KLWNvbnN0IGJvb3RfbW9kdWxlX3QgdWZzX21vZHVsZSA9 Ci17Ci0JLm5hbWUgPSAiVUZTIiwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0J LnN0YXR1cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5 cy9ib290L2VmaS9ib290MS96ZnNfbW9kdWxlLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL3pmc19tb2R1 bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNmEzMzAxMGQuLjAwMDAwMDAw MDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvemZzX21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAg LTEsMTk2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDE1IEVyaWMgTWNDb3JrbGUK LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLSNpbmNsdWRlIDxz dGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5j bHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lz L3F1ZXVlLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0KLSNpbmNsdWRlICJib290X21vZHVsZS5oIgot Ci0jaW5jbHVkZSAibGliemZzLmgiCi0jaW5jbHVkZSAiemZzaW1wbC5jIgotCi1zdGF0aWMgZGV2 X2luZm9fdCAqZGV2aWNlczsKLQotc3RhdGljIGludAotdmRldl9yZWFkKHZkZXZfdCAqdmRldiwg dm9pZCAqcHJpdiwgb2ZmX3Qgb2ZmLCB2b2lkICpidWYsIHNpemVfdCBieXRlcykKLXsKLQlkZXZf aW5mb190ICpkZXZpbmZvOwotCW9mZl90IGxiYTsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCWRl dmluZm8gPSAoZGV2X2luZm9fdCAqKXByaXY7Ci0JbGJhID0gb2ZmIC8gZGV2aW5mby0+ZGV2LT5N ZWRpYS0+QmxvY2tTaXplOwotCi0Jc3RhdHVzID0gZGV2aW5mby0+ZGV2LT5SZWFkQmxvY2tzKGRl dmluZm8tPmRldiwKLQkgICAgZGV2aW5mby0+ZGV2LT5NZWRpYS0+TWVkaWFJZCwgbGJhLCBieXRl cywgYnVmKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoInZkZXZf cmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJhOiAlamQsIHNpemU6ICV6dSwiCi0JCSAg ICAiIHN0YXR1czogJWx1XG4iLCBkZXZpbmZvLT5kZXYsCi0JCSAgICBkZXZpbmZvLT5kZXYtPk1l ZGlhLT5NZWRpYUlkLCAoaW50bWF4X3QpbGJhLCBieXRlcywKLQkJICAgIEVGSV9FUlJPUl9DT0RF KHN0YXR1cykpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0 aWMgRUZJX1NUQVRVUwotcHJvYmUoZGV2X2luZm9fdCAqZGV2KQotewotCXNwYV90ICpzcGE7Ci0J ZGV2X2luZm9fdCAqdGRldjsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCS8qIFpGUyBjb25zdW1l cyB0aGUgZGV2IG9uIHN1Y2Nlc3Mgc28gd2UgbmVlZCBhIGNvcHkuICovCi0JaWYgKChzdGF0dXMg PSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIHNpemVvZigqZGV2KSwKLQkgICAgKHZv aWQqKikmdGRldikpICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBhbGxv Y2F0ZSB0ZGV2ICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJl dHVybiAoc3RhdHVzKTsKLQl9Ci0JbWVtY3B5KHRkZXYsIGRldiwgc2l6ZW9mKCpkZXYpKTsKLQot CWlmICh2ZGV2X3Byb2JlKHZkZXZfcmVhZCwgdGRldiwgJnNwYSkgIT0gMCkgewotCQkodm9pZCli cy0+RnJlZVBvb2wodGRldik7Ci0JCXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlk ZXYtPmRldmRhdGEgPSBzcGE7Ci0JYWRkX2RldmljZSgmZGV2aWNlcywgZGV2KTsKLQotCXJldHVy biAoRUZJX1NVQ0NFU1MpOwotfQotCi1zdGF0aWMgRUZJX1NUQVRVUwotbG9hZChjb25zdCBjaGFy ICpmaWxlcGF0aCwgZGV2X2luZm9fdCAqZGV2aW5mbywgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVm c2l6ZSkKLXsKLQlzcGFfdCAqc3BhOwotCXN0cnVjdCB6ZnNtb3VudCB6ZnNtb3VudDsKLQlkbm9k ZV9waHlzX3QgZG47Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaW50IGVycjsKLQl2b2lkICpidWY7Ci0J RUZJX1NUQVRVUyBzdGF0dXM7Ci0KLQlzcGEgPSBkZXZpbmZvLT5kZXZkYXRhOwotCi0JRFBSSU5U RigibG9hZDogJyVzJyBzcGE6ICclcycsIGRldnBhdGg6ICVzXG4iLCBmaWxlcGF0aCwgc3BhLT5z cGFfbmFtZSwKLQkgICAgZGV2cGF0aF9zdHIoZGV2aW5mby0+ZGV2cGF0aCkpOwotCi0JaWYgKChl cnIgPSB6ZnNfc3BhX2luaXQoc3BhKSkgIT0gMCkgewotCQlEUFJJTlRGKCJGYWlsZWQgdG8gbG9h ZCBwb29sICclcycgKCVkKVxuIiwgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklf Tk9UX0ZPVU5EKTsKLQl9Ci0KLQlpZiAoKGVyciA9IHpmc19tb3VudChzcGEsIDAsICZ6ZnNtb3Vu dCkpICE9IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIG1vdW50IHBvb2wgJyVzJyAoJWQpXG4i LCBzcGEtPnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9OT1RfRk9VTkQpOwotCX0KLQot CWlmICgoZXJyID0gemZzX2xvb2t1cCgmemZzbW91bnQsIGZpbGVwYXRoLCAmZG4pKSAhPSAwKSB7 Ci0JCWlmIChlcnIgPT0gRU5PRU5UKSB7Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZmluZCAnJXMn IG9uIHBvb2wgJyVzJyAoJWQpXG4iLAotCQkJICAgIGZpbGVwYXRoLCBzcGEtPnNwYV9uYW1lLCBl cnIpOwotCQkJcmV0dXJuIChFRklfTk9UX0ZPVU5EKTsKLQkJfQotCQlwcmludGYoIkZhaWxlZCB0 byBsb29rdXAgJyVzJyBvbiBwb29sICclcycgKCVkKVxuIiwgZmlsZXBhdGgsCi0JCSAgICBzcGEt PnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElEX1BBUkFNRVRFUik7Ci0JfQot Ci0JaWYgKChlcnIgPSB6ZnNfZG5vZGVfc3RhdChzcGEsICZkbiwgJnN0KSkgIT0gMCkgewotCQlw cmludGYoIkZhaWxlZCB0byBzdGF0ICclcycgb24gcG9vbCAnJXMnICglZClcbiIsIGZpbGVwYXRo LAotCQkgICAgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJB TUVURVIpOwotCX0KLQotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJE YXRhLCAoVUlOVE4pc3Quc3Rfc2l6ZSwgJmJ1ZikpCi0JICAgICE9IEVGSV9TVUNDRVNTKSB7Ci0J CXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIGxvYWQgYnVmZmVyICV6ZCBmb3IgcG9vbCAnJXMn IGZvciAnJXMnICIKLQkJICAgICIoJWx1KVxuIiwgc3Quc3Rfc2l6ZSwgc3BhLT5zcGFfbmFtZSwg ZmlsZXBhdGgsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElE X1BBUkFNRVRFUik7Ci0JfQotCi0JaWYgKChlcnIgPSBkbm9kZV9yZWFkKHNwYSwgJmRuLCAwLCBi dWYsIHN0LnN0X3NpemUpKSAhPSAwKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHJlYWQgbm9kZSBm cm9tICVzICglZClcbiIsIHNwYS0+c3BhX25hbWUsCi0JCSAgICBlcnIpOwotCQkodm9pZClicy0+ RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQot CSpidWZzaXplID0gc3Quc3Rfc2l6ZTsKLQkqYnVmcCA9IGJ1ZjsKLQotCXJldHVybiAoRUZJX1NV Q0NFU1MpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhdHVzKHZvaWQpCi17Ci0Jc3BhX3QgKnNwYTsK LQotCXNwYSA9IFNUQUlMUV9GSVJTVCgmemZzX3Bvb2xzKTsKLQlpZiAoc3BhID09IE5VTEwpIHsK LQkJcHJpbnRmKCIlcyBmb3VuZCBubyBwb29sc1xuIiwgemZzX21vZHVsZS5uYW1lKTsKLQkJcmV0 dXJuOwotCX0KLQotCXByaW50ZigiJXMgZm91bmQgdGhlIGZvbGxvd2luZyBwb29sczoiLCB6ZnNf bW9kdWxlLm5hbWUpOwotCVNUQUlMUV9GT1JFQUNIKHNwYSwgJnpmc19wb29scywgc3BhX2xpbmsp Ci0JCXByaW50ZigiICVzIiwgc3BhLT5zcGFfbmFtZSk7Ci0KLQlwcmludGYoIlxuIik7Ci19Ci0K LXN0YXRpYyB2b2lkCi1pbml0KHZvaWQpCi17Ci0KLQl6ZnNfaW5pdCgpOwotfQotCi1zdGF0aWMg ZGV2X2luZm9fdCAqCi1fZGV2aWNlcyh2b2lkKQotewotCi0JcmV0dXJuIChkZXZpY2VzKTsKLX0K LQotY29uc3QgYm9vdF9tb2R1bGVfdCB6ZnNfbW9kdWxlID0KLXsKLQkubmFtZSA9ICJaRlMiLAot CS5pbml0ID0gaW5pdCwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0JLnN0YXR1 cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5cy9ib290 L2VmaS9kcml2ZXJzL01ha2VmaWxlIHN5cy9ib290L2VmaS9kcml2ZXJzL01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTFmMThiZTI1MgotLS0gL2Rldi9u dWxsCisrKyBzeXMvYm9vdC9lZmkvZHJpdmVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDM0IEBACisj ICRGcmVlQlNEJAorCisuaW5jbHVkZSA8c3JjLm9wdHMubWs+CisKK0xJQj0JZWZpX2RyaXZlcnMK K0lOVEVSTkFMTElCPQorV0FSTlM/PQkyCisKK1NSQ1M9CWVmaXBhcnQuYyBmc19kcml2ZXIuYwor CisuaWYgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhYXJjaDY0IgorQ0ZMQUdTKz0JLW1zb2Z0LWZs b2F0IC1tZ2VuZXJhbC1yZWdzLW9ubHkKKy5lbmRpZgorLmlmICR7TUFDSElORV9BUkNIfSA9PSAi YW1kNjQiCitDRkxBR1MrPSAtZlBJQyAtbW5vLXJlZC16b25lCisuZW5kaWYKKy5pZiAke01LX1pG U30gIT0gIm5vIgorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL3pmcworQ0ZMQUdTKz0JLUkk ey5DVVJESVJ9Ly4uLy4uLy4uL2NkZGwvYm9vdC96ZnMKK0NGTEFHUys9CS1ERUZJX1pGU19CT09U CisuZW5kaWYKKworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9IC1J JHsuQ1VSRElSfS8uLi9pbmNsdWRlLyR7TUFDSElORX0KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8u Li8uLi8uLi8uLi9saWIvbGlic3RhbmQKKworIyBQaWNrIHVwIHRoZSBib290c3RyYXAgaGVhZGVy IGZvciBzb21lIGludGVyZmFjZSBpdGVtcworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uLy4uL2Nv bW1vbgorCisjIEhhbmRsZSBGcmVlQlNEIHNwZWNpZmljICViIGFuZCAlRCBwcmludGYgZm9ybWF0 IHNwZWNpZmllcnMKK0NGTEFHUys9ICR7Rk9STUFUX0VYVEVOU0lPTlN9CitDRkxBR1MrPSAtRFRF Uk1fRU1VCisKKy5pbmNsdWRlIDxic2QubGliLm1rPgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9k cml2ZXJzL2VmaV9kcml2ZXJzLmggc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM1OTlkMTdhZjkKLS0tIC9k ZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApAQCAtMCwwICsx LDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX0VGSV9EUklW RVJTX0hfCisjZGVmaW5lIF9FRklfRFJJVkVSU19IXworCit0eXBlZGVmIHN0cnVjdCBlZmlfZHJp dmVyX3QgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICB2b2lkICgqaW5pdCko dm9pZCk7Cit9IGVmaV9kcml2ZXJfdDsKKworZXh0ZXJuIHN0cnVjdCBkZXZzdyBlZmlwYXJ0X2Rl djsKKworLyogRUZJIGRyaXZlcnMuICovCitleHRlcm4gY29uc3QgZWZpX2RyaXZlcl90IGZzX2Ry aXZlcjsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMg c3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpcGFydC5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFt ZSBmcm9tIHN5cy9ib290L2VmaS9saWJlZmkvZWZpcGFydC5jCnJlbmFtZSB0byBzeXMvYm9vdC9l ZmkvZHJpdmVycy9lZmlwYXJ0LmMKaW5kZXggNWE5OTM4MTJiY2UuLjNlM2E5YzA0YTE3IDEwMDY0 NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMKKysrIHN5cy9ib290L2VmaS9kcml2 ZXJzL2VmaXBhcnQuYwpAQCAtNzQsOTAgKzc0LDEwOSBAQCBzdGF0aWMgaW50IG5wZGluZm8gPSAw OwogCiAjZGVmaW5lIFBEKGRldikgICAgICAgICAocGRpbmZvWyhkZXYpLT5kX3VuaXRdKQogCitz dGF0aWMgRUZJX1NUQVRVUworZWZpcGFydF9zdXBwb3J0ZWQoRUZJX0RSSVZFUl9CSU5ESU5HICpU aGlzLCBFRklfSEFORExFIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFU SCAqUmVtYWluaW5nRGV2aWNlUGF0aCBfX3VudXNlZCkKK3sKKyAgICAgICAgcmV0dXJuIEJTLT5P cGVuUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3VpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgSUgsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTCk7Cit9CisKK3N0YXRpYyBFRklfU1RB VFVTCitlZmlwYXJ0X3N0YXJ0KEVGSV9EUklWRVJfQklORElORyAqVGhpcywgRUZJX0hBTkRMRSBo YW5kbGUsCisgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAqUmVtYWluaW5nRGV2aWNlUGF0 aCBfX3VudXNlZCwKKyAgICAgICAgICAgICAgdV9pbnQqIG5kaXNrLCB1aW50KiBucmRpc2spCit7 CisgICAgICAgIEVGSV9CTE9DS19JTyAqYmxraW87CisgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAq ZGV2cGF0aCwgKmRldnBhdGhjcHksICp0bXBkZXZwYXRoLCAqbm9kZTsKKwlFRklfU1RBVFVTIHN0 YXR1czsKKyAgICAgICAgRUZJX0hBTkRMRSBhbGlhczsKKworICAgICAgICBkZXZwYXRoID0gZWZp X2xvb2t1cF9kZXZwYXRoKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKGRldnBhdGggPT0gTlVMTCkg eworICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0RFVklDRV9FUlJPUik7CisgICAgICAgIH0K KworICAgICAgICBzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3Vp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmJsa2lvKTsK KyAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiAo c3RhdHVzKTsKKworICAgICAgICBpZiAoIWJsa2lvLT5NZWRpYS0+TG9naWNhbFBhcnRpdGlvbikg eworICAgICAgICAgICAgICAgICpucmRpc2srKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVG SV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3 ZSBjb21lIGFjcm9zcyBhIGxvZ2ljYWwgcGFydGl0aW9uIG9mIHN1YnR5cGUgQ0RST00KKyAgICAg ICAgICogaXQgZG9lc24ndCByZWZlciB0byB0aGUgQ0QgZmlsZXN5c3RlbSBpdHNlbGYsIGJ1dCBy YXRoZXIKKyAgICAgICAgICogdG8gYW55IHVzYWJsZSBFbCBUb3JpdG8gYm9vdCBpbWFnZSBvbiBp dC4gSW4gdGhpcyBjYXNlCisgICAgICAgICAqIHdlIHRyeSB0byBmaW5kIHRoZSBwYXJlbnQgZGV2 aWNlIGFuZCBhZGQgdGhhdCBpbnN0ZWFkIGFzCisgICAgICAgICAqIHRoYXQgd2lsbCBiZSB0aGUg Q0QgZmlsZXN5c3RlbS4KKyAgICAgICAgICovCisgICAgICAgIG5vZGUgPSBlZmlfZGV2cGF0aF9s YXN0X25vZGUoZGV2cGF0aCk7CisgICAgICAgIGlmIChEZXZpY2VQYXRoVHlwZShub2RlKSA9PSBN RURJQV9ERVZJQ0VfUEFUSCAmJgorICAgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUobm9kZSkg PT0gTUVESUFfQ0RST01fRFApIHsKKyAgICAgICAgICAgICAgICBkZXZwYXRoY3B5ID0gZWZpX2Rl dnBhdGhfdHJpbShkZXZwYXRoKTsKKyAgICAgICAgICAgICAgICB0bXBkZXZwYXRoID0gZGV2cGF0 aGNweTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBCUy0+TG9jYXRlRGV2aWNlUGF0aCgmYmxr aW9fZ3VpZCwgJnRtcGRldnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmFsaWFzKTsKKyAgICAgICAgICAgICAgICBmcmVlKGRldnBhdGhjcHkpOwor CisgICAgICAgICAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworCisgICAgICAgICAgICAgICAgZWZpX3JlZ2lzdGVy X2hhbmRsZSgmZWZpcGFydF9kZXYsIGhhbmRsZSwgYWxpYXMpOworICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICBlZmlfcmVnaXN0ZXJfaGFuZGxlKCZlZmlwYXJ0X2RldiwgaGFuZGxlLCBO VUxMKTsKKworICAgICAgICBwZGluZm9bbnBkaW5mb10ucGRfb3BlbiA9IDA7CisgICAgICAgIHBk aW5mb1tucGRpbmZvXS5wZF9iY2FjaGUgPSBOVUxMOworICAgICAgICBwZGluZm9bbnBkaW5mb10u cGRfdW5pdCA9IG5wZGluZm87CisgICAgICAgIG5wZGluZm8rKzsKKyAgICAgICAgKm5kaXNrKys7 CisKKyAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKIHN0YXRpYyBpbnQKLWVmaXBh cnRfaW5pdCh2b2lkKSAKK2VmaXBhcnRfaW5pdCh2b2lkKQogewotCUVGSV9CTE9DS19JTyAqYmxr aW87Ci0JRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoLCAqZGV2cGF0aGNweSwgKnRtcGRldnBhdGgs ICpub2RlOwotCUVGSV9IQU5ETEUgKmhpbiwgKmhvdXQsICphbGlhc2VzLCBoYW5kbGU7CisJRUZJ X0hBTkRMRSAqaGFuZGxlczsKIAlFRklfU1RBVFVTIHN0YXR1czsKIAlVSU5UTiBzejsKLQl1X2lu dCBuLCBuaW4sIG5vdXQsIG5yZGlzazsKKyAgICAgICAgdV9pbnQgbiwgbmluLCBuZGlzaywgbnJk aXNrOwogCWludCBlcnI7CiAKIAlzeiA9IDA7Ci0JaGluID0gTlVMTDsKKwloYW5kbGVzID0gTlVM TDsKIAlzdGF0dXMgPSBCUy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZibGtpb19ndWlkLCAw LCAmc3osIDApOwogCWlmIChzdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKLQkJaGlu ID0gKEVGSV9IQU5ETEUgKiltYWxsb2Moc3ogKiAzKTsKKwkJaGFuZGxlcyA9IChFRklfSEFORExF ICopbWFsbG9jKHN6KTsKIAkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShCeVByb3RvY29sLCAm YmxraW9fZ3VpZCwgMCwgJnN6LAotCQkgICAgaGluKTsKKwkJICAgIGhhbmRsZXMpOwogCQlpZiAo RUZJX0VSUk9SKHN0YXR1cykpCi0JCQlmcmVlKGhpbik7CisJCQlmcmVlKGhhbmRsZXMpOwogCX0K IAlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCiAJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhz dGF0dXMpKTsKIAogCS8qIEZpbHRlciBoYW5kbGVzIHRvIG9ubHkgaW5jbHVkZSBGcmVlQlNEIHBh cnRpdGlvbnMuICovCiAJbmluID0gc3ogLyBzaXplb2YoRUZJX0hBTkRMRSk7Ci0JaG91dCA9IGhp biArIG5pbjsKLQlhbGlhc2VzID0gaG91dCArIG5pbjsKLQlub3V0ID0gMDsKLQlucmRpc2sgPSAw OwotCi0JYnplcm8oYWxpYXNlcywgbmluICogc2l6ZW9mKEVGSV9IQU5ETEUpKTsKIAlwZGluZm8g PSBtYWxsb2MobmluICogc2l6ZW9mKCpwZGluZm8pKTsKLQlpZiAocGRpbmZvID09IE5VTEwpCi0J CXJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgbmRpc2sgPSAwOworICAgICAgICBucmRpc2sgPSAw OwogCiAJZm9yIChuID0gMDsgbiA8IG5pbjsgbisrKSB7Ci0JCWRldnBhdGggPSBlZmlfbG9va3Vw X2RldnBhdGgoaGluW25dKTsKLQkJaWYgKGRldnBhdGggPT0gTlVMTCkgewotCQkJY29udGludWU7 Ci0JCX0KLQotCQlzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmYmxraW9fZ3Vp ZCwKLQkJICAgICh2b2lkKiopJmJsa2lvKTsKLQkJaWYgKEVGSV9FUlJPUihzdGF0dXMpKQotCQkJ Y29udGludWU7Ci0JCWlmICghYmxraW8tPk1lZGlhLT5Mb2dpY2FsUGFydGl0aW9uKSB7Ci0JCQlu cmRpc2srKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgd2UgY29tZSBhY3Jv c3MgYSBsb2dpY2FsIHBhcnRpdGlvbiBvZiBzdWJ0eXBlIENEUk9NCi0JCSAqIGl0IGRvZXNuJ3Qg cmVmZXIgdG8gdGhlIENEIGZpbGVzeXN0ZW0gaXRzZWxmLCBidXQgcmF0aGVyCi0JCSAqIHRvIGFu eSB1c2FibGUgRWwgVG9yaXRvIGJvb3QgaW1hZ2Ugb24gaXQuIEluIHRoaXMgY2FzZQotCQkgKiB3 ZSB0cnkgdG8gZmluZCB0aGUgcGFyZW50IGRldmljZSBhbmQgYWRkIHRoYXQgaW5zdGVhZCBhcwot CQkgKiB0aGF0IHdpbGwgYmUgdGhlIENEIGZpbGVzeXN0ZW0uCi0JCSAqLwotCQlub2RlID0gZWZp X2RldnBhdGhfbGFzdF9ub2RlKGRldnBhdGgpOwotCQlpZiAoRGV2aWNlUGF0aFR5cGUobm9kZSkg PT0gTUVESUFfREVWSUNFX1BBVEggJiYKLQkJICAgIERldmljZVBhdGhTdWJUeXBlKG5vZGUpID09 IE1FRElBX0NEUk9NX0RQKSB7Ci0JCQlkZXZwYXRoY3B5ID0gZWZpX2RldnBhdGhfdHJpbShkZXZw YXRoKTsKLQkJCXRtcGRldnBhdGggPSBkZXZwYXRoY3B5OwotCQkJc3RhdHVzID0gQlMtPkxvY2F0 ZURldmljZVBhdGgoJmJsa2lvX2d1aWQsICZ0bXBkZXZwYXRoLAotCQkJICAgICZoYW5kbGUpOwot CQkJZnJlZShkZXZwYXRoY3B5KTsKLQkJCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKLQkJCQljb250 aW51ZTsKLQkJCWhvdXRbbm91dF0gPSBoYW5kbGU7Ci0JCQlhbGlhc2VzW25vdXRdID0gaGluW25d OwotCQl9IGVsc2UKLQkJCWhvdXRbbm91dF0gPSBoaW5bbl07Ci0JCW5vdXQrKzsKLQkJcGRpbmZv W25wZGluZm9dLnBkX29wZW4gPSAwOwotCQlwZGluZm9bbnBkaW5mb10ucGRfYmNhY2hlID0gTlVM TDsKLQkJcGRpbmZvW25wZGluZm9dLnBkX3VuaXQgPSBucGRpbmZvOwotCQlucGRpbmZvKys7Cisg ICAgICAgICAgICAgICAgZWZpcGFydF9zdGFydChOVUxMLCBoYW5kbGVzW25dLCBOVUxMLCAmbmRp c2ssICZucmRpc2spOwogCX0KIAogCWJjYWNoZV9hZGRfZGV2KG5wZGluZm8pOwotCWVyciA9IGVm aV9yZWdpc3Rlcl9oYW5kbGVzKCZlZmlwYXJ0X2RldiwgaG91dCwgYWxpYXNlcywgbm91dCk7Ci0J ZnJlZShoaW4pOworCWZyZWUoaGFuZGxlcyk7CiAKLQlpZiAobm91dCA9PSAwICYmIG5yZGlzayA+ IDApCisJaWYgKG5kaXNrID09IDAgJiYgbnJkaXNrID4gMCkKIAkJcHJpbnRmKCJGb3VuZCAlZCBk aXNrKHMpIGJ1dCBubyBsb2dpY2FsIHBhcnRpdGlvblxuIiwgbnJkaXNrKTsKIAlyZXR1cm4gKGVy cik7CiB9CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMgc3lzL2Jv b3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmI5Yzg1MzYyYTcxCi0tLSAvZGV2L251bGwKKysrIHN5cy9ib290L2VmaS9kcml2 ZXJzL2ZzX2RyaXZlci5jCkBAIC0wLDAgKzEsODUzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE JAorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs dWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Bh cmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVk ZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgorI2luY2x1ZGUgPHN0cmluZzE2Lmg+ CisjaWZkZWYgRUZJX1pGU19CT09UCisjaW5jbHVkZSA8bGliemZzLmg+CisjZW5kaWYKKyNpbmNs dWRlIDxib290c3RyYXAuaD4KKworI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCisKK3N0YXRpYyBF RklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0gU0lNUExFX0ZJTEVfU1lTVEVN X1BST1RPQ09MOworCitzdGF0aWMgc3RydWN0IGZzX29wcyAqYmFja2VuZF9maWxlX3N5c3RlbVtd ID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3BzLAorCSZjZDk2NjBfZnNvcHMsCisJJnRm dHBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlwZnNfZnNvcHMs CisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZzdyAqYmFja2VuZF9kZXZzd1tdID0gewor CSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZzX2RldiwKKyNlbmRpZgor CU5VTEwKK307CisKK3R5cGVkZWYgc3RydWN0IHZvbGluZm9fdCB7CisgICAgICAgIHN0cnVjdCBm c19vcHMgKmZzb3BzOworICAgICAgICBzdHJ1Y3QgZGV2ZGVzYyAqZGV2OworfSB2b2xpbmZvX3Q7 CisKK3R5cGVkZWYgc3RydWN0IGZpbGVpbmZvX3QgeworICAgICAgICBjb25zdCB2b2xpbmZvX3Qq IHZpbmZvOworICAgICAgICBzdHJ1Y3Qgb3Blbl9maWxlIGZkYXRhOworICAgICAgICBjaGFyIHBh dGhbXTsKK30gZmlsZWluZm9fdDsKKworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJRCA9IEVG SV9GSUxFX0lORk9fSUQ7OworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfb3Blbl9p bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfRklMRV9IQU5ETEUgKk5ld0hhbmRsZSwKKyAg ICAgICAgICAgICAgIENIQVIxNiAqRmlsZU5hbWUsIFVJTlQ2NCBPcGVuTW9kZSwgVUlOVDY0IEF0 dHJpYnV0ZXMpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfY2xvc2VfaW1wbChF RklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9k ZWxldGVfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNp emUsIFZPSUQgKkJ1ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dyaXRl X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLAorICAgICAgICAg ICAgICAgVk9JRCAqQnVmZmVyKTsKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3Jl YWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1 ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV93cml0ZV9pbXBsKEVGSV9G SUxFX0hBTkRMRSBGaWxlLCBVSU5UTiAqQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICBWT0lE ICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X3Bvc2l0aW9u X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbik7CisKK3N0YXRpYyBF RklBUEkgRUZJX1NUQVRVUworZmlsZV9nZXRfcG9zaXRpb25faW1wbChFRklfRklMRV9IQU5ETEUg RmlsZSwgVUlOVDY0ICpQb3NpdGlvbik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmls ZV9nZXRfaW5mb19pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfR1VJRCAqSW5mb3JtYXRp b25UeXBlLAorICAgICAgICAgICAgICAgICAgIFVJTlROICpCdWZmZXJTaXplLCBWT0lEICpCdWZm ZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X2luZm9faW1wbChFRklf RklMRV9IQU5ETEUgRmlsZSwgRUZJX0dVSUQgKkluZm9ybWF0aW9uVHlwZSwKKyAgICAgICAgICAg ICAgICAgICBVSU5UTiBCdWZmZXJTaXplLCBWT0lEICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJ IEVGSV9TVEFUVVMKK2ZpbGVfZmx1c2hfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0 YXRpYyBzdHJ1Y3QgZGV2ZGVzYyoKK2Nsb25lX2RldmRlc2Moc3RydWN0IGRldmRlc2MgKmRldikK K3sKKyAgICAgICAgc3RydWN0IGRldmRlc2MgKm91dDsKKworICAgICAgICBzd2l0Y2goZGV2LT5k X2Rldi0+ZHZfdHlwZSkgeworICAgICAgICBjYXNlIERFVlRfWkZTOgorICAgICAgICAgICAgICAg IG91dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAg ICAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbWNweShvdXQsIGRl diwgc2l6ZW9mKHN0cnVjdCB6ZnNfZGV2ZGVzYykpOworCisgICAgICAgICAgICAgICAgcmV0dXJu IG91dDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dCA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IGRldmRlc2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChvdXQgPT0gTlVM TCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgbWVtY3B5KG91dCwgZGV2LCBzaXplb2Yoc3RydWN0IGRl dmRlc2MpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIH0KK30KKwor c3RhdGljIEVGSV9TVEFUVVMKK2RvX2ZpbGVfb3Blbihjb25zdCB2b2xpbmZvX3QgKnZpbmZvLCBj b25zdCBjaGFyIGZpbGVwYXRoW10sCisgICAgICAgICAgICAgaW50IG1vZGUsIEVGSV9GSUxFX0hB TkRMRSAqb3V0KQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmhhbmRsZTsKKyAgICAgICAg ZmlsZWluZm9fdCAqZmluZm87CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICBzdHJ1 Y3QgZGV2ZGVzYyAqdG1wZGV2OworCWludCBlcnI7CisKKyAgICAgICAgbWVtc2V0KCZzdCwgMCwg c2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisgICAgICAgIGZoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKEVG SV9GSUxFKSArIHNpemVvZihmaWxlaW5mb190KSArCisgICAgICAgICAgICAgICAgICAgICAgICAg c3RybGVuKGZpbGVwYXRoKSArIDEpOworCisgICAgICAgIGlmIChmaGFuZGxlID09IE5VTEwpIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg fQorCisgICAgICAgIHRtcGRldiA9IGNsb25lX2RldmRlc2ModmluZm8tPmRldik7CisKKyAgICAg ICAgaWYgKHRtcGRldiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnJlZShmaGFuZGxlKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg fQorCisgICAgICAgIGZpbmZvID0gKGZpbGVpbmZvX3QqKShmaGFuZGxlICsgMSk7CisgICAgICAg IGZpbmZvLT5mZGF0YS5mX2ZsYWdzID0gbW9kZSArIDE7CisgICAgICAgIGZpbmZvLT5mZGF0YS5m X2RldiA9IE5VTEw7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcyA9IE5VTEw7CisgICAgICAg IGZpbmZvLT5mZGF0YS5mX29mZnNldCA9IDA7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX2RldmRh dGEgPSBOVUxMOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmRldi0+ZF9kZXYtPmR2X29w ZW4oJihmaW5mby0+ZmRhdGEpLCB0bXBkZXYpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZnJl ZShmaGFuZGxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo ZXJyKSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5mby0+ZmRhdGEuZl9kZXYgPSB2aW5mby0+ ZGV2LT5kX2RldjsKKworICAgICAgICBpZiAoKGVyciA9IHZpbmZvLT5mc29wcy0+Zm9fb3Blbihm aWxlcGF0aCwgJihmaW5mby0+ZmRhdGEpKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUo ZmhhbmRsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVy cikpOworICAgICAgICB9CisKKyAgICAgICAgZmluZm8tPmZkYXRhLmZfb3BzID0gdmluZm8tPmZz b3BzOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmZzb3BzLT5mb19zdGF0KCYoZmluZm8t PmZkYXRhKSwgJnN0KSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUoZmhhbmRsZSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycikpOworICAgICAg ICB9CisKKyAgICAgICAgc3RyY3B5KGZpbmZvLT5wYXRoLCBmaWxlcGF0aCk7CisgICAgICAgIGZp bmZvLT52aW5mbyA9IHZpbmZvOworICAgICAgICBmaGFuZGxlLT5SZXZpc2lvbiA9IEVGSV9GSUxF X0hBTkRMRV9SRVZJU0lPTjsKKyAgICAgICAgZmhhbmRsZS0+T3BlbiA9IGZpbGVfb3Blbl9pbXBs OworICAgICAgICBmaGFuZGxlLT5DbG9zZSA9IGZpbGVfY2xvc2VfaW1wbDsKKyAgICAgICAgZmhh bmRsZS0+RGVsZXRlID0gZmlsZV9kZWxldGVfaW1wbDsKKyAgICAgICAgZmhhbmRsZS0+U2V0UG9z aXRpb24gPSBmaWxlX3NldF9wb3NpdGlvbl9pbXBsOworICAgICAgICBmaGFuZGxlLT5HZXRQb3Np dGlvbiA9IGZpbGVfZ2V0X3Bvc2l0aW9uX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkdldEluZm8g PSBmaWxlX2dldF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPlNldEluZm8gPSBmaWxlX3Nl dF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkZsdXNoID0gZmlsZV9mbHVzaF9pbXBsOwor CisgICAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZmhh bmRsZS0+UmVhZCA9IGRpcl9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+V3Jp dGUgPSBkaXJfd3JpdGVfaW1wbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBm aGFuZGxlLT5SZWFkID0gZmlsZV9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+ V3JpdGUgPSBmaWxlX3dyaXRlX2ltcGw7CisgICAgICAgIH0KKworICAgICAgICAqb3V0ID0gZmhh bmRsZTsKKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIGludAor bW9kZV9mcm9tX2VmaShVSU5UNjQgZWZpX21vZGUpCit7CisgICAgICAgIGludCBtb2RlID0gMDsK KworICAgICAgICBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1dSSVRFKSB7CisgICAgICAg ICAgICAgICAgbW9kZSB8PSBPX1dST05MWTsKKyAgICAgICAgfSBlbHNlIGlmIChlZmlfbW9kZSAm IEVGSV9GSUxFX01PREVfUkVBRCkgeworICAgICAgICAgICAgICAgIG1vZGUgfD0gT19SRE9OTFk7 CisgICAgICAgIH0gZWxzZSBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1JFQUQgJiYKKyAg ICAgICAgICAgICAgICAgICBlZmlfbW9kZSAmIEVGSV9GSUxFX01PREVfV1JJVEUpIHsKKyAgICAg ICAgICAgICAgICBtb2RlIHw9IE9fUkRXUjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt b2RlOworfQorCitzdGF0aWMgVUlOVDY0Cittb2RlX3RvX2VmaShpbnQgbW9kZSkKK3sKKyAgICAg ICAgVUlOVDY0IGVmaV9tb2RlID0gMDsKKworICAgICAgICBpZiAobW9kZSAmIE9fV1JPTkxZKSB7 CisgICAgICAgICAgICAgICAgZWZpX21vZGUgfD0gRUZJX0ZJTEVfTU9ERV9XUklURTsKKyAgICAg ICAgfSBlbHNlIGlmIChtb2RlICYgT19SRE9OTFkpIHsKKyAgICAgICAgICAgICAgICBlZmlfbW9k ZSB8PSBFRklfRklMRV9NT0RFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSAmIE9fUkRX UikgeworICAgICAgICAgICAgICAgIGVmaV9tb2RlIHw9IEVGSV9GSUxFX01PREVfUkVBRDsKKyAg ICAgICAgICAgICAgICBlZmlfbW9kZSB8PSBFRklfRklMRV9NT0RFX1dSSVRFOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuIChlZmlfbW9kZSk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZmlsZV9vcGVuX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9GSUxFX0hBTkRM RSAqTmV3SGFuZGxlLAorICAgICAgICAgICAgICAgQ0hBUjE2ICpGaWxlTmFtZSwgVUlOVDY0IE9w ZW5Nb2RlLCBVSU5UNjQgQXR0cmlidXRlcykKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8g PSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgY2hhciBidWZbc3RybGVuKGZpbmZv LT5wYXRoKSArIHN0cmxlbjE2KEZpbGVOYW1lKSArIDFdOworCisgICAgICAgIHN0cmNweV9mcm9t XzE2KHN0cGNweShidWYsIGZpbmZvLT5wYXRoKSwgRmlsZU5hbWUpOworCisgICAgICAgIHJldHVy biBkb19maWxlX29wZW4oZmluZm8tPnZpbmZvLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9kZV9mcm9tX2VmaShPcGVuTW9kZSksIE5ld0hhbmRsZSk7Cit9CisKK3N0YXRpYyBF RklBUEkgRUZJX1NUQVRVUworZmlsZV9jbG9zZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQor eworICAgICAgICBmaWxlaW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOwor ICAgICAgICBpbnQgcmVzOworCisgICAgICAgIGlmICgocmVzID0gZmluZm8tPmZkYXRhLmZfb3Bz LT5mb19jbG9zZSgmKGZpbmZvLT5mZGF0YSkpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9CisKKyAgICAgICAgaWYg KChyZXMgPSBmaW5mby0+dmluZm8tPmRldi0+ZF9kZXYtPmR2X2Nsb3NlKCYoZmluZm8tPmZkYXRh KSkpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo cmVzKSk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKEZpbGUpOworICAgICAgICByZXR1cm4g KEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2RlbGV0 ZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQoreworICAgICAgICBmaWxlX2Nsb3NlX2ltcGwo RmlsZSk7CisKKyAgICAgICAgcmV0dXJuIChFRklfV0FSTl9ERUxFVEVfRkFJTFVSRSk7Cit9CisK K3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUg RmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWlu Zm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgZmlsZWluZm9f dCAqZW50aW5mbzsKKyAgICAgICAgc3RydWN0IGRpcmVudCBkOworICAgICAgICBzdHJ1Y3Qgc3Rh dCBzdDsKKyAgICAgICAgaW50IGVycjsKKyAgICAgICAgVUlOVE4gY3VycnNpemUgPSAqQnVmZmVy U2l6ZTsKKyAgICAgICAgVUlOVE4gcmVxc2l6ZTsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqb3V0 ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgRUZJX0ZJTEVfSEFORExFIGVudGhh bmRsZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisgICAgICAgIG9mZl90IGN1cnJwb3M7 CisKKyAgICAgICAgLyogUmVjb3JkIHRlaCBjdXJyZW50IHBvc2l0aW9uIHNvIHdlIGNhbiByZXdp bmQgaWYgd2UgaGF2ZSB0byAqLworICAgICAgICBpZiAoKGN1cnJwb3MgPSBmaW5mby0+ZmRhdGEu Zl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTRUVLX0NVUikpIDwgMCkgeworICAgICAgICAg ICAgICAgIHJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICB9CisK KwlpZiAoKGVyciA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZGRpcigmKGZpbmZvLT5mZGF0 YSksICZkKSkgIT0gMCkgeworCQlyZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMoZXJybm8pKTsK Kwl9CisKKyAgICAgICAgcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArCisgICAgICAg ICAgKChzdHJsZW4oZC5kX25hbWUpICsgMSkgKiBzaXplb2YoQ0hBUjE2KSk7CisKKyAgICAgICAg aWYgKEJ1ZmZlciA9PSBOVUxMIHx8IGN1cnJzaXplIDwgcmVxc2l6ZSkgeworICAgICAgICAgICAg ICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3Ms IFNFRUtfU0VUKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAg ICAgICAgICAgICAgICByZXR1cm4gKEVGSV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICAgICAgfQor CisgICAgICAgIC8vIFdlIGhhdmUgdG8gYWN0dWFsbHkgb3BlbiB0aGUgZmlsZSwgc2luY2UgRUZJ IGRpcmVjdG9yeQorICAgICAgICAvLyByZWFkcyBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN0YXQg aW5mb3JtYXRpb24uCisgICAgICAgIENIQVIxNiBidWZbZC5kX25hbWxlbl07CisgICAgICAgIHN0 cmNweV90b18xNihidWYsIGQuZF9uYW1lKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZV9vcGVuX2lt cGwoRmlsZSwgJmVudGhhbmRsZSwgYnVmLCBFRklfRklMRV9SRUFEX09OTFksIDApOworCisgICAg ICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0 YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBlbnRp bmZvID0gKGZpbGVpbmZvX3QqKShlbnRoYW5kbGUgKyAxKTsKKworICAgICAgICBpZiAoKGVyciA9 IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc3RhdCgmKGVudGluZm8tPmZkYXRhKSwgJnN0KSkgIT0g MCkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZv LT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3Rh dHVzKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBmaWxlX2Nsb3NlX2lt cGwoZW50aGFuZGxlKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAgICAg ICAgICAgICAgICBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLCBj dXJycG9zLCBTRUVLX1NFVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAg ICAgICB9CisKKyAgICAgICAgLy8gV2UncmUgZ29vZCBhdCB0aGlzIHBvaW50LCBjb3B5IGV2ZXJ5 dGhpbmcgaW50byBwbGFjZS4KKyAgICAgICAgb3V0LT5TaXplID0gcmVxc2l6ZTsKKyAgICAgICAg b3V0LT5GaWxlU2l6ZSA9IHN0LnN0X3NpemU7CisgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0g c3Quc3RfYmxvY2tzICogc3Quc3RfYmxrc2l6ZTsKKyAgICAgICAgb3V0LT5BdHRyaWJ1dGUgPSBt b2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPkxhc3RB Y2Nlc3NUaW1lKSwgc3Quc3RfYXRpbWUpOworICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TW9k aWZpY2F0aW9uVGltZSksIHN0LnN0X210aW1lKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQt PkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisKKyAgICAgICAgaWYgKFNfSVNESVIoc3Quc3Rf bW9kZSkpIHsKKyAgICAgICAgICAgICAgICBvdXQtPkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJF Q1RPUlk7CisgICAgICAgIH0KKworICAgICAgICBzdHJjcHlfdG9fMTYob3V0LT5GaWxlTmFtZSwg ZC5kX25hbWUpOworICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAgcmV0 dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dy aXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUgX191bnVzZWQsIFVJTlROICpCdWZmZXJTaXpl IF9fdW51c2VkLAorICAgICAgICAgICAgICAgVk9JRCAqQnVmZmVyIF9fdW51c2VkKQoreworICAg ICAgICAvLyBFRkkgQVBJIGRvZXNuJ3QgYWxsb3cgd3JpdGluZyB0byBkaXJlY3RvcmllcworICAg ICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZmlsZV9yZWFkX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJT aXplLCBWT0lEICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVp bmZvX3QqKShGaWxlICsgMSk7CisgICAgICAgIHNpemVfdCByZWFkc2l6ZSA9ICpCdWZmZXJTaXpl OworICAgICAgICBzaXplX3QgcmVzaWQ7CisgICAgICAgIGludCBlcnI7CisKKwlpZiAoKGVyciA9 IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZCgmKGZpbmZvLT5mZGF0YSksIEJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUsICZy ZXNpZCkpICE9IDApIHsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycm5vKSk7CisJ fQorCisgICAgICAgICpCdWZmZXJTaXplID0gcmVhZHNpemUgLSByZXNpZDsKKworICAgICAgICBy ZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxl X3dyaXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLCBWT0lE ICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVpbmZvX3QqKShG aWxlICsgMSk7CisgICAgICAgIHNpemVfdCB3cml0ZXNpemUgPSAqQnVmZmVyU2l6ZTsKKyAgICAg ICAgc2l6ZV90IHJlc2lkOworICAgICAgICBpbnQgZXJyOworCisJaWYgKChlcnIgPSBmaW5mby0+ ZmRhdGEuZl9vcHMtPmZvX3dyaXRlKCYoZmluZm8tPmZkYXRhKSwgQnVmZmVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzaXplLCAmcmVzaWQp KSAhPSAwKSB7CisJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworCX0KKwor ICAgICAgICAqQnVmZmVyU2l6ZSA9IHdyaXRlc2l6ZSAtIHJlc2lkOworCisgICAgICAgIHJldHVy biAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0 X3Bvc2l0aW9uX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbikKK3sK KyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAg ICAgICAgaW50IHJlczsKKworICAgICAgICBpZiAoUG9zaXRpb24gIT0gMHhmZmZmZmZmZmZmZmZm ZmZmTEwpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3Nl ZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQb3NpdGlvbiwgU0VFS19TRVQpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIHJlcyA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5m ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsIFNFRUtfRU5EKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9 Cit9CisKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2dldF9wb3NpdGlvbl9pbXBs KEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBVSU5UNjQgKlBvc2l0aW9uKQoreworICAgICAgICBmaWxl aW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOworICAgICAgICBvZmZfdCBy ZXM7CisKKyAgICAgICAgcmVzID0gZmluZm8tPmZkYXRhLmZfb3BzLT5mb19zZWVrKCYoZmluZm8t PmZkYXRhKSwgMCwgU0VFS19DVVIpOworCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAgICAg ICAgICAgICAgKlBvc2l0aW9uID0gcmVzOworCisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklf U1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJu b190b19lZmlfc3RhdHVzKGVycm5vKSk7CisgICAgICAgIH0KK30KKworc3RhdGljIEVGSUFQSSBF RklfU1RBVFVTCitmaWxlX2dldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9H VUlEICpJbmZvcm1hdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgVUlOVE4gKkJ1ZmZlclNp emUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWlu Zm9fdCopKEZpbGUgKyAxKTsKKworICAgICAgICBpZiAoIW1lbWNtcChJbmZvcm1hdGlvblR5cGUs ICZGaWxlSW5mb0dVSUQsIHNpemVvZihFRklfR1VJRCkpKSB7CisgICAgICAgICAgICAgICAgRUZJ X0ZJTEVfSU5GTyAqb3V0ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgICAgICAg ICBVSU5UTiBzdHIxNmxlbiA9KHN0cmxlbihmaW5mby0+cGF0aCkgKyAxKSAqIHNpemVvZihDSEFS MTYpOworICAgICAgICAgICAgICAgIFVJTlROIGN1cnJzaXplID0gKkJ1ZmZlclNpemU7CisgICAg ICAgICAgICAgICAgVUlOVE4gcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArIHN0cjE2 bGVuOworICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICAgICAgICAgIGlu dCBlcnI7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3RydWN0IHN0 YXQpKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAg ICAgICAgICBpZiAoQnVmZmVyID09IE5VTEwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vy cnNpemUgPCBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxlbikgeworICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxl bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0JVRkZFUl9UT09fU01BTEwp OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZmluZm8t PmZkYXRhLmZfb3BzLT5mb19zdGF0KCYoZmluZm8tPmZkYXRhKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdCkpICE9IDApIHsKKyAgICAg ICAJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIG91dC0+U2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSAr IHN0cjE2bGVuOworICAgICAgICAgICAgICAgIG91dC0+RmlsZVNpemUgPSBzdC5zdF9zaXplOwor ICAgICAgICAgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0gc3Quc3RfYmxvY2tzICogc3Quc3Rf Ymxrc2l6ZTsKKyAgICAgICAgICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TGFzdEFjY2Vzc1Rp bWUpLCBzdC5zdF9hdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPk1v ZGlmaWNhdGlvblRpbWUpLCBzdC5zdF9tdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3Rp bWUoJihvdXQtPkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisgICAgICAgICAgICAgICAgb3V0 LT5BdHRyaWJ1dGUgPSBtb2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKworICAgICAgICAgICAgICAg IGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQt PkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJFQ1RPUlk7CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgc3RyY3B5X3RvXzE2KG91dC0+RmlsZU5hbWUsIGZpbmZvLT5wYXRoKTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRF RCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3Rh dGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3NldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExF IEZpbGUgX191bnVzZWQsCisgICAgICAgICAgICAgICAgICAgRUZJX0dVSUQgKkluZm9ybWF0aW9u VHlwZSBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBVSU5UTiBCdWZmZXJTaXplIF9fdW51 c2VkLCBWT0lEICpCdWZmZXIgX191bnVzZWQpCit7CisgICAgICAgIHJldHVybiAoRUZJX1dSSVRF X1BST1RFQ1RFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9mbHVzaF9p bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlIF9fdW51c2VkKQoreworICAgICAgICByZXR1cm4gKEVG SV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitvcGVuX3ZvbHVtZV9p bXBsKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqVGhpcywgRUZJX0ZJTEVfSEFORExFICpSb290KQor eworICAgICAgICB2b2xpbmZvX3QgKnZpbmZvID0gKHZvbGluZm9fdCopKFRoaXMgKyAxKTsKKwor ICAgICAgICByZXR1cm4gZG9fZmlsZV9vcGVuKHZpbmZvLCAiIiwgT19SRE9OTFksIFJvb3QpOwor fQorCitzdGF0aWMgc3RydWN0IGZzX29wcyoKK2ZzX3Byb2JlKHN0cnVjdCBkZXZkZXNjICpkZXYp Cit7CisgICAgICAgIHN0cnVjdCBvcGVuX2ZpbGUgZjsKKwlpbnQgZXJyLCBpOworCisgICAgICAg IGYuZl9mbGFncyA9IE9fUkRPTkxZICsgMTsKKyAgICAgICAgZi5mX2RldiA9IChzdHJ1Y3QgZGV2 c3cgKikwOworICAgICAgICBmLmZfb3BzID0gKHN0cnVjdCBmc19vcHMgKikwOworICAgICAgICBm LmZfb2Zmc2V0ID0gMDsKKyAgICAgICAgZi5mX2RldmRhdGEgPSBkZXY7CisKKyAgICAgICAgaWYg KChlcnIgPSBkZXYtPmRfZGV2LT5kdl9vcGVuKCZmLCBkZXYpKSAhPSAwKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBiYWNr ZW5kX2ZpbGVfc3lzdGVtW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgICAgIGYuZl9v cHMgPSBiYWNrZW5kX2ZpbGVfc3lzdGVtW2ldOworCisgICAgICAgICAgICAgICAgaWYgKChlcnIg PSBmLmZfb3BzLT5mb19vcGVuKCIvIiwgJmYpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gYmFja2VuZF9maWxlX3N5c3RlbVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVGSV9TVEFUVVMK K21ha2VfZnNfZmlsZV9pb19pZmFjZShzdHJ1Y3QgZGV2ZGVzYyAqZGV2LCBFRklfRklMRV9JT19J TlRFUkZBQ0UgKipvdXQpCit7CisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgZnNfb3BzKiBmc29wczsK KyAgICAgICAgRUZJX0ZJTEVfSU9fSU5URVJGQUNFKiBmaWZhY2U7CisgICAgICAgIHZvbGluZm9f dCAqdmluZm87CisKKyAgICAgICAgc3dpdGNoIChkZXYtPmRfdHlwZSkgeworI2lmZGVmIEVGSV9a RlNfQk9PVAorCWNhc2UgREVWVF9aRlM6CisgICAgICAgICAgICAgICAgZnNvcHMgPSAmemZzX2Zz b3BzOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgZnNvcHMgPSBmc19wcm9iZShkZXYpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZzb3BzID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICBm aWZhY2UgPSBtYWxsb2Moc2l6ZW9mKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSkgKyBzaXplb2Yodm9s aW5mb190KSk7CisKKyAgICAgICAgaWYgKGZpZmFjZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0KKworICAgICAgICB2 aW5mbyA9ICh2b2xpbmZvX3QqKShmaWZhY2UgKyAxKTsKKworICAgICAgICBmaWZhY2UtPlJldmlz aW9uID0gRUZJX0ZJTEVfSU9fSU5URVJGQUNFX1JFVklTSU9OOworICAgICAgICBmaWZhY2UtPk9w ZW5Wb2x1bWUgPSBvcGVuX3ZvbHVtZV9pbXBsOworICAgICAgICB2aW5mby0+ZGV2ID0gZGV2Owor ICAgICAgICB2aW5mby0+ZnNvcHMgPSBmc29wczsKKworICAgICAgICAqb3V0ID0gZmlmYWNlOwor CisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9T VEFUVVMKK2JpbmRfaWZhY2UoRUZJX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCBkZXZkZXNjICpkZXYp Cit7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBFRklfRklMRV9JT19JTlRF UkZBQ0UgKmlmYWNlOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBm aWxlc3lzdGVtIGludGVyZmFjZQorICAgICAgICBzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKGhh bmRsZSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICBOVUxMLCBJ SCwgaGFuZGxlLCBFRklfT1BFTl9QUk9UT0NPTF9URVNUX1BST1RPQ09MKTsKKworICAgICAgICBp ZiAoIUVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklfQUND RVNTX0RFTklFRCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IEVGSV9VTlNVUFBPUlRF RCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAg ICAgIHN0YXR1cyA9IG1ha2VfZnNfZmlsZV9pb19pZmFjZShkZXYsICZpZmFjZSk7CisKKyAgICAg ICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0 dXMpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gQlMtPkluc3RhbGxNdWx0aXBsZVBy b3RvY29sSW50ZXJmYWNlcygmaGFuZGxlLAorICAgICAgICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Q cm90b2NvbEdVSUQsIGlmYWNlLCBOVUxMKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1 cykpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGlmYWNlKTsKKworICAgICAgICAgICAgICAgIHJl dHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisJcmV0dXJuIChzdGF0dXMpOworfQorCitzdGF0 aWMgRUZJQVBJIEVGSV9TVEFUVVMKK3N0b3BfaW1wbChFRklfRFJJVkVSX0JJTkRJTkcgKlRoaXMg X191bnVzZWQsIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSBfX3VudXNlZCwKKyAgICAgICAg ICBVSU5UTiBOdW1iZXJPZkNoaWxkcmVuIF9fdW51c2VkLCBFRklfSEFORExFICpDaGlsZEhhbmRs ZUJ1ZmZlciBfX3VudXNlZCkKK3sKKyAgICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBpbnRlZmFj ZSwgdW5pbnN0YWxsIGl0LCBhbmQgZnJlZSBpdAorICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNT KTsKK30KKworI2lmZGVmIEVGSV9aRlNfQk9PVAorc3RhdGljIHZvaWQKK2VmaV96ZnNfcHJvYmUo dm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisJdV9pbnQgdW5pdDsKKwlpbnQgaTsKKwljaGFyIGRu YW1lW1NQRUNOQU1FTEVOICsgMV07CisJdWludDY0X3QgZ3VpZDsKKworCXVuaXQgPSAwOworCWgg PSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5V TEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXNucHJpbnRm KGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoiLCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsK KwkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZndWlkKSA9PSAwKSB7CisJCQkodm9pZCllZmlf aGFuZGxlX3VwZGF0ZV9kZXYoaCwgJnpmc19kZXYsIHVuaXQrKywgZ3VpZCk7CisgICAgICAgICAg ICAgICAgfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitiYWNrZW5kX3BhcnNlZGV2KHN0 cnVjdCBkZXZkZXNjICoqZGV2LCBjb25zdCBjaGFyICpkZXZzcGVjLCBjb25zdCBjaGFyICoqcGF0 aCkKK3sKKwlzdHJ1Y3QgZGV2ZGVzYyAqaWRldjsKKwlzdHJ1Y3QgZGV2c3cgKmR2OworCWNoYXIg KmNwOworCWNvbnN0IGNoYXIgKm5wOworCWludCBpOworCisJLyogbWluaW11bSBsZW5ndGggY2hl Y2sgKi8KKwlpZiAoc3RybGVuKGRldnNwZWMpIDwgMikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJ LyogbG9vayBmb3IgYSBkZXZpY2UgdGhhdCBtYXRjaGVzICovCisJZm9yIChpID0gMDsgYmFja2Vu ZF9kZXZzd1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJZHYgPSBiYWNrZW5kX2RldnN3W2ldOworCQlp ZiAoIXN0cm5jbXAoZGV2c3BlYywgZHYtPmR2X25hbWUsIHN0cmxlbihkdi0+ZHZfbmFtZSkpKQor CQkJYnJlYWs7CisJfQorCWlmIChiYWNrZW5kX2RldnN3W2ldID09IE5VTEwpIHsKKwkJcmV0dXJu IChFTk9FTlQpOworICAgICAgICB9CisKKwlucCA9IGRldnNwZWMgKyBzdHJsZW4oZHYtPmR2X25h bWUpOworCisjaWZkZWYgRUZJX1pGU19CT09UCisJaWYgKGR2LT5kdl90eXBlID09IERFVlRfWkZT KSB7CisJCWludCBlcnI7CisKKwkJaWRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZk ZXNjKSk7CisJCWlmIChpZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJZXJy ID0gemZzX3BhcnNlZGV2KChzdHJ1Y3QgemZzX2RldmRlc2MqKWlkZXYsIG5wLCBwYXRoKTsKKwkJ aWYgKGVyciAhPSAwKSB7CisJCQlmcmVlKGlkZXYpOworCQkJcmV0dXJuIChlcnIpOworCQl9CisJ CSpkZXYgPSBpZGV2OworCQljcCA9IHN0cmNocihucCArIDEsICc6Jyk7CisJfSBlbHNlCisjZW5k aWYKKwl7CisJCWlkZXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZkZXNjKSk7CisJCWlmIChp ZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJaWRldi0+ZF9kZXYgPSBkdjsK KwkJaWRldi0+ZF90eXBlID0gZHYtPmR2X3R5cGU7CisJCWlkZXYtPmRfdW5pdCA9IC0xOworCQlp ZiAoKm5wICE9ICdcMCcgJiYgKm5wICE9ICc6JykgeworCQkJaWRldi0+ZF91bml0ID0gc3RydG9s KG5wLCAmY3AsIDApOworCQkJaWYgKGNwID09IG5wKSB7CisJCQkJaWRldi0+ZF91bml0ID0gLTE7 CisJCQkJZnJlZShpZGV2KTsKKwkJCQlyZXR1cm4gKEVVTklUKTsKKwkJCX0KKwkJfQorCX0KKwor CWlmICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJzonKSB7CisJCWZyZWUoaWRldik7CisJCXJldHVy biAoRUlOVkFMKTsKKwl9CisKKwlpZiAocGF0aCAhPSBOVUxMKQorCQkqcGF0aCA9ICgqY3AgPT0g MCkgPyBjcCA6IGNwICsgMTsKKwlpZiAoZGV2ICE9IE5VTEwpCisJCSpkZXYgPSBpZGV2OworCWVs c2UKKwkJZnJlZShpZGV2KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitiYWNrZW5k X2dldGRldih2b2lkICoqdmRldiwgY29uc3QgY2hhciAqZGV2c3BlYywgY29uc3QgY2hhciAqKnBh dGgpCit7CisJc3RydWN0IGRldmRlc2MgKipkZXYgPSAoc3RydWN0IGRldmRlc2MgKiopdmRldjsK KwlpbnQgcnY7CisKKwkvKgorCSAqIElmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgcGF0 aCBhbmQgbm8gZGV2aWNlLCB0aGVuCisJICogdXNlIHRoZSBjdXJyZW50IGRldmljZSBpbnN0ZWFk LgorCSAqLworCWlmIChkZXZzcGVjID09IE5VTEwgfHwgKmRldnNwZWMgPT0gJy8nIHx8ICFzdHJj aHIoZGV2c3BlYywgJzonKSkgeworCQlydiA9IGJhY2tlbmRfcGFyc2VkZXYoZGV2LCBnZXRlbnYo ImN1cnJkZXYiKSwgTlVMTCk7CisJCWlmIChydiA9PSAwICYmIHBhdGggIT0gTlVMTCkKKwkJCSpw YXRoID0gZGV2c3BlYzsKKwkJcmV0dXJuIChydik7CisJfQorCisJLyogUGFyc2UgdGhlIGRldmlj ZSBuYW1lIG9mZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZzcGVjLiAqLworCXJldHVybiAoYmFj a2VuZF9wYXJzZWRldihkZXYsIGRldnNwZWMsIHBhdGgpKTsKK30KKworc3RhdGljIHZvaWQKK2lu aXQodm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOwor CXVfaW50IHVuaXQ7CisgICAgICAgIGludCBpOworCXN0cnVjdCBkZXZzdyAqZGV2OworCXVpbnQ2 NF90IHBvb2xfZ3VpZDsKKyAgICAgICAgaW50ICgqb2xkX2dldGRldikodm9pZCAqKiwgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICoqKSA9CisgICAgICAgICAgYXJjaHN3LmFyY2hfZ2V0ZGV2Owor CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gYmFja2VuZF9nZXRkZXY7CisjaWZkZWYgRUZJX1pGU19C T09UCisJLyogTm90ZSB0aGlzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgWkZTIGluaXQuICovCisJ YXJjaHN3LmFyY2hfemZzX3Byb2JlID0gZWZpX3pmc19wcm9iZTsKKyNlbmRpZgorCisgICAgICAg IC8qIEluaXRpYWxpemUgYWxsIHRoZSBiYWNrZW5kIGRyaXZlcnMgKi8KKwlmb3IgKGkgPSAwOyBi YWNrZW5kX2RldnN3W2ldICE9IE5VTEw7IGkrKykgeworCQlpZiAoYmFja2VuZF9kZXZzd1tpXS0+ ZHZfaW5pdCAhPSBOVUxMKQorCQkJKGJhY2tlbmRfZGV2c3dbaV0tPmR2X2luaXQpKCk7CisgICAg ICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVyZmFjZXMg dG8gYWxsIGVmaXBhcnQgZGV2aWNlcyAqLworCXVuaXQgPSAwOworCWggPSBlZmlfZmluZF9oYW5k bGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmlu ZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXN0cnVjdCBkZXZkZXNjICpjdXJyZGV2 OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRldmRl c2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChjdXJyZGV2ID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGlmIChlZmlfaGFuZGxlX2xvb2t1cChoLCAmZGV2LCAmdW5pdCwgJnBvb2xfZ3VpZCkg IT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworCQljdXJyZGV2 LT5kX2RldiA9IGRldjsKKwkJY3VycmRldi0+ZF91bml0ID0gdW5pdDsKKwkJY3VycmRldi0+ZF9v cGVuZGF0YSA9IE5VTEw7CisJCWN1cnJkZXYtPmRfdHlwZSA9IGN1cnJkZXYtPmRfZGV2LT5kdl90 eXBlOworCisgICAgICAgICAgICAgICAgc3RhdHVzID0gYmluZF9pZmFjZShoLCBjdXJyZGV2KTsK KworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSAmJiBzdGF0dXMgIT0gRUZJ X1VOU1VQUE9SVEVEICYmCisgICAgICAgICAgICAgICAgICAgc3RhdHVzICE9IEVGSV9BQ0NFU1Nf REVOSUVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0 YWNoIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIGVmaXBhcnQldSAoJWxkKVxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVy ZmFjZSB0byBhbGwgWkZTIGRldmljZXMgKi8KKyNpZmRlZiBFRklfWkZTX0JPT1QKKwl1bml0ID0g MDsKKwloID0gZWZpX2ZpbmRfaGFuZGxlKCZ6ZnNfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9 IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJnpmc19kZXYsICsraSkpIHsKKwkJc3RydWN0IHpm c19kZXZkZXNjICpjdXJyZGV2OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmRl diA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZWZpX2hhbmRsZV9sb29rdXAoaCwgJmRl diwgJnVuaXQsICZwb29sX2d1aWQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZy ZWUoY3VycmRldik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICB9CisKKwkJY3VycmRldi0+ZF9kZXYgPSBkZXY7CisJCWN1cnJkZXYtPmRfdW5pdCA9 IHVuaXQ7CisJCWN1cnJkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCQljdXJyZGV2LT5kX3R5cGUg PSBjdXJyZGV2LT5kX2Rldi0+ZHZfdHlwZTsKKyAgICAgICAgICAgICAgICBjdXJyZGV2LT5wb29s X2d1aWQgPSBwb29sX2d1aWQ7CisgICAgICAgICAgICAgICAgY3VycmRldi0+cm9vdF9ndWlkID0g MDsKKworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGJpbmRfaWZhY2UoaCwgKHN0cnVjdCBkZXZk ZXNjKiljdXJyZGV2KTsKKworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkg eworICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0YWNoIGZpbGVzeXN0ZW0g aW50ZXJmYWNlIHRvIHpmcyV1ICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVu aXQsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmCisgICAgICAgIGFyY2hzdy5hcmNoX2dldGRldiA9IG9sZF9nZXRkZXY7Cit9CisK K2NvbnN0IGVmaV9kcml2ZXJfdCBmc19kcml2ZXIgPQoreworCS5uYW1lID0gIkZTIEJhY2tlbmQi LAorCS5pbml0ID0gaW5pdCwKK307CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZp bGliLmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKaW5kZXggMDljY2MyZjM2NDcuLjE1 ZDRiNDg3ZDQwIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKKysrIHN5 cy9ib290L2VmaS9pbmNsdWRlL2VmaWxpYi5oCkBAIC0zMSwyMiArMzEsMjYgQEAKICNkZWZpbmUJ X0xPQURFUl9FRklMSUJfSAogCiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+ CiAKIGV4dGVybiBFRklfSEFORExFCQlJSDsKLWV4dGVybiBFRklfU1lTVEVNX1RBQkxFCQkqU1Q7 CitleHRlcm4gRUZJX1NZU1RFTV9UQUJMRQkqU1Q7CiBleHRlcm4gRUZJX0JPT1RfU0VSVklDRVMJ KkJTOwogZXh0ZXJuIEVGSV9SVU5USU1FX1NFUlZJQ0VTCSpSUzsKIAotZXh0ZXJuIHN0cnVjdCBk ZXZzdyBlZmlwYXJ0X2RldjsKK2V4dGVybiBzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2OwogZXh0ZXJu IHN0cnVjdCBkZXZzdyBlZmluZXRfZGV2OworZXh0ZXJuIHN0cnVjdCBmc19vcHMgZWZpZnNfZnNv cHM7CiBleHRlcm4gc3RydWN0IG5ldGlmX2RyaXZlciBlZmluZXRpZjsKIAogdm9pZCAqZWZpX2dl dF90YWJsZShFRklfR1VJRCAqdGJsKTsKIAogaW50IGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN0cnVj dCBkZXZzdyAqLCBFRklfSEFORExFICosIEVGSV9IQU5ETEUgKiwgaW50KTsKK2ludCBlZmlfcmVn aXN0ZXJfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBFRklfSEFORExFLCBFRklfSEFORExFKTsKIEVG SV9IQU5ETEUgZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBpbnQpOwogaW50IGVmaV9o YW5kbGVfbG9va3VwKEVGSV9IQU5ETEUsIHN0cnVjdCBkZXZzdyAqKiwgaW50ICosICB1aW50NjRf dCAqKTsKIGludCBlZmlfaGFuZGxlX3VwZGF0ZV9kZXYoRUZJX0hBTkRMRSwgc3RydWN0IGRldnN3 ICosIGludCwgdWludDY0X3QpOworaW50IGVmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExF KTsKIAogRUZJX0RFVklDRV9QQVRIICplZmlfbG9va3VwX2ltYWdlX2RldnBhdGgoRUZJX0hBTkRM RSk7CiBFRklfREVWSUNFX1BBVEggKmVmaV9sb29rdXBfZGV2cGF0aChFRklfSEFORExFKTsKQEAg LTU3LDYgKzYxLDcgQEAgQ0hBUjE2ICplZmlfZGV2cGF0aF9uYW1lKEVGSV9ERVZJQ0VfUEFUSCAq KTsKIHZvaWQgZWZpX2ZyZWVfZGV2cGF0aF9uYW1lKENIQVIxNiAqKTsKIAogaW50IGVmaV9zdGF0 dXNfdG9fZXJybm8oRUZJX1NUQVRVUyk7CitFRklfU1RBVFVTIGVycm5vX3RvX2VmaV9zdGF0dXMo aW50IGVycm5vKTsKIAogdm9pZCBlZmlfdGltZV9pbml0KHZvaWQpOwogdm9pZCBlZmlfdGltZV9m aW5pKHZvaWQpOwpAQCAtNjUsNCArNzAsNyBAQCBFRklfU1RBVFVTIG1haW4oaW50IGFyZ2MsIENI QVIxNiAqYXJndltdKTsKIHZvaWQgZXhpdChFRklfU1RBVFVTIHN0YXR1cyk7CiB2b2lkIGRlbGF5 KGludCB1c2Vjcyk7CiAKK3RpbWVfdCBmcm9tX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSk7 Cit2b2lkIHRvX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSwgdGltZV90IHRpbWUpOworCiAj ZW5kaWYJLyogX0xPQURFUl9FRklMSUJfSCAqLwpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNs dWRlL2VmaXByb3QuaCBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKaW5kZXggMjhjZWM1 OTkxZTMuLjIyMjE1Nzc3Y2FiIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpcHJv dC5oCisrKyBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKQEAgLTI3LDYgKzI3LDggQEAg UmV2aXNpb24gSGlzdG9yeQogCiAtLSovCiAKKyNpbmNsdWRlIDxlZmlkZWYuaD4KKwogLy8KIC8v IERldmljZSBQYXRoIHByb3RvY29sCiAvLwpAQCAtMzA3LDkgKzMwOSw5IEBAIHR5cGVkZWYgc3Ry dWN0IHsKIC8vCiAvLyBUaGUgRmlsZU5hbWUgZmllbGQgb2YgdGhlIEVGSV9GSUxFX0lORk8gZGF0 YSBzdHJ1Y3R1cmUgaXMgdmFyaWFibGUgbGVuZ3RoLgogLy8gV2hlbmV2ZXIgY29kZSBuZWVkcyB0 byBrbm93IHRoZSBzaXplIG9mIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBu ZWVkcyB0bwotLy8gYmUgdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhl IEZpbGVOYW1lIGZpZWxkLiAgVGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIGJlIHRoZSBzaXplIG9m IHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRob3V0IHRoZSBGaWxlTmFtZSBmaWVsZC4gIFRoZSBmb2xs b3dpbmcgbWFjcm8KIC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhv dyBiaWcgdGhlIEZpbGVOYW1lIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJl ZCB0byBtYWtlIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50 LiAKKy8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgRUZJX0ZJTEVfSU5GTyBkYXRhIHN0 cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4KIC8vCiAKICNkZWZpbmUgU0laRV9PRl9FRklfRklMRV9J TkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfSU5GTyxGaWxlTmFtZSkKQEAgLTMyOSw5ICsz MzEsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CiAvLwogLy8gVGhlIFZvbHVtZUxhYmVsIGZpZWxkIG9m IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBpcyB2YXJpYWJsZSBsZW5n dGguCiAvLyBXaGVuZXZlciBjb2RlIG5lZWRzIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIEVGSV9G SUxFX1NZU1RFTV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBuZWVkcwotLy8gdG8gYmUgdGhlIHNp emUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhlIFZvbHVtZUxhYmxlIGZpZWxkLiAg VGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBkYXRhIHN0cnVj dHVyZSB3aXRob3V0IHRoZSBWb2x1bWVMYWJsZSBmaWVsZC4gIFRoZSBmb2xsb3dpbmcgbWFjcm8K IC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhvdyBiaWcgdGhlIFZv bHVtZUxhYmxlIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtl IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4g CisvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIG1ha2UgdGhlIEVGSV9GSUxFX1NZU1RFTV9JTkZPIGRh dGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50LgogLy8KIAogI2RlZmluZSBTSVpFX09GX0VGSV9G SUxFX1NZU1RFTV9JTkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfU1lTVEVNX0lORk8sVm9s dW1lTGFiZWwpCkBAIC00MTEsNyArNDEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIEVGSV9E RVZJQ0VfSU8gICAgICAgICAgICAgICAgICAgV3JpdGU7CiB9IEVGSV9JT19BQ0NFU1M7CiAKLXR5 cGVkZWYgCit0eXBlZGVmCiBFRklfU1RBVFVTCiAoRUZJQVBJICpFRklfUENJX0RFVklDRV9QQVRI KSAoCiAgICAgSU4gc3RydWN0IF9FRklfREVWSUNFX0lPX0lOVEVSRkFDRSAgKlRoaXMsCkBAIC01 NTUsNCArNTU3LDQ3IEBAIHR5cGVkZWYgc3RydWN0IF9FRklfVU5JQ09ERV9DT0xMQVRJT05fSU5U RVJGQUNFIHsKICAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqU3VwcG9y dGVkTGFuZ3VhZ2VzOwogfSBFRklfVU5JQ09ERV9DT0xMQVRJT05fSU5URVJGQUNFOwogCisvLwor Ly8gRHJpdmVyIEJpbmRpbmcgcHJvdG9jb2wKKy8vCisKKyNkZWZpbmUgRFJJVkVSX0JJTkRJTkdf UFJPVE9DT0wgXAorICB7IDB4MThhMDMxYWIsIDB4YjQ0MywgMHg0ZDFhLCB7MHhhNSwgMHhjMCwg MHgwYywgMHgwOSwgMHgyNiwgMHgxZSwgMHg5ZiwgMHg3MX0gfQorCitJTlRFUkZBQ0VfREVDTChf RUZJX0RSSVZFUl9CSU5ESU5HKTsKKwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJ X0RSSVZFUl9CSU5ESU5HX1NVUFBPUlRFRCkgKAorICAgIElOIHN0cnVjdCBfRUZJX0RSSVZFUl9C SU5ESU5HICpUaGlzLAorICAgIElOIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSwKKyAgICBJ TiBFRklfREVWSUNFX1BBVEggKlJlbWFpbmluZ1BhdGgKKyAgICApOworCit0eXBlZGVmCitFRklf U1RBVFVTCisoRUZJQVBJICpFRklfRFJJVkVSX0JJTkRJTkdfU1RBUlQpICgKKyAgICBJTiBzdHJ1 Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklfSEFORExFIENvbnRyb2xs ZXJIYW5kbGUsCisgICAgSU4gRUZJX0RFVklDRV9QQVRIICpSZW1haW5pbmdQYXRoCisgICAgKTsK KwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJX0RSSVZFUl9CSU5ESU5HX1NUT1Ap ICgKKyAgICBJTiBzdHJ1Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklf SEFORExFIENvbnRyb2xsZXJIYW5kbGUsCisgICAgSU4gVUlOVE4gTnVtYmVyT2ZDaGlsZHJlbiwK KyAgICBJTiBFRklfSEFORExFICpDaGlsZEhhbmRsZUJ1ZmZlcgorICAgICk7CisKK3R5cGVkZWYg c3RydWN0IF9FRklfRFJJVkVSX0JJTkRJTkcgeworICBFRklfRFJJVkVSX0JJTkRJTkdfU1VQUE9S VEVEIFN1cHBvcnRlZDsKKyAgRUZJX0RSSVZFUl9CSU5ESU5HX1NUQVJUIFN0YXJ0OworICBFRklf RFJJVkVSX0JJTkRJTkdfU1RPUCBTdG9wOworICBVSU5UMzIgVmVyc2lvbjsKKyAgRUZJX0hBTkRM RSBJbWFnZUhhbmRsZTsKKyAgRUZJX0hBTkRMRSBEcml2ZXJCaW5kaW5nSGFuZGxlOworfSBFRklf RFJJVkVSX0JJTkRJTkc7CisKICNlbmRpZgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNsdWRl L3N0cmluZzE2Lmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWU0ZjljMWVmMWEKLS0tIC9kZXYvbnVsbAorKysg c3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApAQCAtMCwwICsxLDQ1IEBACisvKi0KKyAq IENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor ICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX1NUUklORzE2X0hfCisjZGVmaW5lIF9T VFJJTkcxNl9IXworCisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8q CisgKiBUaGVzZSBhcmUgMTYtYml0IHZhcmlhbnRzIG9mIHN0cmluZyxoIGZ1bmN0aW9ucyBmb3Ig dXNlIHdpdGggRUZJIGNvZGUuCisgKi8KKworZXh0ZXJuIHNpemVfdCBzdHJsZW4xNihjb25zdCBD SEFSMTYgKnN0cik7CitleHRlcm4gQ0hBUjE2KiBzdHJjcHkxNihDSEFSMTYgKmRzdCwgY29uc3Qg Q0hBUjE2ICpzcmMpOworZXh0ZXJuIENIQVIxNiogc3RwY3B5MTYoQ0hBUjE2ICpkc3QsIGNvbnN0 IENIQVIxNiAqc3JjKTsKK2V4dGVybiBDSEFSMTYqIHN0cmNweV90b18xNihDSEFSMTYgKmRzdCwg Y29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiBjaGFyKiBzdHJjcHlfZnJvbV8xNihjaGFyICpkc3Qs IGNvbnN0IENIQVIxNiAqc3JjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xp YmVmaS9NYWtlZmlsZSBzeXMvYm9vdC9lZmkvbGliZWZpL01ha2VmaWxlCmluZGV4IGQ5NjE5YmVm ODlkLi44Njg0NDAzY2QxMSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUK KysrIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUKQEAgLTEwLDggKzEwLDggQEAgTElCPQll ZmkKIElOVEVSTkFMTElCPQogV0FSTlM/PQkyCiAKLVNSQ1M9CWRlbGF5LmMgZGV2cGF0aC5jIGVm aV9jb25zb2xlLmMgZWZpbmV0LmMgZWZpcGFydC5jIGVycm5vLmMgXAotCWhhbmRsZXMuYyBsaWJl ZmkuYworU1JDUz0JZGVsYXkuYyBkZXZwYXRoLmMgZWZpX2NvbnNvbGUuYyBlZmlmcy5jIGVmaW5l dC5jIGVudi5jIGVycm5vLmMgXAorCWhhbmRsZXMuYyBsaWJlZmkuYyBzdHJpbmcxNi5jCiAKIC5p ZiAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCAke01BQ0hJTkVfQ1BVQVJDSH0gPT0g ImkzODYiCiBTUkNTKz0JdGltZS5jCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlm cy5jIHN5cy9ib290L2VmaS9saWJlZmkvZWZpZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZGQ5ZmIwZjBiNDEKLS0tIC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZp L2xpYmVmaS9lZmlmcy5jCkBAIC0wLDAgKzEsNDY0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE JAorICovCisKKyNpbmNsdWRlIDxlZmkuaD4KKyNpbmNsdWRlIDxlZmlsaWIuaD4KKyNpbmNsdWRl IDxlZmlwcm90Lmg+CisjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp bmNsdWRlIDxib290c3RyYXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgorCitzdGF0aWMgRUZJ X0dVSUQgRmlsZUluZm9HVUlEID0gRUZJX0ZJTEVfSU5GT19JRDs7CitzdGF0aWMgRUZJX0dVSUQg U2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCA9IFNJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NP TDsKK3N0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9jb2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9D T0w7CitzdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdVSUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NP TDsKKworc3RhdGljIGludCBlZmlmc19vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBvcGVu X2ZpbGUgKmYpOworc3RhdGljIGludCBlZmlmc193cml0ZShzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2 b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKnJlc2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNf Y2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZik7CitzdGF0aWMgaW50IGVmaWZzX3JlYWQoc3RydWN0 IG9wZW5fZmlsZSAqZiwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZXNpZCk7Citz dGF0aWMgb2ZmX3QgZWZpZnNfc2VlayhzdHJ1Y3Qgb3Blbl9maWxlICpmLCBvZmZfdCBvZmZzZXQs IGludCB3aGVyZSk7CitzdGF0aWMgaW50IGVmaWZzX3N0YXQoc3RydWN0IG9wZW5fZmlsZSAqZiwg c3RydWN0IHN0YXQgKnNiKTsKK3N0YXRpYyBpbnQgZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9m aWxlICpmLCBzdHJ1Y3QgZGlyZW50ICpkKTsKKworc3RhdGljIGludCBlZmlmc19kZXZfaW5pdCh2 b2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X3N0cmF0ZWd5KHZvaWQgKiwgaW50LCBkYWRkcl90 LCBzaXplX3QsIHNpemVfdCwgY2hhciAqLCBzaXplX3QgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rl dl9vcGVuKHN0cnVjdCBvcGVuX2ZpbGUgKiwgLi4uKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X2Ns b3NlKHN0cnVjdCBvcGVuX2ZpbGUgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rldl9wcmludChpbnQp OworCitzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2ID0geworCS5kdl9uYW1lID0gIkVGSSIsCisJLmR2 X3R5cGUgPSBERVZUX0VGSSwKKwkuZHZfaW5pdCA9IGVmaWZzX2Rldl9pbml0LAorCS5kdl9zdHJh dGVneSA9IGVmaWZzX2Rldl9zdHJhdGVneSwKKwkuZHZfb3BlbiA9IGVmaWZzX2Rldl9vcGVuLAor CS5kdl9jbG9zZSA9IGVmaWZzX2Rldl9jbG9zZSwKKwkuZHZfaW9jdGwgPSBub2lvY3RsLAorCS5k dl9wcmludCA9IGVmaWZzX2Rldl9wcmludCwKKwkuZHZfY2xlYW51cCA9IE5VTEwKK307CisKK3N0 cnVjdCBmc19vcHMgZWZpZnNfZnNvcHMgPSB7CisJIkVGSSIsCisJZWZpZnNfb3BlbiwKKwllZmlm c19jbG9zZSwKKwllZmlmc19yZWFkLAorCWVmaWZzX3dyaXRlLAorCWVmaWZzX3NlZWssCisJZWZp ZnNfc3RhdCwKKwllZmlmc19yZWFkZGlyCit9OworCitzdGF0aWMgaW50CitlZmlmc19kZXZfaW5p dCh2b2lkKQoreworCUVGSV9IQU5ETEUgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1czsKKwlVSU5U TiBzejsKKwl1X2ludCBuLCBuaW4sIHVuaXQ7CisJaW50IGVycjsKKworCXN6ID0gMDsKKwloaW4g PSBOVUxMOworCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwgJlNpbXBsZUZp bGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwgJnN6LCAwKTsKKwlpZiAoc3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7CisJCWhp biA9IChFRklfSEFORExFICopbWFsbG9jKHN6KTsKKwkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRs ZShCeVByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv Y29sR1VJRCwgMCwgJnN6LCBoaW4pOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQlmcmVl KGhpbik7CisJfQorCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChlZmlfc3RhdHVz X3RvX2Vycm5vKHN0YXR1cykpOworCisJLyogRmlsdGVyIGhhbmRsZXMgdG8gb25seSBpbmNsdWRl IEZyZWVCU0QgcGFydGl0aW9ucy4gKi8KKwluaW4gPSBzeiAvIHNpemVvZihFRklfSEFORExFKTsK Kwl1bml0ID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBuaW47IG4rKykgeworCQlzdGF0dXMgPSBC Uy0+T3BlblByb3RvY29sKGhpbltuXSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBJSCwgTlVMTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RP Q09MX1RFU1RfUFJPVE9DT0wpOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQljb250aW51 ZTsKKworICAgICAgICAgICAgICAgIGVmaV9oYW5kbGVfdXBkYXRlX2RldihoaW5bbl0sICZlZmlm c19kZXYsIHVuaXQrKywgMCk7CisJfQorCisJZnJlZShoaW4pOworCXJldHVybiAoZXJyKTsKK30K KworCitzdGF0aWMgaW50CitlZmlmc19kZXZfcHJpbnQoaW50IHZlcmJvc2UpCit7CisJY2hhciBs aW5lWzgwXTsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoOworICAgICAgICBFRklf QkxPQ0tfSU8gKmJsa2lvOworCUVGSV9IQU5ETEUgaCwgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1 czsKKwl1X2ludCB1bml0LCBuOworCisJZm9yICh1bml0ID0gMCwgaCA9IGVmaV9maW5kX2hhbmRs ZSgmZWZpZnNfZGV2LCAwKTsKKwkgICAgaCAhPSBOVUxMOyBoID0gZWZpX2ZpbmRfaGFuZGxlKCZl Zmlmc19kZXYsICsrdW5pdCkpIHsKKwkJc3ByaW50ZihsaW5lLCAiICAgICVzJWQ6IiwgZWZpZnNf ZGV2LmR2X25hbWUsIHVuaXQpOworCQlwYWdlcl9vdXRwdXQobGluZSk7CisgICAgICAgICAgICAg ICAgcGFnZXJfb3V0cHV0KCIgICAgRUZJKFNJTVBMRV9GSUxFX1NZU1RFTSIpOworCisJCXN0YXR1 cyA9IEJTLT5IYW5kbGVQcm90b2NvbChoaW5bbl0sICZEZXZpY2VQYXRoR1VJRCwKKwkJICAgICh2 b2lkICoqKSZkZXZwYXRoKTsKKwkJaWYgKCFFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgcGFnZXJfb3V0cHV0KCIsIERFVklDRV9QQVRIIik7CisJCX0KKworCQlz dGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwK KwkJICAgICh2b2lkICoqKSZibGtpbyk7CisJCWlmICghRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHBhZ2VyX291dHB1dCgiLCBCTE9DS19JTyIpOworCQl9CisJ CXBhZ2VyX291dHB1dCgiKVxuIik7CisJfQorICAgICAgICByZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW50CitlZmlmc19kZXZfb3BlbihzdHJ1Y3Qgb3Blbl9maWxlICpmLCAuLi4pCit7CisJdmFf bGlzdCBhcmdzOworCXN0cnVjdCBkZXZkZXNjICpkZXY7CisJRUZJX0ZJTEVfSU9fSU5URVJGQUNF ICpmc2lmYWNlOworCUVGSV9IQU5ETEUgaDsKKwlFRklfU1RBVFVTIHN0YXR1czsKKworCXZhX3N0 YXJ0KGFyZ3MsIGYpOworCWRldiA9IHZhX2FyZyhhcmdzLCBzdHJ1Y3QgZGV2ZGVzYyopOworCXZh X2VuZChhcmdzKTsKKworCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaWZzX2RldiwgZGV2LT5kX3Vu aXQpOworCisJaWYgKGggPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisgICAgICAgIHN0 YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woaCwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQs CisgICAgICAgICAgICAodm9pZCoqKSZmc2lmYWNlLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9D T0xfR0VUX1BST1RPQ09MKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKwkJ cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICB9CisKKyAgICAg ICAgZGV2LT5kX29wZW5kYXRhID0gZnNpZmFjZTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg aW50CitlZmlmc19kZXZfY2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZikKK3sKKwlzdHJ1Y3QgZGV2 ZGVzYyAqZGV2OworCUVGSV9IQU5ETEUgaDsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisK KwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZkYXRhKTsKKwloID0gZWZpX2ZpbmRf aGFuZGxlKCZlZmlmc19kZXYsIGRldi0+ZF91bml0KTsKKworCWlmIChoID09IE5VTEwpCisJCXJl dHVybiAoRUlOVkFMKTsKKworCWlmIChkZXYtPmRfb3BlbmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJu IChFSU5WQUwpOworCisgICAgICAgIHN0YXR1cyA9IEJTLT5DbG9zZVByb3RvY29sKGgsICZTaW1w bGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEVGSV9F UlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisK KwlkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCXJldHVybiAoMCk7Cit9CisKKworLyogUmF3IEkv TyBpc24ndCBzdXBwb3J0ZWQgb24gRUZJIEZTIGRldmljZXMsIGFzIHRoZXkgdGFsayB0aHJvdWdo CisgKiBTSU1QTEVfRklMRV9TWVNURU1fSU5URVJGQUNFLgorICovCitzdGF0aWMgaW50CitlZmlm c19kZXZfc3RyYXRlZ3kodm9pZCAqZGV2ZGF0YSBfX3VudXNlZCwgaW50IHJ3IF9fdW51c2VkLCBk YWRkcl90IGJsayBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LCBz aXplX3Qgc2l6ZSBfX3VudXNlZCwgY2hhciAqYnVmIF9fdW51c2VkLAorICAgICAgICAgICAgICAg ICAgIHNpemVfdCAqcnNpemUgX191bnVzZWQpCit7CisgICAgICAgIHByaW50ZigiUmF3IEkvTyBu b3Qgc3VwcG9ydGVkIG9uIEVGSSBGUyBpbnRlcmZhY2VcbiIpOworCXJldHVybiBFTk9UU1VQOwor fQorCisvKgorICogT3BlbiBhIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2VmaWZzX29wZW4oY29u c3QgY2hhciAqdXBhdGgsIHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisJc3RydWN0IGRldmRlc2Mg KmRldjsKKwlFRklfRklMRV9JT19JTlRFUkZBQ0UgKmZzaWZhY2U7CisJRUZJX0ZJTEVfSEFORExF IHJvb3Q7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBDSEFSMTYgcGF0aFtz dHJsZW4odXBhdGgpICsgMV07CisKKwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZk YXRhKTsKKyAgICAgICAgZnNpZmFjZSA9IGRldi0+ZF9vcGVuZGF0YTsKKworICAgICAgICBpZiAo IXN0cmNtcCh1cGF0aCwgIiIpIHx8ICFzdHJjbXAodXBhdGgsICIvIikpIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gKGZzaWZhY2UtPk9wZW5Wb2x1bWUoZnNpZmFjZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9GSUxFX0hBTkRMRSopJihmLT5mX2Zz ZGF0YSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBmc2lm YWNlLT5PcGVuVm9sdW1lKGZzaWZhY2UsICZyb290KTsKKworICAgICAgICAgICAgICAgIGlmIChF RklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlZmlf c3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIHN0cmNweV90b18xNihwYXRoLCB1cGF0aCk7CisgICAgICAgICAgICAgICAgc3RhdHVz ID0gcm9vdC0+T3Blbihyb290LCAoRUZJX0ZJTEVfSEFORExFKikmKGYtPmZfZnNkYXRhKSwgcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVB RCwgMCk7CisKKyAgICAgICAgICAgICAgICByb290LT5DbG9zZShyb290KTsKKworICAgICAgICAg ICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQK K2VmaWZzX2Nsb3NlKHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisgICAgICAgIEVGSV9GSUxFX0hB TkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgRUZJX1NU QVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+Q2xvc2UoZmlsZSk7CisKKyAg ICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJy bm8oc3RhdHVzKSk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWZp ZnNfcmVhZChzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIHNp emVfdCAqcmVzaWQgLyogb3V0ICovKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9 IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2RhdGE7CisgICAgICAgIFVJTlROIHJlYWRzaXplID0g c2l6ZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmls ZS0+UmVhZChmaWxlLCAmcmVhZHNpemUsIHN0YXJ0KTsKKworICAgICAgICBpZiAoRUZJX0VSUk9S KHN0YXR1cykpCisJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKworCWlm IChyZXNpZCkKKwkJKnJlc2lkID0gc2l6ZSAtIHJlYWRzaXplOworCisJcmV0dXJuICgwKTsKK30K Kworc3RhdGljIGludAorZWZpZnNfd3JpdGUoc3RydWN0IG9wZW5fZmlsZSAqZiwgdm9pZCAqc3Rh cnQsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgc2l6ZV90ICpyZXNpZCAvKiBvdXQgKi8pCit7 CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2Zz ZGF0YTsKKyAgICAgICAgVUlOVE4gd3JpdGVzaXplID0gc2l6ZTsKKyAgICAgICAgRUZJX1NUQVRV UyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+V3JpdGUoZmlsZSwgJndyaXRlc2l6 ZSwgc3RhcnQpOworCisgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChl Zmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworCisJaWYgKHJlc2lkKQorCQkqcmVzaWQgPSBz aXplIC0gd3JpdGVzaXplOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIG9mZl90CitlZmlm c19zZWVrKHN0cnVjdCBvcGVuX2ZpbGUgKmYsIG9mZl90IG9mZnNldCwgaW50IHdoZXJlKQorewor ICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh dGE7CisgICAgICAgIFVJTlQ2NCBwb3M7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworCisJ c3dpdGNoICh3aGVyZSkgeworCWNhc2UgU0VFS19TRVQ6CisgICAgICAgICAgICAgICAgc3RhdHVz ID0gZmlsZS0+U2V0UG9zaXRpb24oZmlsZSwgb2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIGlm IChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5v ID0gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisJCWJyZWFrOworCWNhc2UgU0VFS19D VVI6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0UG9zaXRpb24oZmlsZSwgJnBv cyk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykp OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIHBvcyAr IG9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0 YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg ICAgIH0KKworCQlicmVhazsKKwljYXNlIFNFRUtfRU5EOgorICAgICAgICAgICAgICAgIHN0YXR1 cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIDB4ZmZmZmZmZmZmZmZmZmZmZik7CisKKyAgICAg ICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKwlkZWZhdWx0Ogor CQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisgICAgICAgIHN0YXR1cyA9 IGZpbGUtPkdldFBvc2l0aW9uKGZpbGUsICZwb3MpOworCisgICAgICAgIGlmIChzdGF0dXMgIT0g RUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vy cm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJ cmV0dXJuIChwb3MpOworfQorCisvKiBTSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgaXMgZ2Vh cmVkIHRvd2FyZHMgRkFULCBzbyB3ZSBjYW4ndAorICogcmVwcm9kdWNlIHN0YXQgd2l0aCBhYnNv bHV0ZSBmaWRlbGl0eS4KKyAqLworc3RhdGljIGludAorZWZpZnNfc3RhdChzdHJ1Y3Qgb3Blbl9m aWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpCit7CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxl OworICAgICAgICBVSU5UTiBzaXplID0gMDsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87 OworICAgICAgICBFRklfU1RBVFVTIHN0YXR1czsKKworICAgICAgICBmaWxlID0gKEVGSV9GSUxF X0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0SW5mbyhmaWxl LCAmRmlsZUluZm9HVUlELCAmc2l6ZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBF RklfQlVGRkVSX1RPT19TTUFMTCkgeworICAgICAgICAgICAgICAgIGVycm5vID0gKGVmaV9zdGF0 dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisKKyAgICAgICAgZmluZm8gPSBtYWxsb2Moc2l6ZSk7CisgICAgICAgIHN0YXR1cyA9IGZp bGUtPkdldEluZm8oZmlsZSwgJkZpbGVJbmZvR1VJRCwgJnNpemUsIGZpbmZvKTsKKworICAgICAg ICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSAo ZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKworICAgICAgICAvKiBXZSBjYW4ndCBwcm9wZXJseSBmaWxsIHRoZXNlIGlu Li4uICovCisgICAgICAgIHNiLT5zdF9pbm8gPSAwOworICAgICAgICBzYi0+c3RfbmxpbmsgPSAw OworICAgICAgICBzYi0+c3RfdWlkID0gMDsKKyAgICAgICAgc2ItPnN0X2dpZCA9IDA7CisgICAg ICAgIHNiLT5zdF9ibGtzaXplID0gNTEyOworICAgICAgICAvKiBCdWlsZCB0aGUgbW9kZSBmaWVs ZCAqLworICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX0RJUkVDVE9SWSkg eworICAgICAgICAgICAgICAgIHNiLT5zdF9tb2RlID0gU19JRkRJUjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBzYi0+c3RfbW9kZSA9IFNfSUZSRUc7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX01PREVfUkVBRCkgeworICAg ICAgICAgIHNiLT5zdF9tb2RlID0gU19JUlVTUiB8IFNfSVhVU1IgfCBTX0lSR1JQIHwKKyAgICAg ICAgICAgIFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USDsKKyAgICAgICAgfQorCisgICAgICAg IGlmIChmaW5mby0+QXR0cmlidXRlICYgRUZJX0ZJTEVfTU9ERV9SRUFEKSB7CisgICAgICAgICAg c2ItPnN0X21vZGUgPSBTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEg7CisgICAgICAgIH0KKyAg ICAgICAgLyogVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBzdXBwb3J0ZWQsIGRlcGVuZGluZyBvbiB0 aGUgRlMgZHJpdmVyICovCisgICAgICAgIHNiLT5zdF9ibG9ja3MgPSBmaW5mby0+UGh5c2ljYWxT aXplIC8gNTEyOworICAgICAgICAvKiBUaGVzZSBmaWVsZHMgd2UgY2FuIGdldCByaWdodCAqLwor ICAgICAgICBzYi0+c3Rfc2l6ZSA9IGZpbmZvLT5GaWxlU2l6ZTsKKyAgICAgICAgc2ItPnN0X2F0 aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5MYXN0QWNjZXNzVGltZSkpOworICAgICAgICBz Yi0+c3RfbXRpbWUgPSBmcm9tX2VmaV90aW1lKCYoZmluZm8tPk1vZGlmaWNhdGlvblRpbWUpKTsK KyAgICAgICAgc2ItPnN0X2N0aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5DcmVhdGVUaW1l KSk7CisKKyAgICAgICAgZnJlZShmaW5mbyk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwor c3RhdGljIGludAorZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3QgZGly ZW50ICpkKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZTsKKyAgICAgICAgVUlOVE4g c2l6ZSA9IDA7CisgICAgICAgIEVGSV9GSUxFX0lORk8gKmZpbmZvOzsKKyAgICAgICAgRUZJX1NU QVRVUyBzdGF0dXM7CisKKyAgICAgICAgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh dGE7CisgICAgICAgIHN0YXR1cyA9IGZpbGUtPlJlYWQoZmlsZSwgJnNpemUsIE5VTEwpOworCisg ICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKKyAgICAgICAgICAg ICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKEVOT0VOVCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5m byA9IG1hbGxvYyhzaXplKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+UmVhZChmaWxlLCAmc2l6 ZSwgZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV9mcm9tXzE2 KGQtPmRfbmFtZSwgZmluZm8tPkZpbGVOYW1lKTsKKyAgICAgICAgZC0+ZF9uYW1sZW4gPSBzdHJs ZW4oZC0+ZF9uYW1lKTsKKyAgICAgICAgZC0+ZF9yZWNsZW4gPSBzaXplb2Yoc3RydWN0IGRpcmVu dCk7CisgICAgICAgIC8qIFdlIGNhbid0IGZhaXRoZnVsbHkgcmVwcm9kdWNlIHRoaXMgZHVlIHRv IHRoZSBsaW1pdGF0aW9ucworICAgICAgICAgKiBvZiB0aGUgU0lNUExFX0ZJTEVfU1lTVEVNIGlu dGVyZmFjZSAqLworICAgICAgICBkLT5kX2ZpbGVubyA9IDA7CisKKyAgICAgICAgZnJlZShmaW5m byk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli ZWZpL2Vycm5vLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCmluZGV4IGZhYzkwM2ZhZjI3 Li4wZjM1NGMzZjNjOCAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvZXJybm8uYworKysg c3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCkBAIC0zMCw2ICszMCw2OSBAQCBfX0ZCU0RJRCgi JEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8ZWZpLmg+CiAjaW5jbHVkZSA8ZWZpbGliLmg+CiAKK0VG SV9TVEFUVVMKK2Vycm5vX3RvX2VmaV9zdGF0dXMoaW50IGVycm5vKQoreworICAgICAgICBFRklf U1RBVFVTIHN0YXR1czsKKworICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgIGNhc2Ug RVBFUk06CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT1ZFUkZMT1c6CisgICAgICAgICAg ICAgICAgc3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0RF VklDRV9FUlJPUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVJTlZB TDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RBTEU6CisgICAgICAgICAgICAg ICAgc3RhdHVzID0gRUZJX01FRElBX0NIQU5HRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBFTlhJTzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfTk9fTUVE SUE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFTk9FTlQ6CisgICAg ICAgICAgICAgICAgc3RhdHVzID0gRUZJX05PVF9GT1VORDsKKyAgICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICBjYXNlIEVOT01FTToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl IEVOT1RTVVA6CisgICAgICAgIGNhc2UgRU5PREVWOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9 IEVGSV9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl IEVOT1NQQzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfVk9MVU1FX0ZVTEw7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQUNDRVM6CisgICAgICAgICAgICAg ICAgc3RhdHVzID0gRUZJX1dSSVRFX1BST1RFQ1RFRDsKKyAgICAgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX1NVQ0NFU1M7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBzdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzdGF0dXMpOworfQorCiBpbnQKIGVmaV9zdGF0 dXNfdG9fZXJybm8oRUZJX1NUQVRVUyBzdGF0dXMpCiB7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZp L2xpYmVmaS9oYW5kbGVzLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5kbGVzLmMKaW5kZXggMWU0 ZWY2ZmZiZDUuLmMxMTgwODVjMWM5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5k bGVzLmMKKysrIHN5cy9ib290L2VmaS9saWJlZmkvaGFuZGxlcy5jCkBAIC00MSwyMSArNDEsMzYg QEAgc3RydWN0IGVudHJ5IHsKIHN0cnVjdCBlbnRyeSAqZW50cnk7CiBpbnQgbmVudHJpZXM7CiAK K3N0YXRpYyBpbnQKK2dldF9uZXh0X3VuaXQoc3RydWN0IGRldnN3ICpzdykKK3sKKyAgICAgICAg aW50IGksIGlkeDsKKworICAgICAgICBmb3IgKGkgPSAwLCBpZHggPSAwOyBpIDwgbmVudHJpZXM7 IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlbnRyeVtpXS5kZXYgPT0gc3cpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIHJldHVybiAoaWR4KTsKK30KKwogaW50CiBlZmlfcmVnaXN0ZXJfaGFuZGxlcyhz dHJ1Y3QgZGV2c3cgKnN3LCBFRklfSEFORExFICpoYW5kbGVzLAogICAgIEVGSV9IQU5ETEUgKmFs aWFzZXMsIGludCBjb3VudCkKIHsKIAlzaXplX3Qgc3o7Ci0JaW50IGlkeCwgdW5pdDsKKwlpbnQg aWR4LCB1bml0LCBpOwogCiAJaWR4ID0gbmVudHJpZXM7CiAJbmVudHJpZXMgKz0gY291bnQ7CiAJ c3ogPSBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50cnkpOworICAgICAgICB1bml0ID0gZ2V0 X25leHRfdW5pdChzdyk7CiAJZW50cnkgPSAoZW50cnkgPT0gTlVMTCkgPyBtYWxsb2Moc3opIDog cmVhbGxvYyhlbnRyeSwgc3opOwotCWZvciAodW5pdCA9IDA7IGlkeCA8IG5lbnRyaWVzOyBpZHgr KywgdW5pdCsrKSB7Ci0JCWVudHJ5W2lkeF0uaGFuZGxlID0gaGFuZGxlc1t1bml0XTsKKwlmb3Ig KGkgPSAwOyBpZHggPCBuZW50cmllczsgaWR4KyssIHVuaXQrKywgaSsrKSB7CisJCWVudHJ5W2lk eF0uaGFuZGxlID0gaGFuZGxlc1tpXTsKIAkJaWYgKGFsaWFzZXMgIT0gTlVMTCkKLQkJCWVudHJ5 W2lkeF0uYWxpYXMgPSBhbGlhc2VzW3VuaXRdOworCQkJZW50cnlbaWR4XS5hbGlhcyA9IGFsaWFz ZXNbaV07CiAJCWVsc2UKIAkJCWVudHJ5W2lkeF0uYWxpYXMgPSBOVUxMOwogCQllbnRyeVtpZHhd LmRldiA9IHN3OwpAQCAtNjQsNiArNzksMTYgQEAgZWZpX3JlZ2lzdGVyX2hhbmRsZXMoc3RydWN0 IGRldnN3ICpzdywgRUZJX0hBTkRMRSAqaGFuZGxlcywKIAlyZXR1cm4gKDApOwogfQogCitpbnQK K2VmaV9yZWdpc3Rlcl9oYW5kbGUoc3RydWN0IGRldnN3ICpzdywgRUZJX0hBTkRMRSBoYW5kbGUs IEVGSV9IQU5ETEUgYWxpYXMpCit7CisgICAgICAgIGlmIChhbGlhcyA9PSBOVUxMKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN3LCAmaGFuZGxlLCBOVUxM LCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWZpX3JlZ2lz dGVyX2hhbmRsZXMoc3csICZoYW5kbGUsICZhbGlhcywgMSk7CisgICAgICAgIH0KK30KKwogRUZJ X0hBTkRMRQogZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqZGV2LCBpbnQgdW5pdCkKIHsK QEAgLTExNiwzICsxNDEsMjkgQEAgZWZpX2hhbmRsZV91cGRhdGVfZGV2KEVGSV9IQU5ETEUgaCwg c3RydWN0IGRldnN3ICpkZXYsIGludCB1bml0LAogCiAJcmV0dXJuIChFTk9FTlQpOwogfQorCitp bnQKK2VmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExFIGgpCit7CisJaW50IGlkeDsKKwor ICAgICAgICAvKiBGaW5kIHRoZSBlbnRyeSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgbmVudHJp ZXM7IGlkeCsrKSB7CisJCWlmIChlbnRyeVtpZHhdLmhhbmRsZSAhPSBoKQorCQkJY29udGludWU7 CisJfQorCisgICAgICAgIGlmIChpZHggPj0gbmVudHJpZXMpCisgICAgICAgICAgICAgICAgcmV0 dXJuIChFTk9FTlQpOworICAgICAgICBlbHNlIGlmIChpZHggPT0gbmVudHJpZXMgLSAxKSB7Cisg ICAgICAgICAgICAgICAgbmVudHJpZXMtLTsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHJlYWxs b2MoZW50cnksIG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeSArIGlkeCwgZW50cnkgKyBpZHggKyAx LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGVudHJ5KSAqIChuZW50cmll cyAtIChpZHggKyAxKSkpOworICAgICAgICAgICAgICAgIG5lbnRyaWVzLS07CisgICAgICAgICAg ICAgICAgZW50cnkgPSByZWFsbG9jKGVudHJ5LCBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50 cnkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgc3lz L2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jIHN5cy9ib290L2VmaS9saWJlZmkvc3RyaW5nMTYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjk5ZDcyZGQwZjAKLS0t IC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jCkBAIC0wLDAgKzEs ODggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2IEVyaWMgTWNDb3JrbGUKKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgInN0cmluZzE2 LmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK3NpemVfdAorc3RybGVuMTYoY29uc3QgQ0hBUjE2 ICpzdHIpCit7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHN0cltp XSAhPSAwOyBpKyspOworCisgICAgICAgIHJldHVybiBpOworfQorCitDSEFSMTYgKgorc3RyY3B5 MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBzdHBjcHkxNihk c3QsIHNyYyk7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgorc3RwY3B5 MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBmb3IgKDsgKnNy YyAhPSAwOyBzcmMrKywgZHN0KyspIHsKKyAgICAgICAgICAgICAgICAqZHN0ID0gKnNyYzsKKyAg ICAgICAgfQorCisgICAgICAgICpkc3QgPSAqc3JjOworCisgICAgICAgIHJldHVybiBkc3Q7Cit9 CisKK2NoYXIgKgorc3RyY3B5X2Zyb21fMTYoY2hhciAqZHN0LCBjb25zdCBDSEFSMTYgKnNyYykK K3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgc3JjW2ldICE9IDA7IGkr KykgeworICAgICAgICAgICAgICAgIGRzdFtpXSA9IHNyY1tpXTsKKyAgICAgICAgfQorCisgICAg ICAgIGRzdFtpXSA9IDA7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgor c3RyY3B5X3RvXzE2KENIQVIxNiAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgICAgIGlu dCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHNyY1tpXSAhPSAwOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBkc3RbaV0gPSBzcmNbaV07CisgICAgICAgIH0KKworICAgICAgICBkc3RbaV0gPSAw OworCisgICAgICAgIHJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli ZWZpL3RpbWUuYyBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYwppbmRleCA5OTgzMWUxY2YxYS4u MmRmNDY2ZTU3YjcgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYworKysgc3lz L2Jvb3QvZWZpL2xpYmVmaS90aW1lLmMKQEAgLTIsMjggKzIsMjggQEAKICAqIENvcHlyaWdodCAo YykgMTk5OSwgMjAwMAogICogSW50ZWwgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0g KiAKKyAqCiAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK ICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg c29mdHdhcmUKICAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu dDoKLSAqIAorICoKICAqICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgSW50ZWwgQ29ycG9yYXRpb24gYW5kCiAgKiAgICBpdHMgY29udHJpYnV0b3JzLgotICog CisgKgogICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBvciBpdHMg Y29udHJpYnV0b3JzIG1heSBiZQogICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwog ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKQEAgLTM1LDcgKzM1LDcg QEAKICAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5o PgpAQCAtNTgsNiArNTgsNDEgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2RlZmluZSBTRUNT UEVSSE9VUiAoIDYwKjYwICkKICNkZWZpbmUgU0VDU1BFUkRBWQkoMjQgKiBTRUNTUEVSSE9VUikK IAorLyoKKy8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2ZSBudW1iZXIgb2YgZGF5 cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCisvLyAgbW9udGggbnVtYmVyIHVzZWQgYXMgdGhlIGlu ZGV4ICgxIC0+IDEyKSBmb3IgcmVndWxhciBhbmQgbGVhcCB5ZWFycy4KKy8vICBUaGUgdmFsdWUg YXQgaW5kZXggMTMgaXMgZm9yIHRoZSB3aG9sZSB5ZWFyLgorKi8KK3N0YXRpYyBjb25zdCB0aW1l X3QgQ3VtdWxhdGl2ZURheXNbMl1bMTRdID0geworICB7MCwKKyAgIDAsCisgICAzMSwKKyAgIDMx ICsgMjgsCisgICAzMSArIDI4ICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCwKKyAgIDMxICsg MjggKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAsCisgICAz MSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsg MzEgKyAzMCArIDMxICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr IDMxICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAg KyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMx ICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAz MSArIDMwICsgMzEgfSwKKyAgezAsCisgICAwLAorICAgMzEsCisgICAzMSArIDI5LAorICAgMzEg KyAyOSArIDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAsCisgICAzMSArIDI5ICsgMzEgKyAzMCAr IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEgKyAyOSArIDMxICsg MzAgKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwLAorICAg MzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCisgICAzMSAr IDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEg KyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEgKyAzMCArIDMxIH19 OworCiB2b2lkCiBlZmlfdGltZV9pbml0KHZvaWQpCiB7CkBAIC02OCw0NSArMTAzLDQ2IEBAIGVm aV90aW1lX2Zpbmkodm9pZCkKIHsKIH0KIAotc3RhdGljIHRpbWVfdAotZWZpX3RpbWUoRUZJX1RJ TUUgKkVUaW1lKQordm9pZAordG9fZWZpX3RpbWUoRUZJX1RJTUUgKmVmaV90aW1lLCB0aW1lX3Qg dGltZSkKIHsKLSAgICAvKgotICAgIC8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2 ZSBudW1iZXIgb2YgZGF5cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCi0gICAgLy8gIG1vbnRoIG51 bWJlciB1c2VkIGFzIHRoZSBpbmRleCAoMSAtPiAxMikgZm9yIHJlZ3VsYXIgYW5kIGxlYXAgeWVh cnMuCi0gICAgLy8gIFRoZSB2YWx1ZSBhdCBpbmRleCAxMyBpcyBmb3IgdGhlIHdob2xlIHllYXIu Ci0gICAgKi8KLSAgICBzdGF0aWMgdGltZV90IEN1bXVsYXRpdmVEYXlzWzJdWzE0XSA9IHsKLSAg ICB7MCwKLSAgICAgMCwKLSAgICAgMzEsCi0gICAgIDMxICsgMjgsCi0gICAgIDMxICsgMjggKyAz MSwKLSAgICAgMzEgKyAyOCArIDMxICsgMzAsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEs Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOCArIDMxICsg MzAgKyAzMSArIDMwICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMx ICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCwK LSAgICAgMzEgKyAyOCArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCi0g ICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsgMzAs Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsg MzAgKyAzMSB9LAotICAgIHswLAotICAgICAwLAotICAgICAzMSwKLSAgICAgMzEgKyAyOSwKLSAg ICAgMzEgKyAyOSArIDMxLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSAr IDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAotICAgICAz MSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAg KyAzMSArIDMwICsgMzEgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsg MzEgKyAzMSArIDMwLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMx ICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSAr IDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAz MSArIDMwICsgMzEgKyAzMCArIDMxIH19OwotCi0gICAgdGltZV90ICBVVGltZTsgCisgICAgICAg IGlmICh0aW1lID49IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGVmaV90aW1lLT5ZZWFyID0g MTk3MDsKKyAgICAgICAgICAgICAgICAgICAgdGltZSA+IEN1bXVsYXRpdmVEYXlzW2lzbGVhcChl ZmlfdGltZS0+WWVhcildWzEzXSAqIFNFQ1NQRVJEQVk7CisgICAgICAgICAgICAgICAgICAgIHRp bWUgLT0gQ3VtdWxhdGl2ZURheXNbaXNsZWFwKGVmaV90aW1lLT5ZZWFyKV1bMTNdICogU0VDU1BF UkRBWSwKKyAgICAgICAgICAgICAgICAgICAgZWZpX3RpbWUtPlllYXIrKyk7CisKKyAgICAgICAg ICAgICAgICBmb3IgKGVmaV90aW1lLT5Nb250aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHRp bWUgPiBDdW11bGF0aXZlRGF5c1tpc2xlYXAoZWZpX3RpbWUtPlllYXIpXVtlZmlfdGltZS0+TW9u dGhdICoKKyAgICAgICAgICAgICAgICAgICAgICBTRUNTUEVSREFZOworICAgICAgICAgICAgICAg ICAgICBlZmlfdGltZS0+TW9udGgrKyk7CisKKyAgICAgICAgICAgICAgICB0aW1lIC09IEN1bXVs YXRpdmVEYXlzW2lzbGVhcChlZmlfdGltZS0+WWVhcildW2VmaV90aW1lLT5Nb250aCAtIDFdICoK KyAgICAgICAgICAgICAgICAgICAgU0VDU1BFUkRBWTsKKworICAgICAgICAgICAgICAgIGZvciAo ZWZpX3RpbWUtPkRheSA9IDA7IHRpbWUgPiBTRUNTUEVSREFZOworICAgICAgICAgICAgICAgICAg ICB0aW1lIC09IFNFQ1NQRVJEQVksIGVmaV90aW1lLT5EYXkrKyk7CisKKyAgICAgICAgICAgICAg ICBmb3IgKGVmaV90aW1lLT5Ib3VyID0gMDsgdGltZSA+IFNFQ1NQRVJIT1VSOworICAgICAgICAg ICAgICAgICAgICB0aW1lIC09IFNFQ1NQRVJIT1VSLCBlZmlfdGltZS0+SG91cisrKTsKKworICAg ICAgICAgICAgICAgIGZvciAoZWZpX3RpbWUtPk1pbnV0ZSA9IDA7IHRpbWUgPiA2MDsKKyAgICAg ICAgICAgICAgICAgICAgdGltZSAtPSA2MCwgZWZpX3RpbWUtPk1pbnV0ZSsrKTsKKworICAgICAg ICAgICAgICAgIGVmaV90aW1lLT5TZWNvbmQgPSB0aW1lOworICAgICAgICAgICAgICAgIGVmaV90 aW1lLT5OYW5vc2Vjb25kID0gMDsKKyAgICAgICAgICAgICAgICBlZmlfdGltZS0+VGltZVpvbmUg PSAwOworICAgICAgICAgICAgICAgIGVmaV90aW1lLT5EYXlsaWdodCA9IDA7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KGVmaV90aW1lLCAwLCBzaXplb2YoRUZJX1RJ TUUpKTsKKyAgICAgICAgfQorfQorCit0aW1lX3QKK2Zyb21fZWZpX3RpbWUoRUZJX1RJTUUgKkVU aW1lKQoreworCisgICAgdGltZV90ICBVVGltZTsKICAgICBpbnQgICAgIFllYXI7CiAKICAgICAv KgpAQCAtMTM0LDcgKzE3MCw3IEBAIGVmaV90aW1lKEVGSV9USU1FICpFVGltZSkKICAgICAvKgog ICAgIC8vIFVUaW1lIHNob3VsZCBub3cgYmUgc2V0IHRvIDAwOjAwOjAwIG9uIEphbiAxIG9mIHRo ZSBmaWxlJ3MgeWVhci4KICAgICAvLwotICAgIC8vIE1vbnRocyAgCisgICAgLy8gTW9udGhzCiAg ICAgKi8KICAgICBVVGltZSArPSAoQ3VtdWxhdGl2ZURheXNbaXNsZWFwKEVUaW1lLT5ZZWFyKV1b RVRpbWUtPk1vbnRoXSAqIFNFQ1NQRVJEQVkpOwogCkBAIC0xNzAsNyArMjA2LDcgQEAgZWZpX3Rp bWUoRUZJX1RJTUUgKkVUaW1lKQogICAgIAkqLwogICAgIAlVVGltZSArPSAoRVRpbWUtPlRpbWVa b25lICogNjApOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBVVGltZTsKIH0KIApAQCAtMTk2 LDcgKzIzMiw3IEBAIEVGSV9HZXRUaW1lT2ZEYXkoCiAJLy8gIENvbnZlcnQgdG8gVU5JWCB0aW1l IChpZSBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAogCSovCiAKLQl0cC0+dHZfc2VjICA9IGVmaV90 aW1lKCAmRWZpVGltZSApOworCXRwLT50dl9zZWMgID0gZnJvbV9lZmlfdGltZSggJkVmaVRpbWUg KTsKIAl0cC0+dHZfdXNlYyA9IDA7IC8qIEVmaVRpbWUuTmFub3NlY29uZCAqIDEwMDA7ICovCiAK IAkvKgpAQCAtMjIxLDcgKzI1Nyw3IEBAIHRpbWUodGltZV90ICp0bG9jKQogewogCXN0cnVjdCB0 aW1ldmFsIHR2OwogCUVGSV9HZXRUaW1lT2ZEYXkoJnR2LCAwKTsKLQkKKwogCWlmICh0bG9jKQog CQkqdGxvYyA9IHR2LnR2X3NlYzsKIAlyZXR1cm4gdHYudHZfc2VjOwpkaWZmIC0tZ2l0IHN5cy9i b290L2VmaS9sb2FkZXIvTWFrZWZpbGUgc3lzL2Jvb3QvZWZpL2xvYWRlci9NYWtlZmlsZQppbmRl eCBkOWQzNTMyMDE0Zi4uMzAwYzY1YjEwZDkgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVy L01ha2VmaWxlCisrKyBzeXMvYm9vdC9lZmkvbG9hZGVyL01ha2VmaWxlCkBAIC01MCw2ICs1MCw3 IEBAIENXQVJORkxBR1MubWFpbi5jKz0JLVduby1mb3JtYXQKIENGTEFHUys9CS1JJHsuQ1VSRElS fQogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9L2FyY2gvJHtNQUNISU5FfQogQ0ZMQUdTKz0JLUkkey5D VVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzCiBDRkxB R1MrPQktSSR7LkNVUkRJUn0vLi4vaW5jbHVkZS8ke01BQ0hJTkV9CiBDRkxBR1MrPQktSSR7LkNV UkRJUn0vLi4vLi4vLi4vY29udHJpYi9kZXYvYWNwaWNhL2luY2x1ZGUKIENGTEFHUys9CS1JJHsu Q1VSRElSfS8uLi8uLi8uLgpAQCAtNjgsNiArNjksOCBAQCBDRkxBR1MrPQktRE5PX1BDSSAtREVG SQogTElCU1RBTkQ9CSR7Lk9CSkRJUn0vLi4vLi4vLi4vLi4vbGliL2xpYnN0YW5kL2xpYnN0YW5k LmEKIC5lbmRpZgogCitMSUJFRklfRFJJVkVSUz0JJHsuT0JKRElSfS8uLi9kcml2ZXJzL2xpYmVm aV9kcml2ZXJzLmEKKwogLmlmICFkZWZpbmVkKEJPT1RfSElERV9TRVJJQUxfTlVNQkVSUykKICMg RXhwb3J0IHNlcmlhbCBudW1iZXJzLCBVVUlELCBhbmQgYXNzZXQgdGFnIGZyb20gbG9hZGVyLgog Q0ZMQUdTKz0gLURTTUJJT1NfU0VSSUFMX05VTUJFUlMKQEAgLTE1MCw5ICsxNTMsMTAgQEAgbG9h ZGVyLmVmaTogJHtQUk9HfQogCiBMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xpYmVmaS9saWJlZmku YQogCi1EUEFERD0JCSR7TElCRklDTH0gJHtMSUJFRkl9ICR7TElCRkRUfSAke0xJQkVGSV9GRFR9 ICR7TElCU1RBTkR9IFwKLQkJJHtMRFNDUklQVH0KLUxEQUREPQkJJHtMSUJGSUNMfSAke0xJQkVG SX0gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gJHtMSUJTVEFORH0KK0RQQUREPQkJJHtMSUJGSUNM fSAke0xJQkVGSX0gJHtMSUJFRklfRFJJVkVSU30gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gXAor CQkke0xJQlNUQU5EfSAke0xEU0NSSVBUfQorTERBREQ9CQkke0xJQkZJQ0x9ICR7TElCRUZJfSAk e0xJQkVGSV9EUklWRVJTfSAke0xJQkZEVH0gJHtMSUJFRklfRkRUfSBcCisJCSR7TElCU1RBTkR9 CiAKIC5pbmNsdWRlIDxic2QucHJvZy5taz4KIApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9sb2Fk ZXIvY29uZi5jIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCmluZGV4IDM1OTZhNjM2MGMzLi41 NjczM2ZmYTg5OSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCisrKyBzeXMv Ym9vdC9lZmkvbG9hZGVyL2NvbmYuYwpAQCAtMzEsMzAgKzMxLDIyIEBAIF9fRkJTRElEKCIkRnJl ZUJTRCQiKTsKICNpbmNsdWRlIDxib290c3RyYXAuaD4KICNpbmNsdWRlIDxlZmkuaD4KICNpbmNs dWRlIDxlZmlsaWIuaD4KLSNpZmRlZiBFRklfWkZTX0JPT1QKLSNpbmNsdWRlIDxsaWJ6ZnMuaD4K LSNlbmRpZgorCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworY29uc3QgZWZpX2RyaXZlcl90 ICplZmlfZHJpdmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCit9 OwogCiBzdHJ1Y3QgZGV2c3cgKmRldnN3W10gPSB7Ci0JJmVmaXBhcnRfZGV2LAorICAgICAgICAm ZWZpZnNfZGV2LAogCSZlZmluZXRfZGV2LAotI2lmZGVmIEVGSV9aRlNfQk9PVAotCSZ6ZnNfZGV2 LAotI2VuZGlmCiAJTlVMTAogfTsKIAogc3RydWN0IGZzX29wcyAqZmlsZV9zeXN0ZW1bXSA9IHsK LSNpZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX2Zzb3BzLAotI2VuZGlmCi0JJmRvc2ZzX2Zzb3Bz LAotCSZ1ZnNfZnNvcHMsCi0JJmNkOTY2MF9mc29wcywKLQkmdGZ0cF9mc29wcywKLQkmbmZzX2Zz b3BzLAotCSZnemlwZnNfZnNvcHMsCi0JJmJ6aXBmc19mc29wcywKKyAgICAgICAgJmVmaWZzX2Zz b3BzLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9l ZmkuaCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAppbmRleCBlZTdjNGJiNzJlYi4u ZGJkMzZiZmI0Y2EgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAor Kysgc3lzL2Jvb3QvZWZpL2xvYWRlci9sb2FkZXJfZWZpLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAK ICNpbmNsdWRlIDxzdGFuZC5oPgogCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworZXh0ZXJu IGNvbnN0IGVmaV9kcml2ZXJfdCAqZWZpX2RyaXZlcnNbXTsKKwogaW50CWVmaV9hdXRvbG9hZCh2 b2lkKTsKIAogaW50CWVmaV9nZXRkZXYodm9pZCAqKnZkZXYsIGNvbnN0IGNoYXIgKmRldnNwZWMs IGNvbnN0IGNoYXIgKipwYXRoKTsKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4u YyBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYwppbmRleCBiOTdmMmFmYjg1MS4uNDJlM2ViZTE4 MzAgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYworKysgc3lzL2Jvb3QvZWZp L2xvYWRlci9tYWluLmMKQEAgLTg3LDEwICs4Nyw2IEBAIEVGSV9HVUlEIGRlYnVnaW1nID0gREVC VUdfSU1BR0VfSU5GT19UQUJMRV9HVUlEOwogRUZJX0dVSUQgZmR0ZHRiID0gRkRUX1RBQkxFX0dV SUQ7CiBFRklfR1VJRCBpbnB1dGlkID0gU0lNUExFX1RFWFRfSU5QVVRfUFJPVE9DT0w7CiAKLSNp ZmRlZiBFRklfWkZTX0JPT1QKLXN0YXRpYyB2b2lkIGVmaV96ZnNfcHJvYmUodm9pZCk7Ci0jZW5k aWYKLQogLyoKICAqIGNweTh0bzE2IGNvcGllcyBhIHRyYWRpdGlvbmFsIEMgc3RyaW5nIGludG8g YSBDSEFSMTYgc3RyaW5nIGFuZAogICogMCB0ZXJtaW5hdGVzIGl0LiBsZW4gaXMgdGhlIHNpemUg b2YgKmRzdCBpbiBieXRlcy4KQEAgLTEyNSw3ICsxMjEsNyBAQCBoYXNfa2V5Ym9hcmQodm9pZCkK IAlFRklfSEFORExFICpoaW4sICpoaW5fZW5kLCAqd2Fsa2VyOwogCVVJTlROIHN6OwogCWludCBy ZXR2YWwgPSAwOwotCQorCiAJLyoKIAkgKiBGaW5kIGFsbCB0aGUgaGFuZGxlcyB0aGF0IHN1cHBv cnQgdGhlIFNJTVBMRV9URVhUX0lOUFVUX1BST1RPQ09MIGFuZAogCSAqIGRvIHRoZSB0eXBpY2Fs IGRhbmNlIHRvIGdldCB0aGUgcmlnaHQgc2l6ZWQgYnVmZmVyLgpAQCAtMTgyLDcgKzE3OCw3IEBA IGhhc19rZXlib2FyZCh2b2lkKQogCQkJfSBlbHNlIGlmIChEZXZpY2VQYXRoVHlwZShwYXRoKSA9 PSBNRVNTQUdJTkdfREVWSUNFX1BBVEggJiYKIAkJCSAgICBEZXZpY2VQYXRoU3ViVHlwZShwYXRo KSA9PSBNU0dfVVNCX0NMQVNTX0RQKSB7CiAJCQkJVVNCX0NMQVNTX0RFVklDRV9QQVRIICp1c2I7 Ci0JCQkgICAgICAgCisKIAkJCQl1c2IgPSAoVVNCX0NMQVNTX0RFVklDRV9QQVRIICopKHZvaWQg KilwYXRoOwogCQkJCWlmICh1c2ItPkRldmljZUNsYXNzID09IDMgJiYgLyogSElEICovCiAJCQkJ ICAgIHVzYi0+RGV2aWNlU3ViQ2xhc3MgPT0gMSAmJiAvKiBCb290IGRldmljZXMgKi8KQEAgLTI2 MywxMCArMjU5LDYgQEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJYXJjaHN3LmFy Y2hfY29weWluID0gZWZpX2NvcHlpbjsKIAlhcmNoc3cuYXJjaF9jb3B5b3V0ID0gZWZpX2NvcHlv dXQ7CiAJYXJjaHN3LmFyY2hfcmVhZGluID0gZWZpX3JlYWRpbjsKLSNpZmRlZiBFRklfWkZTX0JP T1QKLQkvKiBOb3RlIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBaRlMgaW5pdC4gKi8KLQlh cmNoc3cuYXJjaF96ZnNfcHJvYmUgPSBlZmlfemZzX3Byb2JlOwotI2VuZGlmCiAKIAkvKiBJbml0 IHRoZSB0aW1lIHNvdXJjZSAqLwogCWVmaV90aW1lX2luaXQoKTsKQEAgLTM5MSw2ICszODMsMTAg QEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJLyoKIAkgKiBNYXJjaCB0aHJvdWdo IHRoZSBkZXZpY2Ugc3dpdGNoIHByb2JpbmcgZm9yIHRoaW5ncy4KIAkgKi8KKwlmb3IgKGkgPSAw OyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKyspCisJCWlmIChlZmlfZHJpdmVyc1tpXS0+aW5p dCAhPSBOVUxMKQorCQkJKGVmaV9kcml2ZXJzW2ldLT5pbml0KSgpOworCiAJZm9yIChpID0gMDsg ZGV2c3dbaV0gIT0gTlVMTDsgaSsrKQogCQlpZiAoZGV2c3dbaV0tPmR2X2luaXQgIT0gTlVMTCkK IAkJCShkZXZzd1tpXS0+ZHZfaW5pdCkoKTsKQEAgLTQyNyw2ICs0MjMsNyBAQCBtYWluKGludCBh cmdjLCBDSEFSMTYgKmFyZ3ZbXSkKIAlpZiAoZmluZF9jdXJyZGV2KGltZywgJmRldiwgJnVuaXQs ICZwb29sX2d1aWQpICE9IDApCiAJCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiAKKyAgICAgICAg cHJpbnRmKCJGb3VuZCBlZmkgZGV2aWNlIHVuZGVyICVzXG4iLCBkZXYtPmR2X25hbWUpOwogCXN3 aXRjaCAoZGV2LT5kdl90eXBlKSB7CiAjaWZkZWYgRUZJX1pGU19CT09UCiAJY2FzZSBERVZUX1pG UzogewpAQCAtMTA5MywyMyArMTA5MCwzIEBAIGNvbW1hbmRfZmR0KGludCBhcmdjLCBjaGFyICph cmd2W10pCiAKIENPTU1BTkRfU0VUKGZkdCwgImZkdCIsICJmbGF0dGVuZWQgZGV2aWNlIHRyZWUg aGFuZGxpbmciLCBjb21tYW5kX2ZkdCk7CiAjZW5kaWYKLQotI2lmZGVmIEVGSV9aRlNfQk9PVAot c3RhdGljIHZvaWQKLWVmaV96ZnNfcHJvYmUodm9pZCkKLXsKLQlFRklfSEFORExFIGg7Ci0JdV9p bnQgdW5pdDsKLQlpbnQgaTsKLQljaGFyIGRuYW1lW1NQRUNOQU1FTEVOICsgMV07Ci0JdWludDY0 X3QgZ3VpZDsKLQotCXVuaXQgPSAwOwotCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2 LCAwKTsKLQlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBh cnRfZGV2LCArK2kpKSB7Ci0JCXNucHJpbnRmKGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoi LCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsKLQkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZn dWlkKSA9PSAwKQotCQkJKHZvaWQpZWZpX2hhbmRsZV91cGRhdGVfZGV2KGgsICZ6ZnNfZGV2LCB1 bml0KyssIGd1aWQpOwotCX0KLX0KLSNlbmRpZgo= --94eb2c058ce8fc2ff60542bb5373--