Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w71JN-004sYq-2g for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 01:21:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w71JM-000IQV-01 for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 01:21:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w71JK-000IQF-17 for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 01:21:00 +0000 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w71JH-00000001j5v-2mXD for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 01:20:56 +0000 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-40438e0cba6so2485431fac.1 for ; Sun, 29 Mar 2026 18:20:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774833655; cv=none; d=google.com; s=arc-20240605; b=BHJziPKGFCNIyv7oDRwSCVw43UQd9ePCyptQBPGnJHvNqRX8XeWLw4Ryu/rVGTpVNy Z2cLKwD/Na+WmWG4ekw3ias7jLlZiDWjOpBYQIFEWjVO0NAR9JNYV/1fqS2sGKXrAr3p OYLdPYuEk57bxa4R5LqQUNEClTbWIPiq/+LHfSKLzrkbDsPh5a7cYbhTaWyzN8aUNrkX WEQvxFpcMlKjf3fv6w0PazGXTu6/GrN5jiW7I8WFABONE4Q0DjuxOjG66g1fYE46ZNH+ i4kLNHBro+a5MwPA7vdBmt6RQM17gZTAYqbCvNeHsG5WgE2IibJTAJkA7QWnUHbYhlwU a9aA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Tl+V9vhvkak8ey3jhn9HJvym6/a3/q+85WOfHmfEnlY=; fh=//50+8/ZKus7w5kpFmVUhpExGPy85o4AZj1ByMcd4Gs=; b=DACEX/Pw5MDSpoS4Yk6Pex9KHYcYu/gN7TA6ttS1Wf1G87WEpJraDCfjLUYC8yNMfP 1Z3vQTdi5n77pxOyZhKOMVFrqv8dfqoCKz+lwBXdejIBpwIzGLaGVW5IpsZaNWv3C3yD MVWDgVqFYBpAhdmA2lYtlLA9OqbiC/fY8ONUul+LrN+UEtVrmkQeWvKK6C0yDhTu+ncF N5Xvo6ntKDIYgU1/mg6ZMQey5ZG9+SeVInB0GjujHqM5BnEgxYudmAnavJUfsxHzRqAc ksDLbJben+8bnB5C1i4JxLb8RlfK1aw/aMyxX08yigbZ4OQUzzhQgroU/Zen3tO+RLDx nQsA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774833655; x=1775438455; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Tl+V9vhvkak8ey3jhn9HJvym6/a3/q+85WOfHmfEnlY=; b=lGQrjf6BiVrOFsiIMWDhJANtR7tofxFD28Shyv7/TNWRGLKAXIEQRYQHKGhPuVOC7a fsC/cyYTOS56EhQf8g0FUz+FLt5i3qkl0Rx1DPjvuE1H8Py0mq0YVOcpKO8X/gQA3n6Y X9wNHnrR4/AGr9yb72qm7QDP4gCVlQ93anDQ/YhKeIpbWsGXB0M6BQ26DwGNynmsyU2e GksJuJvDYfU3715cpvea66Ea4pijNxHpqs08hGSVX4K/ngKtob9f+bdNAorp5W2X83pw Jbh84P33ZyhT4XcrUr06V7Zs8+rXFWhu3wnTVWPmARu92+1T5GcsDxFsSC0IPcXBkyLl t06g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774833655; x=1775438455; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Tl+V9vhvkak8ey3jhn9HJvym6/a3/q+85WOfHmfEnlY=; b=eOcRyZ6jEnUtlpWA4EJzrS6Lz088Aa421LJ7v18nAOMloY01q34WgS0kaRRmCkHdiF pVcJxW/N6Vik16x2E7QvMiDrX6RdrxN66Hdbe6aW6vEqbYqy9n6t2EZ2Erp8n3aK9Ml5 UjX+JI9OR+IXbMkGsWeSsDoOHqX+De/klN2O70RzsLs7IBkmxU9c4mXqNteSLciFz2Uw EBWwkSt5N+d1rl27cHvHBArPhZMb36j3rCGEoVBwH6i4AEW/AsdfOIjPtaqw4umAaRMQ W56klu2c55LabTpSZEOqXNOH6syL208SNOSlworvIYz6sbsU0LozQBSD86AR8PotVqi8 eS2g== X-Gm-Message-State: AOJu0YxipKGAnqYco/SVgxko6IVmlG24JP9CdKLZdjbVBjrAap5H7REa aaDV4JTii6+tYU6ZT+IKkw6f3YFxYphh5gn4sNWZNx4upu6ucztaUAWNny2dL3ABDuHlrbI4PMF ksj7dIKzW9PI8jm2NRLBB+tse6viCKZ6CSTX0jNc= X-Gm-Gg: ATEYQzwmIusK83ivBMil/qO6V4MHasTVTTr9TQ6u43vXAvlGWC58aSY+The0TzROnVt ROqlMz9+UvUM/lkocTqBLCpNYVl+7XJj7IcKEhkhbcV/m7ltlt1KVSRsF+yUJ3Tl6W7KTkqFtsN lpsrGRrDQf8792P9oUHLy7xlCjLvEGeKOyfX4QF3nLu0G81dFxakAtayjG4l5VRdnjUFpgLxSLS DhY20g5ZU75elUlg9vwMykNgMlAtiO/b7oF/P2AF8sh5NK0c/C3BO/WDrf27leeGZBnK3akXJ9n +vbWIbotp7jnDZ8xav/dFNEPJE3thfJ3bd22gTf+E8GPZOtN5nxM5WUIDyXYSBMkzr/CAjeq4HX Ku68JDg== X-Received: by 2002:a05:6820:62a:b0:67d:f992:86e5 with SMTP id 006d021491bc7-67e186e7ad4mr6004722eaf.46.1774833654687; Sun, 29 Mar 2026 18:20:54 -0700 (PDT) MIME-Version: 1.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> <554a73f7ffea8b22b3f81a4804b5fc34@postgrespro.ru> In-Reply-To: From: Alexander Korotkov Date: Mon, 30 Mar 2026 04:20:41 +0300 X-Gm-Features: AQROBzAOCGJBo5Jre6ukLotys0apP3NmxUBuNzI1UgA7B6TgUege529AftqJ8Rg Message-ID: Subject: Re: Asynchronous MergeAppend To: Alexander Pyhalov Cc: Pgsql Hackers , Matheus Alcantara Content-Type: multipart/mixed; boundary="00000000000086468f064e33a98a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000086468f064e33a98a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi! On Wed, Mar 18, 2026 at 8:17=E2=80=AFAM Alexander Pyhalov wrote: > Alexander Pyhalov =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2026-03-02 09:44= : > > Alexander Pyhalov =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2026-02-12 10:= 08: > >> Alexander Pyhalov =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2025-12-30 22= :04: > >>> Matheus Alcantara =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2025-12-30 1= 8:04: > >>>> On Tue Dec 30, 2025 at 10:15 AM -03, Alexander Pyhalov wrote: > >>>>> Looks good. What do you think about > >>>>> classify_matching_subplans_common()? > >>>>> Should it stay where it is or should we hide it to > >>>>> src/include/executor/execAppend.h ? > >>>>> > >>>> Yeah, sounds better to me to move classify_matching_subplans_common > >>>> to > >>>> execAppend.h since it very specific for the MergeAppend and Append > >>>> execution. I've declared the function as static inline on > >>>> execAppend.h > >>>> but I'm not sure if it's the best approach. > >>>> > >>>> I've also wrote a proper commit message for this new version. > >>> > >>> Looks good to me. > >> > >> Hi. > >> Rebased patches over fresh master. > > > > Hi. > > Rebased patches over fresh master. > > Hi. > Rebased patches over fresh master. Thank you for your work on this subject. I have revised the patchset. I think it would be better if common infrastructure goes first. Otherwise we commit async merge append and immediately revise it. I also did some minor improvements. ------ Regards, Alexander Korotkov Supabase --00000000000086468f064e33a98a Content-Type: application/octet-stream; name="v16-0001-mark_async_capable-subpath-should-match-subplan.patch" Content-Disposition: attachment; filename="v16-0001-mark_async_capable-subpath-should-match-subplan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnci2jby0 RnJvbSBlMTEyNzUxNWE0OWIxNGYwZTdiOTM4Zjg1M2I3ZWYxZjZmMGU3ZGUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogTW9uLCAzMCBNYXIgMjAyNiAwNDoxNzoxMSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjE2IDEvM10gbWFya19hc3luY19jYXBhYmxlKCk6IHN1YnBhdGggc2hvdWxkIG1hdGNo IHN1YnBsYW4KCm1hcmtfYXN5bmNfY2FwYWJsZSgpIGJlbGlldmVzIHRoYXQgdGhlIHBhdGggY29y cmVzcG9uZHMgdG8gdGhlIHBsYW4uICBUaGlzIGlzCm5vdCB0cnVlIHdoZW4gY3JlYXRpbmdfW21l cmdlX11hcHBlbmRfcGxhbigpIGluc2VydHMgc29ydCBub2RlLiBJbiB0aGlzIGNhc2UsCm1hcmtf YXN5bmNfY2FwYWJsZSgpIGNhbiB0cmVhdCB0aGUgU29ydCBwbGFuIG5vZGUgYXMgc29tZSBvdGhl ciBub2RlIGFuZApjcmFzaC4gRml4IHRoaXMgYnkgaGFuZGxpbmcgdGhlIFNvcnQgbm9kZSBzZXBh cmF0ZWx5LgoKVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBhc3lu Yy1jYXBhYmxlLCB3aGljaCB3aWxsIGJlCmltcGxlbWVudGVkIGluIHRoZSBzdWJzZXF1ZW50IGNv bW1pdHMuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzU5YmUxOTRjNWE0MDlmYjlm YzlmMjAzMTU4MWI4YTQ0JTQwcG9zdGdyZXNwcm8ucnUKQXV0aG9yOiBBbGV4YW5kZXIgUHloYWxv diA8YS5weWhhbG92QHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTogTWF0aGV1cyBBbGNhbnRh cmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZW5hIFJ5YmFraW5h IDxhLnJ5YmFraW5hQHBvc3RncmVzcHJvLnJ1PgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2NyZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDEwIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCmluZGV4IDUwYjBlMTAzMDhiLi4yNmQwZGJjMmUxZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOCwxMCArMTEzOCwxMiBAQCBt YXJrX2FzeW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1 ZXJ5U2NhbiAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJ CQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQg bm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAq IENoZWNrIHRoYXQgdGhlIHBsYW4gaXMgcmVhbGx5IGEgU3VicXVlcnlTY2FuIGJlZm9yZSB1c2lu ZworCQkJCSAqIGl0LiBJdCBjYW4gYmUgbm90IHRydWUgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5v ZGUgaW5jbHVkZXMKKwkJCQkgKiBhIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4g SW4gc3VjaCBhIGNhc2UsIHdlCisJCQkJICogY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNs eS4KIAkJCQkgKi8KLQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxh biwgU3VicXVlcnlTY2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNTks MTAgKzExNjEsMTAgQEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAq cGF0aCkKIAkJCQlGZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0 aW5lOwogCiAJCQkJLyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRl cyBhIGdhdGluZyBSZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5j aHJvbm91c2x5LgorCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEg Z2F0aW5nIFJlc3VsdCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1 dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQp KQorCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJl dHVybiBmYWxzZTsKIAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3NSw5 ICsxMTc3LDkgQEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0 aCkKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEg UmVzdWx0IG5vZGUgZm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBp dCBhc3luY2hyb25vdXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNh bid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwg UmVzdWx0KSkKKwkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJ CQkJcmV0dXJuIGZhbHNlOwogCiAJCQkvKgotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --00000000000086468f064e33a98a Content-Type: application/octet-stream; name="v16-0003-MergeAppend-should-support-Async-Foreign-Scan-su.patch" Content-Disposition: attachment; filename="v16-0003-MergeAppend-should-support-Async-Foreign-Scan-su.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnci2jc92 RnJvbSA0MGEzNjgyNmI2NTRlYTIzNzdlNzdjMThjNGQwNmNjNDkxN2Y2MmRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogTW9uLCAzMCBNYXIgMjAyNiAwMTozMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjE2IDMvM10gTWVyZ2VBcHBlbmQgc2hvdWxkIHN1cHBvcnQgQXN5bmMgRm9yZWlnbiBT Y2FuCiBzdWJwbGFucwoKVGhpcyBjb21taXQgbWFrZXMgdGhlIE1lcmdlQXBwZW5kIG5vZGUgYXN5 bmMtY2FwYWJsZSwgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcKYXN5bmMgc3VwcG9ydCBmb3IgQXBw ZW5kIG5vZGVzLiBXaGVuIHRoZSBwbGFubmVyIGNob29zZXMgTWVyZ2VBcHBlbmQgZm9yCnBhcnRp dGlvbmVkIHRhYmxlcyB3aXRoIGZvcmVpZ24gcGFydGl0aW9ucywgYXN5bmNocm9ub3VzIGV4ZWN1 dGlvbiBpcyBub3cKcG9zc2libGUsIHByb3ZpZGluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBp bXByb3ZlbWVudHMuCgpBIG5ldyBHVUMgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCBjb250cm9s cyB0aGlzIGZlYXR1cmUgKGRlZmF1bHQgb24pLgoKVW5saWtlIEFwcGVuZCwgd2hpY2ggY2FuIHJl dHVybiBhc3luYyByZXN1bHRzIGluIGFueSBvcmRlciwgTWVyZ2VBcHBlbmQKbXVzdCByZXR1cm4g cmVzdWx0cyBpbiBzb3J0IG9yZGVyLiBUbyBoYW5kbGUgdGhpcywgRXhlY01lcmdlQXBwZW5kQXN5 bmNHZXROZXh0CnJlcXVlc3RzIGFuZCBjYWNoZXMgcmVzdWx0cyBwZXItc3VicGxhbiwgb25seSBy ZXR1cm5pbmcgdGhlbSB3aGVuIHRoZQpiaW5hcnkgaGVhcCBtZXJnZSByZXF1aXJlcyB0aGF0IHNw ZWNpZmljIHN1YnBsYW4ncyB0dXBsZS4KClRoZSBwb3N0Z3Jlc19mZHcgaXMgdXBkYXRlZCB0byB3 b3JrIGdlbmVyaWNhbGx5IHdpdGggYm90aCBBcHBlbmQgYW5kCk1lcmdlQXBwZW5kIHJlcXVlc3Rv cnMgdmlhIEdldEFwcGVuZEV2ZW50U2V0KCkvR2V0TmVlZFJlcXVlc3QoKSBoZWxwZXJzLgoKRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS81OWJlMTk0YzVhNDA5ZmI5ZmM5ZjIwMzE1ODFi OGE0NCU0MHBvc3RncmVzcHJvLnJ1CkF1dGhvcjogQWxleGFuZGVyIFB5aGFsb3YgPGEucHloYWxv dkBwb3N0Z3Jlc3Byby5ydT4KUmV2aWV3ZWQtYnk6IE1hdGhldXMgQWxjYW50YXJhIDxtYXRoZXVz c3NpbHY5N0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2lu YUBwb3N0Z3Jlc3Byby5ydT4KLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVz X2Zkdy5vdXQgICAgfCAyODggKysrKysrKysrKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAgMTAgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3 L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA4NyArKysrKysKIGRvYy9zcmMvc2dtbC9jb25m aWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQXN5bmMuYyAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlQXBwZW5kLmMgICAgICAgIHwgMjc5ICsrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIC4uLi91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVj dXRvci9ub2RlTWVyZ2VBcHBlbmQuaCAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICstCiAxNSBmaWxlcyBjaGFuZ2VkLCA3Mjgg aW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv ZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCAwZjUyNzFkNDc2ZS4uZTczZGI3MGNhNjkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApA QCAtMTE1NzUsNiArMTE1NzUsNDYgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZ IGE7CiAoMiByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBB cHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNf cHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQu YQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRf MQorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRf MS5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDEgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwg YSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5 bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0 XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBG Uk9NIHB1YmxpYy5iYXNlX3RibDIgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBB U0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAg fCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8 ICAgMCB8IDAwMDAKKyAxMTAwIHwgMTAwIHwgMDEwMAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIw MCB8IDIwMCB8IDAyMDAKKyAyMjAwIHwgMjAwIHwgMDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisg MjMwMCB8IDMwMCB8IDAzMDAKKyAxNDAwIHwgNDAwIHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAw CisgMTUwMCB8IDUwMCB8IDA1MDAKKyAyNTAwIHwgNTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAw NjAwCisgMjYwMCB8IDYwMCB8IDA2MDAKKyAxNzAwIHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAg fCAwNzAwCisgMTgwMCB8IDgwMCB8IDA4MDAKKyAyODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5 MDAgfCAwOTAwCisgMjkwMCB8IDkwMCB8IDA5MDAKKygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9y IGhhbmRsaW5nLCBpZiBhY2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJy b3JzIG91dAogQ1JFQVRFIEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9G IGFzeW5jX3B0IEZPUiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxv b3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMTE2 MjMsNiArMTE2NjMsNzYgQEAgQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIEVSUk9S OiAgY2Fubm90IGNvcHkgZnJvbSBmb3JlaWduIHRhYmxlICJhc3luY19wMSIKIERFVEFJTDogIFBh cnRpdGlvbiAiYXN5bmNfcDEiIGlzIGEgZm9yZWlnbiB0YWJsZSBpbiBwYXJ0aXRpb25lZCB0YWJs ZSAiYXN5bmNfcHQiCiBISU5UOiAgVHJ5IHRoZSBDT1BZIChTRUxFQ1QgLi4uKSBUTyB2YXJpYW50 LgorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBL ZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24g cHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5h LCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRf MS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1 YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBT Y2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3luY19wdF8zCisgICAgICAgICBPdXRwdXQ6IGFzeW5j X3B0XzMuYSwgYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIEZpbHRlcjogKGFz eW5jX3B0XzMuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMg RlJPTSBwdWJsaWMuYmFzZV90YmwzIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5V TExTIExBU1QKKygxNCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09 IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0t LS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1 IHwgMDUwNQorKDMgcm93cykKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZS T00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBi KSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMp IGcoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2Nh biBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6IEFSUkFZKFN1YlBs YW4gYXJyYXlfMSkKKyAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorICAg U3ViUGxhbiBhcnJheV8xCisgICAgIC0+ICBMaW1pdAorICAgICAgICAgICBPdXRwdXQ6IGYuaQor ICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAg ICAgICAgICAgICBTb3J0IEtleTogZi5pCisgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBT Y2FuIG9uIGYKKyAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAg ICAgICAgICAgICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTb3J0IEtleTogYXN5bmNfcHQuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg QXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzEuYiArIGcuaSks IGFzeW5jX3B0XzEuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgYiBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKChhID4gJDE6OmludGVn ZXIpKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMi5i ICsgZy5pKSwgYXN5bmNfcHRfMi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlbW90ZSBTUUw6IFNFTEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMiBXSEVSRSAoKGEgPiAk MTo6aW50ZWdlcikpIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5 bmNfcHRfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3lu Y19wdF8zLmIgKyBnLmkpLCBhc3luY19wdF8zLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwzIFdIRVJF ICgoYSA+ICQxOjppbnRlZ2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorKDIyIHJvd3Mp CisKK1NFTEVDVAorCUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBh c3luY19wdCBXSEVSRSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlU IDEwKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAgICAgICAgICAgYXJyYXkg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMSwxLDYsNiw2LDEx LDExLDExLDE2fQorIHsyLDIsMiw3LDcsNywxMiwxMiwxMiwxN30KKyB7MywzLDMsOCw4LDgsMTMs MTMsMTMsMTh9CisoMyByb3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9Q IFRBQkxFIGJhc2VfdGJsMzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRh YmxlIGhhcyBsb2NhbC9yZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE2NTgsNiArMTE3NjgsMzcgQEAg U0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUg RlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVS IEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFw cGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1 dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmls dGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg YSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwg YSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5 bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0 XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUw NSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2Vf dGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAg U29ydAorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNf cHRfMy5jCisgICAgICAgICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAg ICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5j CisgICAgICAgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dz KQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBh OworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUg fCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykK KwogLS0gcGFydGl0aW9ud2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4g VE8gdHJ1ZTsKIENSRUFURSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQs IGEyIGludCwgYjIgaW50LCBjMiB0ZXh0KTsKQEAgLTEyNDQwLDYgKzEyNTgxLDE1MyBAQCBTRUxF Q1QgYSBGUk9NIGJhc2VfdGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwg cmFuZG9tKCkgPiAwIEZST00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NB REU7CiBOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90Ymwy CiBEUk9QIFRBQkxFIGJhc2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFU RSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAo aSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBU QUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUg ZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIs IFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2Ux Jyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBG T1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50 LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFz ZTMgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGog aW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBP RiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBkaXN0cjJfcDIgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVM VVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAn YmFzZTQnKTsKK0lOU0VSVCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitT RUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkg aTsKK0FOQUxZWkUgZGlzdHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3Ry Ml9wMTsKK0FOQUxZWkUgZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4g VE8gT047CistLSBUZXN0IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRp c3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRh JScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3Ry Mi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNv cnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAg ICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0 cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6 IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3Ax IGRpc3RyMl8xKQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmos IHIzLmssIHI1LmksIHI1LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4g cHVibGljLmJhc2UzIHI1IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5E ICgocjUuayB+fiAnZGF0YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAg ICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3Ry MV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRp c3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlz dHIxXzIpIElOTkVSIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYu ayBGUk9NIChwdWJsaWMuYmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgo cjQuaSA9IHI2LmkpKSBBTkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkp IE9SREVSIEJZIHI0LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkw IGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOwor IGkgIHwgIGogIHwgICAgayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0t LS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAx MDAgfCBkYXRhXzEwCisgMTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisg MTIgfCAxMjAgfCBkYXRhXzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRh XzEzIHwgMTMgfCAxMzAgfCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAg fCBkYXRhXzE0CisgMTUgfCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYg fCAxNjAgfCBkYXRhXzE2IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3 IHwgMTcgfCAxNzAgfCBkYXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBk YXRhXzE4CisgMTkgfCAxOTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93 cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEg TEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAn ZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5p LCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4g IEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBk aXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5r CisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBM RUZUIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1v dGUgU1FMOiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChw dWJsaWMuYmFzZTEgcjQgTEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYu aSkpIEFORCAoKHI2Lmsgfn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBC WSByNC5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisg ICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmss IGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0 aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3Ry Ml9wMiBkaXN0cjJfMikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCBy NS5qLCByNS5rLCByNy5pLCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpP SU4gcHVibGljLmJhc2U0IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0 YSUnKSkpKSBXSEVSRSAoKHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QK KygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBk aXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5p ID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAg ICB8ICBpICB8ICBqICAgfCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLSstLS0tLS0tLS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8 IGRhdGFfOTEKKyAgOTIgfCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85Mgor ICA5MyB8ICA5MzAgfCBkYXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0 MCB8IGRhdGFfOTQgIHwgIDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85 NSAgfCAgOTUgfCAgOTUwIHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8 ICA5NjAgfCBkYXRhXzk2CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRh dGFfOTcKKyAgOTggfCAgOTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5 OSB8ICA5OTAgfCBkYXRhXzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8 IGRhdGFfMTAwIHwgMTAwIHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAx IHwgICAgIHwgICAgICB8IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAK KyAxMDMgfCAxMDMwIHwgZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRh dGFfMTA0IHwgICAgIHwgICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAg ICAgfCAKKyAxMDYgfCAxMDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3 MCB8IGRhdGFfMTA3IHwgICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAg ICB8ICAgICAgfCAKKyAxMDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEw IHwgMTEwMCB8IGRhdGFfMTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3Qg cHJ1bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5T RVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hl X21vZGUgVE8gZm9yY2VfZ2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50 LCBpbnQpIEFTCisgIFNFTEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEs ICQyXSkKKyAgT1JERVIgQlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorCUVYRUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlz dHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwg ZGlzdHIyLmoKKyAgICAgICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3lu YyBGb3JlaWduIFNjYW4gb24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAg ICAgT3V0cHV0OiBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAo KGkgPSBBTlkgKEFSUkFZWyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBB U0MgTlVMTFMgTEFTVCwgaiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3lu Y19wdF9xdWVyeSgxLCAxKTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0t LS0KKyAxIHwgIDEwIHwgZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0 YV8yMQorIDEgfCAzMTAgfCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwg ZGF0YV81MQorIDEgfCA2MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEw IHwgZGF0YV84MQorIDEgfCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9j YWNoZV9tb2RlOworUkVTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUg ZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9v cGJhY2syIE9QVElPTlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg LS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDc0MTZkMDljN2UyLi5iNzQ0NGZkYjIyZSAx MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTQsMTIgKzcyMTQsMTYgQEAg cG9zdGdyZXNGb3JlaWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlG b3JlaWduU2NhblN0YXRlICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVz dGVlOwogCVBnRmR3U2NhblN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUt PmZkd19zdGF0ZTsKIAlBc3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9z dGF0ZS0+cGVuZGluZ0FyZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0 ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFz LmV2ZW50c2V0OworCVBsYW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlX YWl0RXZlbnRTZXQgKnNldDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMg c2hvdWxkIG5vdCBiZSBjYWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQo YXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1 ZXN0b3IpOworCW5lZWRyZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8q CiAJICogSWYgcHJvY2Vzc19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRo ZSBnaXZlbiByZXF1ZXN0CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNv bWUgdHVwbGVzIGFscmVhZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTcsNyArNzI2MSw3IEBAIHBv c3RncmVzRm9yZWlnbkFzeW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAq IGJlbG93LCBiZWNhdXNlIHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1 cmVkIGV2ZW50cwogCQkgKiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50Lgog CQkgKi8KLQkJaWYgKCFibXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hcy5uZWVkcmVxdWVzdCkpCisJ CWlmICghYm1zX2lzX2VtcHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51 bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCA0OWVkNzk3ZThlZi4uNzNmYzUzMTdh ZDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTQz LDYgKzM5NDMsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScg fHwgYyBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0 X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJn ZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5 bmNfcHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5 bmNfcHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBo YW5kbGluZywgaWYgYWNjZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9y cyBvdXQKIENSRUFURSBGT1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBh c3luY19wdCBGT1IgVkFMVUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29w YmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NjYs NiArMzk3MSwyMCBAQCBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdo ZW4gZm9yZWlnbiB0YWJsZSBpcyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAt LWVycm9yCiAKKy0tIFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBh OworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsK KworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5p IEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYu aSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CitTRUxFQ1QKKwlB UlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUg YSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsK IERST1AgVEFCTEUgYmFzZV90YmwzOwogCkBAIC0zOTgxLDYgKzQwMDAsMTEgQEAgSU5TRVJUIElO VE8gcmVzdWx0X3RibCBTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNF TEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3Ri bDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitT RUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCiAt LSBwYXJ0aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0 cnVlOwogCkBAIC00MjE5LDYgKzQyNDMsNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVS RSAoYSwgcmFuZG9tKCkgPiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERS T1AgRk9SRUlHTiBUQUJMRSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3Ri bDsKIAorLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkg aW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUg YmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQs IGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElP TiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VS VkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlH TiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1P RFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFt ZSAnYmFzZTInKTsKKworQ1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQp IFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50 LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitD UkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFM VUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9O UyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQ QVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIg MSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNF UlQgSU5UTyBkaXN0cjEKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSox MCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFla RSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5B TFlaRSBkaXN0cjJfcDI7CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOwor CistLSBUZXN0IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5p PWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09S REVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBX SEVSRSBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlr ZSAnZGF0YSUnCitPUkRFUiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBk aXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEu aSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIx IExFRlQgSk9JTiBkaXN0cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtl ICdkYXRhJScgV0hFUkUgZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7 CisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00g ZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8 fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOwor U0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5j X3B0X3F1ZXJ5IChpbnQsIGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9 IEFOWShBUlJBWVskMSwgJDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VY RUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JF U0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0 cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BU SU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDIyOWY0MTM1M2ViLi5k YzIwZmU3NzBkZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTU1Niw2ICs1NTU2LDIwIEBAIEFOWSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNl YWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJl ZmxhYmVsPSJlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1l PmVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBl PikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2Fz eW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1h cnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxh bm5lcidzIHVzZSBvZiBhc3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBl cy4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFw c2NhbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FzeW5jLmMKaW5kZXggY2Y3ZGRiYjAxZjQuLmY4MzlmNWYyNTVjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjQXN5bmMuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9y LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKICNp bmNsdWRlICJleGVjdXRvci9ub2RlRm9yZWlnbnNjYW4uaCIKIAogLyoKQEAgLTEyMiw2ICsxMjMs OSBAQCBFeGVjQXN5bmNSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJCWNhc2UgVF9BcHBl bmRTdGF0ZToKIAkJCUV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKGFyZXEpOwogCQkJYnJlYWs7CisJ CWNhc2UgVF9NZXJnZUFwcGVuZFN0YXRlOgorCQkJRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25z ZShhcmVxKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogSWYgdGhlIG5vZGUgZG9lc24n dCBzdXBwb3J0IGFzeW5jLCBjYWxsZXIgbWVzc2VkIHVwLiAqLwogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmMKaW5kZXggY2QwM2IyYmM3ZjguLjNmMGQ3ZmIzYTQ1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtNDAsMTEgKzQwLDE2IEBACiAKICNpbmNsdWRlICJleGVj dXRvci9leGVjQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKLSNpbmNs dWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0Fz eW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgiCisjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1 ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgor CisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgMTYKIAogLyoK ICAqIFdlIGhhdmUgb25lIHNsb3QgZm9yIGVhY2ggaXRlbSBpbiB0aGUgaGVhcCBhcnJheS4gIFdl IHVzZSBTbG90TnVtYmVyCkBAIC01Niw2ICs2MSwxMiBAQCB0eXBlZGVmIGludDMyIFNsb3ROdW1i ZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBz dGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29tcGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2 b2lkICphcmcpOwogCitzdGF0aWMgdm9pZCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJn ZUFwcGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jQmVn aW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRB c3luY0dldE5leHQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKTsKK3N0YXRpYyBi b29sIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBp bnQgbXBsYW4pOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSk7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbml0TWVyZ2VB cHBlbmQKQEAgLTg3LDEwICs5OCwxNiBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJIC0xLAogCQkJCQkgTlVM TCk7CiAKKwlpZiAobWVyZ2VzdGF0ZS0+bXMubmFzeW5jcGxhbnMgPiAwICYmIG1lcmdlc3RhdGUt Pm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBs YW5zKG1lcmdlc3RhdGUpOworCiAJbWVyZ2VzdGF0ZS0+bXNfc2xvdHMgPSBwYWxsb2MwX2FycmF5 KFR1cGxlVGFibGVTbG90ICosIG1lcmdlc3RhdGUtPm1zLm5wbGFucyk7CiAJbWVyZ2VzdGF0ZS0+ bXNfaGVhcCA9IGJpbmFyeWhlYXBfYWxsb2NhdGUobWVyZ2VzdGF0ZS0+bXMubnBsYW5zLCBoZWFw X2NvbXBhcmVfc2xvdHMsCiAJCQkJCQkJCQkJCSAgbWVyZ2VzdGF0ZSk7CiAKKwltZXJnZXN0YXRl LT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3luY3JlbWFp biA9IE5VTEw7CisKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KIAkg Ki8KQEAgLTE1Myw4ICsxNzAsMTMgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRl KQogCQkJbm9kZS0+bXMudmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5tcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCQkJbm9kZS0+bXMudmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFucyhub2RlKTsKIAkJfQogCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMs IGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXMubmFzeW5jcGxhbnMgPiAw KQorCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKKwogCQkvKgogCQkgKiBGaXJz dCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJw bGFuLAogCQkgKiBhbmQgc2V0IHVwIHRoZSBoZWFwLgpAQCAtMTY2LDYgKzE4OCwxNiBAQCBFeGVj TWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5t c19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAs IEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisKKwkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJw bGFucyAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5t cy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5 bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0p KQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERh dHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhlYXBfYnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5v ZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9CkBAIC0xODAsNyArMjEyLDEzIEBAIEV4ZWNN ZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVu dGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2Zp cnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUo bm9kZS0+bXMucGxhbnNbaV0pOworCQlpZiAoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tcy5hc3lu Y3BsYW5zKSkKKwkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChub2RlLCBpKTsKKwkJZWxz ZQorCQl7CisJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tcy52YWxpZF9zdWJwbGFu cykpOworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bXMucGxhbnNb aV0pOworCQl9CiAJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCWJpbmFy eWhlYXBfcmVwbGFjZV9maXJzdChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJ ZWxzZQpAQCAtMTk2LDYgKzIzNCw4IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0 ZSkKIAl7CiAJCWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVh cCkpOwogCQlyZXN1bHQgPSBub2RlLT5tc19zbG90c1tpXTsKKwkJLyogRm9yIGFzeW5jIHBsYW4g cmVjb3JkIHRoYXQgd2UgY2FuIGdldCB0aGUgbmV4dCB0dXBsZSAqLworCQlub2RlLT5tc19oYXNf YXN5bmNyZXN1bHRzID0gYm1zX2RlbF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywg aSk7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI2MCw4ICszMDAsMjQzIEBAIEV4ZWNFbmRN ZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogdm9pZAogRXhlY1JlU2Nhbk1lcmdl QXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBu b2RlLT5tcy5uYXN5bmNwbGFuczsKKwogCUV4ZWNSZVNjYW5BcHBlbmRlcigmbm9kZS0+bXMpOwog CisJLyogUmVzZXQgc3BlY2lmaWMgbWVyZ2UgYXBwZW5kIGFzeW5jIHN0YXRlICovCisJaWYgKG5h c3luY3BsYW5zID4gMCkKKwl7CisJCWJtc19mcmVlKG5vZGUtPm1zX2FzeW5jcmVtYWluKTsKKwkJ bm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzKTsKKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IE5VTEw7CisJfQogCWJp bmFyeWhlYXBfcmVzZXQobm9kZS0+bXNfaGVhcCk7CiAJbm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSBm YWxzZTsKIH0KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgIGNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zCisgKgorICogICAgICAgICAgICAgIENsYXNzaWZ5IHRoZSBub2RlJ3MgbXNfdmFs aWRfc3VicGxhbnMgaW50byBzeW5jIG9uZXMgYW5kCisgKiAgICAgICAgICAgICAgYXN5bmMgb25l cywgYWRqdXN0IGl0IHRvIGNvbnRhaW4gc3luYyBvbmVzIG9ubHksIGFuZCBzYXZlCisgKiAgICAg ICAgICAgICAgYXN5bmMgb25lcyBpbiB0aGUgbm9kZSdzIG1zX3ZhbGlkX2FzeW5jcGxhbnMuCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCUFzc2VydChub2RlLT5tcy52YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlk IHN1YnBsYW5zLiAqLworCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXMudmFsaWRfc3VicGxhbnMp KQorCXsKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJ LyogTm8gdmFsaWQgYXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KKwlpZiAoIWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbigKKwkJCQkJCQkJCQkgICAmbm9kZS0+bXMudmFsaWRf c3VicGxhbnMsCisJCQkJCQkJCQkJICAgbm9kZS0+bXMuYXN5bmNwbGFucywKKwkJCQkJCQkJCQkg ICAmbm9kZS0+bXMudmFsaWRfYXN5bmNwbGFucykpCisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0g TlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgIEV4ZWNNZXJnZUFwcGVuZEFz eW5jQmVnaW4KKyAqCisgKiAgICAgICAgICAgICAgQmVnaW4gZXhlY3V0aW5nIGRlc2lnbmVkIGFz eW5jLWNhcGFibGUgc3VicGxhbnMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitFeGVj TWVyZ2VBcHBlbmRBc3luY0JlZ2luKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJLyogRXhl Y01lcmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFucyAqLworCUFzc2VydChub2Rl LT5tcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8qIEluaXRpYWxpemUgc3RhdGUg dmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2NvcHkobm9kZS0+bXMu dmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX2FzeW5j cmVtYWluKSkKKwkJcmV0dXJuOworCisJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbigmbm9kZS0+bXMp OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNH ZXROZXh0CisgKgorICogICAgICAgICAgICAgIEdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIHNwZWNp ZmllZCBhc3luY2hyb25vdXMgc3VicGxhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQK K0V4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQg bXBsYW4pCit7CisJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gTlVMTDsKKworCS8qIFJlcXVlc3Qg YSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8KKwlpZiAoRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1 ZXN0KG5vZGUsIG1wbGFuKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBub2RlLT5tc19hc3luY3Jl bWFpbiBjYW4gYmUgTlVMTCBpZiB3ZSBoYXZlIGZldGNoZWQgdHVwbGVzLCBidXQgaGF2ZW4ndAor CSAqIHJldHVybmVkIHRoZW0geWV0LiBJbiB0aGlzIGNhc2UgRXhlY01lcmdlQXBwZW5kQXN5bmNS ZXF1ZXN0KCkgYWJvdmUKKwkgKiBqdXN0IHJldHVybnMgdHVwbGVzIHdpdGhvdXQgcGVyZm9ybWlu ZyBhIHJlcXVlc3QuCisJICovCisJd2hpbGUgKGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1z X2FzeW5jcmVtYWluKSkKKwl7CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogV2Fp dCBvciBwb2xsIGZvciBhc3luYyBldmVudHMuICovCisJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jRXZl bnRXYWl0KG5vZGUpOworCisJCS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8K KwkJaWYgKEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikpCisJCQlyZXR1 cm47CisKKwkJLyoKKwkJICogV2FpdGluZyB1bnRpbCB0aGVyZSdzIG5vIGFzeW5jIHJlcXVlc3Rz IHBlbmRpbmcgb3Igd2UgZ290IHNvbWUKKwkJICogdHVwbGVzIGZyb20gb3VyIHJlcXVlc3QKKwkJ ICovCisJfQorCisJLyogTm8gdHVwbGVzICovCisJcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0CisgKgorICogICAgICAg ICAgICAgIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4KKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor c3RhdGljIGJvb2wKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVuZFN0YXRl ICpub2RlLCBpbnQgbXBsYW4pCit7CisJQml0bWFwc2V0ICAqbmVlZHJlcXVlc3Q7CisJaW50CQkJ aTsKKworCS8qCisJICogSWYgd2UndmUgYWxyZWFkeSBmZXRjaGVkIG5lY2Vzc2FyeSBkYXRhLCBq dXN0IHJldHVybiBpdAorCSAqLworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2RlLT5tc19o YXNfYXN5bmNyZXN1bHRzKSkKKwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5vZGUtPm1z LmFzeW5jcmVzdWx0c1ttcGxhbl07CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogR2V0 IGEgbGlzdCBvZiBtZW1iZXJzIHdoaWNoIGNhbiBwcm9jZXNzIHJlcXVlc3QgYW5kIGRvbid0IGhh dmUgZGF0YQorCSAqIHJlYWR5LgorCSAqLworCW5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlpID0gLTE7 CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LCBpKSkg Pj0gMCkKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1 bHRzKSkKKwkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpOwor CX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBtZW1iZXJzLCB3aGljaCBzdGlsbCBuZWVkIHJl cXVlc3QsIG5vIG5lZWQgdG8gc2VuZCBpdC4KKwkgKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5lZWRy ZXF1ZXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxh ZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCisJbm9kZS0+bXMubmVl ZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+bXMubmVlZHJlcXVlc3QsIG5lZWRyZXF1 ZXN0KTsKKworCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5bmMgc3Vi cGxhbnMgdGhhdCBuZWVkIGl0LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0g bm9kZS0+bXMuYXN5bmNyZXF1ZXN0c1tpXTsKKworCQkvKgorCQkgKiBXZSd2ZSBqdXN0IGNoZWNr ZWQgdGhhdCBzdWJwbGFuIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHNvbWUgZmV0Y2hlZAorCQkgKiBk YXRhCisJCSAqLworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfaGFzX2FzeW5j cmVzdWx0cykpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0FzeW5jUmVx dWVzdChhcmVxKTsKKwl9CisJYm1zX2ZyZWUobmVlZHJlcXVlc3QpOworCisJLyogUmV0dXJuIG5l ZWRlZCBhc3luY2hyb25vdXNseS1nZW5lcmF0ZWQgcmVzdWx0cyBpZiBhbnkuICovCisJaWYgKGJt c19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJbm9k ZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXMuYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAg ICAgICAgICAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZQorICoKKyAqICAgICAgICAgICAg ICBSZWNlaXZlIGEgcmVzcG9uc2UgZnJvbSBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB3ZSBtYWRl LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCit2b2lkCitFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFz eW5jUmVxdWVzdCAqYXJlcSkKK3sKKwlNZXJnZUFwcGVuZFN0YXRlICpub2RlID0gKE1lcmdlQXBw ZW5kU3RhdGUgKikgYXJlcS0+cmVxdWVzdG9yOworCVR1cGxlVGFibGVTbG90ICpzbG90ID0gYXJl cS0+cmVzdWx0OworCisJLyogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBUdXBsZVRhYmxlU2xvdCBv ciBOVUxMLiAqLworCUFzc2VydChzbG90ID09IE5VTEwgfHwgSXNBKHNsb3QsIFR1cGxlVGFibGVT bG90KSk7CisJLyogV2Ugc2hvdWxkIGhhbmRsZSBwcmV2aW91cyBhc3luYyByZXN1bHQgcHJpb3Ig dG8gZ2V0dGluZyBuZXcgb25lICovCisJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFyZXEtPnJlcXVl c3RfaW5kZXgsIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKTsKKworCW5vZGUtPm1zLmFzeW5j cmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IE5VTEw7CisJLyogTm90aGluZyB0byBkbyBp ZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5nLiAqLworCWlmICghYXJlcS0+cmVxdWVzdF9jb21wbGV0 ZSkKKwl7CisJCS8qIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiBwZW5kaW5nIGZvciBhIGNh bGxiYWNrLiAqLworCQlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisJCXJldHVybjsK Kwl9CisKKwkvKiBJZiB0aGUgcmVzdWx0IGlzIE5VTEwgb3IgYW4gZW1wdHkgc2xvdCwgdGhlcmUn cyBub3RoaW5nIG1vcmUgdG8gZG8uICovCisJaWYgKFR1cElzTnVsbChzbG90KSkKKwl7CisJCS8q IFRoZSBlbmRpbmcgc3VicGxhbiB3b3VsZG4ndCBoYXZlIGJlZW4gcGVuZGluZyBmb3IgYSBjYWxs YmFjay4gKi8KKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJbm9kZS0+bXNf YXN5bmNyZW1haW4gPSBibXNfZGVsX21lbWJlcihub2RlLT5tc19hc3luY3JlbWFpbiwKKwkJCQkJ CQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1hcmsg dGhhdCB0aGUgYXN5bmMgcmVxdWVzdCBoYXMgYSByZXN1bHQgKi8KKwlub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywKKwkJ CQkJCQkJCQkJICAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CisJLyogU2F2ZSByZXN1bHQgc28gd2Ug Y2FuIHJldHVybiBpdC4gKi8KKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9p bmRleF0gPSBzbG90OworCisJLyoKKwkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQgcmV0dXJuZWQg YSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQorCSAqIGRvbid0IGxhdW5j aCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQgY29tcGxldGUu CisJICovCisJbm9kZS0+bXMubmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihub2RlLT5tcy5u ZWVkcmVxdWVzdCwKKwkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQKKyAqCisgKgkJV2FpdCBv ciBwb2xsIGZvciBmaWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNrcy4KKyAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRXYWl0 KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxl ZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQoYm1z X251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+IDApOworCisJRXhlY0FwcGVuZGVy QXN5bmNFdmVudFdhaXQoJm5vZGUtPm1zLCAtMSAvKiBubyB0aW1lb3V0ICovICwgV0FJVF9FVkVO VF9BUFBFTkRfUkVBRFkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5k ZXggMWM1NzVlNTZmZjYuLmI2MTA5ZTViOTFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nv c3RzaXplLmMKQEAgLTE2NCw2ICsxNjQsNyBAQCBib29sCQllbmFibGVfcGFyYWxsZWxfaGFzaCA9 IHRydWU7CiBib29sCQllbmFibGVfcGFydGl0aW9uX3BydW5pbmcgPSB0cnVlOwogYm9vbAkJZW5h YmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUgPSB0cnVlOwogYm9vbAkJZW5hYmxlX2FzeW5jX2FwcGVu ZCA9IHRydWU7Citib29sCQllbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kID0gdHJ1ZTsKIAogdHlw ZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRl eCBiMjM2NDNmZWRiOC4uYjM0MGQxZGZkZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9j cmVhdGVwbGFuLmMKQEAgLTE0NjYsNiArMTQ2Niw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxh bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkg ICAqc3VicGxhbnMgPSBOSUw7CiAJTGlzdENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAq cmVsID0gYmVzdF9wYXRoLT5wYXRoLnBhcmVudDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZh bHNlOwogCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhl IE1lcmdlQXBwZW5kIG5vZGUgc3BsaXQgb3V0CkBAIC0xNDgxLDYgKzE0ODIsMTAgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJl c3RfcGF0aCwKIAlub2RlLT5hcC5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKIAlub2RlLT5hcC5j aGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJ CQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5n dGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAxKTsKKwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNv bHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAq IEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3RfaW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdu b3JlIHRoZQpAQCAtMTU4MSw2ICsxNTg2LDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQ bGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFu ID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyogSWYgbmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3Vi cGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2Fz eW5jKQorCQkJbWFya19hc3luY19jYXBhYmxlX3BsYW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJ c3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5zLCBzdWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggNmJlODBkMmRh YWQuLjE0MTE1N2NlNTFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50X25hbWVzLnR4dApAQCAtMTA2LDcgKzEwNiw3IEBAIEFCSV9jb21wYXRpYmlsaXR5Ogog CiBTZWN0aW9uOiBDbGFzc05hbWUgLSBXYWl0RXZlbnRJUEMKIAotQVBQRU5EX1JFQURZCSJXYWl0 aW5nIGZvciBzdWJwbGFuIG5vZGVzIG9mIGFuIDxsaXRlcmFsPkFwcGVuZDwvbGl0ZXJhbD4gcGxh biBub2RlIHRvIGJlIHJlYWR5LiIKK0FQUEVORF9SRUFEWQkiV2FpdGluZyBmb3Igc3VicGxhbiBu b2RlcyBvZiBhbiA8bGl0ZXJhbD5BcHBlbmQ8L2xpdGVyYWw+IG9yIGEgPGxpdGVyYWw+TWVyZ2VB cHBlbmQ8L2xpdGVyYWw+IHBsYW4gbm9kZSB0byBiZSByZWFkeS4iCiBBUkNISVZFX0NMRUFOVVBf Q09NTUFORAkiV2FpdGluZyBmb3IgPHhyZWYgbGlua2VuZD0iZ3VjLWFyY2hpdmUtY2xlYW51cC1j b21tYW5kIi8+IHRvIGNvbXBsZXRlLiIKIEFSQ0hJVkVfQ09NTUFORAkiV2FpdGluZyBmb3IgPHhy ZWYgbGlua2VuZD0iZ3VjLWFyY2hpdmUtY29tbWFuZCIvPiB0byBjb21wbGV0ZS4iCiBCQUNLRU5E X1RFUk1JTkFUSU9OCSJXYWl0aW5nIGZvciB0aGUgdGVybWluYXRpb24gb2YgYW5vdGhlciBiYWNr ZW5kLiIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGE4 NjI2OTNmY2QuLjk4NDg5NjRiMDI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdApAQCAtODYxLDYgKzg2MSwxNCBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9 LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQnLCB0eXBlID0+ICdib29s JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhP RCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGFzeW5j IG1lcmdlIGFwcGVuZCBwbGFucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJp YWJsZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCcsCisgIGJvb3RfdmFsID0+ICd0cnVl JywKK30sCisKKwogeyBuYW1lID0+ICdlbmFibGVfYml0bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wn LCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9E JywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgYml0bWFw LXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBjZjE1NTk3Mzg1Yi4uOWI4 ZGU4NTgxYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKQEAgLTQxMyw2ICs0MTMsNyBAQAogIyAtIFBsYW5uZXIgTWV0aG9kIENvbmZpZ3VyYXRp b24gLQogCiAjZW5hYmxlX2FzeW5jX2FwcGVuZCA9IG9uCisjZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCA9IG9uCiAjZW5hYmxlX2JpdG1hcHNjYW4gPSBvbgogI2VuYWJsZV9nYXRoZXJtZXJnZSA9 IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3Ivbm9kZU1lcmdlQXBwZW5kLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuaAppbmRleCBkZmNmNDUwOTliYS4uMjI1NWNjNjhiMjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xOSw1ICsxOSw2IEBACiBleHRlcm4gTWVyZ2VBcHBlbmRT dGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNw b25zZShBc3luY1JlcXVlc3QgKmFyZXEpOwogCiAjZW5kaWYJCQkJCQkJLyogTk9ERU1FUkdFQVBQ RU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMGI5M2MwMDQ3MjcuLjllMzExYTliNzlj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU3NSw4ICsxNTc1LDM1IEBAIHR5cGVkZWYgc3Ry dWN0IE1lcmdlQXBwZW5kU3RhdGUKIAlUdXBsZVRhYmxlU2xvdCAqKm1zX3Nsb3RzOwkvKiBhcnJh eSBvZiBsZW5ndGggbXNfbnBsYW5zICovCiAJc3RydWN0IGJpbmFyeWhlYXAgKm1zX2hlYXA7IC8q IGJpbmFyeSBoZWFwIG9mIHNsb3QgaW5kaWNlcyAqLwogCWJvb2wJCW1zX2luaXRpYWxpemVkOyAv KiBhcmUgc3VicGxhbnMgc3RhcnRlZD8gKi8KKworCS8qIE1lcmdlLXNwZWNpZmljIGFzeW5jIHRy YWNraW5nICovCisJQml0bWFwc2V0ICAqbXNfaGFzX2FzeW5jcmVzdWx0czsJLyogcGxhbnMgd2hp Y2ggaGF2ZSBhc3luYyByZXN1bHRzICovCisJQml0bWFwc2V0ICAqbXNfYXN5bmNyZW1haW47IC8q IHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAor LyogR2V0dGVycyBmb3IgQXBwZW5kU3RhdGUgYW5kIE1lcmdlQXBwZW5kU3RhdGUgKi8KK3N0YXRp YyBpbmxpbmUgc3RydWN0IFdhaXRFdmVudFNldCAqCitHZXRBcHBlbmRFdmVudFNldChQbGFuU3Rh dGUgKnBzKQoreworCUFzc2VydChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdl QXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgo QXBwZW5kU3RhdGUgKikgcHMpLT5hcy5ldmVudHNldDsKKwllbHNlCisJCXJldHVybiAoKE1lcmdl QXBwZW5kU3RhdGUgKikgcHMpLT5tcy5ldmVudHNldDsKK30KKworc3RhdGljIGlubGluZSBCaXRt YXBzZXQgKgorR2V0TmVlZFJlcXVlc3QoUGxhblN0YXRlICpwcykKK3sKKwlBc3NlcnQoSXNBKHBz LCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNB KHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXMubmVl ZHJlcXVlc3Q7CisJZWxzZQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXMu bmVlZHJlcXVlc3Q7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlv blN0YXRlIGluZm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1MDcu Ljc5OGFmMWZjZDVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9hc3luY19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNf bWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lv bjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0 Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0CmluZGV4IDEzMmI1NmE1ODY0Li40MjJjYThiN2QxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1Niw2ICsxNTYsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAg ICAgIG5hbWUgICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9u CisgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2Nh biAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9u CiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBA QCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAn ZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf c29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAg ICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdh aXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQK IC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2Ug bGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --00000000000086468f064e33a98a Content-Type: application/octet-stream; name="v16-0002-Common-infrastructure-to-MergeAppend-and-Append-.patch" Content-Disposition: attachment; filename="v16-0002-Common-infrastructure-to-MergeAppend-and-Append-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnci2jc71 RnJvbSA1ZDc4NmQyNGUwOWVmYmM3NDYzMDU4MzhhNWM1N2QzOGIwZWRjZmYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogTW9uLCAzMCBNYXIgMjAyNiAwMToyODozNCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjE2IDIvM10gQ29tbW9uIGluZnJhc3RydWN0dXJlIHRvIE1lcmdlQXBwZW5kIGFuZCBB cHBlbmQgbm9kZXMKClRoaXMgY29tbWl0IGludHJvZHVjZXMgdGhlIGV4ZWNBcHBlbmQuYyBmaWxl IHRvIGNlbnRyYWxpemUgZXhlY3V0b3IKb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0 d2VlbiBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kIG5vZGVzLgoKVGhlIGxvZ2ljIGZvciBpbml0aWFs aXppbmcgYW5kIGVuZGluZyB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgaW5pdGlhbGl6aW5nCmFzeW5j aHJvbm91cyBleGVjdXRpb24sIGlzIHZlcnkgc2ltaWxhciBmb3IgYm90aCBNZXJnZUFwcGVuZCBh bmQgQXBwZW5kLiAgVG8KcmVkdWNlIHJlZHVuZGFuY3ksIHRoZSBkdXBsaWNhdGVkIGNvZGUgaGFz IGJlZW4gbW92ZWQgdG8gZXhlY0FwcGVuZC5jLAphbGxvd2luZyB0aGVzZSBub2RlcyB0byByZXVz ZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uLgoKVGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIGFj dHVhbGx5IGZldGNoaW5nIHRoZSB0dXBsZXMgcmVtYWlucyBzcGVjaWZpYwp0byBlYWNoIG5vZGUg YW5kIHdhcyBub3QgcmVmYWN0b3JlZCBpbnRvIGV4ZWNBcHBlbmQuYyB0byBwcmVzZXJ2ZSB0aGUK dW5pcXVlIGV4ZWN1dGlvbiByZXF1aXJlbWVudHMgb2YgZWFjaCBub2RlIHR5cGUuCgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzU5YmUxOTRjNWE0MDlmYjlmYzlmMjAzMTU4MWI4YTQ0 JTQwcG9zdGdyZXNwcm8ucnUKQXV0aG9yOiBNYXRoZXVzIEFsY2FudGFyYSA8bWF0aGV1c3NzaWx2 OTdAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90 a292QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBQeWhhbG92IDxhLnB5aGFsb3ZA cG9zdGdyZXNwcm8ucnU+ClJldmlld2VkLWJ5OiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBw b3N0Z3Jlc3Byby5ydT4KLS0tCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWlu LmMgfCAgIDggKy0KIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMgICAgICB8ICAg NCArLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgIHwgICA4ICstCiBj b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgfCAgMTIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAyNiArLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3IvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVu ZC5jICAgICAgIHwgNDA0ICsrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNDdXJyZW50LmMgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1By b2Nub2RlLmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZCAg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgIHwg NTE0ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmMgIHwgMTg4ICsrLS0tLS0tLQogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNz LmMgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgfCAgNDYgKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAg fCAgNDggKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICB8ICAgOCArLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgIHwgIDcwICsrLS0KIHNyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICA2MyArKy0KIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICB8ICAgMiArCiAyMiBmaWxlcyBjaGFuZ2VkLCA3NTEgaW5zZXJ0 aW9ucygrKSwgNzM4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNBcHBlbmQuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v cGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4u YwppbmRleCBjMmI5MDQ5M2NjNi4uNzM2MTgzNGM1NDQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWlu L3BnX292ZXJleHBsYWluLmMKQEAgLTIzMiwxOCArMjMyLDE4IEBAIG92ZXJleHBsYWluX3Blcl9u b2RlX2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9BcHBlbmQ6CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQg UlRJcyIsCi0JCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJ CQkgICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJ CQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hpbGQgQXBwZW5kIFJUSXMiLAotCQkJCQkJ CQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJ CQkJCQkgICAoKEFwcGVuZCAqKSBwbGFuKS0+YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJ CQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJ CW92ZXJleHBsYWluX2JpdG1hcHNldCgiQXBwZW5kIFJUSXMiLAotCQkJCQkJCQkJICAoKE1lcmdl QXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikg cGxhbiktPmFwLmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOwogCQkJCW92ZXJleHBsYWluX2Jp dG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkJICAgKChNZXJnZUFw cGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJCQkJICAgKChN ZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJ CQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX1Jlc3VsdDoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5jCmluZGV4IDVmMjEwZjJiNzI1Li4xOGI0ZWYwZmIwMyAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYworKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0xNDIsNyArMTQyLDcgQEAgcGdwYV9idWlsZF9zY2FuKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAogCiAJCQkJLyogQmUg c3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCiAJCQkJY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMgPQotCQkJCQkoKEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHM7CisJCQkJCSgoQXBwZW5kICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 czsKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQkvKiBTYW1lIGxvZ2lj IGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJvdmUuICovCkBAIC0xNTQsNyArMTU0LDcgQEAgcGdwYV9i dWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAog CiAJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCiAJCQkJ Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQotCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5j aGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQkJKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtl ci5jCmluZGV4IGUzMjY4NGQyMDc1Li5mMWJkNjYxNzAwNSAxMDA2NDQKLS0tIGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV93YWxrZXIuYwpAQCAtNDQwLDE0ICs0NDAsMTQgQEAgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5 KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAogCQkJewogCQkJ CUFwcGVuZAkgICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CiAKLQkJCQlleHRyYXBsYW5zID0g YXBsYW4tPmFwcGVuZHBsYW5zOworCQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+YXAuc3VicGxhbnM7 CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJewogCQkJCU1lcmdl QXBwZW5kICptYXBsYW4gPSAoTWVyZ2VBcHBlbmQgKikgcGxhbjsKIAotCQkJCWV4dHJhcGxhbnMg PSBtYXBsYW4tPm1lcmdlcGxhbnM7CisJCQkJZXh0cmFwbGFucyA9IG1hcGxhbi0+YXAuc3VicGxh bnM7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEFuZDoKQEAgLTU3MCw5ICs1NzAs OSBAQCBwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKQogCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWdu U2NhbikpCiAJCXJldHVybiAoKEZvcmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CiAJZWxz ZSBpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCi0JCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzOworCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkczsKIAllbHNl IGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQotCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBw bGFuKS0+YXBwcmVsaWRzOworCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuYXBw cmVsaWRzOwogCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j CmluZGV4IDQxZTQ3Y2M3OTViLi43NDE2ZDA5YzdlMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMKQEAgLTI0MTMsOCArMjQxMyw4IEBAIGZpbmRfbW9kaWZ5dGFibGVfc3VicGxhbihQ bGFubmVySW5mbyAqcm9vdCwKIAl7CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxhbiA9IChBcHBlbmQg Kikgc3VicGxhbjsKIAotCQlpZiAoc3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBs YW4tPmFwcGVuZHBsYW5zKSkKLQkJCXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRw bGFuLT5hcHBlbmRwbGFucywgc3VicGxhbl9pbmRleCk7CisJCWlmIChzdWJwbGFuX2luZGV4IDwg bGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YXAuc3VicGxhbnMpKQorCQkJc3VicGxhbiA9IChQbGFu ICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zLCBzdWJwbGFuX2luZGV4KTsKIAl9 CiAJZWxzZSBpZiAoSXNBKHN1YnBsYW4sIFJlc3VsdCkgJiYKIAkJCSBvdXRlclBsYW4oc3VicGxh bikgIT0gTlVMTCAmJgpAQCAtMjQyMiw4ICsyNDIyLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJw bGFuKFBsYW5uZXJJbmZvICpyb290LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFw cGVuZCAqKSBvdXRlclBsYW4oc3VicGxhbik7CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0 X2xlbmd0aChhcHBlbmRwbGFuLT5hcHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikg bGlzdF9udGgoYXBwZW5kcGxhbi0+YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAo c3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJ CXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3Vi cGxhbl9pbmRleCk7CiAJfQogCiAJLyogTm93LCBoYXZlIHdlIGdvdCBhIEZvcmVpZ25TY2FuIG9u IHRoZSBkZXNpcmVkIHJlbD8gKi8KQEAgLTcyMTUsNyArNzIxNSw3IEBAIHBvc3RncmVzRm9yZWln bkFzeW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJUGdGZHdTY2FuU3RhdGUg KmZzc3RhdGUgPSAoUGdGZHdTY2FuU3RhdGUgKikgbm9kZS0+ZmR3X3N0YXRlOwogCUFzeW5jUmVx dWVzdCAqcGVuZGluZ0FyZXEgPSBmc3N0YXRlLT5jb25uX3N0YXRlLT5wZW5kaW5nQXJlcTsKIAlB cHBlbmRTdGF0ZSAqcmVxdWVzdG9yID0gKEFwcGVuZFN0YXRlICopIGFyZXEtPnJlcXVlc3RvcjsK LQlXYWl0RXZlbnRTZXQgKnNldCA9IHJlcXVlc3Rvci0+YXNfZXZlbnRzZXQ7CisJV2FpdEV2ZW50 U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzLmV2ZW50c2V0OwogCiAJLyogVGhpcyBzaG91bGQgbm90 IGJlIGNhbGxlZCB1bmxlc3MgY2FsbGJhY2tfcGVuZGluZyAqLwogCUFzc2VydChhcmVxLT5jYWxs YmFja19wZW5kaW5nKTsKQEAgLTcyNTcsNyArNzI1Nyw3IEBAIHBvc3RncmVzRm9yZWlnbkFzeW5j Q29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNlIHdl IG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkgKiBv dGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFibXNf aXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2VtcHR5 KHJlcXVlc3Rvci0+YXMubmVlZHJlcXVlc3QpKQogCQkJcmV0dXJuOwogCQlpZiAoR2V0TnVtUmVn aXN0ZXJlZFdhaXRFdmVudHMoc2V0KSA+IDEpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMKaW5kZXggZTRiNzAxNjZiMGUuLmEwZWQ4YzNmYzNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC0xMjI4LDExICsxMjI4LDExIEBAIEV4cGxhaW5QcmVTY2FuTm9kZShQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgQml0bWFwc2V0ICoqcmVsc191c2VkKQogCQkJYnJlYWs7CiAJCWNhc2UgVF9BcHBl bmQ6CiAJCQkqcmVsc191c2VkID0gYm1zX2FkZF9tZW1iZXJzKCpyZWxzX3VzZWQsCi0JCQkJCQkJ CQkJICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMpOworCQkJCQkJCQkJCSAoKEFwcGVuZCAq KSBwbGFuKS0+YXAuYXBwcmVsaWRzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6 CiAJCQkqcmVsc191c2VkID0gYm1zX2FkZF9tZW1iZXJzKCpyZWxzX3VzZWQsCi0JCQkJCQkJCQkJ ICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJICgoTWVyZ2VB cHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX1Jlc3Vs dDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJlbHNfdXNlZCwKQEAgLTEyNzYs NyArMTI3Niw3IEBAIHBsYW5faXNfZGlzYWJsZWQoUGxhbiAqcGxhbikKIAkJICogaW5jbHVkZXMg YW55IHJ1bi10aW1lIHBydW5lZCBjaGlsZHJlbi4gIElnbm9yaW5nIHRob3NlIGNvdWxkIGdpdmUK IAkJICogdXMgdGhlIGluY29ycmVjdCBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMuCiAJCSAqLwot CQlmb3JlYWNoKGxjLCBhcGxhbi0+YXBwZW5kcGxhbnMpCisJCWZvcmVhY2gobGMsIGFwbGFuLT5h cC5zdWJwbGFucykKIAkJewogCQkJUGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CiAKQEAg LTEyOTMsNyArMTI5Myw3IEBAIHBsYW5faXNfZGlzYWJsZWQoUGxhbiAqcGxhbikKIAkJICogaW5j bHVkZXMgYW55IHJ1bi10aW1lIHBydW5lZCBjaGlsZHJlbi4gIElnbm9yaW5nIHRob3NlIGNvdWxk IGdpdmUKIAkJICogdXMgdGhlIGluY29ycmVjdCBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMuCiAJ CSAqLwotCQlmb3JlYWNoKGxjLCBtYXBsYW4tPm1lcmdlcGxhbnMpCisJCWZvcmVhY2gobGMsIG1h cGxhbi0+YXAuc3VicGxhbnMpCiAJCXsKIAkJCVBsYW4JICAgKnN1YnBsYW4gPSBsZmlyc3QobGMp OwogCkBAIC0yMzQwLDEzICsyMzQwLDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2Fz ZSBUX0FwcGVuZDoKLQkJCUV4cGxhaW5NaXNzaW5nTWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBs YW5zdGF0ZSktPmFzX25wbGFucywKLQkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKEFwcGVuZCAqKSBw bGFuKS0+YXBwZW5kcGxhbnMpLAorCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgoQXBwZW5kU3Rh dGUgKikgcGxhbnN0YXRlKS0+YXMubnBsYW5zLAorCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKCgoQXBw ZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyksCiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJ CWNhc2UgVF9NZXJnZUFwcGVuZDoKLQkJCUV4cGxhaW5NaXNzaW5nTWVtYmVycygoKE1lcmdlQXBw ZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXNfbnBsYW5zLAotCQkJCQkJCQkgIGxpc3RfbGVuZ3Ro KCgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPm1lcmdlcGxhbnMpLAorCQkJRXhwbGFpbk1pc3NpbmdN ZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCisJCQkJ CQkJCSAgbGlzdF9sZW5ndGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpLAog CQkJCQkJCQkgIGVzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMjM5MCwxMyArMjM5MCwx MyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAog CXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlFeHBsYWlu TWVtYmVyTm9kZXMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcHBlbmRwbGFucywKLQkJ CQkJCQkgICAoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzX25wbGFucywKKwkJCUV4cGxh aW5NZW1iZXJOb2RlcygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJ CQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXMubnBsYW5zLAogCQkJCQkJCSAg IGFuY2VzdG9ycywgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKLQkJCUV4 cGxhaW5NZW1iZXJOb2RlcygoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bWVyZ2Vw bGFucywKLQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXNfbnBs YW5zLAorCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3Rh dGUpLT5tcy5wbGFucywKKwkJCQkJCQkgICAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRl KS0+bXMubnBsYW5zLAogCQkJCQkJCSAgIGFuY2VzdG9ycywgZXMpOwogCQkJYnJlYWs7CiAJCWNh c2UgVF9CaXRtYXBBbmQ6CkBAIC0yNjEwLDcgKzI2MTAsNyBAQCBzdGF0aWMgdm9pZAogc2hvd19t ZXJnZV9hcHBlbmRfa2V5cyhNZXJnZUFwcGVuZFN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9y cywKIAkJCQkJICAgRXhwbGFpblN0YXRlICplcykKIHsKLQlNZXJnZUFwcGVuZCAqcGxhbiA9IChN ZXJnZUFwcGVuZCAqKSBtc3RhdGUtPnBzLnBsYW47CisJTWVyZ2VBcHBlbmQgKnBsYW4gPSAoTWVy Z2VBcHBlbmQgKikgbXN0YXRlLT5tcy5wcy5wbGFuOwogCiAJc2hvd19zb3J0X2dyb3VwX2tleXMo KFBsYW5TdGF0ZSAqKSBtc3RhdGUsICJTb3J0IEtleSIsCiAJCQkJCQkgcGxhbi0+bnVtQ29scywg MCwgcGxhbi0+c29ydENvbElkeCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKaW5kZXggMTExMThkMGNlMDIu LjY2YjYyZmNhOTIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWV4ZWNB bWkubyBcCiAJZXhlY0FzeW5jLm8gXAorCWV4ZWNBcHBlbmQubyBcCiAJZXhlY0N1cnJlbnQubyBc CiAJZXhlY0V4cHIubyBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMK aW5kZXggMzdmZTAzZmRjMzcuLjIzY2IyZjgyMjgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBA IC01MzgsNyArNTM4LDcgQEAgRXhlY1N1cHBvcnRzQmFja3dhcmRTY2FuKFBsYW4gKm5vZGUpCiAJ CQkJaWYgKCgoQXBwZW5kICopIG5vZGUpLT5uYXN5bmNwbGFucyA+IDApCiAJCQkJCXJldHVybiBm YWxzZTsKIAotCQkJCWZvcmVhY2gobCwgKChBcHBlbmQgKikgbm9kZSktPmFwcGVuZHBsYW5zKQor CQkJCWZvcmVhY2gobCwgKChBcHBlbmQgKikgbm9kZSktPmFwLnN1YnBsYW5zKQogCQkJCXsKIAkJ CQkJaWYgKCFFeGVjU3VwcG9ydHNCYWNrd2FyZFNjYW4oKFBsYW4gKikgbGZpcnN0KGwpKSkKIAkJ CQkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB cHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjIzM2RiZTdiMzAKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXBwZW5kLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV4ZWNBcHBlbmQuYworICoJICBUaGlzIGNvZGUgcHJv dmlkZXMgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBNZXJnZUFwcGVuZCBhbmQKKyAq CSAgQXBwZW5kIG5vZGVzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Fw cGVuZC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgorI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWNBc3luYy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKKyNpbmNs dWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5oIgor CisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCQkJMTYKKworLyogIEJlZ2luIGFsbCBvZiB0aGUg c3Vic2NhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4gKi8KK3ZvaWQKK0V4ZWNJbml0QXBwZW5kZXIo QXBwZW5kZXJTdGF0ZSAqc3RhdGUsCisJCQkJIEFwcGVuZGVyICpub2RlLAorCQkJCSBFU3RhdGUg KmVzdGF0ZSwKKwkJCQkgaW50IGVmbGFncywKKwkJCQkgaW50IGZpcnN0X3BhcnRpYWxfcGxhbiwK KwkJCQkgaW50ICpmaXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4pCit7CisJUGxhblN0YXRlICoqYXBw ZW5kcGxhbnN0YXRlczsKKwljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOworCUJp dG1hcHNldCAgKnZhbGlkc3VicGxhbnM7CisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKKwlpbnQJ CQlucGxhbnM7CisJaW50CQkJbmFzeW5jcGxhbnM7CisJaW50CQkJZmlyc3R2YWxpZDsKKwlpbnQJ CQlpLAorCQkJCWo7CisKKwkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFi bGVkLCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLworCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZGV4 ID49IDApCisJeworCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCisJCS8qCisJ CSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVz IHRoZSBzZXQgb2YKKwkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykg YnkgdGFraW5nIGludG8gYWNjb3VudCB0aGUKKwkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5p dGlhbCBwcnVuaW5nIGlmIGFueS4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRp dGlvbkV4ZWNQcnVuaW5nKCZzdGF0ZS0+cHMsCisJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5v ZGUtPnN1YnBsYW5zKSwKKwkJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKKwkJ CQkJCQkJCQkJCSAgbm9kZS0+YXBwcmVsaWRzLAorCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFu cyk7CisJCXN0YXRlLT5wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7CisJCW5wbGFucyA9IGJtc19u dW1fbWVtYmVycyh2YWxpZHN1YnBsYW5zKTsKKworCQkvKgorCQkgKiBXaGVuIG5vIHJ1bi10aW1l IHBydW5pbmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCisJCSAqIHN1YnBs YW4sIHdlIGNhbiBmaWxsIHZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nIGxh dGVyCisJCSAqIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KKwkJICovCisJCWlm ICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQl7CisJCQlzdGF0 ZS0+dmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwor CQkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CisJfQorCWVs c2UKKwl7CisJCW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPnN1YnBsYW5zKTsKKworCQkvKgor CQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNh biBqdXN0IG1hcmsgYWxsCisJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBh bGwgYmUgaW5pdGlhbGl6ZWQuCisJCSAqLworCQlBc3NlcnQobnBsYW5zID4gMCk7CisJCXN0YXRl LT52YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQorCQkJYm1zX2FkZF9yYW5nZShOVUxM LCAwLCBucGxhbnMgLSAxKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0 cnVlOworCQlzdGF0ZS0+cHJ1bmVfc3RhdGUgPSBOVUxMOworCX0KKworCWFwcGVuZHBsYW5zdGF0 ZXMgPSBwYWxsb2MwX2FycmF5KFBsYW5TdGF0ZSAqLCBucGxhbnMpOworCisJLyoKKwkgKiBjYWxs IEV4ZWNJbml0Tm9kZSBvbiBlYWNoIG9mIHRoZSB2YWxpZCBwbGFucyB0byBiZSBleGVjdXRlZCBh bmQgc2F2ZQorCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIGFwcGVuZHBsYW5zdGF0ZXMgYXJyYXku CisJICoKKwkgKiBXaGlsZSBhdCBpdCwgZmluZCBvdXQgdGhlIGZpcnN0IHZhbGlkIHBhcnRpYWwg cGxhbi4KKwkgKi8KKwlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVMTDsKKwluYXN5bmNwbGFucyA9 IDA7CisJZmlyc3R2YWxpZCA9IG5wbGFuczsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJUGxhbgkgICAqaW5pdE5v ZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5zdWJwbGFucywgaSk7CisKKwkJLyoKKwkJICog UmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0 cmVhdCB0aGVtCisJCSAqIGFzIHN5bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxp emluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgorCQkgKiB0cmVlLgorCQkgKi8KKwkJaWYgKGluaXRO b2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKQorCQl7 CisJCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5bmNwbGFucywgaik7CisJCQluYXN5 bmNwbGFucysrOworCQl9CisKKwkJLyoKKwkJICogUmVjb3JkIHRoZSBsb3dlc3QgYXBwZW5kcGxh bnMgaW5kZXggd2hpY2ggaXMgYSB2YWxpZCBwYXJ0aWFsIHBsYW4uCisJCSAqLworCQlpZiAoZmly c3RfdmFsaWRfcGFydGlhbF9wbGFuICYmIGkgPj0gZmlyc3RfcGFydGlhbF9wbGFuICYmIGogPCBm aXJzdHZhbGlkKQorCQkJZmlyc3R2YWxpZCA9IGo7CisKKwkJYXBwZW5kcGxhbnN0YXRlc1tqKytd ID0gRXhlY0luaXROb2RlKGluaXROb2RlLCBlc3RhdGUsIGVmbGFncyk7CisJfQorCisJaWYgKGZp cnN0X3ZhbGlkX3BhcnRpYWxfcGxhbikKKwkJKmZpcnN0X3ZhbGlkX3BhcnRpYWxfcGxhbiA9IGZp cnN0dmFsaWQ7CisKKwlzdGF0ZS0+cGxhbnMgPSBhcHBlbmRwbGFuc3RhdGVzOworCXN0YXRlLT5u cGxhbnMgPSBucGxhbnM7CisKKwkvKgorCSAqIEluaXRpYWxpemUgQXBwZW5kJ3MgcmVzdWx0IHR1 cGxlIHR5cGUgYW5kIHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCisJICogcHJvZHVjZSB0 aGUgc2FtZSBmaXhlZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7IG90aGVy d2lzZQorCSAqIG1ha2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1bHQgc2xv dCBpdHNlbGYgaXMgdXNlZCBvbmx5IHRvCisJICogcmV0dXJuIGEgbnVsbCB0dXBsZSBhdCBlbmQg b2YgZXhlY3V0aW9uOyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KKwkgKiB0aGUgY2FsbGVy IGluIHRoZSBjaGlsZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZSBkb2luZyBo ZXJlCisJICogaXMgYWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1pemUgaWYg dGhlIEFwcGVuZCB3aWxsIHJldHVybgorCSAqIG9ubHkgb25lIGtpbmQgb2Ygc2xvdC4pCisJICov CisJYXBwZW5kb3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxhbnN0YXRlcywgaik7 CisJaWYgKGFwcGVuZG9wcyAhPSBOVUxMKQorCXsKKwkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RU TCgmc3RhdGUtPnBzLCBhcHBlbmRvcHMpOworCX0KKwllbHNlCisJeworCQlFeGVjSW5pdFJlc3Vs dFR1cGxlU2xvdFRMKCZzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKKwkJLyogc2hvdyB0aGF0 IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLworCQlzdGF0ZS0+cHMucmVzdWx0 b3Bzc2V0ID0gdHJ1ZTsKKwkJc3RhdGUtPnBzLnJlc3VsdG9wc2ZpeGVkID0gZmFsc2U7CisJfQor CisJLyogSW5pdGlhbGl6ZSBhc3luYyBzdGF0ZSAqLworCXN0YXRlLT5hc3luY3BsYW5zID0gYXN5 bmNwbGFuczsKKwlzdGF0ZS0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwlzdGF0ZS0+YXN5 bmNyZXF1ZXN0cyA9IE5VTEw7CisJc3RhdGUtPmFzeW5jcmVzdWx0cyA9IE5VTEw7CisJc3RhdGUt Pm5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlzdGF0ZS0+ZXZlbnRzZXQgPSBOVUxMOworCXN0YXRlLT52 YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKKworCWlmIChuYXN5bmNwbGFucyA+IDApCisJeworCQlz dGF0ZS0+YXN5bmNyZXF1ZXN0cyA9IHBhbGxvYzBfYXJyYXkoQXN5bmNSZXF1ZXN0ICosIG5wbGFu cyk7CisKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFu cywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKKworCQkJYXJlcSA9IHBh bGxvY19vYmplY3QoQXN5bmNSZXF1ZXN0KTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3Rh dGUgKikgc3RhdGU7CisJCQlhcmVxLT5yZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOwor CQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOworCisJCQlzdGF0ZS0+YXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKwor CQlzdGF0ZS0+YXN5bmNyZXN1bHRzID0gcGFsbG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBu cGxhbnMpOworCX0KKworCS8qCisJICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgorCSAq LworCXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7Cit9CisKK3ZvaWQKK0V4ZWNSZVNjYW5B cHBlbmRlcihBcHBlbmRlclN0YXRlICpub2RlKQoreworCWludAkJCWk7CisJaW50CQkJbmFzeW5j cGxhbnMgPSBub2RlLT5uYXN5bmNwbGFuczsKKworCS8qCisJICogSWYgYW55IFBBUkFNX0VYRUMg UGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KKwkg KiB3ZSdkIGJldHRlciB1bnNldCB0aGUgdmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSBy ZXNlbGVjdGVkIGZvcgorCSAqIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcy4KKwkgKi8KKwlpZiAo bm9kZS0+cHJ1bmVfc3RhdGUgJiYKKwkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCisJ CQkJCW5vZGUtPnBydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQorCXsKKwkJbm9kZS0+dmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IGZhbHNlOworCQlibXNfZnJlZShub2RlLT52YWxpZF9zdWJw bGFucyk7CisJCW5vZGUtPnZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+ dmFsaWRfYXN5bmNwbGFucyk7CisJCW5vZGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBub2RlLT5ucGxhbnM7IGkrKykKKwl7CisJCVBsYW5TdGF0ZSAg KnN1Ym5vZGUgPSBub2RlLT5wbGFuc1tpXTsKKworCQkvKgorCQkgKiBFeGVjUmVTY2FuIGRvZXNu J3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCisJCSAqIGNoYW5nZWQt cGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCisJCSAqLworCQlpZiAobm9kZS0+cHMuY2hnUGFy YW0gIT0gTlVMTCkKKwkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5j aGdQYXJhbSk7CisKKwkJLyoKKwkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVs bCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5CisJCSAqIGZpcnN0IEV4ZWNQcm9jTm9k ZS4KKwkJICovCisJCWlmIChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQorCQkJRXhlY1JlU2Nh bihzdWJub2RlKTsKKwl9CisKKwkvKiBSZXNldCBhc3luYyBzdGF0ZSAqLworCWlmIChuYXN5bmNw bGFucyA+IDApCisJeworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihu b2RlLT5hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0g bm9kZS0+YXN5bmNyZXF1ZXN0c1tpXTsKKworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZh bHNlOworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0 ID0gTlVMTDsKKwkJfQorCisJCWJtc19mcmVlKG5vZGUtPm5lZWRyZXF1ZXN0KTsKKwkJbm9kZS0+ bmVlZHJlcXVlc3QgPSBOVUxMOworCX0KK30KKworLyogIFdhaXQgb3IgcG9sbCBmb3IgZmlsZSBk ZXNjcmlwdG9yIGV2ZW50cyBhbmQgZmlyZSBjYWxsYmFja3MuICovCit2b2lkCitFeGVjQXBwZW5k ZXJBc3luY0V2ZW50V2FpdChBcHBlbmRlclN0YXRlICpub2RlLCBpbnQgdGltZW91dCwgdWludDMy IHdhaXRfZXZlbnRfaW5mbykKK3sKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+bmFzeW5jcGxhbnMg KyAyOwkvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJCQkJCQkJCSAqIG9uZSBmb3IgbGF0 Y2ggKi8KKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKwlXYWl0RXZlbnQJb2NjdXJyZWRf ZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOworCisJQXNzZXJ0KG5vZGUtPmV2ZW50c2V0ID09IE5V TEwpOworCisJbm9kZS0+ZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291 cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmV2ZW50c2V0LCBX TF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEwsIE5VTEwp OworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZl bnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc3lu Y3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzeW5j cmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQlFeGVjQXN5 bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVlZCBmb3IgZnVydGhl ciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55CisJICog ZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5ldmVu dHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOworCQlu b2RlLT5ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUg cHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0 aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4K KwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRo YXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNB c3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkgKiBwb3N0Z3Jlc19mZHcgY2Fs bHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKKwkg KiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24s IGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0 IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBU aGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKKwkgKiBleHRlbnNp b25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5ldmVudHNldCwgV0xfTEFU Q0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0Y2gsIE5VTEwpOworCisJLyog UmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwor CWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5ldmVudHMgPSBFVkVOVF9CVUZG RVJfU0laRTsKKworCS8qIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4gKi8K Kwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPmV2ZW50c2V0LCB0aW1lb3V0LCBv Y2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIHdhaXRfZXZlbnRfaW5mbyk7CisKKwor CUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOworCW5vZGUtPmV2ZW50c2V0ID0gTlVM TDsKKwlpZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKworCisJLyogRGVsaXZlciBub3Rp ZmljYXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdh aXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0 aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJ CSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLwor CQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5 bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlm IChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogTWFyayBpdCBh cyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICog YmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNl dHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5n ID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5j Tm90aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVw dHMgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisJfQor fQorCisvKiAgQmVnaW4gZXhlY3V0aW5nIGFzeW5jLWNhcGFibGUgc3VicGxhbnMuICovCit2b2lk CitFeGVjQXBwZW5kZXJBc3luY0JlZ2luKEFwcGVuZGVyU3RhdGUgKm5vZGUpCit7CisJaW50CQkJ aTsKKworCS8qIEJhY2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRlZCBieSBhc3luYy1hd2FyZSBB cHBlbmRzLiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRl LT5lc19kaXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0 aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bnBsYW5zID4gMCk7CisKKwkv KiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBs YW5zLiAqLworCUFzc2VydChub2RlLT5uYXN5bmNwbGFucyA+IDApOworCisJLyogTWFrZSBhIHJl cXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAtMTsK Kwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+dmFsaWRfYXN5bmNwbGFucywgaSkp ID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc3luY3JlcXVlc3RzW2ld OworCisJCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3NlcnQoIWFyZXEt PmNhbGxiYWNrX3BlbmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhl Y0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9Cit9CisKKy8qICBTaHV0cyBkb3duIHRoZSBzdWJwbGFu cyBvZiBhbiBBcHBlbmRlciBub2RlLiAqLwordm9pZAorRXhlY0VuZEFwcGVuZGVyKEFwcGVuZGVy U3RhdGUgKm5vZGUpCit7CisJUGxhblN0YXRlICoqc3VicGxhbnM7CisJaW50CQkJbnBsYW5zOwor CWludAkJCWk7CisKKwkvKgorCSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCisJICov CisJc3VicGxhbnMgPSBub2RlLT5wbGFuczsKKwlucGxhbnMgPSBub2RlLT5ucGxhbnM7CisKKwkv KgorCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucworCSAqLworCWZvciAoaSA9IDA7 IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY0VuZE5vZGUoc3VicGxhbnNbaV0pOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNDdXJyZW50LmMKaW5kZXggOTlmMmIyZDBjNmYuLjM3ZjVjN2ZkMmM1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMKQEAgLTM3NSw5ICszNzUsOSBAQCBzZWFyY2hfcGxh bl90cmVlKFBsYW5TdGF0ZSAqbm9kZSwgT2lkIHRhYmxlX29pZCwKIAkJCQlBcHBlbmRTdGF0ZSAq YXN0YXRlID0gKEFwcGVuZFN0YXRlICopIG5vZGU7CiAJCQkJaW50CQkJaTsKIAotCQkJCWZvciAo aSA9IDA7IGkgPCBhc3RhdGUtPmFzX25wbGFuczsgaSsrKQorCQkJCWZvciAoaSA9IDA7IGkgPCBh c3RhdGUtPmFzLm5wbGFuczsgaSsrKQogCQkJCXsKLQkJCQkJU2NhblN0YXRlICAqZWxlbSA9IHNl YXJjaF9wbGFuX3RyZWUoYXN0YXRlLT5hcHBlbmRwbGFuc1tpXSwKKwkJCQkJU2NhblN0YXRlICAq ZWxlbSA9IHNlYXJjaF9wbGFuX3RyZWUoYXN0YXRlLT5hcy5wbGFuc1tpXSwKIAkJCQkJCQkJCQkJ CQkJdGFibGVfb2lkLAogCQkJCQkJCQkJCQkJCQlwZW5kaW5nX3Jlc2Nhbik7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggZDM1OTc2OTI1YWUuLjgyODJlODY2MzViIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwpAQCAtOTExLDggKzkxMSw4IEBAIEV4ZWNTZXRU dXBsZUJvdW5kKGludDY0IHR1cGxlc19uZWVkZWQsIFBsYW5TdGF0ZSAqY2hpbGRfbm9kZSkKIAkJ QXBwZW5kU3RhdGUgKmFTdGF0ZSA9IChBcHBlbmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJ CQlpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBhU3RhdGUtPmFzX25wbGFuczsgaSsrKQotCQkJRXhl Y1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgYVN0YXRlLT5hcHBlbmRwbGFuc1tpXSk7CisJ CWZvciAoaSA9IDA7IGkgPCBhU3RhdGUtPmFzLm5wbGFuczsgaSsrKQorCQkJRXhlY1NldFR1cGxl Qm91bmQodHVwbGVzX25lZWRlZCwgYVN0YXRlLT5hcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYg KElzQShjaGlsZF9ub2RlLCBNZXJnZUFwcGVuZFN0YXRlKSkKIAl7CkBAIC05MjQsOCArOTI0LDgg QEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGls ZF9ub2RlKQogCQlNZXJnZUFwcGVuZFN0YXRlICptYVN0YXRlID0gKE1lcmdlQXBwZW5kU3RhdGUg KikgY2hpbGRfbm9kZTsKIAkJaW50CQkJaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbWFTdGF0ZS0+ bXNfbnBsYW5zOyBpKyspCi0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBtYVN0 YXRlLT5tZXJnZXBsYW5zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IG1hU3RhdGUtPm1zLm5wbGFu czsgaSsrKQorCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgbWFTdGF0ZS0+bXMu cGxhbnNbaV0pOwogCX0KIAllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgUmVzdWx0U3RhdGUpKQog CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQKaW5kZXggZGM0NWJlMGIyY2UuLjA2MTkxYjIyMTQy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAorKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZApAQCAtMyw2ICszLDcgQEAKIGJhY2tlbmRfc291 cmNlcyArPSBmaWxlcygKICAgJ2V4ZWNBbWkuYycsCiAgICdleGVjQXN5bmMuYycsCisgICdleGVj QXBwZW5kLmMnLAogICAnZXhlY0N1cnJlbnQuYycsCiAgICdleGVjRXhwci5jJywKICAgJ2V4ZWNF eHBySW50ZXJwLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDg1Yzg1NTY5YjVl Li45NzVhZTg3YTAzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtNTcsNiArNTcs NyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNB cHBlbmQuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAg LTExMSwxNSArMTEyLDYgQEAgQXBwZW5kU3RhdGUgKgogRXhlY0luaXRBcHBlbmQoQXBwZW5kICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlBcHBlbmRTdGF0ZSAqYXBwZW5k c3RhdGUgPSBtYWtlTm9kZShBcHBlbmRTdGF0ZSk7Ci0JUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0 YXRlczsKLQljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOwotCUJpdG1hcHNldCAg KnZhbGlkc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKLQlpbnQJCQlucGxhbnM7 Ci0JaW50CQkJbmFzeW5jcGxhbnM7Ci0JaW50CQkJZmlyc3R2YWxpZDsKLQlpbnQJCQlpLAotCQkJ CWo7CiAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxh Z3MgJiBFWEVDX0ZMQUdfTUFSSykpOwpAQCAtMTI3LDE2NyArMTE5LDI3IEBAIEV4ZWNJbml0QXBw ZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJLyoKIAkgKiBj cmVhdGUgbmV3IEFwcGVuZFN0YXRlIGZvciBvdXIgYXBwZW5kIG5vZGUKIAkgKi8KLQlhcHBlbmRz dGF0ZS0+cHMucGxhbiA9IChQbGFuICopIG5vZGU7Ci0JYXBwZW5kc3RhdGUtPnBzLnN0YXRlID0g ZXN0YXRlOwotCWFwcGVuZHN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjQXBwZW5kOworCWFw cGVuZHN0YXRlLT5hcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsKKwlhcHBlbmRzdGF0ZS0+YXMu cHMuc3RhdGUgPSBlc3RhdGU7CisJYXBwZW5kc3RhdGUtPmFzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNBcHBlbmQ7CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRs ZSBzZXR0aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCiAJYXBwZW5kc3RhdGUtPmFzX3doaWNocGxh biA9IElOVkFMSURfU1VCUExBTl9JTkRFWDsKIAlhcHBlbmRzdGF0ZS0+YXNfc3luY2RvbmUgPSBm YWxzZTsKIAlhcHBlbmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAotCS8qIElmIHJ1bi10aW1l IHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0J aWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3Rh dGUgKnBydW5lc3RhdGU7Ci0KLQkJLyoKLQkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1 cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgotCQkgKiBzdWJwbGFucyB0byBp bml0aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQotCQkg KiByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgotCQkgKi8KLQkJ cHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJmFwcGVuZHN0YXRlLT5w cywKLQkJCQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJ CQkJCQkJICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHBy ZWxpZHMsCi0JCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKLQkJYXBwZW5kc3RhdGUtPmFz X3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKLQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZh bGlkc3VicGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyBy ZXF1aXJlZCBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZp bGwgYXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIg Y2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgotCQkgKi8KLQkJaWYgKCFwcnVuZXN0 YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCi0JCXsKLQkJCWFwcGVuZHN0YXRlLT5h c192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0J CQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCX0K LQl9Ci0JZWxzZQotCXsKLQkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMp OwotCi0JCS8qCi0JCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVu YWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkg bXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAw KTsKLQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9Ci0J CQlibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQlhcHBlbmRzdGF0ZS0+YXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCWFwcGVuZHN0YXRlLT5hc19wcnVu ZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCi0JYXBwZW5kcGxhbnN0YXRlcyA9IChQbGFuU3RhdGUgKiop IHBhbGxvYyhucGxhbnMgKgotCQkJCQkJCQkJCQkgc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7Ci0KLQkv KgotCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJl IGV4ZWN1dGVkIGFuZCBzYXZlCi0JICogdGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5kcGxhbnN0 YXRlcyBhcnJheS4KLQkgKgotCSAqIFdoaWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmlyc3QgdmFs aWQgcGFydGlhbCBwbGFuLgotCSAqLwotCWogPSAwOwotCWFzeW5jcGxhbnMgPSBOVUxMOwotCW5h c3luY3BsYW5zID0gMDsKLQlmaXJzdHZhbGlkID0gbnBsYW5zOwotCWkgPSAtMTsKLQl3aGlsZSAo KGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCi0JewotCQlQbGFu CSAgICppbml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPmFwcGVuZHBsYW5zLCBpKTsK LQotCQkvKgotCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFs UGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KLQkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlz IHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAq LwotCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZl ID09IE5VTEwpCi0JCXsKLQkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5z LCBqKTsKLQkJCW5hc3luY3BsYW5zKys7Ci0JCX0KLQotCQkvKgotCQkgKiBSZWNvcmQgdGhlIGxv d2VzdCBhcHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4KLQkJ ICovCi0JCWlmIChpID49IG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiAmJiBqIDwgZmlyc3R2YWxp ZCkKLQkJCWZpcnN0dmFsaWQgPSBqOwotCi0JCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJ bml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwotCX0KLQotCWFwcGVuZHN0YXRlLT5h c19maXJzdF9wYXJ0aWFsX3BsYW4gPSBmaXJzdHZhbGlkOwotCWFwcGVuZHN0YXRlLT5hcHBlbmRw bGFucyA9IGFwcGVuZHBsYW5zdGF0ZXM7Ci0JYXBwZW5kc3RhdGUtPmFzX25wbGFucyA9IG5wbGFu czsKKwkvKiBJbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZh cHBlbmRzdGF0ZS0+YXMsCisJCQkJCSAmbm9kZS0+YXAsCisJCQkJCSBlc3RhdGUsCisJCQkJCSBl ZmxhZ3MsCisJCQkJCSBub2RlLT5maXJzdF9wYXJ0aWFsX3BsYW4sCisJCQkJCSAmYXBwZW5kc3Rh dGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxhbik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgQXBwZW5k J3MgcmVzdWx0IHR1cGxlIHR5cGUgYW5kIHNsb3QuICBJZiB0aGUgY2hpbGQgcGxhbnMgYWxsCi0J ICogcHJvZHVjZSB0aGUgc2FtZSBmaXhlZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90 IHR5cGU7IG90aGVyd2lzZQotCSAqIG1ha2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRo ZSByZXN1bHQgc2xvdCBpdHNlbGYgaXMgdXNlZCBvbmx5IHRvCi0JICogcmV0dXJuIGEgbnVsbCB0 dXBsZSBhdCBlbmQgb2YgZXhlY3V0aW9uOyByZWFsIHR1cGxlcyBhcmUgcmV0dXJuZWQgdG8KLQkg KiB0aGUgY2FsbGVyIGluIHRoZSBjaGlsZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdl IGFyZSBkb2luZyBoZXJlCi0JICogaXMgYWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8g b3B0aW1pemUgaWYgdGhlIEFwcGVuZCB3aWxsIHJldHVybgotCSAqIG9ubHkgb25lIGtpbmQgb2Yg c2xvdC4pCi0JICovCi0JYXBwZW5kb3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMoYXBwZW5kcGxh bnN0YXRlcywgaik7Ci0JaWYgKGFwcGVuZG9wcyAhPSBOVUxMKQotCXsKLQkJRXhlY0luaXRSZXN1 bHRUdXBsZVNsb3RUTCgmYXBwZW5kc3RhdGUtPnBzLCBhcHBlbmRvcHMpOwotCX0KLQllbHNlCi0J ewotCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsICZUVFNPcHNW aXJ0dWFsKTsKLQkJLyogc2hvdyB0aGF0IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhl ZCAqLwotCQlhcHBlbmRzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJYXBwZW5kc3Rh dGUtPnBzLnJlc3VsdG9wc2ZpeGVkID0gZmFsc2U7Ci0JfQorCWlmIChhcHBlbmRzdGF0ZS0+YXMu bmFzeW5jcGxhbnMgPiAwICYmIGFwcGVuZHN0YXRlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlm aWVkKQorCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhhcHBlbmRzdGF0ZSk7CiAKLQkvKiBJ bml0aWFsaXplIGFzeW5jIHN0YXRlICovCi0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcGxhbnMgPSBh c3luY3BsYW5zOwotCWFwcGVuZHN0YXRlLT5hc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwot CWFwcGVuZHN0YXRlLT5hc19hc3luY3JlcXVlc3RzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNf YXN5bmNyZXN1bHRzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7 CiAJYXBwZW5kc3RhdGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0JYXBwZW5kc3RhdGUtPmFzX25l ZWRyZXF1ZXN0ID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCWFw cGVuZHN0YXRlLT5hc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQotCWlmIChuYXN5bmNwbGFu cyA+IDApCi0JewotCQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVl c3QgKiopCi0JCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwotCi0J CWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+ PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Nfb2Jq ZWN0KEFzeW5jUmVxdWVzdCk7Ci0JCQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIGFw cGVuZHN0YXRlOwotCQkJYXJlcS0+cmVxdWVzdGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKLQkJ CWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwotCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZh bHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0 ID0gTlVMTDsKLQotCQkJYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwot CQl9Ci0KLQkJYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAq KikKLQkJCXBhbGxvYzAobmFzeW5jcGxhbnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwot Ci0JCWlmIChhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNs YXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKGFwcGVuZHN0YXRlKTsKLQl9Ci0KLQkvKgotCSAqIE1p c2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KLQkgKi8KLQotCWFwcGVuZHN0YXRlLT5wcy5wc19Q cm9qSW5mbyA9IE5VTEw7CiAKIAkvKiBGb3IgcGFyYWxsZWwgcXVlcnksIHRoaXMgd2lsbCBiZSBv dmVycmlkZGVuIGxhdGVyLiAqLwogCWFwcGVuZHN0YXRlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0g Y2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5OwpAQCAtMzE3LDExICsxNjksMTEgQEAgRXhlY0Fw cGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJQXNzZXJ0KCFub2RlLT5hc19zeW5jZG9uZSk7CiAK IAkJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQkJaWYgKG5v ZGUtPmFzX25wbGFucyA9PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBz X1Jlc3VsdFR1cGxlU2xvdCk7CisJCWlmIChub2RlLT5hcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVy biBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8q IElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAq LwotCQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5j cGxhbnMgPiAwKQogCQkJRXhlY0FwcGVuZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKQEAgLTMy OSwxMSArMTgxLDExIEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHByb2Nl ZWRpbmcuCiAJCSAqLwogCQlpZiAoIW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYg bm9kZS0+YXNfbmFzeW5jcmVtYWluID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9k ZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2Rl LT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCUFzc2VydChub2RlLT5hc19zeW5jZG9u ZSB8fAogCQkJICAgKG5vZGUtPmFzX3doaWNocGxhbiA+PSAwICYmCi0JCQkJbm9kZS0+YXNfd2hp Y2hwbGFuIDwgbm9kZS0+YXNfbnBsYW5zKSk7CisJCQkJbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9k ZS0+YXMubnBsYW5zKSk7CiAKIAkJLyogQW5kIHdlJ3JlIGluaXRpYWxpemVkLiAqLwogCQlub2Rl LT5hc19iZWd1biA9IHRydWU7CkBAIC0zNDgsMTkgKzIwMCwxOSBAQCBFeGVjQXBwZW5kKFBsYW5T dGF0ZSAqcHN0YXRlKQogCQkvKgogCQkgKiB0cnkgdG8gZ2V0IGEgdHVwbGUgZnJvbSBhbiBhc3lu YyBzdWJwbGFuIGlmIGFueQogCQkgKi8KLQkJaWYgKG5vZGUtPmFzX3N5bmNkb25lIHx8ICFibXNf aXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVlc3QpKQorCQlpZiAobm9kZS0+YXNfc3luY2RvbmUg fHwgIWJtc19pc19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpCiAJCXsKIAkJCWlmIChFeGVj QXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsICZyZXN1bHQpKQogCQkJCXJldHVybiByZXN1bHQ7CiAJ CQlBc3NlcnQoIW5vZGUtPmFzX3N5bmNkb25lKTsKLQkJCUFzc2VydChibXNfaXNfZW1wdHkobm9k ZS0+YXNfbmVlZHJlcXVlc3QpKTsKKwkJCUFzc2VydChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVl ZHJlcXVlc3QpKTsKIAkJfQogCiAJCS8qCiAJCSAqIGZpZ3VyZSBvdXQgd2hpY2ggc3luYyBzdWJw bGFuIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZwogCQkgKi8KLQkJQXNzZXJ0KG5vZGUtPmFz X3doaWNocGxhbiA+PSAwICYmIG5vZGUtPmFzX3doaWNocGxhbiA8IG5vZGUtPmFzX25wbGFucyk7 Ci0JCXN1Ym5vZGUgPSBub2RlLT5hcHBlbmRwbGFuc1tub2RlLT5hc193aGljaHBsYW5dOworCQlB c3NlcnQobm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9k ZS0+YXMubnBsYW5zKTsKKwkJc3Vibm9kZSA9IG5vZGUtPmFzLnBsYW5zW25vZGUtPmFzX3doaWNo cGxhbl07CiAKIAkJLyoKIAkJICogZ2V0IGEgdHVwbGUgZnJvbSB0aGUgc3VicGxhbgpAQCAtMzg3 LDcgKzIzOSw3IEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAKIAkJLyogY2hvb3Nl IG5ldyBzeW5jIHN1YnBsYW47IGlmIG5vIHN5bmMvYXN5bmMgc3VicGxhbnMsIHdlJ3JlIGRvbmUg Ki8KIAkJaWYgKCFub2RlLT5jaG9vc2VfbmV4dF9zdWJwbGFuKG5vZGUpICYmIG5vZGUtPmFzX25h c3luY3JlbWFpbiA9PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jl c3VsdFR1cGxlU2xvdCk7CisJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNf UmVzdWx0VHVwbGVTbG90KTsKIAl9CiB9CiAKQEAgLTQwMiw4MSArMjU0LDIyIEBAIEV4ZWNBcHBl bmQoUGxhblN0YXRlICpwc3RhdGUpCiB2b2lkCiBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpu b2RlKQogewotCVBsYW5TdGF0ZSAqKmFwcGVuZHBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJ CQlpOwotCi0JLyoKLQkgKiBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCWFw cGVuZHBsYW5zID0gbm9kZS0+YXBwZW5kcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5z OwotCi0JLyoKLQkgKiBzaHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgbnBsYW5zOyBpKyspCi0JCUV4ZWNFbmROb2RlKGFwcGVuZHBsYW5zW2ldKTsK KwlFeGVjRW5kQXBwZW5kZXIoJm5vZGUtPmFzKTsKIH0KIAogdm9pZAogRXhlY1JlU2NhbkFwcGVu ZChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPmFzX25h c3luY3BsYW5zOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFt cyB1c2VkIGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogd2Un ZCBiZXR0ZXIgdW5zZXQgdGhlIHZhbGlkIHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxl Y3RlZCBmb3IKLQkgKiB0aGUgbmV3IHBhcmFtZXRlciB2YWx1ZXMuCi0JICovCi0JaWYgKG5vZGUt PmFzX3BydW5lX3N0YXRlICYmCi0JCWJtc19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJ CQlub2RlLT5hc19wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkKLQl7Ci0JCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxzZTsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFs aWRfc3VicGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9IE5VTEw7Ci0JCWJtc19m cmVlKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9hc3luY3Bs YW5zID0gTlVMTDsKLQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKysp Ci0JewotCQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+YXBwZW5kcGxhbnNbaV07CisJaW50 CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5hcy5uYXN5bmNwbGFuczsKIAotCQkvKgotCQkgKiBFeGVj UmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0J CSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9k ZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2Rl LCBub2RlLT5wcy5jaGdQYXJhbSk7Ci0KLQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9k ZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0 IEV4ZWNQcm9jTm9kZSBvciBieSBmaXJzdCBFeGVjQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYg KHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0K KwlFeGVjUmVTY2FuQXBwZW5kZXIoJm5vZGUtPmFzKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRl ICovCisJLyogUmVzZXQgc3BlY2lmaWMgYXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYgKG5hc3lu Y3BsYW5zID4gMCkKIAl7Ci0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFja19wZW5k aW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVx LT5yZXN1bHQgPSBOVUxMOwotCQl9Ci0KIAkJbm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJ CW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX25lZWRyZXF1 ZXN0KTsKLQkJbm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOwogCX0KIAogCS8qIExldCBjaG9v c2VfbmV4dF9zdWJwbGFuXyogZnVuY3Rpb24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1YnBs YW4gKi8KQEAgLTUwMyw3ICsyOTYsNyBAQCBFeGVjQXBwZW5kRXN0aW1hdGUoQXBwZW5kU3RhdGUg Km5vZGUsCiB7CiAJbm9kZS0+cHN0YXRlX2xlbiA9CiAJCWFkZF9zaXplKG9mZnNldG9mKFBhcmFs bGVsQXBwZW5kU3RhdGUsIHBhX2ZpbmlzaGVkKSwKLQkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+ YXNfbnBsYW5zKTsKKwkJCQkgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsKIAogCXNo bV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgbm9kZS0+cHN0YXRlX2xlbik7 CiAJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwpAQCAtNTI1LDcg KzMxOCw3IEBAIEV4ZWNBcHBlbmRJbml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLAogCXBz dGF0ZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBub2RlLT5wc3RhdGVfbGVuKTsKIAlt ZW1zZXQocHN0YXRlLCAwLCBub2RlLT5wc3RhdGVfbGVuKTsKIAlMV0xvY2tJbml0aWFsaXplKCZw c3RhdGUtPnBhX2xvY2ssIExXVFJBTkNIRV9QQVJBTExFTF9BUFBFTkQpOwotCXNobV90b2NfaW5z ZXJ0KHBjeHQtPnRvYywgbm9kZS0+cHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwc3RhdGUpOworCXNo bV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+YXMucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBw c3RhdGUpOwogCiAJbm9kZS0+YXNfcHN0YXRlID0gcHN0YXRlOwogCW5vZGUtPmNob29zZV9uZXh0 X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXI7CkBAIC01NDMsNyArMzM2 LDcgQEAgRXhlY0FwcGVuZFJlSW5pdGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxs ZWxDb250ZXh0ICpwY3h0KQogCVBhcmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFz X3BzdGF0ZTsKIAogCXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0gMDsKLQltZW1zZXQocHN0YXRlLT5w YV9maW5pc2hlZCwgMCwgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXNfbnBsYW5zKTsKKwltZW1zZXQo cHN0YXRlLT5wYV9maW5pc2hlZCwgMCwgc2l6ZW9mKGJvb2wpICogbm9kZS0+YXMubnBsYW5zKTsK IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtNTU2LDcgKzM0OSw3IEBAIEV4ZWNBcHBlbmRSZUluaXRpYWxp emVEU00oQXBwZW5kU3RhdGUgKm5vZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHZvaWQKIEV4 ZWNBcHBlbmRJbml0aWFsaXplV29ya2VyKEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbFdvcmtl ckNvbnRleHQgKnB3Y3h0KQogewotCW5vZGUtPmFzX3BzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3 Y3h0LT50b2MsIG5vZGUtPnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOworCW5vZGUtPmFz X3BzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPmFzLnBzLnBsYW4tPnBs YW5fbm9kZV9pZCwgZmFsc2UpOwogCW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2Vf bmV4dF9zdWJwbGFuX2Zvcl93b3JrZXI7CiB9CiAKQEAgLTU3NCw3ICszNjcsNyBAQCBjaG9vc2Vf bmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJaW50CQkJbmV4dHBsYW47 CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBs YW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5u cGxhbnMgPiAwKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgc3luY2RvbmUgKi8KIAlpZiAobm9k ZS0+YXNfc3luY2RvbmUpCkBAIC01ODksMzMgKzM4MiwzMyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFu X2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJICovCiAJaWYgKHdoaWNocGxhbiA9PSBJTlZB TElEX1NVQlBMQU5fSU5ERVgpCiAJewotCQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQor CQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQl7CiAJCQkvKiBXZSdkIGhhdmUgZmls bGVkIGFzX3ZhbGlkX3N1YnBsYW5zIGFscmVhZHkgKi8KLQkJCUFzc2VydChub2RlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwkJCUFzc2VydChub2RlLT5hcy52YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkKTsKIAkJfQotCQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCkKKwkJZWxzZSBpZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZp ZWQpCiAJCXsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRf c3VicGxhbnMgPQorCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9z dGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IHRydWU7CiAJCX0KIAogCQl3aGljaHBsYW4gPSAtMTsKIAl9CiAKIAkvKiBFbnN1cmUgd2hp Y2hwbGFuIGlzIHdpdGhpbiB0aGUgZXhwZWN0ZWQgcmFuZ2UgKi8KLQlBc3NlcnQod2hpY2hwbGFu ID49IC0xICYmIHdoaWNocGxhbiA8PSBub2RlLT5hc19ucGxhbnMpOworCUFzc2VydCh3aGljaHBs YW4gPj0gLTEgJiYgd2hpY2hwbGFuIDw9IG5vZGUtPmFzLm5wbGFucyk7CiAKLQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSkKLQkJbmV4dHBs YW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7 CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVj dGlvbikpCisJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBs YW5zLCB3aGljaHBsYW4pOwogCWVsc2UKLQkJbmV4dHBsYW4gPSBibXNfcHJldl9tZW1iZXIobm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CisJCW5leHRwbGFuID0gYm1zX3ByZXZf bWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOwogCiAJaWYgKG5leHRw bGFuIDwgMCkKIAl7CiAJCS8qIFNldCBhc19zeW5jZG9uZSBpZiBpbiBhc3luYyBtb2RlICovCi0J CWlmIChub2RlLT5hc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFu cyA+IDApCiAJCQlub2RlLT5hc19zeW5jZG9uZSA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9 CkBAIC02MzksMTAgKzQzMiwxMCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBw ZW5kU3RhdGUgKm5vZGUpCiAJUGFyYWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNf cHN0YXRlOwogCiAJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVs LWF3YXJlIHBsYW5zICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMu c3RhdGUtPmVzX2RpcmVjdGlvbikpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5v ZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBi ZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNf bnBsYW5zID4gMCk7CisJQXNzZXJ0KG5vZGUtPmFzLm5wbGFucyA+IDApOwogCiAJTFdMb2NrQWNx dWlyZSgmcHN0YXRlLT5wYV9sb2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC02NTQsMTggKzQ0Nywx OCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJ ZWxzZQogCXsKIAkJLyogU3RhcnQgd2l0aCBsYXN0IHN1YnBsYW4uICovCi0JCW5vZGUtPmFzX3do aWNocGxhbiA9IG5vZGUtPmFzX25wbGFucyAtIDE7CisJCW5vZGUtPmFzX3doaWNocGxhbiA9IG5v ZGUtPmFzLm5wbGFucyAtIDE7CiAKIAkJLyoKIAkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWlu ZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICBJZgogCQkgKiBydW4tdGltZSBw cnVuaW5nIGlzIGRpc2FibGVkIHRoZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJl CiAJCSAqIHNldCB0byBhbGwgc3VicGxhbnMuCiAJCSAqLwotCQlpZiAoIW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCkKIAkJewotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQkJ bm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5hcy52 YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBy dW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkID0gdHJ1ZTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMg ZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcyMSwxMCArNTE0LDEwIEBA IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJh bGxlbEFwcGVuZFN0YXRlICpwc3RhdGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2Fy ZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3Nl cnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7 CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2Rp cmVjdGlvbikpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFy ZSBubyBzdWJwbGFucyAqLwotCUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQo bm9kZS0+YXMubnBsYW5zID4gMCk7CiAKIAlMV0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ss IExXX0VYQ0xVU0lWRSk7CiAKQEAgLTczNywxMSArNTMwLDExIEBAIGNob29zZV9uZXh0X3N1YnBs YW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKiBydW4tdGltZSBwcnVuaW5nIGlz IGRpc2FibGVkIHRoZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlIHNldAogCSAq IHRvIGFsbCBzdWJwbGFucy4KIAkgKi8KLQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCkKKwllbHNlIGlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCkKIAl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQlub2RlLT5h c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3Vi cGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRl LCBmYWxzZSwgTlVMTCk7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0 cnVlOwogCiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hlZChub2RlKTsKIAl9CkBA IC03NjEsNyArNTU0LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0 YXRlICpub2RlKQogCXsKIAkJaW50CQkJbmV4dHBsYW47CiAKLQkJbmV4dHBsYW4gPSBibXNfbmV4 dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCW5leHRwbGFuID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkgICBwc3RhdGUtPnBhX25l eHRfcGxhbik7CiAJCWlmIChuZXh0cGxhbiA+PSAwKQogCQl7CkBAIC03NzQsNyArNTY3LDcgQEAg Y2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCQkJICog VHJ5IGxvb3BpbmcgYmFjayB0byB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLCBpZiB0aGVy ZSBpcwogCQkJICogb25lLiAgSWYgdGhlcmUgaXNuJ3QsIGFycmFuZ2UgdG8gYmFpbCBvdXQgYmVs b3cuCiAJCQkgKi8KLQkJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zLAorCQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRf c3VicGxhbnMsCiAJCQkJCQkJCQkgICBub2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsK IAkJCXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0KIAkJCQluZXh0cGxhbiA8IDAgPyBub2RlLT5hc193 aGljaHBsYW4gOiBuZXh0cGxhbjsKQEAgLTc5OSw3ICs1OTIsNyBAQCBjaG9vc2VfbmV4dF9zdWJw bGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAKIAkvKiBQaWNrIHRoZSBwbGFuIHdl IGZvdW5kLCBhbmQgYWR2YW5jZSBwYV9uZXh0X3BsYW4gb25lIG1vcmUgdGltZS4gKi8KIAlub2Rl LT5hc193aGljaHBsYW4gPSBwc3RhdGUtPnBhX25leHRfcGxhbjsKLQlwc3RhdGUtPnBhX25leHRf cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwlwc3RhdGUt PnBhX25leHRfcGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywK IAkJCQkJCQkJCQkgICBwc3RhdGUtPnBhX25leHRfcGxhbik7CiAKIAkvKgpAQCAtODA4LDcgKzYw MSw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkK IAkgKi8KIAlpZiAocHN0YXRlLT5wYV9uZXh0X3BsYW4gPCAwKQogCXsKLQkJaW50CQkJbmV4dHBs YW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJCWludAkJCW5l eHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJ CQkJCQkgICBub2RlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gLSAxKTsKIAogCQlpZiAobmV4dHBs YW4gPj0gMCkKQEAgLTg1MCwxNiArNjQzLDE2IEBAIG1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19m aW5pc2hlZChBcHBlbmRTdGF0ZSAqbm9kZSkKIAlBc3NlcnQobm9kZS0+YXNfcHN0YXRlKTsKIAog CS8qIFNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIHdoZW4gcnVuLXRpbWUgcHJ1bmluZyBpcyBu b3QgZW5hYmxlZCAqLwotCUFzc2VydChub2RlLT5hc19wcnVuZV9zdGF0ZSk7CisJQXNzZXJ0KG5v ZGUtPmFzLnBydW5lX3N0YXRlKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgYWxsIHBsYW5zIGFy ZSB2YWxpZCAqLwotCWlmIChibXNfbnVtX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMp ID09IG5vZGUtPmFzX25wbGFucykKKwlpZiAoYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zKSA9PSBub2RlLT5hcy5ucGxhbnMpCiAJCXJldHVybjsKIAogCS8qIE1hcmsgYWxs IG5vbi12YWxpZCBwbGFucyBhcyBmaW5pc2hlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5h c19ucGxhbnM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCiAJ ewotCQlpZiAoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpKQorCQlp ZiAoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+YXMudmFsaWRfc3VicGxhbnMpKQogCQkJbm9kZS0+ YXNfcHN0YXRlLT5wYV9maW5pc2hlZFtpXSA9IHRydWU7CiAJfQogfQpAQCAtODc4LDQ3ICs2NzEs MjUgQEAgbWFya19pbnZhbGlkX3N1YnBsYW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpub2Rl KQogc3RhdGljIHZvaWQKIEV4ZWNBcHBlbmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQog ewotCWludAkJCWk7Ci0KLQkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5 bmMtYXdhcmUgQXBwZW5kcy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2Rl LT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2Fs bGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFu cyA+IDApOwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBu byBhc3luYyBzdWJwbGFucy4gKi8KLQlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKTsK LQogCS8qIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4g ZG8gc28gbm93LiAqLwotCWlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkK KwlpZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5h c192YWxpZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IHRydWU7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlu b2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQljbGFzc2lmeV9t YXRjaGluZ19zdWJwbGFucyhub2RlKTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlh Ymxlcy4gKi8KLQlub2RlLT5hc19zeW5jZG9uZSA9IGJtc19pc19lbXB0eShub2RlLT5hc192YWxp ZF9zdWJwbGFucyk7Ci0Jbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gYm1zX251bV9tZW1iZXJzKG5v ZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMpOworCW5vZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2Vt cHR5KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKTsKKwlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBi bXNfbnVtX21lbWJlcnMobm9kZS0+YXMudmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpZiAobm9k ZS0+YXNfbmFzeW5jcmVtYWluID09IDApCiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0 IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tp XTsKLQotCQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVx LT5jYWxsYmFja19wZW5kaW5nKTsKLQotCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4 ZWNBc3luY1JlcXVlc3QoYXJlcSk7Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUt PmFzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTYzLDcgKzczNCw3IEBAIEV4ZWNBcHBlbmRBc3lu Y0dldE5leHQoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlm IChub2RlLT5hc19zeW5jZG9uZSkKIAl7CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4g PT0gMCk7Ci0JCSpyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBs ZVNsb3QpOworCQkqcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+YXMucHMucHNfUmVzdWx0 VHVwbGVTbG90KTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC05ODMsNyArNzU0LDcgQEAgRXhl Y0FwcGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipy ZXN1bHQpCiAJaW50CQkJaTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIGFz eW5jIHN1YnBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdC4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5 KG5vZGUtPmFzX25lZWRyZXF1ZXN0KSkKKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRy ZXF1ZXN0KSkKIAl7CiAJCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzID09IDApOwogCQly ZXR1cm4gZmFsc2U7CkBAIC05OTYsMTcgKzc2NywxNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0 KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpZiAobm9kZS0+ YXNfbmFzeW5jcmVzdWx0cyA+IDApCiAJewogCQktLW5vZGUtPmFzX25hc3luY3Jlc3VsdHM7Ci0J CSpyZXN1bHQgPSBub2RlLT5hc19hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0c107 CisJCSpyZXN1bHQgPSBub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0 c107CiAJCXJldHVybiB0cnVlOwogCX0KIAogCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFj aCBvZiB0aGUgYXN5bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0LiAqLwotCW5lZWRyZXF1ZXN0ID0g bm9kZS0+YXNfbmVlZHJlcXVlc3Q7Ci0Jbm9kZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOworCW5l ZWRyZXF1ZXN0ID0gbm9kZS0+YXMubmVlZHJlcXVlc3Q7CisJbm9kZS0+YXMubmVlZHJlcXVlc3Qg PSBOVUxMOwogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobmVlZHJlcXVl c3QsIGkpKSA+PSAwKQogCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNy ZXF1ZXN0c1tpXTsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0 c1tpXTsKIAogCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCiAJCUV4ZWNBc3luY1JlcXVlc3Qo YXJlcSk7CkBAIC0xMDE3LDcgKzc4OCw3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5k U3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5 bmNyZXN1bHRzID4gMCkKIAl7CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3Vs dCA9IG5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJl c3VsdCA9IG5vZGUtPmFzLmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJ cmV0dXJuIHRydWU7CiAJfQogCkBAIC0xMDMzLDEwNSArODA0LDEyIEBAIEV4ZWNBcHBlbmRBc3lu Y1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogc3Rh dGljIHZvaWQKIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlpbnQJCQluZXZlbnRzID0gbm9kZS0+YXNfbmFzeW5jcGxhbnMgKyAyOwogCWxvbmcJCXRpbWVv dXQgPSBub2RlLT5hc19zeW5jZG9uZSA/IC0xIDogMDsKLQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZl bnRbRVZFTlRfQlVGRkVSX1NJWkVdOwotCWludAkJCW5vY2N1cnJlZDsKLQlpbnQJCQlpOwogCiAJ LyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3lu YyBzdWJwbGFucy4gKi8KIAlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVtYWluID4gMCk7CiAKLQlB c3NlcnQobm9kZS0+YXNfZXZlbnRzZXQgPT0gTlVMTCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBD cmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOwotCUFkZFdh aXRFdmVudFRvU2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lO VkFMSURfU09DS0VULAotCQkJCQkgIE5VTEwsIE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdhaXRp bmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7 Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJ aWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0KGFy ZXEpOwotCX0KLQotCS8qCi0JICogTm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIG5v bmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwotCWlm IChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5hc19ldmVudHNldCkgPT0gMSkKLQl7 Ci0JCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+YXNfZXZlbnRzZXQpOwotCQlub2RlLT5hc19ldmVu dHNldCA9IE5VTEw7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBs YXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBz dGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgotCSAq IE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBp cyBhZGRlZCB0byB0aGUKLQkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0NvbmZp Z3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKLQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdldE51 bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkgb3Ro ZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MKLQkg KiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRoZSBm aXJzdCBwbGFjZSwgYnV0Ci0JICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0dGVy biBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRvby4K LQkgKi8KLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwgV0xfTEFUQ0hfU0VU LCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkgIE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0dXJu IGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlmIChu ZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCi0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0la RTsKLQotCS8qCi0JICogSWYgdGhlIHRpbWVvdXQgaXMgLTEsIHdhaXQgdW50aWwgYXQgbGVhc3Qg b25lIGV2ZW50IG9jY3Vycy4gIElmIHRoZQotCSAqIHRpbWVvdXQgaXMgMCwgcG9sbCBmb3IgZXZl bnRzLCBidXQgZG8gbm90IHdhaXQgYXQgYWxsLgotCSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVu dFNldFdhaXQobm9kZS0+YXNfZXZlbnRzZXQsIHRpbWVvdXQsIG9jY3VycmVkX2V2ZW50LAotCQkJ CQkJCQkgbmV2ZW50cywgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwotCUZyZWVXYWl0RXZlbnRT ZXQobm9kZS0+YXNfZXZlbnRzZXQpOwotCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQlpZiAo bm9jY3VycmVkID09IDApCi0JCXJldHVybjsKLQotCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9ucy4g Ki8KLQlmb3IgKGkgPSAwOyBpIDwgbm9jY3VycmVkOyBpKyspCi0JewotCQlXYWl0RXZlbnQgICp3 ID0gJm9jY3VycmVkX2V2ZW50W2ldOwotCi0JCS8qCi0JCSAqIEVhY2ggd2FpdGluZyBzdWJwbGFu IHNob3VsZCBoYXZlIHJlZ2lzdGVyZWQgaXRzIHdhaXQgZXZlbnQgd2l0aAotCQkgKiB1c2VyX2Rh dGEgcG9pbnRpbmcgYmFjayB0byBpdHMgQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYgKCh3LT5l dmVudHMgJiBXTF9TT0NLRVRfUkVBREFCTEUpICE9IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAq YXJlcSA9IChBc3luY1JlcXVlc3QgKikgdy0+dXNlcl9kYXRhOwotCi0JCQlpZiAoYXJlcS0+Y2Fs bGJhY2tfcGVuZGluZykKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9uZ2Vy IG5lZWRpbmcgYSBjYWxsYmFjay4gIFdlIG11c3QgZG8gdGhpcwotCQkJCSAqIGJlZm9yZSBkaXNw YXRjaGluZyB0aGUgY2FsbGJhY2sgaW4gY2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCi0JCQkJICog dGhlIGZsYWcuCi0JCQkJICovCi0JCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwot Ci0JCQkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLwotCQkJCUV4ZWNBc3luY05vdGlmeShhcmVx KTsKLQkJCX0KLQkJfQotCi0JCS8qIEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCi0JCWlm ICgody0+ZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSAhPSAwKQotCQl7Ci0JCQlSZXNldExhdGNoKE15 TGF0Y2gpOwotCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJfQotCX0KKwlFeGVjQXBwZW5k ZXJBc3luY0V2ZW50V2FpdCgmbm9kZS0+YXMsIHRpbWVvdXQsIFdBSVRfRVZFTlRfQVBQRU5EX1JF QURZKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE2NywxNCArODQ1LDE0IEBAIEV4ZWNBc3luY0Fw cGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAl9CiAKIAkvKiBTYXZlIHJlc3VsdCBz byB3ZSBjYW4gcmV0dXJuIGl0LiAqLwotCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRzIDwg bm9kZS0+YXNfbmFzeW5jcGxhbnMpOwotCW5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19u YXN5bmNyZXN1bHRzKytdID0gc2xvdDsKKwlBc3NlcnQobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA8 IG5vZGUtPmFzLm5hc3luY3BsYW5zKTsKKwlub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+YXNf bmFzeW5jcmVzdWx0cysrXSA9IHNsb3Q7CiAKIAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhh dCByZXR1cm5lZCBhIHJlc3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICog ZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdo dCBjb21wbGV0ZS4KIAkgKi8KLQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVy KG5vZGUtPmFzX25lZWRyZXF1ZXN0LAorCW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9t ZW1iZXIobm9kZS0+YXMubmVlZHJlcXVlc3QsCiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2lu ZGV4KTsKIH0KIApAQCAtMTE4OSwzNCArODY3LDIwIEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNl KEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRpYyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5z OwotCi0JQXNzZXJ0KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2Vy dChub2RlLT5hc192YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOworCUFzc2VydChub2RlLT5hcy52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUg YXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXNfdmFs aWRfc3VicGxhbnMpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXMudmFsaWRfc3VicGxhbnMp KQogCXsKIAkJbm9kZS0+YXNfc3luY2RvbmUgPSB0cnVlOwogCQlub2RlLT5hc19uYXN5bmNyZW1h aW4gPSAwOwogCQlyZXR1cm47CiAJfQogCi0JLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUg bm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JaWYgKCFibXNfb3ZlcmxhcChub2RlLT5hc192 YWxpZF9zdWJwbGFucywgbm9kZS0+YXNfYXN5bmNwbGFucykpCi0JeworCS8qIE5vIHZhbGlkIGFz eW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAorCQkJ CQkJCQkJCSAgIG5vZGUtPmFzLmFzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzLnZh bGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwotCQlyZXR1cm47 Ci0JfQotCi0JLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCXZhbGlkX2FzeW5jcGxh bnMgPSBibXNfaW50ZXJzZWN0KG5vZGUtPmFzX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkgbm9kZS0+ YXNfdmFsaWRfc3VicGxhbnMpOwotCi0JLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0byBj b250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KLQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9 IGJtc19kZWxfbWVtYmVycyhub2RlLT5hc192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJCQkJICB2 YWxpZF9hc3luY3BsYW5zKTsKLQotCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0J bm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDcyZWViZDUwYmRmLi5jZDAzYjJiYzdm OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM4LDYgKzM4LDcg QEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBw ZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRv ci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgi CkBAIC02NiwxMiArNjcsNyBAQCBNZXJnZUFwcGVuZFN0YXRlICoKIEV4ZWNJbml0TWVyZ2VBcHBl bmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogewogCU1l cmdlQXBwZW5kU3RhdGUgKm1lcmdlc3RhdGUgPSBtYWtlTm9kZShNZXJnZUFwcGVuZFN0YXRlKTsK LQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zdGF0ZXM7Ci0JY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMg Km1lcmdlb3BzOwotCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnM7Ci0JaW50CQkJbnBsYW5zOwot CWludAkJCWksCi0JCQkJajsKKwlpbnQJCQlpOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVk IGZsYWdzICovCiAJQXNzZXJ0KCEoZWZsYWdzICYgKEVYRUNfRkxBR19CQUNLV0FSRCB8IEVYRUNf RkxBR19NQVJLKSkpOwpAQCAtNzksOTggKzc1LDIyIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVy Z2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCS8qCiAJICogY3Jl YXRlIG5ldyBNZXJnZUFwcGVuZFN0YXRlIGZvciBvdXIgbm9kZQogCSAqLwotCW1lcmdlc3RhdGUt PnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOwotCW1lcmdlc3RhdGUtPnBzLnN0YXRlID0gZXN0YXRl OwotCW1lcmdlc3RhdGUtPnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNNZXJnZUFwcGVuZDsKLQotCS8q IElmIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQg dXAgbm93ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7Ci0KLQkJLyoKLQkJICogU2V0IHVwIHBydW5pbmcg ZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgotCQkgKiBz dWJwbGFucyB0byBpbml0aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2Nv dW50IHRoZQotCQkgKiByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55 LgotCQkgKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJm1l cmdlc3RhdGUtPnBzLAotCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5z KSwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKLQkJCQkJCQkJCQkJCSAg bm9kZS0+YXBwcmVsaWRzLAotCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7Ci0JCW1lcmdl c3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKLQkJbnBsYW5zID0gYm1zX251bV9t ZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1 bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwg d2UgY2FuIGZpbGwgbXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJ ICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgotCQkgKi8KLQkJaWYg KCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCi0JCQltZXJnZXN0YXRl LT5tc192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7 Ci0JfQotCWVsc2UKLQl7Ci0JCW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMp OwotCi0JCS8qCi0JCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgbm90IGVu YWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKLQkJICogc3VicGxhbnMgYXMgdmFsaWQ7IHRoZXkg bXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KLQkJICovCi0JCUFzc2VydChucGxhbnMgPiAw KTsKLQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KLQkJ CWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCW1lcmdlc3RhdGUtPm1zX3By dW5lX3N0YXRlID0gTlVMTDsKLQl9Ci0KLQltZXJnZXBsYW5zdGF0ZXMgPSBwYWxsb2NfYXJyYXko UGxhblN0YXRlICosIG5wbGFucyk7Ci0JbWVyZ2VzdGF0ZS0+bWVyZ2VwbGFucyA9IG1lcmdlcGxh bnN0YXRlczsKLQltZXJnZXN0YXRlLT5tc19ucGxhbnMgPSBucGxhbnM7Ci0KLQltZXJnZXN0YXRl LT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3QgKiwgbnBsYW5zKTsKLQlt ZXJnZXN0YXRlLT5tc19oZWFwID0gYmluYXJ5aGVhcF9hbGxvY2F0ZShucGxhbnMsIGhlYXBfY29t cGFyZV9zbG90cywKKwltZXJnZXN0YXRlLT5tcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsKKwlt ZXJnZXN0YXRlLT5tcy5wcy5zdGF0ZSA9IGVzdGF0ZTsKKwltZXJnZXN0YXRlLT5tcy5wcy5FeGVj UHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7CisKKwkvKiBJbml0aWFsaXplIGNvbW1vbiBmaWVs ZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZtZXJnZXN0YXRlLT5tcywKKwkJCQkJICZub2RlLT5h cCwKKwkJCQkJIGVzdGF0ZSwKKwkJCQkJIGVmbGFncywKKwkJCQkJIC0xLAorCQkJCQkgTlVMTCk7 CisKKwltZXJnZXN0YXRlLT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3Qg KiwgbWVyZ2VzdGF0ZS0+bXMubnBsYW5zKTsKKwltZXJnZXN0YXRlLT5tc19oZWFwID0gYmluYXJ5 aGVhcF9hbGxvY2F0ZShtZXJnZXN0YXRlLT5tcy5ucGxhbnMsIGhlYXBfY29tcGFyZV9zbG90cywK IAkJCQkJCQkJCQkJICBtZXJnZXN0YXRlKTsKIAotCS8qCi0JICogY2FsbCBFeGVjSW5pdE5vZGUg b24gZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKLQkgKiB0 aGUgcmVzdWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJyYXkuCi0JICovCi0JaiA9IDA7 Ci0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBp KSkgPj0gMCkKLQl7Ci0JCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9k ZS0+bWVyZ2VwbGFucywgaSk7Ci0KLQkJbWVyZ2VwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5v ZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKLQl9Ci0KLQkvKgotCSAqIEluaXRpYWxpemUg TWVyZ2VBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZAot CSAqIHBsYW5zIGFsbCBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVz ZSB0aGF0IHNsb3QgdHlwZTsKLQkgKiBvdGhlcndpc2UgbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChO b3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcwotCSAqIHVzZWQgb25seSB0byByZXR1 cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZQotCSAq IHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90 cy4gIFdoYXQgd2UgYXJlCi0JICogZG9pbmcgaGVyZSBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBs YW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUKLQkgKiBNZXJnZUFwcGVuZCB3aWxsIHJldHVybiBv bmx5IG9uZSBraW5kIG9mIHNsb3QuKQotCSAqLwotCW1lcmdlb3BzID0gRXhlY0dldENvbW1vblNs b3RPcHMobWVyZ2VwbGFuc3RhdGVzLCBqKTsKLQlpZiAobWVyZ2VvcHMgIT0gTlVMTCkKLQl7Ci0J CUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdlc3RhdGUtPnBzLCBtZXJnZW9wcyk7Ci0J fQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdlc3RhdGUtPnBz LCAmVFRTT3BzVmlydHVhbCk7Ci0JCS8qIHNob3cgdGhhdCB0aGUgb3V0cHV0IHNsb3QgdHlwZSBp cyBub3QgZml4ZWQgKi8KLQkJbWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJ bWVyZ2VzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIE1p c2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KLQkgKi8KLQltZXJnZXN0YXRlLT5wcy5wc19Qcm9q SW5mbyA9IE5VTEw7Ci0KIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24K IAkgKi8KQEAgLTIyNCwyNiArMTQ0LDI1IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBz dGF0ZSkKIAlpZiAoIW5vZGUtPm1zX2luaXRpYWxpemVkKQogCXsKIAkJLyogTm90aGluZyB0byBk byBpZiBhbGwgc3VicGxhbnMgd2VyZSBwcnVuZWQgKi8KLQkJaWYgKG5vZGUtPm1zX25wbGFucyA9 PSAwKQotCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xv dCk7CisJCWlmIChub2RlLT5tcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBs ZShub2RlLT5tcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCi0JCS8qCi0JCSAqIElmIHdlJ3Zl IHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAgSWYK LQkJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBzdWJwbGFu cyB3aWxsIGFsd2F5cyBiZQotCQkgKiBzZXQgdG8gYWxsIHN1YnBsYW5zLgotCQkgKi8KLQkJaWYg KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCi0JCQlub2RlLT5tc192YWxpZF9zdWJw bGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRl LCBmYWxzZSwgTlVMTCk7CisJCS8qIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlk IHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAqLworCQlpZiAoIW5vZGUtPm1zLnZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpCisJCXsKKwkJCW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxM KTsKKwkJCW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CiAK IAkJLyoKIAkJICogRmlyc3QgdGltZSB0aHJvdWdoOiBwdWxsIHRoZSBmaXJzdCB0dXBsZSBmcm9t IGVhY2ggdmFsaWQgc3VicGxhbiwKIAkJICogYW5kIHNldCB1cCB0aGUgaGVhcC4KIAkJICovCiAJ CWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zLCBpKSkgPj0gMCkKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1z LnZhbGlkX3N1YnBsYW5zLCBpKSkgPj0gMCkKIAkJewotCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBF eGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9 IEV4ZWNQcm9jTm9kZShub2RlLT5tcy5wbGFuc1tpXSk7CiAJCQlpZiAoIVR1cElzTnVsbChub2Rl LT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hl YXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CkBAIC0yNjEsNyArMTgwLDcgQEAgRXhlY01lcmdl QXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwg bmVjZXNzYXJ5LikKIAkJICovCiAJCWkgPSBEYXR1bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qo bm9kZS0+bXNfaGVhcCkpOwotCQlub2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2Rl LT5tZXJnZXBsYW5zW2ldKTsKKwkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9k ZS0+bXMucGxhbnNbaV0pOwogCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJ CQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShp KSk7CiAJCWVsc2UKQEAgLTI3MSw3ICsxOTAsNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRl ICpwc3RhdGUpCiAJaWYgKGJpbmFyeWhlYXBfZW1wdHkobm9kZS0+bXNfaGVhcCkpCiAJewogCQkv KiBBbGwgdGhlIHN1YnBsYW5zIGFyZSBleGhhdXN0ZWQsIGFuZCBzbyBpcyB0aGUgaGVhcCAqLwot CQlyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwor CQlyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5tcy5wcy5wc19SZXN1bHRUdXBsZVNsb3Qp OwogCX0KIAllbHNlCiAJewpAQCAtMzM1LDU5ICsyNTQsMTQgQEAgaGVhcF9jb21wYXJlX3Nsb3Rz KERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZykKIHZvaWQKIEV4ZWNFbmRNZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQogewotCVBsYW5TdGF0ZSAqKm1lcmdlcGxhbnM7Ci0JaW50 CQkJbnBsYW5zOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBub2RlCi0JICovCi0JbWVyZ2VwbGFucyA9IG5vZGUtPm1lcmdlcGxhbnM7Ci0JbnBsYW5zID0g bm9kZS0+bXNfbnBsYW5zOwotCi0JLyoKLQkgKiBzaHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2Nh bnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBpKyspCi0JCUV4ZWNFbmROb2RlKG1l cmdlcGxhbnNbaV0pOworCUV4ZWNFbmRBcHBlbmRlcigmbm9kZS0+bXMpOwogfQogCiB2b2lkCiBF eGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlp OwotCi0JLyoKLQkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5nIGV4 cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgotCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRoZSB2 YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCi0JICogdGhlIG5l dyBwYXJhbWV0ZXIgdmFsdWVzLgotCSAqLwotCWlmIChub2RlLT5tc19wcnVuZV9zdGF0ZSAmJgot CQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKLQkJCQkJbm9kZS0+bXNfcHJ1bmVfc3Rh dGUtPmV4ZWNwYXJhbWlkcykpCi0JewotCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFu cyk7Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQl9CisJRXhlY1JlU2NhbkFw cGVuZGVyKCZub2RlLT5tcyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bXNfbnBsYW5zOyBp KyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+bWVyZ2VwbGFuc1tpXTsKLQot CQkvKgotCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28g SSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0J CSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQ YXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7Ci0KLQkJLyoKLQkJICogSWYgY2hn UGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVk IGJ5Ci0JCSAqIGZpcnN0IEV4ZWNQcm9jTm9kZS4KLQkJICovCi0JCWlmIChzdWJub2RlLT5jaGdQ YXJhbSA9PSBOVUxMKQotCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKLQl9CiAJYmluYXJ5aGVhcF9y ZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9ub2RlRnVuY3MuYwppbmRleCA2YTg1MDM0OWNmNy4uNTEyNGU3ODdiMTQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L25vZGVGdW5jcy5jCkBAIC00ODI1LDE0ICs0ODI1LDE0IEBAIHBsYW5zdGF0ZV90cmVlX3dhbGtl cl9pbXBsKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAl7 CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFwcGVu ZFN0YXRlICopIHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCQkJICAgKChBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19ucGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVt YmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCQkJICAg KChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3YWxr ZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJn ZUFwcGVuZDoKLQkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0 ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZFN0 YXRlICopIHBsYW5zdGF0ZSktPm1zX25wbGFucywKKwkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1i ZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5wbGFucywKKwkJCQkJCQkJ CSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJ CQkgICB3YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggMjZkMGRiYzJlMWQuLmIyMzY0 M2ZlZGI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xMjYx LDEyICsxMjYxLDEyIEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBw ZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJICogY2hpbGQgcGxhbnMsIHRvIG1ha2Ug Y3Jvc3MtY2hlY2tpbmcgdGhlIHNvcnQgaW5mbyBlYXNpZXIuCiAJICovCiAJcGxhbiA9IG1ha2VO b2RlKEFwcGVuZCk7Ci0JcGxhbi0+cGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7Ci0JcGxhbi0+cGxh bi5xdWFsID0gTklMOwotCXBsYW4tPnBsYW4ubGVmdHRyZWUgPSBOVUxMOwotCXBsYW4tPnBsYW4u cmlnaHR0cmVlID0gTlVMTDsKLQlwbGFuLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKLQlwbGFu LT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHM7CisJcGxhbi0+YXAucGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7CisJcGxhbi0+YXAucGxh bi5xdWFsID0gTklMOworCXBsYW4tPmFwLnBsYW4ubGVmdHRyZWUgPSBOVUxMOworCXBsYW4tPmFw LnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKKwlwbGFuLT5hcC5hcHByZWxpZHMgPSByZWwtPnJlbGlk czsKKwlwbGFuLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRf YXBwZW5kX3JlbGlkX3NldHM7CiAKIAlpZiAocGF0aGtleXMgIT0gTklMKQogCXsKQEAgLTEyODUs NyArMTI4NSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5k UGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJCQkJCQkJCQkJICAmbm9kZVNvcnRPcGVyYXRv cnMsCiAJCQkJCQkJCQkJICAmbm9kZUNvbGxhdGlvbnMsCiAJCQkJCQkJCQkJICAmbm9kZU51bGxz Rmlyc3QpOwotCQl0bGlzdF93YXNfY2hhbmdlZCA9IChvcmlnX3RsaXN0X2xlbmd0aCAhPSBsaXN0 X2xlbmd0aChwbGFuLT5wbGFuLnRhcmdldGxpc3QpKTsKKwkJdGxpc3Rfd2FzX2NoYW5nZWQgPSAo b3JpZ190bGlzdF9sZW5ndGggIT0gbGlzdF9sZW5ndGgocGxhbi0+YXAucGxhbi50YXJnZXRsaXN0 KSk7CiAJfQogCiAJLyogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIGFzeW5jIGFwcGVuZCAqLwpA QCAtMTM5NSw3ICsxMzk1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAl9CiAKIAkvKiBTZXQgYmVsb3cg aWYgd2UgZmluZCBxdWFscyB0aGF0IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8KLQlw bGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CisJcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9 IC0xOwogCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0 byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCkBAIC0xNDIwLDE2ICsxNDIwLDE2IEBAIGNyZWF0 ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBp bnQgZmxhZ3MpCiAJCX0KIAogCQlpZiAocHJ1bmVxdWFsICE9IE5JTCkKLQkJCXBsYW4tPnBhcnRf cHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAotCQkJCQkJ CQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1 YWwpOworCQkJcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5l aW5mbyhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJCQkJIGJlc3RfcGF0aC0+c3VicGF0aHMsCisJ CQkJCQkJCQkJCQkJCQkJIHBydW5lcXVhbCk7CiAJfQogCi0JcGxhbi0+YXBwZW5kcGxhbnMgPSBz dWJwbGFuczsKKwlwbGFuLT5hcC5zdWJwbGFucyA9IHN1YnBsYW5zOwogCXBsYW4tPm5hc3luY3Bs YW5zID0gbmFzeW5jcGxhbnM7CiAJcGxhbi0+Zmlyc3RfcGFydGlhbF9wbGFuID0gYmVzdF9wYXRo LT5maXJzdF9wYXJ0aWFsX3BhdGg7CiAKLQljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5w bGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOworCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBsYW4t PmFwLnBsYW4sIChQYXRoICopIGJlc3RfcGF0aCk7CiAKIAkvKgogCSAqIElmIHByZXBhcmVfc29y dF9mcm9tX3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwpA QCAtMTQzOCw5ICsxNDM4LDkgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkgKi8KIAlpZiAodGxpc3Rfd2Fz X2NoYW5nZWQgJiYgKGZsYWdzICYgKENQX0VYQUNUX1RMSVNUIHwgQ1BfU01BTExfVExJU1QpKSkK IAl7Ci0JCXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+cGxhbi50YXJnZXRsaXN0LCBvcmln X3RsaXN0X2xlbmd0aCk7CisJCXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+YXAucGxhbi50 YXJnZXRsaXN0LCBvcmlnX3RsaXN0X2xlbmd0aCk7CiAJCXJldHVybiBpbmplY3RfcHJvamVjdGlv bl9wbGFuKChQbGFuICopIHBsYW4sIHRsaXN0LAotCQkJCQkJCQkJICBwbGFuLT5wbGFuLnBhcmFs bGVsX3NhZmUpOworCQkJCQkJCQkJICBwbGFuLT5hcC5wbGFuLnBhcmFsbGVsX3NhZmUpOwogCX0K IAllbHNlCiAJCXJldHVybiAoUGxhbiAqKSBwbGFuOwpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAgY3Jl YXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGgg KmJlc3RfcGF0aCwKIAkJCQkJCSBpbnQgZmxhZ3MpCiB7CiAJTWVyZ2VBcHBlbmQgKm5vZGUgPSBt YWtlTm9kZShNZXJnZUFwcGVuZCk7Ci0JUGxhbgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOworCVBs YW4JICAgKnBsYW4gPSAmbm9kZS0+YXAucGxhbjsKIAlMaXN0CSAgICp0bGlzdCA9IGJ1aWxkX3Bh dGhfdGxpc3Qocm9vdCwgJmJlc3RfcGF0aC0+cGF0aCk7CiAJaW50CQkJb3JpZ190bGlzdF9sZW5n dGggPSBsaXN0X2xlbmd0aCh0bGlzdCk7CiAJYm9vbAkJdGxpc3Rfd2FzX2NoYW5nZWQ7CkBAIC0x NDc4LDggKzE0NzgsOCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnF1YWwgPSBOSUw7CiAJcGxh bi0+bGVmdHRyZWUgPSBOVUxMOwogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7Ci0Jbm9kZS0+YXBw cmVsaWRzID0gcmVsLT5yZWxpZHM7Ci0Jbm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBi ZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCW5vZGUtPmFwLmFwcHJlbGlkcyA9 IHJlbC0+cmVsaWRzOworCW5vZGUtPmFwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVzdF9w YXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNv bHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpAQCAt MTU4NSw3ICsxNTg1LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpy b290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAl9CiAKIAkvKiBTZXQgYmVsb3cgaWYg d2UgZmluZCBxdWFscyB0aGF0IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8KLQlub2Rl LT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CisJbm9kZS0+YXAucGFydF9wcnVuZV9pbmRleCA9IC0x OwogCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBw ZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCkBAIC0xNjAyLDEyICsxNjAyLDEyIEBAIGNyZWF0ZV9t ZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0 X3BhdGgsCiAJCUFzc2VydChiZXN0X3BhdGgtPnBhdGgucGFyYW1faW5mbyA9PSBOVUxMKTsKIAog CQlpZiAocHJ1bmVxdWFsICE9IE5JTCkKLQkJCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtl X3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAotCQkJCQkJCQkJCQkJCQkJICBiZXN0X3Bh dGgtPnN1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOworCQkJbm9kZS0+YXAu cGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhyb290LCByZWwsCisJ CQkJCQkJCQkJCQkJCQkJIGJlc3RfcGF0aC0+c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJIHBy dW5lcXVhbCk7CiAJfQogCi0Jbm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOworCW5vZGUtPmFw LnN1YnBsYW5zID0gc3VicGxhbnM7CiAKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3Bh dGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGZmMGU4NzVmMmEyLi4xMGM0OWM5OGVhOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTg4MSwxMCArMTg4MSwxMCBAQCBz ZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogY2hlY2sgcXVhbHMu ICBJZiBpdCdzIGdvdCBleGFjdGx5IG9uZSBjaGlsZCBwbGFuLCB0aGVuIGl0J3Mgbm90IGRvaW5n CiAJICogYW55dGhpbmcgdXNlZnVsIGF0IGFsbCwgYW5kIHdlIGNhbiBzdHJpcCBpdCBvdXQuCiAJ ICovCi0JQXNzZXJ0KGFwbGFuLT5wbGFuLnF1YWwgPT0gTklMKTsKKwlBc3NlcnQoYXBsYW4tPmFw LnBsYW4ucXVhbCA9PSBOSUwpOwogCiAJLyogRmlyc3QsIHdlIGdvdHRhIHJlY3Vyc2Ugb24gdGhl IGNoaWxkcmVuICovCi0JZm9yZWFjaChsLCBhcGxhbi0+YXBwZW5kcGxhbnMpCisJZm9yZWFjaChs LCBhcGxhbi0+YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJv b3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE4OTcsMTEgKzE4OTcs MTEgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIHBsYW4g bWF5IGV4ZWN1dGUgdGhlIG5vbi1wYXJhbGxlbCBhd2FyZSBjaGlsZCBtdWx0aXBsZSB0aW1lcy4g IChJZiB5b3UKIAkgKiBjaGFuZ2UgdGhlc2UgcnVsZXMsIHVwZGF0ZSBjcmVhdGVfYXBwZW5kX3Bh dGggdG8gbWF0Y2guKQogCSAqLwotCWlmIChsaXN0X2xlbmd0aChhcGxhbi0+YXBwZW5kcGxhbnMp ID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcC5zdWJwbGFucykgPT0gMSkKIAl7Ci0J CVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5kcGxhbnMpOworCQlQ bGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwLnN1YnBsYW5zKTsKIAotCQlp ZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCisJCWlm IChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+YXAucGxhbi5wYXJhbGxlbF9hd2FyZSkKIAkJ ewogCQkJUGxhbgkgICAqcmVzdWx0OwogCkBAIC0xOTA5LDcgKzE5MDksNyBAQCBzZXRfYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCS8qIFJlbWVtYmVyIHRoYXQgd2Ug cmVtb3ZlZCBhbiBBcHBlbmQgKi8KIAkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBw LT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAotCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQoYXBs YW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KGFw bGFuLT5hcC5hcHByZWxpZHMsIHJ0b2Zmc2V0KSk7CiAKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0K QEAgLTE5MjIsMTkgKzE5MjIsMTkgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZv ICpyb290LAogCSAqLwogCXNldF9kdW1teV90bGlzdF9yZWZlcmVuY2VzKChQbGFuICopIGFwbGFu LCBydG9mZnNldCk7CiAKLQlhcGxhbi0+YXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChhcGxh bi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJYXBsYW4tPmFwLmFwcHJlbGlkcyA9IG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwLmFwcHJlbGlkcywgcnRvZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQg UGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnksIHRvIFBsYW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0 aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUgdGhlIFJUIGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0 byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlpZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0g MCkKLQkJYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPQotCQkJcmVnaXN0ZXJfcGFydHBydW5laW5m byhyb290LCBhcGxhbi0+cGFydF9wcnVuZV9pbmRleCwgcnRvZmZzZXQpOworCWlmIChhcGxhbi0+ YXAucGFydF9wcnVuZV9pbmRleCA+PSAwKQorCQlhcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9 CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5hcC5wYXJ0X3BydW5lX2lu ZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRy ZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFzc2VydChhcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBO VUxMKTsKLQlBc3NlcnQoYXBsYW4tPnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOworCUFzc2VydChh cGxhbi0+YXAucGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKKwlBc3NlcnQoYXBsYW4tPmFwLnBsYW4u cmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0dXJuIChQbGFuICopIGFwbGFuOwogfQpAQCAtMTk1 OCwxMCArMTk1OCwxMCBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAq cm9vdCwKIAkgKiBvciBjaGVjayBxdWFscy4gIElmIGl0J3MgZ290IGV4YWN0bHkgb25lIGNoaWxk IHBsYW4sIHRoZW4gaXQncyBub3QKIAkgKiBkb2luZyBhbnl0aGluZyB1c2VmdWwgYXQgYWxsLCBh bmQgd2UgY2FuIHN0cmlwIGl0IG91dC4KIAkgKi8KLQlBc3NlcnQobXBsYW4tPnBsYW4ucXVhbCA9 PSBOSUwpOworCUFzc2VydChtcGxhbi0+YXAucGxhbi5xdWFsID09IE5JTCk7CiAKIAkvKiBGaXJz dCwgd2UgZ290dGEgcmVjdXJzZSBvbiB0aGUgY2hpbGRyZW4gKi8KLQlmb3JlYWNoKGwsIG1wbGFu LT5tZXJnZXBsYW5zKQorCWZvcmVhY2gobCwgbXBsYW4tPmFwLnN1YnBsYW5zKQogCXsKIAkJbGZp cnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0b2Zmc2V0 KTsKIAl9CkBAIC0xOTc1LDExICsxOTc1LDExIEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2Vz KFBsYW5uZXJJbmZvICpyb290LAogCSAqIG11bHRpcGxlIHRpbWVzLiAgKElmIHlvdSBjaGFuZ2Ug dGhlc2UgcnVsZXMsIHVwZGF0ZQogCSAqIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aCB0byBtYXRj aC4pCiAJICovCi0JaWYgKGxpc3RfbGVuZ3RoKG1wbGFuLT5tZXJnZXBsYW5zKSA9PSAxKQorCWlm IChsaXN0X2xlbmd0aChtcGxhbi0+YXAuc3VicGxhbnMpID09IDEpCiAJewotCQlQbGFuCSAgICpw ID0gKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMpOworCQlQbGFuCSAgICpwID0g KFBsYW4gKikgbGluaXRpYWwobXBsYW4tPmFwLnN1YnBsYW5zKTsKIAotCQlpZiAocC0+cGFyYWxs ZWxfYXdhcmUgPT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCisJCWlmIChwLT5wYXJhbGxl bF9hd2FyZSA9PSBtcGxhbi0+YXAucGxhbi5wYXJhbGxlbF9hd2FyZSkKIAkJewogCQkJUGxhbgkg ICAqcmVzdWx0OwogCkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJl bmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVk IGEgTWVyZ2VBcHBlbmQgKi8KIAkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5w bGFuX25vZGVfaWQsIFRfTWVyZ2VBcHBlbmQsCi0JCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldCht cGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQo bXBsYW4tPmFwLmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKIAogCQkJcmV0dXJuIHJlc3VsdDsKIAkJ fQpAQCAtMjAwMCwxOSArMjAwMCwxOSBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFu bmVySW5mbyAqcm9vdCwKIAkgKi8KIAlzZXRfZHVtbXlfdGxpc3RfcmVmZXJlbmNlcygoUGxhbiAq KSBtcGxhbiwgcnRvZmZzZXQpOwogCi0JbXBsYW4tPmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9z ZXQobXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpOworCW1wbGFuLT5hcC5hcHByZWxpZHMgPSBv ZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcC5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKIAogCS8qCiAJ ICogQWRkIFBhcnRpdGlvblBydW5lSW5mbywgaWYgYW55LCB0byBQbGFubmVyR2xvYmFsIGFuZCB1 cGRhdGUgdGhlIGluZGV4LgogCSAqIEFsc28gdXBkYXRlIHRoZSBSVCBpbmRleGVzIHByZXNlbnQg aW4gaXQgdG8gYWRkIHRoZSBvZmZzZXQuCiAJICovCi0JaWYgKG1wbGFuLT5wYXJ0X3BydW5lX2lu ZGV4ID49IDApCi0JCW1wbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0KLQkJCXJlZ2lzdGVyX3BhcnRw cnVuZWluZm8ocm9vdCwgbXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKKwlpZiAo bXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJbXBsYW4tPmFwLnBhcnRfcHJ1bmVf aW5kZXggPQorCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxhbi0+YXAucGFydF9w cnVuZV9pbmRleCwgcnRvZmZzZXQpOwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRv IGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KLQlBc3NlcnQobXBsYW4tPnBsYW4ubGVmdHRy ZWUgPT0gTlVMTCk7Ci0JQXNzZXJ0KG1wbGFuLT5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsKKwlB c3NlcnQobXBsYW4tPmFwLnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KG1wbGFuLT5h cC5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsKIAogCXJldHVybiAoUGxhbiAqKSBtcGxhbjsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggY2NlYzFlYWE3ZmUuLjJk YTEzMTAyYTc1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxl Y3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwpAQCAtMjkw NCw3ICsyOTA0LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh biwKIAogCQljYXNlIFRfQXBwZW5kOgogCQkJewotCQkJCWZvcmVhY2gobCwgKChBcHBlbmQgKikg cGxhbiktPmFwcGVuZHBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChBcHBlbmQgKikgcGxhbiktPmFw LnN1YnBsYW5zKQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9CiAJCQkJCQlibXNfYWRk X21lbWJlcnMoY29udGV4dC5wYXJhbWlkcywKQEAgLTI5MTksNyArMjkxOSw3IEBAIGZpbmFsaXpl X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sCiAKIAkJY2FzZSBUX01lcmdlQXBw ZW5kOgogCQkJewotCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2Vw bGFucykKKwkJCQlmb3JlYWNoKGwsICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5z KQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9CiAJCQkJCQlibXNfYWRkX21lbWJlcnMo Y29udGV4dC5wYXJhbWlkcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA3YmMxMjU4 OWU0MC4uMzZhN2Q3MzZmZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTU1MjAs OSArNTUyMCw5IEBAIHNldF9kZXBhcnNlX3BsYW4oZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFBs YW4gKnBsYW4pCiAJICogbmF0dXJhbCBjaG9pY2UuCiAJICovCiAJaWYgKElzQShwbGFuLCBBcHBl bmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChBcHBlbmQgKikgcGxhbiktPmFw cGVuZHBsYW5zKTsKKwkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoQXBwZW5kICopIHBs YW4pLT5hcC5zdWJwbGFucyk7CiAJZWxzZSBpZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkKLQkJ ZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPm1lcmdl cGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChNZXJnZUFwcGVuZCAqKSBw bGFuKS0+YXAuc3VicGxhbnMpOwogCWVsc2UKIAkJZHBucy0+b3V0ZXJfcGxhbiA9IG91dGVyUGxh bihwbGFuKTsKIApAQCAtODQ5OCwxMCArODQ5OCwxMCBAQCByZXNvbHZlX3NwZWNpYWxfdmFybm8o Tm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCiAJCWlmIChJc0EoZHBucy0+ cGxhbiwgQXBwZW5kKSkKIAkJCWNvbnRleHQtPmFwcGVuZHBhcmVudHMgPSBibXNfdW5pb24oY29u dGV4dC0+YXBwZW5kcGFyZW50cywKLQkJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgZHBucy0+cGxh biktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIGRwbnMtPnBsYW4pLT5h cC5hcHByZWxpZHMpOwogCQllbHNlIGlmIChJc0EoZHBucy0+cGxhbiwgTWVyZ2VBcHBlbmQpKQog CQkJY29udGV4dC0+YXBwZW5kcGFyZW50cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRwYXJl bnRzLAotCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMtPnBsYW4pLT5hcHByZWxp ZHMpOworCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMtPnBsYW4pLT5hcC5hcHBy ZWxpZHMpOwogCiAJCXB1c2hfY2hpbGRfcGxhbihkcG5zLCBkcG5zLT5vdXRlcl9wbGFuLCAmc2F2 ZV9kcG5zKTsKIAkJcmVzb2x2ZV9zcGVjaWFsX3Zhcm5vKChOb2RlICopIHRsZS0+ZXhwciwgY29u dGV4dCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaCBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYjY3NTFjOWIyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjQXBwZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBleGVjQXBwZW5kLmgKKyAqCQlTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgTWVyZ2VBcHBl bmQgYW5kIEFwcGVuZCBub2Rlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBw ZW5kLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgRVhFQ0FQUEVORF9ICisj ZGVmaW5lIEVYRUNBUFBFTkRfSAorCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisKK3Zv aWQJCUV4ZWNJbml0QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqc3RhdGUsCisJCQkJCQkJIEFwcGVu ZGVyICpub2RlLAorCQkJCQkJCSBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkgaW50IGVmbGFncywK KwkJCQkJCQkgaW50IGZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJCQkgaW50ICpmaXJzdF92YWxp ZF9wYXJ0aWFsX3BsYW4pOworCit2b2lkCQlFeGVjRW5kQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAq bm9kZSk7CisKK3ZvaWQJCUV4ZWNSZVNjYW5BcHBlbmRlcihBcHBlbmRlclN0YXRlICpub2RlKTsK Kwordm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbihBcHBlbmRlclN0YXRlICpub2RlKTsKKwor dm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNFdmVudFdhaXQoQXBwZW5kZXJTdGF0ZSAqbm9kZSwKKwkJ CQkJCQkJCSAgIGludCB0aW1lb3V0LAorCQkJCQkJCQkJICAgdWludDMyIHdhaXRfZXZlbnRfaW5m byk7CisKKy8qIENvbW1vbiBwYXJ0IG9mIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgZm9y IEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorY2xhc3NpZnlf bWF0Y2hpbmdfc3VicGxhbnNfY29tbW9uKEJpdG1hcHNldCAqKnZhbGlkX3N1YnBsYW5zLAorCQkJ CQkJCQkgIEJpdG1hcHNldCAqYXN5bmNwbGFucywKKwkJCQkJCQkJICBCaXRtYXBzZXQgKip2YWxp ZF9hc3luY3BsYW5zKQoreworCUFzc2VydCgqdmFsaWRfYXN5bmNwbGFucyA9PSBOVUxMKTsKKwor CS8qIENoZWNrZWQgYnkgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSAqLworCUFzc2VydCgh Ym1zX2lzX2VtcHR5KCp2YWxpZF9zdWJwbGFucykpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0 aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKCFibXNfb3ZlcmxhcCgq dmFsaWRfc3VicGxhbnMsIGFzeW5jcGxhbnMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBHZXQg dmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJKnZhbGlkX2FzeW5jcGxhbnMgPSBibXNfaW50ZXJz ZWN0KGFzeW5jcGxhbnMsCisJCQkJCQkJCQkgICp2YWxpZF9zdWJwbGFucyk7CisKKwkvKiBBZGp1 c3QgdGhlIHZhbGlkIHN1YnBsYW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAqLwor CSp2YWxpZF9zdWJwbGFucyA9IGJtc19kZWxfbWVtYmVycygqdmFsaWRfc3VicGxhbnMsCisJCQkJ CQkJCQkgICp2YWxpZF9hc3luY3BsYW5zKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCQkJ CQkJCS8qIEVYRUNBUFBFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA2ODRlMzk4Zjgy NC4uMGI5M2MwMDQ3MjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNDg0LDYgKzE0ODQsMzYg QEAgdHlwZWRlZiBzdHJ1Y3QgTW9kaWZ5VGFibGVTdGF0ZQogCUxpc3QJICAgKm10X21lcmdlSm9p bkNvbmRpdGlvbnM7CiB9IE1vZGlmeVRhYmxlU3RhdGU7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqCSBBcHBlbmRlclN0YXRlIGluZm9ybWF0aW9uCisgKgorICoJCUNvbW1vbiBiYXNlIGZvciBB cHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZS4KKyAqCQlDb250YWlucyBmaWVsZHMgc2hh cmVkIGJ5IGJvdGggbm9kZSB0eXBlczogdGhlIGFycmF5IG9mIHN1YnBsYW4KKyAqCQlzdGF0ZXMs IGFzeW5jaHJvbm91cyBleGVjdXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGFuZCBwYXJ0aXRpb24KKyAq CQlwcnVuaW5nIHN0YXRlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVj dCBBcHBlbmRlclN0YXRlCit7CisJUGxhblN0YXRlCXBzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQg aXMgTm9kZVRhZyAqLworCVBsYW5TdGF0ZSAqKnBsYW5zOwkJCS8qIGFycmF5IG9mIFBsYW5TdGF0 ZXMgZm9yIG15IGlucHV0cyAqLworCWludAkJCW5wbGFuczsKKworCS8qIEFzeW5jaHJvbm91cyBl eGVjdXRpb24gc3RhdGUgKi8KKwlCaXRtYXBzZXQgICphc3luY3BsYW5zOwkJLyogYXN5bmNocm9u b3VzIHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQluYXN5bmNwbGFuczsJLyogIyBvZiBhc3luY2hy b25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiphc3luY3JlcXVlc3RzOwkvKiBhcnJheSBv ZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiphc3luY3Jlc3VsdHM7CS8qIHVu cmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm5lZWRyZXF1 ZXN0OwkvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0ICovCisJc3Ry dWN0IFdhaXRFdmVudFNldCAqZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCBmb3IgZmlsZSBkZXNj cmlwdG9yIHdhaXRzICovCisKKwkvKiBQYXJ0aXRpb24gcHJ1bmluZyBzdGF0ZSAqLworCXN0cnVj dCBQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZV9zdGF0ZTsKKwlib29sCQl2YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkOworCUJpdG1hcHNldCAgKnZhbGlkX3N1YnBsYW5zOworCUJpdG1hcHNldCAg KnZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICov Cit9IEFwcGVuZGVyU3RhdGU7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBBcHBlbmRTdGF0 ZSBpbmZvcm1hdGlvbgogICoKQEAgLTE1MDUsMzEgKzE1MzUsMjAgQEAgc3RydWN0IFBhcnRpdGlv blBydW5lU3RhdGU7CiAKIHN0cnVjdCBBcHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJ LyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiphcHBlbmRwbGFu czsJLyogYXJyYXkgb2YgUGxhblN0YXRlcyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJYXNfbnBs YW5zOworCUFwcGVuZGVyU3RhdGUgYXM7CisKIAlpbnQJCQlhc193aGljaHBsYW47CiAJYm9vbAkJ YXNfYmVndW47CQkvKiBmYWxzZSBtZWFucyBuZWVkIHRvIGluaXRpYWxpemUgKi8KLQlCaXRtYXBz ZXQgICphc19hc3luY3BsYW5zOwkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwotCWlu dAkJCWFzX25hc3luY3BsYW5zOyAvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwotCUFzeW5j UmVxdWVzdCAqKmFzX2FzeW5jcmVxdWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVzdHMgKi8K LQlUdXBsZVRhYmxlU2xvdCAqKmFzX2FzeW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCByZXN1bHRz IG9mIGFzeW5jIHBsYW5zICovCi0JaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBvZiB2YWxp ZCBlbnRyaWVzIGluIGFzX2FzeW5jcmVzdWx0cyAqLwotCWJvb2wJCWFzX3N5bmNkb25lOwkvKiB0 cnVlIGlmIGFsbCBzeW5jaHJvbm91cyBwbGFucyBkb25lIGluCi0JCQkJCQkJCSAqIGFzeW5jaHJv bm91cyBtb2RlLCBlbHNlIGZhbHNlICovCisJaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBv ZiB2YWxpZCBlbnRyaWVzIGluIGFzeW5jcmVzdWx0cyAqLworCWJvb2wJCWFzX3N5bmNkb25lOwkv KiBhbGwgc3luYyBwbGFucyBkb25lIGluIGFzeW5jIG1vZGU/ICovCiAJaW50CQkJYXNfbmFzeW5j cmVtYWluOwkvKiAjIG9mIHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlCaXRtYXBz ZXQgICphc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcg cmVxdWVzdCAqLwotCXN0cnVjdCBXYWl0RXZlbnRTZXQgKmFzX2V2ZW50c2V0OwkvKiBXYWl0RXZl bnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQotCQkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2Fp dCBldmVudHMgKi8KLQlpbnQJCQlhc19maXJzdF9wYXJ0aWFsX3BsYW47CS8qIEluZGV4IG9mICdh cHBlbmRwbGFucycgY29udGFpbmluZwotCQkJCQkJCQkJCSAqIHRoZSBmaXJzdCBwYXJ0aWFsIHBs YW4gKi8KLQlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19wc3RhdGU7IC8qIHBhcmFsbGVsIGNvb3Jk aW5hdGlvbiBpbmZvICovCi0JU2l6ZQkJcHN0YXRlX2xlbjsJCS8qIHNpemUgb2YgcGFyYWxsZWwg Y29vcmRpbmF0aW9uIGluZm8gKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqYXNfcHJ1 bmVfc3RhdGU7Ci0JYm9vbAkJYXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJLyogaXMgYXNf dmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0bWFwc2V0ICAqYXNfdmFsaWRfc3VicGxhbnM7 Ci0JQml0bWFwc2V0ICAqYXNfdmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3Vz IHBsYW5zIGluZGV4ZXMgKi8KLQlib29sCQkoKmNob29zZV9uZXh0X3N1YnBsYW4pIChBcHBlbmRT dGF0ZSAqKTsKKwlpbnQJCQlhc19maXJzdF9wYXJ0aWFsX3BsYW47CisKKwkvKiBQYXJhbGxlbCBh cHBlbmQgc3BlY2lmaWMgKi8KKwlQYXJhbGxlbEFwcGVuZFN0YXRlICphc19wc3RhdGU7CisJU2l6 ZQkJcHN0YXRlX2xlbjsKKworCWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxhbikgKHN0cnVjdCBB cHBlbmRTdGF0ZSAqKTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1NDksMTYgKzE1 NjgsMTMgQEAgc3RydWN0IEFwcGVuZFN0YXRlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBw ZW5kU3RhdGUKIHsKLQlQbGFuU3RhdGUJcHM7CQkJCS8qIGl0cyBmaXJzdCBmaWVsZCBpcyBOb2Rl VGFnICovCi0JUGxhblN0YXRlICoqbWVyZ2VwbGFuczsJCS8qIGFycmF5IG9mIFBsYW5TdGF0ZXMg Zm9yIG15IGlucHV0cyAqLwotCWludAkJCW1zX25wbGFuczsKKwlBcHBlbmRlclN0YXRlIG1zOwor CiAJaW50CQkJbXNfbmtleXM7CiAJU29ydFN1cHBvcnQgbXNfc29ydGtleXM7CS8qIGFycmF5IG9m IGxlbmd0aCBtc19ua2V5cyAqLwogCVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5 IG9mIGxlbmd0aCBtc19ucGxhbnMgKi8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyog YmluYXJ5IGhlYXAgb2Ygc2xvdCBpbmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8q IGFyZSBzdWJwbGFucyBzdGFydGVkPyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICpt c19wcnVuZV9zdGF0ZTsKLQlCaXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFuczsKIH0gTWVyZ2VB cHBlbmRTdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRl eCBiNjE4NTgyNWZjYi4uY2RmZDI5ZThhZTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zODYs NiArMzg2LDI5IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlCiAKIHN0cnVjdCBQYXJ0aXRp b25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIAor LyogLS0tLS0tLS0tLS0tLS0tLQorICoJIEFwcGVuZGVyIG5vZGUgLQorICoJCUNvbW1vbiBiYXNl IGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIHBsYW4gbm9kZXMuCisgKgkJQ29udGFpbnMgZmll bGRzIHNoYXJlZCBieSBib3RoIG5vZGUgdHlwZXM6IHRoZSBsaXN0IG9mIHN1YnBsYW5zLAorICoJ CWFwcGVuZHJlbCBpZGVudGlmaWVycywgYW5kIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlu Zm8uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IEFwcGVuZGVyCit7 CisJUGxhbgkJcGxhbjsJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLworCUJpdG1h cHNldCAgKmFwcHJlbGlkczsJCS8qIFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlz IG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsJLyogc2V0cyBvZiBS VElzIG9mIGFwcGVuZHJlbHMKKwkJCQkJCQkJCQkJICogY29uc29saWRhdGVkIGludG8gdGhpcyBu b2RlICovCisJTGlzdAkgICAqc3VicGxhbnM7CQkvKiBMaXN0IG9mIFBsYW5zIChmb3JtZXJseQor CQkJCQkJCQkgKiBhcHBlbmRwbGFucy9tZXJnZXBsYW5zKSAqLworCisJLyoKKwkgKiBJbmRleCBp bnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3Rh dGUuIFNldAorCSAqIHRvIC0xIGlmIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgdXNlZC4KKwkgKi8K KwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OworfSBBcHBlbmRlcjsKKwogLyogLS0tLS0tLS0tLS0t LS0tLQogICoJIEFwcGVuZCBub2RlIC0KICAqCQlHZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGlvbiBv ZiB0aGUgcmVzdWx0cyBvZiBzdWItcGxhbnMuCkBAIC0zOTMsMzIgKzQxNiwxNiBAQCBzdHJ1Y3Qg UGFydGl0aW9uUHJ1bmVJbmZvOwkJLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gc3RydWN0IGJlbG93 ICovCiAgKi8KIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogewotCVBsYW4JCXBsYW47Ci0KLQkvKiBS VElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2RlICovCi0JQml0bWFwc2V0ICAq YXBwcmVsaWRzOwotCi0JLyogc2V0cyBvZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVk IGludG8gdGhpcyBub2RlICovCi0JTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7Ci0K LQkvKiBwbGFucyB0byBydW4gKi8KLQlMaXN0CSAgICphcHBlbmRwbGFuczsKKwlBcHBlbmRlcglh cDsKIAogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7 CiAKIAkvKgotCSAqIEFsbCAnYXBwZW5kcGxhbnMnIHByZWNlZGluZyB0aGlzIGluZGV4IGFyZSBu b24tcGFydGlhbCBwbGFucy4gQWxsCi0JICogJ2FwcGVuZHBsYW5zJyBmcm9tIHRoaXMgaW5kZXgg b253YXJkcyBhcmUgcGFydGlhbCBwbGFucy4KKwkgKiBBbGwgJ3N1YnBsYW5zJyBwcmVjZWRpbmcg dGhpcyBpbmRleCBhcmUgbm9uLXBhcnRpYWwgcGxhbnMuIEFsbAorCSAqICdzdWJwbGFucycgZnJv bSB0aGlzIGluZGV4IG9ud2FyZHMgYXJlIHBhcnRpYWwgcGxhbnMuCiAJICovCiAJaW50CQkJZmly c3RfcGFydGlhbF9wbGFuOwotCi0JLyoKLQkgKiBJbmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQ cnVuZUluZm9zIGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3RhdGU6Ci0JICogZXNfcGFydF9wcnVu ZV9zdGF0ZXMgYW5kIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gU2V0IHRvIC0xIGlmIG5vCi0JICog cnVuLXRpbWUgcHJ1bmluZyBpcyB1c2VkLgotCSAqLwotCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7 CiB9IEFwcGVuZDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDI4LDE2ICs0MzUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIHsK LQlQbGFuCQlwbGFuOwotCi0JLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMg bm9kZSAqLwotCUJpdG1hcHNldCAgKmFwcHJlbGlkczsKLQotCS8qIHNldHMgb2YgUlRJcyBvZiBh cHBlbmRyZWxzIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgbm9kZSAqLwotCUxpc3QJICAgKmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzOwotCi0JLyogcGxhbnMgdG8gcnVuICovCi0JTGlzdAkgICAqbWVy Z2VwbGFuczsKKwlBcHBlbmRlcglhcDsKIAogCS8qIHRoZXNlIGZpZWxkcyBhcmUganVzdCBsaWtl IHRoZSBzb3J0LWtleSBpbmZvIGluIHN0cnVjdCBTb3J0OiAqLwogCkBAIC00NTUsMTMgKzQ1Myw2 IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAKIAkvKiBOVUxMUyBGSVJTVC9MQVNUIGRp cmVjdGlvbnMgKi8KIAlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsKLQotCS8qCi0JICogSW5kZXggaW50byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJ bmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4gRVN0YXRlOgotCSAqIGVzX3BhcnRfcHJ1bmVfc3Rh dGVzIGFuZCBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuIFNldCB0byAtMSBpZiBubwotCSAqIHJ1bi10 aW1lIHBydW5pbmcgaXMgdXNlZC4KLQkgKi8KLQlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBN ZXJnZUFwcGVuZDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCBlM2MxMDA3YWJkZi4uYzQ4OTliMDNkOWEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xMjYsNiArMTI2LDggQEAgQW5sRXhwckRhdGEKIEFubEluZGV4RGF0YQogQW55QXJy YXlUeXBlCiBBcHBlbmQKK0FwcGVuZGVyCitBcHBlbmRlclN0YXRlCiBBcHBlbmRQYXRoCiBBcHBl bmRQYXRoSW5wdXQKIEFwcGVuZFJlbEluZm8KLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --00000000000086468f064e33a98a--