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 1wSJg6-0036hE-2w for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 19:12:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wSJg4-009LtI-2q for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 19:12:29 +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 1wSJg3-009Lsa-1I for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 19:12:29 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wSJfz-000000013YH-3xLV for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 19:12:27 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-49056b9f04aso58325805e9.0 for ; Wed, 27 May 2026 12:12:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779909140; cv=none; d=google.com; s=arc-20240605; b=gnoXYnDXLUGXE0FcR6cSw3vg+z5dPeMewasP+Fsw/81sXjWjmTMXurWjzCL7v9IVYQ SjO+p5kNcTt9UYuHm+fi7VvZEl+JdrlRixabN0jQaKwuk03yn5zt0dsdBaJjr9eWtVTS 1ukV3A1ZKd9bm2Iiiwomaha83AYEiXyLY7fiNnDOZuEfF5Erv0Bfl2RodM60hVvC1QpU ivSh1WBYylu8uw35e8RxAUOvP7CrFd9a2ruzwswnp7N2EHsJvqqe5AzD8GgBg8H7ykgb CK9R0uvqx6mh3TCNSP4qWtwv4czKyHNxJ5L4MFfd/v4Ktl6+PlLU3206J7ktDAti0mms Ee6g== 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=SsUmbg8cKZuPsKPvCCWQh/tMAYrJI8v9eiddHz/Shfk=; fh=uVN3JjeT5PbKdb1diHsKZOlAtp47IcVUZpMhSRBIxNg=; b=X2xWtiXf60I0AP50UZj0RwKhF9izRzVv0yun+FSoruYGquMyNUjFHeWuKmGLg3YovY 6IYTpFcyPT4+P0LZa8nieEwFSGCSDdtCUStfEuDXAqou3nJdA0N9qQkpglNTfb3TA4+p kG3NwTi5YAh07Ue55YwPY1WYXoiZ5rmjFaPbjf5yCNWoWplMIF2kuLxcsR4aSski3guu NGyI7XYutV3+lhb3lmaWc2BZZ4MZ/bsihkb/FnMTcSTYebo+NoWmiHwI+57IcDHe5qWe 1UvIXMnvzreE2xtfdEmtSQJZZltR6oYPzbC4UO7tofTpMm11coZ5egOqNDmyS9dID2c9 nAew==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1779909140; x=1780513940; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SsUmbg8cKZuPsKPvCCWQh/tMAYrJI8v9eiddHz/Shfk=; b=fveTQFSxyS+QkZ7Cd5gw1wu5eHPwnpKT5D3v0PU2b6/lSO/l1i6xgyrjKDDXLabyVC 0vP33vwCCn5fD77YLLlAD+TcC8fkQ/bSaou4LGPbVrpU8OvFO2yrrBrn2Qsj94CF5s6W hPB8I0VJHAuX5TC68cuST8IakfnjtkwT5A1eVkAJ4iSOzrR5ZViTzDw9KZ8ZLe3czeNf ehaDh+O0h46VmcHgLjvJwD9YQEWoTmOuK6YrycZTzZej1eXJDdGw572avZd2FHXPNKvt N4DBMzgzZ0Ok3Eu5rQIiJPtoJ3bYPL3ao6KZk7q9cwc1OwubttN5xNe09W9/0eryiL3l zsdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779909140; x=1780513940; 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=SsUmbg8cKZuPsKPvCCWQh/tMAYrJI8v9eiddHz/Shfk=; b=p2p9z33eZuS2X3sLUOUms+saXJ0pAz7eCPjdKNn5Ojwaw0KPIdft4s+chFacXu32EE 5fIh5hpIX7VI9jGkCugqZWQvgjJPZChI4PBOkdeTZRtXZN42LGe9trINEA8Pl3xPqUHu LvWttgkO7uYmD6Zpb2+3rxGMj8u95PzpBENpeDx0j55WHlabEIijeX3nnzFpXGi4llWU qqd2hzQbWuhLoLoz1fLtmNE8kxzOP2AfHcU4oE27mJBg2RyJLPhGUEckfJsdKBf+Jaav UfUTZjTxW3dBo8Eyq3/ijrpI5DpnY7kxTxNsz7RDc10057zfgWk42JivYuZCzXMg4tF4 FutQ== X-Forwarded-Encrypted: i=1; AFNElJ/qYWGHo7k4eym5/otVYuSaJIBk9uxVgC9nvNYU6rxFH6DaXe8fKunf42hwahHCVFpEqShX0Cy8XzK/qcs0@lists.postgresql.org X-Gm-Message-State: AOJu0YwuVzh6MHrMqNF3do7B2ZhJO+B6+XKGS6DEcgcdukTmCdZf2+tc Re199XMcaGvs+dGwmXolvsyfTsv5Lusk+WD4lRYUmLEbLr7FohyGSDbBmhCRSAeU58ifZE/7HHZ kqhRGidMHT8dpaUY+78i4GBo6hbzHclH7wYCo4sD27w== X-Gm-Gg: Acq92OHqhH6M2yaG1ixyg7j0XeGvVwTCwDMwAEq8zEWykfoSJVGCeFBCGyhe6oMPOpx EIDdL1vCxXlcVj9Ta045jRLiqQt2+rZO8rqZ5vhaTb4owT25AXessCxoeZHLXcLzR3FbKYAEY16 CLcGkmnmfhvTru3cfigTiD3QACk1pGom0eccWDA3DUt0EK8GMWP+8MqdIGsrSWdf/BeM0r1XB23 87Qfo5GTjgDi0rIFgkV1UKOi3ru4rUUJOP+NQvd1PeihHyBk0RUPqHqiHreXZFZZ7GaDIhM2i1n DhoYimdqV9GB0vHxcCOPHkyxblwsBiZljt+PBJY+Ah9/t/BDJBOL4AXmN4tcl1vc X-Received: by 2002:a05:600c:3b9f:b0:48d:35e:82cb with SMTP id 5b1f17b1804b1-490428e93d6mr437917005e9.28.1779909140284; Wed, 27 May 2026 12:12:20 -0700 (PDT) MIME-Version: 1.0 References: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> In-Reply-To: From: Peter Geoghegan Date: Wed, 27 May 2026 12:11:52 -0700 X-Gm-Features: AVHnY4Lxp811nkl4S5_2lKbkrmaJJithi8zLJnjMg44KV8kYhGAWeTnK8-PvxVI Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000000ad6a20652d164ac" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000ad6a20652d164ac Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 11:39=E2=80=AFAM Peter Geoghegan wrote: > Attached is v24 -- one last revision ahead of feature freeze, just to > post what I have, before taking some time away from this. I'm resuming work on this project, now targeting Postgres 20. Attached is v25, which I'm posting now to keep CFTested happy and to ensure the patch set applies cleanly against the master branch. There are no substantive changes here compared to v24. I would like to get the first patch committed soon-ish (the one that revises the table AM by making index scans use a higher-level, slot-based interface). Maybe in the next 4-8 weeks. That piece is much simpler than the later ones. --=20 Peter Geoghegan --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v25-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqslb0 RnJvbSBjY2Q5YTM1OTI0MzI0MDllNDYwMWVmY2FjMjQ5OGQ2YjUwNjQ0YzY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSAxLzhdIEFk ZCBzbG90LWJhc2VkIHRhYmxlIEFNIGluZGV4IHNjYW4gaW50ZXJmYWNlLgoKQWRkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCwgYSBuZXcgdGFibGUgQU0gY2FsbGJhY2sgdGhhdCB3cmFwcyBib3Ro CnBsYWluIGFuZCBpbmRleC1vbmx5IGluZGV4IHNjYW5zIHRoYXQgdXNlIGFtZ2V0dHVwbGUuICBU d28gbmV3ClRhYmxlQW1Sb3V0aW5lIGNhbGxiYWNrcyBhcmUgaW50cm9kdWNlZCAtLSBvbmUgZm9y IHBsYWluIHNjYW5zIGFuZCBvbmUKZm9yIGluZGV4LW9ubHkgc2NhbnMgLS0gd2hpY2ggYW4gdXBj b21pbmcgY29tbWl0IHRoYXQgYWRkcyB0aGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ugd2lsbCBleHBh bmQgdG8gZm91ci4gIFRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBpcwpyZXNvbHZlZCBvbmNlIGlu IGluZGV4X2JlZ2luc2NhbiwgYW5kIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcgoo eHNfZ2V0bmV4dF9zbG90KSBvbiB0aGUgSW5kZXhTY2FuRGVzYyB3aGVuIHRoZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QKc2hpbSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleGVjdXRvciBub2Rl cy4KClRoaXMgbW92ZXMgVk0gY2hlY2tzIGZvciBpbmRleC1vbmx5IHNjYW5zIG91dCBvZiB0aGUg ZXhlY3V0b3IgYW5kIGludG8KaGVhcGFtLCBlbmFibGluZyBiYXRjaGluZyBvZiB2aXNpYmlsaXR5 IG1hcCBsb29rdXBzICh0aG91Z2ggZm9yIG5vdyB3ZQpjb250aW51ZSB0byBqdXN0IHBlcmZvcm0g cmV0YWlsIGxvb2t1cHMpLiAgVXNpbmcgdGhlIG5ldyBoaWdoZXIgbGV2ZWwKc2xvdC1iYXNlZCBp bnRlcmZhY2UgZ3JlYXRseSBzaW1wbGlmaWVzIG5vZGVJbmRleG9ubHlzY2FuLmMsIHdoaWNoIG5v CmxvbmdlciBoYXMgdG8gZGVhbCB3aXRoIHRoZSB2aXNpYmlsaXR5IG1hcCBkaXJlY3RseS4gIE1v cmUgaW1wb3J0YW50bHksCnRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGltcHJv dmVtZW50OiB0YWJsZSBBTXMgY2FuIG5vdwppbXBsZW1lbnQgaW5kZXgtb25seSBzY2FucyB0aGF0 IGFyZSBub3QgdGllZCB0byBoZWFwYW0ncyB2aXNpYmlsaXR5IG1hcC4KCkEgc21hbGwgbWlub3Jp dHkgb2YgY2FsbGVycyAoMiBjYWxsZXJzIGluIHRvdGFsKSBmdW5kYW1lbnRhbGx5IG5lZWQgdG8K cGFzcyBhIFRJRCB0byB0aGUgdGFibGUgQU0gKGJvdGggcGVyZm9ybSBjb25zdHJhaW50IGVuZm9y Y2VtZW50KS4gIFRoZXNlCmNhbGxlcnMgZG9uJ3QgYWN0dWFsbHkgcGVyZm9ybSBpbmRleCBzY2Fu cyAoZXZlbiBpZiB0aGVpciBUSURzIGFyZSB0YWtlbgpmcm9tIGFuIGluZGV4KSwgYW5kIGhhdmUg bm8gbmVlZCBmb3IgbW9zdCBvZiB0aGUgaW5kZXggc2NhbiBtYWNoaW5lcnkuClN3aXRjaCB0aGVz ZSBjYWxsZXJzIG92ZXIgdG8gdGhlIG5ldyBmZXRjaF90aWQgaW50ZXJmYWNlICh3aGljaCByZXBs YWNlcwp0aGUgcHJldmlvdXMgVElELWJhc2VkIGluZGV4X2ZldGNoX3R1cGxlIGludGVyZmFjZSku ICBBbGwgaW5kZXggc2NhbgpjYWxsZXJzIG5vdyB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVy ZmFjZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KS4KCkluZGV4LW9ubHkgc2NhbiBjYWxsZXJz IHBhc3MgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGEgVHVwbGVUYWJsZVNsb3QKKHdoaWNoIHRo ZSB0YWJsZSBBTSB1c2VzIGludGVybmFsbHkgZm9yIGhlYXAgZmV0Y2hlcyksIGJ1dCBjb250aW51 ZSB0bwpyZWFkIHRoZWlyIHJlc3VsdHMgZnJvbSBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3Vj aCBhcyB4c19pdHVwIChyYXRoZXIKdGhhbiBmcm9tIHRoZSBzbG90IGl0c2VsZikuICBBbGwgY2Fs bGVycyBjYW4gY29udGludWUgdG8gcmVseSBvbiB0aGUKc2NhbiBkZXNjcmlwdG9yJ3MgeHNfaGVh cHRpZCBmaWVsZCBiZWluZyBzZXQgb24gZWFjaCBjYWxsLgoKVGhlIFZJU0lURURfUEFHRVNfTElN SVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpjYXAgc2Nh biBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3VnaCBhIG5l dyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0KSwgcmF0 aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGluZyB0aGUg c2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBiZWNhdXNl IGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwpsb25nZXIg aGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hlZC4gIFNp bWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9uZ2VyIHVzZSBJbnN0ckNvdW50 VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFuIEVYUExBSU4gQU5BTFlaRS4g IEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9ybWF0aW9uIGZyb20gYSBuZXcg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0YWJsZSBBTXMKYXJlIHJlcXVp cmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlzIGNvbW1p dCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFk ZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hlcmUKdGhlIHRhYmxlIEFNIHRh a2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBwcm9ncmVzcyBvZgppbmRl eCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNj cm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBpbnRvIHRhYmxlIEFNcywgbWFr aW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBhc3MgdGhlIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUgaGVhcGFtIGltcGxlbWVudGF0 aW9ucyBtYWtlIGFnZ3Jlc3NpdmUgdXNlIG9mIGZvcmNlZCBpbmxpbmluZyB0bwplbnN1cmUgdGhh dCBwbGFpbiBhbmQgaW5kZXgtb25seSBjb2RlIHBhdGhzIGFyZSBmdWxseSBzcGVjaWFsaXplZCBh dApjb21waWxlIHRpbWUgZGVzcGl0ZSBzaGFyaW5nIGEgY29tbW9uIGltcGxlbWVudGF0aW9uLiAg VGVzdGluZyBoYXMgc2hvd24KdGhpcyBpcyBuZWNlc3NhcnkgdG8ga2VlcCBpY2FjaGUgbWlzc2Vz IHRvIGEgbWluaW11bSwgYXQgbGVhc3Qgd2l0aCB0aGUKdHdvIHVwY29taW5nIGFtZ2V0YmF0Y2gg dmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQt Qnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRvbWFz IFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpTRU1xPXFuZkxWVE9PZ0BtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAg ICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwg IDE3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgfCAgMzQg KystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAyMDggKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8ICAgNyArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjc3ICsrKysrKysr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgICAg fCAgMjcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAx MSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjg0ICsr KysrKystLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQu YyAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAg ICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jICAgICAgICAgIHwgIDI4 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgfCAgMjMgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAgICAgICAgICB8ICAgNCArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgIHwgICA1ICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgfCAxMDYgKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JpX3RyaWdnZXJzLmMgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYyAgICAgICAgICAgfCAgNjEgKy0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3RhdHMub3V0ICAgICAgICB8ICA2MiArKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Rh dHMuc3FsICAgICAgICAgICAgIHwgIDI5ICsrKwogMjYgZmlsZXMgY2hhbmdlZCwgNzE4IGluc2Vy dGlvbnMoKyksIDUzOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDY4YmZlNDA1ZC4u MDVlZWM5MjA0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTU2LDYgKzE1Niw3IEBAIGV4dGVybiB2b2lk IGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4dGVybiBJ bmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJ CQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIGluZGV4X29ubHlf c2NhbiwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzLApAQCAtMTc4LDE1ICsxNzksMTMgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxz Y2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhf cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNjYW5EZXNj IGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJCQkJCQkg IFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJCQkgIGJvb2wgaW5kZXhfb25seV9zY2FuLAog CQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJ bmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFncyk7CiBleHRlcm4g SXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hl YXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9v bCBpbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKLQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQg aW5kZXhfZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwog CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZh Y3V1bUluZm8gKmluZm8sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTE3NjQ3OGMyLi4zY2E0MmViOTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyOCw4ICsxMjgsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eEZldGNoSGVhcERhdGEKIAlCdWZmZXIJCXhzX2NidWY7CiAJQmxvY2tOdW1iZXIgeHNfYmxrOwog Ci0JLyogQ3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNp YmlsaXR5IG1hcCAqLwotCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CisJLyogRm9yIHZpc2liaWxpdHkg bWFwIGNoZWNrcyAoaW5kZXgtb25seSBzY2FucyBhbmQgb24tYWNjZXNzIHBydW5pbmcpICovCisJ QnVmZmVyCQl4c192bWJ1ZmZlcjsJLyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCiB9IEluZGV4 RmV0Y2hIZWFwRGF0YTsKIAogLyogUmVzdWx0IGNvZGVzIGZvciBIZWFwVHVwbGVTYXRpc2ZpZXNW YWN1dW0gKi8KQEAgLTQzMCwxNiArNDMwLDE1IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhlYXBf aW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAgVE1fSW5kZXhE ZWxldGVPcCAqZGVsc3RhdGUpOwogCiAvKiBpbiBoZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAqLwot ZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxh dGlvbiByZWwsIHVpbnQzMiBmbGFncyk7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hf cmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5k ZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0ZXJuIGJvb2wgaGVh cGFtX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qgc25h cHNob3QsCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCk7Citl eHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkgdWludDMyIGZsYWdzKTsKK2V4dGVybiB2b2lk IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIGJv b2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0 aW9uLAogCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1 cGxlIGhlYXBUdXBsZSwKIAkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2Fs bCk7Ci1leHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hvdCBz bmFwc2hvdCwKLQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVhcF9jb250 aW51ZSwKLQkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CiAKIC8qIGluIGhlYXAvcHJ1bmVoZWFw LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQoUmVsYXRpb24gcmVsYXRpb24s IEJ1ZmZlciBidWZmZXIsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAyZWEwNmE2N2EuLmQ5MTE1ZmNj MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJh Y2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBv cnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKQEAgLTI1 LDYgKzI2LDcgQEAKIAogc3RydWN0IFBhcmFsbGVsVGFibGVTY2FuRGVzY0RhdGE7CiBzdHJ1Y3Qg VGFibGVTY2FuSW5zdHJ1bWVudGF0aW9uOworc3RydWN0IFR1cGxlVGFibGVTbG90OwogCiAvKgog ICogR2VuZXJpYyBkZXNjcmlwdG9yIGZvciB0YWJsZSBzY2Fucy4gVGhpcyBpcyB0aGUgYmFzZS1j bGFzcyBmb3IgdGFibGUgc2NhbnMsCkBAIC0xMjMsMTIgKzEyNSwxMyBAQCB0eXBlZGVmIHN0cnVj dCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2Nh bldvcmtlcjsKIC8qCiAgKiBCYXNlIGNsYXNzIGZvciBmZXRjaGVzIGZyb20gYSB0YWJsZSB2aWEg YW4gaW5kZXguIFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MKICAqIGZvciBzdWNoIHNjYW5zLCB3aGlj aCBuZWVkcyB0byBiZSBlbWJlZGRlZCBpbiB0aGUgcmVzcGVjdGl2ZSBzdHJ1Y3QgZm9yCi0gKiBp bmRpdmlkdWFsIEFNcy4KKyAqIGluZGl2aWR1YWwgdGFibGUgQU1zLgorICoKKyAqIFRoaXMgaXMg ZXNzZW50aWFsbHkgdGhlIHRhYmxlIEFNIHNwZWNpZmljIHBvcnRpb24gb2YgSW5kZXhTY2FuRGVz Y0RhdGEsCisgKiBhY2Nlc3NlZCB0aHJvdWdoIGl0cyB4c19oZWFwZmV0Y2ggZmllbGQuCiAgKi8K IHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKLQlSZWxhdGlvbglyZWw7Ci0K IAkvKgogCSAqIEJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4g Tm8gU09fSU5URVJOQUxfRkxBR1MgYXJlCiAJICogcGVybWl0dGVkLgpAQCAtMTcyLDEwICsxNzUs MTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2Fu SW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5 IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAq IHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2Mp IHRvIHByb3ZpZGUgdGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBm aWxsIGJvdGgsIGluIHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2Vk LgorCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dl dG5leHRfc2xvdCBjYWxsIG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1 cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhl IGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBj YXNlCisJICogdGhlIGhlYXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxl CXhzX2l0dXA7CQkvKiBpbmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBs ZURlc2NEYXRhICp4c19pdHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAg Ki8KQEAgLTE4Nyw2ICsxOTAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEK IAkJCQkJCQkJCSAqIGZ1cnRoZXIgcmVzdWx0cyAqLwogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhz X2hlYXBmZXRjaDsKIAorCS8qCisJICogUmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGNhbGxiYWNrLCB3aGljaCBpcyBzZXQgYnkKKwkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBh dCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2FucworCSAqLworCWJvb2wJCSgqeHNfZ2V0bmV4 dF9zbG90KSAoc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLAorCQkJCQkJCQkJU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OworCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVj aGVja2VkICovCiAKIAkvKgpAQCAtMjAwLDYgKzIxMSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogCWJvb2wJICAgKnhzX29yZGVyYnludWxsczsKIAlib29sCQl4c19yZWNo ZWNrb3JkZXJieTsKIAorCS8qCisJICogQW4gYXBwcm94aW1hdGUgbGltaXQgb24gdGhlIGFtb3Vu dCBvZiB3b3JrLCBtZWFzdXJlZCBpbiBwYWdlcyB0b3VjaGVkLAorCSAqIGltcG9zZWQgb24gdGhl IGluZGV4IHNjYW4uICBUaGUgZGVmYXVsdCwgMCwgbWVhbnMgbm8gbGltaXQuICBVc2VkIGJ5CisJ ICogc2VsZnVuY3MuYyB0byBib3VuZCB0aGUgY29zdCBvZiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KCkuCisJICovCisJdWludDgJCXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQ7CisKIAkvKiBw YXJhbGxlbCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3Ry dWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFsbGVsX3NjYW47CiB9IEluZGV4U2Nh bkRlc2NEYXRhOwpAQCAtMjEzLDggKzIzMSw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5k ZXhTY2FuRGVzY0RhdGEKIAljaGFyCQlwc19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01F TUJFUl07CiB9CQkJUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFi bGVTbG90OwotCiAvKiBTdHJ1Y3QgZm9yIHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVt IHRhYmxlcyAqLwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaAppbmRleCBmMmMzNjY5NmIuLmU3ODFhYWFhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0z OCw2ICszOCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgQnVsa0luc2Vy dFN0YXRlRGF0YTsKIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbyBJbmRleEluZm87CiB0eXBlZGVm IHN0cnVjdCBTYW1wbGVTY2FuU3RhdGUgU2FtcGxlU2NhblN0YXRlOwogdHlwZWRlZiBzdHJ1Y3Qg U2NhbktleURhdGEgU2NhbktleURhdGE7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YSAqSW5kZXhTY2FuRGVzYzsKIHR5cGVkZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTdGF0ZSBWYWxp ZGF0ZUluZGV4U3RhdGU7CiB0eXBlZGVmIHN0cnVjdCBWYWN1dW1QYXJhbXMgVmFjdXVtUGFyYW1z OwogCkBAIC00NDYsNjAgKzQ0Nyw2NiBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQog CSAqLwogCiAJLyoKLQkgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlv biwgYXMgbmVlZGVkIHdoZW4gZmV0Y2hpbmcKLQkgKiB0dXBsZXMgZm9yIGFuIGluZGV4IHNjYW4u ICBUaGUgY2FsbGJhY2sgaGFzIHRvIHJldHVybiBhbgotCSAqIEluZGV4RmV0Y2hUYWJsZURhdGEs IHdoaWNoIHRoZSBBTSB3aWxsIHR5cGljYWxseSBlbWJlZCBpbiBhIGxhcmdlcgotCSAqIHN0cnVj dHVyZSB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisJICogUHJlcGFyZSB0byBmZXRjaCB0 dXBsZXMsIGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxlcyBmb3IgYW4gaW5kZXgKKwkgKiBz Y2FuLiAgVGhlIGNhbGxiYWNrIGhhcyB0byByZXR1cm4gYW4gSW5kZXhGZXRjaFRhYmxlRGF0YSwg d2hpY2ggdGhlIEFNCisJICogd2lsbCB0eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIgc3RydWN0 dXJlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKwkgKiBBIHBvaW50ZXIgdG8gdGhpcyBz dHJ1Y3R1cmUgd2lsbCBiZSBzdG9yZWQgaW4gcGFzc2VkIGluZGV4IHNjYW4KKwkgKiBkZXNjcmlw dG9yJ3MgeHNfaGVhcGZldGNoIGZpZWxkIGJ5IHRoZSBjYWxsZXIgKGNvcmUgZXhlY3V0b3IgY29k ZSkuCiAJICoKIAkgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5n IHVuZGVybHlpbmcgdGFibGUgc2NhbgogCSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZv ciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhc3NpbmcgdGhlc2UuCiAJICoKLQkgKiBUdXBsZXMgZm9y IGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgaW5kZXhfZmV0Y2hfdHVwbGUu CisJICogQ2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54 c19nZXRuZXh0X3Nsb3QgdG8KKwkgKiB0aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZCBjYWxsYmFj ay4gIFR1cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYQorCSAqIHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdCgpLiAgTm8gc2VwYXJhdGUgc2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KKwkg KiB0aGlzIHN0cnVjdCEKKwkgKgorCSAqIEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1 cnBvc2UgY2FsbGJhY2sgKHN0b3JlZCBoZXJlKSB3b3VsZAorCSAqIHN1ZmZpY2UsIGJ1dCB1c2lu ZyBzcGVjaWFsaXplZCB2YXJpYW50cyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKKwkg KiBtaW5pbWFsIGNvZGUgYmFzZWQgb24gY29uZGl0aW9ucyB0aGF0IGFyZSBmaXhlZCBmb3IgdGhl IHdob2xlIHNjYW4gYXMKKwkgKiBhbiBvcHRpbWl6YXRpb24gKGUuZy4sIHZhcmlhbnRzIGZvciBw bGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seQorCSAqIHNjYW5zLCBlYWNoIHdpdGggZmV3 ZXIgYnJhbmNoZXMpLgorCSAqCisJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3Nh cmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKKwkgKiBjb2x1bW5zIGRvIG5vdCBjaGFu Z2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgorCSAqIHRo ZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQg cG9pbnRzIHRvIGFuCisJICogb2xkZXIgdmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJICovCi0Jc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiBy ZWwsIHVpbnQzMiBmbGFncyk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhf ZmV0Y2hfYmVnaW4pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJICB1aW50MzIg ZmxhZ3MpOwogCiAJLyoKLQkgKiBSZXNldCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2ls bCByZWxlYXNlIGNyb3NzIGluZGV4IGZldGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhG ZXRjaFRhYmxlRGF0YS4KKwkgKiBSZXNldCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0 cyB0YWJsZS1vd25lZCByZXNvdXJjZXMuCiAJICovCi0Jdm9pZAkJKCppbmRleF9mZXRjaF9yZXNl dCkgKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpkYXRhKTsKKwl2b2lkCQkoKmluZGV4X2Zl dGNoX3Jlc2V0KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogCS8qCi0JICogUmVsZWFzZSByZXNv dXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2guCisJICogUmVsZWFzZSByZXNvdXJjZXMg YW5kIGRlYWxsb2NhdGUgaW5kZXggc2NhbiBzdGF0ZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2Zl dGNoX2VuZCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkg KiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1 cGxlcworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5k KSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCiAJLyoKIAkgKiBGZXRjaCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QK IAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndp c2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0 ZSBpbmRleGVzIHdoZW4gaW5kZXhlZAotCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0 byByZXR1cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCi0JICogdGhlIHR1cGxlIHRo YXQgaXMgdmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8g YW4KLQkgKiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKiBUaGlzIGlzIGEgbG93ZXIt bGV2ZWwgY2FsbGJhY2sgZm9yIHNpbmdsZS1zaG90IFRJRCBsb29rdXBzIHVzZWQgYnkKKwkgKiBj b25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgog CSAqCi0JICogKmNhbGxfYWdhaW4gaXMgZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gaW5kZXhf ZmV0Y2hfdHVwbGUgZm9yIGEgdGlkLgotCSAqIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3Ro ZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLQkgKiBuZWVkcyB0byBiZSBz ZXQgdG8gdHJ1ZSBieSBpbmRleF9mZXRjaF90dXBsZSwgc2lnbmFsaW5nIHRvIHRoZSBjYWxsZXIK LQkgKiB0aGF0IGluZGV4X2ZldGNoX3R1cGxlIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRo ZSBzYW1lIHRpZC4KLQkgKgotCSAqICphbGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEws IHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieQotCSAqIGluZGV4X2ZldGNoX3R1cGxlIGlmZiBpdCBp cyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUKLQkgKiB0aGF0IHR1cGxl LiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbgot CSAqIGZ1dHVyZSBzZWFyY2hlcy4KLQkgKi8KLQlib29sCQkoKmluZGV4X2ZldGNoX3R1cGxlKSAo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgIEl0ZW1Qb2ludGVy IHRpZCwKLQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90LAotCQkJCQkJCQkJICBib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVh ZCk7Ci0KLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlm eWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCi0JICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisJICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0 byB0cnVlIGJ5IGZldGNoX3RpZAorCSAqIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFj a2VuZCBuZWVkcyB0byBzZWUgdGhhdCB0dXBsZS4gSW5kZXggQU1zCisJICogY2FuIHVzZSB0aGF0 IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUgc2VhcmNoZXMuCiAJICovCisJ Ym9vbAkJKCpmZXRjaF90aWQpIChSZWxhdGlvbiByZWwsCisJCQkJCQkJICBJdGVtUG9pbnRlciB0 aWQsCisJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90LAorCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBs ZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKQEAg LTEyMzUsMTYgKzEyNDIsMTggQEAgdGFibGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxh dGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKICAqLwogCiAvKgotICogUHJl cGFyZSB0byBmZXRjaCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZl dGNoaW5nIHR1cGxlcwotICogZm9yIGFuIGluZGV4IHNjYW4uCisgKiBQcmVwYXJlIHRvIGZldGNo IHR1cGxlcyBmcm9tIHRoZSByZWxhdGlvbiBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4uCisgKiBD YWxsZXIgcHV0cyB0aGlzIGluIHRoZSBwYXNzZWQgaW5kZXggc2NhbiBkZXNjcmlwdG9yJ3MgeHNf aGVhcGZldGNoIGZpZWxkLgorICoKKyAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhl biBiZSBmZXRjaGVkIHZpYSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4KICAqCiAgKiBmbGFn cyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMuIE5vIFNPX0lOVEVSTkFMX0ZMQUdTIGFyZSBw ZXJtaXR0ZWQuCi0gKgotICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZl dGNoZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkuCiAgKi8KIHN0YXRpYyBpbmxpbmUg SW5kZXhGZXRjaFRhYmxlRGF0YSAqCi10YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiBy ZWwsIHVpbnQzMiBmbGFncykKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mg c2NhbiwgdWludDMyIGZsYWdzKQogeworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmhlYXBSZWxhdGlv bjsKKwogCUFzc2VydCgoZmxhZ3MgJiBTT19JTlRFUk5BTF9GTEFHUykgPT0gMCk7CiAKIAkvKgpA QCAtMTI1NSw3NCArMTI2NCwxMDIgQEAgdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24g cmVsLCB1aW50MzIgZmxhZ3MpCiAJaWYgKHVubGlrZWx5KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKENo ZWNrWGlkQWxpdmUpICYmICFic3lzc2NhbikpCiAJCWVsb2coRVJST1IsICJzY2FuIHN0YXJ0ZWQg ZHVyaW5nIGxvZ2ljYWwgZGVjb2RpbmciKTsKIAotCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmlu ZGV4X2ZldGNoX2JlZ2luKHJlbCwgZmxhZ3MpOworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmlu ZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKIH0KIAogLyoKLSAqIFJlc2V0IGluZGV4IGZl dGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2ggcmVzb3Vy Y2VzCi0gKiBoZWxkIGluIEluZGV4RmV0Y2hUYWJsZURhdGEuCisgKiBSZXNldCBpbmRleCBzY2Fu LCBmb3IgYSByZXNjYW4uIFJlc2V0cyB0YWJsZS1vd25lZCByZXNvdXJjZXMuCiAgKi8KIHN0YXRp YyBpbmxpbmUgdm9pZAotdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4pCit0YWJsZV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNj YW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsK KwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRf dGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJl c291cmNlcyBhbmQgZGVhbGxvY2F0ZSBpbmRleCBmZXRjaC4KKyAqIFJlbGVhc2UgcmVzb3VyY2Vz IGFuZCBkZWFsbG9jYXRlIHRoZSBJbmRleEZldGNoVGFibGVEYXRhIGluIHRoZSBzY2FuLgogICov CiBzdGF0aWMgaW5saW5lIHZvaWQKLXRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbikKK3RhYmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNj IHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7 CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJk X3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMsIGFz IHBhcnQgb2YgYW4gaW5kZXggc2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVy IGRvaW5nCi0gKiBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYg YSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0 dXJucyB0cnVlLCBmYWxzZSBvdGhlcndpc2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICogbW9k aWZpZWQgd2hlbiB3ZSByZXR1cm4gdHJ1ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlwbGUg cm93IHZlcnNpb25zCi0gKiByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4KKyAq IEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nh bm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEg dHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZAorICogdGhlIHNuYXBzaG90IHdhcyBm b3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKKyAqIHNw ZWNpZmllZCBzbG90LgogICoKLSAqICpjYWxsX2FnYWluIG5lZWRzIHRvIGJlIGZhbHNlIG9uIHRo ZSBmaXJzdCBjYWxsIHRvIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgZm9yCi0gKiBhIHRpZC4g SWYgdGhlcmUgcG90ZW50aWFsbHkgaXMgYW5vdGhlciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAq Y2FsbF9hZ2FpbgotICogd2lsbCBiZSBzZXQgdG8gdHJ1ZSwgc2lnbmFsaW5nIHRoYXQgdGFibGVf aW5kZXhfZmV0Y2hfdHVwbGUoKSBzaG91bGQgYmUgY2FsbGVkCi0gKiBhZ2FpbiBmb3IgdGhlIHNh bWUgdGlkLgorICogRGlzcGF0Y2hlcyB0aHJvdWdoIHNjYW4tPnhzX2dldG5leHRfc2xvdCwgd2hp Y2ggaXMgcmVzb2x2ZWQgb25jZSBieQorICogdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfYmVn aW4gY2FsbGJhY2suCiAgKgotICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwg d2lsbCBiZSBzZXQgdG8gdHJ1ZSBieQotICogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBpZmYg aXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlCi0gKiB0aGF0IHR1 cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBp biBmdXR1cmUKLSAqIHNlYXJjaGVzLgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1 ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiByZWxlYXNl ZCBieSBhIGZ1dHVyZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgb3IgaW5kZXhfZW5kc2NhbiBj YWxsLgogICoKLSAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGFi bGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKQotICogaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGN1cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2YgYSByb3cgaWYKLSAqIHRoZSBB TSBzdXBwb3J0cyBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEg c2luZ2xlIGluZGV4Ci0gKiBlbnRyeSAobGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90 dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIG9ubHkKLSAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhh Y3RseSBhdCBgdGlkYC4gT3V0c2lkZSBvZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCi0gKiBs b29rdXBzLCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5 IG5lZWRlZC4KKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFu ZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBX ZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGlu Zm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKgor ICogRm9yIGluZGV4LW9ubHkgc2NhbnMsIHRoZSBjYWxsYmFjayBhbHNvIGZpbGxzIHhzX2l0dXAv eHNfaXR1cGRlc2Mgb3IKKyAqIHhzX2hpdHVwL3hzX2hpdHVwZGVzYyAob3IgYm90aCkgc28gdGhh dCBpbmRleCBkYXRhIGNhbiBiZSByZXR1cm5lZCB3aXRob3V0CisgKiBhIGhlYXAgZmV0Y2guCiAg Ki8KIHN0YXRpYyBpbmxpbmUgYm9vbAotdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQlJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQlT bmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJYm9v bCAqY2FsbF9hZ2FpbiwgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQlyZXR1cm4gc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRl eF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNuYXBzaG90LAotCQkJCQkJCQkJCQkJCXNsb3QsIGNh bGxfYWdhaW4sCi0JCQkJCQkJCQkJCQkJYWxsX2RlYWQpOworCUFzc2VydChzY2FuLT54c19oZWFw ZmV0Y2gpOworCisJcmV0dXJuIHNjYW4tPnhzX2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24s IHNsb3QpOwogfQogCiAvKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5k IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgd2hpY2gKLSAqIHJldHVybnMgd2hldGhlciB0aGVy ZSBhcmUgdGFibGUgdHVwbGUgaXRlbXMgY29ycmVzcG9uZGluZyB0byBhbiBpbmRleAotICogZW50 cnkuICBUaGlzIGxpa2VseSBpcyBvbmx5IHVzZWZ1bCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIGNv bmZsaWN0IGluIGEKLSAqIHVuaXF1ZSBpbmRleC4KKyAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGlu dG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcKKyAqIHRv IGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxp dHkgdGVzdCwgcmV0dXJucworICogdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBhIGxv dy1sZXZlbCBpbnRlcmZhY2UgZGVzaWduZWQgZm9yIHVzZSBieQorICogY29uc3RyYWludCBlbmZv cmNlbWVudCBjb2RlLCB3aGVyZSBwYXNzaW5nIGEgVElEIGNhbid0IGJlIGF2b2lkZWQuCisgKgor ICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgKGUu Zy4gZHVlIHRvIGZvbGxvd2luZyBhCisgKiBIT1QgY2hhaW4gaW4gYSBoZWFwYW0gdGFibGUpLiAg Q2FsbGVyIHNob3VsZCBjb25zaWRlciBwYXNzaW5nIGEgcG9pbnRlciB0bworICogYSBtdXRhYmxl IGNvcHkgb2YgdGhlaXIgb3JpZ2luYWwgVElEIHRvIGF2b2lkIHVud2FudGVkIHNpZGUtZWZmZWN0 cy4KKyAqCisgKiBJZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgKmFsbF9kZWFkIHdpbGwgYmUgc2V0 IHRvIHRydWUgaGVyZSBpZmYgaXQgaXMKKyAqIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5l ZWRzIHRvIHNlZSBhbnkgdHVwbGUgcmVhY2hhYmxlIHRocm91Z2gKKyAqIGNhbGxlcidzIFRJRC4g IFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBzYWZlIHRvIG1hcmsgYW4gaW5kZXggdHVwbGUgY29udGFp bmluZworICogdGhpcyBUSUQgYXMgTFBfREVBRC4KKyAqCisgKiBUaGUgbWFpbiBkaWZmZXJlbmNl IGJldHdlZW4gdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBhbmQgdGhpcworICogZnVu Y3Rpb24gaXMgdGhhdCB3ZSByZXR1cm4gdGhlIGN1cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2Yg YSByb3csIHdoaWNoCisgKiBtYXR0ZXJzIHdpdGggQU1zIHRoYXQgc3VwcG9ydCBzdG9yaW5nIG11 bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEKKyAqIHNpbmdsZSBUSUQgKGUuZy4s IGR1ZSB0byBoZWFwYW0ncyBIT1QgY2hhaW5zKS4gIFRvIHJlbGlhYmx5IGV2YWx1YXRlCisgKiBl eGFjdGx5IHRoZSB0dXBsZSBhdCBgdGlkYCwgY2FsbCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVy c2lvbigpIGluc3RlYWQuCiAgKi8KLWV4dGVybiBib29sIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl X2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJ CQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwor c3RhdGljIGlubGluZSBib29sCit0YWJsZV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLAorCQkJCUl0 ZW1Qb2ludGVyIHRpZCwKKwkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQlUdXBsZVRhYmxlU2xv dCAqc2xvdCwKKwkJCQlib29sICphbGxfZGVhZCkKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFt LT5mZXRjaF90aWQocmVsLCB0aWQsIHNuYXBzaG90LCBzbG90LCBhbGxfZGVhZCk7Cit9CisKKy8q CisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0YWJsZV9mZXRjaF90aWQoKSBmb3IgY2Fs bGVycyB0aGF0IGp1c3QgbmVlZCB0bworICogY2hlY2sgaWYgYSB0dXBsZSBpcyB2aXNpYmxlLgor ICoKKyAqIENhbGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJv dXQgKnRpZCBiZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNh c2VzLgorICovCitleHRlcm4gYm9vbCB0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVs LAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hv dCwKKwkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC0xMzM2LDkgKzEzNzMsOCBAQCBleHRlcm4gYm9vbCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9j aGVjayhSZWxhdGlvbiByZWwsCiAgKiBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBh bmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMKICAqIHRydWUsIGZhbHNlIG90 aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUncyBjb21tZW50IGFi b3V0IHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogdGhlc2UgZnVuY3Rpb25zIGlzLiBJ dCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgb2YgaW5kZXgKLSAqIGVu dHJ5LT50YWJsZSB0dXBsZSBsb29rdXBzLgorICogU2VlIHRhYmxlX2ZldGNoX3RpZCdzIGNvbW1l bnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlCisgKiBmdW5jdGlvbnMg aXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNp b24oUmVsYXRpb24gcmVsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1 bWVudF9ub2RlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRl eCA0MDc2OTkwNDAuLmNiMGIwZTNkYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv aW5zdHJ1bWVudF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9u b2RlLmgKQEAgLTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24KIHsKIAkvKiBJbmRleCBzZWFyY2ggY291bnQgKGluY3JlbWVudGVkIHdpdGggcGdz dGF0X2NvdW50X2luZGV4X3NjYW4gY2FsbCkgKi8KIAl1aW50NjQJCW5zZWFyY2hlczsKKworCS8q IFRhYmxlIHR1cGxlcyBmZXRjaGVkIGNvdW50IChpbmNyZW1lbnRlZCBkdXJpbmcgaW5kZXgtb25s eSBzY2FucykgKi8KKwl1aW50NjQJCW50YWJsZXR1cGxlZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxMzM1OTE4MGQuLjJm ZDJkMTVjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3OTAsNyArMTc5MCw2IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXgg c2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIg aW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90 IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJ CSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJ CVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9y CiAgKgkJTmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRv IHBhZCB0byBOQU1FREFUQUxFTgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxl bWVudHMgaW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTgxMyw3ICsxODEyLDYg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppb3NzX1NoYXJlZEluZm87CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1 ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1iZXIg Kmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDIyNjhjYzI3Ny4u MjVlMTE4YWU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAg LTY3OSw3ICs2NzksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlv biBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCXRhYmxlU2NhbiA9IE5VTEw7CiAJCWhl YXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9s ZEluZGV4LAorCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgs IGZhbHNlLAogCQkJCQkJCQkJc25hcHNob3QgPyBzbmFwc2hvdCA6IFNuYXBzaG90QW55LAogCQkJ CQkJCQkJTlVMTCwgMCwgMCwKIAkJCQkJCQkJCVNPX05PTkUpOwpAQCAtNzIyLDcgKzcyMiw4IEBA IGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0 aW9uIE5ld0hlYXAsCiAKIAkJaWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWlu ZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkK KwkJCWlmICghdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sCisJCQkJCQkJCQkJICBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ug d2UgdXNlZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAg LTI2ODIsNyArMjY4Myw2IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0 aG9kcyA9IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4s CiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRl eF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAotCS5pbmRleF9mZXRjaF90dXBs ZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1f dHVwbGVfaW5zZXJ0LAogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVf aW5zZXJ0X3NwZWN1bGF0aXZlLApAQCAtMjY5Miw2ICsyNjkyLDcgQEAgc3RhdGljIGNvbnN0IFRh YmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV91cGRhdGUgPSBoZWFwYW1f dHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xvY2ssCiAKKwkuZmV0 Y2hfdGlkID0gaGVhcGFtX2ZldGNoX3RpZCwKIAkudHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gPSBo ZWFwYW1fZmV0Y2hfcm93X3ZlcnNpb24sCiAJLnR1cGxlX2dldF9sYXRlc3RfdGlkID0gaGVhcF9n ZXRfbGF0ZXN0X3RpZCwKIAkudHVwbGVfdGlkX3ZhbGlkID0gaGVhcGFtX3R1cGxlX3RpZF92YWxp ZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCAzM2Qx NGYxZGUuLjQ0MTVjNmVjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRl eHNjYW4uYwpAQCAtMTQsMzIgKzE0LDg1IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgog I2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHlt YXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWxzL3Bn c3RhdF9pbnRlcm5hbC5oIgogCiAKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9wbGFpbl90dXBs ZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwor c3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKKy8qCisgKiBTaW1wbGUsIHNpbmdsZS1z aG90IFRJRCBsb29rdXAgZm9yIGNvbnN0cmFpbnQgZW5mb3JjZW1lbnQgY29kZSAodW5pcXVlCisg KiBjaGVja3MgYW5kIHNpbWlsYXIpLiAgVGhpcyBpcyBlc3NlbnRpYWxseSBqdXN0IGEgaGVhcF9o b3Rfc2VhcmNoX2J1ZmZlcgorICogd3JhcHBlci4KKyAqCisgKiBUaGlzIGlzbid0IGFjdHVhbGx5 IHJlbGF0ZWQgdG8gaW5kZXggc2NhbnMsIGJ1dCBrZWVwaW5nIGl0IG5lYXIKKyAqIGhlYXBfaG90 X3NlYXJjaF9idWZmZXIgY2FuIGhlbHAgdGhlIGNvbXBpbGVyIGdlbmVyYXRlIGJldHRlciBjb2Rl LgorICovCitib29sCitoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIg dGlkLCBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wg KmFsbF9kZWFkKQoreworCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVy SGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CisJQnVmZmVyCQlidWY7CisJYm9vbAkJZm91bmQ7 CisKKwlBc3NlcnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKworCWJ1ZiA9IFJlYWRCdWZm ZXIocmVsLCBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJTG9ja0J1ZmZlcihi dWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlmb3VuZCA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIo dGlkLCByZWwsIGJ1Ziwgc25hcHNob3QsCisJCQkJCQkJCSAgICZic2xvdC0+YmFzZS50dXBkYXRh LCBhbGxfZGVhZCwgdHJ1ZSk7CisJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOwor CUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJaWYgKGZvdW5kKQorCXsK KwkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCQlFeGVjU3Rv cmVQaW5uZWRCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJ CQkJCQkgICBidWYpOworCX0KKwllbHNlCisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKworCXJldHVy biBmb3VuZDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRleCBTY2FuIENhbGxiYWNr cyBmb3IgaGVhcCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAogSW5kZXhGZXRjaFRhYmxl RGF0YSAqCi1oZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxh Z3MpCitoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIg ZmxhZ3MpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KElu ZGV4RmV0Y2hIZWFwRGF0YSk7CiAKLQloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4t PnhzX2Jhc2UuZmxhZ3MgPSBmbGFnczsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7 CiAJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+eHNfdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyOwogCisJLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1w bGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8KKwlpZiAoc2Nhbi0+eHNfd2FudF9p dHVwKQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV90dXBsZV9n ZXRuZXh0X3Nsb3Q7CisJZWxzZQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5k ZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK IH0KIAogdm9pZAotaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4pCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewog CS8qCiAJICogUmVzZXRzIGFyZSBhIG5vLW9wLgpAQCAtNTEsOSArMTA0LDkgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB9CiAKIHZvaWQKLWhl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK2hlYXBhbV9p bmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewotCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisJSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwog CiAJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBhIHBpbm5lZCBoZWFwIHBhZ2UgKi8KIAlpZiAoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCkBAIC0yMjgsMTQgKzI4MSwxOCBAQCBoZWFwX2hv dF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZl ciBidWZmZXIsCiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisvKgorICogVGhpcyBpcyB0 aGUgZ3V0cyBvZiBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtLCB3aGVyZSBpdCBhY3R1YWxs eSBmZXRjaGVzCisgKiB0aGUgaGVhcCB0dXBsZSBpdHNlbGYKKyAqLworc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKK2hlYXBhbV9pbmRleF9mZXRjaF90dXBsZShSZWxhdGlv biByZWwsCisJCQkJCQkgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCSBJdGVtUG9p bnRlciB0aWQsCiAJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCiAJCQkJCQkgYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCiB7 Ci0JSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nh bjsKIAlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBsZVRh YmxlU2xvdCAqKSBzbG90OwogCWJvb2wJCWdvdF9oZWFwX3R1cGxlOwogCkBAIC0yNTIsMTMgKzMw OSwxMiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZl cihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOworCQloc2Nhbi0+eHNfY2J1ZiA9 IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdl IHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQogCQkgKi8KLQkJaGVhcF9wYWdl X3BydW5lX29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAotCQkJCQkJCSZo c2Nhbi0+eHNfdm1idWZmZXIsCisJCWhlYXBfcGFnZV9wcnVuZV9vcHQocmVsLCBoc2Nhbi0+eHNf Y2J1ZiwgJmhzY2FuLT54c192bWJ1ZmZlciwKIAkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAm IFNPX0hJTlRfUkVMX1JFQURfT05MWSk7CiAJfQogCkBAIC0yNjgsNyArMzI0LDcgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCS8q IE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJp bGl0eSAqLwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsK IAlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLAotCQkJCQkJCQkJ CQloc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJaHNjYW4t PnhzX2NidWYsCiAJCQkJCQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2Uu dHVwZGF0YSwKQEAgLTI4NSw3ICszNDEsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSAqLwogCQkqaGVhcF9jb250aW51ZSA9 ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCi0JCXNsb3QtPnR0c190YWJsZU9pZCA9 IFJlbGF0aW9uR2V0UmVsaWQoc2Nhbi0+cmVsKTsKKwkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVs YXRpb25HZXRSZWxpZChyZWwpOwogCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5i YXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQpAQCAtMjk2LDMg KzM1MiwxOTggQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuLAogCiAJcmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQorCisvKgorICogR2V0 IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIGl0ZW0uCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZpc2li bGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiByZWNl bnRseSBmZXRjaGVkIGJ5IG91ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVMTCBp ZiBubyBtb3JlCisgKiBtYXRjaGluZyB0dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUg dGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0aG91 Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisg KiBmb3IgbW9yZSB0aGFuIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBzdWNj ZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRoZSBw aW4gbXVzdCBiZQorICogZHJvcHBlZCBlbHNld2hlcmUuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgKmhlYXBfY29udGludWUpCit7CisJYm9vbAkJYWxsX2RlYWQg PSBmYWxzZTsKKwlib29sCQlmb3VuZDsKKworCWZvdW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHNjYW4tPmhlYXBSZWxhdGlvbiwgaHNjYW4sCisJCQkJCQkJCQkgJnNjYW4tPnhzX2hlYXB0 aWQsCisJCQkJCQkJCQkgc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCisJCQkJCQkJCQkgaGVhcF9j b250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBf ZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3 aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKKwkg KiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVj dCBpbiB0aGUgbmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQp LiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5 IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJlbGF0aW9uR2V0 SW5kZXhTY2FuKCkuCisJICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJ CXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKworCXJldHVybiBmb3VuZDsKK30K KworLyoKKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90aCBoZWFwYW1faW5kZXhfKl9n ZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKgorICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVw bGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3Vu ZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIHBsYWluIGluZGV4IHNjYW5zIHRoZSB0dXBsZSBpcyBz dG9yZWQgaW4gdGhlCisgKiBzcGVjaWZpZWQgc2xvdDsgZm9yIGluZGV4LW9ubHkgc2NhbnMgb25s eSB4c19pdHVwL3hzX2hpdHVwIGlzIG1lYW5pbmdmdWwKKyAqICh0aGUgc2xvdCBpcyBjbGVhcmVk KS4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBs aWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2Fs bCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwgdG8gaGVhcGFtX2luZGV4X2ZldGNoX2VuZAorICog dGhyb3VnaCBpbmRleF9lbmRzY2FuKS4KKyAqCisgKiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIg aXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgYXQgZWFjaCBjYWxsIHNpdGUsCisgKiBhbGxvd2lu ZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50Lgor ICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5KQoreworCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhz X2hlYXBmZXRjaDsKKwlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29u dGludWU7CisJYm9vbAkJYWxsX3Zpc2libGUgPSBmYWxzZTsKKwlCbG9ja051bWJlciBsYXN0X3Zp c2l0ZWRfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJdWludDgJCW5fdmlzaXRlZF9wYWdl cyA9IDA7CisJSXRlbVBvaW50ZXIgdGlkID0gTlVMTDsKKworCWZvciAoOzspCisJeworCQlpZiAo ISpoZWFwX2NvbnRpbnVlKQorCQl7CisJCQkvKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGlu ZGV4ICovCisJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJ CQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCQkJaWYg KHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQkvKiBGb3IgaW5kZXgtb25seSBzY2Fucywg Y2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCisJCQlpZiAoaW5kZXhfb25seSkKKwkJCQlhbGxf dmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJ IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJICZoc2Nhbi0+eHNf dm1idWZmZXIpOworCQl9CisKKwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNf aGVhcHRpZCkpOworCisJCWlmIChpbmRleF9vbmx5KQorCQl7CisJCQkvKgorCQkJICogV2UgY2Fu IHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9u CisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4g IEluIGFueSBjYXNlLAorCQkJICogb3VyIGV4ZWN1dG9yIG5vZGUgY2FsbGVyIGlnbm9yZXMgdGhl IHNsb3Qgd2UgcmV0dXJuOiBpdCBmaWxscworCQkJICogaXRzIHJlc3VsdCBzbG90IGZyb20gdGhl IGluZGV4IHR1cGxlICh4c19pdHVwL3hzX2hpdHVwKS4KKwkJCSAqLworCQkJaWYgKCFhbGxfdmlz aWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhl YXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+aW5zdHJ1bWVu dCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzKys7CisKKwkJCQlp ZiAoIWhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oc2NhbiwgaHNjYW4sIHNsb3QsCisJCQkJ CQkJCQkJCQkgIGhlYXBfY29udGludWUpKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogTm8gdmlz aWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQgYSB2aXNpdGVkLXBhZ2VzIGxpbWl0CisJCQkJCSAq IChvbmx5IHNlbGZ1bmNzLmMgZG9lcyB0aGlzKSwgY291bnQgZGlzdGluY3QgaGVhcCBwYWdlcwor CQkJCQkgKiBhbmQgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHZpc2l0ZWQgdG9vIG1hbnkuCisJCQkJCSAq LworCQkJCQlpZiAodW5saWtlbHkoc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA+IDApKQor CQkJCQl7CisJCQkJCQlBc3NlcnQoaHNjYW4tPnhzX2JsayA9PSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCkpOworCisJCQkJCQlpZiAoaHNjYW4tPnhzX2JsayAhPSBsYXN0X3Zpc2l0ZWRf YmxvY2spCisJCQkJCQl7CisJCQkJCQkJbGFzdF92aXNpdGVkX2Jsb2NrID0gaHNjYW4tPnhzX2Js azsKKwkJCQkJCQlpZiAoKytuX3Zpc2l0ZWRfcGFnZXMgPiBzY2FuLT54c192aXNpdGVkX3BhZ2Vz X2xpbWl0KQorCQkJCQkJCQlyZXR1cm4gZmFsc2U7CS8qIGdpdmUgdXAgKi8KKwkJCQkJCX0KKwkJ CQkJfQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXgg ZW50cnkgKi8KKwkJCQl9CisKKwkJCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFw IHR1cGxlIGZvciBhbnl0aGluZyAqLworCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJCQkJ LyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFy ZCBpbmRleC1vbmx5CisJCQkJICogc2NhbnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRv IGtlZXAgZm9sbG93aW5nIHRoZSBIT1QKKwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRy eSBoYXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9ubHkg c2VsZnVuY3MuYykgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2FudCB1 cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJ CQkgKiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFzc2Vy dCghKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0 aGUgaGVhcCwgc28gd2UnbGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBl eHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBw YWdlIGxldmVsLgorCQkJCSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmhlYXBSZWxh dGlvbiwKKwkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJ CSAgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1hdGNo aW5nIGluZGV4IHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJCQkg KiBtYXRjaGluZyBoZWFwIHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApCisJCQkgKi8K KwkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNoIHRo ZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJCSAq IGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIg dGhlCisJCQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJaWYgKGhlYXBh bV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oc2NhbiwgaHNjYW4sIHNsb3QsCisJCQkJCQkJCQkJCSBo ZWFwX2NvbnRpbnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxz ZTsKK30KKworLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBwbGFpbiBp bmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhf cGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlKTsKK30KKwor LyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBpbmRleC1vbmx5IHNjYW4g Ki8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9vbmx5X3R1cGxl X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0 KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0 X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA0ZmQ0NzA3MDIuLjRiYTlmNDhlOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpAQCAtMzEzLDcgKzMxMywzMiBAQCB2aXNp YmlsaXR5bWFwX3NldChCbG9ja051bWJlciBoZWFwQmxrLAogICogc2luY2Ugd2UgZG9uJ3QgbG9j ayB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBlaXRoZXIsIGl0J3MgZXZlbiBwb3NzaWJsZSB0aGF0 CiAgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBiaXQganVzdCBiZWZvcmUg d2UgbG9vayBhdCBpdCwgYnV0IHlldAogICogd2UgbWlnaHQgc2VlIHRoZSBvbGQgdmFsdWUuICBJ dCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZGVhbCB3aXRoCi0gKiBhbGwgY29u Y3VycmVuY3kgaXNzdWVzIQorICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEgIEluIHByYWN0aWNl IGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBtYXR0ZXIgZm9yCisgKiB0aGUgcHJpbWFyeSB1 c2UgY2FzZTogaW5kZXgtb25seSBzY2FucyB0aGF0IGNoZWNrIHdoZXRoZXIgYSBoZWFwIGZldGNo IGNhbgorICogYmUgc2tpcHBlZC4KKyAqCisgKiBUaGUgYXJndW1lbnQgZm9yIHdoeSBpdCBjYW4n dCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZvciB0aGUgcHJpbWFyeSB1c2UKKyAqIGNhc2Ug aXMgYXMgZm9sbG93czoKKyAqCisgKiBJbnNlcnRzOiB3ZSBuZWVkIHRvIGRldGVjdCB0aGF0IGEg Vk0gYml0IHdhcyBjbGVhcmVkIGJ5IGFuIGluc2VydCByaWdodAorICogYXdheSwgYmVjYXVzZSB0 aGUgbmV3IHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IGJ1dCBub3QgeWV0IHZpc2libGUu CisgKiBSZWFkaW5nIHRoZSBUSUQgZnJvbSB0aGUgaW5kZXggcGFnZSAodW5kZXIgYSBzaGFyZWQg bG9jayBvbiB0aGUgaW5kZXgKKyAqIGJ1ZmZlcikgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBpbnNl cnRpb24gb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleCAodW5kZXIKKyAqIGFuIGV4Y2x1c2l2ZSBs b2NrIG9uIHRoZSBzYW1lIGluZGV4IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xl YXJlZAorICogYmVmb3JlIHRoZSBpbmRleCBpcyB1cGRhdGVkLCBhbmQgbG9ja2luZy91bmxvY2tp bmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cworICogYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3 ZSBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQgYml0IHdoZW5ldmVyIHdlCisgKiBzZWUgYSBy ZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVsZXRlczogdGhlIGNsZWFyaW5nIG9mIHRo ZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgTk9UIHNlcmlhbGl6ZWQgd2l0aCB0aGUKKyAqIGluZGV4 IHBhZ2UgYWNjZXNzLCBiZWNhdXNlIGRlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFn ZSAob25seQorICogVkFDVVVNIHJlbW92ZXMgdGhlIGluZGV4IFRJRCkuICBTbyB3ZSBtYXkgc2Vl IGEgc2lnbmlmaWNhbnRseSBzdGFsZSB2YWx1ZS4KKyAqIEhvd2V2ZXIsIHdlIGRvbid0IG5lZWQg dG8gZGV0ZWN0IHRoZSBkZWxldGUgcmlnaHQgYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUKKyAqIHJl bWFpbnMgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0 aGUgc3RhdGVtZW50CisgKiBlbmRzIChpZiBpdCdzIG91ciBvd24gdHJhbnNhY3Rpb24pLiAgSW4g ZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTQorICogYnVmZmVyIHdpbGwgaGF2ZSBiZWVu IHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZworICog dGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhl IGRlbGV0aW5nCisgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3 ZSBtdXN0IGhhdmUgYWNxdWlyZWQKKyAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBh Y3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCiAgKi8KIHVpbnQ4CiB2aXNpYmlsaXR5bWFwX2dldF9z dGF0dXMoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBoZWFwQmxrLCBCdWZmZXIgKnZtYnVmKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAxNDA4OTg5YzUuLmFjYzlmM2U2YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsOCBAQCBSZWxhdGlvbkdldEluZGV4 U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJ c2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5VTEw7CiAKKwlz Y2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsKKwogCXJldHVybiBzY2FuOwogfQogCkBA IC00NTQsNyArNDU2LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCQl9CiAKLQkJ c3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLAorCQlz eXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsIGZhbHNl LAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDAsCiAJCQkJCQkJCQkJIFNPX05P TkUpOwogCQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEws IDApOwpAQCAtNTE4LDcgKzUyMCw4IEBAIHN5c3RhYmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lz c2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xv dChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQor CQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5zbG90KSkKIAkJewogCQkJYm9vbAkJc2hv dWxkRnJlZTsKIApAQCAtNzE2LDcgKzcxOSw3IEBAIHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVk KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tY aWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAotCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhf YmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sIGZhbHNlLAogCQkJ CQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCSBTT19OT05FKTsKIAlp bmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwpAQCAt NzM2LDcgKzczOSw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2FuRGVzYyBzeXNz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAK IAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2Fu LT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQogCQlo dHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7 CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMKaW5kZXggNzk2N2U5Mzk4Li5lNjIzOGFmM2UgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9p bml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxy ZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4 X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4 X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJCWluZGV4X2Zl dGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0 bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0 bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhf Z2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2Rl bGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2Ns ZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTEwNSw5ICsxMDMs NiBAQCBkbyB7IFwKIAkJCSBDcHBBc1N0cmluZyhwbmFtZSksIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHNjYW4tPmluZGV4UmVsYXRpb24pKTsgXAogfSB3aGlsZSgwKQogCi1zdGF0aWMgSW5kZXhT Y2FuRGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK LQkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90 LAotCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3Nu YXApOwogc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3JlbGF0aW9uX2FzX2luZGV4KFJlbGF0 aW9uIHIpOwogCiAKQEAgLTI0OCw4NCArMjQzLDE3IEBAIGluZGV4X2luc2VydF9jbGVhbnVwKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWluc2Vy dGNsZWFudXAoaW5kZXhSZWxhdGlvbiwgaW5kZXhJbmZvKTsKIH0KIAotLyoKLSAqIGluZGV4X2Jl Z2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0dHVwbGUKLSAqCi0g KiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHN1aXRhYmxlIGxvY2tzIG9uIHRoZSBoZWFwIGFuZCB0 aGUgaW5kZXguCi0gKi8KLUluZGV4U2NhbkRlc2MKLWluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCi0JCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKLQkJCQlTbmFwc2hvdCBz bmFwc2hvdCwKLQkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCi0JCQkJ aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAotCQkJCXVpbnQzMiBmbGFncykKLXsKLQlJbmRleFNj YW5EZXNjIHNjYW47Ci0KLQlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKLQot CS8qIENoZWNrIHRoYXQgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcyBub3QgdXNlZCBmb3Igbm9uLWNh dGFsb2cgdGFibGVzICovCi0JaWYgKElzSGlzdG9yaWNNVkNDU25hcHNob3Qoc25hcHNob3QpICYm Ci0JCSFSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKGhlYXBSZWxhdGlvbikp Ci0JewotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UUkFO U0FDVElPTl9TVEFURSksCi0JCQkJIGVycm1zZygiY2Fubm90IHF1ZXJ5IG5vbi1jYXRhbG9nIHRh YmxlIFwiJXNcIiBkdXJpbmcgbG9naWNhbCBkZWNvZGluZyIsCi0JCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShoZWFwUmVsYXRpb24pKSkpOwotCX0KLQotCXNjYW4gPSBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsIE5V TEwsIGZhbHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0 aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9u R2V0SW5kZXhTY2FuLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsK LQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0 cnVtZW50OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUg Ki8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVs YXRpb24sIGZsYWdzKTsKLQotCXJldHVybiBzY2FuOwotfQotCi0vKgotICogaW5kZXhfYmVnaW5z Y2FuX2JpdG1hcCAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0Yml0bWFwCi0g KgotICogQXMgYWJvdmUsIGNhbGxlciBoYWQgYmV0dGVyIGJlIGhvbGRpbmcgc29tZSBsb2NrIG9u IHRoZSBwYXJlbnQgaGVhcAotICogcmVsYXRpb24sIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IGV4cGxp Y2l0bHkgbWVudGlvbmVkIGhlcmUuCi0gKi8KLUluZGV4U2NhbkRlc2MKLWluZGV4X2JlZ2luc2Nh bl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKLQkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsCi0JCQkJCSAgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKLQkJCQkJ ICAgaW50IG5rZXlzKQotewotCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQotCUFzc2VydChzbmFwc2hv dCAhPSBJbnZhbGlkU25hcHNob3QpOwotCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25hcHNob3QsIE5VTEwsIGZhbHNlKTsKLQotCS8q Ci0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVy eXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5kZXhTY2FuLgotCSAq LwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGlu c3RydW1lbnQ7Ci0KLQlyZXR1cm4gc2NhbjsKLX0KLQogLyoKICAqIGluZGV4X2JlZ2luc2Nhbl9p bnRlcm5hbCAtLS0gY29tbW9uIGNvZGUgZm9yIGluZGV4X2JlZ2luc2NhbiB2YXJpYW50cworICoK KyAqIFdoZW4gaGVhcFJlbGF0aW9uIGlzIG5vdCBOVUxMLCBhbHNvIGluaXRpYWxpemVzIHRhYmxl IEFNIGluZGV4IHNjYW4gc3RhdGUuCiAgKi8KLXN0YXRpYyBJbmRleFNjYW5EZXNjCi1pbmRleF9i ZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKK3N0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5EZXNjCitpbmRleF9iZWdpbnNjYW5faW50ZXJu YWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJ IGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCkKKwkJCQkJCSBQYXJhbGxl bEluZGV4U2NhbkRlc2MgcHNjYW4sCisJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICpp bnN0cnVtZW50LAorCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLCBib29sIHRlbXBfc25hcCwg dWludDMyIGZsYWdzKQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMzQ5LDkgKzI3Nyw4 MCBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAlz Y2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9z bmFwOwogCisJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5pbnN0cnVtZW50 ID0gaW5zdHJ1bWVudDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBoZWFwLXNpZGUgc2NhbiBzdGF0 ZSB3aGVuIGEgaGVhcCByZWxhdGlvbiBpcyBwcm92aWRlZC4KKwkgKiBCaXRtYXAgaW5kZXggc2Nh bnMgZG9uJ3QgcHJvdmlkZSBvbmUuCisJICovCisJaWYgKGhlYXBSZWxhdGlvbiAhPSBOVUxMKQor CXsKKwkJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCQlzY2FuLT54c193YW50 X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CisJCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxz ZTsKKworCQkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwor CQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihzY2FuLCBmbGFn cyk7CisKKwkJLyogdGFibGUgQU0gbXVzdCBzZXQgeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIGZv ciB1cyAqLworCQlBc3NlcnQoc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ICE9IE5VTEwpOworCX0KKwog CXJldHVybiBzY2FuOwogfQogCisvKgorICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2Fu IG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQorICoKKyAqIENhbGxlciBtdXN0IGJlIGhvbGRp bmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KKyAqLworSW5kZXhT Y2FuRGVzYworaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQlSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgaW5kZXhfb25seV9zY2FuLAorCQkJCVNuYXBz aG90IHNuYXBzaG90LAorCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwK KwkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMsCisJCQkJdWludDMyIGZsYWdzKQoreworCUFz c2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOworCisJLyogQ2hlY2sgdGhhdCBhIGhp c3RvcmljIHNuYXBzaG90IGlzIG5vdCB1c2VkIGZvciBub24tY2F0YWxvZyB0YWJsZXMgKi8KKwlp ZiAoSXNIaXN0b3JpY01WQ0NTbmFwc2hvdChzbmFwc2hvdCkgJiYKKwkJIVJlbGF0aW9uSXNBY2Nl c3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaGVhcFJlbGF0aW9uKSkKKwl7CisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFKSwKKwkJ CQkgZXJybXNnKCJjYW5ub3QgcXVlcnkgbm9uLWNhdGFsb2cgdGFibGUgXCIlc1wiIGR1cmluZyBs b2dpY2FsIGRlY29kaW5nIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXBSZWxh dGlvbikpKSk7CisJfQorCisJcmV0dXJuIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJl bGF0aW9uLCBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQlua2V5cywgbm9yZGVyYnlzLAorCQkJCQkJ CQkJc25hcHNob3QsIE5VTEwsIGluc3RydW1lbnQsCisJCQkJCQkJCQlpbmRleF9vbmx5X3NjYW4s IGZhbHNlLCBmbGFncyk7Cit9CisKKy8qCisgKiBpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3Rh cnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKKyAqCisgKiBBcyBhYm92ZSwg Y2FsbGVyIGhhZCBiZXR0ZXIgYmUgaG9sZGluZyBzb21lIGxvY2sgb24gdGhlIHBhcmVudCBoZWFw CisgKiByZWxhdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBub3QgZXhwbGljaXRseSBtZW50aW9uZWQg aGVyZS4KKyAqLworSW5kZXhTY2FuRGVzYworaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAorCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJICAgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAorCQkJCQkgICBpbnQgbmtleXMpCit7 CisJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CisJQXNzZXJ0KElzTVZDQ0xp a2VTbmFwc2hvdChzbmFwc2hvdCkpOworCisJcmV0dXJuIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChpbmRleFJlbGF0aW9uLCBOVUxMLCBua2V5cywgMCwgc25hcHNob3QsCisJCQkJCQkJCQlOVUxM LCBpbnN0cnVtZW50LCBmYWxzZSwgZmFsc2UsIFNPX05PTkUpOworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tCiAgKgkJaW5kZXhfcmVzY2FuICAtIChyZSlzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXgK ICAqCkBAIC0zNzcsNyArMzc2LDcgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAogCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNf aGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gp OworCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAogCXNjYW4tPmtpbGxfcHJpb3Jf dHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUg PSBmYWxzZTsKQEAgLTM5OSw3ICszOTgsNyBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJs ZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJewotCQl0YWJsZV9pbmRl eF9mZXRjaF9lbmQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJdGFibGVfaW5kZXhfZmV0Y2hfZW5k KHNjYW4pOwogCQlzY2FuLT54c19oZWFwZmV0Y2ggPSBOVUxMOwogCX0KIApAQCAtNDU0LDcgKzQ1 Myw3IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCS8qIHJlc2V0IHRh YmxlIEFNIHN0YXRlIGZvciByZXN0b3JpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiAqLwogCWlmIChz Y2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hl YXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2ls bF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9j b250aW51ZSA9IGZhbHNlOwpAQCAtNTQxLDcgKzU0MCw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNj YW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNl dChzY2FuLT54c19oZWFwZmV0Y2gpOworCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsK IAogCS8qIGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3Qg cHJvdmlkZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cGFyYWxsZWxyZXNjYW4gIT0gTlVMTCkKQEAgLTU1OCw0MSArNTU3LDMzIEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhf YmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAor CQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJ CQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJIHVpbnQzMiBmbGFncykKIHsK IAlTbmFwc2hvdAlzbmFwc2hvdDsKLQlJbmRleFNjYW5EZXNjIHNjYW47CiAKIAlBc3NlcnQoUmVs RmlsZUxvY2F0b3JFcXVhbHMoaGVhcHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2xvY2F0b3Ip KTsKIAlBc3NlcnQoUmVsRmlsZUxvY2F0b3JFcXVhbHMoaW5kZXhyZWwtPnJkX2xvY2F0b3IsIHBz Y2FuLT5wc19pbmRleGxvY2F0b3IpKTsKIAogCXNuYXBzaG90ID0gUmVzdG9yZVNuYXBzaG90KHBz Y2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKIAlSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKLQlz Y2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywgbm9yZGVyYnlz LCBzbmFwc2hvdCwKLQkJCQkJCQkJCXBzY2FuLCB0cnVlKTsKIAotCS8qCi0JICogU2F2ZSBhZGRp dGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2Fz IHNldAotCSAqIHVwIGJ5IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbC4KLQkgKi8KLQlzY2FuLT5o ZWFwUmVsYXRpb24gPSBoZWFwcmVsOwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0J c2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQkvKiBwcmVwYXJlIHRvIGZldGNoIGlu ZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2lu ZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwsIGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJldHVy biBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIGhlYXByZWwsIG5rZXlzLCBub3Jk ZXJieXMsCisJCQkJCQkJCQlzbmFwc2hvdCwgcHNjYW4sIGluc3RydW1lbnQsCisJCQkJCQkJCQlp bmRleF9vbmx5X3NjYW4sIHRydWUsIGZsYWdzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQot ICogaW5kZXhfZ2V0bmV4dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCisgKiBp bmRleF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAgKgogICogVGhlIHJlc3Vs dCBpcyB0aGUgbmV4dCBUSUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAogICogb3IgTlVMTCBp ZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBUaGlzIHNob3VsZCBvbmx5 IGJlIGNhbGxlZCBieSB0YWJsZSBBTSBhbWdldHR1cGxlLWJhc2VkIGluZGV4IHNjYW4KKyAqIGNh bGxiYWNrcy4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRlbVBvaW50ZXIKQEAgLTYyMyw3 ICs2MTQsNyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKQogCXsKIAkJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgKi8KIAkJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhz X2hlYXBmZXRjaCk7CisJCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAogCQlyZXR1 cm4gTlVMTDsKIAl9CkBAIC02MzUsOTcgKzYyNiw2IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJcmV0dXJuICZzY2FuLT54 c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZmV0Y2hfaGVh cCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoKLSAqIFRoZSByZXN1bHQgaXMg YSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAot ICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRuZXh0X3RpZCwgb3IgTlVMTCBpZiBubyBt b3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBv bmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1QgY2hhaW5zLAotICogYWx0aG91Z2ggd2hl biB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciBtb3Jl IHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKLSAqCi0gKiBPbiBzdWNjZXNzLCB0 aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZCAodGhlIHBpbiB3aWxs IGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRj aF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBt dXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhl Ci0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1 c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVu dGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wK LWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwotCWJvb2wJCWZvdW5kOwotCi0JZm91bmQg PSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0Y2gsICZzY2FuLT54c19o ZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCi0JCQkJCQkJCQkmc2Nh bi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKLQotCWlmIChmb3VuZCkKLQkJcGdzdGF0 X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7Ci0KLQkvKgotCSAqIElmIHdl IHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRl bGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2ls bCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhf Z2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgotCSAqIHJlY292ZXJ5IGJl Y2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgotCSAq IFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0JaWYgKCFzY2FuLT54YWN0U3RhcnRlZElu UmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKLQotCXJldHVy biBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2dldG5leHRfc2xv dCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgotICoKLSAqIFRoZSByZXN1bHQgaXMg dHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90 IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4g dGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBi dWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQgd2lsbCBiZQotICogZHJvcHBl ZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRl eF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2Fu LT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlz IGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhh dmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2Vu ZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9nZXRuZXh0 X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVU YWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7Ci0JCWlmICghc2Nhbi0+eHNfaGVhcF9j b250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCi0JCQkvKiBUaW1lIHRvIGZldGNo IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90 aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJp ZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0gTlVMTCkKLQkJCQlicmVhazsKLQotCQkJ QXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsKLQkJfQot Ci0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUg Zm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxv b3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCi0JCSAqIHRoZSBpbmRleC4KLQkJ ICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKLQkJ aWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9nZXRi aXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4gaW5kZXggc2NhbgogICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCmluZGV4IGM4YWY5N2RkMi4uZjFiNTVmYjIw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKQEAgLTU2MCw5ICs1NjAsOSBA QCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0 ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkgKiB3aXRoIG9wdGltaXphdGlvbnMgbGlrZSBoZWFw J3MgSE9ULCB3ZSBoYXZlIGp1c3QgYSBzaW5nbGUKIAkJCQkgKiBpbmRleCBlbnRyeSBmb3IgdGhl IGVudGlyZSBjaGFpbi4KIAkJCQkgKi8KLQkJCQllbHNlIGlmICh0YWJsZV9pbmRleF9mZXRjaF90 dXBsZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0 eSwKLQkJCQkJCQkJCQkJCQkgICAmYWxsX2RlYWQpKQorCQkJCWVsc2UgaWYgKHRhYmxlX2ZldGNo X3RpZF9jaGVjayhoZWFwUmVsLCAmaHRpZCwKKwkJCQkJCQkJCQkJICAgJlNuYXBzaG90RGlydHks CisJCQkJCQkJCQkJCSAgICZhbGxfZGVhZCkpCiAJCQkJewogCQkJCQlUcmFuc2FjdGlvbklkIHh3 YWl0OwogCkBAIC02MTgsOCArNjE4LDggQEAgX2J0X2NoZWNrX3VuaXF1ZShSZWxhdGlvbiByZWws IEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUsIFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJCSAqIGVu dHJ5LgogCQkJCQkgKi8KIAkJCQkJaHRpZCA9IGl0dXAtPnRfdGlkOwotCQkJCQlpZiAodGFibGVf aW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soaGVhcFJlbCwgJmh0aWQsCi0JCQkJCQkJCQkJCQkJICBT bmFwc2hvdFNlbGYsIE5VTEwpKQorCQkJCQlpZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBS ZWwsICZodGlkLAorCQkJCQkJCQkJCQkgIFNuYXBzaG90U2VsZiwgTlVMTCkpCiAJCQkJCXsKIAkJ CQkJCS8qIE5vcm1hbCBjYXNlIC0tLSBpdCdzIHN0aWxsIGxpdmUgKi8KIAkJCQkJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggNjhmZjA5NjZmLi4wYWM5ZjAxNDMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMjI4LDMyICsyMjgsMjAgQEAgdGFibGVfYmVnaW5z Y2FuX3BhcmFsbGVsX3RpZHJhbmdlKFJlbGF0aW9uIHJlbGF0aW9uLAogICovCiAKIC8qCi0gKiBU byBwZXJmb3JtIHRoYXQgY2hlY2sgc2ltcGx5IHN0YXJ0IGFuIGluZGV4IHNjYW4sIGNyZWF0ZSB0 aGUgbmVjZXNzYXJ5Ci0gKiBzbG90LCBkbyB0aGUgaGVhcCBsb29rdXAsIGFuZCBzaHV0IGV2ZXJ5 dGhpbmcgZG93biBhZ2Fpbi4gVGhpcyBjb3VsZCBiZQotICogb3B0aW1pemVkLCBidXQgaXMgdW5s aWtlbHkgdG8gbWF0dGVyIGZyb20gYSBwZXJmb3JtYW5jZSBQT1YuIElmIHRoZXJlCi0gKiBmcmVx dWVudGx5IGFyZSBsaXZlIGluZGV4IHBvaW50ZXJzIGFsc28gbWF0Y2hpbmcgYSB1bmlxdWUgaW5k ZXgga2V5LCB0aGUKLSAqIENQVSBvdmVyaGVhZCBvZiB0aGlzIHJvdXRpbmUgaXMgdW5saWtlbHkg dG8gbWF0dGVyLgotICoKLSAqIE5vdGUgdGhhdCAqdGlkIG1heSBiZSBtb2RpZmllZCB3aGVuIHdl IHJldHVybiB0cnVlIGlmIHRoZSBBTSBzdXBwb3J0cwotICogc3RvcmluZyBtdWx0aXBsZSByb3cg dmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNpbmdsZSBpbmRleCBlbnRyeSAobGlrZQotICogaGVh cCdzIEhPVCkuCisgKiBDYWxsZXIgc2hvdWxkIG5vdGUgdGhlIHRhYmxlX2ZldGNoX3RpZCB3YXJu aW5nIGFib3V0ICp0aWQgYmVpbmcgbW9kaWZpZWQKKyAqIHdoZW4gd2UgcmV0dXJuIHRydWUgaW4g c29tZSBjYXNlcwogICovCiBib29sCi10YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxh dGlvbiByZWwsCi0JCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkJICBTbmFwc2hvdCBz bmFwc2hvdCwKLQkJCQkJCQkgIGJvb2wgKmFsbF9kZWFkKQordGFibGVfZmV0Y2hfdGlkX2NoZWNr KFJlbGF0aW9uIHJlbCwKKwkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCSAgU25hcHNob3Qg c25hcHNob3QsCisJCQkJCSAgYm9vbCAqYWxsX2RlYWQpCiB7Ci0JSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbjsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlib29sCQljYWxsX2FnYWluID0gZmFs c2U7CiAJYm9vbAkJZm91bmQ7CiAKIAlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVsLCBOVUxM KTsKLQlzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsLCBTT19OT05FKTsKLQlmb3Vu ZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsIHNsb3QsICZj YWxsX2FnYWluLAotCQkJCQkJCQkJYWxsX2RlYWQpOwotCXRhYmxlX2luZGV4X2ZldGNoX2VuZChz Y2FuKTsKKwlmb3VuZCA9IHRhYmxlX2ZldGNoX3RpZChyZWwsIHRpZCwgc25hcHNob3QsIHNsb3Qs IGFsbF9kZWFkKTsKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCiAJcmV0 dXJuIGZvdW5kOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1h cGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggNTQ1MGEy N2ZhLi5jMDk0NzNiOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAt NTMsOCArNTMsOCBAQCBHZXRUYWJsZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChy b3V0aW5lLT5pbmRleF9mZXRjaF9iZWdpbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5k ZXhfZmV0Y2hfcmVzZXQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX2Vu ZCAhPSBOVUxMKTsKLQlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfdHVwbGUgIT0gTlVMTCk7 CiAKKwlBc3NlcnQocm91dGluZS0+ZmV0Y2hfdGlkICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5l LT50dXBsZV9mZXRjaF9yb3dfdmVyc2lvbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVw bGVfdGlkX3ZhbGlkICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV9nZXRfbGF0ZXN0 X3RpZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFp bnQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYwppbmRleCA0MjFkOGMzNTku LjdhZmY0ODEyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYwpAQCAtMTA1LDIzICsxMDUs MTQgQEAgdW5pcXVlX2tleV9yZWNoZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICogcmVtb3ZlZC4K IAkgKi8KIAl0bXB0aWQgPSBjaGVja3RpZDsKKwlpZiAoIXRhYmxlX2ZldGNoX3RpZCh0cmlnZGF0 YS0+dGdfcmVsYXRpb24sICZ0bXB0aWQsIFNuYXBzaG90U2VsZiwKKwkJCQkJCSBzbG90LCBOVUxM KSkKIAl7Ci0JCUluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJsZV9pbmRleF9mZXRjaF9i ZWdpbih0cmlnZGF0YS0+dGdfcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkJCQlTT19OT05FKTsKLQkJ Ym9vbAkJY2FsbF9hZ2FpbiA9IGZhbHNlOwotCi0JCWlmICghdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc2NhbiwgJnRtcHRpZCwgU25hcHNob3RTZWxmLCBzbG90LAotCQkJCQkJCQkJICZjYWxsX2Fn YWluLCBOVUxMKSkKLQkJewotCQkJLyoKLQkJCSAqIEFsbCByb3dzIHJlZmVyZW5jZWQgYnkgdGhl IGluZGV4IGVudHJ5IGFyZSBkZWFkLCBzbyBza2lwIHRoZQotCQkJICogY2hlY2suCi0JCQkgKi8K LQkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7Ci0JCQl0YWJsZV9pbmRleF9m ZXRjaF9lbmQoc2Nhbik7Ci0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwotCQl9Ci0J CXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKKwkJLyoKKwkJICogQWxsIHJvd3MgcmVmZXJl bmNlZCBieSB0aGUgaW5kZXggZW50cnkgYXJlIGRlYWQsIHNvIHNraXAgdGhlIGNoZWNrCisJCSAq LworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCQlyZXR1cm4gUG9pbnRl ckdldERhdHVtKE5VTEwpOwogCX0KIAogCS8qCkBAIC0xNjgsOSArMTU5LDggQEAgdW5pcXVlX2tl eV9yZWNoZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS8qCiAJCSAqIE5vdGU6IHRoaXMgaXMgbm90 IGEgcmVhbCBpbnNlcnQ7IGl0IGlzIGEgY2hlY2sgdGhhdCB0aGUgaW5kZXggZW50cnkKIAkJICog dGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluc2VydGVkIGlzIHVuaXF1ZS4gIFBhc3NpbmcgdGhlIHR1 cGxlJ3MgdGlkCi0JCSAqIChpLmUuIHVubW9kaWZpZWQgYnkgdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoKSkgaXMgY29ycmVjdCBldmVuIGlmCi0JCSAqIHRoZSByb3cgaXMgbm93IGRlYWQsIGJlY2F1 c2UgdGhhdCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cKLQkJICogYWJvdXQuCisJCSAq IChpLmUuIHVubW9kaWZpZWQgYnkgdGFibGVfZmV0Y2hfdGlkKCkpIGlzIGNvcnJlY3QgZXZlbiBp ZiB0aGUgcm93CisJCSAqIGlzIG5vdyBkZWFkLCBiZWNhdXNlIHRoYXQgaXMgdGhlIFRJRCB0aGUg aW5kZXggd2lsbCBrbm93IGFib3V0LgogCQkgKi8KIAkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsLCB2 YWx1ZXMsIGlzbnVsbCwgJmNoZWNrdGlkLAogCQkJCQkgdHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCBV TklRVUVfQ0hFQ0tfRVhJU1RJTkcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggMTEyYzE3YjBk Li5lYmU4NTI1MDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzNyw3ICsxMzcsNyBAQCBz dGF0aWMgdm9pZCBzaG93X3JlY3Vyc2l2ZV91bmlvbl9pbmZvKFJlY3Vyc2l2ZVVuaW9uU3RhdGUg KnJzdGF0ZSwKIHN0YXRpYyB2b2lkIHNob3dfbWVtb2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRp YyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRl ICplcyk7Ci1zdGF0aWMgdm9pZCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBzaG93X2luZGV4c2Nhbl9p bmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfdGlkYml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJ CQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfc2Nhbl9pb191c2FnZShT Y2FuU3RhdGUgKnBsYW5zdGF0ZSwKQEAgLTE5NzgsNyArMTk3OCw3IEBAIEV4cGxhaW5Ob2RlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkK IAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIs IDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNf aW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBl cyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVh bCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5OTIsMTUgKzE5OTIs MTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dz IFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJ CWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVz IiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBl cyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3df aW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1h cEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4p LT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2Vz dG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJ CQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2Ug VF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikg cGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg2NywxNSArMzg2NCwxNiBAQCBzaG93X2hhc2hh Z2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0g KiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cg aW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5k ZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZv aWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNo YXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0 CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQludGFibGV0dXBs ZWZldGNoZXMgPSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg5Niw2 ICszODk0LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0g KChJbmRleE9ubHlTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGlu ZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQkJCW50YWJsZXR1cGxlZmV0 Y2hlcyA9IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwog CQkJCVNoYXJlZEluZm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7 CiAJCQl9CkBAIC0zOTE5LDkgKzM5MTgsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxh blN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24gKndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJ CQluc2VhcmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW50YWJsZXR1cGxlZmV0 Y2hlcyArPSB3aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwogCQl9CiAJfQogCisJaWYg KG5vZGVUYWcocGxhbikgPT0gVF9JbmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50 ZWdlcigiSGVhcCBGZXRjaGVzIiwgTlVMTCwgbnRhYmxldHVwbGVmZXRjaGVzLCBlcyk7CisKIAlF eHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5kZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMs IGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2suYwppbmRleCBkYTlkOTQxZjQuLjE4NzBmZGE2MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcmVwYWNrLmMKQEAgLTI4NDUsMTAgKzI4NDUsMTAgQEAgZmluZF90YXJnZXRf dHVwbGUoUmVsYXRpb24gcmVsLCBDaGFuZ2VDb250ZXh0ICpjaGdjeHQsIFR1cGxlVGFibGVTbG90 ICpsb2NhdG9yLAogCX0KIAogCS8qIFhYWCBubyBpbnN0cnVtZW50YXRpb24gZm9yIG5vdyAqLwot CXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBjaGdjeHQtPmNjX2lkZW50X2luZGV4LCBHZXRB Y3RpdmVTbmFwc2hvdCgpLAorCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBjaGdjeHQtPmNj X2lkZW50X2luZGV4LCBmYWxzZSwgR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCSAgIE5VTEws IGNoZ2N4dC0+Y2NfaWRlbnRfa2V5X25lbnRyaWVzLCAwLCAwKTsKIAlpbmRleF9yZXNjYW4oc2Nh biwgY2hnY3h0LT5jY19pZGVudF9rZXksIGNoZ2N4dC0+Y2NfaWRlbnRfa2V5X25lbnRyaWVzLCBO VUxMLCAwKTsKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLCByZXRyaWV2ZWQpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHJldHJpZXZlZCkpCiAJewogCQkvKiBCZSB3YXJ5IG9m IHRlbXBvcmFsIGNvbnN0cmFpbnRzICovCiAJCWlmIChzY2FuLT54c19yZWNoZWNrICYmICFpZGVu dGl0eV9rZXlfZXF1YWwoY2hnY3h0LCBsb2NhdG9yLCByZXRyaWV2ZWQpKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjSW5kZXhpbmcuYwppbmRleCBlYjM4MzgxMjkuLjk4NjY2MTFlMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgyMywxMiArODIzLDEzIEBAIGNoZWNrX2V4Y2x1c2lv bl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHJl dHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2VsZiA9IGZhbHNlOwotCWluZGV4X3Nj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsCisJaW5kZXhfc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihoZWFwLCBpbmRleCwgZmFsc2UsCiAJCQkJCQkJCSAmRGlydHlTbmFwc2hvdCwgTlVM TCwgaW5kbmtleWF0dHMsIDAsCiAJCQkJCQkJCSBTT19OT05FKTsKIAlpbmRleF9yZXNjYW4oaW5k ZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRl eF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5n X3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5z YWN0aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggYjJjYTVjYmYxLi5mZDllZmQ5NDcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVsYXRp b25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9h dHRvZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJj aHNsb3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKHJlbCwgaWR4cmVsLAorCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWws IGZhbHNlLAogCQkJCQkJICAgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwLCBTT19OT05FKTsK IAogcmV0cnk6CkBAIC0yMTQsNyArMjE0LDcgQEAgcmV0cnk6CiAJaW5kZXhfcmVzY2FuKHNjYW4s IHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBs ZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5z aXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpAQCAtNjY5 LDEzICs2NjksMTMgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5SW5kZXgoUmVsYXRp b24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0dGVkIG9yIHRob3NlIGp1c3Qg Y29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4Y2x1ZGVkIGluIHVwZGF0ZV9t b3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxz ZSwKIAkJCQkJCSAgIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7 CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJ LyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7 CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXgg aXMgcHJpbWFyeSBrZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVC aXRtYXBJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNj YW4uYwppbmRleCA3OTc4NTE0ZTEuLjkwYjAxMGY5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVCaXRtYXBJbmRleHNjYW4uYwpAQCAtMjA0LDYgKzIwNCw3IEBAIEV4ZWNFbmRCaXRtYXBJ bmRleFNjYW4oQml0bWFwSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2 ZSBhIG5ldyBCaXRtYXBJbmRleFNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJ d2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQtPm5zZWFyY2hl czsKKwkJQXNzZXJ0KG5vZGUtPmJpc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzID09 IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpp bmRleCBkNTIwMTJlOGEuLjg4MzcyMTkzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4u aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNj LmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2luc3RydW1lbnQuaCIKQEAgLTQyLDcgKzQxLDYgQEAKICNpbmNsdWRlICJleGVjdXRv ci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTY2LDcgKzY0 LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5 IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC05Miw2ICs4OSw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKi8KIAkJc2NhbmRlc2MgPSBp bmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBu b2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgdHJ1ZSwKIAkJCQkJCQkJICAgZXN0 YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLApAQCAtMTAwLDExICs5OCw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBTT19ISU5UX1JF TF9SRUFEX09OTFkgOiBTT19OT05FKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRl c2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3Ig dGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTIxLDc4ICsxMTUsMTEgQEAgSW5kZXhP bmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93IHRoYXQg d2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxl ICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwp CisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLAor CQkJCQkJCQkJbm9kZS0+aW9zc19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9o ZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBX ZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBh Z2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJv ZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhl IGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9y eSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJ ICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1 bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwg aXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2Ug bmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBh d2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdl IGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2Vy aWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAo dXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhl IFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBs b2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBt ZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBp ZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJ ICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlz IG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNl ZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2Ug ZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0 aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFu c2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwg aGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRl ciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0 aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0 dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9j ayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICog SXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5n IHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNh bnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhl YXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJ CQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2 ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVz Yywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+ aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUg c3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVw IGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICog YmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBr ZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5l eHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRp bnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0 ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBw b2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVj b3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5v dywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28u ICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRo ZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwot CQl9Ci0KIAkJLyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9t IHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBU dXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yNDEsMTYgKzE2 OCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAog CQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQg aW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2Vz cyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9j ayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBs ZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1Bh Z2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBz bG90OwogCX0KIApAQCAtNDEwLDEzICszMjcsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8q IFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1C dWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkv KgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNz IGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0 aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzNiw2ICszNDYsNyBAQCBF eGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNo IHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJ ICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5u c2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMgKz0gbm9kZS0+aW9z c19JbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc2OCwxNCAr Njc5LDE0IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUsCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJh bGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYywKKwkJCQkJCQkJIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1Jl YWRPbmx5KCZub2RlLT5zcykgPwogCQkJCQkJCQkgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09f Tk9ORSk7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlub2Rl LT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2Fu RGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBj YWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC04MTgsMTMg KzcyOSwxNCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5f cGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aW9z c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUt Pmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJCQkJCQkJCSBTY2FuUmVs SXNSZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRfUkVMX1JFQURfT05MWSA6 IFNPX05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJ QXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElm IG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVh ZCBhbmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDM5ZjY2OTFl ZS4uODg3YTkwNzFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhz Y2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMTAs NiArMTEwLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKi8KIAkJc2Nh bmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJ CQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBmYWxzZSwKIAkJCQkJ CQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1l bnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTEzMiw3ICsxMzMsNyBA QCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQg d2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxl IChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7 CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTIwOCw2ICsyMDksNyBAQCBJbmRleE5l eHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5kZXNjID0g aW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJCSAgIGVz dGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjYsNyArMjY4LDcgQEAgSW5kZXhO ZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVw bGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4 X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlp ZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5k ZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTgxOCw2ICs4MjAsNyBAQCBF eGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhh dmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3 aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzID09IDAp OwogCX0KIAogCS8qCkBAIC0xNzA2LDYgKzE3MDksNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6 ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRl eF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJ CQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIGZhbHNlLAogCQkJCQkJCQkgbm9k ZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJ CQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzU0LDYgKzE3NTgsNyBAQCBFeGVj SW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5p c3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJ IGZhbHNlLAogCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5p c3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IGRjODljNjg2My4uOTEzMTE2NTljIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjgwNCw3ICsyODA0LDcgQEAgcmlfRmFz dFBhdGhDaGVjayhSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCWlkeF9yZWwgPSBpbmRleF9v cGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAlzbG90ID0gdGFibGVf c2xvdF9jcmVhdGUocGtfcmVsLCBOVUxMKTsKLQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihw a19yZWwsIGlkeF9yZWwsCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhf cmVsLCBmYWxzZSwKIAkJCQkJCQkgICBzbmFwc2hvdCwgTlVMTCwKIAkJCQkJCQkgICByaWluZm8t Pm5rZXlzLCAwLAogCQkJCQkJCSAgIFNPX05PTkUpOwpAQCAtMjkxOCw3ICsyOTE4LDcgQEAgcmlf RmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFJlbGF0aW9uIGZr X3JlbCwKIAkgKi8KIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1 c2hfY3h0KTsKIAotCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwg c25hcHNob3QsIE5VTEwsCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhf cmVsLCBmYWxzZSwgc25hcHNob3QsIE5VTEwsCiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwg U09fTk9ORSk7CiAKIAlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZzYXZl ZF9zZWNfY29udGV4dCk7CkBAIC0zMTE0LDcgKzMxMTQsNyBAQCByaV9GYXN0UGF0aEZsdXNoQXJy YXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCiAJ ICogV2FsayBhbGwgbWF0Y2hlcy4gIFRoZSBpbmRleCBBTSByZXR1cm5zIHRoZW0gaW4gaW5kZXgg b3JkZXIuICBGb3IgZWFjaAogCSAqIG1hdGNoLCBmaW5kIHdoaWNoIGJhdGNoIGl0ZW0ocykgaXQg c2F0aXNmaWVzLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBwa19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xvdCkpCiAJewogCQlE YXR1bQkJZm91bmRfdmFsOwogCQlib29sCQlmb3VuZF9udWxsOwpAQCAtMzE4Nyw3ICszMTg3LDcg QEAgcmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWws CiAKIAlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAotCWlm IChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90 KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgc2xvdCkpCiAJewogCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBiOTQ0OWI0NTcuLmQwMWYyNTJhZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9n aW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVh bS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcxMzMsMTAgKzcxMzIsNiBAQCBnZXRf YWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2ZV9k YXRhID0gZmFsc2U7CiAJU25hcHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRl eFNjYW5EZXNjIGluZGV4X3NjYW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 Ci0JQmxvY2tOdW1iZXIgbGFzdF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWlu dAkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0dW0J CXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsK IAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC03MTg0LDYyICs3MTc5LDI2IEBAIGdldF9h Y3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBhIGh1Z2UgYW1v dW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkg aGVhcAogCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxl ciB3aWxsIGVuZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29y ZGVkIGluIHBnX3N0YXRpc3RpYy4KKwkgKgorCSAqIFdlIHNldCB4c192aXNpdGVkX3BhZ2VzX2xp bWl0IHRvIHRlbGwgdGhlIHRhYmxlIEFNIHRvIGNvdW50IGRpc3RpbmN0CisJICogaGVhcCBwYWdl cyB2aXNpdGVkIGZvciBub24tdmlzaWJsZSB0dXBsZXMgYW5kIGdpdmUgdXAgYWZ0ZXIgdGhlIGxp bWl0CisJICogaXMgZXhjZWVkZWQuCiAJICovCisjZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQg MTAwCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJ CQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsKIAotCWluZGV4X3NjYW4gPSBpbmRl eF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2lu c2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1 bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7Ci0JLyogU2V0 IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0dXAg PSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOworCWluZGV4X3NjYW4t PnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOwogCWluZGV4X3Jl c2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJz dC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGlu ZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hp bGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHRh Ymxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxv Y2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNp dCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hl YXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2li bGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZh bmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJ ICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJ ICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNh bWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0 aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNz ZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBp dCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJCQkgKi8KLSNkZWZpbmUgVklT SVRFRF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxvY2sp Ci0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVkX2hl YXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9QQUdF U19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlz aWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2UgZG9u J3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4ZWND bGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdoZXRo ZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBIT1Qg Y2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICovCi0J CX0KLQogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0 YSBpbiBJbmRleFR1cGxlIG5vdAogCQkgKiBIZWFwVHVwbGUgZm9ybWF0LgpAQCAtNzI3MSw4ICs3 MjMwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAog CQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFz ZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVy biBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0CmluZGV4IGM1NTFhYmIx MS4uZGFmZGFjN2ZmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dApAQCAtODk3LDYg Kzg5Nyw2OCBAQCBTRUxFQ1QgaWR4X3NjYW4sIHN0YXRzX3Jlc2V0IElTIE5PVCBOVUxMIEFTIGhh c19zdGF0c19yZXNldAogICAgICAgICAwIHwgdAogKDEgcm93KQogCistLSBUZXN0IHBnX3N0YXRf YWxsX2luZGV4ZXMuaWR4X3R1cF9yZWFkIGNvdW50ZXIKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUg dGVzdF9pZHhfdHVwX3JlYWQgQVMKKyAgU0VMRUNUIGcgQVMgYSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAyMDApIGc7CitDUkVBVEUgSU5ERVggT04gdGVzdF9pZHhfdHVwX3JlYWQoYSk7CitTRVQg ZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7Cist LSBwbGFpbiBpbmRleCBzY2FuCitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7CitFWFBMQUlO IChDT1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJF IGEgQkVUV0VFTiAxIEFORCAyMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3Jl Z2F0ZQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGVzdF9pZHhfdHVwX3JlYWRfYV9pZHggb24g dGVzdF9pZHhfdHVwX3JlYWQKKyAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA+PSAxKSBBTkQgKGEg PD0gMjAwKSkKKygzIHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9y ZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQgCistLS0tLS0tCisgICAyMDAK KygxIHJvdykKKworLS0gYml0bWFwIGluZGV4IHNjYW4KK1NFVCBlbmFibGVfaW5kZXhzY2FuID0g b2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitFWFBMQUlOIChDT1NUUyBvZmYpIFNF TEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFO RCAyMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZXN0 X2lkeF90dXBfcmVhZAorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGEgPj0gMSkgQU5EIChhIDw9 IDIwMCkpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVzdF9pZHhfdHVwX3Jl YWRfYV9pZHgKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA+PSAxKSBBTkQgKGEgPD0g MjAwKSkKKyg1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFk IFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQgCistLS0tLS0tCisgICAyMDAKKygx IHJvdykKKworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFibGVfaW5kZXhvbmx5c2Nh bjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKKy0t IFdlIGV4cGVjdCBhIHRvdGFsIG9mIDQwMCB0dXBsZXMgcmVhZCAoMjAwIGZyb20gcGxhaW4gaW5k ZXggc2NhbiwgMjAwIGZyb20KKy0tIGJpdG1hcCBpbmRleCBzY2FuKS4gIEhvd2V2ZXIsIHdlIG9u bHkgZXhwZWN0IDIwMCB0dXBsZXMgZmV0Y2hlcyAoYml0bWFwCistLSBpbmRleCBzY2Fucy9oZWFw IHNjYW5zIGRvbid0IGFmZmVjdCB0aGF0IGNvdW50ZXIpLgorU0VMRUNUIHBnX3N0YXRfZm9yY2Vf bmV4dF9mbHVzaCgpOworIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBpZHhfdHVwX3JlYWQsIGlkeF90dXBf ZmV0Y2ggRlJPTSBwZ19zdGF0X2FsbF9pbmRleGVzCisgIFdIRVJFIGluZGV4cmVsaWQgPSAndGVz dF9pZHhfdHVwX3JlYWRfYV9pZHgnOjpyZWdjbGFzczsKKyBpZHhfdHVwX3JlYWQgfCBpZHhfdHVw X2ZldGNoIAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgNDAwIHwg ICAgICAgICAgIDIwMAorKDEgcm93KQorCitEUk9QIFRBQkxFIHRlc3RfaWR4X3R1cF9yZWFkOwog LS0tLS0KIC0tIFRlc3QgcmVzZXQgb2Ygc29tZSBzdGF0cyBmb3Igc2hhcmVkIHRhYmxlCiAtLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3RhdHMuc3FsCmluZGV4IDYxMGZkMjFmYS4uMWJkYzQxZjZjIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3RhdHMuc3FsCkBAIC0zOTYsNiArMzk2LDM1IEBAIFNFTEVDVCBwZ19zdGF0X3Jlc2V0 X3NpbmdsZV90YWJsZV9jb3VudGVycygndGVzdF9sYXN0X3NjYW5fcGtleSc6OnJlZ2NsYXNzKTsK IFNFTEVDVCBpZHhfc2Nhbiwgc3RhdHNfcmVzZXQgSVMgTk9UIE5VTEwgQVMgaGFzX3N0YXRzX3Jl c2V0CiAgIEZST00gcGdfc3RhdF9hbGxfaW5kZXhlcyBXSEVSRSBpbmRleHJlbGlkID0gJ3Rlc3Rf bGFzdF9zY2FuX3BrZXknOjpyZWdjbGFzczsKIAorLS0gVGVzdCBwZ19zdGF0X2FsbF9pbmRleGVz LmlkeF90dXBfcmVhZCBjb3VudGVyCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlc3RfaWR4X3R1 cF9yZWFkIEFTCisgIFNFTEVDVCBnIEFTIGEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKSBn OworQ1JFQVRFIElOREVYIE9OIHRlc3RfaWR4X3R1cF9yZWFkKGEpOworCitTRVQgZW5hYmxlX3Nl cXNjYW4gPSBvZmY7CitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7CistLSBwbGFpbiBp bmRleCBzY2FuCitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7CitFWFBMQUlOIChDT1NUUyBv ZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VF TiAxIEFORCAyMDA7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVS RSBhIEJFVFdFRU4gMSBBTkQgMjAwOworLS0gYml0bWFwIGluZGV4IHNjYW4KK1NFVCBlbmFibGVf aW5kZXhzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitFWFBMQUlOIChD T1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEg QkVUV0VFTiAxIEFORCAyMDA7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVh ZCBXSEVSRSBhIEJFVFdFRU4gMSBBTkQgMjAwOworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNF VCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBl bmFibGVfYml0bWFwc2NhbjsKKworLS0gV2UgZXhwZWN0IGEgdG90YWwgb2YgNDAwIHR1cGxlcyBy ZWFkICgyMDAgZnJvbSBwbGFpbiBpbmRleCBzY2FuLCAyMDAgZnJvbQorLS0gYml0bWFwIGluZGV4 IHNjYW4pLiAgSG93ZXZlciwgd2Ugb25seSBleHBlY3QgMjAwIHR1cGxlcyBmZXRjaGVzIChiaXRt YXAKKy0tIGluZGV4IHNjYW5zL2hlYXAgc2NhbnMgZG9uJ3QgYWZmZWN0IHRoYXQgY291bnRlciku CitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CitTRUxFQ1QgaWR4X3R1cF9yZWFk LCBpZHhfdHVwX2ZldGNoIEZST00gcGdfc3RhdF9hbGxfaW5kZXhlcworICBXSEVSRSBpbmRleHJl bGlkID0gJ3Rlc3RfaWR4X3R1cF9yZWFkX2FfaWR4Jzo6cmVnY2xhc3M7CitEUk9QIFRBQkxFIHRl c3RfaWR4X3R1cF9yZWFkOworCiAtLS0tLQogLS0gVGVzdCByZXNldCBvZiBzb21lIHN0YXRzIGZv ciBzaGFyZWQgdGFibGUKIC0tLS0tCi0tIAoyLjUzLjAKCg== --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v25-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqsll2 RnJvbSA2NjcwNjE2NTBlYWI3ZmE5NWZkMDdiOGM4OTIxMDJjZjdhOGE0N2Y0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSA3 LzhdIGFpbzogRml4IHBnYWlvX2lvX3dhaXQoKSBmb3Igc3RhZ2VkIElPcyAoQikuCgpQcmV2aW91 c2x5LCBwZ2Fpb19pb193YWl0KCkncyBjYXNlcyBmb3IgUEdBSU9fSFNfREVGSU5FRCBhbmQKUEdB SU9fSFNfU1RBR0VEIGZlbGwgdGhyb3VnaCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgVGhl IG93bmVyIG9ubHkKcHJvbWlzZXMgdG8gYWR2YW5jZSBpdCB0byBQR0FJT19IU19TVUJNSVRURUQu ICBUaGUgd2FpdGVyIG5lZWRzIHRvIGJlCnByZXBhcmVkIHRvIGNhbGwgLT53YWl0X29uZSgpIGl0 c2VsZiBvbmNlIHRoZSBJTyBpcyBzdWJtaXR0ZWQgaW4gb3JkZXIKdG8gZ3VhcmFudGVlIHByb2dy ZXNzIGFuZCBhdm9pZCBkZWFkbG9ja3Mgb24gSU8gbWV0aG9kcyB0aGF0IHByb3ZpZGUKLT53YWl0 X29uZSgpLgoKSW50cm9kdWNlIGEgbmV3IHBlci1iYWNrZW5kIGNvbmRpdGlvbiB2YXJpYWJsZSBz dWJtaXRfY3YsIHdva2VuIGJ5IGJ5CnBnYWlvX3N1Ym1pdF9zdGFnZSgpLCBhbmQgdXNlIGl0IHRv IHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBhZHZhbmNlLiAgVGhlCm5ldyBicm9hZGNhc3QgZG9lc24n dCBzZWVtIHRvIGNhdXNlIGFueSBtZWFzdXJhYmxlIHNsb3dkb3duLCBzbyBpZGVhcwpmb3Igb3B0 aW1pemluZyB0aGUgY29tbW9uIG5vLXdhaXRlcnMgY2FzZSB3ZXJlIGFiYW5kb25lZCBmb3Igbm93 LgoKSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byByZWFjaCBhbnkgcmVhbCBkZWFkbG9jayB3aXRo IGV4aXN0aW5nIEFJTwp1c2VycywgYnV0IHRoYXQgc2l0dWF0aW9uIGNvdWxkIGNoYW5nZS4gIFRo ZXJlJ3MgYWxzbyBubyByZWFzb24gdGhlCndhaXRlciBzaG91bGRuJ3QgYmVnaW4gdG8gd2FpdCB2 aWEgdGhlIElPIG1ldGhvZCBhcyBzb29uIGFzIHBvc3NpYmxlCmV2ZW4gd2l0aG91dCBhIGRlYWRs b2NrLgoKUGlja2VkIHVwIGJ5IHRlc3RpbmcgYSBwcm9wb3NlZCBJTyBtZXRob2QgdGhhdCBoYXMg LT53YWl0X29uZSgpLCBsaWtlCmlvX21ldGhvZD1pb191cmluZywgYW5kIGNvZGUgcmV2aWV3LgoK QmFja3BhdGNoLXRocm91Z2g6IDE4ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJC bVpZclNkbmhrLVhyQllPMThIODI5Szc3UzlnTUtVc3lrT2lUSnRxQjQzZyU0MG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDcgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5j ICAgICAgICAgICAgfCAgMSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQgICAgICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKaW5kZXggOWNhNDA4N2FhLi5j M2FmZGU0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjE2LDYgKzIxNiwx MyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb0JhY2tlbmQKIAl1aW50MTYJCW51bV9zdGFnZWRfaW9z OwogCVBnQWlvSGFuZGxlICpzdGFnZWRfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKIAor CS8qCisJICogT3RoZXIgYmFja2VuZHMgc29tZXRpbWVzIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG93 bmluZyBiYWNrZW5kIHRvIHN1Ym1pdC4KKwkgKiBUaGUgcGVyLUlPIENWIHdvdWxkIHdvcmsgZm9y IHRoYXQgcHVycG9zZSwgYnV0IGEgcGVyLWJhY2tlbmQgQ1YgYWxsb3dzCisJICogZm9yIGp1c3Qg b25lIGJyb2FkY2FzdCBwZXIgc3VibWl0dGVkIGJhdGNoLgorCSAqLworCUNvbmRpdGlvblZhcmlh YmxlIHN1Ym1pdF9jdjsKKwogCS8qCiAJICogTGlzdCBvZiBpbi1mbGlnaHQgSU9zLiBBbHNvIGNv bnRhaW5zIElPcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBzcGVha2luZwogCSAqIGluLWZsaWdodCBh bnltb3JlLCBidXQgaGF2ZSBiZWVuIHdhaXRlZC1mb3IgYW5kIGNvbXBsZXRlZCBieSBhbm90aGVy CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL2Fpby5jCmluZGV4IDcwMDlmYjdmNi4uY2UyZjczYmZmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW8uYwpAQCAtNTkzLDYgKzU5MywxNiBAQCBwZ2Fpb19pb193YXNfcmVjeWNsZWQoUGdB aW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uLCBQZ0Fpb0hhbmRsZVN0YXRlCiAJ cmV0dXJuIGlvaC0+Z2VuZXJhdGlvbiAhPSByZWZfZ2VuZXJhdGlvbjsKIH0KIAorLyoKKyAqIFdo ZXRoZXIgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLiBEb24ndCBjaGVjayB2aWEg dGhlIElPIG1ldGhvZCBpZgorICogdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcgdGhl IElPIHN5bmNocm9ub3VzbHkuCisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb19pb19uZWVkc193YWl0 X29uZShQZ0Fpb0hhbmRsZSAqaW9oKQoreworCXJldHVybiBwZ2Fpb19tZXRob2Rfb3BzLT53YWl0 X29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUyk7Cit9CisKIC8qCiAg KiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gRXh0ZXJuYWwgY29kZSBzaG91bGQgbmV2ZXIgdXNl IHRoaXMsIG91dHNpZGUgb2YKICAqIHRoZSBBSU8gc3Vic3lzdGVtIHdhaXRzIGFyZSBvbmx5IGFs bG93ZWQgdmlhIHBnYWlvX3dyZWZfd2FpdCgpLgpAQCAtNjMyLDIzICs2NDIsMzggQEAgcGdhaW9f aW9fd2FpdChQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pCiAJCQkJZWxv ZyhFUlJPUiwgIklPIGluIHdyb25nIHN0YXRlOiAlZCIsIHN0YXRlKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6CisJCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6CisJ CQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKIAogCQkJCS8qCi0JCQkJICogSWYgd2UgbmVlZCB0byB3 YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0Ci0JCQkJICogY2hlY2sgdmlh IHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcKLQkJCQkg KiB0aGUgSU8gc3luY2hyb25vdXNseS4KKwkJCQkgKiBUaGUgb3duZXIgaGFzbid0IHN1Ym1pdHRl ZCB0aGUgSU8geWV0LiBJZiB3ZSBuZWVkIHRvIHdhaXQKKwkJCQkgKiB2aWEgdGhlIElPIG1ldGhv ZCwgd2FpdCBmb3Igc3VibWlzc2lvbiwgZ2l2aW5nIHRoaXMgYmFja2VuZAorCQkJCSAqIHRoZSBj aGFuY2UgdG8gY2FsbCAtPndhaXRfb25lKCkuCiAJCQkJICovCi0JCQkJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKSkK KwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKKwkJCQl7CisJCQkJCVBnQWlv QmFja2VuZCAqYmFja2VuZCA9ICZwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGVbaW9oLT5vd25lcl9w cm9jbm9dOworCisJCQkJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoJmJhY2tlbmQt PnN1Ym1pdF9jdik7CisJCQkJCXdoaWxlICghcGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVm X2dlbmVyYXRpb24sICZzdGF0ZSkgJiYKKwkJCQkJCSAgIChzdGF0ZSA9PSBQR0FJT19IU19ERUZJ TkVEIHx8CisJCQkJCQkJc3RhdGUgPT0gUEdBSU9fSFNfU1RBR0VEKSkKKwkJCQkJCUNvbmRpdGlv blZhcmlhYmxlU2xlZXAoJmJhY2tlbmQtPnN1Ym1pdF9jdiwgV0FJVF9FVkVOVF9BSU9fSU9fU1VC TUlUKTsKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisJCQkJcGdfZmFsbHRocm91Z2g7CisKKwkJCWNhc2UgUEdBSU9fSFNfU1VCTUlU VEVEOgorCisJCQkJLyogSWYgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBz byBub3cuICovCisJCQkJaWYgKHBnYWlvX2lvX25lZWRzX3dhaXRfb25lKGlvaCkpCiAJCQkJewog CQkJCQlwZ2Fpb19tZXRob2Rfb3BzLT53YWl0X29uZShpb2gsIHJlZl9nZW5lcmF0aW9uKTsKIAkJ CQkJY29udGludWU7CiAJCQkJfQogCQkJCXBnX2ZhbGx0aHJvdWdoOwogCi0JCQkJLyogd2FpdGlu ZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCi0JCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6Ci0JCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKIAkJCQkvKiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxl dGUgKi8KIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURf SU86CkBAIC0xMjI2LDYgKzEyNTEsMTUgQEAgcGdhaW9fc3VibWl0X3N0YWdlZCh2b2lkKQogCiAJ cGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdlZF9pb3MgPSAwOwogCisJLyoKKwkgKiBXYWtlIGFu eSBiYWNrZW5kIHRoYXQgc3RhcnRlZCB3YWl0aW5nIGZvciBhbnkgb2YgdGhlc2UgSU9zIGJlZm9y ZQorCSAqIHN1Ym1pc3Npb24sIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIC0+d2FpdF9vbmUo KSB0byBndWFyYW50ZWUKKwkgKiBwcm9ncmVzcyB3aXRoIHRoZSBjb25maWd1cmVkIElPIG1ldGhv ZC4gIE9uIGl0cyBzaWRlLCBwZ2Fpb19pb193YWl0KCkKKwkgKiBvbmx5IHdhaXRzIGZvciBzdWJt aXRfY3Ygb24gSU8gbWV0aG9kcyBuZWVkaW5nIHRoYXQuCisJICovCisJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lKQorCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmcGdhaW9fbXlf YmFja2VuZC0+c3VibWl0X2N2KTsKKwogCXBnYWlvX2RlYnVnKERFQlVHNCwKIAkJCQkiYWlvOiBz dWJtaXR0ZWQgJWQgSU9zIiwKIAkJCQl0b3RhbF9zdWJtaXR0ZWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L2Fpb19pbml0LmMKaW5kZXggZGEzMGQ3OTJhLi42ZmMwMGE5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMTk5LDYgKzE5OSw3IEBAIEFpb1NobWVtSW5pdCh2b2lkICphcmcp CiAKIAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lv cywgMCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwor CQlDb25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgm YnMtPmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0Cmlu ZGV4IDU2MDY1OWY5NS4uN2MzMzI2MzQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMjAwLDYgKzIwMCw3IEBAIEFCSV9jb21wYXRp YmlsaXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBM RVRJT04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9f SU9fU1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJ T19JT19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5n LiIKIEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEg aW9fdXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byBy ZWFkIGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v25-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqsli1 RnJvbSA3OWM4NjMzNTRjYTlhMjBmNDViMTkzMDBhYTc1NDM0NDg2MzFjZDYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSA4 LzhdIFdJUDogYWlvOiBidWZtZ3I6IEZpeCByYWNlIGNvbmRpdGlvbiBsZWFkaW5nIHRvCiBkZWFk bG9ja3Mgd2l0aCBpb191cmluZwoKSWYgYmFja2VuZCBBIGlzIGluIHRoZSBwcm9jZXNzIG9mIHN0 YXJ0aW5nIElPIGZvciBhIGJ1ZmZlciwgdGhlcmUgaXMgYSBzaG9ydApwZXJpb2QgaW4gd2hpY2gg dGhlIGJ1ZmZlciBpcyBtYXJrZWQgYXMgSU9fSU5fUFJPR1JFU1Mgd2l0aG91dCBoYXZpbmcgYW4K YXNzb2NpYXRlZCBBSU8gd2FpdCByZWZlcmVuY2UuIElmIGEgYmFja2VuZCBCIGRvZXMgV2FpdElP KCkgb24gdGhhdCBidWZmZXIsCml0J2xsIHdhaXQgZm9yIHRoZSBidWZmZXIncyBJTyBjb25kaXRp b24gdmFyaWFibGUgdG8gYmUgc2V0LiBNb3N0IG9mIHRoZSB0aW1lCnRoYXQgaXMgT0ssIHdoZW4g dGhlIElPIG9uIHRoZSBidWZmZXIgZmluaXNoZXMsIHRoZSBDViB3aWxsIGJlIHNpZ25hbGxlZC4K SG93ZXZlciwgd2l0aCBpb191cmluZywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWVyIChB KSBvZiB0aGUgSU8gbmV2ZXIKZ2V0cyBhcm91bmQgdG8gZG9pbmcgc28sIGUuZy4gYmVjYXVzZSBp dCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgZG9uZSBieSBCLgoKVG8gZml4IHRoYXQsIHdlIG5l ZWQgdG8gc2lnbmFsIHRoZSBDViB3aGVuIHN0YWdpbmcgSU8uIFRoYXQncyBhbm5veWluZyBhcyBD Vgpicm9hZGNhc3RzIGFyZSBub3QgY2hlYXAuIFNvIHdlIGF0IGxlYXN0IGF2b2lkIGl0IGZvciB0 aGUgY29tbW9uIGNhc2Ugb2YgSU8KYmVpbmcgZXhlY3V0ZWQgc3luY2hyb25vdXNseS4KCkkgaG9w ZSB0aGF0IGV2ZW50dWFsbHkgd2UgY2FuIGdldCBhd2F5IGZyb20gbmVlZGluZyBtdWx0aXBsZSBz eXN0ZW1zIGZvcgpzaWduYWxsaW5nIElPIGNvbXBsZXRpb24sIGJ1dCB3ZSBhcmUgY2xlYXJseSBu b3QgdGhlcmUgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwg MjIgKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA2 ODgxYzYyMGMuLjFiMjllMGNhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTgzMjEsNyArODMyMSw3IEBAIE1hcmtEaXJ0eUFsbFVucGlubmVkQnVmZmVycyhpbnQzMiAqYnVm ZmVyc19kaXJ0aWVkLAogICogcmVwbGFjZWQgd2hpbGUgSU8gaXMgb25nb2luZy4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWJ1ZmZlcl9zdGFnZV9jb21tb24o UGdBaW9IYW5kbGUgKmlvaCwgYm9vbCBpc193cml0ZSwgYm9vbCBpc190ZW1wKQorYnVmZmVyX3N0 YWdlX2NvbW1vbihQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhLCBib29sIGlzX3dyaXRl LCBib29sIGlzX3RlbXApCiB7CiAJdWludDY0CSAgICppb19kYXRhOwogCXVpbnQ4CQloYW5kbGVf ZGF0YV9sZW47CkBAIC04NDIwLDcgKzg0MjAsMjMgQEAgYnVmZmVyX3N0YWdlX2NvbW1vbihQZ0Fp b0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCiAJCSAqIGtlZXBzIHRy YWNrLgogCQkgKi8KIAkJaWYgKCFpc190ZW1wKQorCQl7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0 QnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisKKwkJCS8qCisJCQkgKiBB IGJhY2tlbmQgbWlnaHQgaGF2ZSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBJTyB1c2luZyB0aGUK KwkJCSAqIGJ1ZmZlcidzIGNvbmRpdGlvbiB2YXJpYWJsZSwgYnV0IG9uY2UgdGhlIElPIGlzIHN1 Ym1pdHRlZCwgaXQKKwkJCSAqIHNob3VsZCB3YWl0IHZpYSB0aGUgQUlPIHN1YnN5c3RlbSwgYXMg YSB3YWl0ZXIgbWlnaHQgbmVlZCB0bworCQkJICogY29tcGxldGUgdGhlIElPLgorCQkJICoKKwkJ CSAqIEhvd2V2ZXIsIGRvaW5nIGJyb2FkY2FzdHMgaXMgbm90IGZyZWUsIHNvIHdlIGxpa2UgdG8g YXZvaWQgaXQKKwkJCSAqIHdoZW4gbm90IG5lY2Vzc2FyeS4gSWYgdGhlIElPIGlzIGJlaW5nIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHksCisJCQkgKiB0aGlzIGJhY2tlbmQgd2lsbCBhbHdheXMgZW5k IHVwIHNpZ25hbGxpbmcgdGhlIElPQ1Ygd2l0aG91dAorCQkJICogZnVydGhlciB3YWl0aW5nLCB0 aGVyZWZvcmUgYXZvaWQgZG9pbmcgc28gaGVyZS4KKwkJCSAqLworCQkJaWYgKCEoY2JfZGF0YSAm IFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKSkKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWZfaGRyKSk7CisJCX0KIAl9CiB9CiAKQEAg LTg5MTYsNyArODkzMiw3IEBAIGJ1ZmZlcl9yZWFkdl9yZXBvcnQoUGdBaW9SZXN1bHQgcmVzdWx0 LCBjb25zdCBQZ0Fpb1RhcmdldERhdGEgKnRkLAogc3RhdGljIHZvaWQKIHNoYXJlZF9idWZmZXJf cmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsKLQlidWZmZXJf c3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIGZhbHNlKTsKKwlidWZmZXJfc3RhZ2VfY29tbW9uKGlv aCwgY2JfZGF0YSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVzdWx0CkBAIC04 OTY3LDcgKzg5ODMsNyBAQCBzaGFyZWRfYnVmZmVyX3JlYWR2X2NvbXBsZXRlX2xvY2FsKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvUmVzdWx0IHByaW9yX3Jlc3VsdCwKIHN0YXRpYyB2b2lkCiBsb2Nh bF9idWZmZXJfcmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsK LQlidWZmZXJfc3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIHRydWUpOworCWJ1ZmZlcl9zdGFnZV9j b21tb24oaW9oLCBjYl9kYXRhLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBQZ0Fpb1Jlc3Vs dAotLSAKMi41My4wCgo= --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v25-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqslp4 RnJvbSBkYzVmMTI3ZTBiYjFlMWI1NjkyZDc1ZmZkZmExMWZhMDQ1MDNjZWRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSA1LzhdIGhl YXBhbTogQWRkIGluZGV4IHNjYW4gSS9PIHByZWZldGNoaW5nLgoKVGhpcyBjb21taXQgaW1wbGVt ZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seQpzY2Fu cyB0aGF0IHJlcXVpcmUgaGVhcCBmZXRjaGVzKS4gVGhpcyB3YXMgbWFkZSBwb3NzaWJsZSBieSB0 aGUgcmVjZW50CmFkZGl0aW9uIG9mIGJhdGNoaW5nIGludGVyZmFjZXMgdG8gYm90aCB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNIEFQSXMuCgpUaGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZh Y2UgcHJvdmlkZXMgYmF0Y2hlcyBvZiBtYXRjaGluZyBUSURzCihyYXRoZXIgdGhhbiBvbmUgdHVw bGUgYXQgYSB0aW1lKSwgZWFjaCBvZiB3aGljaCBtdXN0IGJlIHRha2VuIGZyb20KaW5kZXggdHVw bGVzIHRoYXQgYXBwZWFyIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIGluZGV4IHBhZ2UuICBUaGlzIGFs bG93cwptdWx0aXBsZSBiYXRjaGVzIHRvIGJlIGhlbGQgb3BlbiBzaW11bHRhbmVvdXNseS4gIEdp dmluZyB0aGUgdGFibGUgQU0gYW4KZXhwbGljaXQgdW5kZXJzdGFuZGluZyBvZiBpbmRleCBBTSBj b25jZXB0cy9pbmRleCBwYWdlIGJvdW5kYXJpZXMgYWxsb3dzCml0IHRvIGNvbnNpZGVyIGFsbCBv ZiB0aGUgcmVsZXZhbnQgY29zdHMgYW5kIGJlbmVmaXRzLgoKUHJlZmV0Y2hpbmcgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgYSBwcmVmZXRjaGluZyBwb3NpdGlvbiB1bmRlciB0aGUKY29udHJvbCBvZiB0 aGUgdGFibGUgQU0uICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgc2NhbiBwb3NpdGlv bgphZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQgdGhlIGFtZ2V0YmF0Y2gg aW50ZXJmYWNlLiAgQQpyZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNlcyB0aGUgcmVhZCBzdHJl YW0gYXMgbmVlZGVkIHRvIHByb3ZpZGUKc3VmZmljaWVudGx5IG1hbnkgaGVhcCBibG9jayBudW1i ZXJzIHRvIG1haW50YWluIHRoZSByZWFkIHN0cmVhbSdzCnRhcmdldCBwcmVmZXRjaCBkaXN0YW5j ZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hpbmcgY2FuIG1ha2UgaW5k ZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0aGF0IHJldHVybiBtYW55 IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzMHgKZmFzdGVyIHdpdGggbG9jYWwgU1NEcyB3aGVu IGJ1ZmZlcmVkIEkvTyBpcyB1c2VkLCBhbmQgNTB4IGZhc3RlciBvciBtb3JlCndpdGggaGlnaGVy LWxhdGVuY3kgc3RvcmFnZSBzdWNoIGFzIG5ldHdvcmstYXR0YWNoZWQgYmxvY2sgZGV2aWNlcywK d2hlcmUgdGhlIGJlbmVmaXQgb2YgaGlkaW5nIEkvTyBsYXRlbmN5IHRocm91Z2ggcHJlZmV0Y2hp bmcgaXMgZXZlbgpncmVhdGVyLgoKQSBuZXcgR1VDIChlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo KSBjb250cm9scyB0aGUgdXNlIG9mIGluZGV4CnByZWZldGNoaW5nLiAgVGhlIGRlZmF1bHQgc2V0 dGluZyBpcyAnb24nLCBzbyBhbGwgcGxhaW4gaW5kZXggc2NhbnMgdXNlCnByZWZldGNoaW5nIHdo ZXJlIHN1cHBvcnQgZXhpc3RzLiAgQWxsIGluZGV4LW9ubHkgc2NhbnMgd2lsbCBhbHNvIHVzZQpw cmVmZXRjaGluZyBhdXRvbWF0aWNhbGx5IHdoZXJlIHN1cHBvcnRlZCAob25jZSB0aGUgc2NhbiBz dGFydHMgdG8KcmVxdWlyZSBhIHNpZ25pZmljYW50IG51bWJlciBvZiBoZWFwIGZldGNoZXMpLgoK QW4gaW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0 aGUgdGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRj aCBwb3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBh aGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBj cnVjaWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5z IHRvIGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1h dGNoaW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBo YXZlIHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNh biBoYXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93 biB0byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwu ICBCYXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmlu ZyBidWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4 Y2VlZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBp cyB0ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFu aXNtIGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQg c3RyZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMg YmV5b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMg dGhlIGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFz IHNob3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBt b3JlIHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNo CmRpc3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHBy ZWZldGNoaW5nIGRlbGF5cwppbml0aWFsaXphdGlvbiBvZiB0aGUgc2NhbidzIHJlYWQgc3RyZWFt IHVudGlsIHRoZSBzY2FuIHRyYW5zaXRpb25zIGZyb20KaXRzIGZpcnN0IGJhdGNoIHRvIGl0cyBz ZWNvbmQgYmF0Y2guICBFYWNoIGJhdGNoIGNvcnJlc3BvbmRzIHRvIG1hdGNoaW5nClRJRHMgZnJv bSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIHNvIHByZWZldGNoaW5nIG9ubHkgYmVnaW5zIG9u Y2UgdGhlCnNjYW4gcmVhZHMgZnJvbSBpdHMgc2Vjb25kIGxlYWYgcGFnZSBjb250YWluaW5nIGF0 IGxlYXN0IG9uZSBtYXRjaGluZwppdGVtLiAgQSBzZWxlY3RpdmUgaW5kZXggc2NhbiB0aGF0IHRv dWNoZXMgb25seSBvbmUgbGVhZiBwYWdlIG5ldmVyCnJlYWNoZXMgdGhlIHNlY29uZCBiYXRjaCwg c28gdGhlIGhldXJpc3RpYyBjb3JyZWN0bHkgYXZvaWRzIHByZWZldGNoaW5nCm92ZXJoZWFkLiAg VGhlIHBpY3R1cmUgZm9yIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMgaXMgbWl4ZWQuCgpUaGUgc2Ft ZSBwcmluY2lwbGUgYXBwbGllcyB0byBuZXN0bG9vcCBpbm5lciBpbmRleCBzY2FucyB3aXRoIHZl cnkgdGlnaHQKbGltaXRzIChlLmcuLCBhIGNvcnJlbGF0ZWQgc3VicXVlcnkgd2l0aCBMSU1JVCAx KSwgd2hlcmUgZWFjaCByZXNjYW4KcmVhZHMgZnJvbSBvbmx5IGEgc2luZ2xlIGxlYWYgcGFnZTog dGhlIGhldXJpc3RpYyBhdm9pZHMgdGhlIGNvc3Qgb2YKcmVwZWF0ZWRseSByZXNldHRpbmcgYSBy ZWFkIHN0cmVhbSBhY3Jvc3MgbWFueSByZXNjYW5zLiAgT24gdGhlIG90aGVyCmhhbmQsIHNvbWUg c2VsZWN0aXZlIHNjYW5zIHRoYXQgYWNjZXNzIHJhbmRvbWx5LW9yZGVyZWQgaGVhcCBwYWdlcyB3 b3VsZApnZW51aW5lbHkgYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nLCBidXQgbmV2ZXIgZ2V0IGFz IGZhciBhcyByZWFjaGluZwp0aGVpciBzZWNvbmQgYmF0Y2ggLS0gYSBtaXNzZWQgb3Bwb3J0dW5p dHksIHdoZXJlIHRoZSBoZXVyaXN0aWMgaXMKb3Zlcmx5IGNhdXRpb3VzLgoKQ29udmVyc2VseSwg dGhlIGhldXJpc3RpYyBpcyBub3QgY2F1dGlvdXMgZW5vdWdoIHdpdGggc2xpZ2h0bHkgbGVzcwpz ZWxlY3RpdmUgbmVzdGxvb3AgaW5uZXIgc2NhbnMgKGUuZy4sIExJTUlUIDMgd2l0aGluIGEgTEFU RVJBTCBqb2luKS4KVGhlc2UgcmVzY2FucyBtYXkgc3BhbiB0d28gbGVhZiBwYWdlcywganVzdCBi YXJlbHkgY3Jvc3NpbmcgdGhlCnNlY29uZC1iYXRjaCB0aHJlc2hvbGQsIHdoaWxlIHN0aWxsIG9u bHkgbmVlZGluZyB0byBmZXRjaCB0d28gb3IgdGhyZWUKaGVhcCBwYWdlcyAtLSBub3QgZW5vdWdo IGZvciBwcmVmZXRjaGluZyB0byByZWFsaXN0aWNhbGx5IGhlbHAgb3IgcGF5CmZvciBpdHNlbGYg b24gYW55IGluZGl2aWR1YWwgcmVzY2FuLiAgU3VjaCBxdWVyaWVzIGFyZSByZWdyZXNzZWQgYnkg dGhlCndvcmsgZnJvbSB0aGlzIGNvbW1pdCAocmVsYXRpdmUgdG8gUG9zdGdyZVNRTCAxOCksIHRo b3VnaCBvbmx5IHdoZW4gdGhlCnNjYW4gaGFzIHRvIHJlYWQgaGVhcCBwYWdlcyBmcm9tIHN0b3Jh Z2UuCgpBZGRpbmcgYSBzbWFydGVyIGhldXJpc3RpYyB0aGF0IGFkZHJlc3NlcyBib3RoIHNob3J0 Y29taW5ncyByZW1haW5zIGFzCndvcmsgZm9yIGEgZnV0dXJlIHJlbGVhc2UuICBQYXNzaW5nIGRv d24gYW4gRXhlY1NldFR1cGxlQm91bmQgc3R5bGUgaGludAphbmQgdXNpbmcgdGhhdCBoaW50IHRv IGluZmx1ZW5jZSBob3cgdGhlIHJlYWQgc3RyZWFtIHJhbXBzIHVwIGl0cwpkaXN0YW5jZSBzZWVt cyBsaWtlIGEgcHJvbWlzaW5nIGFwcHJvYWNoLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFz QHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2Vk LUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9t YXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2Vk Yi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAg fCAgMTMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwg ICA5ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAg MzggKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA0NjYg KysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j ICAgICAgICAgfCAgMzYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAg ICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg fCAgODQgKysrLQogZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCAgICAgICAgICAgICAgICAgICAg IHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8 ICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwgNjY3IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA5MjgxZDg2NDUuLmRhYTAwOTcyMCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaApAQCAtMTM0LDYgKzEzNCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVh cERhdGEKIAogCS8qIFBsYWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9u ICovCiAJYm9vbAkJeHNfbGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4g Y3VycmVudCBiYXRjaD8gKi8KKworCS8qCisJICogUmVhZCBzdHJlYW0gc3RhdGUgZm9yIHByZWZl dGNoaW5nIChvbmx5IHVzZWQgZHVyaW5nIGFtZ2V0YmF0Y2ggc2NhbnMpLgorCSAqCisJICogVGhl IHJlYWQgc3RyZWFtIG1vdmVzIGFoZWFkIG9mIHRoZSBzY2FuJ3MgY3VycmVudCBwb3NpdGlvbiB1 c2luZyBpdHMKKwkgKiBvd24gcHJlZmV0Y2hpbmcgcG9zaXRpb24gKHBlciBjb252ZW50aW9ucyBz dXBwb3J0ZWQgYnkgaW5kZXhiYXRjaC5jKS4KKwkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2Nh dGVkIGVhcmx5IGluIHRoZSBzY2FuLCBhbmQgcmVzZXQgb24gcmVzY2FuCisJICogKGFuZCB3aGVu IHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzKS4KKwkgKi8KKwlib29sCQl4c19wYXVzZWQ7CQkv KiBwYXVzZWQgdW50aWwgbmV4dCBiYXRjaCBpcyByZWFkPyAqLworCVNjYW5EaXJlY3Rpb24geHNf cmVhZF9zdHJlYW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVy IHhzX3ByZWZldGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3Ry ZWFtICovCisJUmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07IC8qIHByZWZldGNoaW5nIHJlYWQg c3RyZWFtICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyogUmVzdWx0IGNvZGVzIGZvciBI ZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9pbmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCmluZGV4IGRm MGJlOGM5Zi4uMjkxNzdlMjA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhi YXRjaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTQ0LDYgKzQ0 LDcgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlB c3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7 CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJh dGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1 Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNo ID0gTlVMTDsKQEAgLTY1LDE2ICs2NiwxNiBAQCBleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5n dWFyZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogLyoK ICAqIEZldGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAo b3IgdGhlIGZpcnN0KS4KICAqCi0gKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNo IChwYXNzZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKLSAqIG1hdGNoaW5nIGl0 ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCi0g KiBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICogQ2Fs bGVkIHdoZW4gY2FsbGVyJ3MgY3VycmVudCBzY2FuQmF0Y2gvcHJlZmV0Y2hCYXRjaCAocGFzc2Vk IHRvIHVzIGFzCisgKiBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0 aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIKKyAqIHBhc3NlcyBhIE5VTEwgcHJpb3JC YXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2Nhbi4KICAqCiAgKiBSZXR1cm5z IHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSBjYWxsZXIgaW4gdGhlIGdpdmVuIHNj YW4KICAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMg aW4gdGhhdCBkaXJlY3Rpb24uCiAgKgogICogVGhpcyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBl bmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UgZG9uJ3QKICAqIGZyZWUgYW55IGJh dGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxlZnQgdXAgdG8gdGhlIGNhbGxlci4gIFRoZSBj YWxsZXIKLSAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBwb3NpdGlv bi4KKyAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBzY2FuUG9zL3By ZWZldGNoUG9zIHBvc2l0aW9uLgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxp bmUgSW5kZXhTY2FuQmF0Y2gKIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRl eCBjNmU3Njc1ZDIuLjRmYzIwOWMwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMjEsNiArMjIx LDEwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dz IHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBz YW1lCiAJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFk ZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGlj dWxhciwgZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3Zl cnMKKwkgKiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICB0YWJsZWFtX3V0aWxf ZmV0Y2hfbmV4dF9iYXRjaCgpCisJICogY2hlY2tzIHRoZXNlIGZsYWdzIHNvIHRoYXQgdGhlIHNj YW4gc2lkZSBkb2Vzbid0IHJlcGVhdCB0aGUgc2FtZQorCSAqIGFtZ2V0YmF0Y2ggY2FsbCB3aGVu IGl0IGxhdGVyIHJlYWNoZXMgdGhhdCBiYXRjaCBhcyBzY2FuQmF0Y2guCiAJICovCiAJYm9vbAkJ a25vd25FbmRCYWNrd2FyZDsKIAlib29sCQlrbm93bkVuZEZvcndhcmQ7CkBAIC0yNzIsMTEgKzI3 NiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNo OwogICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBw YWdlcy4gIFRoZSBmdXJ0aGVyIG91dAogICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2Ug dGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCiAgKiBUaGF0IHdh eSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFz IGRlc2lyZWQuCisgKiBJbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkg c2V2ZXJhbCBkb3plbiBiYXRjaGVzIGluIG9yZGVyCisgKiB0byBtYWludGFpbiBhbiBvcHRpbWFs IEkvTyBwcmVmZXRjaCBkaXN0YW5jZSAoZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzKS4KICAqLwog dHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCiB7CiAJLyogY3VycmVudCBwb3NpdGlvbnMg aW4gSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0 ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVt UG9zIHByZWZldGNoUG9zOwkvKiBwcmVmZXRjaGluZyBwb3NpdGlvbiAqLwogCUJhdGNoUmluZ0l0 ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCiAKIAkvKiBtYXJrUG9z J3MgYmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gp ICovCkBAIC01MzEsNiArNTM4LDM3IEBAIGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShJbmRl eFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJcmV0dXJuIGluZGV4 X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCk7CiB9CiAKKy8qCisgKiBDb21wYXJlIHR3byBi YXRjaCByaW5nIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKgorICog UmV0dXJucyBuZWdhdGl2ZSBpZiBwb3MxIGlzIGJlaGluZCBwb3MyLCAwIGlmIGVxdWFsLCBwb3Np dGl2ZSBpZiBwb3MxIGlzCisgKiBhaGVhZCBvZiBwb3MyLgorICovCitzdGF0aWMgaW5saW5lIGlu dAoraW5kZXhfc2Nhbl9wb3NfY21wKEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJhdGNoUmluZ0l0 ZW1Qb3MgKnBvczIsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50OAkJ YmF0Y2hkaWZmOworCisJQXNzZXJ0KHBvczEtPnZhbGlkICYmIHBvczItPnZhbGlkKTsKKworCWJh dGNoZGlmZiA9IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisJaWYgKGJhdGNo ZGlmZiAhPSAwKQorCXsKKwkJLyogUmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGRpZmZlcmluZyBi YXRjaCBvZmZzZXRzICovCisJCXJldHVybiBiYXRjaGRpZmY7CisJfQorCisJLyoKKwkgKiBSZXNv bHZlIGNvbXBhcmlzb24gdXNpbmcgaXRlbXNbXS13aXNlIGluZGV4ZXMgZnJvbSBjYWxsZXIncyBw b3NpdGlvbnMsCisJICogc2luY2UgYm90aCBwb3NpdGlvbnMgcG9pbnQgdG8gdGhlIHNhbWUgcmlu ZyBidWZmZXIgYmF0Y2gKKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rp b24pKQorCQlyZXR1cm4gcG9zMS0+aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQorCQlyZXR1cm4g cG9zMi0+aXRlbSAtIHBvczEtPml0ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRv IGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYy ZmQ1ZDMxNS4uNDE5MzAwYTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCmluZGV4IGRjYmM5NjM5ZS4uZWZhZTU0OWJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUg ImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNp bmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRl cm5hbC5oIgogCkBAIC00MCw2ICs0MSw5IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBCYXRjaERhdGEK ICNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0ZW0gaW4g Vk0/ICovCiAjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyogYmxvY2sg aXMga25vd24gYWxsLXZpc2libGU/ICovCiAKK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkIGhlYXBh bV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJ CQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJIEJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmKTsKIHN0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFt X2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJ CQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCQkJCQkJCQkJICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKQEAgLTUxLDYgKzU1LDkgQEAgc3RhdGljIHZvaWQgaGVhcGFtX2lu ZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJ ICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKIAkJCQkJCQkJCQkJICBIZWFwQmF0Y2hEYXRhICpoYmF0 Y2gsCiAJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKTsKK3N0YXRpYyBCbG9ja051 bWJlciBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayhSZWFkU3RyZWFtICpzdHJlYW0s CisJCQkJCQkJCQkJCQkJdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCQkJ CXZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CiBzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5f YmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCSAgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 KTsKQEAgLTEzMCw2ICsxMzcsMTAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2Nh bkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlv biBzdGF0ZSAqLwogCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKIAorCS8qIFJlYWQg c3RyZWFtIHN0YXRlIChvdGhlciBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgY2FsbGJhY2spICovCisJ QXNzZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rp b24pOworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPT0gTlVMTCk7CisKIAkvKiBSZXNv bHZlIHdoaWNoIHhzX2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMg c2NhbiAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAh PSBOVUxMKQogCXsKQEAgLTE5OSw2ICsyMTAsMTUgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0 KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3Np dmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCisJ LyogRGVmZW5zaXZlbHkgZG8gYW4gdW5jb25kaXRpb25hbCByZWFkIHN0cmVhbSBkaXJlY3Rpb24g cmVzZXQgKi8KKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gTm9Nb3ZlbWVudFNjYW5EaXJl Y3Rpb247CisKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNjYW4tPnhzX3Bh dXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0p OworCX0KKwogCS8qIFJlc2V0IGJhdGNoIHJpbmcgYnVmZmVyIHN0YXRlICovCiAJaWYgKHNjYW4t PnVzZWJhdGNocmluZykKIAkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2FuLCBmYWxz ZSk7CkBAIC0yMjMsNiArMjQzLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5E ZXNjIHNjYW4pCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVyKSkKIAkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCisJaWYgKGhzY2FuLT54c19yZWFkX3N0 cmVhbSkKKwkJcmVhZF9zdHJlYW1fZW5kKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisKIAkvKiBG cmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcyAqLwogCWlmIChzY2FuLT51c2ViYXRjaHJp bmcpCiAJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fZW5kKHNjYW4pOwpAQCAtMjQ3LDggKzI3MCwx NiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB2b2lk CiBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogeworCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhz X2hlYXBmZXRjaDsKKwogCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOwogCisJaWYgKGhzY2Fu LT54c19yZWFkX3N0cmVhbSkKKwl7CisJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVh ZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwl9CisKIAl0YWJsZWFtX3V0 aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKHNjYW4pOwogfQogCkBAIC00NTAsNyArNDgxLDE0IEBA IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShSZWxhdGlvbiByZWwsCiAJCWlmIChCdWZmZXJJc1Zh bGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwog Ci0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOworCQkv KgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0gd2lsbCBhbHJlYWR5 IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRob3VnaCBhbiBhc3Nl cnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICovCisJCWlmIChoc2Nhbi0+eHNf cmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UKKwkJCWhzY2FuLT54c19jYnVm ID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBh Z2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCkBAIC01NzQsNiArNjEyLDg1 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXJldHVybiBmb3VuZDsKIH0KIAorLyoKKyAqIEhhbmRs ZSBhIGNoYW5nZSBpbiBpbmRleCBzY2FuIGRpcmVjdGlvbiAoYXQgdGhlIHR1cGxlIGdyYW51bGFy aXR5KS4KKyAqCisgKiBSZXNldHMgdGhlIHJlYWQgc3RyZWFtLCBzaW5jZSB3ZSBjYW4ndCByZWx5 IG9uIHNjYW5Qb3MgY29udGludWluZyB0byBhZ3JlZQorICogd2l0aCB0aGUgYmxvY2tzIHRoYXQg cmVhZCBzdHJlYW0gYWxyZWFkeSBjb25zdW1lZCB1c2luZyBwcmVmZXRjaFBvcy4KKyAqCisgKiBO b3RlOiBpZmYgdGhlIHNjYW4gX2NvbnRpbnVlc18gaW4gdGhpcyBuZXcgZGlyZWN0aW9uLCBhbmQg YWN0dWFsbHkgc3RlcHMKKyAqIG9mZiBzY2FuQmF0Y2ggdG8gYW4gZWFybGllciBpbmRleCBwYWdl LCB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaCB3aWxsCisgKiBkZWFsIHdpdGggaXQuICBC dXQgdGhhdCBtaWdodCBuZXZlciBoYXBwZW47IHRoZSBzY2FuIG1pZ2h0IHlldCBjaGFuZ2UKKyAq IGRpcmVjdGlvbiBhZ2FpbiAob3IganVzdCBlbmQgYmVmb3JlIHJldHVybmluZyBtb3JlIGl0ZW1z KS4KKyAqLworc3RhdGljIHBnX25vaW5saW5lIHZvaWQKK2hlYXBhbV9pbmRleF9kaXJjaGFuZ2Vf cmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkJIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmKQoreworCS8q IFJlc2V0IHJlYWQgc3RyZWFtIHN0YXRlICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52 YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcmVh ZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gaXRzZWxm ICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNj YW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKworLyoKKyAqIERlY2lkZSB3aGV0aGVyIHRvIHN0YXJ0 IGEgcmVhZCBzdHJlYW0gZm9yIGhlYXAgYmxvY2sgcHJlZmV0Y2hpbmcgZHVyaW5nIGFuCisgKiBp bmRleCBzY2FuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkCito ZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCSAgYm9vbCBoYWRFeGlz dGluZ1NjYW5CYXRjaCkKK3sKKworCS8qIFJldHVybiBlYXJseSB3aGVuIHByZWZldGNoaW5nIGlz IGFscmVhZHkgaW4gdXNlICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmV0dXJu OworCisJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOworCisJ LyoKKwkgKiBXZSBkZWxheSBpbml0aWFsaXppbmcgdGhlIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZy b20gdGhlIHNjYW4ncyBzZWNvbmQKKwkgKiBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3 YXN0aW5nIGN5Y2xlcyBvbiBzdGFydGluZyBhIHJlYWQgc3RyZWFtCisJICogZm9yIHZlcnkgc2Vs ZWN0aXZlIGluZGV4IHNjYW5zLgorCSAqLworCWlmICghaGFkRXhpc3RpbmdTY2FuQmF0Y2gpCisJ CXJldHVybjsKKworCS8qCisJICogV2UgYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdo ZXJlIHdlJ3JlIHVuYWJsZSB0byB1bmd1YXJkICh1bnBpbikKKwkgKiBlYWNoIGJhdGNoJ3MgYnVm ZmVycyByaWdodCBhd2F5IChub24tTVZDQyBzbmFwc2hvdCBzY2FucykuICBXZSBhcmUgbm90CisJ ICogcHJlcGFyZWQgdG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIg cGlucyBoZWxkLiAgVGhlCisJICogcmVhZCBzdHJlYW0gaGFuZGxlcyBhbGwgcGluIHJlc291cmNl IG1hbmFnZW1lbnQgZm9yIHVzLCBhbmQga25vd3MKKwkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVs ZCBvbiBpbmRleCBwYWdlcy93aXRoaW4gYmF0Y2hlcy4KKwkgKi8KKwlpZiAoIXNjYW4tPk1WQ0NT Y2FuKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGFsc28gZGVsYXkgY3JlYXRpbmcgYSByZWFk IHN0cmVhbSBkdXJpbmcgaW5kZXgtb25seSBzY2FucyB0aGF0CisJICogaGF2ZW4ndCBkb25lIGFu eSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhbnkgY3ljbGVzCisJ ICogb24gYWxsb2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0 ZWQgbmVlZCB0bworCSAqIHBlcmZvcm0gaGVhcCBmZXRjaGVzLgorCSAqLworCWlmIChoc2Nhbi0+ eHNfYmxrID09IEludmFsaWRCbG9ja051bWJlcikKKwkJcmV0dXJuOworCisJLyogR1VDIGdhdGVz IHdoZXRoZXIgb3Igbm90IHdlIHVzZSBwcmVmZXRjaGluZyAqLworCWlmICghZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaCkKKwkJcmV0dXJuOworCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtID0KKwkJ cmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJ CQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCSAgIGhl YXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrLCBzY2FuLCAwKTsKK30KKwogLyoKICAqIEdl dCBuZXh0IFRJRCBmcm9tIGJhdGNoIHJpbmcgYnVmZmVyLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNj YW4gZGlyZWN0aW9uLgogICogQWxzbyBzZXRzICphbGxfdmlzaWJsZSBmb3IgaXRlbSB3aGVuIGNh bGxlciBwYXNzZXMgYSBub24tTlVMTCBhcmcuCkBAIC01OTEsNiArNzA4LDEyIEBAIGhlYXBhbV9p bmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuCiAJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0 Y2hfY291bnQoc2NhbikgPT0gMCk7CiAJQXNzZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nh bi0+eHNfd2FudF9pdHVwKTsKIAorCS8qIEhhbmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFt IHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJl YW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJl YW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJzdCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHko aHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAhPSBkaXJlY3Rpb24pKQorCQloZWFwYW1faW5kZXhf ZGlyY2hhbmdlX3Jlc2V0KGhzY2FuLCBkaXJlY3Rpb24sIGJhdGNocmluZ2J1Zik7CisKIAkvKgog CSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMg dG8gcmV0dXJuIHRoZSBuZXh0CiAJICogbWF0Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBm cm9tCkBAIC02MDAsNyArNzIzLDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAl7CiAJCS8q CiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9h ZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJ CSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlIChjYW4ndCBkbyB0aGlzIHdpdGggcHJl ZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlwZ19hc3N1bWUoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gg PT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC02MzMsNiArNzU2LDggQEAgaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4KIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaGVhcGFtX2luZGV4X2NvbnNpZGVyX3By ZWZldGNoaW5nKHNjYW4sIGhzY2FuLCBoYWRFeGlzdGluZ1NjYW5CYXRjaCk7CisKIAkvKgogCSAq IEFkdmFuY2VkIHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBv ZiBuZXcKIAkgKiBzY2FuQmF0Y2guCkBAIC02NDgsNiArNzczLDcgQEAgaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4KIAl7CiAJCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwKIAkJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJCUJhdGNo UmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3M7CiAK IAkJQXNzZXJ0KGhlYWRCYXRjaCAhPSBzY2FuQmF0Y2gpOwogCQlBc3NlcnQoYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOwpAQCAtNjU1LDEyICs3ODEsNDggQEAgaGVh cGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAkJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1 bmxlc3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KIAkJdGFibGVhbV91dGlsX3JlbGVhc2Vf YmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKIAorCQkvKgorCQkgKiBJZiB3ZSdyZSBhYm91dCB0byBy ZWxlYXNlIHRoZSBiYXRjaCB0aGF0IHByZWZldGNoUG9zIGN1cnJlbnRseQorCQkgKiBwb2ludHMg dG8sIGp1c3QgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFNlZSB0aGUgY29tbWVudHMgYWJvdXQK KwkJICogcHJlZmV0Y2hQb3Mvc2NhblBvcyB3aXRoaW4gaGVhcGFtX2luZGV4X3ByZWZldGNoX25l eHRfYmxvY2sgZm9yIGFuCisJCSAqIGV4cGxhbmF0aW9uLgorCQkgKgorCQkgKiBUaGlzIGhhbmRs aW5nIGlzIGFwcHJveGltYXRlbHkgdGhlIG9wcG9zaXRlIG9mIHJlc3VtaW5nIGEgcGF1c2VkCisJ CSAqIHJlYWQgc3RyZWFtOiB0aGlzIGhlbHBzIHRoZSBzY2FuIGRlYWwgd2l0aCBwcmVmZXRjaFBv cyBmYWxsaW5nCisJCSAqIGJlaGluZCBzY2FuUG9zLCB3aGVyZWFzIHBhdXNpbmcgaXMgdXNlZCB3 aGVuIHNjYW5Qb3MgaGFzIGZhbGxlbgorCQkgKiBiZWhpbmQgKHZlcnkgZmFyIGJlaGluZCkgcHJl ZmV0Y2hQb3MuCisJCSAqLworCQlpZiAocHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlwcmVmZXRj aFBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRjaFBvcy0+ dmFsaWQgPSBmYWxzZTsKKwogCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVm ZmVyIChldmVuIGlmIGl0J3MgbWFya0JhdGNoKSAqLwogCQliYXRjaHJpbmdidWYtPmhlYWRCYXRj aCsrOworCisJCWlmICh1bmxpa2VseShoc2Nhbi0+eHNfcGF1c2VkKSkKKwkJeworCQkJLyoKKwkJ CSAqIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHBhdXNlZCB0aGUgc2NhbidzIHJl YWQgc3RyZWFtCisJCQkgKiBkdWUgdG8gb3VyIHJ1bm5pbmcgb3V0IG9mIGZyZWUgYmF0Y2ggc2xv dHMuICBOb3cgdGhhdCB3ZSd2ZQorCQkJICogZnJlZWQgdXAgb25lIHN1Y2ggc2xvdCwgd2UgY2Fu IHJlc3VtZSB0aGUgcmVhZCBzdHJlYW0gKHNpbmNlCisJCQkgKiB0aGVyZSdzIG5vdyBzcGFjZSBm b3IgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2sgdG8gc3RvcmUKKwkJCSAqIG9uZSBt b3JlIGJhdGNoKS4KKwkJCSAqCisJCQkgKiBOb3RlOiBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUg dGhhdCBwcmVmZXRjaFBvcyB3YXMganVzdCAob3IgaXMKKwkJCSAqIGp1c3QgYWJvdXQgdG8gYmUp IGludmFsaWRhdGVkIHdpdGggbG93IElOREVYX1NDQU5fTUFYX0JBVENIRVMuCisJCQkgKi8KKwkJ CUFzc2VydCghcHJlZmV0Y2hQb3MtPnZhbGlkIHx8CisJCQkJICAgaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSk7CisJCQlBc3NlcnQoIWluZGV4X3NjYW5f YmF0Y2hfZnVsbChzY2FuKSk7CisKKwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShoc2Nhbi0+eHNfcmVh ZF9zdHJlYW0pOworCQkJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQl9CiAJfQogCiAJLyog SW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhl YWRCYXRjaCAqLwogCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5i YXRjaCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKIAogCXJldHVybiBoZWFwYW1faW5k ZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJ ICAgc2NhbkJhdGNoLCBzY2FuUG9zLCBhbGxfdmlzaWJsZSk7CkBAIC03NjUsNiArOTI3LDEzIEBA IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAogICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2Nh bnMgb2YgYW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKICAqIG5lZWQgdG8gdW5n dWFyZCBiYXRjaGVzIHByb21wdGx5LgogICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgdGhlIHNjYW4g YmUgYWxsb3dlZCB0byBndWFyZCBtb3JlIHRoYW4gb25lIGJhdGNoIGF0IGEKKyAqIHRpbWUuICBU aGUgcHJpbWFyeSByZWFzb24gZm9yIHRoaXMgcmVzdHJpY3Rpb24gaXMgdG8gYXZvaWQgdW5pbnRl bmRlZAorICogaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlYWQgc3RyZWFtLCB3aGljaCBoYXMgaXRz IG93biBzdHJhdGVneSBmb3Iga2VlcGluZworICogdGhlIG51bWJlciBvZiBwaW5zIGhlbGQgYnkg dGhlIGJhY2tlbmQgdW5kZXIgY29udHJvbC4gIChVbmd1YXJkaW5nIHZpYQorICogdGhlIGFtdW5n dWFyZGJhdGNoIGNhbGxiYWNrIG9mdGVuIG1lYW5zIHJlbGVhc2luZyBhIGJ1ZmZlciBwaW4gb24g YW4KKyAqIGluZGV4IHBhZ2UsIHdoaWNoIGNvdW50cyBhZ2FpbnN0IHRoZSBzYW1lIHNoYXJlZCBw aW4gbGltaXQuKQorICoKICAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxs IGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKICAqIHVuZ3VhcmQgaXQgYnkgY2FsbGlu ZyBhbXVuZ3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8KICAqIGNvbmN1 cnJlbnQgVkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3VhcmQgKHR5cGljYWxseSBhIGJ1ZmZl ciBwaW4gb24gdGhlCkBAIC05MDIsNiArMTA3MSwyOTkgQEAgaGVhcGFtX2luZGV4X2JhdGNoX3Bv c192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CiAJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7CiB9CiAKKy8qCisg KiBSZXR1cm4gdGhlIG5leHQgYmxvY2sgdG8gdGhlIHJlYWQgc3RyZWFtIHdoZW4gcGVyZm9ybWlu ZyBpbmRleCBwcmVmZXRjaGluZy4KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBhbHdheXMg bG9hZGVkIGJ5IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MuCisgKiBXZSBkb24n dCBnZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBjYWxs LCB3aGVuIGEKKyAqIGhlYXAgYmxvY2sgaXMgcmVxdWVzdGVkIGZyb20gdGhlIHNjYW4ncyBzdHJl YW0gZm9yIHRoZSBmaXJzdCB0aW1lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgcmVhZF9z dHJlYW0gaXMgc3RvcmVkIGluIHByZWZldGNoUG9zLiAgSXQgaXMgdHlwaWNhbAorICogZm9yIHBy ZWZldGNoUG9zIHRvIGNvbnNpc3RlbnRseSBzdGF5IGFoZWFkIG9mIHRoZSBzY2FuUG9zIHBvc2l0 aW9uIHRoYXQncworICogdXNlZCB0byB0cmFjayB0aGUgbmV4dCBUSUQgaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3BvcyB3aWxsIHJldHVybgorICogdG8gdGhlIHNjYW4gKGFmdGVyIHRo ZSBmaXJzdCB0aW1lIHdlIGdldCBjYWxsZWQpLiAgSG93ZXZlciwgdGhhdCBpc24ndCBhCisgKiBz dHJpY3QgcHJlY29uZGl0aW9uICh0aG91Z2ggYXMgZXhwbGFpbmVkIGJlbG93IHdlIGltcGxlbWVu dCBhIHNjaGVtZQorICogZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byBtYWtpbmcgaXQgYSBzdHJp Y3QgcHJlY29uZGl0aW9uKS4gIFRoZXJlIGlzIGEKKyAqIHRydWUgc3RyaWN0IHBvc3Rjb25kaXRp b24sIHRob3VnaDogd2hlbiB3ZSByZXR1cm4gd2UnbGwgYWx3YXlzIGxlYXZlCisgKiBzY2FuUG9z IDw9IHByZWZldGNoUG9zLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF9w cmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJIHZvaWQgKmNh bGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sK KwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5kZXhTY2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9k YXRhOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICop IHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZz Y2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJp bmdidWYtPnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hy aW5nYnVmLT5wcmVmZXRjaFBvczsKKwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBOVUxMOworCVNj YW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2Rp cjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2FuUG9zID0g ZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiBwcmVm ZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0IG9uZSBi YXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24KKwkgKiBt dXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hf Y291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgJiYgaW5kZXhfc2Nhbl9i YXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1Nj YW4pOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KHhzX3JlYWRfc3RyZWFt X2RpciAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIEhhbmRsZSBpbml0 aWFsaXphdGlvbiBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLCB3aGVuIHByZWZldGNoUG9zIGlzbid0 CisJICogeWV0IHZhbGlkIChhbHNvIGhhbmRsZXMgdGhlIHByZWZldGNoUG9zIDwgc2NhblBvcyBl ZGdlIGNhc2UpLgorCSAqCisJICogSWYgcHJlZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGluaXRpYWxp emVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5kaWNhdGVzCisJICogdGhhdCB0aGlzIGlzIHRoZSBm aXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2Nhbi4gIFdlIGluaXRpYWxpemUKKwkgKiBw cmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVudCBzY2FuUG9zLCBzaW5jZSB0aGUgY3VycmVudCBz Y2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNob3VsZCBoYXZlIGl0cyBibG9jayBudW1iZXIgcmV0 dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJICogZmlyc3QuICBXaGVuIHRoaXMgaGFwcGVucywg aXQncyBsaWtlbHkgdGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdldCBhaGVhZAorCSAqIG9mIHNjYW5Q b3MgdmVyeSBzb29uLCBhZnRlciB0aGUgX25leHRfIGNhbGwgaGVyZSByZXR1cm5zLgorCSAqCisJ ICogVGhlcmUncyBhbHNvIGFuIGVkZ2UgY2FzZSB0aGF0IHdlIGhhbmRsZSB1c2luZyBleGFjdGx5 IHRoZSBzYW1lIHN0ZXBzLgorCSAqIEl0J3MgcG9zc2libGUgZm9yIHByZWZldGNoUG9zIHRvICJm YWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QgaW4gYQorCSAqIHRyaXZpYWwgc2Vuc2U6IGlm IG1hbnkgYWRqYWNlbnQgbWF0Y2hpbmcgaXRlbXMgY29udGFpbiBUSURzIHRoYXQgYWxsCisJICog cG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRh a2UgcHJlZmV0Y2hQb3MKKwkgKiAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB3ZSdy ZSBhY3R1YWxseSBjYWxsZWQpLiAgQSBzaW1pbGFyCisJICogaXNzdWUgYXJpc2VzIGR1cmluZyBp bmRleC1vbmx5IHNjYW5zIHRoYXQgcmVxdWlyZSBvbmx5IGEgZmV3IGhlYXAKKwkgKiBmZXRjaGVz OiB3ZSdsbCB0ZW5kIHRvIGJlIGNhbGxlZCBmYXIgbGVzcyBvZnRlbiB0aGFuIHdlJ2QgYmUgY2Fs bGVkCisJICogZHVyaW5nIGFuIGVxdWl2YWxlbnQgcGxhaW4gaW5kZXggc2NhbiBkdWUgdG8gYWxs LXZpc2libGUgaXRlbXMuICBBbgorCSAqIGFsbC12aXNpYmxlIGl0ZW0gd2lsbCBhZHZhbmNlIHNj YW5Qb3MsIGJ1dCBjYW4ndCB0cmlnZ2VyIGEgY2FsbCB0byBoZXJlCisJICogKGp1c3QgbGlrZSBh biBpdGVtIHRoYXQgcG9pbnRzIHRvIHRoZSBzYW1lIGhlYXAgYmxvY2sgdGhhdCB0aGUgcHJldmlv dXMKKwkgKiBpdGVtIGFsc28gcG9pbnRlZCB0bykuCisJICoKKwkgKiBUaGlzIHNjaGVtZSBwcm9k dWNlcyBleGFjdGx5IHRoZSBzYW1lIGJsb2NrIHByZWZldGNoIHJlcXVlc3RzIGFzIGEKKwkgKiBz Y2hlbWUgdGhhdCByZXF1aXJlcyBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHRv IGFjdGl2ZWx5CisJICogZW5zdXJlIHRoYXQgInByZWZldGNoUG9zIDwgc2NhblBvcyIgY2FuIG5l dmVyIGhhcHBlbi4gIFRoYXQgaXNuJ3QgYQorCSAqIHN0cmljdCBwcmVjb25kaXRpb24gZm9yIHRo aXMgZnVuY3Rpb24gYmVjYXVzZSBtYWtpbmcgaXQgZXhwbGljaXQgd291bGQKKwkgKiBpbXBvc2Ug YSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9uIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MgZnJlZXMgYSBiYXRjaCB0aGF0CisJICogcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLCBpdCdsbCBh dCBsZWFzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGZvciB1cy4KKwkgKiBUaGlzIHJlbW92ZXMg YW55IGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhpbmQKKwkg KiBzY2FuUG9zLmJhdGNoIHRoYXQgaXQgd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0byBiZSBh aGVhZCBvZiBzY2FuUG9zCisJICogaW5zdGVhZCBvZiBiZWhpbmQgaXQpLiAgSW4gb3RoZXIgd29y ZHMsIGluIGEgY2VydGFpbiBzZW5zZSB3ZSBhY3R1YWxseQorCSAqIF9jYW5fIHRydXN0IGhlYXBh bV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgdG8gbm90IGxldCBwcmVmZXRjaFBvcworCSAq IGZhbGwgYmVoaW5kIHNjYW5Qb3M6IGl0IGNhbid0IGhhcHBlbiBhdCB0aGUgYmF0Y2ggZ3JhbnVs YXJpdHkgKG9ubHkgYXQKKwkgKiB0aGUgaXRlbS90dXBsZSBncmFudWxhcml0eSwgd2hpY2ggd2Ug Y2FuIGFsd2F5cyBjb3BlIHdpdGggaGVyZSkuCisJICovCisJaWYgKCFwcmVmZXRjaFBvcy0+dmFs aWQgfHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9zLCBzY2FuUG9zLCB4c19yZWFk X3N0cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNjYW5Qb3M7CisJCWZyb21TY2FuUG9z ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2b2lkIGtlZXBpbmcgYW55IGJhdGNoIGd1 YXJkZWQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50LAorCQkgKiB0byBhdm9pZCB1bmRlc2lyYWJs ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtLiBTZWUKKwkJICogY29t bWVudCBhbmQgYXNzZXJ0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYmVsb3cuCisJCSAqLwor CQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKgorCQkJICogTWFrZSBoZWFwYW1f aW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMKKwkJCSAqIGVhZ2Vy bHkKKwkJCSAqLworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsK KworCQkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBpcyB1bmd1YXJk ZWQgKi8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNo UG9zLT5iYXRjaCk7CisJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJeworCQkJ CS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5CYXRjaCAqLworCQkJ CWhiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShzY2FuLCBwcmVmZXRjaEJhdGNo KTsKKwkJCQloZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgeHNfcmVhZF9z dHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJ CQkJCQkgIHByZWZldGNoUG9zKTsKKwkJCX0KKwkJfQorCX0KKworCXByZWZldGNoQmF0Y2ggPSBp bmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCk7CisJaWYgKHNjYW4tPnhz X3dhbnRfaXR1cCkKKwkJaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4s IHByZWZldGNoQmF0Y2gpOworCisJLyoKKwkgKiBJZiBwcmVmZXRjaFBvcyB3YXNuJ3QganVzdCBp bml0aWFsaXplZCB1c2luZyBzY2FuUG9zLCB3ZSdyZSBkaXJlY3RseQorCSAqIHBpY2tpbmcgdXAg cHJlZmV0Y2hpbmcgd2hlcmUgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgb2ZmLiAgQXNzZXJ0IHRo YXQKKwkgKiB4c19wcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IGl0ZW0gd2UgcmV0dXJu ZWQgYXMgZXhwZWN0ZWQuCisJICoKKwkgKiBOb3RlOiB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIGEg eHNfcHJlZmV0Y2hfYmxvY2sgZmllbGQgYXQgYWxsOyB3ZSBjb3VsZAorCSAqIGp1c3QgdGFrZSB0 aGUgbGFzdCBibG9jayB3ZSByZXR1cm5lZCBmcm9tIHByZWZldGNoUG9zIGRpcmVjdGx5IGluc3Rl YWQuCisJICogQnV0IG1haW50YWluaW5nIHhzX3ByZWZldGNoX2Jsb2NrIGV4cGxpY2l0bHkgaXMg c2xpZ2h0bHkgbW9yZSByb2J1c3QuCisJICogSXQgZ2l2ZXMgdXMgYSB3YXkgdG8gbWFrZSBzdXJl IHRoYXQgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgcHJlZmV0Y2hQb3MKKwkgKiBpbiBhIGNvbnNp c3RlbnQgc3RhdGUgKGUuZy4sIHdoZW4gdGhlIHJlYWQgc3RyZWFtIGhhZCB0byBiZSBwYXVzZWQp LgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpZiAoIWZyb21TY2FuUG9zKQor CXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmxhc3RpdGVtID0gJnByZWZldGNoQmF0Y2gtPml0ZW1z W3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJQmxvY2tOdW1iZXIgbGFzdF9ibG9jayA9IEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIoJmxhc3RpdGVtLT50YWJsZVRpZCk7CisKKwkJQXNzZXJ0KGxhc3Rf YmxvY2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKTsKKwl9CisjZW5kaWYKKworCWZvciAo OzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tOdW1iZXIgcHJlZmV0 Y2hfYmxvY2s7CisKKwkJLyoKKwkJICogV2UgbmV2ZXIgY2FsbCBhbWdldGJhdGNoIHdpdGhvdXQg aW1tZWRpYXRlbHkgdW5ndWFyZGluZyB0aGUgYmF0Y2gsCisJCSAqIGVpdGhlciB3aXRoaW4gdGhl IGluZGV4IEFNIG9yIGhlcmUgKHdoZW4gd2UgZWFnZXJseSBsb2FkIGFsbCBvZiB0aGUKKwkJICog YmF0Y2gncyB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGR1cmluZyBhbiBpbmRleC1vbmx5IHNjYW4p LiAgVGhlCisJCSAqIGluZGV4IEFNIHdvbid0IGhvbGQgb250byBUSUQgaW50ZXJsb2NrIGJ1ZmZl ciBwaW5zLCBrZWVwaW5nIHRoZQorCQkgKiBhYnNvbHV0ZSBudW1iZXIgb2YgcGlucyBoZWxkIHRv IGEgbWluaW11bS4KKwkJICoKKwkJICogVGhpcyBpcyBkZWZlbnNpdmUuICBUaGUgcmVhZCBzdHJl YW0gdHJpZXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBub3QKKwkJICogcGlubmluZyB0b28gbWFueSBi dWZmZXJzLCBhbmQgdGhhdCdzIGhhcmRlciB0byBkbyByZWxpYWJseSBpZiB0aGVyZQorCQkgKiBh cmUgdmFyaWFibGUgbnVtYmVycyBvZiBwaW5zIHRha2VuIHdpdGhvdXQgc3VjaCBjYXJlLgorCQkg Ki8KKwkJQXNzZXJ0KCFwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpOworCQlpZiAoZnJvbVNjYW5Q b3MpCisJCXsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNyZW1lbnQgaXRlbSB3aGVuIHByZWZldGNo UG9zIHdhcyBqdXN0IGluaXRpYWxpemVkCisJCQkgKiB1c2luZyBzY2FuUG9zLiAgV2UnbGwgcmV0 dXJuIHRoZSBzY2FuUG9zIGl0ZW0ncyBoZWFwIGJsb2NrCisJCQkgKiBkaXJlY3RseSBvbiB0aGUg Zmlyc3QgY2FsbCBoZXJlLiAgSW4gb3RoZXIgd29yZHMsIHdlJ2xsIHJldHVybgorCQkJICogdGhl IGhlYXAgYmxvY2sgZnJvbSBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSBh dAorCQkJICogdGhlIHBvaW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciBmb3IgdGhlIGZpcnN0CisJCQkgKiB0aW1lIGR1cmluZyB0aGUgc2Nhbi4gKEFzIGV4cGxhaW5l ZCBhYm92ZSwgd2UgYWxzbyBlbmQgdXAgaGVyZQorCQkJICogZHVyaW5nIHRoZSBmaXJzdCBjYWxs IHRvIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGZvbGxvd2luZworCQkJICogcHJlZmV0Y2hQb3Mg ZmFsbGluZyBiZWhpbmQgc2NhblBvcy9iZWluZyBpbnZhbGlkYXRlZCBmb3IgdXMuKQorCQkJICov CisJCQlmcm9tU2NhblBvcyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bv c19hZHZhbmNlKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwg cHJlZmV0Y2hQb3MpKQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHBy ZWZldGNoQmF0Y2guICBUcnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJh dGNoLgorCQkJICovCisJCQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4p KSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNh dXNlIGFsbCBhdmFpbGFibGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1 cnJlbnRseSBpbiB1c2UuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRh cmlseSBwYXVzaW5nIHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zY2FuYmF0Y2hfcG9zIHdpbGwgcmVzdW1lIHRoZSByZWFkCisJCQkJICogc3RyZWFtIGxhdGVy LCB0aG91Z2ggb25seSBhZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwKKwkJCQkgKiByZW1h aW5pbmcgaXRlbXMgZnJvbSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRoZSBjdXJyZW50CisJ CQkJICogaGVhZCBiYXRjaCB3aWxsIGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90IGF2YWlsYWJsZSBm b3IgcmV1c2UKKwkJCQkgKiBoZXJlIGJ5IHVzKS4KKwkJCQkgKgorCQkJCSAqIEluIHByYWN0aWNl IHdlIGhhcmRseSBldmVyIG5lZWQgdG8gZG8gdGhpcy4gIEl0IHdvdWxkIGJlCisJCQkJICogcG9z c2libGUgdG8gYXZvaWQgdGhlIG5lZWQgdG8gcGF1c2UgdGhlIHJlYWQgc3RyZWFtIGJ5CisJCQkJ ICogZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzbG90cywgYnV0IHRoYXQgd291bGQgYWRkIGNvbXBs ZXhpdHkKKwkJCQkgKiBmb3Igbm8gcmVhbCBiZW5lZml0LiAgSXQgYWxzbyBzZWVtcyBsaWtlIGEg Z29vZCBpZGVhIHRvCisJCQkJICogaW1wb3NlIHNvbWUgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVy IG9mIGJhdGNoZXMgdGhhdAorCQkJCSAqIHByZWZldGNoUG9zIGNhbiBnZXQgYWhlYWQgb2Ygc2Nh blBvcyBieSAoZXNwZWNpYWxseSBpbiB0aGUKKwkJCQkgKiBjYXNlIG9mIGluZGV4LW9ubHkgc2Nh bnMsIHdoZXJlIHdlIG9mdGVuIHdvbid0IGhhdmUgYW55CisJCQkJICogaGVhcCBibG9jayB0byBy ZXR1cm4gZnJvbSBtb3N0IG9mIHRoZSBzY2FuJ3MgYmF0Y2hlcykuCisJCQkJICovCisJCQkJaHNj YW4tPnhzX3BhdXNlZCA9IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSByZXR1cm5pbmcs IGFkdmFuY2UgcHJlZmV0Y2hQb3MgaW4gdGhlIG9wcG9zaXRlCisJCQkJICogZGlyZWN0aW9uIHRv IHRoZSBvbmUgdXNlZCBieSB0aGUgc2Nhbi4gIFRoaXMgdW5kb2VzIHRoZQorCQkJCSAqIGVmZmVj dHMgb2YgdGhlIG1vc3QgcmVjZW50IGFkdmFuY2UuICBXZSdyZSBub3QgZ29pbmcgdG8KKwkJCQkg KiByZXR1cm4gYW55IGJsb2NrLCBzbyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIGxlYXZl CisJCQkJICogcHJlZmV0Y2hQb3MgaW4gYSBzdGF0ZSBjb25zaXN0ZW50IHdpdGggdGhhdC4KKwkJ CQkgKi8KKwkJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZCh4c19yZWFkX3N0cmVhbV9kaXIp KQorCQkJCXsKKwkJCQkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gt Pmxhc3RJdGVtICsgMSk7CisJCQkJCXByZWZldGNoUG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+ bGFzdEl0ZW07CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBv cy0+aXRlbSA9PSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJCQkJcHJlZmV0Y2hQ b3MtPml0ZW0gPSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW07CisJCQkJfQorCisJCQkJcmV0dXJu IHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSB0 YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCQkgIHhzX3Jl YWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJCQkJCQkJ CQkJCQkgIHByZWZldGNoUG9zKTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIE5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwgc28gYWxsIHRoZSBi YXRjaGVzIHRoYXQKKwkJCQkgKiB0aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWlyZSBoYXZlIG5vdyBi ZWVuIHJldHVybmVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJ CX0KKworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVm ZXRjaEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1f ZGlyLAorCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKGhi YXRjaCkKKwkJCXsKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5IGluZm8gZm9y IHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJ CQloYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoc2NhbiwgcHJlZmV0Y2hCYXRj aCk7CisJCQkJQXNzZXJ0KGhzY2FuLT54c192bV9pdGVtcyA9PSBzY2FuLT5tYXhpdGVtc2JhdGNo KTsKKworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFk X3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJ CQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQ b3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJ ICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNo KTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRl bSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0p OworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiAq LworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19y ZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChoYmF0Y2gpCisJCXsKKwkJCUFzc2VydChz Y2FuLT54c193YW50X2l0dXApOworCQkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBv cy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJCWlmIChoYmF0Y2gtPnZpc0lu Zm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEUpCisJCQl7 CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwtdmlzaWJsZSAtLSBkb24ndCBwcmVmZXRj aCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNo LT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Jsb2NrID0gSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCWlmIChwcmVmZXRjaF9ibG9j ayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8qCisJCQkgKiBwcmVmZXRj aF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0ncyBUSUQncyBoZWFwCisJ CQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUgc2FtZSBwcmVmZXRjaF9i bG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJCQkgKi8KKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2NrIG51bWJlciB0byByZXR1 cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gcHJlZmV0 Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisKKwlyZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyOworfQorCiAvKgogICogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBhbGwg Zm91ciBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggNzQ5M2JlNDljLi5hNTlhNDgyMzQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNSwxNSArNSwyMiBAQAogICoKICAq IFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1i YXNlZCBpbmRleCBzY2FucywKICAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVs dGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQotICogY2FsbC4gIFRoZSBi YXRjaCByaW5nIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0uCisgKiBjYWxsLiAgVGhl IGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTSwgdHlwaWNhbGx5IG1h aW50YWluZWQKKyAqIGFsb25nc2lkZSBhIHJlYWQgc3RyZWFtIHVzZWQgZm9yIHByZWZldGNoaW5n IHRhYmxlIGJsb2Nrcy4KICAqCi0gKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBp bmRleCBrZXkgc3BhY2UvaW5kZXggc2NhbiBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2Fk cyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLiAgVGhpcworICog YWxsb3dzIHRoZSB0YWJsZSBBTSB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0 YW5jZTogaXRzIHJlYWQKKyAqIHN0cmVhbSBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVx dWVzdCB0YWJsZSBibG9ja3MgcmVmZXJlbmNlZCBieSBpbmRleAorICogcGFnZXMgdGhhdCBhcmUg d2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAq CiAgKiBNb3N0IGZ1bmN0aW9ucyBoZXJlIGFyZSB0YWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1f dXRpbF8qKSwgY2FsbGVkIGJ5CiAgKiB0YWJsZSBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXgg c2NhbnMuICBUaGVzZSBtYW5hZ2UgdGhlIGJhdGNoIHJpbmcKICAqIGJ1ZmZlcidzIGxpZmVjeWNs ZSBhbmQgcG9zaXRpb25hbCBzdGF0ZSwgYW5kIGhlbHAgd2l0aCBjZXJ0YWluIGFzcGVjdHMgb2YK ICAqIHJlc291cmNlIG1hbmFnZW1lbnQuICBUaGUgdGFibGUgQU0gdXNlcyBzY2FuUG9zIChhbmQg aXRzIHNjYW5CYXRjaCBiYXRjaCkKLSAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaC4gIFRhYmxlIEFNcyB0aGF0CisgKiBzdXBwb3J0IGluZGV4IEkv TyBwcmVmZXRjaGluZyB1c2UgcHJlZmV0Y2hQb3MgKGFuZCBpdHMgcHJlZmV0Y2hCYXRjaCBiYXRj aCkKKyAqIGJ5IGltcGxlbWVudGluZyBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrIHRoYXQgY29uc3Vt ZXMgaXRlbXMgd2VsbCBhaGVhZCBvZgorICogc2NhblBvcy4KICAqCiAgKiBUaGVyZSBhcmUgYWxz byBzb21lIGluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkgaW5k ZXgKICAqIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRvIGhl bHAgbWFuYWdlIHJlc291cmNlcyBsaWtlCkBAIC01OCw2ICs2NSw3IEBAIHRhYmxlYW1fdXRpbF9i YXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCiAJYm9vbAkJ bWFya0JhdGNoRnJlZWQgPSBmYWxzZTsKIAogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9 IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAliYXRj aHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCWZvciAodWludDggaSA9IGJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCkBA IC0xNjcsNyArMTc1LDEyIEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogICogdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4gbmVlZGVkLgogICoK ICAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVz dG9yZWQgc2NhbkJhdGNoKSwKLSAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRo ZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisgKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMg YWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLiAgV2UgYWx3YXlzCisgKiBpbnZh bGlkYXRlIHByZWZldGNoUG9zLiAgVGhlIHJlYWQgc3RyZWFtIGFuZCByZWxhdGVkIHByZWZldGNo aW5nIHN0YXRlIGFyZQorICogcmVzZXQgYnkgdGhlIGNhbGxlciAod2hpY2ggY2FsbHMgdGhpcyBm dW5jdGlvbiBhcyBpdCByZXNldHMgdGhhdCBzdGF0ZSkuCisgKiBUaGlzIGFwcHJvYWNoIGtlZXBz IHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFNczogbW9zdCBjb2RlIHRoYXQgZGVhbHMgd2l0aAor ICogYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIGNvbW1vbiBjYXNl IHdoZXJlIHNjYW4gZGlyZWN0aW9uCisgKiBuZXZlciBjaGFuZ2VzIGlzIHRoZSBvbmx5IGNhc2Uu CiAgKgogICogTm90ZTogVGhpcyByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBhbHJl YWR5IGhhdmUgYSB2YWxpZCBzY2FuUG9zLgogICogVGFibGUgQU1zIHNob3VsZCBvbmx5IGNhbGwg dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldCBmcm9tIHdpdGhpbiB0aGVpcgpAQCAtMTg2LDYg KzE5OSwxNCBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAlBc3NlcnQobWFya1Bvcy0+ dmFsaWQpOwogCisJLyoKKwkgKiBSZXN0b3JpbmcgYSBtYXJrIGFsd2F5cyByZXF1aXJlcyBzdG9w cGluZyBwcmVmZXRjaGluZy4gIFRoaXMgaXMgc2ltaWxhcgorCSAqIHRvIHRoZSBoYW5kbGluZyB0 YWJsZSBBTXMgaW1wbGVtZW50IHRvIGRlYWwgd2l0aCBhIHR1cGxlLWxldmVsIGNoYW5nZQorCSAq IGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLiAgVGhlIHJlYWQgc3RyZWFtIG11c3QgaGF2ZSBhbHJl YWR5IGJlZW4gcmVzZXQKKwkgKiBieSB0aGUgY2FsbGVyICh2aWEgdGFibGVfaW5kZXhfZmV0Y2hf cmVzZXQpLgorCSAqLworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsK KwogCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNoKQogCXsKIAkJLyogbWFya0JhdGNoIGlzIGFs cmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5nZSBiYXRjaHJpbmdidWYgKi8KQEAgLTI1MCw2 ICsyNzEsMTMgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCiAgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUg bmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhpcwogICogYXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5 IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciB3aGF0CiAgKiBvdWdodCB0 byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICoKKyAqIENhbGxlciBtdXN0IGhh dmUgcmVzZXQgdGhlIHNjYW4ncyByZWFkIHN0cmVhbSBiZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhh dAorICogbmVlZHMgdG8gaGFwcGVuIGFzIHNvb24gYXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBs ZSBpbiB3aGF0ZXZlciBzY2FuCisgKiBkaXJlY3Rpb24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4g IFdlIG9ubHkgZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBi eSBlbm91Z2ggaXRlbXMgdG8gY3Jvc3MgYSBiYXRjaCBib3VuZGFyeSAod2hlbiB0aGUgc2Nhbgor ICogcmVzdW1lcyBzY2FubmluZyBpbiBpdHMgb3JpZ2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3Jl IGNyb3NzaW5nIGEgYm91bmRhcnksCisgKiB0aGVyZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhl cmUpLgogICovCiB2b2lkCiB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZShJbmRleFNj YW5EZXNjIHNjYW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCAxYzU3 NWU1NmYuLjZmY2I4MTVmNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBA IC0xNDYsNiArMTQ2LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhzY2Fu ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0cnVlOwogYm9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0 cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0 cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCBhZmFh MDU4YjAuLmFjZTU2ZjdhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVy cy5kYXQKQEAgLTk0MSw2ICs5NDEsMTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAor eyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNv bnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAor ICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQg aW5kZXgtb25seSBzY2Fucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJs ZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywK K30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRl eHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBz aG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRp b24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhYzM4Y2RkYWEuLjg3MDVkZDVmMyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDMx LDYgKzQzMSw3IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRl eHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0g b24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCA3M2NjMDQxMjMuLmM1NzJk YWU4NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbApAQCAtNTkzOCw2ICs1OTM4LDIyIEBAIEFOWSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBj bGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWluZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVs PSJlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAg ICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nh bl9wcmVmZXRjaDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+Cisg ICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5k ZXggc2NhbiBhbmQgaW5kZXgtb25seSBzY2FuCisgICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRj aGluZyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAg IHBhZ2VzIGFoZWFkIG9mIHdoZW4gdGhleSBhcmUgbmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4g IFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLW1hdGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9t YXRlcmlhbCI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRl eCAwMDFlZTEzZDUuLmZlZDMwY2I3OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC04MTAsOSArODEwLDEyIEBA IGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgPHBhcmE+CiAgICBUaGUgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8K ICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5n IGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcwotICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4g IEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBmcm9tIGEKLSAgIHNpbmds ZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUgdGFibGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRv IHdoaWNoIHRhYmxlCi0gICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJl LgorICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gVGhpcyBlbmFibGVzIHRoZSB0YWJsZSBh Y2Nlc3MgbWV0aG9kIHRvCisgICBvcHRpbWl6ZSB0YWJsZSBibG9jayBhY2Nlc3MgcGF0dGVybnMg YW5kIHBlcmZvcm0gSS9PIHByZWZldGNoaW5nLgorICAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGlu ZyBpbmRleCBlbnRyaWVzIGZyb20gYSBzaW5nbGUgaW5kZXggcGFnZSB0b2dldGhlciwKKyAgIHRo ZSB0YWJsZSBBTSBjYW4gcmVhZGFoZWFkIHRocm91Z2ggdGhlIGluZGV4IGFuZCBpZGVudGlmeSB3 aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkLCBhbGxvd2luZyBwcmVmZXRjaGlu ZyBvZiB0YWJsZSBBTSBwYWdlcyBkdXJpbmcKKyAgIG9yZGVyZWQgaW5kZXggc2NhbnMuCiAgIDwv cGFyYT4KIAogICA8cGFyYT4KQEAgLTkzNiw3ICs5MzksOSBAQCBhbXVuZ3VhcmRiYXRjaCAoSW5k ZXhTY2FuRGVzYyBzY2FuLAogICAgIHRvIGZyZWUgdGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBv aW50IChhdCBhIG1pbmltdW0gd2hlbmV2ZXIKICAgICA8ZnVuY3Rpb24+YW1lbmRzY2FuPC9mdW5j dGlvbj4gaXMgY2FsbGVkLCBhbmQgdHlwaWNhbGx5IHdoZW4KICAgICA8ZnVuY3Rpb24+YW1yZXNj YW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQpLiAgSXQgbXVzdCBhbHNvIGtlZXAgdGhlIG51bWJlciBv ZgotICAgIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLgorICAgIHJldGFpbmVkIHBpbnMg Zml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MgYnVmZmVy CisgICAgcGluIGxpbWl0ICh3aGljaCBpcyBzaGFyZWQgd2l0aCB0aGUgdGFibGUgQU0ncyByZWFk IHN0cmVhbSBmb3IgaW5kZXggc2NhbgorICAgIHByZWZldGNoaW5nKS4KICAgIDwvcGFyYT4KICAg PC9ub3RlPgogCkBAIC0xNDI1LDYgKzE0MzAsNjAgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21w YXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgb3Igdmlj ZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9u ZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2Fu bmluZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5UYWJsZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0 Y2ggU2Nhbm5pbmc8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJp bWFyaWx5IHJlbGV2YW50IHRvIDxsaW5rIGxpbmtlbmQ9InRhYmxlYW0iPnRhYmxlIGFjY2Vzcwor ICAgICBtZXRob2Q8L2xpbms+IGF1dGhvcnMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGludGVyZmFjZSwgdGhlCisgICAgdGFibGUgQU0gaGFzIHNvbGUgY29udHJvbCBvdmVyIHRo ZSA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZp ZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+LCBpbmNsdWRpbmcgY3JlYXRpbmcsIHJlc2V0 dGluZywKKyAgICBhbmQgZW5kaW5nIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciB3aXRoaW4gdGhlIGFw cHJvcHJpYXRlIHRhYmxlIEFNCisgICAgY2FsbGJhY2tzLCBhbmQgbWFuYWdpbmcgcG9zaXRpb25h bCBzdGF0ZSBhbmQgVElEIHJlY3ljbGluZyBpbnRlcmxvY2tpbmcKKyAgICAodGhhdCBpcywgZGV0 ZXJtaW5pbmcgd2hlbiB0byB1bmd1YXJkIGVhY2ggYmF0Y2gsIHdoaWNoIHdpbGwgdHlwaWNhbGx5 CisgICAgcmVsZWFzZSBhbiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gYXNzb2NpYXRlZCB3aXRoIHRo ZSBiYXRjaCkuICBJbmRleCBhY2Nlc3MKKyAgICBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9y IG1hbmlwdWxhdGUgdGhlc2UgZmllbGRzLiAgU2VlIHRoZQorICAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmM8L2ZpbGVuYW1lPgorICAgIGltcGxl bWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgorCisgICA8cGFy YT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aXRo aW4KKyAgICA8c3RydWN0ZmllbGQ+YmF0Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVsZD4gdHJhY2tzIHdo aWNoIGJhdGNoIGFuZCBpdGVtIHdpdGhpbgorICAgIHRoYXQgYmF0Y2ggd2lsbCBiZSByZXR1cm5l ZCBuZXh0IHRvIHRoZSBleGVjdXRvci4gIFRoZSB0YWJsZSBBTSBtdXN0IGFkdmFuY2UKKyAgICA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGFzIHR1cGxlcyBhcmUgcmV0dXJuZWQg YnkKKyAgICA8ZnVuY3Rpb24+dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90PC9mdW5jdGlvbj4sIGFu ZCBtdXN0IGFsc28gbW9kaWZ5IHRoaXMKKyAgICBmaWVsZCB3aGVuIHJlc3RvcmluZyBhIHNhdmVk IG1hcmsuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJl ZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0cmFja3MgdGhlIHBvc2l0aW9uIHVzZWQKKyAg ICBmb3IgSS9PIHByZWZldGNoaW5nLiAgSXQgaXMgZ2VuZXJhbGx5IGFkdmFuY2VkIGJ5IGluaXRp YWxpemluZyBpdCBmcm9tCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiB3 aXRoaW4gYSByZWFkIHN0cmVhbSBjYWxsYmFjaywgYWxsb3dpbmcKKyAgICB0aGUgdGFibGUgQU0g dG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tzIHBvaW50ZWQgdG8gYnkgaXRlbXMgdGhhdCBhcmUgd2Vs bAorICAgIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBJbml0aWFsbHkKKyAg ICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBzdGFydHMgYXQKKyAgICA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+LCBidXQgYXMgdGhlIHJlYWQgc3RyZWFt IHJhbXBzIHVwIGl0IGNhbgorICAgIGdldCBmYXIgYWhlYWQgJm1kYXNoOyBzcGFubmluZyBtdWx0 aXBsZSBpbmRleCBwYWdlcyBpZiBuZWNlc3NhcnkgdG8KKyAgICBtYWludGFpbiBhbiBvcHRpbWFs IEkvTyBwcmVmZXRjaCBkaXN0YW5jZSBmb3IgdGFibGUgYmxvY2sgcmVhZHMuICBBIG1ham9yCisg ICAgZ29hbCBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ug aXMgdG8gYWxsb3cgdGhlCisgICAgdGFibGUgQU0gdG8gcHJlZmV0Y2ggd2l0aG91dCBiZWluZyBs aW1pdGVkIHRvIGl0ZW1zIGZyb20gdGhlIGN1cnJlbnQKKyAgICA8c3RydWN0ZmllbGQ+c2NhblBv czwvc3RydWN0ZmllbGQ+IGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlLgorICAgPC9wYXJhPgorCisg ICA8cGFyYT4KKyAgICBGb3IgZGV0YWlscyBvbiB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg ZHVyaW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRpbmcKKyAgICB0aGUgPHN0cnVjdGZpZWxkPmJhdGNo SW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IHBvbGljeSBhbmQgdGhlCisgICAgPGZ1bmN0 aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHNlZQorICAgIDx4cmVmIGxp bmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwv c2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpAQCAtMTUyNSw3ICsxNTg0LDIy IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5 LCBPaWQgb3BjaW50eXBlKTsKICAgIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3Jy ZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcwogICAgZXhwZW5zaXZlIGZvciBhIG51bWJl ciBvZiByZWFzb25zLiAgVGhlCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bwotICAgYWxsb3cgc2NhbnMgdG8g YmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+LgorICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1 b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBjb2xsZWN0aW5nIGJhdGNoZXMgb2YKKyAgIFRJ RHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywgdGhlIHRhYmxlIEFNIGNhbiBwcmVmZXRjaCB0 aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxvY2tzIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJl bnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNocm9ub3VzCisgICBJL08gd2hlbiBhdmFpbGFi bGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uICBOb3QK KyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcgYXN5bmNocm9ub3VzIGluIHByYWN0aWNlLCBidXQg dGhlIGludGVyZmFjZSBpcworICAgZGVzaWduZWQgdG8gYWxsb3cgaXQuICBQZXIgdGhlIGFib3Zl IGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25vdXMKKyAgIGFwcHJvYWNoIGZvciBu b24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMK KyAgIHdvcmthYmxlIGZvciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhbiBNVkNDIHNuYXBz aG90LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIHRoZSB0YWJsZSBBTSByZWFk cyBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHZpYQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0YXRlIHRoaXMgcHJlZmV0Y2hpbmcsIGl0IGNhbm5v dAorICAgcHJhY3RpY2FsbHkgaG9sZCBwaW5zIG9uIGFsbCB0aG9zZSBwYWdlcyBzaW11bHRhbmVv dXNseS4gIFRoZXJlZm9yZSwgSS9PCisgICBwcmVmZXRjaGluZyB3aXRoIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaXMgb25seSBwb3NzaWJsZSB3aGVuIGFuCisgICBNVkNDLWNvbXBs aWFudCBzbmFwc2hvdCBpcyBpbiB1c2UuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21s CmluZGV4IDljY2Y1YjczOS4uNDU0MmUwMGI0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFi bGVhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjks MTQgQEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwg dGhlIGJsb2NrIG51bWJlciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAor IDxwYXJhPgorICBUYWJsZSBhY2Nlc3MgbWV0aG9kcyBtdXN0IHN1cHBvcnQgb3JkZXJlZCBpbmRl eCBzY2FucyB1c2luZyB0aGUKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRl cmZhY2UuIFNlZSBhbHNvCisgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMi Lz4gZm9yIGRldGFpbHMgb24gaW50ZXJmYWNpbmcgd2l0aAorICA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGluZGV4IGFjY2VzcyBtZXRob2RzLCBhbmQgbWFuYWdpbmcgdGhlCisgIHNj YW4ncyBwb3NpdGlvbi4KKyA8L3BhcmE+CisKICA8cGFyYT4KICAgRm9yIGNyYXNoIHNhZmV0eSwg YW4gQU0gY2FuIHVzZSBwb3N0Z3JlcycgPGxpbmsKICAgbGlua2VuZD0id2FsIj48YWNyb255bT5X QUw8L2Fjcm9ueW0+PC9saW5rPiwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDEzMmI1NmE1OC4uMzJiYzNkZDNlIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTY2LDYgKzE2Niw3IEBA IHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdl bmFibGUlJzsKICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9p bmRleG9ubHlzY2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAg ICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9t YXRlcmlhbCAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTgwLDcg KzE4MSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFt ZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgog IGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAg ICAgICAgICAgICAgIHwgb24KLSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBh bHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rp b25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9y eSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCi0tIAoyLjUzLjAKCg== --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v25-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqsln3 RnJvbSA3Yzc4Nzk4NmZiZjE0ZWJlNmI0MGFlNWYyNWNiMTIzYjk2MDFmZTA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI1IDYv OF0gQWxsb3cgcmVhZF9zdHJlYW1fcmVzZXQoKSB0byBub3Qgd2FpdCBmb3IgSU8KIGNvbXBsZXRp b24KCk5vdCB3YWl0aW5nIGZvciBJTyBkdXJpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKSBjYW4gYmUg aW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZQppbiBjYXNlcyB3aGVyZSByZWFkIHN0cmVhbXMgYXJl IGZyZXF1ZW50bHkgcmVzZXQgYmVmb3JlIHRoZSBlbmQgaXMKcmVhY2hlZC4gQ3VycmVudCB1c2Vy cyBkbyBub3QgY29tbW9ubHkgZG8gdGhhdCwgYnV0IHRoZSB1cGNvbWluZyB3b3JrIHRvIHVzZSBh CnJlYWQgc3RyZWFtIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBhcyBwYXJ0IG9mIGluZGV4IHNj YW5zIGNhbiBkbyBzbwpmcmVxdWVudGx5IGluIHNvbWUgcXVlcnkgcGF0dGVybnMuIEUuZy4gaWYg dGhlcmUgaXMgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIKc2lkZSBvZiBhIG5lc3RlZCBsb29w IGFudGlqb2luLgoKVGhpcyB0YWtlcyBhIGJpdCBvZiBjYXJlIHRvIGRvIHJpZ2h0LiBKdXN0IGlu dHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFiYW5kb25pbmcKYSBBSU8gaGFuZGxlIGNvdWxkIGxlYWQg dG8gdGhlIElPJ3MgY29tcGxldGlvbiBub3QgYmVpbmcgcHJvY2Vzc2VkIHVudGlsIHRoZQpiYWNr ZW5kIGV4aXRzLiBUaGF0J3MgYmFkIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byByZXNvdXJjZXMg aGVsZCBvbnRvIGZvciB0aGUKSU8gKGUuZy4gYnVmZmVyIHBpbnMpIG5vdCBiZWluZyByZWxlYXNl ZCBhbmQgdGhlIGhhbmRsZSBzaG93aW5nIHVwIGluIHBnX2Fpb3MuCgpUbyBhdm9pZCB0aGF0LCB0 aGUgZXhpc3RpbmcgcmVzb3duZXIgY2xlYW51cCBpcyBjaGFuZ2VkIHRvIHdhaXQgZm9yIHRoZSBJ TydzCmNvbXBsZXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBieSB0aGUgZW5kIG9mIHRoZSBz dGF0ZW1lbnQgdGhlIElPIGhhcwpjb21wbGV0ZWQuIFdlIG1pZ2h0IGV2ZW50dWFsbHkgd2FudCB0 byByZWxheCB0aGF0IGZvciBzb21lIG9wZXJhdGlvbnMgKGUuZy4sCmZvciBiYWNrZ3JvdW5kIFdB TCB3cml0ZXMgb3Igb3Bwb3J0dW5pc3RpYyBwcmVmZXRjaGluZykuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2YzeHhmcmthZmp4cHlxeHl3Y3hyaWN4Z3lpemppcmZjZXljaHl4c2du N2J3anA1ZWRhQGt3YmR1aHk3dGZtdQotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAg ICAgICAgIHwgMTAyICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgICAgICAgfCAgMzEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM0ICsrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjLi5jMDJiZmQ2 ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg YTMxODUzOWU1Li4xMjVkOGJhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTEwLDcgKzExMCw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTU1Myw4ICs1NTQsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC02MzIsNyArNjMzLDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTc0MCw3ICs3NDEsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEx NDYsOCArMTE0Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTE4OCw3ICsxMTg5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xNDIw LDggKzE0MzEsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBjYzM5OGRiMTIuLjY4ODFjNjIw YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MTMsNiArMTYxMywxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNzQsNiArMjE3OCwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi4xZmJjYTJiNTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDU0IEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwlpZiAoJGlvX21ldGhvZCBuZSAnc3luYycpCisJewor CQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFTEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJ CSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VUIGlvX2NvbWJpbmVfbGltaXQ9NXwpOworCQkkcHNx bF9iLT5xdWVyeV9zYWZlKAorCQkJcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQoCisJ CSAgIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnJHRhYmxlJyksCisJCSAgIGJs b2Nrbm89PjQpOy8pOworCQlvaygxLAorCQkJIiRpb19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogY29u ZmlndXJlIHdhaXQgaW4gY29tcGxldGlvbiBvZiBibG9jayA0IgorCQkpOworCisJCSMgTmVlZCB0 byBlbmQgdGhlIHdhaXQgaW4gdGhlIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBzdGF0ZW1lbnQgaXMg b3ZlciwKKwkJIyBvdGhlcndpc2Ugd2UnbGwgd2FpdCBkdXJpbmcgcmVzb3duZXIgY2xlYW51cCBh dCB0aGUgZW5kIG9mIHRoZQorCQkjIHN0YXRlbWVudC4KKwkJcHNxbF9saWtlKAorCQkJJGlvX21l dGhvZCwKKwkJCSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgYWJhbmRv bmluZyBibG9ja2VkIElPIGF2b2lkcyB3YWl0IiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIGNvdW50 KCopID4gMCBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgMTAsIGFiYW5kb25fYWZ0ZXIg PT4gMCkgV0hFUkUgYWJhbmRvbmVkCisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBjb3Vu dCgqKSA+IDAgRlJPTSBwZ19haW9zIFdIRVJFIHBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKwkJCSAg IFVOSU9OIEFMTAorCQkJICAgU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkgSVMg Tk9UIE5VTEwKKwkJCXwsCisJCQlxci9edFxudFxudCQvLAorCQkJcXIvXiQvKTsKKwkJaXMoJHBz cWxfYS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhv ZDogJHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gaXMgY29tcGxldGVkIGF0IGVuZCBvZiBzdGF0 ZW1lbnQiCisJCSk7CisKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5l X2xpbWl0fCk7CisJfQorCiAJJHBzcWxfYS0+cXVpdCgpOwogCSRwc3FsX2ItPnF1aXQoKTsKIAkk cHNxbF9jLT5xdWl0KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4w LnNxbAppbmRleCA3NjJhYzI5NTEuLmZmM2IyMDBjZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC01Myw3ICs1Myw3IEBAIENSRUFURSBGVU5DVElP TiBidWZmZXJfY2FsbF90ZXJtaW5hdGVfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIHN1 Y2NlZWQgYm9vCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAKLUNSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcnMocmVsIHJl Z2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgT1VUIGJsb2Nrb2ZmIGludDQs IE9VVCBibG9ja251bSBpbnQ0LCBPVVQgaW9fcmVxZCBib29sLCBPVVQgZm9yZWlnbl9pbyBib29s LCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKK0NSRUFURSBGVU5DVElPTiByZWFk X2J1ZmZlcnMocmVsIHJlZ2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgYWJh bmRvbl9hZnRlciBpbnQ0IERFRkFVTFQgLTEsIE9VVCBibG9ja29mZiBpbnQ0LCBPVVQgYmxvY2tu dW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25faW8gYm9vbCwgT1VUIGFiYW5k b25lZCBib29sLCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKIFJFVFVSTlMgU0VU T0YgcmVjb3JkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IDM1ZWZiYTFhNS4uNjQ4NTJjNGU0IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC02OTgsMTEgKzY5OCwxMyBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJQmxvY2tOdW1iZXIgc3RhcnRibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CiAJ aW50MzIJCW5ibG9ja3MgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJaW50MzIJCWFiYW5kb25fYWZ0 ZXIgPSBQR19HRVRBUkdfSU5UMzIoMyk7CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVy blNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlTTWdyUmVs YXRpb24gc21ncjsKIAlpbnQJCQluYmxvY2tzX2RvbmUgPSAwOwogCWludAkJCW5ibG9ja3NfZGlz cCA9IDA7CisJaW50CQkJbmJsb2Nrc193YWl0ID0gMDsKIAlpbnQJCQluaW9zID0gMDsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uczsKIAlCdWZmZXIJICAgKmJ1ZmZlcnM7CkBAIC03 MjQsNiArNzI2LDkgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwlpZiAoYWJhbmRvbl9hZnRlciA8IDApCisJCWFiYW5kb25fYWZ0ZXIgPSBu YmxvY2tzOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZmZXJzKCkgdW50aWwgSU8gZm9yIGFs bCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICogc3RhcnRlZCAoaWYgcmVxdWlyZWQp LgpAQCAtNzU4LDkgKzc2MywxNyBAQCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlm b3IgKGludCBuaW8gPSAwOyBuaW8gPCBuaW9zOyBuaW8rKykKIAl7CiAJCVJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOworCQlpbnQJCQluYmxvY2tzX3Ro aXNfaW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwogCiAJCWlmIChpb19yZXFkc1tuaW9dKQotCQkJ V2FpdFJlYWRCdWZmZXJzKG9wZXJhdGlvbik7CisJCXsKKwkJCWlmIChuYmxvY2tzX3dhaXQgPCBh YmFuZG9uX2FmdGVyKQorCQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQkJZWxzZQor CQkJCUFiYW5kb25SZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl9CisKKwkJbmJsb2Nrc193YWl0 ICs9IG5ibG9ja3NfdGhpc19pbzsKIAl9CiAKIAkvKgpAQCAtNzcwLDggKzc4Myw4IEBAIHJlYWRf YnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiA9ICZvcGVyYXRpb25zW25pb107CiAJCWludAkJCW5ibG9ja3NfdGhpc19pbyA9IG5i bG9ja3NfcGVyX2lvW25pb107Ci0JCURhdHVtCQl2YWx1ZXNbNl0gPSB7MH07Ci0JCWJvb2wJCW51 bGxzWzZdID0gezB9OworCQlEYXR1bQkJdmFsdWVzWzddID0gezB9OworCQlib29sCQludWxsc1s3 XSA9IHswfTsKIAkJQXJyYXlUeXBlICAqYnVmZmVyc19hcnI7CiAKIAkJLyogY29udmVydCBidWZm ZXIgYXJyYXkgdG8gZGF0dW0gYXJyYXkgKi8KQEAgLTgwNCwxNCArODE3LDE4IEBAIHJlYWRfYnVm ZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oaW9fcmVx ZHNbbmlvXSA/IG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA6IGZhbHNlKTsKIAkJbnVsbHNbM10gPSBm YWxzZTsKIAotCQkvKiBuYmxvY2tzICovCi0JCXZhbHVlc1s0XSA9IEludDMyR2V0RGF0dW0obmJs b2Nrc190aGlzX2lvKTsKKwkJLyogYWJhbmRvbmVkICovCisJCXZhbHVlc1s0XSA9IEJvb2xHZXRE YXR1bShuYmxvY2tzX2Rpc3AgPj0gYWJhbmRvbl9hZnRlcik7CiAJCW51bGxzWzRdID0gZmFsc2U7 CiAKLQkJLyogYXJyYXkgb2YgYnVmZmVycyAqLwotCQl2YWx1ZXNbNV0gPSBQb2ludGVyR2V0RGF0 dW0oYnVmZmVyc19hcnIpOworCQkvKiBuYmxvY2tzICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0 RGF0dW0obmJsb2Nrc190aGlzX2lvKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAorCQkvKiBhcnJh eSBvZiBidWZmZXJzICovCisJCXZhbHVlc1s2XSA9IFBvaW50ZXJHZXREYXR1bShidWZmZXJzX2Fy cik7CisJCW51bGxzWzZdID0gZmFsc2U7CisKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJbmJsb2Nr c19kaXNwICs9IG5ibG9ja3NfdGhpc19pbzsKQEAgLTEwNjQsNiArMTA4MSwxMyBAQCBpbmpfaW9f Y29tcGxldGlvbl93YWl0X21hdGNoZXMoUGdBaW9IYW5kbGUgKmlvaCkKIAkJIShpbmpfYmxvY2tu byA+PSBpb19ibG9ja25vICYmIGlual9ibG9ja25vIDwgKGlvX2Jsb2Nrbm8gKyB0ZC0+c21nci5u YmxvY2tzKSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWVyZXBvcnQoTE9HLAorCQkJZXJybXNnKCJ3 YWl0IGluamVjdGlvbiBwb2ludCBtYXRjaGVzIGZvciBJTyAlZCwgaW5qIGJsb2Nrbm8gJWQsIGlv IGJsb2Nrbm8gJWQsIGlvIG5ibG9ja3MgJWQiLAorCQkJCSAgIHBnYWlvX2lvX2dldF9pZChpb2gp LAorCQkJCSAgIGlual9ibG9ja25vLCBpb19ibG9ja25vLCB0ZC0+c21nci5uYmxvY2tzCisJCQkJ ICAgKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLSAKMi41My4wCgo= --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v25-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqsls6 RnJvbSBjNjM2OGU2MWZlNTA1NWVlMTI5NTI2MDc4MGU1Y2Y3NmIyOGQzM2Y0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNSAzLzhdIEFk b3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIGhhc2ggaW5kZXggQU0uCgpSZXBsYWNlIGhhc2hn ZXR0dXBsZSB3aXRoIGhhc2hnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhl Cm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBp bmRleCBzY2FucyBvZgpoYXNoIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBi YXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbiBidWNr ZXQgb3Igb3ZlcmZsb3cgcGFnZS4gIFRoaXMgZ2l2ZXMgdGhlIHRhYmxlCkFNIHRoZSBhYmlsaXR5 IHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZwpo YXNoIGluZGV4IHNjYW5zLgoKYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIGFsd2F5cyB0cnVlIGR1 cmluZyBoYXNoIGluZGV4IHNjYW5zIChzaW5jZSBoYXNoCmRvZXNuJ3Qgc3VwcG9ydCBpbmRleC1v bmx5IHNjYW5zIGFuZCBhbHdheXMgdXNlcyBhbiBNVkNDIHNuYXBzaG90KSwgc28KdGhlIGJ1ZmZl ciBwaW4gaW50ZXJsb2NrIGhlbGQgb24gZWFjaCBiYXRjaCBpcyBhbHdheXMgZHJvcHBlZCBhdCB1 bmxvY2sKdGltZSAtLSBiZWZvcmUgdGhlIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRh YmxlIEFNLiAgVGhpcyBkaWZmZXJzCmZyb20gaGFzaCdzIHByZXZpb3VzIGFwcHJvYWNoIG9mIGhv bGRpbmcgb24gdG8gYSBwaW4gZm9yIGF0IGxlYXN0IGFzCmxvbmcgYXMgdGhlIHNjYW4gd2FzIHN0 b3BwZWQgb24gdGhlIHBpbm5lZCBpbmRleCBwYWdlLgoKQW4gYW11bmd1YXJkYmF0Y2ggY2FsbGJh Y2sgaXMgYSByZXF1aXJlbWVudCBmb3IgYW1nZXRiYXRjaCBpbmRleCBBTXMuCmhhc2h1bmd1YXJk YmF0Y2ggaXMgcHJvdmlkZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBjdXJyZW50bHkgdXNlZCBk dWUKdG8gYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGFsd2F5cyBiZWluZyB0cnVlIGluIHByYWN0aWNl LiAgVGhhdCBtaWdodCBub3QKcmVtYWluIHRydWUgaW4gdGhlIGZ1dHVyZSwgd2l0aCBvdGhlciB0 YWJsZSBBTXMgdGhhdCB1c2UgYW4gYWx0ZXJuYXRpdmUKZm9ybSBvZiBpbnRlcmxvY2suICBXaGls ZSB0aGUgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHNjYW4gaXMKYmF0Y2hJbW1lZGlh dGVVbmd1YXJkIGNhbm5vdCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSB0YWJsZSBBTSByaWdodCBub3cs CnRoYXQgbWlnaHQgdmVyeSB3ZWxsIGNoYW5nZSBhcyByZXF1aXJlbWVudHMgZnJvbSB0YWJsZSBB TXMgZGljdGF0ZS4KCkd1YXJhbnRlZWluZyB0aGF0IHJldHVybmVkIGJhdGNoZXMgaG9sZCBubyBi dWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcwpncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBkdXJpbmcgaW5kZXggcHJlZmV0Y2hpbmcsIHdoZXJlCnRoZSByZWFkIHN0cmVhbSBp cyBleHBlY3RlZCB0byBob2xkIG1hbnkgcGlucyBvbiBoZWFwIHBhZ2VzLiAgVGhlCmFtZ2V0YmF0 Y2ggaW50ZXJmYWNlIHJlcXVpcmVzIHRoYXQgaW5kZXggQU1zIHRha2UgdGhlIHNhbWUgc3RhbmRh cmRpemVkCmFwcHJvYWNoIHRvIHBpbiBtYW5hZ2VtZW50IGZvciBwaW5zIHRoYXQgYXJlIHVzZWQg dG8gcHJldmVudCB1bnNhZmUKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodGhh dCB3YXkgcHJlZmV0Y2hpbmcgY2FuIGhvbGQgb3BlbgptdWx0aXBsZSBiYXRjaGVzIHdpdGhvdXQg aXQgYWZmZWN0aW5nIHRoZSByZWFkIHN0cmVhbSkuICBOb3RlLCBob3dldmVyLAp0aGF0IGhhc2gg c3RpbGwgaG9sZHMgb24gdG8gcGlucyBuZWVkZWQgZm9yIGl0cyBvd24gaW50ZXJuYWwgcHVycG9z ZXMKKGUuZy4sIGl0J2xsIHN0aWxsIGhvbGQgb250byBhIHBpbiBkdXJpbmcgYSBidWNrZXQgc3Bs aXQpLgoKaGFzaGtpbGxpdGVtc2JhdGNoICh0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg bmV3IGFta2lsbGl0ZW1zYmF0Y2gKaW50ZXJmYWNlKSBwZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcg b2YgZGVhZCBpbmRleCBlbnRyaWVzLCB3aGlsZQpmb2xsb3dpbmcgc2xpZ2h0bHkgZGlmZmVyZW50 IHJ1bGVzIHRvIHRoZSBvbGQgYXBwcm9hY2guICBJdCByZWxpZXMgb24KY29tcGFyaW5nIHRoZSBi YXRjaCdzIHNhdmVkIExTTiBhZ2FpbnN0IHRoZSBjdXJyZW50IHBhZ2UgTFNOIHRvIGRldGVjdApj b25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucywgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBmYWtl IExTTiBzdXBwb3J0CmZvciB1bmxvZ2dlZCByZWxhdGlvbnMuICBQcmVwYXJhdG9yeSBjb21taXQg ZTU4MzZmN2IgYWRkZWQgdGhhdCBzdXBwb3J0CnRvIHRoZSBoYXNoIGluZGV4IEFNLgoKQXV0aG9y OiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEg PHRvbWFzQHZvbmRyYS5tZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFy YXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgx NjFwZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODEgKystLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jICAgICAgIHwgMjEwICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHBhZ2UuYyAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2Vh cmNoLmMgfCAzNDUgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNodXRpbC5jICAgfCAxMjkgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbCAgICAgICAgICAgIHwgIDI4ICsrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDM0MyBpbnNlcnRpb25zKCspLCA1 MDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYTJlMDJmOWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gKIAogI2luY2x1ZGUg ImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRlZiBIYXNoUGFnZU9w YXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4 RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJl ciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBo YXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdl J3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSdz IGJsb2NrIG51bWJlciAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogaW5kZXggcGFnZSdz IGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogaW5kZXggcGFnZSdz IHJpZ2h0IHNpYmxpbmcgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFz aFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIg aXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5k ZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdl ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBw YWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBp bmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5u aW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFj ay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2Fy ZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFz dC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5n IHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlm aXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFz dEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5k ZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBp dGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNj YW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBc Ci0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwg XAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZh bGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsg XAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5w b3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0 ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1J bmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorLyogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVy LWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhh c2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2Ft ZGF0YShzY2FuLCBiYXRjaCwgSGFzaEJhdGNoRGF0YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVl RGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSAr MTQwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQg b25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFz aHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxl ZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtp bGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAq IElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJ LyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlw ZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEs MTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJ CQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAor CQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5E ZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp OwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2Nh bmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRl cmJ5cyk7CitleHRlcm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFz aGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZv aWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZl ciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICov Ci1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVk ZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAq LwpAQCAtNDc2LDcgKzQzNCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxv Y2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxv Y2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwg QnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zy b21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJ CQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hf a2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2 b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlz OgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJh bmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZv cgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4s IHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJ cmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFn ZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJ dGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZl IGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4g aXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMg cHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUg c2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNo aW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNl IGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0 YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1 Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0 IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBz Y2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQK IAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3Ig dGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50 ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9m IGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikK K3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlv bnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVj a2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9j ay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50 aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNl LCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFn ZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRp bmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1 cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0 IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9u IGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVj a2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVj a2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBz Y2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwg dGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRv IHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBw YWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBp bnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJl cXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRo ZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBh cmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5 IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0 cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhl IHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5n LXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKaW5kZXggOWFlOWYwNDQ4Li44Y2MyNGY5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMK QEAgLTExMywxMCArMTEzLDEwIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFz aGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBo YXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0g TlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNo dW5ndWFyZGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwK IAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRz Y2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCkBAIC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5z ZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0g KgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKglo YXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGlu IHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQog ewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0J Ym9vbAkJcmVzOwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ug c3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAK LQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4g anVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdl IGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYg KHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBz aG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNj YW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVy IGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0 IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nh bi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVj dGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0 IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3Qg dGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4K LQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJ dGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVk KytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJl bCwgc28pOwogCi0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJl cyA9IF9oYXNoX25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5k IHJldHVybiBmaXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hf Zmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBw b3NpdGlvbmVkIGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJ cmV0dXJuIF9oYXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUs MjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50 aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmly c3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2gg IT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9z Lml0ZW1JbmRleF07CisJCWZvciAoaW50IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJ CQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJewor CQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQs IDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFu ZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdo ZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRo ZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8g dGhlIFRJREJpdG1hcC4KKwkJICogX2hhc2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2gg Zm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9yZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwg c28gb25seSBvbmUgYmF0Y2ggaXMgZXZlciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2Fk ZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7 Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJh dGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0K IAogCXJldHVybiBudGlkczsKQEAgLTM5NiwxNyArMzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0 SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28t Pmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBm YWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0K IAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBs ZXNQZXJQYWdlOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6 ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsK IAogCXJldHVybiBzY2FuOwogfQpAQCAtNDIxLDE4ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2Fu T3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9r aWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0J Lyogc2V0IHBvc2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxs KSAqLwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUg c2NhbiBrZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4t Pm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2Fu LT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTEx IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhh c2h1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg KGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2Fm ZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9pZAoraGFzaHVuZ3VhcmRiYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUhhc2hCYXRjaERhdGEg Kmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxk IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlB c3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1 YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihoYXNoYmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKglo YXNoa2lsbGl0ZW1zYmF0Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9E RUFECisgKi8KK3ZvaWQKK2hhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBi YXRjaCk7CisJQnVmZmVyCQlidWY7CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7CisJT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29t ZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gt Pm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRjaC0+Y3Vy clBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChi YXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQor CXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYo cmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK KwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRl bXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+ bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tp XTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdOworCisJCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRl bUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+ bGFzdEl0ZW0pOworCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJ CWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxl ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisKKwkJCWlmIChJdGVtUG9p bnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT50YWJsZVRpZCkpCisJCQl7CisJ CQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhl IGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRh dGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJ ICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAq LworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5s b2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlJdGVtSWRN YXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJ Lyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXRO dW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJl IHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKKwkg KiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBM SF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGlu dC4KKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5oYXNob19mbGFn IHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhi dWYsIHRydWUsIHRydWUpOworCX0KKwordW5sb2NrX3BhZ2U6CisJX2hhc2hfcmVsYnVmKHJlbCwg YnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDUwLDE3ICs1MTksOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBz byk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJ dGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2so Y2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1 Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJ ICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sg dGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9r aWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2ls bGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7 CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdF X0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBT ZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFz ayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1 ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVu cGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5v IGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFy eSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVp bmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlv biByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24g cHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVj a2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikK KwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVm ZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdl ICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBz by0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBw YWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZm ZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3Vy clBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNl dCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28t Pmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YwppbmRleCA4OWQxYzViYzYuLjYzYTdiYTY4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hz ZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlv biBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC dWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNj YW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRj aCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1 cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9w YXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEg c2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4g YSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJy ZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNv LT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlv dXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1 cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0g KgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElE IG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMg bmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5p bmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5z IE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMu ICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJ aGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93 Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVz IGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNo KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0 RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1 ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwog CiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7 IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZp b3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3Zpbmcg dG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGgg YWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3 aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0 Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0 aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGly ID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBi YXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHBy aW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0J CWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7 Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK KwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGhh c2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFn ZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCQkJ CWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4g PSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQotCX0K KwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRj aCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBpdHMgbWVt b3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25l IGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKCFCbG9j a051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNw YWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2go c2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25v LCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5j dXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFH RSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdl OwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hh c2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BB R0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50 YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRp b24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJ CSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hf ZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRf b2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBw aW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBzbyByZWxl YXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJICovCisJ CWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQogCi0J aWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBp bnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBk aXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1f dXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0J LyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlk ID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJh dGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJldHVybiBi YXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3JlYWRwcmV2KEluZGV4 U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmly c3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJh dGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAo b3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWluZGV4IHRo YXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Nhbgot ICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgKG9y LCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5kZXggdGhh dCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJdGhlIHNj YW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFnZSBj b250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdlLCBi b3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tldAot ICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJvdXQg dGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGlu dG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhlYXAg VElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJu cyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJldHVy bnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMuCisg KgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJT24gZmFp bHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBwaW4gaGVs ZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZs b3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBidWNrZXQg cGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBhZ2UsIGl0 IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5kZXhTY2Fu QmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsyODMs NyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhh c2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0 YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI2 LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdz ICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkg KiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9y ZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2Fu LCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVy IHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5j dXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFj ZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChz Y2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxp ZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2Fk IGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2Fu LCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nh biwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMg d2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3Vy clBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsK LQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVz ICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNo ZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgp IC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisg KglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBp bnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGlu ZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2Zp ZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2gg aWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwog ICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBk aXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBm b3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlv biBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRl eDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsK IAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwlo YXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJs b2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykK IAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkg c2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19z a19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2Nh biwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7 CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENv dWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92 ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZp bmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAq IG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDAp Ci0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMg YSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJ ICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5o YXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJCV9o YXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJ c1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5j dXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVs c2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2Nr IG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0 IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9y ZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBj dXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVt cyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rp b24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxr bm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJ c28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJ cmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hi YXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28t PmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5k ZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVt ID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsK LQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3Ig KDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJp bmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNv LT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVk X2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJ ICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkK IAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0 dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBh Z2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55 IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMg aW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBw YWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFz aF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNW YWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3Vy clBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNl Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBu dW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBw b3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUg bWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3Vy clBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMg dG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9u IHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJl dHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0 Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBN YXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJ bmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4Owor CQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlm IChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJy UG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBh dCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRi YXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlh bGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1 Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0J CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tC dWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBC YXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBi ZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVu dCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50 CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3Jl IGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNv X3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJCSAqLwor CQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNoLT5idWYpOworCisJCS8qIENhbiBvbmx5IHVz ZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19u ZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVl LT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNo b19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNo b19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+ cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJaGFzaGJhdGNoLT5uZXh0UGFn ZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCS8qIHdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAqLworCWluZGV4YW1fdXRpbF91bmxvY2tfYmF0 Y2goc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVmKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJ dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2Fk IGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGlu dG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBp bnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0 aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNo U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1 ODgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyog dHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gs IGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVs c2UKQEAgLTY4Nyw3ICs2MzUsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0 dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEz ICs2NTQsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3Vy clBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRj aC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRl bShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt PnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggMWQxYjA1Zjg3Li44OGEzZjNhZDggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtMTYsMTAgKzE2LDggQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogI2RlZmlu ZSBDQUxDX05FV19CVUNLRVQob2xkX2J1Y2tldCwgbG93bWFzaykgXAogCQkJb2xkX2J1Y2tldCB8 IChsb3dtYXNrICsgMSkKQEAgLTMzLDcgKzMxLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4n dCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBo YXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1 bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUg YWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3Qg dGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1h a2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQK QEAgLTUwNSwxMjggKzUwMywzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQo UmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0Owog fQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVt cyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0g KiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0 aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+ bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGlu IGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5n Ci0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBj YWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3Qg aGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAg VElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRl LgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0 IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFu dXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBw aW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVj a2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1 dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9j a3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJl dmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lk ZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5y ZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mg c2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIg Ymxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVk ID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4g MCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2Nh biBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBh Z2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5j dXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkv KgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5l ZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9 IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZF Ul9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtu bywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7 IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwot Ci0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4 ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRl bVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7 Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2Ug dGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1 cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJ CQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJ CSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8g dW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVt SWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7 CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZz ZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2Fu IGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIK LQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkg KiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEg aGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19m bGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0 cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKGhhdmVQaW4pCi0J CUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UK LQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGQ2OWQ4Y2E0Yi4u MDAxZWUxM2Q1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTg0NCw3ICs4NDQsOCBAQCBhbWdldGJhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgICBJdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVyIHRv IGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSByZWxlYXNlZC4gIE5vdGUKICAgIGFsc28gdGhhdCA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBtdXN0IG5ldmVyIG1vZGlm eSB0aGUKICAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVsZD4gcGFyYW1ldGVy LiAgVGhlIGNvcmUKLSAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmls ZW5hbWU+IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9ucyBwcm92aWRlCiAgICByZWZl cmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlLgogICA8L3BhcmE+CiAKQEAgLTkxNiwxMiArOTE3LDEyIEBAIGFtdW5ndWFyZGJhdGNo IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBsZWFmIHBhZ2UsIHdoaWNoIHByZXZlbnRzIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyBieQogICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4KICAg IEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9mIGludGVy bG9jaywgb3IgbXVsdGlwbGUKLSAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVl IGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KLSAgIGluZGV4IEFNIHRoYXQgc3Vw cG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZQotICAg Jm1kYXNoOyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtlbmQ9Imlu ZGV4LWxvY2tpbmciLz4gZm9yCi0gICBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBk dXJpbmcgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKLSAgIGNhbGxlZCBhdCBt b3N0IG9uY2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuIHRo ZSBpbmRleAotICAgQU0gaGFzIGFscmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRjaCBpdHNlbGYgKGFz IGl0IGRvZXMgd2hlbgorICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJl YSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQtaW4KKyAgIGluZGV4IEFNcyB0aGF0IHN1cHBv cnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZSBhbmQKKyAg IGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2Vu ZD0iaW5kZXgtbG9ja2luZyIvPgorICAgZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2Vt ZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMgZnVuY3Rpb24KKyAgIHdpbGwgYmUgY2FsbGVk IGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkIGJhdGNoOyBpdCBpcyBub3QgY2FsbGVkIHdo ZW4KKyAgIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1bmd1YXJkZWQgdGhlIGJhdGNoIGl0c2Vs ZiAoYXMgaXQgZG9lcyB3aGVuCiAgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJk PC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlCiAgICBjb21tb24gY2FzZSkuCiAg IDwvcGFyYT4KQEAgLTk2MSw4ICs5NjIsOCBAQCBhbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IEFNcyAo dGhvc2UgdGhhdCBkb24ndCBjYW4gbGVhdmUKICAgIHRoZSBmaWVsZCBzZXQgdG8gPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4pLCBidXQgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yCiAgICBwZXJm b3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2FucyB0byBza2lwIGtub3duLWRlYWQgaW5k ZXggZW50cmllcy4KLSAgIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50 bHkgc3VwcG9ydHMKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSkg aW1wbGVtZW50cworICAgQm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgY3VycmVu dGx5IHN1cHBvcnQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSBh bmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5n LCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKICAgIGFyZSBmcmVlIHRv IGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuICBUaGUgdGFibGUgQU0g bWF5CiAgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVu Y3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcwpAQCAtMTAwMyw3ICsxMDA0LDggQEAgYW1raWxs aXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7IHNvIGl0IHdvdWxkIGJlCiAgICB1bnNh ZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBo ZWFwL3RhYmxlCiAgICB0dXBsZXMuICBTaW5jZSA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBt YXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCi0gICBoaW50LCBpdCBpcyBhbHdheXMgc2Fm ZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBhcHByb2FjaC4KKyAgIGhpbnQsIGl0IGlz IGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCb3RoIEItdHJlZSBhbmQgaGFzaCB1c2UgdGhpcwor ICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIAogICA8d2FybmluZz4KQEAgLTEwMTEsNyArMTAxMyw3 IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgICBUaGlzIExTTiBj b21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcyB0aGUgaW5kZXggQU0gdG8gdXNlIGZha2UKICAg ICAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRp b25zIHdoZXJlIFdBTCBpcwogICAgIG5vdCBnZW5lcmF0ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUg bm90IGF2YWlsYWJsZSBpbiB0aGF0IGNhc2UuICBTZWUgdGhlCi0gICAgQi10cmVlIGluZGV4IGlt cGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlIG9mIHRoaXMKKyAgICBCLXRyZWUg YW5kIGhhc2ggaW5kZXggaW1wbGVtZW50YXRpb25zIGZvciByZWZlcmVuY2UgZXhhbXBsZXMgb2Yg dGhpcwogICAgIHRlY2huaXF1ZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50 IGZha2UgTFNOcyBjYW4gc3RpbGwKICAgICBwcm92aWRlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2Jh dGNoPC9mdW5jdGlvbj4sIGJ1dCBzaG91bGQgc2ltcGx5IGRvCiAgICAgbm90aGluZyB3aGVuIHRo ZSByZWxhdGlvbiBkb2VzIG5vdCBnZW5lcmF0ZSBXQUwgKGkuZS4sIHdoZW4KQEAgLTEwOTMsOCAr MTA5NSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nCiAgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPgog ICAgaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIGNhbGxlciAodGhlIHRhYmxlIEFNKSwgYW5kIHRo ZSBpbmRleCBBTSBtdXN0Ci0gICBuZXZlciByZWxlYXNlIGl0LiAgU2VlIDxmdW5jdGlvbj5fYnRf bmV4dDwvZnVuY3Rpb24+IGZvciBhIHJlZmVyZW5jZQotICAgZXhhbXBsZS4KKyAgIG5ldmVyIHJl bGVhc2UgaXQuICBTZWUgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kCisgICA8ZnVu Y3Rpb24+X2hhc2hfbmV4dDwvZnVuY3Rpb24+IGZvciByZWZlcmVuY2UgZXhhbXBsZXMuCiAgIDwv cGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWQyODMyNzNh Li5jYzlkMzAxN2YgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjMzLDYgKzEyMzMs NyBAQCBIYXNoCiBIYXNoQWdnQmF0Y2gKIEhhc2hBZ2dTcGlsbAogSGFzaEFsbG9jRnVuYworSGFz aEJhdGNoRGF0YQogSGFzaEJ1aWxkU3RhdGUKIEhhc2hCdWxrRGVsZXRlU3RyZWFtUHJpdmF0ZQog SGFzaENvbXBhcmVGdW5jCkBAIC0xMjU0LDggKzEyNTUsNiBAQCBIYXNoUGFnZVN0YXQKIEhhc2hQ YXRoCiBIYXNoU2Nhbk9wYXF1ZQogSGFzaFNjYW5PcGFxdWVEYXRhCi1IYXNoU2NhblBvc0RhdGEK LUhhc2hTY2FuUG9zSXRlbQogSGFzaFNrZXdCdWNrZXQKIEhhc2hTdGF0ZQogSGFzaFZhbHVlRnVu YwotLSAKMi41My4wCgo= --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v25-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqslr5 RnJvbSBiMGU3ZDQ4NjE0M2EwMjE0YTExZjRkY2FjNGZhM2NjMGJlNWIwODUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSA0LzhdIGhl YXBhbTogT3B0aW1pemUgcGluIHRyYW5zZmVycyBkdXJpbmcgaW5kZXggc2NhbnMuCgpBZGQgYW4g eHNfbGFzdGluYmxvY2sgZmxhZyB0byBJbmRleEZldGNoSGVhcERhdGEgdGhhdCB0cmFja3Mgd2hl dGhlciB0aGUKY3VycmVudCBUSUQgaXMgdGhlIGxhc3Qgb25lIG9uIGl0cyBoZWFwIGJsb2NrIHdp dGhpbiB0aGUgY3VycmVudCBiYXRjaC4KV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlIGNhbiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUKc2xvdCAodmlhIEV4ZWNTdG9y ZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSkgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlCnBpbiBj b3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBj YWxscy4KVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMg YmVjYXVzZSBhbGwtdmlzaWJsZQppdGVtcyBjYW4gYmUgc2tpcHBlZCwgd2hpY2ggd291bGQgYnJl YWsgYmxvY2sgZGVkdXBsaWNhdGlvbiBzeW1tZXRyeQpiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUg cmVhZCBzdHJlYW0gKGJlc2lkZXMsIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzCmNvZGUgcGF0aCBj YW4gb25seSBtYXR0ZXIgd2hlbiBtYW55IGhlYXAgZmV0Y2hlcyBhcmUgcmVxdWlyZWQsIHdoaWNo IGlzCmhvcGVmdWxseSByYXJlIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KCkFsc28gYWRkIGFu IGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlIHRvIHRoZSBibG9jay1zd2l0Y2ggcGF0aCBpbgpoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbCB0byByZWxlYXNlIHRoZSBwaW4gdHJhbnNmZXJyZWQg dG8gdGhlIHNsb3QKb24gdGhlIHByZXZpb3VzIGNhbGwgKGp1c3QgYmVmb3JlIGNhbGxpbmcgUmVs ZWFzZUJ1ZmZlciBhcyBwYXJ0IG9mCm1vdmluZyBvbiB0byB0aGUgc2NhbidzIG5leHQgYmxvY2sp LiAgVGhpcyBmaXhlcyBhIHBlcmZvcm1hbmNlIHByb2JsZW0Kd2hlcmUgdGhlIGNvZGUgcGF0aCBp biBxdWVzdGlvbiB0cmlnZ2VycyBHZXRQcml2YXRlUmVmQ291bnRFbnRyeVNsb3cKY2FsbHMgbW9y ZSBvZnRlbiB0aGFuIG9uZSB3b3VsZCBob3BlLiAgVGhlIHVuZGVybHlpbmcgaXNzdWUgaGFzIGJl ZW4KdGllZCB0byB0aGUgcGluIGluIHRoZSBzbG90IGJlaW5nIGhlbGQsIGV2ZW4gaWYgd2UgZGVj aWRlIHRvIHJlbGVhc2UgdGhlCmJ1ZmZlciBhbmQgbW92ZSBvbjogRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlIHdpbGwgZmlyc3QgZmFpbCB0byBoaXQgdGhlCmJhY2tlbmQtbG9jYWwgY2FjaGUgZm9y IHRoZSByZWxlYXNlIG9mIHRoZSBvbGQgcGluIChiZWNhdXNlIHdlIGp1c3QKcGlubmVkIGFuZCBs b2NrZWQgdGhlIG5ldyBidWZmZXIpLCBjYXVzaW5nIGEgY2FjaGUgbWlzcyBpbnNpZGUKSW5jckJ1 ZmZlclJlZkNvdW50LgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClN1Z2dl c3RlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTog QW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBSDItV3o9RDRMcnU5Qmt2cWFSbkZSUERhWmJmVE9kV2N4dzEzenlHNkdWRlR0 el92d0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICB8ICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyB8IDczICsrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgNzQgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNzk5NzZmNTBm Li45MjgxZDg2NDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEzMSw2ICsxMzEsOSBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tz IChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhz X3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KIAlpbnQJCQl4c192bV9pdGVt czsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKworCS8qIFBs YWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uICovCisJYm9vbAkJeHNf bGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3VycmVudCBiYXRjaD8g Ki8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBs ZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCmluZGV4IDg1NzQ5NzBhZS4uZGNiYzk2MzllIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xMjcsNiArMTI3LDkgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCUFzc2VydCho c2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlcik7CiAJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gMTsKIAorCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBzdGF0ZSAqLworCUFzc2Vy dCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKKwogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4 dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCiAJaWYgKHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCiAJewpAQCAtNDM2 LDYgKzQzOSwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkv KiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCiAJ CWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CiAKKwkJLyoK KwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQgb24gYnkgc2xvdCAo aWYgYW55KSBub3csCisJCSAqIGJlZm9yZSBjYWxsaW5nIFJlbGVhc2VCdWZmZXIuICBUaGlzIGF2 b2lkcyBleHBlbnNpdmUgY2FsbHMgdG8KKwkJICogR2V0UHJpdmF0ZVJlZkNvdW50RW50cnlTbG93 IGNhdXNlZCBieSBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUKKwkJICogZmFpbGluZyB0byBoaXQg dGhlIGJhY2tlbmQncyBjYWNoZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4uCisJCSAq LworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtNDcyLDcg KzQ4MywzMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkqaGVh cF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0 c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJ LyoKKwkJICogSWYgdGhpcyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9j ayB3aXRoaW4gdGhlIGJhdGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0aGUg c2xvdCByYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBwaW4g Y291bnQuICBUaGlzIHNhdmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICogYW5k IFJlbGVhc2VCdWZmZXIgY2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxlYXNl IGl0cworCQkgKiBwaW4gb24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBibG9j ayBhbnl3YXkuCisJCSAqCisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBoZWFwX2NvbnRp bnVlIGlzIGZhbHNlLCBzaW5jZSBvdGhlcndpc2UKKwkJICogdGhlIGNhbGxlciB3aWxsIG5lZWQg eHNfY2J1ZiB0byByZW1haW4gdmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlpZiAo aHNjYW4tPnhzX2xhc3RpbmJsb2NrICYmICEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJ CQkJCQkJCSAgIGhzY2FuLT54c19jYnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwkJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8qCisJ CQkgKiBOb3RlOiB0aGUgcGluIG5vdyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0byBi ZSByZWxlYXNlZAorCQkJICogb24gdGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGljaXQg RXhlY0NsZWFyVHVwbGUuICBUaGlzCisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQn cyBwcml2YXRlIHJlZmNvdW50IGNhY2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhlY1N0 b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJ IGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQogCXsKQEAgLTY1MCwxMCArNjg3LDQyIEBAIGhl YXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAogCiAJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCiAJeworCQlp bnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKwogCQkvKgogCQkgKiBQbGFpbiBpbmRl eCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2NrLiAg V2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGNhbgorCQkgKiB0cmFuc2ZlciBp dHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUgcGlu CisJCSAqIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNl QnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBOb3RlOiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5k ZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNpYmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVk IGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjay4gSXQKKwkJICog ZG9lc24ndCBzZWVtIHdvcnRoIHRoZSB0cm91YmxlIG9mIHJlYXNvbmluZyBhYm91dCB0aGVzZSBp c3N1ZXMsCisJCSAqIHNpbmNlIHRoZSBvcHRpbWl6YXRpb24gb25seSBoZWxwcyB3aGVuIGhlYXAg ZmV0Y2hlcyBhcmUgcmVxdWlyZWQuCisJCSAqCisJCSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBk b24ndCBjb25zaWRlciB0aGUgYmF0Y2ggYWZ0ZXIgc2NhbkJhdGNoLAorCQkgKiBiZWNhdXNlIGRv aW5nIHNvIHdvdWxkIGFkZCBjb21wbGV4aXR5IGZvciBsaXR0bGUgYmVuZWZpdC4gIEl0J3MKKwkJ ICogb2theSBpZiB4c19sYXN0aW5ibG9jayBpcyBzcHVyaW91c2x5IHNldCB0byBmYWxzZS4KIAkJ ICovCiAJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsg MTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNoLT5sYXN0SXRlbSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gLSAxOworCQkJaGFzTmV4 dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7CisJCX0KKworCQloc2Nhbi0+ eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCiAJCXJldHVybiAmc2Nhbi0+eHNf aGVhcHRpZDsKIAl9CiAKQEAgLTY2Miw3ICs3MzEsNyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3Nj YW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwK IAkgKgogCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGNhbGxlciBhbHNvIG5lZWRzLgogCSAq LwotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0 dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1 cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKIAkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1z W3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKIAotLSAKMi41My4wCgo= --0000000000000ad6a20652d164ac Content-Type: application/octet-stream; name="v25-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v25-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpofqslu7 RnJvbSBkN2E5Mjc4M2MxNWUyOTQ2OTg3NTk4ZmUwNDlkMDY1NmMzMzMzMjU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNSAyLzhdIEFk ZCBhbWdldGJhdGNoIGludGVyZmFjZSBhbmQgYWRvcHQgaXQgaW4gbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBpbmRleAplbnRyaWVzIGluIGJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0 Y2hpbmcgaXRlbXMgZnJvbSBhbiBpbmRleCBwYWdlLApyYXRoZXIgdGhhbiBvbmUgbWF0Y2ggYXQg YSB0aW1lLiAgQWxzbyBzd2l0Y2ggbmJ0cmVlIG92ZXIgZnJvbQphbWdldHR1cGxlIHRvIHRoZSBu ZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpUaGUgbmV3IGludGVyZmFjZSBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIGFwcGx5IGtub3dsZWRnZSBvZiB3aGljaCBUSURzCndpbGwgYmUgcmV0dXJuZWQg dG8gdGhlIHNjYW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucwps aWtlIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIGlzIHNldCB0byBiZSBhZGRlZCBieSBh biB1cGNvbWluZyBjb21taXQuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZlbCBwb2xpY3kg ZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZlciBwaW4gaXMg ZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5zIHdpdGggYW4g TVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50cyBUSUQKcmVj eWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBpcyByZXRhaW5l ZCBmb3IgcGxhaW4gbm9uLU1WQ0Mgc2NhbnMKYW5kIGZvciBpbmRleC1vbmx5IHNjYW5zLCBhbmQg aXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwphcmUg dXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhleSBy ZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFj ayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIGRy b3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVyIHNv IHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVzIG11 c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBob3cg aW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZykuICBT Y2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBwcm92 aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVlCmRy b3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYWQgbm8gd2F5IG9mIGRvaW5nIHRoaXMgc2FmZWx5 IGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBob3cgYW1nZXR0dXBsZSB3b3JrcywgYW5k IG9ubHkgZ2FpbmVkIHN1cHBvcnQKZm9yIHNjYW5zIG9mIHVubG9nZ2VkIHJlbGF0aW9ucyBpbiBy ZWNlbnQgY29tbWl0IDhhODc5MTE5KS4KClRoZSBvbGQgYW1tYXJrcG9zIGFuZCBhbXJlc3RycG9z IGluZGV4IEFNIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC4gIFdpdGgKYW1nZXRiYXRjaCwgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLAp3aXRo IGhlbHAgZnJvbSBpbmRleGJhdGNoLmMgdXRpbGl0eSBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGJl aW5nCmRlbGVnYXRlZCB0byB0aGUgaW5kZXggQU0uICBBbGwgYW1nZXRiYXRjaC1jYXBhYmxlIGlu ZGV4IEFNcyBpbmhlcmVudGx5CnN1cHBvcnQgbWFyay9yZXN0b3JlIHdpdGhvdXQgbmVlZGluZyB0 byBpbXBsZW1lbnQgaXQgdGhlbXNlbHZlcy4gIFRhYmxlCkFNcyBtdXN0IHByb3ZpZGUgdGhlIG5l dyBpbmRleF9mZXRjaF9tYXJrcG9zIGFuZCBpbmRleF9mZXRjaF9yZXN0cnBvcwpjYWxsYmFja3Mg dG8gbWFrZSBhbGwgdGhpcyB3b3JrLgoKQW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQg aW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFkCnN0cmVhbSB0byByZWFkIGhlYXAgcGFn ZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJlYW0gaXMgY2FyZWZ1bCB0bwpsaW1pdCBo b3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBydW4gaW50byBwcm9ibGVtcyBkdWUgdG8g aGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAgU2ltcGx5IG5ldmVyIGhvbGRpbmcgb24g dG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRoZXJlJ3Mgbm8gcmlzayBvZiB1bmludGVu ZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBhbmQKaW5kZXggQU0uICBU aGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5vdCBzdXBwb3J0IHByZWZldGNoaW5nCmR1 cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LCB3aGljaCBzZWVtcyBxdWl0 ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBhbSBkb2Vzbid0IGRyb3AgZWFjaCBiYXRj aCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBkZWVtZWQKbmVjZXNzYXJ5IHRvIGF2b2lk IHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRoIGEgTElNSVQsIGluCnBhcnRpY3VsYXIg d2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0bG9vcCBzZW1pLWpvaW5zOyBlYWdlcmx5 CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIHVwIGZyb250IHJlZ3Jlc3Nl ZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UgZ2l2ZXMgdGFibGUg QU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4gdG8gZHJvcCBpbmRleCBwYWdlIHBpbnMv dW5ndWFyZCBiYXRjaGVzLCBzbyB0aGlzIGNhbiBiZSBjb25zaWRlcmVkCmEgaGVhcGFtIGltcGxl bWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0IG5lZWQgdG8ga25vdyBhYm91dCBpdCku ClRoaXMgc2NoZW1lIGVuYWJsZXMgaW5kZXggcHJlZmV0Y2hpbmcgdG8gYWNxdWlyZSBhbmQgdGhl biBkcm9wIGFueSBleHRyYQpiYXRjaCBpbmRleCBwYWdlIHBpbiB3aXRoaW4gaXRzIHJlYWQgc3Ry ZWFtIGNhbGxiYWNrIC0tIGV2ZW4gd2hlbiBhbgppbmRleC1vbmx5IHNjYW4gKHRoYXQgbXVzdCBw ZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNldmVyYWwKaW5kZXggYmF0Y2hl cyBhdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1YXRlIHByZWZldGNoCmRpc3Rh bmNlLiAgVGhlIHJlYWQgc3RyZWFtIGNhbm5vdCBvYnNlcnZlIGFueSBjaGFuZ2UgaW4gdGhlIGJh Y2tlbmQncwpidWZmZXIgcGluIGxpbWl0LgoKSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBw b3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudAplaXRoZXIgdGhlIGFtZ2V0 YmF0Y2ggaW50ZXJmYWNlIG9yIHRoZSBhbWdldHR1cGxlIGludGVyZmFjZSAobm90IGJvdGgpLgpB biB1cGNvbWluZyBwYXRjaCB3aWxsIGFkZCBzdXBwb3J0IGZvciBhbWdldGJhdGNoIHRvIHRoZSBo YXNoIGluZGV4IEFNLgpCdXQgdGhlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUg dXNlZCBieSB0aGUgR2lTVCBhbmQgU1AtR2lTVAppbmRleCBBTXMgZm9yIG5vdy4gIEJvdGggc2hh cmUgYSBzZXQgb2YgcHJvYmxlbXMgdGhhdCBtYWtlIGl0IHVuY2xlYXIKaG93IHRvIGdvIGFib3V0 IGFkZGluZyBzdXBwb3J0LgoKQm90aCBBTXMgcmVjb25zdHJ1Y3QgaW5kZXggZGF0YSBhcyBIZWFw VHVwbGVzIHZpYSBoZWFwX2Zvcm1fdHVwbGUgZHVyaW5nCmluZGV4LW9ubHkgc2NhbnMsIHBlcmZv cm1pbmcgcmV0YWlsIHBhbGxvYyBhbGxvY2F0aW9ucyB0aGF0IGFyZQppbmNvbXBhdGlibGUgd2l0 aCB0aGUgZmxhdCwgZml4ZWQtc2l6ZSwgcmVjeWNsYWJsZSBwZXItYmF0Y2ggbWVtb3J5Cm1vZGVs IHRoYXQgYW1nZXRiYXRjaCdzIGN1cnJUdXBsZXMgd29ya3NwYWNlIHJlcXVpcmVzLiAgTW9yZW92 ZXIsIGJvdGgKQU1zIGhhdmUga25vd24gYnVncyBpbnZvbHZpbmcgYnVmZmVyIHBpbiBtYW5hZ2Vt ZW50IGR1cmluZyBpbmRleC1vbmx5CnNjYW5zOiB0aGV5IHJlbGVhc2UgaW5kZXggbGVhZiBwYWdl IHBpbnMgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuCmhvbGRpbmcgdGhlbSBhcyBhbiBpbnRlcmxv Y2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLApjcmVhdGluZyBh IHJhY2UgY29uZGl0aW9uIGluIHdoaWNoIFZBQ1VVTSBjYW4gcmVtb3ZlIGEgaGVhcCB0dXBsZSBh bmQKdGhlbiBtYXJrIGl0cyBwYWdlIGFsbC12aXNpYmxlIHdoaWxlIHRoZSBpbmRleC1vbmx5IHNj YW4gc3RpbGwgaG9sZHMgYQpyZWZlcmVuY2UgdG8gdGhlIG5vdy1yZWN5Y2xlZCBUSUQgWzFdLiAg VGhlc2UgaW5kZXggQU1zIGNhbm5vdCBhZG9wdAphbWdldGJhdGNoIHdpdGhvdXQgZmlyc3QgZml4 aW5nIHRoZSBwaW4taGFuZGxpbmcgZGVmaWNpZW5jeSB0aGF0IHRoZXkKYWxyZWFkeSBoYXZlIHVu ZGVyIGFtZ2V0dHVwbGUgKGl0J3Mgbm90IGNsZWFyIGhvdyB0byBmaXggdGhlIHByb2JsZW0Kd2l0 aGluIHRoZSBjb25maW5lcyBvZiB0aGUgY3VycmVudCBhbWdldHR1cGxlIGRlc2lnbiwgbGV0IGFs b25lIGluIGEgd2F5CnRoYXQncyBjb21wYXRpYmxlIHdpdGggYW1nZXRiYXRjaCkuCgpbMV0gaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6JTNEamppTkw5RkNoOEMxTC1HVUgxNWY0V0ZUV3ViMngl MkJfTnVjbmdjRERjSEt3JTQwbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0 b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZp ZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTog VGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnBy aXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZWZhYzMyMzgtNmYzNC00 MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5k ZXhiYXRjaC5oICAgICAgICAgICAgICAgfCAyMzUgKysrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAxOTAgKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDM2MyArKysrKysrKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA5MyArKy0KIHNyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA1MzkgKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEyOSArLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8IDc0OSArKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgICAgICAgICAgfCAgNzQgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAxMyArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgICAgIHwgMjA3ICsrKy0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAgICAgfCA0NjkgKysrKysr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8IDU2 NiArKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAg ICAgICAgfCAyNDUgLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAg ICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyAg ICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAg ICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAg ICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAgICAg ICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAg ICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jICAgICAgICAg IHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAg fCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8 ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwg ICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAgICAgICAgICAgfCAg IDggKy0KIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgICB8ICAg MiArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICA2 ICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCA1NzAg KysrKysrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAg ICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5j ICAgfCAgIDYgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAg ICB8ICAxMiArLQogNDUgZmlsZXMgY2hhbmdlZCwgMzI0MiBpbnNlcnRpb25zKCspLCAxMzkzIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJh dGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCA3OTI0MDMzMzUuLmNhZGE1NTAyOSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Ft YXBpLmgKQEAgLTE5OSw2ICsxOTksMTkgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKIAorLyogbmV4dCBiYXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhT Y2FuQmF0Y2ggKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qIGRyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg aGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVkFDVVVNIHJlY3ljbGluZyAqLwordHlwZWRlZiB2 b2lkICgqYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogbWFyayBkZWFkIGl0ZW1zIGluIGlu ZGV4IHBhZ2UgKi8KK3R5cGVkZWYgdm9pZCAoKmFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwor CiAvKiBmZXRjaCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRt YXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAg KnRibSk7CkBAIC0yMDYsMTEgKzIxOSw5IEBAIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBl ZGVmIHZvaWQgKCphbWVuZHNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0v KiBtYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9z X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2Nh biBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CisvKiBpbnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBl bmRlbnRseSB0cmFja3Mgc2NhbidzIHBvc2l0aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jl c2V0X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3Ig cGFyYWxsZWwgaW5kZXggc2NhbnMuCkBAIC0zMTAsMTAgKzMyMSwxMiBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEFtUm91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFt cmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBs ZTsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8q IGNhbiBiZSBOVUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7 IC8qIGNhbiBiZSBOVUxMICovCisJYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVt c2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0 bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0J YW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3Ry cG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9m dW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1 bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBh cmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVM TCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCAwNWVlYzkyMDQuLjYxNTY4NmRjMiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKQEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJh Y2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZp bml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0 YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1Nj YW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJh bGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xNjksOCArMTcwLDYgQEAgZXh0ZXJuIHZvaWQgaW5kZXhf cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCSBTY2FuS2V5IGtleXMsIGludCBua2V5 cywKIAkJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lk IGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGluZGV4X21h cmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGluZGV4X3Jlc3RycG9zKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gU2l6ZSBpbmRleF9wYXJhbGxlbHNjYW5fZXN0aW1h dGUoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQlpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVsc2Nh bl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKQEAgLTE4NCw4ICsxODMsNiBAQCBl eHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVh cHJlbCwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJ CSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFn cyk7Ci1leHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBz Y2FuLAotCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiBpbnQ2NCBp bmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAK IGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFj dXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzY2E0MmViOTMuLjc5OTc2ZjUwZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMwLDYgKzEzMCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 RmV0Y2hIZWFwRGF0YQogCiAJLyogRm9yIHZpc2liaWxpdHkgbWFwIGNoZWNrcyAoaW5kZXgtb25s eSBzY2FucyBhbmQgb24tYWNjZXNzIHBydW5pbmcpICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsJ LyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCisJaW50CQkJeHNfdm1faXRlbXM7CS8qICMgaXRl bXMgdG8gcmVzb2x2ZSB2aXNpYmlsaXR5IGluZm8gZm9yICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0 YTsKIAogLyogUmVzdWx0IGNvZGVzIGZvciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KQEAg LTQzNCw4ICs0MzUsMTMgQEAgZXh0ZXJuIGJvb2wgaGVhcGFtX2ZldGNoX3RpZChSZWxhdGlvbiBy ZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJIFR1cGxlVGFi bGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCk7CiBleHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0 YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CQkJCQkgdWludDMyIGZsYWdzKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9iYXRj aF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJh dGNoLAorCQkJCQkJCQkJCSAgYm9vbCBuZXdfYWxsb2MpOwogZXh0ZXJuIHZvaWQgaGVhcGFtX2lu ZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaGVh cGFtX2luZGV4X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gYm9v bCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRp b24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIsIFNuYXBzaG90IHNuYXBzaG90LCBIZWFwVHVw bGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxs KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMC4uZGYwYmU4YzlmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2lu ZGV4YmF0Y2guaApAQCAtMCwwICsxLDIzNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog aW5kZXhiYXRjaC5oCisgKgkgIEJhdGNoLWJhc2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUg Zm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KKyAqCisgKiBQcm92aWRlcyBmdW5jdGlvbnMg dXNlZCBieSB0YWJsZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4ncyBwb3NpdGlvbmFsCisg KiBzdGF0ZSAoc3RvcmVkIGluIEluZGV4U2NhbkRlc2MuYmF0Y2hyaW5nYnVmKSwgYW5kIHRvIG1h bmFnZSB1bmRlcmx5aW5nCisgKiByZXNvdXJjZXMgc3VjaCBhcyBtZW1vcnkgYW5kIGJ1ZmZlciBw aW5zLiAgQWxzbyBwcm92aWRlcyB2YXJpb3VzIHV0aWxpdHkKKyAqIGZ1bmN0aW9ucyB1c2VkIGJ5 IGluZGV4IEFNcyBmb3IgYmF0Y2ggcmVzb3VyY2UgbWFuYWdlbWVudC4KKyAqCisgKiBUaGlzIG1v ZHVsZSBkb2VzIG5vdCBwcm92aWRlIGVsZW1lbnRhcnkgb3BlcmF0aW9ucyBmb3IgbWFuaXB1bGF0 aW5nIHRoZQorICogc2NhbidzIHJpbmcgYnVmZmVyIChlLmcuLCBmb3IgYXBwZW5kaW5nIGEgYmF0 Y2gpLiAgVGhvc2UgYXJlIGltcGxlbWVudGVkIGFzCisgKiBpbmxpbmUgZnVuY3Rpb25zIGRlZmlu ZWQgYmVzaWRlIEluZGV4U2NhbkRlc2MgYW5kIEluZGV4U2NhbkJhdGNoLgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhi YXRjaC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgSU5ERVhCQVRDSF9I CisjZGVmaW5lIElOREVYQkFUQ0hfSAorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5j bHVkZSAiYWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNs dWRlICJzdG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBVdGlsaXRpZXMgY2FsbGVkIGJ5IHRhYmxlIEFNcworICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBTZXRzIHVwIHRoZSBiYXRjaCByaW5nIGJ1ZmZl ciBzdHJ1Y3R1cmUgZm9yIHVzZSBieSBhbiBpbmRleCBzY2FuLgorICoKKyAqIENhbGxlZCBmcm9t IHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfYmVnaW4gY2FsbGJhY2sgZHVyaW5nIGFtZ2V0YmF0Y2gg c2NhbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9p bml0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2Nh blBvcy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0g ZmFsc2U7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5i YXRjaHJpbmdidWYuaGVhZEJhdGNoID0gMDsKKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNo ID0gMDsKKworCXNjYW4tPnVzZWJhdGNocmluZyA9IHRydWU7Cit9CisKK2V4dGVybiB2b2lkIHRh YmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNj YW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVz dG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9z Y2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJs ZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIEZldGNo IHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhlIGZp cnN0KS4KKyAqCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNzZWQg dG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKKyAqIG1hdGNoaW5nIGl0ZW1zIGluIHRo ZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCisgKiBwcmlvckJh dGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICoKKyAqIFJldHVybnMg dGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0aGUgZ2l2ZW4gc2Nh bgorICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBp biB0aGF0IGRpcmVjdGlvbi4KKyAqCisgKiBUaGlzIGlzIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVu ZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAorICogZnJlZSBhbnkgYmF0 Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2FsbGVyLiAgVGhlIGNh bGxlcgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHBvc2l0aW9u LgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuQmF0Y2gK K3RhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBC YXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOwor CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwlBc3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwor CWlmICghcHJpb3JCYXRjaCkKKwl7CisJCS8qIEZpcnN0IGNhbGwgZm9yIHRoZSBzY2FuICovCisJ CUFzc2VydChwb3MgPT0gJmJhdGNocmluZ2J1Zi0+c2NhblBvcyk7CisJfQorCWVsc2UgaWYgKHVu bGlrZWx5KHByaW9yQmF0Y2gtPmRpciAhPSBkaXJlY3Rpb24pKQorCXsKKwkJLyoKKwkJICogV2Ug ZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24gYWNyb3NzIGJhdGNoZXMuICBQcmVw YXJlCisJCSAqIHNjYW4ncyBiYXRjaHJpbmdidWYgc3RhdGUgZm9yIHVzIHRvIGdldCB0aGUgbmV4 dCBiYXRjaCBmb3IgdGhlCisJCSAqIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRoZSBvbmUg dXNlZCB3aGVuIHByaW9yQmF0Y2ggd2FzCisJCSAqIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisJ CSAqLworCQl0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZShzY2FuKTsKKworCQkvKiBw cmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJhdGNoICovCisJCUFzc2VydChw b3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQXNzZXJ0KGluZGV4X3Nj YW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2UgaWYgKGluZGV4X3NjYW5fYmF0 Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qIE5leHQgYmF0Y2ggYWxy ZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBw b3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24p OworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmZp cnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlyZXR1cm4gYmF0Y2g7CisJfQorCisJLyoK KwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBmb3IgY2FsbGluZyBhbWdldGJhdGNoLgorCSAqCisJ ICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJlIGZvciB0aGUgbGFzdCB2YWxpZCBiYXRjaCBjdXJy ZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZmZXIgKGJhdGNoZXMgbXVzdCBzdGF5IGluIHNjYW4g b3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBzaG91bGQKKwkgKiBoYXZlIGFscmVhZHkgcmV0 dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQgYmF0Y2ggZWFybGllci4KKwkgKi8KKwlBc3NlcnQo IWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CisJQXNzZXJ0KCFwcmlvckJhdGNoIHx8CisJ CSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMCAmJiBwcmlvckJhdGNoLT5kaXIg PT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+ bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRjaCkpOworCisJLyoKKwkgKiBCZWZvcmUgd2UgY2Fs bCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBpZiBwcmlvckJhdGNoIGlzIGFscmVhZHkga25vd24K KwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1zIGluIHRoaXMgc2Nh biBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJpb3JCYXRjaCAmJgorCQkoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pID8KKwkJIHByaW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCA6CisJ CSBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXRj aCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIHByaW9y QmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCkKKwl7CisJCS8q IFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgaW5kZXggQU0gKi8KKwkJQXNzZXJ0KGJhdGNoLT5k aXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxh c3RJdGVtKTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93 cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2Nh biwgYmF0Y2gpOworCisJCS8qCisJCSAqIFRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIHNldCBrbm93 bkVuZEZvcndhcmQva25vd25FbmRCYWNrd2FyZCB0bworCQkgKiBmYWxzZSAod2hpY2hldmVyIGlz IHVzZWQgd2hlbiBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbikKKwkJICogd2hlbiB0 aGlzIGlzIHRoZSBzY2FuJ3MgZmlyc3QgcmV0dXJuZWQgYmF0Y2guICBXZSBkb24ndCBib3RoZXIK KwkJICogYmVjYXVzZSB0aGUgaW5kZXggQU0gc2hvdWxkIGFsd2F5cyByZWNvcmQgdGhhdCBmYWN0 IGluIGl0cyBvd24KKwkJICogb3BhcXVlIGFyZWEuICAoVGhlc2UgZmllbGRzIG9ubHkgZXhpc3Qg YmVjYXVzZSB3ZSBkb24ndCB3YW50IGluZGV4CisJCSAqIEFNcyBzZXR0aW5nIF9hbnlfIGZpZWxk IGZyb20gYW55IHByaW9yYmF0Y2ggdGhhdCB3ZSBwYXNzIHRvIHRoZW0uCisJCSAqIEJlc2lkZXMs IGl0IHdvdWxkIGJlIGN1bWJlcnNvbWUgZm9yIGluZGV4IEFNcyB0byBrZWVwIHRyYWNrIG9mCisJ CSAqIHdoaWNoIGJhdGNoIGlzIHRoZSBjdXJyZW50IGFtZ2V0YmF0Y2ggY2FsbCdzIG9yaWdpbmFs IHByaW9yYmF0Y2guKQorCQkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiYXRjaCByZXR1 cm5lZCBOVUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJCQkvKgorCQkJICogVGhlcmUg YXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudCBzY2FuCisJ CQkgKiBkaXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAgUmVtZW1iZXIgdGhhdCBwcmlv ckJhdGNoIGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1zLgorCQkJ ICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCXByaW9y QmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9IHRydWU7CisJCQllbHNlCisJCQkJcHJpb3JCYXRjaC0+ a25vd25FbmRCYWNrd2FyZCA9IHRydWU7CisJCX0KKwl9CisKKwkvKiB4c19oaXR1cCBpc24ndCBj dXJyZW50bHkgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNjYW4t PnhzX2hpdHVwKTsKKworCXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIEZldGNoIHRoZSBuZXh0 IG1hdGNoaW5nIFRJRCBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCisgKgorICogVGhpcyBp cyB0aGUgYW1nZXR0dXBsZSBlcXVpdmFsZW50IG9mIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2Jh dGNoLgorICoKKyAqIFRoZXJlIGlzIG5vIGJhdGNoLWxpa2Ugc3RhdGUgZm9yIHVzIHRvIG1hbmFn ZSAodHlwaWNhbGx5IHRoYXQncyB1cCB0byB0aGUKKyAqIGluZGV4IEFNIHdoZW4gaXQgaW1wbGVt ZW50cyBhbWdldHR1cGxlKS4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IEl0ZW1Qb2ludGVyCit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlib29sCQlmb3VuZDsKKwor CUFzc2VydCghc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCWZvdW5kID0gc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUoc2NhbiwgZGlyZWN0aW9uKTsKKworCS8qIFJlc2V0 IGtpbGwgZmxhZyBpbW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCisJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGZhbHNlOworCUFzc2VydCghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSk7CisKKwkvKiBJ ZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCWlmICghZm91bmQp CisJCXJldHVybiBOVUxMOworCisJLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZv dW5kICovCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBVdGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBi dWYpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGls aXR5IG1hY3JvIGZvciBhY2Nlc3NpbmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBk YXRhLgorICoKKyAqIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9w YXF1ZSBhcmVhIGF0IGEgZml4ZWQgbmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNj YW5CYXRjaCBwb2ludGVyIChzZWUgaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKS4KKyAqIFRoaXMg bWFjcm8gcmV0dXJucyBhIHR5cGVkIHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhh dCBldmVyeWJvZHkKKyAqIGhhcyB0aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBB TSBvcGFxdWUgYXJlYSBpcyBpbiBwYXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9i YXRjaF9nZXRfYW1kYXRhKHNjYW4sIGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2Fu KS0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwK KwkgKCh0eXBlICopICgoY2hhciAqKSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkp KQorCisjZW5kaWYJCQkJCQkJLyogSU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXgg MzA5N2U5YmIxLi5lZjkzODJmNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRy ZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAK ICNkZWZpbmUgTkJUUkVFX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRl ICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDEx MiArOTI1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVm IEJUVmFjdXVtUG9zdGluZ0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9w YXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNj YW4uCi0gKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRf cHJlcHJvY2Vzc19rZXlzKCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwg aW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBh bmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVz ZQotICogQlRTY2FuUG9zRGF0YSB0byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNo IG9mIGN1cnJlbnQgYW5kIG1hcmtlZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2Fu IHJlbWVtYmVyIHNvbWUga25vd24ta2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBi ZSBtYXJrZWQgYmVmb3JlIHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAq IEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sg dGhlIHBhZ2UsIGlkZW50aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdl IGFuZCBzYXZlIHRoZW0gaW4gQlRTY2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVh ZC1sb2NrIHdoaWxlIHJldHVybmluZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHBy b2Nlc3NpbmcuICBUaGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAg V2UgbXVzdCBhbHdheXMKLSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxs ZXIgdG8gcHJvY2VzcyB0aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBj YW4gYWxzbyByZWxlYXNlIHRoZSBwaW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAq IFdlIGRyb3AgdGhlIHBpbiAod2hlbiBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJv Z3Jlc3MgYnkgVkFDVVVNCi0gKiAoc2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtp bmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVh c2UgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQot ICogbW92aW5nIG9uIHRvIGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVh Y2gKLSAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZz ZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJy YXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRo aW4gdGhhdCBhcnJheS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUg b25jZSwKLSAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBU SUQgaW4gdGhlIHBvc3RpbmcgbGlzdAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qg QlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsK LQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVt ICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24g d2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxl J3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5 cGVkZWYgc3RydWN0IEJUU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFn ZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMg b2YgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051 bWJlciBjdXJyUGFnZTsJCS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJs b2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051 bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJ bHNuOwkJCS8qIGN1cnJQYWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2Nh biBkaXJlY3Rpb24gZm9yIHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdl ICovCi0JU2NhbkRpcmVjdGlvbiBkaXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBp bmRleC1vbmx5IHNjYW4sIG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxv Y2F0aW9uIGluIHRoZSBhc3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwot CWludAkJCW5leHRUdXBsZU9mZnNldDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdo dCB0cmFjayB3aGV0aGVyIHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4 IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3Bl Y3RpdmVseS4KLQkgKi8KLQlib29sCQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkv KgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAo aWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJk cyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwg c28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVu Y2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRy eSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5 IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkv KiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBs YXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJy ZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1Bl ckJUcmVlUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBl ZGVmIEJUU2NhblBvc0RhdGEgKkJUU2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5l ZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5w b3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBc Ci0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsg XAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVm aW5lIEJUU2NhblBvc1VucGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRT Y2FuUG9zSXNQaW5uZWQoc2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBc Ci0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSgg XAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8 IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklz VmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRh dGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsg XAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxl ICgwKQotCiAvKiBXZSBuZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNL X1NFQVJDSEFSUkFZIHNjYW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwog ewpAQCAtMTA1MCw2ICs5NDUsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlT Y2FuS2V5CQloaWdoX2NvbXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwog fSBCVEFycmF5S2V5SW5mbzsKIAorLyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRy ZWUgaW5kZXggQU0gKi8KK3R5cGVkZWYgc3RydWN0IEJUQmF0Y2hEYXRhCit7CisJQnVmZmVyCQli dWY7CQkJLyogbGVhZiBwYWdlJ3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdl OwkJLyogbGVhZiBwYWdlJ3MgYmxvY2sgbnVtYmVyICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7 CQkvKiBsZWFmIHBhZ2UncyBsZWZ0IHNpYmxpbmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGxlYWYgcGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1v cmUgcGFnZXMgb2YgaW50ZXJlc3QgdG8gdGhlIGxlZnQ/ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJ LyogbW9yZSBwYWdlcyBvZiBpbnRlcmVzdCB0byB0aGUgcmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRh OworCisvKiBBY2Nlc3MgdGhlIGJ0cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJ bmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJh dGNoKSBcCisJaW5kZXhhbV91dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0 Y2hEYXRhKQorCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBz dGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJv Y2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFp bHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBj dXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nh biB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZSwKKyAqIGJ0 cG9zcmVzZXQsIGFuZCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IHRyYWNr IGFueXRoaW5nIGFib3V0CisgKiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uL2JhdGNoIGluIHRo aXMgb3BhcXVlIHN0cnVjdC4KKyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRp bWUsIGFzIHJlcXVpcmVkIGJ5IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFu ZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24g dGhlIHBhZ2UKKyAqIGFuZCByZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4g IFdlIHRoZW4gcmVsZWFzZSB0aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxp dHkgcm91dGluZXMuICBUaGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJh ZmZpYy4gIF9idF9uZXh0IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBoYXMgYSBCVEJhdGNo RGF0YSBhcmVhIHRoYXQKKyAqIHRlbGxzIHVzIHdoaWNoIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRv IGJlIHJlYWQgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uCisgKiAodGhpcyBpcyBvZnRlbiB0 aGUgc2FtZSBwcmlvcmJhdGNoIHBhc3NlZCB0byBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisg KgorICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50 aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkg aXRzIHRhYmxlIFRJRCBhbmQgb2Zmc2V0LiAgUG9zdGluZyBsaXN0IHR1cGxlcworICogc3RvcmUg YSAiYmFzZSIgdHVwbGUgb25jZSwgYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHVzZWQgZm9y IGVhY2ggVElEIGluCisgKiB0aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBC VFNjYW5PcGFxdWVEYXRhCiB7CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXBy b2Nlc3Nfa2V5cygpOiAqLwpAQCAtMTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRT Y2FuT3BhcXVlRGF0YQogCUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQg ZWFjaCBlcXVhbGl0eS10eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7 CQkvKiBPUkRFUiBwcm9jcyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNv bnRleHQgYXJyYXlDb250ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRh dGEgKi8KLQotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMg aXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJy UG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJ LyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJ LyogZHJvcCBsZWFmIHBpbiBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkg KiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxl IHN0b3JhZ2UKLQkgKiB3b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNw ZWN0aXZlbHkuICBFYWNoIGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFz IG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAq Y3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICpt YXJrVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJ ZiB0aGUgbWFya2VkIHBvc2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3Np dGlvbiwgd2UKLQkgKiBkb24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2Vk IGl0ZW1JbmRleCBpbiBtYXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9z IGlzIHZhbGlkIGZvciB0aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWlu ZSBpZiB0aGVyZSBpcyBhIG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBh dAotCSAqIG1hcmtQb3MuCi0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4 LCBvciAtMSBpZiBub3QgdmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3Qg Zm9yIGVmZmljaWVuY3kgKi8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBv c2l0aW9uIGRhdGEgKi8KLQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRp b24sIGlmIGFueSAqLwogfSBCVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1 ZURhdGEgKkJUU2Nhbk9wYXF1ZTsKQEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wg YnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRl cm4gSW5kZXhTY2FuRGVzYyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50 IG5vcmRlcmJ5cyk7CiBleHRlcm4gU2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9u IHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFs bGVsc2Nhbih2b2lkICp0YXJnZXQpOwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gsCisJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRi aXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBi dHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5 cywKIAkJCQkJIFNjYW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQg YnR1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CitleHRlcm4gdm9pZCBidGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1l eHRlcm4gdm9pZCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0 cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJ CQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhC dWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4g dm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJv dG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJ CQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJ CQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9v bCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2Fy cmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90 cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJU U3RhY2sgX2J0X3NlYXJjaChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbklu c2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5z dGFjayk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiBy ZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJl KFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIg b2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRj aCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJ CSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2Vu ZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8q CiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4g QlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXAp OwotZXh0ZXJuIHZvaWQgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJu IEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5 Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2Vu ZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGQ5MTE1ZmNjMi4u YzZlNzY3NWQyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTEzMiw2ICsxMzIsMTIgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXI7CiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEK IHsKKwkvKiBUYWJsZSBBTSBmaXhlZC1zaXplIG9wYXF1ZSBhcmVhIHNpemUsIHNldCBieSBBTSAo TUFYQUxJR04nZCkgKi8KKwl1aW50MTYJCWJhdGNoX29wYXF1ZV9zaXplOworCisJLyogUGVyLWl0 ZW0gdHJhaWxpbmcgZGF0YSBzaXplIGluIGVhY2ggYmF0Y2ggKGZvciBpbmRleC1vbmx5IHNjYW5z KSAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0ZW1fc2l6ZTsKKwogCS8qCiAJICogQml0bWFzayBv ZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhlIHJlbGF0aW9uLiBObyBTT19JTlRFUk5BTF9GTEFH UyBhcmUKIAkgKiBwZXJtaXR0ZWQuCkBAIC0xMzksMTMgKzE0NSwxODQgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCXVpbnQzMgkJZmxhZ3M7CiB9IEluZGV4RmV0Y2hUYWJs ZURhdGE7CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHdpdGhpbiB0 aGUgc2NhbidzIHJpbmcgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0l0ZW1Q b3MKK3sKKwkvKiBQb3NpdGlvbiByZWZlcmVuY2VzIGEgdmFsaWQgSW5kZXhTY2FuRGVzY0RhdGEu YmF0Y2hidWZbXSBlbnRyeT8gKi8KKwlib29sCQl2YWxpZDsKKworCS8qIEluZGV4U2NhbkRlc2NE YXRhLmJhdGNoYnVmW10td2lzZSBpbmRleCB0byByZWxldmFudCBJbmRleFNjYW5CYXRjaCAqLwor CXVpbnQ4CQliYXRjaDsKKworCS8qIEluZGV4U2NhbkJhdGNoLml0ZW1zW10td2lzZSBpbmRleCB0 byByZWxldmFudCBCYXRjaE1hdGNoaW5nSXRlbSAqLworCWludAkJCWl0ZW07CisKK30gQmF0Y2hS aW5nSXRlbVBvczsKKworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRj aCAoaW4gcmV0dXJuZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4g IFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxl LgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVy RGF0YSB0YWJsZVRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgdGFibGUgaXRlbSAqLworCU9mZnNl dE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdl ICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogaW5kZXggdHVwbGUncyBjdXJyVHVw bGVzIG9mZnNldCwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0 YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFt Z2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBFYWNoIGJhdGNoIGFsbG9j YXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgbWVtb3J5IGxheW91dDoKKyAqCisgKiAgIFt0YWJsZSBB TSBvcGFxdWUgYXJlYV0gICAgPC0gYWxsb2NhdGlvbiBiYXNlLCBhdCAtKGJhdGNoX2Jhc2Vfb2Zm c2V0KQorICogICBbaW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hfaW5kZXhf b3BhcXVlX3NpemUpCisgKiAgIFtJbmRleFNjYW5CYXRjaERhdGFdICAgICAgPC0gYmF0Y2ggcG9p bnRlciwgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaAorICogICBbaXRlbXNbbWF4aXRlbXNiYXRjaF1d CisgKiAgIFt0YWJsZSBBTSB0cmFpbGluZyBkYXRhXSAgPC0gcGVyLWl0ZW0gYXJlYSAoZS5nLiwg Zm9yIHZpc2liaWxpdHkgaW5mbykKKyAqICAgW2N1cnJUdXBsZXMgd29ya3NwYWNlXSAgICA8LSBp bmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGhlcmUgZm9yCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXgtb25seSBzY2FucyAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkK KyAqCisgKiBiYXRjaF9iYXNlX29mZnNldCBjb21iaW5lcyBib3RoIEFNIG9wYXF1ZSBzaXplcyBp bnRvIGEgc2luZ2xlIG9mZnNldCBmcm9tCisgKiB0aGUgYmF0Y2ggcG9pbnRlciB0byB0aGUgdHJ1 ZSBhbGxvY2F0aW9uIGJhc2UuICBUaGUgaW5kZXhiYXRjaC5jIHV0aWxpdGllcworICogcGZyZWUg YSBiYXRjaCBieSBwYXNzaW5nIHBmcmVlIGEgcG9pbnRlciByZXR1cm5lZCBieSBpbmRleF9zY2Fu X2JhdGNoX2Jhc2UuCisgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYmF0Y2hlcyBo YXZlIGEgZml4ZWQgbGF5b3V0IGZvciB0aGUgZHVyYXRpb24KKyAqIG9mIGFuIGluZGV4IHNjYW4g KGJhdGNoZXMgYXJlIGNhY2hlZCBmb3IgcmV1c2UgdG8gYXZvaWQgcGFsbG9jIGNodXJuKS4KKyAq CisgKiBUaGUgdGFibGUgQU0gY2FuIG92ZXJsYXkgYSBzbWFsbCBmaXhlZC1zaXplIHN0cnVjdCBh dCB0aGUgc3RhcnQgb2YgdGhlCisgKiBhbGxvY2F0ZWQgc3BhY2UsIHdoaWNoIGl0IGFjY2Vzc2Vz IHVzaW5nIGEgaW5kZXhfc2Nhbl9iYXRjaF9iYXNlIHNoaW0KKyAqIGFjY2Vzc29yIGZ1bmN0aW9u LiAgQ29udmVudGlvbiBmb3IgdGFibGUgQU1zIGlzIHRvIHN0b3JlIGEgcG9pbnRlciB0byBpdHMK KyAqIHBlci1pdGVtIGFyZWEgaW4gdGhpcyBmaXhlZC1zaXplIGFyZWEgKGUuZy4sIGhlYXBhbSBz dG9yZXMgYSB2aXNJbmZvCisgKiBwb2ludGVyIGhlcmUpLCBpbiBhZGRpdGlvbiB0byBvdGhlciBp bmZvcm1hdGlvbiB0cmFja2VkIGF0IHRoZSBiYXRjaCBsZXZlbC4KKyAqCisgKiBUaGUgaW5kZXgg QU0gb3BhcXVlIGFyZWEgaXMgYWNjZXNzZWQgdmlhIGEgY3VzdG9tIGFjY2Vzc29yIHRoYXQgdXNl cyBhCisgKiBmaXhlZCBjb21waWxlLXRpbWUgY29uc3RhbnQgb2Zmc2V0IGZvciBlZmZpY2llbmN5 IChhIGNvbnN0YW50IHRoYXQgaXMKKyAqIHRyYWNrZWQgaW4gdGhlIHNjYW4gZGVzY3JpcHRvciBh cyBiYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkJhdGNoRGF0YQoreworCS8qIEluZGV4IHBhZ2UncyBMU04sIG9wdGlvbmFsbHkgdXNlZCBieSBh bWtpbGxpdGVtc2JhdGNoIHJvdXRpbmVzICovCisJWExvZ1JlY1B0cglsc247CisKKwkvKiBzY2Fu IGRpcmVjdGlvbiB3aGVuIHRoZSBpbmRleCBwYWdlIHdhcyByZWFkICovCisJU2NhbkRpcmVjdGlv biBkaXI7CisKKwkvKgorCSAqIGtub3duRW5kQmFja3dhcmQgYW5kIGtub3duRW5kRm9yd2FyZCBp bmRpY2F0ZSB0aGF0IHRoaXMgYmF0Y2ggaXMgdGhlCisJICogbGFzdCBvbmUgd2l0aCBtYXRjaGlu ZyBpdGVtcyBpbiB0aGUgcmVsZXZhbnQgc2NhbiBkaXJlY3Rpb24uICBXaGVuCisJICogYW1nZXRi YXRjaCByZXR1cm5zIE5VTEwgZm9yIGEgZ2l2ZW4gZGlyZWN0aW9uLCB0aGUgY29ycmVzcG9uZGlu ZyBmbGFnCisJICogaXMgc2V0IG9uIHRoZSBwcmlvcmJhdGNoIHRoYXQgd2FzIHBhc3NlZCB0byB0 aGF0IGNhbGwuICBXZSBjYW5ub3Qga25vdworCSAqIHRoaXMgd2hlbiBhIGJhdGNoIGlzIGZpcnN0 IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2g7IGl0IG9ubHkgYmVjb21lcworCSAqIGFwcGFyZW50IHdo ZW4gd2UgdHJ5IGFuZCBmYWlsIHRvIGNvbnRpbnVlIHRoZSBzY2FuIHBhc3QgaXQuCisJICoKKwkg KiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50IGFtZ2V0YmF0Y2ggY2Fs bHMgd2l0aCB0aGUgc2FtZQorCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4IEFNIG1pZ2h0IG5l ZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRvCisJICogZGV0ZXJtaW5lIHRoZXJl IGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIncyBwcmlvcmJhdGNoLgor CSAqLworCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CisJYm9vbAkJa25vd25FbmRGb3J3YXJkOwor CisJLyoKKwkgKiBCYXRjaCBzdGlsbCBob2xkcyBUSUQgcmVjeWNsaW5nIGludGVybG9jaz8KKwkg Ki8KKwlib29sCQlpc0d1YXJkZWQ7CisKKwkvKgorCSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZv ciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0YWJsZSBBTS4KKwkgKgorCSAq IFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGJ5 IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBp dCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkgKiB0byBmaWxsIHRoZSBhcnJheSBiYWNr LXRvLWZyb250LCBzdGFydGluZyBhdCB0aGUgbGFzdCBpdGVtIHNsb3QgYW5kCisJICogZmlsbGlu ZyBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRy eSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKgorCSAqIE5vdGU6IHRo ZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNvbWV0aW1lcyBjb252ZW5pZW50IHRvIHVzZSAt MSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2YtYm91bmRzIHNwYWNlIGp1c3QgYmVmb3JlIGZp cnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLworCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0 IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFs aWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBhYm91dCBkZWFkIGl0ZW1zLCBpZiBh bnkgKHBhbGxvYydkIHNlcGFyYXRlbHksIE5VTEwgaWYgdW51c2VkKSAqLworCWludAkJCW51bURl YWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLworCWludAkJICAgKmRl YWRJdGVtczsJCS8qIGl0ZW1zW10td2lzZSBpbmRleGVzIG9mIGRlYWQgaXRlbXMgKi8KKworCS8q CisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhpcyBpcyB0aGUgdHVw bGUgc3RvcmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVz IHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICogc2l6ZSBpcyBkZXRl cm1pbmVkIGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkuCisJICoKKwkg KiBjdXJyVHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9uIG9mIHRoaXMgYWxs b2NhdGlvbiwgcGFzdAorCSAqIGl0ZW1zW10gYW5kIGFueSB0YWJsZSBBTSB0cmFpbGluZyBkYXRh LiAgSXQgaXMgTlVMTCBmb3IgcGxhaW4gaW5kZXgKKwkgKiBzY2Fucy4KKwkgKi8KKwljaGFyCSAg ICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0 Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1z ICovCit9IEluZGV4U2NhbkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0 Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1z IHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50 ZXJmYWNlLiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBh bWdldGJhdGNoLgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGFibGUgQU1z IHdpdGggYSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlv biBieSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAq IHRoZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBz ZWUgaW50byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8g cmVvcmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICovCit0eXBlZGVmIHN0 cnVjdCBCYXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNj YW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBvcyBzY2Fu UG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1Bv czsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9zJ3MgYmF0Y2ggKG5v dCBpbiByaW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCisJSW5kZXhT Y2FuQmF0Y2ggbWFya0JhdGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8g dGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJICogc2xvdCBpbiBi YXRjaGJ1ZltdLiAgVGhlIGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRzIEluZGV4U2NhbkJh dGNoCisJICogaXMgaGVhZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSwgc2lu Y2UgdGhlc2UgaW5kZXhlcyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBhcml0aG1ldGljLiAg aGVhZEJhdGNoIG11c3QgYmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhbkJhdGNoIChpLmUu IHRoZSBjdXJyZW50IHNjYW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7CisK KwkvKgorCSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBfZW1wdHlfIHJpbmcg YnVmZmVyIGJhdGNoIHNsb3QgaW4KKwkgKiBiYXRjaGJ1ZltdLiAgQXMgd2l0aCBoZWFkQmF0Y2gs IHRoZSBhY3R1YWwgYmF0Y2hidWZbXSBhcnJheSBwb3NpdGlvbiBpcworCSAqIG5leHRCYXRjaCAm IChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuICBBIG5ldyBiYXRjaCBjYW4gb25seSBiZQor CSAqIGFwcGVuZGVkIHRvIHRoaXMgcG9zaXRpb24vc2xvdCB3aGVuICFpbmRleF9zY2FuX2JhdGNo X2Z1bGwoKS4KKwkgKgorCSAqIE5vdGU6IHRoZSBzY2FuJ3MgbW9zdCByZWNlbnRseSBhcHBlbmRl ZCBiYXRjaCAoaXRzIHRhaWwgYmF0Y2gpIGlzCisJICogYWx3YXlzIGxvY2F0ZWQgYXQgKG5leHRC YXRjaCAtIDEpICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4KKwkgKi8KKwl1aW50OAkJ bmV4dEJhdGNoOworfSBCYXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVt ZW50YXRpb247CiAKIC8qCiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3Ry dWN0dXJlIGZvciBib3RoIGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNl ZCBpbmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCi0gKiBhbWdl dHR1cGxlLWJhc2VkIHNjYW5zLgorICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fucy4gIE90aGVycyBh cmUgb25seSB1c2VkIGluIGFtZ2V0YmF0Y2gtYmFzZWQgc2NhbnMuCisgKgorICogVGhlIHJpbmcg YnVmZmVyIHVzZWQgYnkgYW1nZXRiYXRjaCBzY2FucyBpcyBzdG9yZWQgaGVyZSBhcyBhIGZpeGVk IGFycmF5IG9mCisgKiBwb2ludGVycyB0byBiYXRjaGVzLiAgV2UgbmVlZCBhIG1pbmltdW0gb2Yg dHdvIHJpbmcgYnVmZmVyIGJhdGNoZXMgKGJ1dCB1c2UKKyAqIElOREVYX1NDQU5fTUFYX0JBVENI RVMpLCBzaW5jZSB0YWJsZSBBTXMgb25seSByZW1vdmUgYSBiYXRjaCBhZnRlciB0aGV5J3ZlCisg KiBhbHJlYWR5IGNhbGxlZCBhbWdldGJhdGNoIGFnYWluIGFuZCBhcHBlbmRlZCB0aGUgcmV0dXJu ZWQgYmF0Y2guCiAgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKyNkZWZp bmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJNjQKKworU3RhdGljQXNzZXJ0RGVjbChJTkRFWF9T Q0FOX01BWF9CQVRDSEVTIDw9IFBHX0lOVDhfTUFYICsgMSwKKwkJCQkgImluZGV4X3NjYW5fYmF0 Y2hfbG9hZGVkIHJlbGllcyBvbiBpbnQ4IHJpbmcgYnVmZmVyIGFyaXRobWV0aWMiKTsKK1N0YXRp Y0Fzc2VydERlY2woKElOREVYX1NDQU5fTUFYX0JBVENIRVMgJiAoSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUyAtIDEpKSA9PSAwLAorCQkJCSAiSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBtdXN0IGJlIGEg cG93ZXIgb2YgMiIpOworCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogewogCS8q IHNjYW4gcGFyYW1ldGVycyAqLwpAQCAtMTU2LDYgKzMzMywyNiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleFNjYW5EZXNjRGF0YQogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBv cmRlcmluZyBvcGVyYXRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFy cmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0 YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisK KwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9w YXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKworCS8qIHNjYW4ncyBh bWdldGJhdGNoIHN0YXRlIChvbmx5IHVzZWQgYnkgYW1nZXRiYXRjaC91c2ViYXRjaHJpbmcgc2Nh bnMpICovCisJQmF0Y2hSaW5nQnVmZmVyIGJhdGNocmluZ2J1ZjsKKworCS8qCisJICogQXJyYXkg b2YgcG9pbnRlcnMgdG8gcmVjeWNsYWJsZSBiYXRjaGVzLCB1c2VkIGJ5IGFsbCBhbWdldGJhdGNo IHNjYW5zCisJICogYW5kIGJ5IGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQg c3VwcG9ydHMgYW1nZXRiYXRjaAorCSAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoY2FjaGVbSU5E RVhfU0NBTl9DQUNIRV9CQVRDSEVTXTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGJhdGNo ZXMsIHJlZmVyZW5jZWQgd2l0aGluIGJhdGNocmluZ2J1ZiAqLworCUluZGV4U2NhbkJhdGNoIGJh dGNoYnVmW0lOREVYX1NDQU5fTUFYX0JBVENIRVNdOworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkv KiBzY2FuIHVzZXMgYW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1l ZGlhdGVVbmd1YXJkOwkvKiBlYWdlcmx5IGRyb3AgVElEIHJlY3ljbGluZworCQkJCQkJCQkJCSAq IGludGVybG9jaz8gKi8KKwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3Rz IGluZGV4IHR1cGxlcyAqLwogCWJvb2wJCXhzX3RlbXBfc25hcDsJLyogdW5yZWdpc3RlciBzbmFw c2hvdCBhdCBzY2FuIGVuZD8gKi8KIApAQCAtMTY0LDkgKzM2MSw4IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5v dCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7 CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAq LwotCi0JLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2b2lkCSAg ICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisJLyogeHNfc25h cHNob3QgdXNlcyBhbiBNVkNDIHNuYXBzaG90PyAqLworCWJvb2wJCU1WQ0NTY2FuOwogCiAJLyoK IAkgKiBJbnN0cnVtZW50YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1z IGR1cmluZyBib3RoCkBAIC0xOTIsNyArMzg4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2Fu RGVzY0RhdGEKIAogCS8qCiAJICogUmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNh bGxiYWNrLCB3aGljaCBpcyBzZXQgYnkKLQkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0 aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2FucworCSAqIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2lu IGF0IHRoZSBzdGFydCBvZiBhbWdldGJhdGNoL2FtZ2V0dHVwbGUgc2NhbnMKIAkgKi8KIAlib29s CQkoKnhzX2dldG5leHRfc2xvdCkgKHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwKIAkJ CQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLApAQCAtMjAwLDYgKzM5NiwxNCBAQCB0eXBl ZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQg bWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAKKwkvKiBiYXRjaCBzaXplIGlu Zm9ybWF0aW9uLCBzZXQgb25jZSBieSBpbmRleCBBTSBpbiBhbWJlZ2luc2NhbiAqLworCXVpbnQx NgkJbWF4aXRlbXNiYXRjaDsJLyogc2l6ZSBvZiBlYWNoIGJhdGNoJ3MgaXRlbXNbXSBhcnJheSAq LworCXVpbnQxNgkJYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU7CS8qIE1BWEFMSUdOJ2QgaW5kZXgg QU0gb3BhcXVlIHNpemUgKi8KKwl1aW50MTYJCWJhdGNoX3R1cGxlc193b3Jrc3BhY2U7IC8qIGN1 cnJUdXBsZXMgd29ya3NwYWNlIHNpemUgKi8KKworCS8qIE9mZnNldCB1c2VkIGJ5IGluZGV4X3Nj YW5fYmF0Y2hfYmFzZSAoY29tcHV0ZWQgbGF6aWx5KSAqLworCXVpbnQxNgkJYmF0Y2hfYmFzZV9v ZmZzZXQ7CisKIAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBvcGVyYXRv ciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIgQlkKIAkgKiBleHByZXNzaW9ucyBvZiB0aGUgbGFz dCByZXR1cm5lZCB0dXBsZSwgYWNjb3JkaW5nIHRvIHRoZSBpbmRleC4gIElmCkBAIC0yNDIsNCAr NDQ2LDE1MyBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVU YWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIEhvdyBtYW55IGJh dGNoZXMgYXJlIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIHJpbmcgYnVmZmVyPworICovCitzdGF0 aWMgaW5saW5lIHVpbnQ4CitpbmRleF9zY2FuX2JhdGNoX2NvdW50KEluZGV4U2NhbkRlc2NEYXRh ICpzY2FuKQoreworCXJldHVybiAodWludDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNo IC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEbyB3 ZSBhbHJlYWR5IGhhdmUgYSBiYXRjaCBsb2FkZWQgYXQgJ2lkeCcgb2Zmc2V0IGluIHNjYW4ncyBy aW5nIGJ1ZmZlcj8KKyAqCisgKiBOT1RFOiBhIHN0YWxlIGJhdGNoIGlkeCBjYW4gYWxpYXMgYSBj dXJyZW50bHktbG9hZGVkIHJhbmdlIGR1ZSB0bworICogd3JhcGFyb3VuZCwgcHJvZHVjaW5nIGEg ZmFsc2UgcG9zaXRpdmUuICBGYWxzZSBuZWdhdGl2ZXMgYXJlIG5vdCBwb3NzaWJsZS4KKyAqLwor c3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNj RGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJh dGNocmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRj aHJpbmdidWYubmV4dEJhdGNoKSA8IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUg bWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRl eF9zY2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGlu ZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30K KworLyoKKyAqIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0 aWMgaW5saW5lIEluZGV4U2NhbkJhdGNoCitpbmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NE YXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVk KHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4tPmJhdGNoYnVmW2lkeCAmIChJTkRFWF9TQ0FO X01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNj YW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9z Y2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1 ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJQXNzZXJ0KCFp bmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJc2Nhbi0+YmF0Y2hidWZbbmV4dEJhdGNo ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV0gPSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0 QmF0Y2grKzsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2Ugb2Yg YSBiYXRjaCAodXNlZCB0byBwZnJlZSBiYXRjaGVzKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQg KgoraW5kZXhfc2Nhbl9iYXRjaF9iYXNlKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCkKK3sKKwlBc3NlcnQoc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPiAwKTsK KworCXJldHVybiAoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0OworfQor CisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZml4ZWQtc2l6ZSB0YWJsZSBBTSBvcGFx dWUgYXJlYS4KKyAqCisgKiBOb3RlOiB0aGlzIHNob3VsZG4ndCBiZSBjb25mdXNlZCB3aXRoIHRo ZSB2YXJpYWJsZS1zaXplZCB0YWJsZSBBTSB0cmFpbGluZworICogZGF0YSBhcmVhLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgKgoraW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKgorCSAqIFRoZSB0 YWJsZSBBTSBvcGFxdWUgYXJlYSBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmF0 Y2gncworCSAqIGFsbG9jYXRlZCBzcGFjZQorCSAqLworCXJldHVybiBpbmRleF9zY2FuX2JhdGNo X2Jhc2Uoc2NhbiwgYmF0Y2gpOworfQorCisvKgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMg bmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0g d2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3 aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3Np dGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJl IG5vIG1vcmUgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggcmVtYWluaW5nIGluIHRoZSBnaXZlbiBzY2Fu IGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX3Bvc19hZHZh bmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRj aCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFzc2VydChwb3MtPnZhbGlkKTsKKworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3MtPml0 ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UJCQkJCQkv KiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVtIDwgYmF0 Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBBZHZhbmNlZCB3aXRo aW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEFkdmFuY2UgYmF0Y2ggcG9z aXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0Y2guCisgKgorICogV2hlbiB3ZSdyZSBj YWxsZWQsIHRoaXMgcG9zaXRpb24gc2hvdWxkIHBvaW50IHRvIGEgYmF0Y2ggdGhhdCBjYWxsZXIg anVzdAorICogZmluaXNoZWQgY29uc3VtaW5nIGZyb20uICBXaGVuIHdlIHJldHVybiwgdGhpcyBw b3NpdGlvbiB3aWxsIHBvaW50IHRvCisgKiBuZXh0QmF0Y2gsIHRoZSBuZXh0IGJhdGNoIGZyb20g dGhlIHJpbmcgYnVmZmVyLiAgV2UnbGwgaGF2ZSBhbHNvIHNldCB0aGUKKyAqIHBvc2l0aW9uJ3Mg aXRlbSBvZmZzZXQgdG8gbmV4dEJhdGNoJ3MgZmlyc3QgaXRlbSBpbiB0aGUgZ2l2ZW4gZGlyZWN0 aW9uCisgKiAod2hpY2ggaXMgYWN0dWFsbHkgbmV4dEJhdGNoJ3MgX2xhc3RfIGl0ZW0gd2hlbiBz Y2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIG5leHRCYXRjaCBkb2Vzbid0IGhhdmUgdG8gYmUg KGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQKKyAqIGJhdGNoIGlu IHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBpcyBtZXJlbHkgdGhlIG5leHQgYmF0Y2ggaW4g bGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBvdXIgY2Fs bGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4X3NjYW5fcG9zX25leHRiYXRjaChT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBJbmRleFNjYW5CYXRjaCBuZXh0QmF0Y2gs IEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQobmV4dEJhdGNoLT5kaXIgPT0gZGly ZWN0aW9uKTsKKwlBc3NlcnQobmV4dEJhdGNoLT5maXJzdEl0ZW0gPD0gbmV4dEJhdGNoLT5sYXN0 SXRlbSk7CisKKwkvKiBJbmNyZW1lbnQgYmF0Y2ggKG1pZ2h0IHdyYXApLCBvciBpbml0aWFsaXpl IGl0IHRvIHplcm8gKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJcG9zLT5iYXRjaCsrOworCWVsc2UK KwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0gdHJ1ZTsKKworCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+aXRlbSA9IG5leHRCYXRjaC0+Zmly c3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV4dEJhdGNoLT5sYXN0SXRlbTsKK30KKwog I2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggZTc4MWFh YWE3Li4zZWIzMjg4MjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNDU2LDEwICs0NTYsMTEgQEAg dHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2Yg U2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcgdGFibGUgc2NhbgogCSAqIGJlaGF2aW9y LiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhc3NpbmcgdGhlc2Uu CiAJICoKLQkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBJbmRleFNjYW5E ZXNjLnhzX2dldG5leHRfc2xvdCB0bwotCSAqIHRoZSBhcHByb3ByaWF0ZSBzbG90LWJhc2VkIGNh bGxiYWNrLiAgVHVwbGVzIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhCi0JICogdGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KCkuICBObyBzZXBhcmF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrIGV4aXN0cyBp bgotCSAqIHRoaXMgc3RydWN0IQorCSAqIENhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0 aWFsaXppbmcgdGhlIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlcgorCSAqICh3aGVuIHRoZSBzY2Fu J3MgaW5kZXggQU0gc3VwcG9ydHMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlKSwgYW5kIGZvcgor CSAqIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8gdGhlIGFwcHJvcHJp YXRlIHNsb3QtYmFzZWQKKwkgKiBjYWxsYmFjay4gIFR1cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVk IHZpYSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4KKwkgKiBObyBzZXBhcmF0ZSBzbG90LWJh c2VkIGNhbGxiYWNrIGV4aXN0cyBpbiB0aGlzIHN0cnVjdCEKIAkgKgogCSAqIEluIHByaW5jaXBs ZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgKHN0b3JlZCBoZXJlKSB3b3VsZAog CSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2YXJpYW50cyBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIHByb3ZpZGUKQEAgLTQ3MSwxMCArNDcyLDMxIEBAIHR5cGVkZWYgc3RydWN0IFRh YmxlQW1Sb3V0aW5lCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBuZWVkIHRvIHJldHVybiB0 aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNp YmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50cyB0byBhbgogCSAqIG9s ZGVyIHZlcnNpb24gb2YgdGhlIHR1cGxlLgorCSAqCisJICogQ2FsbGJhY2sgYWxzbyBpbml0aWFs aXplcyB0aGUgYmF0Y2hfb3BhcXVlX3NpemUgYW5kIGJhdGNoX3Blcl9pdGVtX3NpemUKKwkgKiBm aWVsZHMgaW4gdGhlIHJldHVybmVkIHN0cnVjdCwgdG8gbGV0IHRoZSBjb3JlIGNvZGUga25vdyBo b3cgbXVjaAorCSAqIG1lbW9yeSB3aWxsIGJlIHJlcXVpcmVkIGluIHRoZSBvcGFxdWUgdGFibGUg QU0gcG9ydGlvbnMgb2YgZWFjaCBiYXRjaAorCSAqIGFsbG9jYXRpb24gKGR1cmluZyBhbWdldGJh dGNoIGluZGV4IHNjYW5zKS4gIFRhYmxlIEFNcyBjYW4gc3RvcmUgdGhpbmdzCisJICogbGlrZSBw ZXItaXRlbSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGluIGVhY2ggYWxsb2NhdGVkIGJhdGNoLiAg U2VlCisJICogcmVsc2Nhbi5oIGZvciBkZXRhaWxzLgogCSAqLwogCXN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJ CQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0YWJsZSBB TSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorCSAq CisJICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaCBmb3IgZWFjaCBuZXcgb3Ig cmVjeWNsZWQgYmF0Y2guCisJICogVGFibGUgQU1zIHNob3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBh cmVhIChhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFu ZCBhbnkgdHJhaWxpbmcgcGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkg KgorCSAqICduZXdfYWxsb2MnIGlzIHRydWUgZm9yIGZyZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywg ZmFsc2UgZm9yIGJhdGNoZXMKKwkgKiByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2 b2lkCQkoKmluZGV4X2ZldGNoX2JhdGNoX2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkJICAgYm9vbCBuZXdfYWxs b2MpOworCiAJLyoKIAkgKiBSZXNldCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0 YWJsZS1vd25lZCByZXNvdXJjZXMuCiAJICovCkBAIC00ODUsNiArNTA3LDE2IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChJ bmRleFNjYW5EZXNjIHNjYW4pOwogCisJLyoKKwkgKiBNYXJrIHRoZSBjdXJyZW50IHNjYW4gcG9z aXRpb24gc28gaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVyCisJICovCisJdm9pZAkJKCppbmRleF9m ZXRjaF9tYXJrcG9zKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworCS8qCisJICogUmVzdG9yZSBh IHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2Zl dGNoX3Jlc3RycG9zKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKwogCS8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1 YWwgdHVwbGVzCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjc4LDYgKzEzMTAsNDQgQEAgdGFi bGVfaW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmhlYXBSZWxh dGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiB9CiAKKy8qCisgKiBN YXJrIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gc28gaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVy CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlzY2Fu LT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX21hcmtwb3Moc2Nhbik7Cit9 CisKKy8qCisgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBtYXJrZWQgc2NhbiBwb3NpdGlvbgorICoK KyAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBv ZiB0aGUgdGFibGUgQU0uICBTZWUKKyAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KKyAq Lworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNj YW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJQXNzZXJ0KCFz Y2FuLT5raWxsX3ByaW9yX3R1cGxlKTsJLyogbm90IHVzZWQgd2l0aCBhbWdldGJhdGNoICovCisK KwkvKgorCSAqIEZvciBoZWFwLCBpbiB0aGUgcHJlc2VuY2Ugb2YgSE9UIGNoYWlucywgbWFyay9y ZXN0b3JlIG9ubHkgd29ya3MKKwkgKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBp cyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0CisJICogdGhlcmUncyBhdCBtb3N0IG9uZSBy ZXR1cm5hYmxlIHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28KKwkgKiByZXN0b3Jpbmcg dGhlIHByaW9yIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVu dC4KKwkgKiBTaW5jZSB0aGUgb25seSBjdXJyZW50IHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0 aW9uYWxpdHkgaXMKKwkgKiBub2RlTWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkgbWVhbnMg dGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yaworCSAqIGZvciBNVkNDIHNuYXBzaG90cy4K KwkgKi8KKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCXNjYW4tPnhzX2hlYXBfY29udGludWUg PSBmYWxzZTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hf cmVzdHJwb3Moc2Nhbik7Cit9CisKIC8qCiAgKiBSZWxlYXNlIHJlc291cmNlcyBhbmQgZGVhbGxv Y2F0ZSB0aGUgSW5kZXhGZXRjaFRhYmxlRGF0YSBpbiB0aGUgc2Nhbi4KICAqLwpAQCAtMTI4OSw2 ICsxMzU5LDIxIEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJ c2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CiB9 CiAKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdp dGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisgKgorICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9h bGxvY19iYXRjaCBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2guCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZAordGFibGVfaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCSBib29sIG5ld19hbGxvYykKK3sKKwlB c3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFi bGVhbS0+aW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwKKwkJCQkJCQkJCQkJCQkJ ICAgbmV3X2FsbG9jKTsKK30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4g aW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZGly ZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlz IGFuZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAyN2EyYzY4MTUuLjBhYzE2YjkzMSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKQEAgLTE0MzcsMTIgKzE0MzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhPcHRJbmZvCiAJYm9vbAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5Owog CWJvb2wJCWFtc2VhcmNobnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlPyAqLwotCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0 Y2ggKG9yIGdldHR1cGxlKSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1jYW5wbGFpbnNjYW47CiAJ LyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dl dGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtw b3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEg bWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAq LwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29z dGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGJkYjMwNzUy ZS4uOWY0NGNmMzFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0yOTgsMTAgKzI5OCwxMiBA QCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVn aW5zY2FuLAogCQkuYW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAog CQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1y ZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW5nZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlh Li44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkg QEAgZ2luZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICog aW50byB0aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRp bWUgZHVyaW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xs IGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3Np YmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAq IGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0 IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5k aW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1 cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFt Z2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3Qg ZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UK KwkgKiBjb25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZTdjYmE4MWQ0Li40ZTBiNzBjMjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04MywxMCArODMsMTIgQEAgZ2luaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2Nh biA9IGdpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5V TEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5k c2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFt cG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5h bWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggODU2NWUyMjViLi5hNThjNTIyMmYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMKQEAgLTEwMywxMCArMTAzLDEyIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdp c3RyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9 IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0g TlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdp c3RlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAor CQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwK IAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVM TCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA4ZDhjZDMwZGMuLjlhZTlmMDQ0OCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2guYwpAQCAtMTE0LDEwICsxMTQsMTIgQEAgaGFzaGhhbmRsZXIoUEdfRlVO Q1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2Fu ID0gaGFzaHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0 Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2Fu ID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5V TEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4g PSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjVl MTE4YWU3Li5kZTNkZTIxNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtMjY4MSw4ICsyNjgxLDExIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBo ZWFwYW1fbWV0aG9kcyA9IHsKIAkucGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZSA9IHRhYmxlX2Js b2NrX3BhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUsCiAKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBo ZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCisJLmluZGV4X2ZldGNoX2JhdGNoX2luaXQgPSBoZWFw YW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRj aF9lbmQsCisJLmluZGV4X2ZldGNoX21hcmtwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3Bv cywKKwkuaW5kZXhfZmV0Y2hfcmVzdHJwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3Ms CiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0 X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCA0NDE1YzZlY2MuLjg1NzQ5 NzBhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAt MTYsMTIgKzE2LDQ3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJh Y2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50 ZXJuYWwuaCIKIAogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgaGVhcCB0 YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5k ZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiBmaXhlZC1zaXplIHRhYmxlIEFNIG9wYXF1 ZSBhcmVhIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVh cEJhdGNoRGF0YQoreworCXVpbnQ4CSAgICp2aXNJbmZvOwkJLyogcGVyLWl0ZW0gdmlzaWJpbGl0 eSBmbGFncywgb3IgTlVMTCAqLworfSBIZWFwQmF0Y2hEYXRhOworCisvKgorICogUGVyLWl0ZW0g dmlzaWJpbGl0eSBmbGFncyBzdG9yZWQgaW4gSGVhcEJhdGNoRGF0YS52aXNJbmZvIGFycmF5Cisg Ki8KKyNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0ZW0g aW4gVk0/ICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyogYmxv Y2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCisKK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIg aGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJCQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkJICBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBz Y2FuQmF0Y2gsCisJCQkJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKKwkJ CQkJCQkJCQkJCQkJICBib29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgdm9pZCBoZWFwYW1faW5k ZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJh dGNoLAorCQkJCQkJCQkJCQkgIEhlYXBCYXRjaERhdGEgKmhiYXRjaCwKKwkJCQkJCQkJCQkJICBC YXRjaFJpbmdJdGVtUG9zICpwb3MpOworc3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX2Jh dGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkgIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7 CitzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIHN0YXRpYyBib29sIGhlYXBhbV9pbmRl eF9wbGFpbl90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ CQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOwpAQCAtNzcsMjYgKzExMiw5NSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4o SW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKLQloc2Nhbi0+ eHNfYmFzZS5mbGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsK LQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWhzY2FuLT54c192bWJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7CisJLyogSW5kaWNhdGUgaG93IG11Y2ggbWVtb3J5IEhlYXBCYXRj aERhdGEgd2lsbCB0YWtlIGZyb20gZWFjaCBiYXRjaCAqLworCWhzY2FuLT54c19iYXNlLmJhdGNo X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhlYXBCYXRjaERhdGEpKTsKKwkvKiBJbmRp Y2F0ZSBwZXItaXRlbSB2aXNJbmZvIGVsZW1lbnQgb3ZlcmhlYWQgKGZvciBpbmRleC1vbmx5IHNj YW5zKSAqLworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVtX3NpemUgPSBzaXplb2YodWlu dDgpOwogCi0JLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8g dXNlIGZvciB0aGlzIHNjYW4gKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQotCQlzY2FuLT54 c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3Q7CisJ aHNjYW4tPnhzX2Jhc2UuZmxhZ3MgPSBmbGFnczsKKworCS8qIEN1cnJlbnQgaGVhcCBibG9jayBz dGF0ZSAqLworCUFzc2VydChoc2Nhbi0+eHNfY2J1ZiA9PSBJbnZhbGlkQnVmZmVyKTsKKwloc2Nh bi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJLyogVk0gcmVsYXRlZCBzdGF0ZSAq LworCUFzc2VydChoc2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlcik7CisJaHNjYW4t PnhzX3ZtX2l0ZW1zID0gMTsKKworCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4dF9zbG90IGlt cGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCisJaWYgKHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJeworCQkvKiBhbWdldGJhdGNo IGluZGV4IEFNICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQlzY2FuLT54c19nZXRu ZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3Q7CisJCWVsc2UK KwkJCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9wbGFpbl9iYXRjaF9nZXRu ZXh0X3Nsb3Q7CisKKwkJLyogU2V0IHVwIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlciBpbiBwYXNz aW5nICovCisJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5faW5pdChzY2FuKTsKKwl9CiAJZWxzZQot CQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4 dF9zbG90OworCXsKKwkJLyogYW1nZXR0dXBsZSBpbmRleCBBTSAqLworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlf dHVwbGVfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBo ZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCX0KIAogCXJldHVybiAmaHNj YW4tPnhzX2Jhc2U7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRoZSBoZWFwIHRhYmxlIEFNJ3Mg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhIChIZWFwQmF0Y2hEYXRhKS4KKyAqIENhbGxlZCBieSBpbmRl eGFtX3V0aWxfYWxsb2NfYmF0Y2ggZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICov Cit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCSAgYm9vbCBuZXdfYWxsb2MpCit7CisJSGVh cEJhdGNoRGF0YSAqaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIGJh dGNoKTsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJeworCQlpZiAobmV3X2FsbG9jKQor CQl7CisJCQkvKgorCQkJICogVGhlIHZpc0luZm8gcG9pbnRlciBpcyBzdG9yZWQgYXQgdGhlIHZl cnkgc3RhcnQgb2YgdGhlIHBhbGxvYydkCisJCQkgKiBzcGFjZSwgaW4gdGhlIGZpeGVkLXNpemVk IHRhYmxlIEFNIG9wYXF1ZSBhcmVhLiAgdmlzSW5mbyBwb2ludHMKKwkJCSAqIHRvIGp1c3QgcGFz dCB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZS1zaXplZCBpdGVtc1ttYXhpdGVtc2JhdGNoXQorCQkJ ICogYXJyYXkgKHRvIGEgc3BhY2UgdGhhdCBpcyBhbHNvIHNpemVkIGFjY29yZGluZyB0byB3aGF0 ZXZlciB0aGUKKwkJCSAqIGluZGV4IEFNIHNldCBtYXhpdGVtc2JhdGNoIHRvKS4KKwkJCSAqLwor CQkJU2l6ZQkJaXRlbXNFbmQ7CisKKwkJCWl0ZW1zRW5kID0gTUFYQUxJR04ob2Zmc2V0b2YoSW5k ZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0 ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQloYmF0Y2gtPnZpc0luZm8gPSAodWludDgg KikgKChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQpOworCQl9CisKKwkJLyogQ2xlYXIgdmlzaWJp bGl0eSBmbGFncyAobmVlZGVkIGZvciBib3RoIG5ldyBhbmQgcmVjeWNsZWQgYmF0Y2hlcykgKi8K KwkJbWVtc2V0KGhiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJfQor CWVsc2UKKwl7CisJCWhiYXRjaC0+dmlzSW5mbyA9IE5VTEw7CisJfQorfQorCiB2b2lkCiBoZWFw YW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogeworCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRj aDsKKworCS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0g bG9va3VwcyAqLworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CisKKwkvKiBSZXNldCBiYXRjaCBy aW5nIGJ1ZmZlciBzdGF0ZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1f dXRpbF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgZmFsc2UpOworCiAJLyoKLQkgKiBSZXNldHMgYXJl IGEgbm8tb3AuCi0JICoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBub3cg aGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4KIAkgKiBUaGlzIHNhdmVzIGN5Y2xlcyBk dXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyAoaXQgY2FuIGF2b2lkCiAJICog cmVwZWF0ZWQgcGlubmluZyBhbmQgdW5waW5uaW5nIG9mIHRoZSBzYW1lIGJ1ZmZlciBhY3Jvc3Mg cmVzY2FucykuCkBAIC0xMTYsOSArMjIwLDM1IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikp CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCS8qIEZyZWUgYWxsIGJh dGNoIHJlbGF0ZWQgcmVzb3VyY2VzICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwkJdGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisKIAlwZnJlZShoc2Nhbik7CiB9CiAKKy8q CisgKiBTYXZlIGJhdGNoIHJpbmcgYnVmZmVyJ3MgY3VycmVudCBzY2FuUG9zIGFzIGl0cyBtYXJr UG9zCisgKi8KK3ZvaWQKK2hlYXBhbV9pbmRleF9mZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCXRhYmxlYW1fdXRpbF9i YXRjaHNjYW5fbWFya19wb3Moc2Nhbik7Cit9CisKKy8qCisgKiBSZXN0b3JlIGJhdGNoIHJpbmcg YnVmZmVyJ3MgbWFya1BvcyBpbnRvIGl0cyBzY2FuUG9zCisgKi8KK3ZvaWQKK2hlYXBhbV9pbmRl eF9mZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnVz ZWJhdGNocmluZyk7CisKKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKHNjYW4p OworfQorCiAvKgogICoJaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4g Zm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QKICAqCkBAIC0zNjcsNyArNDk3LDggQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKFJlbGF0aW9uIHJlbCwKICAqLwogc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAotCQkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVhcF9jb250aW51ZSkKKwkJCQkJCQkgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsIGJvb2wgKmhlYXBfY29udGludWUsCisJCQkJCQkJIGJvb2wgYW1nZXRiYXRj aCkKIHsKIAlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwogCWJvb2wJCWZvdW5kOwpAQCAtMzgxLDIw ICs1MTIsMzI5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRj aChzY2FuLT5pbmRleFJlbGF0aW9uKTsKIAogCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xl IEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFN IHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGlu IHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBX ZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlv bGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRl eFNjYW4oKS4KKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBv bmx5IGRlYWQgdHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBk byB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0Mg dG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KIAkgKi8K IAlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGFsbF9kZWFkOworCXsKKwkJaWYgKGFtZ2V0YmF0Y2gpCisJCXsKKwkJCWlmIChhbGxf ZGVhZCkKKwkJCQl0YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShzY2FuKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCS8qCisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8g a2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElELgorCQkJICogTmV4dCB0YWJsZWFtX3V0aWxfZmV0 Y2hfbmV4dF90dXBsZV90aWQgY2FsbCB3aWxsIHRlbGwgaW5kZXggQU0KKwkJCSAqIHRvIGtpbGwg dGhlIHR1cGxlIGl0IGp1c3QgcmV0dXJuZWQgdG8gdXMgLS0gdGhlICJwcmlvciIgdHVwbGUuCisJ CQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0KIAog CXJldHVybiBmb3VuZDsKIH0KIAogLyoKLSAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90 aCBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKiBHZXQgbmV4dCBUSUQg ZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv bi4KKyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2Vz IGEgbm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg SXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hSaW5nQnVmZmVy ICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3Mg KnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5C YXRjaCA9IE5VTEw7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2FuQmF0Y2g7CisKKwlBc3NlcnQoIXNj YW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNo KTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2Fu KSA9PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0 dXApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2Fu QmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQv aW5kZXggdHVwbGUgZnJvbQorCSAqLworCWhhZEV4aXN0aW5nU2NhbkJhdGNoID0gc2NhblBvcy0+ dmFsaWQ7CisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoKKwkJICogc2NhblBvcyBpcyB2 YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwor CQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICovCisJCXBnX2Fzc3VtZShi YXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJc2NhbkJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4 X3NjYW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCQkJcmV0 dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJCQkJCSAgIGFs bF92aXNpYmxlKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0ZW1zIGZyb20g b3VyIGV4aXN0aW5nIHNjYW5CYXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBsb2FkZWQgeWV0 IChiZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2Fu KS4KKwkgKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdl dCB0aGUgZmlyc3QgYmF0Y2gpLgorCSAqLworCXNjYW5CYXRjaCA9IHRhYmxlYW1fdXRpbF9mZXRj aF9uZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBzY2FuQmF0Y2gsIHNj YW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSdyZSBkb25lOyBu byBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJCSAqCisJCSAq IE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlkIGF0IHRoaXMgcG9pbnQuICBU aGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24s IG9yIHJlc3RvcmUgYSBzYXZlZCBtYXJrCisJCSAqICh0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jl c3RvcmVfcG9zIHJlcXVpcmVzIHRoZSBzY2FuIHRvIGhhdmUgYm90aAorCQkgKiBhIHZhbGlkIHNj YW5Qb3MgYW5kIHZhbGlkIG1hcmtQb3MpLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ LyoKKwkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUg c3RhcnQgb2YgbmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWluZGV4X3NjYW5fcG9zX25leHRi YXRjaChkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNzZXJ0KGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7CisKKwkvKgorCSAqIFJl bW92ZSB0aGUgaGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciAoZXhjZXB0IHdo ZW4gdGhpcyBuZXcKKwkgKiBzY2FuQmF0Y2ggaXMgb3VyIG9ubHkgb25lKQorCSAqLworCWlmICho YWRFeGlzdGluZ1NjYW5CYXRjaCkKKwl7CisJCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRj aCk7CisKKwkJQXNzZXJ0KGhlYWRCYXRjaCAhPSBzY2FuQmF0Y2gpOworCQlBc3NlcnQoYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOworCisJCS8qIGZyZWUgb2Jzb2xl c2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJCXRh YmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJLyogUmVtb3Zl IHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkg Ki8KKwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKiBJbiBwcmFjdGljZSBz Y2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNoICovCisJ QXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCXJl dHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rp b24sCisJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLCBhbGxfdmlzaWJsZSk7Cit9CisK Ky8qCisgKiBTYXZlIHRoZSBjdXJyZW50IHNjYW5Qb3Mvc2NhbkJhdGNoIGl0ZW0ncyBUSUQgaW4g c2NhbidzIHhzX2hlYXB0aWQsIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGF0IFRJRC4g IFdoZW4gYWxsX3Zpc2libGUgaXNuJ3QgTlVMTCAoZHVyaW5nIGFuCisgKiBpbmRleC1vbmx5IHNj YW4pLCBhbHNvIHNldHMgaXRlbSdzIHZpc2liaWxpdHkgc3RhdHVzIGluICphbGxfdmlzaWJsZS4K KyAqCisgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIGhlbHBlciBmdW5jdGlv bi4KKyAqLworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2luZGV4X3JldHVybl9z Y2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4s CisJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJbmRleFNjYW5CYXRj aCBzY2FuQmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJCQkJCQkJ CWJvb2wgKmFsbF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCS8qIFNl dCB4c19oZWFwdGlkLCB3aGljaCBjYWxsZXIgKGFuZCBjb3JlIGV4ZWN1dG9yKSB3aWxsIG5lZWQg Ki8KKwlzY2FuLT54c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50 YWJsZVRpZDsKKworCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogUGxh aW4gaW5kZXggc2Nhbi4KKwkJICovCisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJ cmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworCX0KKworCS8qCisJICogSW5kZXgtb25seSBzY2Fu LgorCSAqCisJICogQWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggY2FsbGVyIGFsc28gbmVlZHMuCisJ ICovCisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJc2Nhbi0+eHNfaXR1cCA9IChJbmRl eFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gtPml0 ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2liaWxp dHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNvbWUK KwkgKiBhZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBhcyBu ZWVkZWQKKwkgKi8KKwloYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoc2Nhbiwg c2NhbkJhdGNoKTsKKwlpZiAoIShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBIRUFQ X0JBVENIX1ZJU19DSEVDS0VEKSkKKwkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5 KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJCQkJICBzY2FuUG9z KTsKKworCS8qIEZpbmFsbHksIHNldCBhbGxfdmlzaWJsZSBmb3IgY2FsbGVyICovCisJKmFsbF92 aXNpYmxlID0KKwkJKGhiYXRjaC0+dmlzSW5mb1tzY2FuUG9zLT5pdGVtXSAmIEhFQVBfQkFUQ0hf VklTX0FMTF9WSVNJQkxFKSAhPSAwOworCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQor CisvKgorICogT2J0YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGEgVElEIGZyb20gY2Fs bGVyJ3MgYmF0Y2guCisgKgorICogQ2FsbGVkIGR1cmluZyBhbWdldGJhdGNoIGluZGV4LW9ubHkg c2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkKKyAqIG9mIGNhbGxlcidzIGl0 ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4gIFdlIG1p Z2h0CisgKiBhbHNvIHNldCB2aXNpYmlsaXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZyb20gY2Fs bGVyJ3MgYmF0Y2ggbW9yZQorICogcHJvYWN0aXZlbHkgd2hlbiB0aGF0IG1ha2VzIHNlbnNlLgor ICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdo ZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVtczogdGhl IG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVy IGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNj YW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpv aW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMg cHJvbXB0bHkuCisgKgorICogT25jZSB3ZSd2ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwg aXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQorICogdW5ndWFyZCBpdCBieSBjYWxsaW5n IGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdpdGggcmVzcGVjdCB0bworICogY29uY3Vy cmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBndWFyZCAodHlwaWNhbGx5IGEgYnVmZmVy IHBpbiBvbiB0aGUKKyAqIG9yaWdpbmF0aW5nIGluZGV4IHBhZ2UpIGJsb2NrcyBWQUNVVU0gZnJv bSBhY3F1aXJpbmcgYSBjb25mbGljdGluZyBjbGVhbnVwCisgKiBsb2NrIG9uIHRoYXQgcGFnZS4g IENvcHlpbmcgdGhlIHJlbGV2YW50IHZpc2liaWxpdHkgbWFwIGRhdGEgaW50byBvdXIgbG9jYWwK KyAqIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZzogaWYgYW55IG9mIHRoZXNlCisgKiBUSURzIHBvaW50IHRvIGRlYWQgaGVhcCB0dXBsZXMs IFZBQ1VVTSBjYW5ub3QgcG9zc2libHkgcmV0dXJuIGZyb20KKyAqIGFtYnVsa2RlbGV0ZSBhbmQg bWFyayB0aGUgcG9pbnRlZC10byBoZWFwIHBhZ2VzIGFzIGFsbC12aXNpYmxlLiAgVkFDVVVNCisg KiBfY2FuXyBkbyBzbyBvbmNlIHRoZSBiYXRjaCBpcyB1bmd1YXJkZWQsIGJ1dCB0aGF0J3Mgb2th eTsgd2UnbGwgYmUgd29ya2luZworICogb2ZmIG9mIGNhY2hlZCB2aXNpYmlsaXR5IGluZm8gdGhh dCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFyZSBOT1QKKyAqIGFsbC12aXNpYmxlLgor ICoKKyAqIFdoYXQgYWJvdXQgdGhlIG9wcG9zaXRlIGNhc2UsIHdoZXJlIGEgcGFnZSB3YXMgYWxs LXZpc2libGUgd2hlbiB3ZSBjYWNoZWQKKyAqIHRoZSBWTSBiaXRzIGJ1dCB0dXBsZXMgb24gaXQg YXJlIGRlbGV0ZWQgYWZ0ZXJ3YXJkcz8gIFRoYXQgaXMgc2FmZSB0b286IGFueQorICogdHVwbGUg dGhhdCB3YXMgdmlzaWJsZSB0byBhbGwgd2hlbiB3ZSByZWFkIHRoZSBWTSBtdXN0IGFsc28gYmUg dmlzaWJsZSB0bworICogb3VyIE1WQ0Mgc25hcHNob3QsIHNvIGl0IGlzIGNvcnJlY3QgdG8gc2tp cCB0aGUgaGVhcCBmZXRjaCBmb3IgdGhvc2UgVElEcy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBh bV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0 Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhz X2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJdGVtID0gcG9zLT5pdGVtOworCWJvb2wJCWFsbGJhdGNo aXRlbXN2aXNpYmxlOworCUJsb2NrTnVtYmVyIGN1cnZtaGVhcGJsa25vID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCXVpbnQ4CQljdXJ2bWhlYXBibGtmbGFncyA9IDA7CisKKwlBc3NlcnQoaGJhdGNo ID09IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShzY2FuLCBiYXRjaCkpOworCisJLyoKKwkg KiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVkIHdoZW5ldmVyIHdlJ3JlIGNhbGxlZC4K KwkgKgorCSAqIGFtdW5ndWFyZGJhdGNoIGNhbid0IGJlIGNhbGxlZCB1bnRpbCB3ZSd2ZSBhbHJl YWR5IHNldCBfZXZlcnlfIGJhdGNoCisJICogaXRlbSdzIHZpc0luZm9bXSBzdGF0dXMsIGJ1dCBp ZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMgYmF0Y2gKKwkgKiB0aGVuIGl0IHNob3Vs ZG4ndCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4gYnkgc29tZSBzdWJzZXF1ZW50IGNhbGwu CisJICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkgc2NhbnMgYWx3YXlzIGJlaW5nICFiYXRj aEltbWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkICYmICFz Y2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJLyoKKwkgKiBTZXQgdmlzaWJpbGl0eSBp bmZvIGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVyLgorCSAqCisJICogTm90ZTog dmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFw IGJ1ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgU2Vl IHRoZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0cyIgZGlzY3Vzc2lvbiBhYm92ZSB2aXNp YmlsaXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxhbmF0aW9uCisJICogb2Ygd2h5IHRoaXMg aXMgb2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQor CXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVtLAorCQkJCQkJCQkJ ICBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0gMSk7CisKKwkJZm9yIChpbnQgc2V0SXRl bSA9IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0ZW07IHNldEl0ZW0rKykKKwkJeworCQkJ SXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJs b2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJ CXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhlYXBibGtubykKKwkJ CXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFnczsKKwkJ CQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJU19DSEVDS0VEOwor CQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLCAmaHNj YW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJM RTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3MgPSBm bGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisKKwkJYWxsYmF0Y2hp dGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA+PSBiYXRjaC0+bGFzdEl0ZW0gJiYKKwkJCShwb3NJ dGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5m aXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOworCX0KKwllbHNlCisJeworCQlp bnQJCQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmlyc3RJdGVtLAorCQkJCQkJCQkJICBwb3NJ dGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisKKwkJZm9yIChpbnQgc2V0SXRlbSA9IHBv c0l0ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNldEl0ZW0tLSkKKwkJeworCQkJSXRlbVBv aW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJsb2NrTnVt YmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJCXVpbnQ4 CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhlYXBibGtubykKKwkJCXsKKwkJ CQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFnczsKKwkJCQljb250 aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJU19DSEVDS0VEOworCQkJaWYg KFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLCAmaHNjYW4tPnhz X3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRTsKKwor CQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3MgPSBmbGFnczsK KwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisKKwkJYWxsYmF0Y2hpdGVtc3Zp c2libGUgPSBsYXN0U2V0SXRlbSA8PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkocG9zSXRlbSA9 PSBiYXRjaC0+bGFzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5sYXN0SXRl bV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJfQorCisJLyoKKwkgKiBJdCdzIHNhZmUg dG8gdW5ndWFyZCB0aGUgYmF0Y2ggKHZpYSBhbXVuZ3VhcmRiYXRjaCkgYXMgc29vbiBhcyB3ZSd2 ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwgb2YgaXRzIGl0ZW1z ICh1bmxlc3MgdGhpcyBpcyBhCisJICogbm9uLU1WQ0Mgc2NhbikKKwkgKi8KKwlpZiAoYWxsYmF0 Y2hpdGVtc3Zpc2libGUpCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5maXJz dEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCUFzc2VydChoYmF0Y2gtPnZpc0lu Zm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpOworCisJCS8qCisJ CSAqIE5vdGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBzdXBwb3J0cyBNVkNDIHNuYXBzaG90 cywgYnV0IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRleC1vbmx5IHNjYW4gY2FsbGVycyB3 aXRoIG90aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlzIGlzIGNlcnRhaW5seSBub3QgdW5l eHBlY3RlZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1vbmx5CisJCSAqIHNjYW5zIHRoYXQg dXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJCWlmIChzY2FuLT5NVkNDU2NhbikK KwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgor CSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBuZXh0IHRp bWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdvIG9uY2Ug d2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBpZiAoaHNj YW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0ZW0pKQor CQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9pdGVtcyA9 IHNjYW4tPm1heGl0ZW1zYmF0Y2g7Cit9CisKKy8qCisgKiBDb21tb24gaW1wbGVtZW50YXRpb24g Zm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4KICAqCiAg KiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMg YW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgcGxh aW4gaW5kZXggc2NhbnMgdGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKQEAgLTQwNSwxMiArODQ1 LDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhl cmUgKG9yIGJ5IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCiAgKiB0aHJv dWdoIGluZGV4X2VuZHNjYW4pLgogICoKLSAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBh IGNvbXBpbGUtdGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKLSAqIGFsbG93aW5nIHRo ZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKiBU aGUgaW5kZXhfb25seSBhbmQgYW1nZXRiYXRjaCBwYXJhbWV0ZXJzIGFyZSBjb21waWxlLXRpbWUg Y29uc3RhbnRzIGF0IGVhY2gKKyAqIGNhbGwgc2l0ZSwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRv IHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KICAqLwogc3RhdGljIHBnX2F0 dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCSAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSkKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCSAgYm9vbCBhbWdldGJhdGNoKQogewogCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhz X2hlYXBmZXRjaDsKIAlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29u dGludWU7CkBAIC00MTksMTkgKzg2MCwyOSBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJdWludDgJCW5fdmlz aXRlZF9wYWdlcyA9IDA7CiAJSXRlbVBvaW50ZXIgdGlkID0gTlVMTDsKIAorCUFzc2VydChUcmFu c2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisKIAlmb3IgKDs7KQogCXsKIAkJaWYgKCEq aGVhcF9jb250aW51ZSkKIAkJewogCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRl eCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKwkJCWlm IChhbWdldGJhdGNoKQorCQkJCXRpZCA9IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3Moc2NhbiwgaHNjYW4sCisJCQkJCQkJCQkJCQkJCSBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJ CSBpbmRleF9vbmx5ID8KKwkJCQkJCQkJCQkJCQkJICZhbGxfdmlzaWJsZSA6IE5VTEwpOworCQkJ ZWxzZQorCQkJCXRpZCA9IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X3R1cGxlX3RpZChzY2FuLCBk aXJlY3Rpb24pOwogCiAJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUg ZG9uZSAqLwogCQkJaWYgKHRpZCA9PSBOVUxMKQogCQkJCWJyZWFrOwogCi0JCQkvKiBGb3IgaW5k ZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCi0JCQlpZiAoaW5kZXhf b25seSkKKwkJCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwg MSk7CisKKwkJCS8qIEZvciBub24tYmF0Y2ggaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZp c2liaWxpdHkgbWFwICovCisJCQlpZiAoaW5kZXhfb25seSAmJiAhYW1nZXRiYXRjaCkKIAkJCQlh bGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJ CQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKIAkJCQkJCQkJCQkJICZoc2Nhbi0+ eHNfdm1idWZmZXIpOwpAQCAtNDU2LDcgKzkwNyw3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJc2Nh bi0+aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzKys7CiAKIAkJCQlpZiAoIWhlYXBhbV9p bmRleF9mZXRjaF9oZWFwX2l0ZW0oc2NhbiwgaHNjYW4sIHNsb3QsCi0JCQkJCQkJCQkJCQkgIGhl YXBfY29udGludWUpKQorCQkJCQkJCQkJCQkJICBoZWFwX2NvbnRpbnVlLCBhbWdldGJhdGNoKSkK IAkJCQl7CiAJCQkJCS8qCiAJCQkJCSAqIE5vIHZpc2libGUgdHVwbGUuICBJZiBjYWxsZXIgc2V0 IGEgdmlzaXRlZC1wYWdlcyBsaW1pdApAQCAtNDg4LDcgKzkzOSw3IEBAIGhlYXBhbV9pbmRleF9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1 cGxlIGluIHRoZQogCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBlbm91Z2guCiAJCQkJ ICovCi0JCQkJQXNzZXJ0KCEoKmhlYXBfY29udGludWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+ eHNfc25hcHNob3QpKSk7CisJCQkJQXNzZXJ0KCEoKmhlYXBfY29udGludWUgJiYgc2Nhbi0+TVZD Q1NjYW4pKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTUxNSw4ICs5NjYsOCBAQCBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCiAJCQkgKiBlbnRyeS4gIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJv dW5kIGFuZCBncmFiIHRoZQogCQkJICogbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXguCiAJCQkgKi8K LQkJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtKHNjYW4sIGhzY2FuLCBzbG90LAot CQkJCQkJCQkJCQkgaGVhcF9jb250aW51ZSkpCisJCQlpZiAoaGVhcGFtX2luZGV4X2ZldGNoX2hl YXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwgaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQkJIGFt Z2V0YmF0Y2gpKQogCQkJCXJldHVybiB0cnVlOwogCQl9CiAJfQpAQCAtNTI0LDE2ICs5NzUsNDAg QEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCXJldHVybiBmYWxzZTsKIH0KIAorLyogeHNfZ2V0bmV4dF9zbG90 IGNhbGxiYWNrOiBhbWdldGJhdGNoLCBwbGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0 cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2Fu dF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgdHJ1ZSk7Cit9CisK Ky8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXRiYXRjaCwgaW5kZXgtb25seSBzY2Fu ICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfb25seV9iYXRj aF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUFzc2Vy dChzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1 cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUs IHRydWUpOworfQorCiAvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBs YWluIGluZGV4IHNjYW4gKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKIGhlYXBhbV9p bmRleF9wbGFpbl90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJ CQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCiB7Ci0JQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydCghc2Nhbi0+ eHNfd2FudF9pdHVwICYmICFzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFw YW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworCXJl dHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFs c2UsIGZhbHNlKTsKIH0KIAogLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxl LCBpbmRleC1vbmx5IHNjYW4gKi8KQEAgLTU0Miw4ICsxMDE3LDggQEAgaGVhcGFtX2luZGV4X29u bHlfdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsK LQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVw ICYmICFzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSk7CisJcmV0dXJuIGhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCBmYWxzZSk7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlh bWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4 YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi5kNGFk YmJlYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJ bmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAh PSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNz ZXJ0IHRoYXQgQU0gZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJh Y2tzICovCisJQXNzZXJ0KChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5l LT5hbXVuZ3VhcmRiYXRjaCAhPSBOVUxMKSk7CisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1z YmF0Y2ggPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChy b3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxM KTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4 IGFjYzlmM2U2YS4uNzhmZmJhYjMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODks NiArODksOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBp bnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25h cHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9m S2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nh bi0+dXNlYmF0Y2hyaW5nID0gZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxs ZXJzICovCisJbWVtc2V0KCZzY2FuLT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hj YWNoZSkpOwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBp dCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAtMTI2LDYgKzEyOCwxMCBAQCBS ZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVz YyA9IE5VTEw7CiAKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7CisJc2Nhbi0+ YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPSAw OworCiAJc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA9IDA7CiAKIAlyZXR1cm4gc2NhbjsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IGU2MjM4YWYzZS4uNWM4OGZmYTRkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTEzLDE4ICsxMywxNSBAQAogICogSU5U RVJGQUNFIFJPVVRJTkVTCiAgKgkJaW5kZXhfb3BlbgkJLSBvcGVuIGFuIGluZGV4IHJlbGF0aW9u IGJ5IHJlbGF0aW9uIE9JRAogICoJCWluZGV4X2Nsb3NlCQktIGNsb3NlIGFuIGluZGV4IHJlbGF0 aW9uCi0gKgkJaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGgg YW1nZXR0dXBsZQorICoJCWluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRl eCB3aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAg LSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldGJpdG1hcAogICoJCWluZGV4X3Jl c2NhbgktIHJlc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfZW5kc2NhbgktIGVu ZCBhIHNjYW4KICAqCQlpbmRleF9pbnNlcnQJLSBpbnNlcnQgYW4gaW5kZXggdHVwbGUgaW50byBh IHJlbGF0aW9uCi0gKgkJaW5kZXhfbWFya3BvcwktIG1hcmsgYSBzY2FuIHBvc2l0aW9uCi0gKgkJ aW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlvbgogICoJCWluZGV4X3BhcmFs bGVsc2Nhbl9lc3RpbWF0ZSAtIGVzdGltYXRlIHNoYXJlZCBtZW1vcnkgZm9yIHBhcmFsbGVsIHNj YW4KICAqCQlpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxs ZWwgc2NhbgogICoJCWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVs IHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBh cmFsbGVsIGluZGV4IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0dHVwbGUgdGFi bGUgQU0gaGVscGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxl cyBmcm9tIGEgc2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxldGlvbiBvZiBp bmRleCB0dXBsZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVsZXRpb24gY2xl YW51cCBvZiBhbiBpbmRleApAQCAtMjc4LDYgKzI3NSw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRl cm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nh bi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFw c2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJ c2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKIAkvKgpAQCAtMjg5LDYgKzI4Nyw3IEBA IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAkJ c2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25seV9zY2FuOwogCQlzY2FuLT54c19oZWFwX2Nv bnRpbnVlID0gZmFsc2U7CisJCXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCA9IChzY2FuLT5N VkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2FuKTsKIAogCQkvKiBwcmVwYXJlIHRvIGZldGNoIGlu ZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9p bmRleF9mZXRjaF9iZWdpbihzY2FuLCBmbGFncyk7CkBAIC0yOTcsMTEgKzI5NiwxOSBAQCBpbmRl eF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCQlBc3NlcnQoc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ICE9IE5VTEwpOwogCX0K IAorCS8qCisJICogQml0bWFwIGluZGV4IHNjYW5zIHNob3VsZCBuZXZlciB1c2UgYSBiYXRjaCBy aW5nIGJ1ZmZlciAodGhvdWdoIGNhbiB1c2UKKwkgKiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlKS4g IFBsYWluIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seSBzY2FucykKKwkgKiBzaG91bGQgb25s eSB1c2UgYSBiYXRjaCByaW5nIGJ1ZmZlciB3aXRoIGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0uCisJ ICovCisJQXNzZXJ0KCFzY2FuLT54c19oZWFwZmV0Y2ggPyAhc2Nhbi0+dXNlYmF0Y2hyaW5nIDoK KwkJICAgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpID09IHNj YW4tPnVzZWJhdGNocmluZyk7CisKIAlyZXR1cm4gc2NhbjsKIH0KIAogLyoKLSAqIGluZGV4X2Jl Z2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0dHVwbGUKKyAqIGlu ZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0YmF0Y2gv YW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mg b24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KICAqLwpAQCAtMzk1LDcgKzQwMiwyMSBAQCBpbmRl eF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FO X1BST0NFRFVSRShhbWVuZHNjYW4pOwogCi0JLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVm ZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNj YW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQK KwkgKiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRjaCBjYWNoZS4gIENoZWNrIGZvciB0aGF0LgorCSAq LworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVM TCkKKwl7CisJCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2ggPT0gTlVMTCk7CisJCUFzc2VydChz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwkJcGZy ZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIHNjYW4tPmJhdGNoY2FjaGVbMF0pKTsKKwl9 CisKKwkvKgorCSAqIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zIGFuZCBiYXRj aCByaW5nIGJ1ZmZlcikgaGVsZCBieQorCSAqIHRhYmxlIEFNIGZvciBpbmRleCBzY2FuCisJICov CiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CiAJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChz Y2FuKTsKQEAgLTQxNSw1MiArNDM2LDYgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNj YW4pCiAJSW5kZXhTY2FuRW5kKHNjYW4pOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJ aW5kZXhfbWFya3BvcyAgLSBtYXJrIGEgc2NhbiBwb3NpdGlvbgotICogLS0tLS0tLS0tLS0tLS0t LQotICovCi12b2lkCi1pbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlTQ0FO X0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOwotCi0Jc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKLX0KLQotLyogLS0tLS0tLS0t LS0tLS0tLQotICoJCWluZGV4X3Jlc3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KLSAq Ci0gKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2Yg dGhlIGluZGV4IEFNLiAgU2VlCi0gKiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCi0gKgot ICogTk9URTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBtYXJrL3Jl c3RvcmUgb25seSB3b3JrcwotICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNob3QgaXMg TVZDQy1zYWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0Ci0gKiBtb3N0IG9uZSByZXR1 cm5hYmxlIHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRoZSBwcmlv cgotICogc3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBzdWZmaWNp ZW50LiAgU2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVu Y3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5IG1lYW5z IHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhp cwotICogY291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1 bmltcG9ydGFudC4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZAotaW5kZXhfcmVzdHJw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc2Nh bi0+eHNfc25hcHNob3QpKTsKLQotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtcmVzdHJwb3MpOwotCi0JLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc3RvcmluZyB0 aGUgbWFya2VkIHBvc2l0aW9uICovCi0JaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVf aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFs c2U7IC8qIGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7Ci0K LQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhzY2FuKTsKLX0KLQog LyoKICAqIEVzdGltYXRlcyB0aGUgc2hhcmVkIG1lbW9yeSBuZWVkZWQgZm9yIHBhcmFsbGVsIHNj YW4sIGluY2x1ZGluZyBhbnkKICAqIEFNLXNwZWNpZmljIHBhcmFsbGVsIHNjYW4gc3RhdGUuCkBA IC01NzYsNTYgKzU1MSw2IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFw cmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIAkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgdHJ1ZSwg ZmxhZ3MpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3RpZCAt IGFtZ2V0dHVwbGUgaW50ZXJmYWNlCi0gKgotICogVGhlIHJlc3VsdCBpcyB0aGUgbmV4dCBUSUQg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAotICogb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyBleGlzdC4KLSAqCi0gKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0YWJs ZSBBTSBhbWdldHR1cGxlLWJhc2VkIGluZGV4IHNjYW4KLSAqIGNhbGxiYWNrcy4KLSAqIC0tLS0t LS0tLS0tLS0tLS0KLSAqLwotSXRlbVBvaW50ZXIKLWluZGV4X2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JYm9vbAkJZm91bmQ7Ci0K LQlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKLQotCS8q IFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lz dGVyZWQgKi8KLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwotCi0J LyoKLQkgKiBUaGUgQU0ncyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5kZXggZW50 cnkgbWF0Y2hpbmcgdGhlIHNjYW4KLQkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElEIGludG8gc2Nh bi0+eHNfaGVhcHRpZC4gIEl0IHNob3VsZCBhbHNvIHNldAotCSAqIHNjYW4tPnhzX3JlY2hlY2sg YW5kIHBvc3NpYmx5IHNjYW4tPnhzX2l0dXAvc2Nhbi0+eHNfaGl0dXAsIHRob3VnaCB3ZQotCSAq IHBheSBubyBhdHRlbnRpb24gdG8gdGhvc2UgZmllbGRzIGhlcmUuCi0JICovCi0JZm91bmQgPSBz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZShzY2FuLCBkaXJlY3Rpb24p OwotCi0JLyogUmVzZXQga2lsbCBmbGFnIGltbWVkaWF0ZWx5IGZvciBzYWZldHkgKi8KLQlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7Ci0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwotCi0JLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8K LQlpZiAoIWZvdW5kKQotCXsKLQkJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgKi8KLQkJaWYgKHNj YW4tPnhzX2hlYXBmZXRjaCkKLQkJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwotCi0J CXJldHVybiBOVUxMOwotCX0KLQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19o ZWFwdGlkKSk7Ci0KLQlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRp b24sIDEpOwotCi0JLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kLiAqLwot CXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJ CWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBz Y2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwLi43NDkzYmU0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC0wLDAgKzEsNzQ5IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJhdGNoLmMKKyAqCSAgQmF0Y2gtYmFzZWQgaW5k ZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoK KyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRj aC1iYXNlZCBpbmRleCBzY2FucywKKyAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4g bXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQorICogY2FsbC4gIFRo ZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0uCisgKgorICogVGhl IHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlL2luZGV4IHNjYW4g b3JkZXIuCisgKgorICogTW9zdCBmdW5jdGlvbnMgaGVyZSBhcmUgdGFibGUgQU0gdXRpbGl0aWVz ICh0YWJsZWFtX3V0aWxfKiksIGNhbGxlZCBieQorICogdGFibGUgQU1zIGR1cmluZyBhbWdldGJh dGNoIGluZGV4IHNjYW5zLiAgVGhlc2UgbWFuYWdlIHRoZSBiYXRjaCByaW5nCisgKiBidWZmZXIn cyBsaWZlY3ljbGUgYW5kIHBvc2l0aW9uYWwgc3RhdGUsIGFuZCBoZWxwIHdpdGggY2VydGFpbiBh c3BlY3RzIG9mCisgKiByZXNvdXJjZSBtYW5hZ2VtZW50LiAgVGhlIHRhYmxlIEFNIHVzZXMgc2Nh blBvcyAoYW5kIGl0cyBzY2FuQmF0Y2ggYmF0Y2gpCisgKiB0byByZXR1cm4gaXRlbXMgZnJvbSBi YXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisgKgorICogVGhlcmUgYXJlIGFsc28gc29t ZSBpbmRleCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKSwgY2FsbGVkIGJ5IGluZGV4Cisg KiBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLCB0byBoZWxwIG1h bmFnZSByZXNvdXJjZXMgbGlrZQorICogbWVtb3J5LCBsb2NrcywgYW5kIGJ1ZmZlciBwaW5zLiAg SW5kZXggQU1zIGZyZWUgYW5kIHVubG9jayBiYXRjaGVzIGFzCisgKiBkZXNjcmliZWQgaW4gaW5k ZXhhbS5zZ21sLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgor ICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0 Y2guaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQu aCIKKyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorCitzdGF0aWMgdm9pZCByZWxlYXNlX2FuZF91 bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJ CQkJCQkJCQkgIGJvb2wgYWxsb3dfY2FjaGUpOworc3RhdGljIGlubGluZSBib29sIGJhdGNoX2Nh Y2hlX3N0b3JlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3Rh dGljIGludAliYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIp OworCisvKgorICogUmVzZXQgcmluZyBidWZmZXIgYW5kIHJlbGF0ZWQgcG9zaXRpb25hbCBzdGF0 ZSB1c2VkIGR1cmluZyBhbiBhbWdldGJhdGNoCisgKiBpbmRleCBzY2FuLgorICoKKyAqIFRhYmxl IEFNIGNhbGxlciBzaG91bGQgcGFzcyBlbmRzY2FuPWZhbHNlLCB3aGljaCBtYWtlcyB1cyBjYWNo ZSBhbnkgZnJlZWQKKyAqIGJhdGNoZXMgZm9yIHJldXNlIG9uIHJlc2Nhbi4gIFdlIHJlbGVhc2Ug c2NhbidzIG1hcmtCYXRjaCBoZXJlIGVpdGhlciB3YXkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRp bF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCit7CisJ QmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUlu ZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJ CW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQg PSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCWZvciAo dWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4 dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZy ZWVkID0gdHJ1ZTsKKworCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoLCAh ZW5kc2Nhbik7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0 Y2gpKQorCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIG1hcmtCYXRjaCwgIWVuZHNj YW4pOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4 dEJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7Cit9CisKKy8qCisg KiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2YgYSBiYXRjaCBpbmRleCBzY2FuLgorICoKKyAqIENh bGxlZCBieSB0YWJsZSBBTSB3aGVuIGFuIGluZGV4IHNjYW4gaXMgZW5kaW5nLCByaWdodCBiZWZv cmUgdGhlIG93bmluZworICogc2NhbiBkZXNjcmlwdG9yIGdvZXMgYXdheS4gIENsZWFucyB1cCBh bGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRj aHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcg bG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSwgYnlwYXNzaW5nIGNhY2hlICovCisJdGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2FuLCB0cnVlKTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRj aCBjYWNoZWQgPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCisJCWlmIChjYWNoZWQgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVtcykKKwkJCXBmcmVlKGNhY2hl ZC0+ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGNhY2hl ZCkpOworCX0KK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBvc2l0aW9uCisg KgorICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfbWFya3BvcyBjYWxs YmFjay4gIFNhdmVzIHRoZSBjdXJyZW50CisgKiBzY2FuIHBvc2l0aW9uIGFuZCBhc3NvY2lhdGVk IGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMKKyAqIHBvaW50 IGxhdGVyLCB2aWEgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3Bvcy4gIFRoZSBtYXJr ZWQgYmF0Y2ggaXMKKyAqIHJldGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFyayBp cyBzZXQgb3IgdGhlIHNjYW4gZW5kcyAob3IgdW50aWwKKyAqIHRoZSBtYXJrIGlzIHJlc3RvcmVk KS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0 Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5n YnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYt Pm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLCBzY2FuUG9zLT5iYXRjaCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hy aW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCUFzc2VydChzY2Fu LT5NVkNDU2Nhbik7CisKKwkvKgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2ggKGlm IGFueSkgLS0gYnV0IG9ubHkgaWYgaXQgaXNuJ3Qgb3VyCisJICogc2NhbkJhdGNoLiAgRGVmZW5z aXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkgKiBzdGls bC1uZWVkZWQgYmF0Y2gsIHRvby4KKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2gg PT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2ggdGhhdCB3ZSBz aG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0KKwllbHNlIGlm IChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkp CisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1hcmtCYXRjaCB0 byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJeworCQkvKgor CQkgKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCBpbmRpY2F0ZXMgdGhhdCBtYXJrUG9zLT5iYXRj aCBpcyBsb2FkZWQsCisJCSAqIGJ1dCBhZnRlciAnYmF0Y2gnIHdyYXBzIGFyb3VuZCBhIHN0YWxl IGJhdGNoIG9mZnNldCBjYW4gYWxpYXMgYQorCQkgKiBjdXJyZW50bHktbG9hZGVkIHJhbmdlIChm YWxzZSBwb3NpdGl2ZSkuICBDb25maXJtIGJ5IGNoZWNraW5nCisJCSAqIHdoZXRoZXIgdGhlIGJh dGNoIHBvaW50ZXIgaW4gbWFya1Bvcy0+YmF0Y2gncyBzbG90IHN0aWxsIG1hdGNoZXMuCisJCSAq LworCQlmcmVlTWFya0JhdGNoID0gKGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgbWFya1Bvcy0+YmF0 Y2gpICE9IG1hcmtCYXRjaCk7CisJfQorCisJaWYgKGZyZWVNYXJrQmF0Y2gpCisJCXJlbGVhc2Vf YW5kX3VuZ3VhcmRfYmF0Y2goc2NhbiwgbWFya0JhdGNoLCB0cnVlKTsKKworCS8qIGNvcHkgdGhl IHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpzY2FuUG9zOwor CWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgorICogUmVzdG9y ZSBzY2FuUG9zIHRvIHRoZSBwcmV2aW91c2x5IHNhdmVkIG1hcmtQb3MgcG9zaXRpb24uCisgKgor ICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfcmVzdHJwb3MgY2FsbGJh Y2suICBSZXN0b3JlcyB0aGUKKyAqIHNjYW4gdG8gYSBwb3NpdGlvbiBzYXZlZCB1c2luZyB0YWJs ZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zIGVhcmxpZXIuCisgKiBUaGUgc2NhbidzIG1hcmtQ b3MgYmVjb21lcyBpdHMgc2NhblBvcy4gIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVzdG9yZWQgYXMK KyAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KKyAqCisgKiBXZSBqdXN0IGRp c2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRj aCksCisgKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJl bnQgc2NhbkJhdGNoLgorICoKKyAqIE5vdGU6IFRoaXMgcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgc2NhblBvcy4KKyAqIFRhYmxlIEFNcyBzaG91 bGQgb25seSBjYWxsIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQgZnJvbSB3aXRoaW4gdGhl aXIKKyAqIHNjYW4ncyBpbmRleF9mZXRjaF9yZXNldCBjYWxsYmFjayB0byBhdm9pZCBicmVha2lu ZyB0aGlzIGFzc3VtcHRpb24uCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVz dG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hy aW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9z ID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQ b3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9 IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJQXNzZXJ0KHNjYW4tPk1W Q0NTY2FuKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlBc3NlcnQobWFya1Bvcy0+ dmFsaWQpOworCisJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0 Y2ggaXMgYWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLwor CQlBc3NlcnQoc2NhblBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3Mt Pml0ZW0gPSBtYXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0 Y2ggaXMgYmVoaW5kIHNjYW5CYXRjaCwgYW5kIHNvIG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcg YnVmZmVyCisJICogYW55bW9yZS4gIFdlIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUg bWFyayB0aGUgaGFyZCB3YXk6IGJ5CisJICogaW52YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQg YmF0Y2hlcy4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2Fu IGRpcmVjdGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0 Y2gvaW5kZXggcGFnZSBib3VuZGFyaWVzIChzZWUgdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJj aGFuZ2UpLgorCSAqCisJICogRmlyc3QsIGZyZWUgYWxsIGJhdGNoZXMgdGhhdCBhcmUgc3RpbGwg aW4gdGhlIHJpbmcgYnVmZmVyLgorCSAqLworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+ aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRl eFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJQXNzZXJ0 KGJhdGNoICE9IG1hcmtCYXRjaCk7CisKKwkJdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nh biwgYmF0Y2gpOworCX0KKworCS8qCisJICogTmV4dCAiYXBwZW5kIiBzdGFuZGFsb25lIG1hcmtC YXRjaCwgd2hpY2ggd2lsbCBiZWNvbWUgc2NhbkJhdGNoCisJICogKHNjYW5CYXRjaCBpcyBhbHdh eXMgdGhlIHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNoKQorCSAqLworCW1hcmtQb3MtPmJhdGNoID0g MDsKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5l eHRCYXRjaCA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5k ZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7 CisKKwkvKgorCSAqIEZpbmFsbHksIGNhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25v dyB0byBpbnZhbGlkYXRlIGFueSBwcml2YXRlCisJICogc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5 IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisJICovCisJaWYgKHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0 Y2guZGVhZEl0ZW1zW10gbWlnaHQgYWxyZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZCBtaWdo dAorCSAqIHlldCBoYXZlIG1vcmUgZGVhZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9yZWxl YXNlX2JhdGNoIGlzIHByZXBhcmVkCisJICogZm9yIHRoYXQuCisJICovCit9CisKKy8qCisgKiBI YW5kbGUgY3Jvc3MtYmF0Y2ggY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uCisgKgorICogQ2FsbGVk IGJ5IHRhYmxlIEFNIHdoZW4gaXRzIHNjYW4gY2hhbmdlcyBkaXJlY3Rpb24gaW4gYSB3YXkgdGhh dAorICogbmVjZXNzaXRhdGVzIGJhY2tpbmcgdGhlIHNjYW4gdXAgdG8gYW4gaW5kZXggcGFnZSBv cmlnaW5hbGx5IGFzc29jaWF0ZWQKKyAqIHdpdGggYSBub3ctZnJlZWQgYmF0Y2guCisgKgorICog V2hlbiB3ZSByZXR1cm4sIGJhdGNocmluZ2J1ZiB3aWxsIG9ubHkgY29udGFpbiBvbmUgYmF0Y2gg KHRoZSBjdXJyZW50CisgKiBoZWFkQmF0Y2gvc2NhbkJhdGNoKSBhbmQgd2lsbCBsb29rIGFzIGlm IHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4KKyAqIHVzZWQgZnJvbSB0aGUgc3RhcnQu ICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5IHBhc3MgdGhpcyBiYXRjaCB0byBhbWdldGJhdGNoCisg KiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGly ZWN0aW9uLiAgVGhpcworICogYXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwg YnV0IGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciB3aGF0CisgKiBvdWdodCB0byBiZSBhIHJlbGF0 aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfc2NhbmJhdGNo X2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRj aHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aDsKKworCS8qCisJICogUmVsZWFzZSBiYXRjaGVzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQg InRhaWwiIGJhdGNoLCB3b3JraW5nCisJICogYmFja3dhcmRzIHVudGlsIHRoZSBjdXJyZW50IGhl YWQgYmF0Y2ggKHdoaWNoIGlzIGFsc28gdGhlIGN1cnJlbnQKKwkgKiBzY2FuQmF0Y2gpIGlzIHRo ZSBvbmx5IGJhdGNoIGhhc24ndCBiZWVuIGZyZWVkCisJICovCisJd2hpbGUgKGluZGV4X3NjYW5f YmF0Y2hfY291bnQoc2NhbikgPiAxKQorCXsKKwkJdWludDgJCXRhaWxpZHggPSBiYXRjaHJpbmdi dWYtPm5leHRCYXRjaCAtIDE7CisJCUluZGV4U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9zY2FuX2Jh dGNoKHNjYW4sIHRhaWxpZHgpOworCisJCUFzc2VydCh0YWlsaWR4ICE9IGJhdGNocmluZ2J1Zi0+ c2NhblBvcy5iYXRjaCk7CisKKwkJdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgdGFp bCk7CisJCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2NhbkJhdGNoIGlz IG5vdyB0aGUgb25seSBiYXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKwlzY2FuQmF0Y2gg PSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCS8q CisJICogRmxpcCBzY2FuQmF0Y2gncyBzY2FuIGRpcmVjdGlvbiB0byByZWZsZWN0IHRoZSByZXZl cnNhbC4gIEFsc28gcmVzZXQKKwkgKiBhbnkgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVu dGx5IHRyYWNrcyBzY2FuIHByb2dyZXNzLgorCSAqLworCXNjYW5CYXRjaC0+ZGlyID0gLXNjYW5C YXRjaC0+ZGlyOworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNl dCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2Nhbiwgc2Nh bkJhdGNoKTsKK30KKworLyoKKyAqIFJlY29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisg KgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2NhbkJhdGNoL3NjYW5Qb3Mg aXRlbSwgc2F2aW5nIGl0IGluCisgKiBzY2FuQmF0Y2gncyBkZWFkSXRlbXMgYXJyYXkuICBUaGUg aXRlbXMnIGluZGV4IHR1cGxlcyB3aWxsIGxhdGVyIGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVu IGN1cnJlbnQgc2NhbkJhdGNoIGlzIGZyZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfc2Nh bnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAq c2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBz Y2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWlm IChzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9 IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gt Pm51bURlYWQgPCBzY2FuLT5tYXhpdGVtc2JhdGNoKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtc1tz Y2FuQmF0Y2gtPm51bURlYWQrK10gPSBzY2FuUG9zLT5pdGVtOworfQorCisvKgorICogUmVsZWFz ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFi bGUgQU0ncyBhbWdldGJhdGNoIGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcwor ICogZmluaXNoZWQgd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3Vy Y2VzLgorICoKKyAqIENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBiYXRjaHJpbmdi dWYubWFya0JhdGNoIGlzIGEgbm8tb3AuICBUYWJsZQorICogQU0gY2FsbGVycyBnZW5lcmFsbHkg d29uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGJlY2F1c2UgaXQgaXMgaGFuZGxlZAorICog YXMgYSBzcGVjaWFsIGNhc2UgYnkgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSAoYmVzaWRl cywgdGhlIHNjYW4gY2FuCisgKiBvbmx5IGhhdmUgb25lIG1hcmtCYXRjaCBhdCBhIHRpbWUpLgor ICoKKyAqIFdlIGNhbGwgYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJlY3ljbGluZyBp bnRlcmxvY2sgKGUuZy4gYnVmZmVyCisgKiBwaW4pIHdoZW4gaXQgaGFzbid0IGJlZW4gZHJvcHBl ZCB5ZXQuICBGb3IgcGxhaW4gTVZDQyBzY2FucyAod2hlcmUKKyAqIGJhdGNoSW1tZWRpYXRlVW5n dWFyZCBpcyBzZXQpLCB0aGUgaW50ZXJsb2NrIHdhcyBhbHJlYWR5IGRyb3BwZWQgZWFnZXJseQor ICogaW4gaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaCwgc28gd2Ugc2tpcCB0aGUgYW11bmd1YXJk YmF0Y2ggY2FsbCBoZXJlLgorICogSW5kZXgtb25seSBzY2FucyBtdXN0IGRlbGF5IGRyb3BwaW5n IHRoZSBpbnRlcmxvY2sgdW50aWwgdmlzaWJpbGl0eSBpcworICogcmVzb2x2ZWQgZm9yIGFsbCBp dGVtcyBpbiB0aGUgYmF0Y2gsIHNvIGFtdW5ndWFyZGJhdGNoIG1heSBzdGlsbCBuZWVkIHRvCisg KiBhY3QgaGVyZS4gIEZvciBub24tTVZDQyBzbmFwc2hvdCBzY2FucywgdGhlIGludGVybG9jayBp cyBhbHdheXMgaGVsZAorICogdW50aWwgYW11bmd1YXJkYmF0Y2ggZHJvcHMgaXQgaGVyZSAtLSB0 aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdpbGxpbmcgdG8KKyAqIHVuZ3VhcmQgYSBub24tTVZDQyBz Y2FuJ3MgYmF0Y2guCisgKgorICogV2hlbiB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURl YWQgPiAwKSBhbmQgdGhlIGluZGV4IEFNIHByb3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNo IGNhbGxiYWNrLCB3ZSBjYWxsIGl0IHRvIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4Cisg KiBwYWdlLiAgVGhpcyBpcyB0aGUgbmF0dXJhbCBwbGFjZSB0byBraWxsIGluZGV4IGl0ZW1zIGJl Y2F1c2UgaXQncyB0aGUKKyAqIHBvaW50IHdoZW4gd2Uga25vdyBmb3Igc3VyZSB0aGF0IG5vIGZ1 cnRoZXIgdGFibGUgYWNjZXNzZXMgd2lsbCB0YWtlCisgKiBwbGFjZSBmb3IgdGhhdCBiYXRjaCdz IGl0ZW1zLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGRvbid0IGZyZWUgY2FsbGVy J3MgYmF0Y2ggaWYgaXQgaXMgc2NhbidzIGN1cnJlbnQgbWFya0JhdGNoICovCisJaWYgKGJhdGNo ID09IHNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCS8qIFBhc3Mg dGhyb3VnaCB0byBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiwgd2l0aCBhbGxvd19jYWNoZT10cnVl ICovCisJcmVsZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCwgdHJ1ZSk7Cit9CisK Ky8qCisgKiBGcmVlIGEgYmF0Y2gsIG9wdGlvbmFsbHkgY2FjaGluZyBpdCBmb3IgcmV1c2UuCisg KgorICogV2hlbiBhbGxvd19jYWNoZSBpcyB0cnVlLCB3ZSB0cnkgdG8gc3RvcmUgdGhlIGJhdGNo IGluIHRoZSBzY2FuJ3MgYmF0Y2gKKyAqIGNhY2hlIGZvciBsYXRlciByZXVzZS4gIFdoZW4gYWxs b3dfY2FjaGUgaXMgZmFsc2UgKHR5cGljYWxseSBiZWNhdXNlIHRoZQorICogc2NhbiBpcyBzaHV0 dGluZyBkb3duKSwgd2UgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIHVuY29uZGl0aW9uYWxseS4K KyAqLworc3RhdGljIHZvaWQKK3JlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCSAgYm9vbCBhbGxvd19jYWNoZSkK K3sKKwlBc3NlcnQoIShzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3Vh cmRlZCkpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkIHx8IHNjYW4tPk1WQ0NTY2FuKTsKKwor CS8qIERyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJhdGNoIGFzIG5l ZWRlZCAqLworCWlmICghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5pc0d1 YXJkZWQpCisJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKworCS8q CisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleCBwYWdl LCBpZiBhcHBsaWNhYmxlLgorCSAqCisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMgbm93IGluIHdo YXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdlIG1pZ2h0IGhh dmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQgYW5k IHVuaXF1ZS1pZnkgZGVhZEl0ZW1zW10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNhZmVs eQorCSAqIGFzc3VtZSB0aGF0IGl0ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdpbmFs IGluZGV4IHBhZ2Ugb3JkZXIuCisJICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4gMCAmJgorCQlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAhPSBOVUxMKQor CXsKKwkJaWYgKGJhdGNoLT5udW1EZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0Y2gtPmRlYWRJ dGVtcywgYmF0Y2gtPm51bURlYWQsIHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hfY29tcGFyZV9p bnQpOworCQkJYmF0Y2gtPm51bURlYWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNo LT5udW1EZWFkLAorCQkJCQkJCQkJIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7CisJ CX0KKworCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaChz Y2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2gg aW4gdGhpcyBhbWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFz ZWQgYmF0Y2hlcyBmaXJzdCAod2hlbiBjYWxsZXIgcmVxdWVzdHMgaXQpCisJICovCisJaWYgKGFs bG93X2NhY2hlICYmIGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJcmV0dXJuOwor CisJLyoganVzdCBwZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKHBsdXMgYmF0Y2gncyBkZWFkSXRl bXMsIGlmIGFueSkgKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRl YWRJdGVtcyk7CisJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKSk7Cit9 CisKKy8qCisgKiBEcm9wIHRoZSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBh bXVuZ3VhcmRiYXRjaAorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNh ZmUgdG8gZHJvcCB3aGF0ZXZlciBpbnRlcmxvY2sgdGhlIGluZGV4CisgKiBBTSBob2xkcyB0byBw cmV2ZW50IHVuc2FmZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNICh0eXBpY2Fs bHkgYQorICogYnVmZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBwYWdlIGluIGJhdGNoJ3Mg b3BhcXVlIGFyZWEpLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIFNob3VsZCBiZSBj YWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0 KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVk KTsKKworCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXVuZ3VhcmRiYXRjaChzY2Fu LCBiYXRjaCk7CisKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7Cit9CisKKy8qCisgKiBVbmxv Y2sgYmF0Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrCisgKgorICogVW5sb2NrcyB0aGUgZ2l2 ZW4gYnVmZmVyIGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVybmluZyBpdGVtcwor ICogc2F2ZWQgaW4gdGhhdCBiYXRjaC4gIFBlcmZvcm1zIGV4dHJhIHN0ZXBzIHJlcXVpcmVkIGJ5 IGFtZ2V0YmF0Y2ggY2FsbGVycworICogaW4gcGFzc2luZy4KKyAqCisgKiBPbmx5IGNhbGwgaGVy ZSB3aGVuIGEgYmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHRvIHJldHVybiB1 c2luZworICogYW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFwIHRvIGxvYWQgaW50byBpdHMg Yml0bWFwIG9mIG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBpbmRleCBwYWdlIGhhcyBubyBt YXRjaGVzLCBpdCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMgdG8gZHJvcAorICogYm90aCB0 aGUgbG9jayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAqCisgKiBOb3RlOiBJdCBpcyBj b252ZW5pZW50IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQgYm90aCBhbWdldGJhdGNoIGFu ZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5h Z2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lh bCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisgKiB0aGUgbG9jayBh bmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxl cnMuCisgKgorICogRm9yIGFtZ2V0YmF0Y2ggY2FsbGVycywgd2hlbiBiYXRjaEltbWVkaWF0ZVVu Z3VhcmQgaXMgc2V0IChwbGFpbiBNVkNDCisgKiBzY2FucyksIHdlIGFsc28gcmVsZWFzZSB0aGUg cGluIGhlcmUgKHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayksIHNvCisgKiB0aGF0IG5vIGxh dGVyIGFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdpbGwgYmUgbmVlZGVkLiAgT3RoZXJ3aXNlIHRo ZSB0YWJsZQorICogQU0gd2lsbCBjYWxsIGFtdW5ndWFyZGJhdGNoIGxhdGVyIHdoZW4gaXQncyBz YWZlIHRvIGRyb3AgdGhlIGludGVybG9jay4KKyAqCisgKiBJbmRleCBBTXMgd2hvc2UgVElEIHJl Y3ljbGluZyBpbnRlcmxvY2sgaXMgbm90IGp1c3QgYSBidWZmZXIgcGluLCBvciB3aG9zZQorICog YW11bmd1YXJkYmF0Y2ggZG9lcyBub3Qgc2ltcGx5IHJlbGVhc2UgYSBwaW4sIGFyZSBub3Qgb2Js aWdhdGVkIHRvIHVzZSB0aGlzCisgKiBmdW5jdGlvbi4gIFRoZXkgY2FuIGltcGxlbWVudCB0aGVp ciBvd24gZXF1aXZhbGVudC4gIFN1Y2ggaW5kZXggQU1zIGFyZSBhbHNvCisgKiBmcmVlIHRvIHVz ZSB0aGUgYmF0Y2ggTFNOIGZpZWxkIHRoZW1zZWx2ZXM7IHRoZWlyIGFta2lsbGl0ZW1zYmF0Y2gg cm91dGluZQorICogY2FuIHVzZSB0aGF0IExTTiBpbiB0aGUgdXN1YWwgd2F5LCBvciBpbiB3aGF0 ZXZlciB3YXkgdGhlIEFNIGRlZW1zIG5lY2Vzc2FyeQorICogKGNvcmUgY29kZSB3aWxsIG5vdCB1 c2UgaXQgZm9yIGFueSBvdGhlciBwdXJwb3NlKS4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX3Vu bG9ja19iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBCdWZm ZXIgYnVmKQoreworCS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVt cyByZXR1cm5lZCBieSBpbmRleCBBTSAqLworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAg JiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJaWYgKHNjYW4tPnVz ZWJhdGNocmluZykKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkgY2FsbGVy ICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJLyoKKwkJICog SGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFta2lsbGl0ZW1zYmF0Y2ggaGFzIGEgd2F5 IHRvIGRldGVjdAorCQkgKiB3aGVuIGNvbmN1cnJlbnQgdGFibGUgVElEIHJlY3ljbGluZyBieSBW QUNVVU0gbWlnaHQgaGF2ZSB0YWtlbgorCQkgKiBwbGFjZS4gIEl0J2xsIG9ubHkgYmUgc2FmZSB0 byBzZXQgYW55IGluZGV4IHR1cGxlIExQX0RFQUQgYml0cyB3aGVuCisJCSAqIHRoZSBwYWdlIExT TiBoYXNuJ3QgYWR2YW5jZWQuCisJCSAqCisJCSAqIFBsYWluIE1WQ0Mgc2NhbnMgKGJhdGNoSW1t ZWRpYXRlVW5ndWFyZCkgYWxzbyByZWxlYXNlIHRoZSBwaW4gbm93LAorCQkgKiBkcm9wcGluZyB0 aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgc28gdGhhdCBubyBhbXVuZ3VhcmRiYXRjaAorCQkg KiBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZCBsYXRlci4gIFRoZSBpbmRleCBBTSBjYWxsZXIgbXVz dCBjbGVhciBpdHMKKwkJICogb3duIG9wYXF1ZSBidWYgZmllbGQgYWZ0ZXIgd2UgcmV0dXJuLgor CQkgKgorCQkgKiBOb24taW1tZWRpYXRlLXVuZ3VhcmQgc2NhbnMgcmV0YWluIHRoZSBwaW47IHRo ZSB0YWJsZSBBTSB3aWxsIGNhbGwKKwkJICogYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgaW50 ZXJsb2NrIHdoZW4gcmVhZHkuCisJCSAqLworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRv bWljKGJ1Zik7CisJCWlmIChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpCisJCXsKKwkJCS8q IGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWYpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoganVzdCBkcm9wIHRoZSBsb2NrIChob2xk IG9uIHRvIGludGVybG9jayBwaW4pICovCisJCQlVbmxvY2tCdWZmZXIoYnVmKTsKKwkJfQorCisJ CS8qIElmIHdlIHJlbGVhc2VkIGJ1ZmZlciBwaW4sIGJhdGNoIGlzIG5vdyB1bmd1YXJkZWQgKi8K KwkJYmF0Y2gtPmlzR3VhcmRlZCA9ICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ7CisJfQor CWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIChub3QgYW1nZXRiYXRjaCkgY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisKKwkJLyogZHJvcCBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluICovCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwl9Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1z IHRoYXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRj aAorICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJh dGNoIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hN YXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0 ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQg YnkgaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2guICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGlu ZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoLgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1 Ziwga25vd25FbmRCYWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVt RGVhZCwgZGVhZEl0ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0 YWJsZSBBTSdzCisgKiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0 aWFsaXplIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIg aXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZp ZWxkcyBhbmQgdGhlIG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgorICogT25jZSB0aGUgYmF0 Y2ggaGFzIHRoZSByZXF1aXJlZCBtYXRjaGluZyBpdGVtcywgY2FsbGVyIHNob3VsZCBnZW5lcmFs bHkKKyAqIHBhc3MgaXQgdG8gaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaCwgYWhlYWQgb2YgaXQg YmVpbmcgcmV0dXJuZWQgdGhyb3VnaAorICogaW5kZXggQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUu ICBJZiBpdCB0dXJucyBvdXQgdGhhdCB0aGUgYmF0Y2ggd29uJ3QgbmVlZAorICogdG8gYmUgcmV0 dXJuZWQgbGlrZSB0aGlzIChlLmcuLCBkdWUgdG8gdGhlIHNjYW4gaGF2aW5nIG5vIG1vcmUgbWF0 Y2hlcyksCisgKiBjYWxsZXIgc2hvdWxkIHBhc3MgaXRzIGVtcHR5L3VudXNlZCBiYXRjaCB0byBp bmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaC4KKyAqLworSW5kZXhTY2FuQmF0Y2gKK2luZGV4YW1f dXRpbF9hbGxvY19iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuQmF0Y2gg YmF0Y2ggPSBOVUxMOworCWJvb2wJCW5ld19hbGxvYyA9IGZhbHNlOworCisJLyogSW5kZXggQU0g bXVzdCBoYXZlIHNldCBpdHMgb3BhcXVlIHNwYWNlIHRvIHNvbWV0aGluZyBhbHJlYWR5ICovCisJ QXNzZXJ0KHNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID4gMCk7CisJQXNzZXJ0KHNjYW4t PmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID09CisJCSAgIE1BWEFMSUdOKHNjYW4tPmJhdGNoX2lu ZGV4X29wYXF1ZV9zaXplKSk7CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRj aCBmcm9tIHRoZSBjYWNoZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3Ig KGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlp ZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSAhPSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNo ZWQgdW5yZWZlcmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlW2ld OworCQkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9 CisJfQorCWVsc2UgaWYgKHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCS8qCisJ CSAqIFJldXNlIGNhY2hlZCBiYXRjaCBmcm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4g IFRoaXMgcGF0aCBpcworCQkgKiBoaXQgb24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFm dGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJCSAqLworCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVb MF07CisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBOVUxMOworCX0KKworCWlmICghYmF0Y2gpCisJ eworCQlzaXplX3QJCW9wYXF1ZV9hcmVhc19wcmVmaXhfc3osCisJCQkJCWJhc2Vfc3osCisJCQkJ CWlvc190YWJsZV90cmFpbGluZ19zeiwKKwkJCQkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6LAorCQkJ CQlhbGxvY3N6OworCQljaGFyCSAgICpyYXdfYmF0Y2hfYWxsb2M7CisKKwkJLyoKKwkJICogTGF6 aWx5IGNvbXB1dGUgYmF0Y2hfYmFzZV9vZmZzZXQgb24gZmlyc3QgY2FsbCBoZXJlIGZvciBzY2Fu LgorCQkgKgorCQkgKiBUaGlzIGNvbWJpbmVzIHRoZSBmaXhlZC1zaXplIHRhYmxlIEFNIGFuZCBp bmRleCBBTSBvcGFxdWUgc2l6ZXMKKwkJICogaW50byBhIHNpbmdsZSBvZmZzZXQgdGhhdCBjYW4g YmUgdXNlZCB0byBmaW5kIHRoZSB0cnVlIGFsbG9jYXRpb24KKwkJICogYmFzZSBmcm9tIHRoZSBi YXRjaCBwb2ludGVyLiAoVGhpcyBpcyBhbHNvIHdoZXJlIHRoZSBmaXhlZC1zaXplZAorCQkgKiB0 YWJsZSBBTSBvcGFxdWUgYXJlYSBjYW4gYmUgZm91bmQuKQorCQkgKi8KKwkJaWYgKHNjYW4tPmJh dGNoX2Jhc2Vfb2Zmc2V0ID09IDApCisJCXsKKwkJCXVpbnQxNgkJdGFibGVfb3BhcXVlID0gc2Nh bi0+eHNfaGVhcGZldGNoID8KKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX29wYXF1ZV9z aXplIDogMDsKKworCQkJc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPSB0YWJsZV9vcGFxdWUgKwor CQkJCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplOworCQl9CisKKwkJLyoKKwkJICogU3Vi dG90YWwgIzE6IHRoZSBzaXplIG9mIGJvdGggZml4ZWQtc2l6ZSBBTSBvcGFxdWUgYXJlYXMgbG9j YXRlZAorCQkgKiBiZWZvcmUgdGhlIHN0YXJ0IG9mIEluZGV4U2NhbkJhdGNoRGF0YQorCQkgKi8K KwkJb3BhcXVlX2FyZWFzX3ByZWZpeF9zeiA9IHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0OworCQlB c3NlcnQob3BhcXVlX2FyZWFzX3ByZWZpeF9zeiA9PSBNQVhBTElHTihvcGFxdWVfYXJlYXNfcHJl Zml4X3N6KSk7CisKKwkJLyogU3VidG90YWwgIzI6IEluZGV4U2NhbkJhdGNoRGF0YSBhbmQgaXRz IGl0ZW1zW21heGl0ZW1zYmF0Y2hdICovCisJCWJhc2Vfc3ogPSBNQVhBTElHTihvZmZzZXRvZihJ bmRleFNjYW5CYXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCQkgICBzaXplb2YoQmF0Y2hNYXRjaGlu Z0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisKKwkJLyoKKwkJICogVHJhaWxpbmcgZGF0 YSBhZnRlciBpdGVtc1tdIHVzZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnM6IHBlci1pdGVtCisJ CSAqIGRhdGEgKG93bmVkIGJ5IHRhYmxlIEFNKSwgdGhlbiBjdXJyVHVwbGVzIHdvcmtzcGFjZSAo b3duZWQgYnkgaW5kZXgKKwkJICogQU0sIHJlYWQgYnkgdGFibGUgQU0pCisJCSAqLworCQlpb3Nf dGFibGVfdHJhaWxpbmdfc3ogPSAwOworCQlpb3NfdG90YWxfdHJhaWxpbmdfc3ogPSAwOworCQlp ZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKgorCQkJICogV2UgYXZvaWQgYXNzdW1p bmcgdGhhdCB0YWJsZSBBTSBhY3R1YWxseSByZXF1aXJlcyBhbnkgcGVyLWl0ZW0KKwkJCSAqIHRy YWlsaW5nIHNwYWNlIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zCisJCQkgKi8KKwkJCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCWlvc190YWJsZV90 cmFpbGluZ19zeiA9CisJCQkJCU1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVy X2l0ZW1fc2l6ZSAqCisJCQkJCQkJIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJaW9zX3RvdGFs X3RyYWlsaW5nX3N6ICs9IGlvc190YWJsZV90cmFpbGluZ19zejsKKworCQkJLyoKKwkJCSAqIEFu IGluZGV4LW9ubHkgc2NhbiB3aWxsIGFsd2F5cyBuZWVkIGEgY3VyclR1cGxlcyBzcGFjZSwgaG93 ZXZlcgorCQkJICovCisJCQlpb3NfdG90YWxfdHJhaWxpbmdfc3ogKz0gc2Nhbi0+YmF0Y2hfdHVw bGVzX3dvcmtzcGFjZTsKKworCQkJLyoKKwkJCSAqIFN1YnRvdGFsICMzOiBUaGUgY29tYmluZWQg c2l6ZSBvZiBib3RoIGluZGV4LW9ubHkgc2NhbiB0cmFpbGluZworCQkJICogYXJlYXMgKGlvc190 b3RhbF90cmFpbGluZ19zeikKKwkJCSAqLworCQkJcGdfYXNzdW1lKGlvc190b3RhbF90cmFpbGlu Z19zeiA+IDApOworCQkJQXNzZXJ0KGlvc190b3RhbF90cmFpbGluZ19zeiA9PSBNQVhBTElHTihp b3NfdG90YWxfdHJhaWxpbmdfc3opKTsKKwkJfQorCisJCUFzc2VydChzY2FuLT54c193YW50X2l0 dXAgfHwgaW9zX3RvdGFsX3RyYWlsaW5nX3N6ID09IDApOworCisJCS8qIFRvdGFsIGJhdGNoIGFs bG9jYXRpb24gc2l6ZSBpcyB0aGUgc3VtIG9mIG91ciB0aHJlZSBzdWJ0b3RhbHMgKi8KKwkJYWxs b2NzeiA9IG9wYXF1ZV9hcmVhc19wcmVmaXhfc3ogKyBiYXNlX3N6ICsgaW9zX3RvdGFsX3RyYWls aW5nX3N6OworCQlyYXdfYmF0Y2hfYWxsb2MgPSBwYWxsb2MoYWxsb2Nzeik7CisJCWJhdGNoID0g KEluZGV4U2NhbkJhdGNoKSAocmF3X2JhdGNoX2FsbG9jICsgb3BhcXVlX2FyZWFzX3ByZWZpeF9z eik7CisJCUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpID09IHJhd19i YXRjaF9hbGxvYyk7CisKKwkJLyogY3VyclR1cGxlcyAoaWYgYW55KSBpcyBkaXJlY3RseSBhZnRl ciBJb1MgdHJhaWxpbmcgdGFibGUgc3BhY2UgKi8KKwkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxM OworCQlpZiAoaW9zX3RvdGFsX3RyYWlsaW5nX3N6KQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSAo Y2hhciAqKSBiYXRjaCArIGJhc2Vfc3ogKyBpb3NfdGFibGVfdHJhaWxpbmdfc3o7CisJCUFzc2Vy dCghc2Nhbi0+eHNfd2FudF9pdHVwIHx8IGJhdGNoLT5jdXJyVHVwbGVzICE9IE5VTEwpOworCisJ CS8qCisJCSAqIEJhdGNoZXMgZ2V0IHRoZWlyIG93biBwYWxsb2MnZCBkZWFkSXRlbXMgYXMgbmVl ZGVkICh0aG91Z2ggY2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBkZWFkSXRlbXMgYWxs b2NhdGlvbiB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmRlYWRJdGVtcyA9IE5VTEw7 CisJCW5ld19hbGxvYyA9IHRydWU7CisJfQorCisJLyogV2UgaGFkIGJldHRlciBoYXZlIGNvbXB1 dGVkIGJhdGNoX2Jhc2Vfb2Zmc2V0IGJ5IG5vdyAqLworCUFzc2VydChzY2FuLT5iYXRjaF9iYXNl X29mZnNldCA+IDApOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBpbml0aWFsaXplIGl0cyBwZXIt YmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQorCQl0YWJsZV9p bmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworCisJLyogc2hh cmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBmYWxzZTsK KwliYXRjaC0+a25vd25FbmRGb3J3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmlzR3VhcmRlZCA9IGZh bHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwli YXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNl IGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4 IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYWxs b2NfYmF0Y2guICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVkdWNlCisg KiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBi YXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0 IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVy bmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZv ciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5 IHRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQor ICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBB TXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0 Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAq CisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFt Z2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGlu IGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4 YW1fdXRpbF9yZWxlYXNlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdl dGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJl IHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0 aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChz Y2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9u ID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0 KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBi YXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwlB c3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJLyoKKwkgKiBUcnkgdG8gc3Rv cmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAq IHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAorCSAqLworCWlmIChiYXRjaF9jYWNo ZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIENhY2hlIGZ1bGw7IGp1c3Qg ZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZy ZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4s IGJhdGNoKSk7Cit9CisKKy8qCisgKiBUcnkgdG8gc3RvcmUgYSBiYXRjaCBpbiB0aGUgc2Nhbidz IGJhdGNoIGNhY2hlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIGZyZWUgc2xvdCB3YXMgZm91 bmQsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyBmdWxsLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2JhdGNoX2NhY2hlX3N0b3JlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkr KykKKwl7CisJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ldID09IE5VTEwpCisJCXsKKwkJCXNjYW4t PmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50 IGFycmF5cworICovCitzdGF0aWMgaW50CitiYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2 YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7CisJ aW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7CisKKwlyZXR1cm4gcGdfY21wX3MzMihhLCBi KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRleCBkYTY0Y2I1OTUuLjgz ZGZhM2YyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxk CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZApAQCAtNSw0ICs1LDUg QEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0ZS5jJywKICAgJ2dlbmFt LmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiApCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvUkVBRE1FCmluZGV4IGNiOTIxY2EyZS4uYTM3ODY5YjcxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L1JFQURNRQpAQCAtMTc5LDE4ICsxNzksMTUgQEAgaG9sZCBvbiB0byB0aGUgcGluICh1c2VkIHdo ZW4gcmVhZGluZyBmcm9tIHRoZSBsZWFmIHBhZ2UpIHVudGlsIF9hZnRlcl8KIHRoZXkncmUgZG9u ZSB2aXNpdGluZyB0aGUgaGVhcCAoZm9yIFRJRHMgZnJvbSBwaW5uZWQgbGVhZiBwYWdlKSBwcmV2 ZW50cwogY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgVkFDVVVNIGNhbm5vdCBnZXQgYSBjb25m bGljdGluZyBjbGVhbnVwIGxvY2sKIHVudGlsIHRoZSBpbmRleCBzY2FuIGlzIHRvdGFsbHkgZmlu aXNoZWQgcHJvY2Vzc2luZyBpdHMgbGVhZiBwYWdlLgorVGhpcyBpcyByZXF1aXJlZCBieSBhbnkg aW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRoZSBhbWdldGJhdGNoCitpbnRlcmZhY2UuICAoU2Vl IGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwpLgogCi1UaGlzIGFwcHJvYWNoIGlzIGZh aXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0IHdoZW5ldmVyIHBvc3NpYmxlLiAgSW4KLXByYWN0 aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3QgaG9sZCBvbnRvIHRoZWlyIHBpbiwgYW5kIHNvIHdv bid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBpbmRleCBzY2FucyBtdXN0IGRlYWwgd2l0aCBUSUQg cmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBpcwotbW9yZSBjb21wbGljYXRlZCBhbmQgbm90IGFs d2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBzZWN0aW9uIG9uIG1ha2luZwotY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHNhZmUuCi0KLU9wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24g cGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBhZ2UtbGV2ZWwKLW1vZGlmaWNhdGlvbnMgd2hpbGUg b25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2UKLXRo ZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIGxhdGVyIG9u IC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBTZWUgYWxzbyBzaW1w bGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAotZGVsZXRpb24sIGJlbG93LgorT3Bwb3J0dW5pc3Rp YyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBwYWdlLWxldmVsCittb2Rp ZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2Nr LiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5 Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkKK1ZBQ1VVTSBjYW4gbWFrZSBUSURzIHJlY3ljbGFi bGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVNJ3MgY2xlYW51cCBsb2NrCitzZXJ2ZXMgdG8gcHJv dGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2FucyBmcm9tIGNvbmN1cnJlbnQgVElEIHJlY3ljbGlu ZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90ZWN0IHRoZSBCLVRyZWUgc3RydWN0dXJlIGl0c2Vs Zi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3QgYWx3YXlzIGhlbGQsIGFuZCBhIHBhZ2UgY2FuIGJl IHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUgZG9lcyBob2xkIGEgcGluIG9uIGl0LCBpdCBpcyBw b3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3aWxsCkBAIC00NDAsNTQgKzQzNyw2IEBAIHdoZW5l dmVyIGl0IGlzIHN1YnNlcXVlbnRseSB0YWtlbiBmcm9tIHRoZSBGU00gZm9yIHJldXNlLiAgVGhl IGRlbGV0ZWQKIHBhZ2UncyBjb250ZW50cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBzcGxp dCBvcGVyYXRpb24gKGl0IHdpbGwgYmVjb21lCiB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgcGFnZSku CiAKLU1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZQotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIGV4cGxhaW5lZCBpbiB0aGUgZWFybGllciBzZWN0 aW9uIGFib3V0IGRlbGV0aW5nIGluZGV4IHR1cGxlcyBkdXJpbmcKLVZBQ1VVTSwgd2UgaW1wbGVt ZW50IGEgbG9ja2luZyBwcm90b2NvbCB0aGF0IGFsbG93cyBpbmRpdmlkdWFsIGluZGV4IHNjYW5z Ci10byBhdm9pZCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBJbmRleCBzY2FucyBvcHQtb3V0 IChhbmQgc28gZHJvcCB0aGVpcgotbGVhZiBwYWdlIHBpbiB3aGVuIHZpc2l0aW5nIHRoZSBoZWFw KSB3aGVuZXZlciBpdCdzIHNhZmUgdG8gZG8gc28sIHRob3VnaC4KLURyb3BwaW5nIHRoZSBwaW4g ZWFybHkgaXMgdXNlZnVsIGJlY2F1c2UgaXQgYXZvaWRzIGJsb2NraW5nIHByb2dyZXNzIGJ5Ci1W QUNVVU0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2l0aCBpbmRleCBzY2FucyB1 c2VkIGJ5IGN1cnNvcnMsCi1zaW5jZSBpZGxlIGN1cnNvcnMgc29tZXRpbWVzIHN0b3AgZm9yIHJl bGF0aXZlbHkgbG9uZyBwZXJpb2RzIG9mIHRpbWUuICBJbgotZXh0cmVtZSBjYXNlcywgYSBjbGll bnQgYXBwbGljYXRpb24gbWF5IGhvbGQgb24gdG8gYW4gaWRsZSBjdXJzb3JzIGZvcgotaG91cnMg b3IgZXZlbiBkYXlzLiAgQmxvY2tpbmcgVkFDVVVNIGZvciB0aGF0IGxvbmcgY291bGQgYmUgZGlz YXN0cm91cy4KLQotSW5kZXggc2NhbnMgdGhhdCBkb24ndCBob2xkIG9uIHRvIGEgYnVmZmVyIHBp biBhcmUgcHJvdGVjdGVkIGJ5IGhvbGRpbmcgYW4KLU1WQ0Mgc25hcHNob3QgaW5zdGVhZC4gIFRo aXMgbW9yZSBsaW1pdGVkIGludGVybG9jayBwcmV2ZW50cyB3cm9uZyBhbnN3ZXJzCi10byBxdWVy aWVzLCBidXQgaXQgZG9lcyBub3QgcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgaXRz ZWxmIChvbmx5Ci1ob2xkaW5nIG9udG8gdGhlIGxlYWYgcGFnZSBwaW4gd2hpbGUgYWNjZXNzaW5n IHRoZSBoZWFwIGVuc3VyZXMgdGhhdCkuCi0KLUluZGV4LW9ubHkgc2NhbnMgY2FuIG5ldmVyIGRy b3AgdGhlaXIgYnVmZmVyIHBpbiwgc2luY2UgdGhleSBhcmUgdW5hYmxlIHRvCi10b2xlcmF0ZSBo YXZpbmcgYSByZWZlcmVuY2VkIFRJRCBiZWNvbWUgcmVjeWNsYWJsZS4gIEluZGV4LW9ubHkgc2Nh bnMKLXR5cGljYWxseSBqdXN0IHZpc2l0IHRoZSB2aXNpYmlsaXR5IG1hcCAobm90IHRoZSBoZWFw IHByb3BlciksIGFuZCBzbyB3aWxsCi1ub3QgcmVsaWFibHkgbm90aWNlIHRoYXQgYW55IHN0YWxl IFRJRCByZWZlcmVuY2UgKGZvciBhIFRJRCB0aGF0IHBvaW50ZWQKLXRvIGEgZGVhZC10by1hbGwg aGVhcCBpdGVtIGF0IGZpcnN0KSB3YXMgY29uY3VycmVudGx5IG1hcmtlZCBMUF9VTlVTRUQgaW4K LXRoZSBoZWFwIGJ5IFZBQ1VVTS4gIFRoaXMgY291bGQgZWFzaWx5IGFsbG93IFZBQ1VVTSB0byBz ZXQgdGhlIHdob2xlIGhlYXAKLXBhZ2UgdG8gYWxsLXZpc2libGUgaW4gdGhlIHZpc2liaWxpdHkg bWFwIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICBBbiBNVkNDCi1zbmFwc2hvdCBpcyBvbmx5IHN1 ZmZpY2llbnQgdG8gYXZvaWQgcHJvYmxlbXMgZHVyaW5nIHBsYWluIGluZGV4IHNjYW5zCi1iZWNh dXNlIHRoZXkgbXVzdCBhY2Nlc3MgZ3JhbnVsYXIgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmcm9t IHRoZSBoZWFwCi1wcm9wZXIuICBBIHBsYWluIGluZGV4IHNjYW4gd2lsbCBldmVuIHJlY29nbml6 ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCi1oZWFwIChpdGVtcyB0aGF0IGNvdWxkIGJlIHJlY3lj bGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5ZXQpIGFzICJub3QKLXZpc2libGUiIC0tIGV2ZW4g d2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGFsbC12aXNpYmxlLgot Ci1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXggdHVwbGVzIGJ5IHRoZSBraWxsX3ByaW9yX3R1cGxl IG9wdGltaXphdGlvbgotKGRlc2NyaWJlZCBpbiBmdWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVs b3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRlZCBmb3IKLWluZGV4IHNjYW5zIHRoYXQgZHJvcCB0 aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11c3QgYmUgY2FyZWZ1bCB0byBhdm9pZAotTFBfREVB RC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVh ZCBpbmRleAotdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwg Zm9sbG93aW5nIGNvbmN1cnJlbnQgVElECi1yZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9z c2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24gaW5zZXJ0ZWQgYQotbmV3LCB1bnJlbGF0ZWQg aW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2ggaGFzIHRoZSBzYW1lCi1v cmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRo aXMgbmV3LAotdW5yZWxhdGVkIGluZGV4IHR1cGxlLgotCi1XZSBoYW5kbGUgdGhpcyBraWxsX3By aW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3RlZCBpbmRleAotc2NhbnMg Y29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55IGNoYW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0 IGFsbAotaW1wbGllcyB0aGF0IGl0IHdhcyByZWFjaGVkIGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUg aW50ZXJpbSBwZXJpb2Qgd2hlbiBubwotYnVmZmVyIHBpbiB3YXMgaGVsZC4gIFRoaXMgaXMgaW1w bGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQX0RFQUQgYml0cwotb24gdGhlIGxlYWYgcGFn ZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExTTiBoYXMgY2hhbmdlZC4gIChUaGlzIGlzIHdoeSB3 ZQotaW1wbGVtZW50ICJmYWtlIiBMU05zIGZvciB1bmxvZ2dlZCBpbmRleCByZWxhdGlvbnMuKQot CiBGYXN0cGF0aCBGb3IgSW5kZXggSW5zZXJ0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAKQEAgLTczNCw3ICs2ODMsNyBAQCBvZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmln aHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0 IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFs bCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFu ZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBv bGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMg YmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xk ZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVh bnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxs IHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBi aXRzLCBidXQKQEAgLTc1Niw5ICs3MDUsOCBAQCBub24tTVZDQyBzY2FucyBpcyBub3QgcmVxdWly ZWQgb24gc3RhbmRieSBub2Rlcy4gV2Ugc3RpbGwgZ2V0IGEgZnVsbAogY2xlYW51cCBsb2NrIHdo ZW4gcmVwbGF5aW5nIFZBQ1VVTSByZWNvcmRzIGR1cmluZyByZWNvdmVyeSwgYnV0IHJlY292ZXJ5 CiBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgZXZlcnkgbGVhZiBwYWdlIChvbmx5IHRob3NlIGxlYWYg cGFnZXMgdGhhdCBoYXZlCiBpdGVtcyB0byBkZWxldGUpIC0tIHRoYXQncyBzdWZmaWNpZW50IHRv IGF2b2lkIGJyZWFraW5nIGluZGV4LW9ubHkgc2NhbnMKLWR1cmluZyByZWNvdmVyeSAoc2VlIHNl Y3Rpb24gYWJvdmUgYWJvdXQgbWFraW5nIFRJRCByZWN5Y2xpbmcgc2FmZSkuIFRoYXQKLWxlYXZl cyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLiAoWFhYOiBOb3QgYWN0dWFsbHkg Y2xlYXIgd2h5Ci10aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5LikK K2R1cmluZyByZWNvdmVyeS4gVGhhdCBsZWF2ZXMgY29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRl eCBzY2Fucy4KKyhYWFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkgdGhpcyBpcyB0b3RhbGx5IHVu bmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCiAKIE1WQ0Mgc25hcHNob3QgcGxhaW4gaW5kZXgg c2NhbnMgYXJlIGFsd2F5cyBzYWZlLCBmb3IgdGhlIHNhbWUgcmVhc29ucyB0aGF0CiB0aGV5J3Jl IHNhZmUgZHVyaW5nIG9yaWdpbmFsIGV4ZWN1dGlvbi4gIEhlYXBUdXBsZVNhdGlzZmllc1RvYXN0 KCkgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCAwNTQ3MDM4NjEu LmI5YzI3OTUwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKQEAgLTEwNjAsNiAr MTA2MCw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogICogTG9jayBp cyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4gIFRoaXMgaXMgbGlrZSBh IHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBleHRyYSBzdGVwcyBuZWVk ZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTogX2J0X2JhdGNoX3VubG9jayBpbiBuYnRzZWFy Y2guYyAoaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaCB3cmFwcGVyCisgKiBmdW5jdGlvbikgaGFz IG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBsb2NrIGluc3RydW1lbnRhdGlvbi4KKyAqCiAgKiBO b3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdlKCkgd2l0aCBidWYgd2hl biBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBpbiBfYnRfZ2V0YnVm KCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCkBAIC0xMTAxLDEzICsxMTA0LDE5IEBAIF9i dF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogCSAqIEJ1ZmZlciBpcyBwaW5u ZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBleHBlY3RlZCB0byBiZQogCSAq IGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAgQ2hlY2sgdGhhdCBwcm9hY3RpdmVseS4KIAkgKi8K LQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tT Wik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7 CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIoKSBhc3NlcnRzIHRoYXQgcGluIGlzIGhlbGQgYnkg dGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAK KyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJ1Ziks IEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tTWik7Cisj ZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRl eCA0NDhhNTE0MTIuLjJjNmEzZDI2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVh ZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUK IHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hl Y2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlv biAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQg Ki8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9m ZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBs ZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMg d2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3Nj YW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs CiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rp cl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJ CQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNj YW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwg SW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nh bk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVt LCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBp dHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0J CQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOworc3RhdGlj IHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4 LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBs ZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRj aCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVt LCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkJCQkgIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0 aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9m ZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRS ZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxl IHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBA IHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNj IHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJy ZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9h ZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2Fs bGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhl IGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5t b3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVk IGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKKyAq IENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRo ZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5ld2JhdGNo J3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhleSBhcmUgdXBk YXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlCiAg KiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJy ZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAot ICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRl ZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcg dGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBv ciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMg cmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4g dGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3Vy cmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEs MTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMo SW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRl bXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIGJvb2wKLV9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJIE9m ZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nh biwgbmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZz ZXROdW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIzICsxNDUsMjAgQEAgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJ Ym9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVzID0gc2Nhbi0+aWdub3Jl X2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwK IAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwg YWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNv LT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsK IAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2Ug PSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnBy ZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFx dWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBf YnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3Mu ZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1 cnJwYWdlID0gYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidG5l d2JhdGNoLT5idWYpOworCWJ0bmV3YmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7 CisJYnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGly ID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxl ZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAg c28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikgPyBidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBidG5ld2JhdGNoLT5tb3JlTGVmdCk7CiAJQXNz ZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJLyogaW5pdGlhbGl6ZSBs b2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg2LDE0IEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBieSBvdGhlciB3b3JrZXIg d2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJ X2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJ CSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBi dG5ld2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJ ZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2Us Ci0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFz ZShzY2FuLCBidG5ld2JhdGNoLT5wcmV2UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQ YWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdl LCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3Vy cnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJewpAQCAtMjEyLDExICsyMTAsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFf YnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJ CXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBh bGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0 Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJ CQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5f c2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJ CQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7 CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzgsMjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJ aWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIg aXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJ CQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBT ZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJ CQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVt cyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdl dFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0 dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVy IGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQg aSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJ CQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRf c2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJ QlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7 CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJ CQl9CkBAIC0zMzksMTIgKzMzNywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICgh cHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOwor CQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8 PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJ c28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVt SW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJ dGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKQEAgLTM2MSwxMSArMzU4LDExIEBA IF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz ZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRp ciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJp bWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0 ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5u ZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJ CV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNv LT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFn ZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ2MywyNyBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0 ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVw KTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwg JnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRl bXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qg c3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJ CXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4 LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1z KG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0 UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJ CQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3Ig VElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMg LSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRf c2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9z dGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1 cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJ CQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5OSwx MSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICgh cHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJ CQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0g MCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3Mu bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUlu ZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBp dGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAx OwogCX0KIAogCS8qCkBAIC01MjQsNyArNTIwLDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJ QXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9z LmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+ Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8qCkBAIC0xMDI3LDkwICsx MDIzLDkxIEBAIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0g aW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0 ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgdm9pZAotX2J0X3Nh dmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCSBPZmZzZXROdW1iZXIg b2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkgSW5kZXhUdXBs ZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0g JnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bp dm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5o ZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwot CWlmIChzby0+Y3VyclR1cGxlcykKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRp ZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0 ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1 cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0g c28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBz by0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9z Lm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNb aXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNo LT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZz ZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBz YXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICog U2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9y IFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNl cXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGlu ZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3 YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNj YW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hv dWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0g KiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1 cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBh biBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICog c3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK LQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkK K19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1J bmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEg KnRhYmxlVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsK LQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhd OworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhd OwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhl YXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYg KHNvLT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmlu ZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJ LyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5k ZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNl dChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVw bGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhU dXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJ aXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkg KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0 dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVw bGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJ CWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCAr PSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVt LT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVy biAwOwogfQogCiAvKgotICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRl bXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0g aW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1 cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxy ZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2Fs bGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBs aXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQu CiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFx dWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2lu dGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhT Y2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJ CQkJCUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJ dGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0 Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0 ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07 CisJaXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZu dW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFz ZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUg c2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVt LT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykK KwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhF QURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4MjEsMTQgKzI4MTgsMTUgQEAgbmV3X3ByaW1f c2NhbjoKIAkgKgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0aGUg Y3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1c2VkIHdpdGhpbiBfYnRf bmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBhZ2UuCi0JICogSXQgaXMg dXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHByaW1pdGl2ZSBpbmRleCBz Y2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bw b3NpdGUgY3VyclBvcy5kaXIuCisJICogVGhlIHNjYW4gZGlyZWN0aW9uIG1pZ2h0IGJlIHJldmVy c2VkIGR1cmluZyB0aGUgbmV4dCBhbWdldGJhdGNoIGNhbGwsCisJICogYnV0IG5vdCBiZWZvcmUg YSBjYWxsIHRvIGJ0cG9zcmVzZXQgdGhhdCByZXNldHMgdGhlIGFycmF5IGtleXMgdG8gdGhlCisJ ICogZmlyc3QgcG9zaXRpb25zL2VsZW1lbnRzIHVzZWQgd2hlbiBzY2FubmluZyBpbiB0aGlzIG90 aGVyIGRpcmVjdGlvbi4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBU ZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IHRy dWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJaWYgKHNjYW4tPnBhcmFs bGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBzby0+Y3Vy clBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBw c3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhl IG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjg0MSw5ICsyODM5LDggQEAgZW5kX3Rv cGxldmVsX3NjYW46CiAJICogVGhpcyBlbmRzIHRoZSBlbnRpcmUgdG9wLWxldmVsIHNjYW4gaW4g dGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCiAJICoKIAkgKiBOb3RlOiBUaGUgc2NhbidzIGFy cmF5cyAoaW5jbHVkaW5nIGFueSBub24tcmVxdWlyZWQgYXJyYXlzKSBhcmUgbm93IGluCi0JICog dGhlaXIgZmluYWwgcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIElm IHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGhhcHBlbnMgdG8gY2hhbmdlLCB0aGVuIHRoZSBhcnJh eXMgd2lsbCBhbHJlYWR5IGJlIGluIHRoZWlyCi0JICogZmlyc3QgcG9zaXRpb25zIGZvciB3aGF0 IHdpbGwgdGhlbiBiZSB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkgKiB0aGVpciBmaW5h bCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLiAgVGhpcyBpcyBqdXN0 CisJICogZGVmZW5zaXZlLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8q IFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0g ZmFsc2U7CS8qIC4uLmFuZCBkb24ndCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwpAQCAtMjkxMCwx NyArMjkwNyw5IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJLyoKIAkgKiBUaGUgYXJyYXkga2V5cyBhcmUg bm93IGV4aGF1c3RlZC4KIAkgKgotCSAqIFJlc3RvcmUgdGhlIGFycmF5IGtleXMgdG8gdGhlIHN0 YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKLQkgKiB3ZXJlIGNhbGxlZC4g IFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJhdGNoZXQgaW4gdGhlCi0J ICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhvdXQgdGhpcywgc2NhbnMg Y291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNjYW4KLQkgKiBkaXJlY3Rp b24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1bnMgb3V0IG9mIGl0ZW1z IHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBhZ2UgcHJlcGFyZXMgYWxs IHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdlIGluIHNvLT5jdXJyUG9z LiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAqIHR5cGljYWwgZm9yIHNv LT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVwbGUgZmluYWxseQotCSAq IHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFsaWRhdGUgdGhlIHNjYW4n cyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHlldCwgdGhvdWdoIC0tIGFu ZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCisJICogRGVmZW5zaXZlbHkgcmVzdG9y ZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgcG9zaXRpb25zIHRoZXkgd2VyZSBpbgorCSAqIGltbWVk aWF0ZWx5IGJlZm9yZSB3ZSB3ZXJlIGNhbGxlZCAoaS5lLiB0byB0aGVpciBmaW5hbCBwb3NpdGlv bnMgZm9yCisJICogdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLgogCSAqLwogCV9idF9zdGFy dF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpp bmRleCAzZGYyYzc1MmUuLjJlYTJjNjBmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5j CkBAIC0xNjEsMTEgKzE2MSwxMyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFt YWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdp bnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVw bGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAor CQkuYW11bmd1YXJkYmF0Y2ggPSBidHVuZ3VhcmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBidGtpbGxpdGVtc2JhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFt ZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVz dHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVz dGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBh cmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBi dHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDEzICsyMjYsMTMgQEAgYnRpbnNlcnQoUmVsYXRpb24g cmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxl KCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0t IEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwot Ym9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQor SW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJh dGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0g TlVMTCk7CiAKQEAgLTI0Myw0NSArMjQ1LDIwIEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0 aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFw cHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwK LQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkg KiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8K LQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJz dChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0 KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3 ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlp ZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVt ZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVw bGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0J CQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlm IHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0 aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1l cy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2Ug ZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNl c3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0J CQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBh Z2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJ c28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7 Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgot CQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChz Y2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4u ICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAq LworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2Ug bmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFy cmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJ cmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkxLDM4ICsyNjgsNDMgQEAgaW50NjQKIGJ0Z2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJh dGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRlbVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9p bnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAK IAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4 IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwot CQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2gg dGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVl IHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRk X3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7 CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNo LT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJs ZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkv KgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhl IHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0J CQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJ CQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJ CWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBf YnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJLyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFz ZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxs b2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIg dXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNo ID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYg KCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFu ZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNb c28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwg aGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNl KTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBAIC0zNDksOCArMzMxLDYgQEAgYnRiZWdpbnNj YW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0 ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVE YXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28t PmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihT Y2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwxOSArMzQ0LDExIEBAIGJ0YmVnaW5zY2FuKFJl bGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0g TlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5V TEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICog V2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNv IHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGls IGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hl dGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwot CXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1 cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlz Y2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlzY2FuLT5tYXhpdGVt c2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVf c2l6ZSA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxl c193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM5MCw2NCArMzYy LDE4NSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRh IGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nh bik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdl cmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBU aGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBv biB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlu cyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGlu dm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICog SXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZD QyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2Ug cGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVs ZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkg KiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWly aW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFr aW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRy b3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJv cFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90 KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxM KTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxz ZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNl IGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFs cmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MK LQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxv YyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQu Ci0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxM KQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0J CXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkg KiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVy T2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJl ck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxz ZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFs c2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlz IHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8q CisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVy bG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQn cyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICovCit2b2lkCitidHVuZ3VhcmRiYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJUQmF0Y2hEYXRh ICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJl IGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3Nl cnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJk ZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYpOworfQorCisvKgorICoJYnRraWxs aXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAq Lwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQlRC YXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJUGFnZQkJ cGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBtaW5vZmY7CisJT2Zm c2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlCdWZm ZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRhYmxlIEFNIHNob3VsZCBo YXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8KKwlBc3NlcnQo YmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBidGJhdGNoLT5j dXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVm KTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9 IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJ X2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltaW5vZmYgPSBQ X0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIo cGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYg cGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykK Kwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0 Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVt YmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49 IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFz c2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gtPmRlYWRJ dGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQorCQkJ Y29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9m ZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJ CQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQp OworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0 aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsKKwkJCQlpbnQJCQlucG9z dGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJCWludAkJCWo7CisKKwkJ CQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVy IGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKKworCQkJCQlpZiAoIUl0 ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQkJYnJlYWs7CS8q IG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhP ZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVy IGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJldmVudCB1cyBm cm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICogZnVsbHkgZGVh ZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJCQkgKiBsb29w IGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlz IGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxl LCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFu ZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxh c3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29ycmVjdGx5IC0t IHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBp IDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmRl YWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBEb24ndCBib3RoZXIgYWR2 YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bworCQkJCSAqIGF2b2lk IHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQorCQkJCSAqIG9m Zm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkK KwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVy bW9zdCBsb29wCisJCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5n IGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2Ug dG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQor CQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0aW5nKQorCQkJCQlraWxsdHVwbGUgPSB0cnVlOwor CQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRl bS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBNYXJr IGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKKwkJ CSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywgaXQncyBwb3Nz aWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzIHNp bXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2Vz IGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNr c3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2lyYWJsZS4KKwkJCSAqLwor CQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7CisJCQkJaWYgKCFr aWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0 IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRhdGUgdGhlIHBh Z2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJICogYXJlIG5v dCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAqLworCQkJCQlp ZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7 CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAq LworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsK KwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9m Zm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2lu Y2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50 LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNl dCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNl IGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1s ZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICovCisJaWYgKGtpbGxlZHNv bWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7CisJ CUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tf cGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0t IGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NiwxMTYgKzU0OSw2MyBAQCBidGVuZHNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBi dXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFu eSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxp dGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQot Ci0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5t YXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0g aXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAo c28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJh eUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28t PmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNv bnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxl ZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJU dXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0 cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBj dXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSByZXNldCBhcnJheSBrZXkg c3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2FsbGVkIGJ5IHRoZSBjb3Jl IHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBpcyBhYm91dCB0bworICog Y2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5IGtleSBzdGF0ZS4gIFRo aXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9zaXRpb24sIG9yIHdoZW4g dGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGlsZSBtb3ZpbmcgaW4gdGhl IG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkgdXNlZC4KKyAqCisgKiBG b3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBm bGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNhbGxpbmcgaGVyZTsgd2Ug dXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0aW5nIG91ciBhcnJheSBr ZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRpciB3aWxsCisgKiByZXRh aW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRjaCByZXR1cm5lZCBpdCku CiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVl IHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGJhdGNo ID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwogCi0JLyogVGhlcmUgbWF5IGJlIGFuIG9s ZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklmUGlu bmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVybjsKIAog CS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0ZXIg c3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9zaXRp b24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJyUG9zIHN0 cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1vdmVk Ci0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoYXQg d29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3RhdGUgZm9yIHRoZSBiYXRj aCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQcmltU2NhbiBhbmQgcmVs YXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBzb2Z0CisJICogYXNzdW1w dGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGluIHRoZSBzYW1lIGRpcmVj dGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRoZSBzb2Z0IGFzc3VtcHRp b24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2NhbiB0byBzdGVwIHRvIHRo ZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJlY292ZXIuCisJICogV2hl biB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdpbGwgcmVsaWFibHkgZGV0 ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMgbmVlZGVkIGJhc2VkIG9u IHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJpbWl0aXZlIHNjYW4sIGl0 IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkgdmFsdWVzCisJICogKGJh c2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFnZSB3ZSdsbCBzdGVwIG9u IHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5IGtleSBzdGF0ZSBpbiB0 aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0IGdldCBjb25mdXNlZC4g IFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNwYWNlCisJICogZm9yIHRo ZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVybXMgb2YgdGhlIHNjYW4g ZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxseS4gIEJ1dCB3aGVuIHRo ZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2UsIHRoZSBzY2FuIGNvdWxk IG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJ X2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJ ZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5tYXJr SXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJlc3RvcmUg c2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoKLQkJICog VGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3QgbWFy ay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBOQjogSW4g dGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9zIHRvIGJl Ci0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1h cmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVkIHRv IGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJICog bm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGluZyBhbnkg cmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBmb3Ig dGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICovCi0JCWlm IChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIgZm9yIGFz c2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChz by0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7Ci0J CQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0b2YoQlRT Y2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRlbSAqIHNp emVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJbWVtY3B5 KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQb3MubmV4 dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2VlIF9i dF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0JCQl7Ci0J CQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJCQlzby0+ bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQlidGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJ c28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28t Pm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4NCwxNSArOTI0LDYgQEAg X2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRf c2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFz dF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5j dXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBu ZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2lt aWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vy cl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28t PmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4p LgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkK IAl7CiAJCS8qCkBAIC0xMDQyLDggKzEwNzMsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNj YW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNf Y2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBh cmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi40Yzk0YjllNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIzLDQ4IEBACiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oUmVs YXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworc3RhdGljIGlubGluZSB2b2lkIF9idF9iYXRj aF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJ CQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVm LCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0 YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQg a2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5J bnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0pOwotc3Rh dGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2Fu T3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rp b24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywg U2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsKK3N0YXRpYyBJbmRleFNj YW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVj dGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2NrTnVtYmVy IGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJz dHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1 cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X2VuZHBvaW50KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogCiAKIC8qCi0gKglfYnRfZHJv cF9sb2NrX2FuZF9tYXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0tIG5idHJlZSB3 cmFwcGVyIGZvciBpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoLgogICoKLSAqIFVubG9jayBzby0+ Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4K LSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNx dWlyaW5nIGEgY2xlYW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFsZ3JpbmQgaW5z dHJ1bWVudGF0aW9uIGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAot X2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNv KQorX2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoLCBCdWZmZXIgYnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRy b3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1 cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQ YWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhl IGxvY2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24g c28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1 cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNl LgotCSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3VyclBv cy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9z LmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFn ZSwgQkxDS1NaKTsKKyNlbmRpZgorCisJaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaChzY2FuLCBi YXRjaCwgYnVmKTsKKworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICghUmVsYXRpb25V c2VzTG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklORF9NQUtFX01F TV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04NjAsMjYgKzg1 NSwyNSBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3Qo KSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZp bmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2 ZXIgYWJvdXQgdGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9u cywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0g KgkJaWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0 aXNmaWVzIHRoZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nl c3MgZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFn ZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwg bG9ja3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5n Ci0gKgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0 aGUgcGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4g dG8gc2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9y ZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxl YWYgcGFnZSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVh c3QKKyAqCQlvbmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRo ZSBzY2FuIGtleS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2gg d2l0aCB0aGF0IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8g bWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAq IHBpbnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisg KiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2 ZW4gc2NhbiBkaXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCBy ZXR1cm5pbmcgTlVMTCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisgKiBlbmQgb2YgdGhl IHRvcC1sZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8K KyAqIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJlcXVpcmVk LgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFb XSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5 cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhp cyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRv IHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wK K0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODky LDggKzg4Niw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52YWxpZFN0cmF0ZWd5OwogCUJs b2NrTnVtYmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAogCQkJCWxhc3RjdXJyYmxrbm87 Ci0KLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlJbmRleFNjYW5C YXRjaCBmaXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKIAkvKgogCSAq IEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBhbmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsg YWxzbyBtYXJrIHRoZQpAQCAtOTA5LDcgKzkwMyw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2Fu KTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJu IE5VTEw7CiAJfQogCiAJLyoKQEAgLTkxOCw3ICs5MTIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxf c2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFz dGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CQkJLyog ZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFByaW1TY2FuIGlzIHVuc2V0KSAqLwogCiAJLyoKIAkg KiBJbml0aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3VycmVudCBz Y2FuIGRpcmVjdGlvbgpAQCAtOTM4LDExICs5MzIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsK IAkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRfcmVhZG5leHRwYWdlKHNj YW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJcmV0dXJuIGZhbHNlOwot Ci0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBf YnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpOwog CX0KIAogCS8qCkBAIC0xNTAyLDE3ICsxNDkyLDIxIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlkZWZhdWx0OgogCQkJLyogY2FuJ3QgZ2V0IGhl cmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIHN0cmF0X3RvdGFsOiAlZCIsIChpbnQpIHN0cmF0X3RvdGFsKTsKLQkJCXJldHVybiBmYWxz ZTsKKwkJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBi YXRjaCBiZWZvcmUgbG9ja2luZyBhbnl0aGluZyAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0 aWxfYWxsb2NfYmF0Y2goc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nh biwgZmlyc3RiYXRjaCk7CisKIAkvKgogCSAqIFVzZSB0aGUgbWFudWZhY3R1cmVkIGluc2VydGlv biBzY2FuIGtleSB0byBkZXNjZW5kIHRoZSB0cmVlIGFuZAogCSAqIHBvc2l0aW9uIG91cnNlbHZl cyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklz QmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCV9idF9zZWFyY2gocmVsLCBOVUxM LCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxzZSk7CisJX2J0X3NlYXJj aChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFsc2Up OwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKHVubGlrZWx5 KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkpCiAJewogCQlBc3NlcnQoIXNvLT5u ZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4LDIyICsxNTIyLDIzIEBAIF9idF9maXJzdChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxp emFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25h cHNob3QpOwotCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5i dWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAm YnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJfQogCi0JCWlmICghQnVmZmVy SXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJzdGJh dGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCXJldHVybiBm YWxzZTsKKwkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0YmF0Y2gpOwor CQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lzZSBp dGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBz by0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgYnRm aXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0 IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28t PmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJ ICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2Us IG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+ PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NCArMTU1Niw3MiBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBG b3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJ ICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUg Im1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVt LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0J cmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gs IG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0 ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggaW4gYSBz Y2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50 IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNv LT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlv dXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJh dGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNl IHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRl IHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhpdCwg c28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQotICoJ CXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBvcyBy ZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwg d2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwgYmUgcG9zc2libGUg Zm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0aW9uLAotICoJ CXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhlciBk aXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBuZXh0IGJhdGNoLiAg VGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBsZSBvbiBhbnkgcmV0 dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4KKyAqCQlOb3RlIHRoYXQg cmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlCisg KgkJdG9wLWxldmVsIHNjYW47IGNhbGxlciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0 byBkZXRlcm1pbmUKKyAqCQlpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJlcXVp cmVkLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7Ci0JQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBuZXh0IHR1cGxl IG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8KLQkgKiBzdGVw IHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3Vy clBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJ CQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28tPmN1cnJQb3Mu aXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCV9idF9yZXR1 cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUg aW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0g dG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyBpbiBj YWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1f YnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbykKLXsKLQlC VFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5p dGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3QgaGF2ZSBzdWNj ZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2Vy dChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKLQlBc3Nl cnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCS8q IFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0Jc2Nhbi0+eHNf aGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJc2Nh bi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVw bGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0byBuZXh0IHBh Z2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBlciBvbiBfYnRf cmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBjdXJyZW50IHBh Z2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQuICBJdHMgYnVm ZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFjdHVhbGx5LCB3 aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwKLSAqIHRob3Vn aCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZhbGlkIGJsb2Nr IG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJpb3JiYXRjaCA9IEJUQmF0Y2hH ZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3Rj dXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0J LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKKwli b29sCQltb3JlSW5EaXI7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFr ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRp b24gdGhhdCBuZWVkcyBpdC4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3aXRoIGNyb3Nz LWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0Y2ggbWFuYWdl bWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0aW9uIChhbmQK KwkgKiBjYWxscyBidHBvc3Jlc2V0IHRvIGRlYWwgd2l0aCB0aGUgc2NhbidzIGFycmF5IGtleXMp IGlzIHVzZWQgZm9yIHRoaXMuCiAJICovCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0J ewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJr IGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCQkJSW5j ckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQb3Ms ICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSAr Ci0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0J CWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1cnJU dXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1hcmtQ b3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0g LTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVzdCBhYm91dCB0byBzdGFydCB0aGUgbmV4dCBw cmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9zc2libGUgd2l0aCBhIHNjYW4gdGhhdCBoYXMg YXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lwIHRvCi0JCSAqIGNvbnRpbnVlIGluIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICogaW5k aWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2Nhbi4gIFRoZXkg bXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2ZWwg aW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRoYXQgd291bGQgYmUgd3JvbmcpLgotCQkgKgot CQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50IGFy cmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhlIGN1 cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5LiAg SW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9zJ3MgY29weSBvZgotCQkgKiBtb3JlUmlnaHQg b3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBiZSBhZmZlY3RlZCksIHdoaWxlIG1ha2luZwot CQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIHRoZWlyIGluaXRpYWwg c2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVjdCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2YW5j aW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxsICh0 aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyByZXN0b3JlZCBtYXJrUG9zKS4KLQkJICovCi0J CWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5tYXJrUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0J CQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxlZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyogbWFy ay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0KCFz Y2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5j dXJyUG9zKTsKKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7CiAKIAkvKiBXYWxrIHRv IHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBidHByaW9y YmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsK LQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJCWJsa25vID0gYnRwcmlv cmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRwcmlvcmJhdGNoLT5jdXJyUGFn ZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidHByaW9y YmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxlZnQ7CiAKIAkvKgotCSAqIENh bmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRoZSBj YWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0aGUg b3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5nIGlu IG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMgYXMt aXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJICog Rm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJhdGNoIG5vdyBzbyB0 aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoYXQgd2F5 IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxvY2F0 aW9uLgogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQotCQlzby0+bmVlZFByaW1T Y2FuID0gZmFsc2U7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRpbF9y ZWxlYXNlX2JhdGNoKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8 fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCdzIHBhZ2UgaXMga25vd24g dG8gYmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMKKwkJICogaW4gdGhpcyBzY2Fu IGRpcmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3VyZWQgdGhhdCBvdXQpLgorCQkg KgorCQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNldCwgdGhlbiBwcmlvcmJhdGNo J3MgbGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhlIGZpbmFsIHBhZ2UgZm9yIHRo ZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGluIHRoaXMgc2NhbiBkaXJlY3Rp b24gKHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4KKwkJICovCisJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxlbCBz Y2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+ cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJs a25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlm ZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KIAogCXJldHVybiBfYnRfcmVhZG5leHRw YWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KQEAgLTE3MzIs MTc4ICsxNjM1LDE2OSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxpbmcg X2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBTZWUgX2J0X3JlYWRwYWdl IGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUg cGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRyeSwg Zmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFs aWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4g YmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0ZWQg c28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCi0gKiBhY2NvcmRpbmcgdG8g dGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2UgZXhp dC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMg aWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0 aW9uLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRhaW5p bmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRj aGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICogZ2l2 ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0dXJu aW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9mIHRoZSB0b3At bGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0bWFwIGNoZWNrIHNvLT5uZWVk UHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4CisgKiBzY2Fu IGlzIHJlcXVpcmVkLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBh cmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7 IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAq Lwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg Zmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3RiYXRj aCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtubzsKKwlib29sCQltb3Jl SW5EaXI7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0Jc28t Pm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNvLT5j dXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICovCisJ LyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdlICov CiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5cyk7 CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmln aHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJfQog CWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0 Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQg PSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J CXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgog CSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4K IAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5n IHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxs IGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFk cGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZh bHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkK KwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkK IAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICog X2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGlu KSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUg cmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJl dHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBp biBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBmaXJzdGJh dGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAotCS8q IFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+Y3Vy clBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJy UG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBw YWdlIHJldHVybmVkIGJ5IF9idF9zZWFyY2ggKi8KKwlfYnRfcmVsYnVmKHNjYW4tPmluZGV4UmVs YXRpb24sIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1 c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4dCBw YWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJs a25vID0gYnRmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gYnRmaXJzdGJh dGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJzdGJhdGNoLT5jdXJyUGFnZTsK Kwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidGZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA6IGJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQ7CiAKLQkvKiBfYnRfcmVhZHBh Z2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQly ZXR1cm4gdHJ1ZTsKKwkvKiBSZWxlYXNlIGZpcnN0YmF0Y2ggKHdpbGwgYmUgcmVjeWNsZWQgaWYg d2UgcmVhY2ggX2J0X3JlYWRuZXh0cGFnZSkgKi8KKwlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRj aChzY2FuLCBmaXJzdGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1vcmVJbkRp cikKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2Nh biBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz IHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxlbCBz Y2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+ cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJs a25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlm ZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVybiBfYnRfcmVhZG5leHRw YWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIAogLyoKICAq CV9idF9yZWFkbmV4dHBhZ2UoKSAtLSBSZWFkIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRh dGEgZm9yIF9idF9uZXh0CiAgKgotICogQ2FsbGVyJ3MgYmxrbm8gaXMgdGhlIG5leHQgaW50ZXJl c3RpbmcgcGFnZSdzIGxpbmssIHRha2VuIGZyb20gZWl0aGVyIHRoZQotICogcHJldmlvdXNseS1z YXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2Ug dGhhdAotICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdh cyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCi0gKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdl IHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhl IGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJy UG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxr bm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBDYWxsZXIncyBibGtubyBpcyB0aGUgcHJp b3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5nIG9uIHRoZQorICogY3Vy cmVudCBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBiYXRj aCdzIGN1cnJQYWdlLgorICogV2UgdXNlIGxhc3RjdXJyYmxrbm8gdG8gcmVhc29uIGFib3V0IGNv bmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMKKyAqIGR1cmluZyBiYWNrd2FyZHMg c2NhbnMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2NrZWQg YnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIvdW5w aW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdv bid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVs IHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVy ZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBhbmQg bGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNl aXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0 YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28tPmN1 cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9 ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UK LSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdo LiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBzZWl6 aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVhZHkg YmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxs ZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3VyclBv cy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBvcy5t b3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBPbiBl bnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBzdWNj ZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20gdGhl IG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQg YSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5nIHNv LT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJseSB0 byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVu bG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQg aGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2UganVzdCByZXR1 cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBuZWNlc3Nhcmls eSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNoIGFuZAorICog YnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUgaWYgYW5vdGhl ciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgotICogSWYgdGhlcmUg YXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCB3ZSBp bnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQgcmV0YWlucyBubyBs b2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBhbHdheXMgcmVsZWFz ZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgotICog c3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNv b24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBzZWl6ZSB0aGUg c2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0Y3VycmJsa25vIHNo b3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFzZSB0aGUgc2NhbiBh cworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBJbmRleFNj YW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVy IGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRp ciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJl Y3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaDsK IAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vIHx8IHNlaXpl ZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkpOwotCUFzc2VydCghQlRT Y2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV3 IGJhdGNoIGJlZm9yZSBsb2NraW5nIGFueXRoaW5nICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0 aWxfYWxsb2NfYmF0Y2goc2Nhbik7CisJYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4s IG5ld2JhdGNoKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJl YWQgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJl bWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykK KwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgYmxrbm8sIGEgcGFnZSB0byB0aGUg cmlnaHQgb2YKKwkgKiBsYXN0Y3VycmJsa25vIChvciB0byB0aGUgbGVmdCwgd2hlbiB0aGUgc2Nh biBpcyBtb3ZpbmcgYmFja3dhcmRzKS4KKwkgKgorCSAqIE5vdGU6IGNhbGxlcidzIGJsa25vIGlz IHRlbnRhdGl2ZS4gIG5ld2JhdGNoIGFjdHVhbGx5IHN0b3JlcyBtYXRjaGVzCisJICogZnJvbSB0 aGUgbmV4dCBsZWFmIHBhZ2UgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiB0aGF0IGhhcyBhdCBsZWFz dCBvbmUKKwkgKiBtYXRjaGluZyBpdGVtLiAgVGhpcyBpcyB1c3VhbGx5IGNhbGxlcidzIGJsa25v IHBhZ2UsIGJ1dCBtaWdodCBiZSBzb21lCisJICogb3RoZXIgcGFnZSB0byBpdHMgcmlnaHQgKG9y IHRvIGl0cyBsZWZ0KSBpbnN0ZWFkLgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IHRydWU7CisJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwkvKiBm b3IgbGFzdGN1cnJibGtubyAob3IgdGVudGF0aXZlKSAqLworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdo dCA9IHRydWU7CS8qIHRlbnRhdGl2ZSAob3IgZm9yIGxhc3RjdXJyYmxrbm8pICovCiAKIAlmb3Ig KDs7KQogCXsKIAkJUGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAo Ymxrbm8gPT0gUF9OT05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJ CSAhc28tPmN1cnJQb3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewot CQkJLyogbW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBl bmRlZCBzY2FuICovCi0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJi bGtubyAmJiAhc2VpemVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwot CQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQot CQkvKiBwYXJhbGxlbCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3Mg Ymxrbm8gKi8KLQkJaWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYm Ci0JCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZh bHNlKSkKLQkJewotCQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmlt aXRpdmUgc2NhbiByZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQ b3MpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYg bGFzdGN1cnJibGtubyAhPSBQX05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBm aXJzdCAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBf YnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyog cmVhZCBibGtubywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICov Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZi bGtubywKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJl bCwgJmJsa25vLAogCQkJCQkJCQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1 cnJQb3MuYnVmID09IEludmFsaWRCdWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IElu dmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRl bGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5j dXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7 CisJCQkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJl dHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQ b3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3Bh cXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJ CWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgwNSwxNyBAQCBf YnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJ CQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhp cyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVh ZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRB S0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1 cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0 IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VH ZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShz Y2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2 UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE5MzYsMTkgKzE4MzAsMzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVz IG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJ c2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykg Ki8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUg dGhlIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwK KwkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3Jl UmlnaHQgOiAhYnRuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8g X2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlm CisJCQkgKiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBp biBfYnRfZmlyc3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5k ZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7 CisJCX0KKworCQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5l eHQgYmxrbm8gKi8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJ CXsKKwkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJl dHVybiBOVUxMOwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJ CX0KKworCQlmaXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3Qg Ki8KIAl9CiAKLQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2Nr IChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRp b24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1 cnJQb3MuY3VyclBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBf YnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1td ICovCisJQXNzZXJ0KGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hf dW5sb2NrKHNjYW4sIG5ld2JhdGNoLCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7 CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3NCwyNSArMjA4NywyOSBAQCBfYnRf Z2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkK ICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9y ZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBf YnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAogX2J0 X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaDsKKwlC VEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9w YXF1ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CisKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggYmVmb3JlIGxvY2tpbmcgYW55dGhpbmcgKi8KKwlmaXJz dGJhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKHNjYW4pOworCWJ0Zmlyc3RiYXRjaCA9 IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBTY2FuIGRvd24g dG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxp ZmllZAogCSAqIHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1 ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIp KTsKKwlidGZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkv KgogCQkgKiBFbXB0eSBpbmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5vdGhpbmcg ZmluZXIgdG8gbG9jawpAQCAtMjIwMCwxMCArMjExNywxMSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJICovCiAJCVByZWRpY2F0ZUxvY2tS ZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nh bik7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nhbiwg Zmlyc3RiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRmaXJzdGJhdGNoLT5i dWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYo b3BhcXVlKSk7CiAKQEAgLTIyMjksOSArMjE0Nyw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9t IHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBh Z2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVt KHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nh biwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKaW5kZXggMDE0ZmFhMTYyLi5iNmM5NzdiOTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKQEAgLTE5LDEwICsxOSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVl LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVs c2Nhbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9u L2ludC5oIgotI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3Rl bXMuaCIKQEAgLTMxLDcgKzI4LDYgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0 aWMgaW50CV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOwog c3RhdGljIGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxl ZnQsCiAJCQkJCQkgICBJbmRleFR1cGxlIGZpcnN0cmlnaHQsIEJUU2Nhbkluc2VydCBpdHVwX2tl eSk7CiAKQEAgLTE0NiwyNDcgKzE0Miw2IEBAIF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJ bmRleFR1cGxlIGl0dXApCiAJcmV0dXJuIGtleTsKIH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmlz b24gZnVuY3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAotX2J0X2NvbXBhcmVf aW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJCQlhID0gKigoY29u c3QgaW50ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKLQotCXJldHVy biBwZ19jbXBfczMyKGEsIGIpOwotfQotCi0vKgotICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9E RUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3 ZXJlIGtpbGxlZAotICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91 Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFu ZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQot ICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIG5v dCBoYXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQb3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCi0g KiBidWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0aWxs IHdvbid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlu cyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBi eSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0 Ci0gKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGlu IG9uIHRoZSB0YXJnZXQgcGFnZQotICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRp bmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBh ICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1z IG9uIHRoZQotICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5 Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKLSAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5l dyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECi0gKiB3aXRo IGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBv biB0aGlzIHNhbWUKLSAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2Fu cyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwg dGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgotICog dGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRw YWdlIHNhdyB0aGUgcGFnZS4KLSAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RF QUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgotICoKLSAqIFdlIGdpdmUgdXAgbXVj aCBsZXNzIG9mdGVuIGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBw ZW5zLgotICogV2UgY29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQg ZHVlIHRvIGluc2VydGlvbnMuICBJZiBhbgotICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJy ZW50IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAotICogYW5kIGp1 c3QgZ2l2ZSB1cCBvbiBpdC4KLSAqLwotdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4pCi17Ci0JUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5P cGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JUGFnZQkJcGFnZTsKLQlC VFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBtaW5vZmY7Ci0JT2Zmc2V0TnVtYmVy IG1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOwotCWJvb2wJCWtpbGxl ZHNvbWV0aGluZyA9IGZhbHNlOwotCUJ1ZmZlcgkJYnVmOwotCi0JQXNzZXJ0KG51bUtpbGxlZCA+ IDApOwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNj YW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2Nh biAqLwotCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxl YXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2Ug bmVlZCB0byBpdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9y ZGVyOyB0aGUKLQkgKiBsb29wIGJlbG93IGV4cGVjdHMgdGhpcyAod2hlbiBtYXJraW5nIHBvc3Rp bmcgbGlzdCB0dXBsZXMsIGF0IGxlYXN0KS4KLQkgKiBzby0+a2lsbGVkSXRlbXNbXSBpcyBub3cg aW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCi0JICogU2Nyb2xs YWJsZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElE IHR3aWNlLgotCSAqCi0JICogU29ydCBhbmQgdW5pcXVlLWlmeSBzby0+a2lsbGVkSXRlbXNbXSB0 byBkZWFsIHdpdGggYWxsIHRoaXMuCi0JICovCi0JaWYgKG51bUtpbGxlZCA+IDEpCi0JewotCQlx c29ydChzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJl X2ludCk7Ci0JCW51bUtpbGxlZCA9IHF1bmlxdWUoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQs IHNpemVvZihpbnQpLAotCQkJCQkJCV9idF9jb21wYXJlX2ludCk7Ci0JfQotCi0JaWYgKCFzby0+ ZHJvcFBpbikKLQl7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGluIG9uIHRoaXMgcGFn ZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCi0JCSAqIHNvIGFsbCB3ZSBuZWVkIHRv IGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQKLQkJICogY29uY3Vy cmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBvbiB0aGUgcGFnZS4K LQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYg PSBzby0+Y3VyclBvcy5idWY7Ci0JCV9idF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKLQl9 Ci0JZWxzZQotCXsKLQkJWExvZ1JlY1B0cglsYXRlc3Rsc247Ci0KLQkJQXNzZXJ0KCFCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgc28tPmN1 cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOwotCi0JCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0 b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlm IChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQotCQl7Ci0JCQkvKiBNb2RpZmllZCwgZ2l2 ZSB1cCBvbiBoaW50aW5nICovCi0JCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKLQkJCXJldHVybjsK LQkJfQotCi0JCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2FmZSAqLwotCX0KLQotCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwot CW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKTsKLQotCS8qIEl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNb XSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsg aSsrKQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNj YW5Qb3NJdGVtICpraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCQlPZmZz ZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5k ZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1 cnJQb3MubGFzdEl0ZW0pOwotCQlBc3NlcnQoaSA9PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28t PmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOwotCi0J CWlmIChvZmZudW0gPCBtaW5vZmYpCi0JCQljb250aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICov Ci0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJdGVtSWQJCWlpZCA9IFBhZ2VH ZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0JCQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsK LQotCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cGxlKSkKLQkJCXsKLQkJCQlpbnQJCQlw aSA9IGkgKyAxOwotCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0 dXBsZSk7Ci0JCQkJaW50CQkJajsKLQotCQkJCS8qCi0JCQkJICogTm90ZSB0aGF0IHRoZSBwYWdl IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3 ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCi0JCQkJ ICogcG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5n IGxpc3QKLQkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJ RHMuCi0JCQkJICovCi0JCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0aW5nOyBqKyspCi0JCQkJewot CQkJCQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7 Ci0KLQkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFscyhpdGVtLCAma2l0ZW0tPmhlYXBUaWQpKQot CQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLwotCi0JCQkJCS8qCi0J CQkJCSAqIGtpdGVtIG11c3QgaGF2ZSBtYXRjaGluZyBvZmZudW0gd2hlbiBoZWFwIFRJRHMgbWF0 Y2gsCi0JCQkJCSAqIHRob3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFn ZSBjYW4ndAotCQkJCQkgKiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCi0JCQkJCSAq LwotCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQ aW4pOwotCi0JCQkJCS8qCi0JCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUu Ci0JCQkJCSAqCi0JCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2 YW5jaW5nIGtpdGVtIGhlcmUKLQkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJp bmcgdGhlIHBvc3RpbmcgbGlzdCB0dXBsZQotCQkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRj aGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0Ci0JCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgot CQkJCQkgKgotCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFs IGhlYXAgVElEIGluCi0JCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUg Z2V0cyBraWxsZWQKLQkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ug d2hlcmUgdGhlIGxhc3QKLQkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBp biB0aGUgbGFzdCBpbmRleCB0dXBsZQotCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBs ZSBzdGlsbCBnZXRzIGtpbGxlZCkuCi0JCQkJCSAqLwotCQkJCQlpZiAocGkgPCBudW1LaWxsZWQp Ci0JCQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11d OwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0 ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KLQkJCQkgKiBhdm9pZCBwcm9jZXNzaW5nIGtp bGxlZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQotCQkJCSAqIG9mZm51bS9wb3N0aW5n IGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkKLQkJCQkgKiBzZWVt cyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVybW9zdCBsb29wCi0J CQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJz dCBoZWFwCi0JCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQg b2ZmbnVtL2luZGV4Ci0JCQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQotCQkJCSAqLwotCQkJ CWlmIChqID09IG5wb3N0aW5nKQotCQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCQkJfQotCQkJZWxz ZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRlbS0+aGVhcFRpZCkp Ci0JCQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIE1hcmsgaW5kZXggaXRlbSBh cyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcwotCQkJICogaGFwcGVucyB3 aGlsZSBob2xkaW5nIGEgYnVmZmVyIGxvY2sgcG9zc2libHkgaW4gc2hhcmVkIG1vZGUsCi0JCQkg KiBpdCdzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhp cwotCQkJICogc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcgdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGlt YWdlcyBiZWluZyBzZW50Ci0JCQkgKiB0byBXQUwgKGlmIHdhbF9sb2dfaGludHMgb3IgZGF0YSBj aGVja3N1bXMgYXJlIGVuYWJsZWQpLCB3aGljaAotCQkJICogaXMgdW5kZXNpcmFibGUuCi0JCQkg Ki8KLQkJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQotCQkJewotCQkJCWlm ICgha2lsbGVkc29tZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50 IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRo ZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFy ZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJ CQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19w YWdlOwotCQkJCX0KLQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0aW5nIGxpc3QgaXRl bXMgKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRy dWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0J CQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq IFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkg aGludC4KLQkgKgotCSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxz byBzZXQgdGhlIHBhZ2UncwotCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtl d2lzZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQgd2UKLQkgKiBvbmx5IHJlbHkgb24gdGhlIHBh Z2UtbGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQotCSAqLwotCWlmIChraWxs ZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdF OwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5s b2NrX3BhZ2U6Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQkJX2J0X3VubG9ja2J1ZihyZWwsIGJ1Zik7 Ci0JZWxzZQotCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKLX0KLQotCiAvKgogICogVGhlIGZvbGxv d2luZyByb3V0aW5lcyBtYW5hZ2UgYSBzaGFyZWQtbWVtb3J5IGFyZWEgaW4gd2hpY2ggd2UgdHJh Y2sKICAqIGFzc2lnbm1lbnQgb2YgInZhY3V1bSBjeWNsZSBJRHMiIHRvIGN1cnJlbnRseS1hY3Rp dmUgYnRyZWUgdmFjdXVtaW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHhsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCmluZGV4IGRm ZjdkMjg2Zi4uM2JjNWU1Y2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwpAQCAt MTA5NSwxNSArMTA5NSwxNSBAQCBidHJlZV9tYXNrKGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJl ciBibGtubykKIAkJLyoKIAkJICogSW4gYnRyZWUgbGVhZiBwYWdlcywgaXQgaXMgcG9zc2libGUg dG8gbW9kaWZ5IHRoZSBMUF9GTEFHUyB3aXRob3V0CiAJCSAqIGVtaXR0aW5nIGFueSBXQUwgcmVj b3JkLiBIZW5jZSwgbWFzayB0aGUgbGluZSBwb2ludGVyIGZsYWdzLiBTZWUKLQkJICogX2J0X2tp bGxpdGVtcygpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCisJCSAqIGJ0a2lsbGl0 ZW1zYmF0Y2goKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFz a19scF9mbGFncyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEJUUF9IQVNfR0FSQkFHRSBpcyBqdXN0 IGFuIHVuLWxvZ2dlZCBoaW50IGJpdC4gU28sIG1hc2sgaXQuIFNlZQotCSAqIF9idF9kZWxldGVf b3JfZGVkdXBfb25lX3BhZ2UoKSwgX2J0X2tpbGxpdGVtcygpLCBhbmQgX2J0X2NoZWNrX3VuaXF1 ZSgpCi0JICogZm9yIGRldGFpbHMuCisJICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgp LCBidGtpbGxpdGVtc2JhdGNoKCksIGFuZAorCSAqIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0 YWlscy4KIAkgKi8KIAltYXNrb3BhcS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggZjJlZTMzM2Y2Li4xZjQ1MjMx MDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4LDEwICs4OCwxMiBA QCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IHNwZ2JlZ2lu c2NhbiwKIAkJLmFtcmVzY2FuID0gc3BncmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IHNwZ2dldHR1 cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJ CS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFw LAogCQkuYW1lbmRzY2FuID0gc3BnZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5h bXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1w YXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpp bmRleCBjMDk0NzNiOTcuLjBmZmY4MDFhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jCkBAIC01Myw2ICs1Myw5IEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIp CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX2JlZ2luICE9IE5VTEwpOwogCUFzc2VydChy b3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5k ZXhfZmV0Y2hfZW5kICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9iYXRj aF9pbml0ICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9tYXJrcG9zICE9 IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXN0cnBvcyAhPSBOVUxMKTsK IAogCUFzc2VydChyb3V0aW5lLT5mZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9uICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YwppbmRleCA5YWI3NGM4ZGYuLjFjYWZmZWI4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMK QEAgLTg4NSw3ICs4ODUsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFj Y2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIs CiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5l LT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0 dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9y dChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJ CQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNp b24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDM3ZmUwM2ZkYy4uOTc5 YTg1MmZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjksNyArNDI5LDcgQEAgRXhlY1N1 cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2Fu OgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9y ZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJ CQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZv LT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5j CmluZGV4IDg4MzcyMTkzYS4uMGY5ZDQzNmMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMKQEAgLTM5NSw3ICszOTUsNyBAQCBFeGVjSW5kZXhPbmx5TWFya1BvcyhJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9tYXJrcG9zKG5vZGUt Pmlvc3NfU2NhbkRlc2MpOworCXRhYmxlX2luZGV4X2ZldGNoX21hcmtwb3Mobm9kZS0+aW9zc19T Y2FuRGVzYyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQyNCw3ICs0MjQsNyBAQCBFeGVjSW5kZXhP bmx5UmVzdHJQb3MoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQl9CiAJfQogCi0JaW5kZXhf cmVzdHJwb3Mobm9kZS0+aW9zc19TY2FuRGVzYyk7CisJdGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJw b3Mobm9kZS0+aW9zc19TY2FuRGVzYyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYwppbmRleCA4ODdhOTA3MWQuLjFkYjRkODI1YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtODY5LDcgKzg2OSw3IEBAIEV4ZWNJbmRleE1hcmtQ b3MoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9tYXJrcG9zKG5vZGUt Pmlzc19TY2FuRGVzYyk7CisJdGFibGVfaW5kZXhfZmV0Y2hfbWFya3Bvcyhub2RlLT5pc3NfU2Nh bkRlc2MpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OTgsNyArODk4LDcgQEAgRXhlY0luZGV4UmVz dHJQb3MoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9yZXN0cnBvcyhu b2RlLT5pc3NfU2NhbkRlc2MpOworCXRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9zKG5vZGUtPmlz c19TY2FuRGVzYyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpv aW4uYwppbmRleCBmODQyMWE3NGMuLjZlOGZlMDdmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN ZXJnZWpvaW4uYwpAQCAtNTQsOCArNTQsOCBAQAogICoJCXRoZSBpbm5lciAiNSdzIi4gVGhpcyBy ZXF1aXJlcyByZXBvc2l0aW9uaW5nIHRoZSBpbm5lciAiY3Vyc29yIgogICoJCXRvIHBvaW50IGF0 IHRoZSBmaXJzdCBpbm5lciAiNSIuIFRoaXMgaXMgZG9uZSBieSAibWFya2luZyIgdGhlCiAgKgkJ Zmlyc3QgaW5uZXIgNSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgImN1cnNvciIgdG8gaXQgYmVmb3Jl IGpvaW5pbmcKLSAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIGFjY2VzcyBtZXRob2Qg aW50ZXJmYWNlIHByb3ZpZGVzCi0gKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBh IHR1cGxlLgorICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgdGFibGUgQU0gaW50ZXJm YWNlIHByb3ZpZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxl IGR1cmluZyBpbmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlhbCBvcGVyYXRpb24gb2Yg dGhlIG1lcmdlIGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvaW5keHBhdGguYwppbmRleCAzZjVkNGZhMzEuLjk0ZmVkZjMyYyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00NCw3ICs0NCw3IEBACiAvKiBXaGV0aGVyIHdl IGFyZSBsb29raW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIg Ki8KIHR5cGVkZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFt Z2V0dHVwbGUgKi8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxl IG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1n ZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2Nh blR5cGVDb250cm9sOwpAQCAtNzQ2LDcgKzc0Niw3IEBAIGdldF9pbmRleF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQYXRoICAqaXBhdGggPSAo SW5kZXhQYXRoICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQor CQlpZiAoaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBp cGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM0LDcgKzgzNCw3 IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFp bmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJ CXJldHVybiBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDdjNGJlMTc0OC4uMDZhMmU5NDlkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBnZXRfcmVs YXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wg aW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNo YXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxs czsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwot CQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwp OworCQkJCWluZm8tPmFtY2FucGxhaW5zY2FuID0gKGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBO VUxMIHx8CisJCQkJCQkJCQkJYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWlu Zm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJ CQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7 Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwg JiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8t PmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8t PmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQo aW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRf cmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJv b2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZv LT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNl OwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWNhbnBsYWlu c2NhbiA9IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJCQkJaW5m by0+YW1jYW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBOVUxM OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDBiMWQ4 MGI1Yi4uMGQwYmQ0NjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jCkBAIC04MzYsNiArODM2LDcgQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0 eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogewogCUF0dHJOdW1iZXIJ a2V5Y29sOwogCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWNvbnN0IEluZGV4QW1Sb3V0aW5lICph bXJvdXRpbmU7CiAKIAkvKiBUaGUgaW5kZXggbXVzdCBub3QgYmUgYSBwYXJ0aWFsIGluZGV4ICov CiAJaWYgKCFoZWFwX2F0dGlzbnVsbChpZHhyZWwtPnJkX2luZGV4dHVwbGUsIEFudW1fcGdfaW5k ZXhfaW5kcHJlZCwgTlVMTCkpCkBAIC04ODcsMTAgKzg4OCwxMiBAQCBJc0luZGV4VXNhYmxlRm9y UmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJ CXJldHVybiBmYWxzZTsKIAogCS8qCi0JICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2Qg bXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCi0JICogYmUgdXNlZCBsYXRl ciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgo KS4KKwkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1n ZXR0dXBsZSIgb3IKKwkgKiAiYW1nZXRiYXRjaCIsIHdoaWNoIHdpbGwgYmUgdXNlZCBsYXRlciB0 byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlCisJICogUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRl eCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+ cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWFtcm91dGluZSA9IEdldEluZGV4 QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpOworCWlmIChhbXJv dXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVM TCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YwppbmRleCBjODFmYjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBA IC0zNjMsMTAgKzM2MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQlj YXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0 dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0 dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7 CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NB TjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3 ICszOTMsOCBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJ UEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1Bf Q0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1 ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVM TCB8fAorCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFN UFJPUF9DQU5fSU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVk ZSk7CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwppbmRleCBiNzRhYjVmN2EuLmM4OGEwZWMxZCAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zOTMsNyArMzkzLDcgQEAgYnRfY2hlY2tfZXZlcnlf bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwK IAkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKIAogCS8qCi0JICogVGhpcyBhc3Nl cnRpb24gbWF0Y2hlcyB0aGUgb25lIGluIGluZGV4X2dldG5leHRfdGlkKCkuICBTZWUgcGFnZQor CSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBpbiBoZWFwYW1faW5kZXhzY2FuLmMu ICBTZWUgcGFnZQogCSAqIHJlY3ljbGluZy8idmlzaWJsZSB0byBldmVyeW9uZSIgbm90ZXMgaW4g bmJ0cmVlIFJFQURNRS4KIAkgKi8KIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50 WG1pbikpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Js b29tL2JsdXRpbHMuYwppbmRleCA1MTExY2RjNmQuLjYxMzlmYjk1OSAxMDA2NDQKLS0tIGEvY29u dHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE0 NiwxMCArMTQ2LDEyIEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNj YW4gPSBibGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYmxyZXNjYW4sCiAJCS5hbWdldHR1cGxl ID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxM LAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJsZ2V0Yml0 bWFwLAogCQkuYW1lbmRzY2FuID0gYmxlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJ LmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRl cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5h bXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGY0OGRhMzE4NS4uZDY5ZDhj YTRiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2NywxMCArMTY3LDEyIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAgICAg YW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAgYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdl dHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWdldGJhdGNoX2Z1bmN0aW9uIGFt Z2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAgYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24g YW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1raWxsaXRlbXNiYXRjaF9m dW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOwkvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0 bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1lbmRz Y2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9z OyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0 cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBv c3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVs c2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUgTlVMTCAq LwpAQCAtNjc2LDggKzY3OCwzOCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxhdGlv biwKICAgIDxlbXBoYXNpcz5tdXN0PC9lbXBoYXNpcz4gY3JlYXRlIHRoaXMgc3RydWN0IGJ5IGNh bGxpbmcKICAgIDxmdW5jdGlvbj5SZWxhdGlvbkdldEluZGV4U2NhbigpPC9mdW5jdGlvbj4uICBJ biBtb3N0IGNhc2VzCiAgICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiBkb2VzIGxp dHRsZSBiZXlvbmQgbWFraW5nIHRoYXQgY2FsbCBhbmQgcGVyaGFwcwotICAgYWNxdWlyaW5nIGxv Y2tzOworICAgYWNxdWlyaW5nIGxvY2tzIGFuZCBpbml0aWFsaXppbmcgc3RhbmRhcmQgPHN0cnVj dG5hbWU+SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4gZmllbGRzOwogICAgdGhlIGludGVyZXN0 aW5nIHBhcnRzIG9mIGluZGV4LXNjYW4gc3RhcnR1cCBhcmUgaW4gPGZ1bmN0aW9uPmFtcmVzY2Fu PC9mdW5jdGlvbj4uCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSB0aGUgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UKKyAgIG11c3QgYWxzbyBzZXQgdGhl IGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIHNjYW4gZGVzY3JpcHRvcjoKKyAgIDxpdGVtaXplZGxp c3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0 O21heGl0ZW1zYmF0Y2g8L2xpdGVyYWw+OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMKKyAg ICAgIHRoYXQgY2FuIGFwcGVhciBpbiBhIHNpbmdsZSBiYXRjaCAodHlwaWNhbGx5IGRlcml2ZWQg ZnJvbSB0aGUgaW5kZXggcGFnZQorICAgICAgc2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5kZXhU dXBsZXNQZXJQYWdlPC9saXRlcmFsPikuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRj aF9pbmRleF9vcGFxdWVfc2l6ZTwvbGl0ZXJhbD46IHRoZQorICAgICAgPGZ1bmN0aW9uPk1BWEFM SUdOPC9mdW5jdGlvbj4nZCBzaXplIG9mIHRoZSBpbmRleCBBTSdzIHBlci1iYXRjaCBvcGFxdWUK KyAgICAgIGFyZWEuICBFYWNoIGJhdGNoIGFsbG9jYXRpb24gcmVzZXJ2ZXMgdGhpcyBtdWNoIHNw YWNlIGltbWVkaWF0ZWx5IGJlZm9yZQorICAgICAgdGhlIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkJh dGNoRGF0YTwvc3RydWN0bmFtZT4gcG9pbnRlciwgZm9yIHVzZSBieSB0aGUKKyAgICAgIGluZGV4 IEFNIHRvIHN0b3JlIHBlci1wYWdlIG5hdmlnYXRpb24gc3RhdGUgKGUuZy4sIGJhdGNoIGluZGV4 IHBhZ2UncworICAgICAgYnVmZmVyIHBpbiBhbmQgc2libGluZyBwYWdlIGxpbmtzKS4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNoX3R1cGxlc193b3Jrc3BhY2U8L2xpdGVyYWw+OiB0 aGUgc2l6ZSBpbiBieXRlcworICAgICAgb2YgdGhlIHBlci1iYXRjaCB0dXBsZSBzdG9yYWdlIHdv cmtzcGFjZSB1c2VkIGZvciBpbmRleC1vbmx5IHNjYW5zCisgICAgICAodHlwaWNhbGx5IDxsaXRl cmFsPkJMQ0tTWjwvbGl0ZXJhbD4pLCBvciAwIGlmIHRoZSBpbmRleCBBTSBkb2VzIG5vdAorICAg ICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zLiAgVGhlIHdvcmtzcGFjZSBpcyBhY2Nlc3NpYmxl IHZpYQorICAgICAgPHN0cnVjdGZpZWxkPmJhdGNoLSZndDtjdXJyVHVwbGVzPC9zdHJ1Y3RmaWVs ZD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTc0OSw2ICs3ODEsMjYzIEBAIGFtZ2V0dHVwbGUgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgog ICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8 cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZl cnNpb24gMjAsIG1hcmsvcmVzdG9yZSBvZgorICAgIHNjYW4gcG9zaXRpb25zIGlzIG9ubHkgc3Vw cG9ydGVkIGZvciBzY2FucyB0aGF0IHVzZSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IHNjYW5zIGRvIG5vdCBzdXBwb3J0IG1hcmsvcmVzdG9yZS4gIFRoZQorICAgIG1hcmsvcmVzdG9y ZSBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgdGFibGUgQU0sIHRocm91Z2ggaXRzCisgICAg PGZ1bmN0aW9uPnRhYmxlX2luZGV4X2ZldGNoX21hcmtwb3M8L2Z1bmN0aW9uPiBhbmQKKyAgICA8 ZnVuY3Rpb24+dGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3M8L2Z1bmN0aW9uPiBpbXBsZW1lbnRh dGlvbnMuCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGlu Zz4KK0luZGV4U2NhbkJhdGNoCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorICAgICAgICAgICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVybiB0aGUgbmV4dCBi YXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmluZyBpbiB0aGUKKyAg IGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0 dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHdpdGgg aW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRo ZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAgIHNjYW4gZGlyZWN0 aW9uLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMg aW4gYmF0Y2hlcworICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBh bGwgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBmcm9tIGEKKyAgIHNpbmdsZSBpbmRleCBwYWdlIHRv Z2V0aGVyLCB0aGUgdGFibGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCisg ICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBUaGUgdGFibGUgQU0gcGFzc2VzIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xp dGVyYWw+IHRvIGluZGljYXRlIHdoZXJlIHRoZQorICAgaW5kZXggQU0gc2hvdWxkIGNvbnRpbnVl IHNjYW5uaW5nIGZyb20gKG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZQorICAgZmly c3QgY2FsbCBmb3IgdGhlIHNjYW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJv bQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGlu ZGV4IHBhZ2UgdG8gcmVhZCBuZXh0LgorICAgVW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4sIHdoZXJlIHRoZSBpbmRleCBBTSBtYWludGFpbnMgaXRzCisgICBvd24gc2NhbiBw b3NpdGlvbiwgd2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGl0IGlzIHRoZSBj YWxsZXIKKyAgIHRoYXQgY29udHJvbHMgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIHRocm91Z2gg dGhlIGluZGV4LiAgVGhlIGNhbGxlcgorICAgd2lsbCB0eXBpY2FsbHkgcGFzcyB0aGUgbW9zdCBy ZWNlbnRseSByZXR1cm5lZCBiYXRjaCwgYnV0IHRoaXMgaXMgbm90CisgICBndWFyYW50ZWVkICZt ZGFzaDsgZm9yIGV4YW1wbGUsIGZvbGxvd2luZyB0aGUgcmVzdG9yYXRpb24gb2YgYSBtYXJrZWQK KyAgIHBvc2l0aW9uLCBhbiBlYXJsaWVyIGJhdGNoIG1heSBiZSBwYXNzZWQgaW5zdGVhZC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgaW5kZXggcGFnZSBj b250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1cGxlLiAgQSBidWZmZXIKKyAg IHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBBTSBhcyBhbiBpbnRlcmxvY2sgYWdh aW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29t bWFuZD4uICBUaGUgdGFibGUgQU0gZHJvcHMgdGhpcyBpbnRlcmxvY2sKKyAgIGJ5IGNhbGxpbmcg PGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gd2hlbiBpdCBpcyBzYWZlIHRvIGRv IHNvLgorICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMg b24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50CisgICBkdXJpbmcgaW5kZXggc2NhbnMuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHRoYXQgaXMg cmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9u Z2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBpcyB1cCB0byB0aGUgdGFi bGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSByZWxlYXNlZC4gIE5vdGUK KyAgIGFsc28gdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBt dXN0IG5ldmVyIG1vZGlmeSB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3Rm aWVsZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEKKyAgIHJlZmVy ZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRl cmZhY2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1lIGNhdmVhdHMgZGVzY3Jp YmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFwcGx5IGhlcmUKKyAgIHRv bzogYW4gZW50cnkgaW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5k ZXggY29udGFpbnMKKyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLCBub3Qg dGhhdCB0aGUgdHVwbGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0cyBpbiB0aGUgaGVhcCBv ciB3aWxsIHBhc3MgdGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gbXVzdCBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xp dGVyYWw+IHRvIGluZGljYXRlIHdoZXRoZXIgcmVjaGVja2luZyBvZgorICAgc2NhbiBrZXlzIGlz IHJlcXVpcmVkLCBpbiB0aGUgc2FtZSB3YXkgYXMgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPgorICAgZG9lcy4gSG93ZXZlciwgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0 ZXJhbD4gbXVzdCBiZSBzZXQgY29uc2lzdGVudGx5CisgICBmb3IgYW4gZW50aXJlIHNjYW4gcmF0 aGVyIHRoYW4gdmFyeWluZyBvbiBhIHBlci10dXBsZSBiYXNpcy4gVGhpcyBpcyBhIGtleQorICAg ZGlmZmVyZW5jZSBmcm9tIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHdoaWNoIGNh biBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IGluZGVwZW5k ZW50bHkgZm9yIGVhY2ggdHVwbGUgaXQgcmV0dXJucy4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2Rz IHRoYXQgcmVxdWlyZSBncmFudWxhciBjb250cm9sIG92ZXIKKyAgIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgdXNlIHRoZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+CisgICBpbnRlcmZhY2UgaW5zdGVhZCBvZiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTaW1pbGFybHksIHRoZSA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2VzIG5vdCBjdXJyZW50bHkK KyAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyB0aGF0IHJldHVybiBkYXRhIGluIHRoZSBmb3Jt IG9mIGEKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9pbnRlci4gIElu ZGV4LW9ubHkgc2NhbnMgd29yayBieQorICAgY29weWluZyA8c3RydWN0bmFtZT5JbmRleFR1cGxl PC9zdHJ1Y3RuYW1lPiByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMgaW50byBhCisgICBsb2NhbCBi dWZmZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmF0Y2guICA8bGl0ZXJhbD54c19pdHVwZGVzYzwv bGl0ZXJhbD4KKyAgIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyBhbHJlYWR5IGRlc2NyaWJlZCBm b3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi4KKyAgIFRoZSBpbmRleCBhY2Nlc3Mg bWV0aG9kIG11c3Qgbm90IHNldCB0aGUgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwvbGl0ZXJh bD4KKyAgIGZpZWxkIGl0c2VsZi4KKyAgIFdpdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiwgdGhlIGluZGV4IEFNIHNldHMKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9s aXRlcmFsPiB0byBwb2ludCB0byBhIHJlY29uc3RydWN0ZWQKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBU dXBsZTwvc3RydWN0bmFtZT4gd2hvc2UgbGlmZXRpbWUgZXh0ZW5kcyB1bnRpbCB0aGUgbmV4dAor ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYWxsICZtZGFzaDsgb25seSBvbmUg dHVwbGUgaXMgdmFsaWQgYXQgYQorICAgdGltZS4gIFdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiwgbXVsdGlwbGUgYmF0Y2hlcyBhcmUgaGVsZCBvcGVuCisgICBzaW11bHRhbmVv dXNseSBhbmQgaXRlbXMgYXJlIGNvbnN1bWVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSB0YWJsZSBB TSwgc28KKyAgIHRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgc2luZ2xlLXR1cGxlIGxpZmV0aW1lIGZv ciBwZXItaXRlbQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVy cy4gIFRoZSBiYXRjaCBpbmZyYXN0cnVjdHVyZQorICAgcHJvdmlkZXMgcGVyLWJhdGNoIHN0b3Jh Z2UgZm9yIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IGNvcGllcywKKyAgIGJ1 dCBoYXMgbm8gYW5hbG9nb3VzIG1lY2hhbmlzbSBmb3IgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9z dHJ1Y3RuYW1lPiBkYXRhCisgICAodXNlZCBieSBzb21lIGluZGV4IEFNcyBmb3IgcmVjb25zdHJ1 Y3RlZCB0dXBsZXMgdGhhdCBtaWdodCBub3QgZml0IGluCisgICA8c3RydWN0bmFtZT5JbmRleFR1 cGxlPC9zdHJ1Y3RuYW1lPiBmb3JtYXQpLiAgVGhpcyBsaW1pdGF0aW9uIGNvdWxkIGJlCisgICBh ZGRyZXNzZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNz IG1ldGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4KKyAgIG9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1l dGhvZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRv ZXNuJ3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBp dHMKKyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVz dCBiZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5n Pgordm9pZAorYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAg ICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVk IGJ5IHRoZSB0YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRf YmF0Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVj eWNsaW5nIGludGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBp bmRleAorICAgbGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5k ZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxl CisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJh Y3RpY2UgdGhlIGJ1aWx0LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBz aW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZv cgorICAgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5z LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlCisgICBjYWxsZWQgYXQgbW9zdCBvbmNlIGZvciBlYWNo IGd1YXJkZWQgYmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbiB0aGUgaW5kZXgKKyAgIEFNIGhh cyBhbHJlYWR5IHVuZ3VhcmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4KKyAg IDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVl LCB3aGljaCBpcyB0aGUKKyAgIGNvbW1vbiBjYXNlKS4KKyAgPC9wYXJhPgorCisgIDxub3RlPgor ICAgPHBhcmE+CisgICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24g YnVmZmVyIHBpbnMgd2hlbiB0aGlzIHNlcnZlcyBhbgorICAgIGludGVybmFsIHB1cnBvc2UgKGZv ciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGluZGV4Cisg ICAgcGFnZXMgZm9yIHJldXNlIGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGNhbGxzKS4gIEhvd2V2ZXIsCisgICAgYW55IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBp bnMgbWFuYWdlZCBieSB0aGUgaW5kZXggQU0gbXVzdCBiZSBzdXJlCisgICAgdG8gZnJlZSB0aGUg cGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGF0IGEgbWluaW11bSB3aGVuZXZlcgorICAgIDxm dW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIGFuZCB0eXBpY2FsbHkgd2hl bgorICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCkuICBJdCBtdXN0 IGFsc28ga2VlcCB0aGUgbnVtYmVyIG9mCisgICAgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21h bGwuCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+ YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYW55IGlu ZGV4CisgICBhY2Nlc3MgbWV0aG9kIHRoYXQgcHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9p ZAorYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAg ICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxlZCBi eSB0aGUgdGFibGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhIGJhdGNoIHRo YXQKKyAgIGNvbnRhaW5zIGRlYWQgaXRlbXMsIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRl cmFsPiBiaXRzIGluIHRoZSBiYXRjaCdzCisgICBpbmRleCBwYWdlLiAgVGhlIGJhdGNoJ3MgaW5k ZXggcGFnZSB3aWxsIG5vdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlcjsgdGhlCisgICBpbmRleCBB TSBtdXN0IGFjcXVpcmUgYW5kIHJlbGVhc2UgaXRzIG93biBsb2NrIChhbmQgcGluKSBvbiB0aGUg aW5kZXggcGFnZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW1wbGVtZW50aW5nIDxmdW5j dGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwgZm9yCisgICA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IEFNcyAodGhvc2UgdGhhdCBkb24ndCBj YW4gbGVhdmUKKyAgIHRoZSBmaWVsZCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4pLCBi dXQgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yCisgICBwZXJmb3JtYW5jZSwgYXMgaXQgYWxs b3dzIGZ1dHVyZSBzY2FucyB0byBza2lwIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4KKyAgIFRo ZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkgc3VwcG9ydHMKKyAgIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSkgaW1wbGVtZW50cworICAgPGxp dGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5IGluZGV4 IGFjY2VzcyBtZXRob2RzCisgICBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1l bnQgdGhpcyBmZWF0dXJlLiAgVGhlIHRhYmxlIEFNIG1heQorICAgY2FsbCA8ZnVuY3Rpb24+dGFi bGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMg YXMKKyAgIHRoZSBzY2FuIHByb2dyZXNzZXMuICBJZiB0aGUgYmF0Y2ggY29udGFpbnMgYW55IHN1 Y2ggZGVhZCBpdGVtcywgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0 cnVjdGZpZWxkPiBhcnJheSB3aWxsIGhhdmUgYmVlbiBzb3J0ZWQgYW5kCisgICBkZWR1cGxpY2F0 ZWQgYmVmb3JlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVk LCB3aXRoCisgICBpdGVtIG9mZnNldHMgYXBwZWFyaW5nIGluIGFzY2VuZGluZyBvcmRlciAodGhh dCBpcywgaW4gaW5kZXggcGFnZSBvcmRlciwKKyAgIHdoaWNoIGlzIGFsc28gYmF0Y2ggb3JkZXIp IGFuZCBubyBvZmZzZXQgYXBwZWFyaW5nIG1vcmUgdGhhbiBvbmNlLiAgSW5kZXgKKyAgIGFjY2Vz cyBtZXRob2RzIGNhbiByZWx5IG9uIHRoaXMgb3JkZXJpbmcgd2hlbiBwcm9jZXNzaW5nIGRlYWQg aXRlbXM6IHRoZQorICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5 IGNhbiBiZSB3YWxrZWQgaW4gbG9ja3N0ZXAgd2l0aAorICAgdGhlIGluZGV4IHBhZ2UncyBpdGVt IHBvaW50ZXJzLCBzaW5jZSBib3RoIGFyZSBpbiBhc2NlbmRpbmcgcGFnZSBvZmZzZXQKKyAgIG51 bWJlciBvcmRlci4gIFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAor ICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtPC9mdW5jdGlvbj4gaW4g YW55IHBhcnRpY3VsYXIgb3JkZXIuCisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxwYXJhPgor ICAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gcmVseSBvbiB0aGUKKyAgICA8c3RydWN0ZmllbGQ+a2lsbF9wcmlvcl90dXBsZTwvc3Ry dWN0ZmllbGQ+IG1lY2hhbmlzbSBpbnN0ZWFkIHRvIG1hcmsgZGVhZAorICAgIHR1cGxlczsgdGhl IDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRh dGlvbgorICAgIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGV4YW1wbGUuCisgICA8L3BhcmE+CisgIDwv bm90ZT4KKworICA8cGFyYT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxp dGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTQorICAgbXVzdCB2ZXJpZnkgdGhhdCB0 aGUgaW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGJhdGNoIHdhcwor ICAgb3JpZ2luYWxseSByZWFkLiAgVGhlIHN0YW5kYXJkIHdheSB0byBkbyB0aGlzIGlzIHRvIGNh bGwKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4gZHVy aW5nCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCB3aGljaCByZWxlYXNlcyB0 aGUgaW5kZXggcGFnZSBsb2NrIGFuZAorICAgc2F2ZXMgdGhlIHBhZ2UgTFNOIGluCisgICB0aGUg YmF0Y2gncyA8c3RydWN0ZmllbGQ+bHNuPC9zdHJ1Y3RmaWVsZD4gZmllbGQuICBMYXRlciwgd2l0 aGluCisgICA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXgg QU0gcmUtcmVhZHMgdGhlIHBhZ2UsCisgICBjb21wYXJlcyB0aGUgY3VycmVudCBwYWdlIExTTiBh Z2FpbnN0CisgICA8c3RydWN0ZmllbGQ+YmF0Y2gtJmd0O2xzbjwvc3RydWN0ZmllbGQ+LCBhbmQg Z2l2ZXMgdXAgb24gc2V0dGluZworICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBp ZiB0aGUgTFNOIGhhcyBhZHZhbmNlZC4gIEFuIGFkdmFuY2VkIExTTgorICAgaW5kaWNhdGVzIHRo YXQgdGhlIHBhZ2Ugd2FzIG1vZGlmaWVkICZtZGFzaDsgcG9zc2libHkgYnkKKyAgIDxjb21tYW5k PlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsaW5nIHRhYmxlIFRJRHMgJm1kYXNoOyBzbyBpdCB3b3Vs ZCBiZQorICAgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQg dG8gdGhlIHNhbWUgaGVhcC90YWJsZQorICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBfREVB RDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbgorICAgaGludCwgaXQg aXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIEItdHJlZSB1c2VzIHRoaXMgYXBwcm9hY2guCisg IDwvcGFyYT4KKworICA8d2FybmluZz4KKyAgIDxwYXJhPgorICAgIFRoaXMgTFNOIGNvbXBhcmlz b24gdGVjaG5pcXVlIHJlcXVpcmVzIHRoZSBpbmRleCBBTSB0byB1c2UgZmFrZQorICAgIChtb25v dG9uaWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZvciByZWxhdGlvbnMgd2hl cmUgV0FMIGlzCisgICAgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVhbCBMU05zIGFyZSBub3QgYXZh aWxhYmxlIGluIHRoYXQgY2FzZS4gIFNlZSB0aGUKKyAgICBCLXRyZWUgaW5kZXggaW1wbGVtZW50 YXRpb24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUgb2YgdGhpcworICAgIHRlY2huaXF1ZS4gIEFu IGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcyBjYW4gc3RpbGwKKyAg ICBwcm92aWRlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIGJ1dCBzaG91 bGQgc2ltcGx5IGRvCisgICAgbm90aGluZyB3aGVuIHRoZSByZWxhdGlvbiBkb2VzIG5vdCBnZW5l cmF0ZSBXQUwgKGkuZS4sIHdoZW4KKyAgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9m dW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOCisgICAgY29tcGFyaXNvbiB3b3VsZCBi ZSB1bnJlbGlhYmxlLgorICAgPC9wYXJhPgorICA8L3dhcm5pbmc+CisKKyAgPHRpcD4KKyAgIDxw YXJhPgorICAgIEluZGV4IEFNcyBhcmUgbm90IG9ibGlnYXRlZCB0byB1c2UKKyAgICA8ZnVuY3Rp b24+aW5kZXhhbV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgdGhleSBjYW4g aW1wbGVtZW50CisgICAgdGhlaXIgb3duIGVxdWl2YWxlbnQsIGFuZCBhcmUgZnJlZSB0byB1c2Ug dGhlIGJhdGNoCisgICAgPHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHdo YXRldmVyIHdheSB0aGV5IGRlZW0gbmVjZXNzYXJ5CisgICA8L3BhcmE+CisgIDwvdGlwPgorCisg IDxwYXJhPgorICAgVGhpcyBMU04tYmFzZWQgdmVyaWZpY2F0aW9uIG1lYW5zIHRoYXQgdGhlIHRh YmxlIEFNIG5lZWQgbm90IGNvbnNpZGVyCisgICB3aGV0aGVyIHVuZ3VhcmRpbmcgYSBiYXRjaCBj b3VsZCBpbnRyb2R1Y2UgVElEIHJlY3ljbGluZyBoYXphcmRzIGZvciBhCisgICBzdWJzZXF1ZW50 IDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gY2FsbC4gIFRoZSBoYXphcmRz IGFyZSB0aGUKKyAgIHNhbWUgaW4gYm90aCBjYXNlcywgYnV0IHNpbmNlIDxmdW5jdGlvbj5hbWtp bGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4KKyAgIGluZGVwZW5kZW50bHkgdmVyaWZpZXMgdGhlIHBh Z2UgTFNOIGFuZCBjYW4gYWx3YXlzIHNhZmVseSBnaXZlIHVwIG9uCisgICBzZXR0aW5nIDxsaXRl cmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMsIGNvcnJlY3RuZXNzIGlzIG9idmlvdXMgd2l0aG91 dCBhbnkKKyAgIGNvdXBsaW5nIGJldHdlZW4gdGhlIHR3by4KKyAgPC9wYXJhPgogCiAgIDxwYXJh PgogPHByb2dyYW1saXN0aW5nPgpAQCAtNzY4LDggKzEwNTcsOCBAQCBhbWdldGJpdG1hcCAoSW5k ZXhTY2FuRGVzYyBzY2FuLAogICAgaXRzZWxmLCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVj ayBib3RoIHRoZSBzY2FuIGNvbmRpdGlvbnMgYW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVk aWNhdGUgKGlmIGFueSkgZm9yIHJlY2hlY2thYmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAg ICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IGFuZAotICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUg dXNlZCBpbiB0aGUgc2FtZSBpbmRleCBzY2FuOyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4sCisgICBvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGlu IGFueSBnaXZlbiBpbmRleCBzY2FuOyB0aGVyZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0 b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFp bmVkCiAgICBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpA QCAtNzgxLDYgKzEwNzAsMzkgQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBJ bmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiB3aWxsCisgICB0eXBpY2FsbHkgYWxzbyBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+LCBhbmQgYWxtb3N0IGFsbCBvZgorICAgdGhlIGluZGV4IEFNJ3MgaW50 ZXJuYWwgc2Nhbm5pbmcgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHBhdGhzLiAgVGhl CisgICBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBkdXJpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4gb25seSBvbmUKKyAgIGJhdGNoIGlzIGFsbG9jYXRlZCBhdCBhIHRpbWUgKHZp YSA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoPC9mdW5jdGlvbj4pLAorICAgdW5s aWtlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gd2hlcmUgdGhlIHRhYmxlIEFNIG1h bmFnZXMgc2V2ZXJhbAorICAgYmF0Y2hlcyBpbiBhIGRlZGljYXRlZCBiYXRjaCByaW5nIGJ1ZmZl ciBkYXRhIHN0cnVjdHVyZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIG9ubHkgY2hh bmdlIG5lZWRlZCB0byBtYWludGFpbiB0aGlzIGludmFyaWFudCBpcyBhIHNpbmdsZSBjYWxsIHRv CisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2g8L2Z1bmN0aW9uPiBhdCB0 aGUgcG9pbnQgd2hlcmUgdGhlCisgICBzY2FuIG1vdmVzIGJldHdlZW4gaW5kZXggcGFnZXMsIGNv bmRpdGlvbmFsIG9uIHRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD51c2ViYXRjaHJpbmc8L3N0 cnVjdGZpZWxkPiBmaWVsZCBiZWluZyBmYWxzZSAoaW5kaWNhdGluZyBhCisgICBiaXRtYXAgaW5k ZXggc2NhbikuICBUaGUgaW5kZXggQU0gcmVsZWFzZXMgaXRzIHByaW9yIGJhdGNoCisgICBqdXN0 IGFzIGl0IGlzIGFib3V0IHRvIGdlbmVyYXRlIHRoZSBuZXh0IGJhdGNoICZtZGFzaDsgdGhlIHNh bWUgcG9pbnQKKyAgIHdoZXJlIGl0IGV4dHJhY3RzIG5hdmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMg c2libGluZy1wYWdlIGxpbmtzKSBmcm9tCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFs Pi4gIE5vIG90aGVyIGNoYW5nZXMgdG8gdGhlIGluZGV4IEFNJ3MKKyAgIHNjYW5uaW5nIGxvZ2lj IGFyZSBuZWVkZWQuICBUaGlzIGVhcmx5IHJlbGVhc2UgaXMgc3BlY2lmaWMgdG8KKyAgIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNjYW5zOyBkdXJpbmcKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgdGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVy YWw+CisgICBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgY2FsbGVyICh0aGUgdGFibGUgQU0pLCBh bmQgdGhlIGluZGV4IEFNIG11c3QKKyAgIG5ldmVyIHJlbGVhc2UgaXQuICBTZWUgPGZ1bmN0aW9u Pl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEgcmVmZXJlbmNlCisgICBleGFtcGxlLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFs bHkgYW5kIHJldXNlZCBieSB0aGUgbmV4dAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9hbGxv Y19iYXRjaDwvZnVuY3Rpb24+IGNhbGwsIGF2b2lkaW5nIHJlcGVhdGVkCisgICBtZW1vcnkgYWxs b2NhdGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2FuLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiA8 cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCkBAIC03OTUsMzIgKzExMTcsNTIgQEAgYW1lbmRzY2FuIChJ bmRleFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFt bWFya3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mg c2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIDwvcHJvZ3JhbWxpc3Rp bmc+Ci0gICBNYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3MgbWV0aG9kIG5l ZWQgb25seSBzdXBwb3J0IG9uZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9uIHBlciBzY2Fu LgorICAgTm90aWZ5IHRoZSBpbmRleCBBTSB0aGF0IHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBj aGFuZ2UgdGhlIHNjYW4ncworICAgbG9naWNhbCBwb3NpdGlvbiBpbiBhIHdheSB0aGF0IG1heSBp bnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQKKyAgIGluZGVwZW5kZW50bHkgdHJhY2tzIHRo ZSBzY2FuJ3MgcHJvZ3Jlc3MuICBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgorICAgdGhl IHRhYmxlIEFNIGlzIGFib3V0IHRvIHByb2Nlc3MgYSBiYXRjaCBpbiBhIGRpZmZlcmVudCBkaXJl Y3Rpb24gdGhhbgorICAgd2FzIHVzZWQgd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0 dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuZCBhbHNvIHdo ZW4gYSBtYXJrZWQgc2NhbiBwb3NpdGlvbiBpcworICAgYWJvdXQgdG8gYmUgcmVzdG9yZWQuICBT b21lIGluZGV4IEFNcyBtYWludGFpbiBpbnRlcm5hbCBzdGF0ZSB0aGF0CisgICBhZHZhbmNlcyBp biBsb2Nrc3RlcCB3aXRoIHRoZSBzY2FuIHVuZGVyIHRoZSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0 aGUgc2NhbgorICAgZGlyZWN0aW9uIHdpbGwgbm90IGNoYW5nZS4gIFN1Y2ggc3RhdGUgbWF5IGZh bGwgYmVoaW5kIHRoZSBzY2FuJ3MgdHJ1ZQorICAgcG9zaXRpb24gd2l0aG91dCBoYXJtIChzaW1w bHkgcmVhZGluZyB0aGUgbmV4dCBpbmRleCBwYWdlIHdpbGwgYWxsb3cgdGhlCisgICBzdGF0ZSB0 byA8cXVvdGU+Y2F0Y2ggdXA8L3F1b3RlPiksIGJ1dCBtdXN0IG5ldmVyIGdldCBhaGVhZCBvZiBp dC4gIFdoZW4KKyAgIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIG9yIGEgbWFya2VkIHBvc2l0 aW9uIGlzIHJlc3RvcmVkLCB0aGUgYXNzdW1wdGlvbgorICAgaXMgdmlvbGF0ZWQsIHNvIHRoZSBp bmRleCBBTSBtdXN0IHJlc2V0IHRoZSBzdGF0ZSB0byBhIHNhZmUgc3RhcnRpbmcgcG9pbnQKKyAg IGZvciB0aGUgbmV3IGRpcmVjdGlvbi4gIEZvciBleGFtcGxlLCBCLXRyZWUgdXNlcyB0aGlzIGNh bGxiYWNrIHRvIHJlc2V0IGl0cworICAgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVy YWw+IGFycmF5IGtleXMgdG8gdGhlaXIgaW5pdGlhbCBwb3NpdGlvbnMKKyAgIGZvciB0aGUgbmV3 IHNjYW4gZGlyZWN0aW9uLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9u PmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0 aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNu J3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGlu IGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBt YXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlv bj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBkaXJlY3Rpb24gY2hhbmdlLCB0 aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0aGUgYmF0Y2gncworICAg PHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHJlZmxlY3QgdGhlIG5ldyBz Y2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4gIFRoZSBpbmRleCBBTSBz aG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdoZW4gcmVzZXR0aW5nIGFueSBz dGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkgdGhlIHNjYW4gaXMKKyAgIHBy b2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFya2VkIHBvc2l0aW9uLCB0aGUg YmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGlzIG5vdCBtb2RpZmll ZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdoZW4gdGhlIGJhdGNoIHdhcyBv cmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhlIGJhdGNoCisgICBwYXNzZWQg dG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0aGUgYmF0Y2ggdGhhdCB3aWxs IG5leHQgYmUKKyAgIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFz IGl0cworICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uICBOb3RlIGluIHBhcnRpY3Vs YXIgdGhhdCB0aGUKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LjxzdHJ1Y3RmaWVs ZD5kaXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcworICAgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBz YW1lIHNjYW4gZGlyZWN0aW9uIGFzIHdoZW4KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5j dGlvbj4gd2FzIGNhbGxlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotPHByb2dyYW1saXN0aW5n Pgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rp bmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3Np dGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9z PC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MK LSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRo ZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3Ry dWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0 IHRvIE5VTEwuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGhhdmUgcHJpdmF0ZSBzdGF0 ZSB3aGljaCBtdXN0IGJlIHJlc2V0IHdoZW4gdGhlCisgICBzY2FuIHBvc2l0aW9uIGNoYW5nZXMg bXVzdCBwcm92aWRlIGFuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGltcGxl bWVudGF0aW9uLiAgSW5kZXggQU1zIHdpdGggbm8gc3VjaCBzdGF0ZSBtYXkgc2V0CisgICA8c3Ry dWN0ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IHRvIE5VTEwuICBUaGUKKyAgIDxmdW5j dGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQg d2hlbiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdo IHRoZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCiAgIDwv cGFyYT4KIAogICA8cGFyYT4KQEAgLTk3NSw2ICsxMzE3LDggQEAgYW10cmFuc2xhdGVjbXB0eXBl IChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAg ICAgIEFjY2VzcyBtZXRob2RzIHRoYXQgYWx3YXlzIHJldHVybiBlbnRyaWVzIGluIHRoZSBuYXR1 cmFsIG9yZGVyaW5nCiAgICAgICAgb2YgdGhlaXIgZGF0YSAoc3VjaCBhcyBidHJlZSkgc2hvdWxk IHNldAogICAgICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1 ZS4KKyAgICAgICBCb3RoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYW5kIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgICAgICBzY2FucyBzdXBwb3J0IHRoaXMgY2Fw YWJpbGl0eS4KICAgICAgICBDdXJyZW50bHksIHN1Y2ggYWNjZXNzIG1ldGhvZHMgbXVzdCB1c2Ug YnRyZWUtY29tcGF0aWJsZSBzdHJhdGVneQogICAgICAgIG51bWJlcnMgZm9yIHRoZWlyIGVxdWFs aXR5IGFuZCBvcmRlcmluZyBvcGVyYXRvcnMuCiAgICAgICA8L3BhcmE+CkBAIC05OTQsMzQgKzEz MzgsNDEgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3Bm YW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJl Y3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAorICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gc2NhbnMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0CisgICBvcmRlcmlu ZyBvcGVyYXRvcnMuICBUaGUgY29yZSBleGVjdXRvciBleHBlY3RzIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4KKyAgIHRvIHNldCA8c3RydWN0ZmllbGQ+eHNfb3JkZXJieXZhbHM8L3N0 cnVjdGZpZWxkPiBmb3IgZWFjaCByZXR1cm5lZCB0dXBsZSwKKyAgIGJ1dCB0aGVyZSBpcyBjdXJy ZW50bHkgbm8gbWVjaGFuaXNtIHRvIGFzc29jaWF0ZSBwZXItaXRlbSBvcmRlcmluZyB2YWx1ZXMK KyAgIHdpdGggaW5kaXZpZHVhbCBpdGVtcyB3aXRoaW4gYSBiYXRjaC4gIFRoaXMgd291bGQgcmVx dWlyZSBhbiBhZGRpdGlvbmFsCisgICBsYXllciBvZiBpbmRpcmVjdGlvbiB0aGF0IGRvZXMgbm90 IHlldCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGluIGEKKyAgIGZ1dHVyZSB2ZXJzaW9uIG9m IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhh cyBhIDxsaXRlcmFsPmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQsCiAgICB3aGljaCBjYW4g YmUgZWl0aGVyIDxsaXRlcmFsPkZvcndhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiAodGhlIG5v cm1hbCBjYXNlKQogICAgb3IgIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4uICBJZiB0aGUgZmlyc3QgY2FsbCBhZnRlcgogICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5j dGlvbj4gc3BlY2lmaWVzIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4s IHRoZW4gdGhlCi0gICBzZXQgb2YgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpcyB0byBiZSBzY2Fu bmVkIGJhY2stdG8tZnJvbnQgcmF0aGVyIHRoYW4gaW4KLSAgIHRoZSBub3JtYWwgZnJvbnQtdG8t YmFjayBkaXJlY3Rpb24sIHNvIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBy ZXR1cm4KLSAgIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZSBpbmRleCwgcmF0aGVyIHRo YW4gdGhlIGZpcnN0IG9uZSBhcyBpdAotICAgbm9ybWFsbHkgd291bGQuICAoVGhpcyB3aWxsIG9u bHkgb2NjdXIgZm9yIGFjY2VzcwotICAgbWV0aG9kcyB0aGF0IHNldCA8c3RydWN0ZmllbGQ+YW1j YW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuKSAgQWZ0ZXIgdGhlCi0gICBmaXJzdCBjYWxs LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8gYWR2 YW5jZSB0aGUgc2NhbiBpbgorICAgcmV0dXJuZWQgYmF0Y2ggbXVzdCBiZSB0aGUgYmF0Y2ggY29u dGFpbmluZyB0aGUgbGFzdCBtYXRjaGluZyBpdGVtKHMpLAorICAgcmF0aGVyIHRoYW4gdGhlIGJh dGNoIGNvbnRhaW5pbmcgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0ocykuCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8gYWR2YW5jZSB0aGUgc2Nh biBpbgogICAgZWl0aGVyIGRpcmVjdGlvbiBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVk IGVudHJ5LiAgKEJ1dCBpZgogICAgPHN0cnVjdGZpZWxkPmFtY2FuYmFja3dhcmQ8L3N0cnVjdGZp ZWxkPiBpcyBmYWxzZSwgYWxsIHN1YnNlcXVlbnQKICAgIGNhbGxzIHdpbGwgaGF2ZSB0aGUgc2Ft ZSBkaXJlY3Rpb24gYXMgdGhlIGZpcnN0IG9uZS4pCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAg IEFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCBvcmRlcmVkIHNjYW5zIG11c3Qgc3VwcG9ydCA8 cXVvdGU+bWFya2luZzwvcXVvdGU+IGEKLSAgIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIg cmV0dXJuaW5nIHRvIHRoZSBtYXJrZWQgcG9zaXRpb24uICBUaGUgc2FtZQotICAgcG9zaXRpb24g bWlnaHQgYmUgcmVzdG9yZWQgbXVsdGlwbGUgdGltZXMuICBIb3dldmVyLCBvbmx5IG9uZSBwb3Np dGlvbiBuZWVkCi0gICBiZSByZW1lbWJlcmVkIHBlciBzY2FuOyBhIG5ldyA8ZnVuY3Rpb24+YW1t YXJrcG9zPC9mdW5jdGlvbj4gY2FsbCBvdmVycmlkZXMgdGhlCi0gICBwcmV2aW91c2x5IG1hcmtl ZCBwb3NpdGlvbi4gIEFuIGFjY2VzcyBtZXRob2QgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IG9yZGVy ZWQKLSAgIHNjYW5zIG5lZWQgbm90IHByb3ZpZGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rp b24+IGFuZCA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+Ci0gICBmdW5jdGlvbnMgaW4g PHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+OyBzZXQgdGhvc2UgcG9pbnRl cnMgdG8gTlVMTAotICAgaW5zdGVhZC4KKyAgIEFsbCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGluZGV4IEFNcyBpbmhlcmVudGx5IHN1cHBvcnQKKyAgIG1hcmsvcmVzdG9yZSBvZiBz Y2FuIHBvc2l0aW9ucyAoPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBBTXMK KyAgIGRvIG5vdCkuICBUaGUgbWFyay9yZXN0b3JlIGltcGxlbWVudGF0aW9uIGxpdmVzIGluIHRo ZSB0YWJsZSBBTSBhbmQgd29ya3MKKyAgIHdpdGggYW55IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgdGhhdAorICAgbWFpbnRhaW4gaW50 ZXJuYWwgc3RhdGUgd2hpY2ggdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MgbXVzdCBwcm92aWRl IGFuCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIHRvIGJlIG5v dGlmaWVkIHdoZW4gdGhlIHNjYW4ncworICAgbG9naWNhbCBwb3NpdGlvbiBjaGFuZ2VzIHVuZXhw ZWN0ZWRseSwgc3VjaCBhcyBkdXJpbmcgbWFyay9yZXN0b3JlOyBzZWUKKyAgIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3IgZGV0YWlscy4KICAgPC9wYXJhPgogCiAgIDxwYXJh PgotICAgQm90aCB0aGUgc2NhbiBwb3NpdGlvbiBhbmQgdGhlIG1hcmsgcG9zaXRpb24gKGlmIGFu eSkgbXVzdCBiZSBtYWludGFpbmVkCisgICBUaGUgc2NhbiBwb3NpdGlvbiAoaWYgYW55KSBtdXN0 IGJlIG1haW50YWluZWQgYnkgdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBBTQogICAgY29uc2lzdGVu dGx5IGluIHRoZSBmYWNlIG9mIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMgaW4g dGhlCiAgICBpbmRleC4gIEl0IGlzIE9LIGlmIGEgZnJlc2hseS1pbnNlcnRlZCBlbnRyeSBpcyBu b3QgcmV0dXJuZWQgYnkgYSBzY2FuIHRoYXQKICAgIHdvdWxkIGhhdmUgZm91bmQgdGhlIGVudHJ5 IGlmIGl0IGhhZCBleGlzdGVkIHdoZW4gdGhlIHNjYW4gc3RhcnRlZCwgb3IgZm9yCkBAIC0xMDQw LDE1ICsxMzkxLDE3IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwg T2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIHdoaWNoIHRoZSBpbmRleCByZXR1cm5z IHRoZSBhY3R1YWwgZGF0YSBub3QganVzdCB0aGUgVElEIG9mIHRoZSBoZWFwIHR1cGxlLgogICAg VGhpcyB3aWxsIG9ubHkgYXZvaWQgSS9PIGlmIHRoZSB2aXNpYmlsaXR5IG1hcCBzaG93cyB0aGF0 IHRoZSBUSUQgaXMgb24gYW4KICAgIGFsbC12aXNpYmxlIHBhZ2U7IGVsc2UgdGhlIGhlYXAgdHVw bGUgbXVzdCBiZSB2aXNpdGVkIGFueXdheSB0byBjaGVjawotICAgTVZDQyB2aXNpYmlsaXR5LiAg QnV0IHRoYXQgaXMgbm8gY29uY2VybiBvZiB0aGUgYWNjZXNzIG1ldGhvZCdzLgorICAgTVZDQyB2 aXNpYmlsaXR5LiAgQnV0IHRoYXQgaXMgbm8gY29uY2VybiBvZiB0aGUgaW5kZXggYWNjZXNzIG1l dGhvZCdzLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbnN0ZWFkIG9mIHVzaW5nIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0 aAotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxl cyBpbiBvbmUgY2FsbC4gIFRoaXMgY2FuIGJlCi0gICBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50 IHRoYW4gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBiZWNhdXNlIGl0IGFsbG93cwot ICAgYXZvaWRpbmcgbG9jay91bmxvY2sgY3ljbGVzIHdpdGhpbiB0aGUgYWNjZXNzIG1ldGhvZC4g IEluIHByaW5jaXBsZQotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2hvdWxk IGhhdmUgdGhlIHNhbWUgZWZmZWN0cyBhcyByZXBlYXRlZAorICAgSW5zdGVhZCBvZiB1c2luZyA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG9yCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKKyAgIDxmdW5jdGlv bj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNhbGwu ICBUaGlzIGNhbgorICAgYmUgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIHdpdGggYW4g PHF1b3RlPm9yZGVyZWQ8L3F1b3RlPiBzY2FuCisgICBiZWNhdXNlIGl0IGFsbG93cyBlZmZpY2ll bnQgc2VxdWVudGlhbCBhY2Nlc3MgdG8gdGFibGUgQU0gcGFnZXMgY29udGFpbmluZworICAgbWF0 Y2hlcy4gIEluIHByaW5jaXBsZSA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91 bGQgaGF2ZSB0aGUKKyAgIHNhbWUgZWZmZWN0cyBhcyByZXBlYXRlZCA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IG9yCiAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNh bGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCiAgICBzaW1wbGlmeSBt YXR0ZXJzLiAgRmlyc3Qgb2YgYWxsLCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBy ZXR1cm5zIGFsbAogICAgdHVwbGVzIGF0IG9uY2UgYW5kIG1hcmtpbmcgb3IgcmVzdG9yaW5nIHNj YW4gcG9zaXRpb25zIGlzbid0CkBAIC0xMDU5LDE1ICsxNDEyLDE1IEBAIGFtdHJhbnNsYXRlY21w dHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsK ICAgIEFsc28sIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgaW5kZXgtb25seSBzY2FucyB3aXRo CiAgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgc2luY2UgdGhlcmUgaXMgbm8g d2F5IHRvIHJldHVybiB0aGUgY29udGVudHMgb2YKICAgIGluZGV4IHR1cGxlcy4KLSAgIEZpbmFs bHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+Ci0gICBkb2VzIG5vdCBndWFyYW50 ZWUgYW55IGxvY2tpbmcgb2YgdGhlIHJldHVybmVkIHR1cGxlcywgd2l0aCBpbXBsaWNhdGlvbnMK LSAgIHNwZWxsZWQgb3V0IGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICBG aW5hbGx5LCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBkb2VzIG5vdCBob2xkIGFu eSBpbmRleCBwYWdlIHBpbnMKKyAgIGFmdGVyIGl0IHJldHVybnMgKHNpbWlsYXJseSB0byA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIHdpdGgKKyAgIGFuIE1WQ0Mgc25hcHNo b3QpLCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPi4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgogICAgTm90ZSB0aGF0IGl0IGlzIHBlcm1pdHRlZCBmb3IgYW4g YWNjZXNzIG1ldGhvZCB0byBpbXBsZW1lbnQgb25seQotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBvciB2 aWNlIHZlcnNhLAotICAgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVk IHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5j dGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LzxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciB2aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwg aW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwv cGFyYT4KIAogIDwvc2VjdDE+CkBAIC0xMTIzLDExICsxNDc2LDE3IEBAIGFtdHJhbnNsYXRlY21w dHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsK ICAgICAgPC9saXN0aXRlbT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAg QW4gaW5kZXggc2NhbiBtdXN0IG1haW50YWluIGEgcGluCi0gICAgICAgb24gdGhlIGluZGV4IHBh Z2UgaG9sZGluZyB0aGUgaXRlbSBsYXN0IHJldHVybmVkIGJ5Ci0gICAgICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW5kIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9u PiBjYW5ub3QgZGVsZXRlCi0gICAgICAgZW50cmllcyBmcm9tIHBhZ2VzIHRoYXQgYXJlIHBpbm5l ZCBieSBvdGhlciBiYWNrZW5kcy4gIFRoZSBuZWVkCi0gICAgICAgZm9yIHRoaXMgcnVsZSBpcyBl eHBsYWluZWQgYmVsb3cuCisgICAgICAgQSBwaW4gbXVzdCBiZSBoZWxkIG9uIGFueSBpbmRleCBw YWdlIHdob3NlIGl0ZW1zIG1pZ2h0IHN0aWxsIG5lZWQgdG8KKyAgICAgICBiZSBmb2xsb3dlZCwg YW5kIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPiBtdXN0IGFjcXVpcmUgYQorICAg ICAgIGNsZWFudXAgbG9jayBvbiBlYWNoIGluZGV4IHBhZ2UsIHdoaWNoIHdpbGwgYmxvY2sgaWYg YW55IG90aGVyCisgICAgICAgYmFja2VuZCBob2xkcyBhIHBpbiBvbiB0aGF0IHBhZ2UuCisgICAg ICAgRm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBh Y2Nlc3MgbWV0aG9kCisgICAgICAgbWFuYWdlcyB0aGlzIHBpbiBkaXJlY3RseS4KKyAgICAgICBG b3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucywgdGhlIGluZGV4IEFNIGhv bGRzIGEgYnVmZmVyCisgICAgICAgcGluIG9uIGVhY2ggYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2Ug KGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEpLAorICAgICAgIHdoaWxlIHRoZSB0YWJsZSBB TSBjb250cm9scyB3aGVuIHRoZSBpbnRlcmxvY2sgaXMgZHJvcHBlZCB2aWEKKyAgICAgICA8ZnVu Y3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPi4KKyAgICAgICBUaGUgbmVlZCBmb3IgdGhp cyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRl bT4KICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTExMzgsMzkgKzE0OTcsOTQgQEAgYW10cmFuc2xh dGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5 cGUpOwogICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4KICAgIFRoaXMgY3JlYXRlcyBubyBz ZXJpb3VzIHByb2JsZW1zIGlmIHRoYXQgaXRlbQogICAgbnVtYmVyIGlzIHN0aWxsIHVudXNlZCB3 aGVuIHRoZSByZWFkZXIgcmVhY2hlcyBpdCwgc2luY2UgYW4gZW1wdHkKLSAgIGl0ZW0gc2xvdCB3 aWxsIGJlIGlnbm9yZWQgYnkgPGZ1bmN0aW9uPmhlYXBfZmV0Y2goKTwvZnVuY3Rpb24+LiAgQnV0 IHdoYXQgaWYgYQorICAgaXRlbSBzbG90IHdpbGwgc2ltcGx5IGJlIHRyZWF0ZWQgYXMgbm90LXZp c2libGUuICBCdXQgd2hhdCBpZiBhCiAgICB0aGlyZCBiYWNrZW5kIGhhcyBhbHJlYWR5IHJlLXVz ZWQgdGhlIGl0ZW0gc2xvdCBmb3Igc29tZXRoaW5nIGVsc2U/CiAgICBXaGVuIHVzaW5nIGFuIE1W Q0MtY29tcGxpYW50IHNuYXBzaG90LCB0aGVyZSBpcyBubyBwcm9ibGVtIGJlY2F1c2UKICAgIHRo ZSBuZXcgb2NjdXBhbnQgb2YgdGhlIHNsb3QgaXMgY2VydGFpbiB0byBiZSB0b28gbmV3IHRvIHBh c3MgdGhlCiAgICBzbmFwc2hvdCB0ZXN0LiAgSG93ZXZlciwgd2l0aCBhIG5vbi1NVkNDLWNvbXBs aWFudCBzbmFwc2hvdCAoc3VjaCBhcwogICAgPGxpdGVyYWw+U25hcHNob3RBbnk8L2xpdGVyYWw+ KSwgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYWNjZXB0IGFuZCByZXR1cm4KLSAgIGEgcm93IHRo YXQgZG9lcyBub3QgaW4gZmFjdCBtYXRjaCB0aGUgc2NhbiBrZXlzLiAgV2UgY291bGQgZGVmZW5k Ci0gICBhZ2FpbnN0IHRoaXMgc2NlbmFyaW8gYnkgcmVxdWlyaW5nIHRoZSBzY2FuIGtleXMgdG8g YmUgcmVjaGVja2VkCi0gICBhZ2FpbnN0IHRoZSBoZWFwIHJvdyBpbiBhbGwgY2FzZXMsIGJ1dCB0 aGF0IGlzIHRvbyBleHBlbnNpdmUuICBJbnN0ZWFkLAotICAgd2UgdXNlIGEgcGluIG9uIGFuIGlu ZGV4IHBhZ2UgYXMgYSBwcm94eSB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZWFkZXIKLSAgIG1pZ2h0 IHN0aWxsIGJlIDxxdW90ZT5pbiBmbGlnaHQ8L3F1b3RlPiBmcm9tIHRoZSBpbmRleCBlbnRyeSB0 byB0aGUgbWF0Y2hpbmcKLSAgIGhlYXAgZW50cnkuICBNYWtpbmcgPGZ1bmN0aW9uPmFtYnVsa2Rl bGV0ZTwvZnVuY3Rpb24+IGJsb2NrIG9uIHN1Y2ggYSBwaW4gZW5zdXJlcwotICAgdGhhdCA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbm5vdCBkZWxldGUgdGhlIGhlYXAgZW50cnkgYmVmb3Jl IHRoZSByZWFkZXIKLSAgIGlzIGRvbmUgd2l0aCBpdC4gIFRoaXMgc29sdXRpb24gY29zdHMgbGl0 dGxlIGluIHJ1biB0aW1lLCBhbmQgYWRkcyBibG9ja2luZwotICAgb3ZlcmhlYWQgb25seSBpbiB0 aGUgcmFyZSBjYXNlcyB3aGVyZSB0aGVyZSBhY3R1YWxseSBpcyBhIGNvbmZsaWN0LgorICAgYSB3 aG9sbHkgdW5yZWxhdGVkIHJvdyAob25lIHRoYXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgc2F0aXNm eSB0aGUgc2NhbgorICAga2V5cykuICBXZSBjYW4gb3B0aW9uYWxseSB1c2UgYSBwaW4gb24gYW4g aW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRlCisgICB0aGF0IHRoZSByZWFkZXIgbWln aHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVvdGU+IGZyb20gdGhlIGluZGV4CisgICBl bnRyeSB0byB0aGUgbWF0Y2hpbmcgaGVhcCBlbnRyeS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxr ZGVsZXRlPC9mdW5jdGlvbj4KKyAgIGJsb2NrIG9uIHN1Y2ggYSBwaW4gZW5zdXJlcyB0aGF0IDxj b21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRlbGV0ZQorICAgdGhlIGhlYXAgZW50cnkg YmVmb3JlIHRoZSByZWFkZXIgaXMgZG9uZSB3aXRoIGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cwor ICAgbGl0dGxlIGluIHJ1biB0aW1lLCBhbmQgYWRkcyBibG9ja2luZyBvdmVyaGVhZCBvbmx5IGlu IHRoZSByYXJlIGNhc2VzIHdoZXJlCisgICB0aGVyZSBhY3R1YWxseSBpcyBhIGNvbmZsaWN0LiAg Rm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuCisgICBNVkNDLWNvbXBsaWFudCBzbmFw c2hvdCwgaG9sZGluZyB0aGUgcGluIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHNjYW4KKyAg IHdpbGwgYWx3YXlzIHZpc2l0IHRoZSBoZWFwIHBhZ2UsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNl bGYgd2lsbCByZWplY3QgYW55CisgICByZWN5Y2xlZCBUSUQncyBuZXcgb2NjdXBhbnQuICAoSW5k ZXgtb25seSBzY2FucyBhcmUgYSBzcGVjaWFsIGNhc2UsIGFzCisgICBkaXNjdXNzZWQgYmVsb3cu KQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQg aW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHdlIGhhdmUKLSAgIHRv IGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29y cmVzcG9uZGluZyBpbmRleAotICAgZW50cnkuICBUaGlzIGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1i ZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBp biB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9tIHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5 IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBsYXRlciwgcmVxdWlyZXMgbXVjaCBsZXNz IGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFkIGFuZCBjYW4gYWxsb3cgYSBtb3JlIGVmZmljaWVu dCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAgUGVyIHRoZSBhYm92ZSBhbmFseXNpcywgd2UgbXVz dCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJvYWNoIGZvcgotICAgbm9uLU1WQ0MtY29tcGxpYW50 IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91cyBzY2FuIGlzIHdvcmthYmxlCi0gICBmb3Ig YSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBzaG90LgorICAgVGhpcyBzb2x1dGlvbiByZXF1aXJl cyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW5kZXggc2NhbnMgYmUKKyAg IDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB0aGUgdGFibGUgQU0gbXVzdCBmZXRjaCBlYWNo IGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25k aW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcworICAgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiBy ZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bworICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1 b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbiBh biA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2FuLCB0aGUgYWNjZXNz IG1ldGhvZCBkb2VzIG5vdAotICAga2VlcCBhbiBpbmRleCBwaW4gb24gYW55IG9mIHRoZSByZXR1 cm5lZCB0dXBsZXMuICBUaGVyZWZvcmUKLSAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ugc3VjaCBz Y2FucyB3aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cy4KKyAgIFdoZXRoZXIgYSBiYXRjaCdz IFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrICh0eXBpY2FsbHkgYW4gaW5kZXggcGFnZSBidWZmZXIK KyAgIHBpbikgaXMgZHJvcHBlZCBpbW1lZGlhdGVseSBvciBkZWZlcnJlZCBpcyBjb250cm9sbGVk IGJ5IGEgZ2VuZXJpYywKKyAgIHNjYW4tbGV2ZWwgcG9saWN5IHRoYXQgaXMgZGV0ZXJtaW5lZCB3 aGVuIHRoZSBzY2FuIGlzIG9wZW5lZCAmbWRhc2g7IGl0IGlzCisgICBub3QgdW5kZXIgdGhlIGNv bnRyb2wgb2YgZWl0aGVyIHRoZSBpbmRleCBBTSBvciB0aGUgdGFibGUgQU0uICBUaGUgc2Nhbidz CisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gZmxh ZyBlbmNvZGVzIHRoaXMgcG9saWN5LgorICAgSXQgaXMgc2V0IGJhc2VkIG9uIHR3byBjcml0ZXJp YSB0aGF0IGFyZSBrbm93biB0byB0aGUgY29yZSBzY2FuIG1hY2hpbmVyeToKKyAgIHdoZXRoZXIg dGhlIHNjYW4gdXNlcyBhbiBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdCwgYW5kIHdoZXRoZXIgaXQg aXMgYW4KKyAgIGluZGV4LW9ubHkgc2Nhbi4gIFNwZWNpZmljYWxseSwKKyAgIDxzdHJ1Y3RmaWVs ZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlIHdoZW4gdGhlIHNj YW4gdXNlcworICAgYW4gTVZDQyBzbmFwc2hvdCBhbmQgaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFz aXM+IGFuIGluZGV4LW9ubHkgc2Nhbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hlbiA8 c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwg dGhlCisgICBpbnRlcmxvY2sgaXMgZHJvcHBlZCBpbnNpZGUKKyAgIDxmdW5jdGlvbj5pbmRleGFt X3V0aWxfdW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4gKGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbgor ICAgcmV0dXJuZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4g d2l0aCBhbiBNVkNDCisgICBzbmFwc2hvdCB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdl LCB3aGVyZSB0aGUgTVZDQyB2aXNpYmlsaXR5IGNoZWNrCisgICBpcyBhdXRob3JpdGF0aXZlICZt ZGFzaDsgZXZlbiBpZiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEgVElELAor ICAgdGhlIG5ldyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0aGUgc25hcHNob3QgdGVzdC4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgV2hlbiA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1 YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIHRoZQorICAgaW50ZXJsb2NrIGlzIHJldGFpbmVk IHVudGlsIHRoZSB0YWJsZSBBTSBleHBsaWNpdGx5IGNhbGxzCisgICA8ZnVuY3Rpb24+YW11bmd1 YXJkYmF0Y2g8L2Z1bmN0aW9uPiwgYmVjYXVzZSB0aGUgc2NhbiBjYW5ub3QgcmVseSBvbiB0aGF0 CisgICBoZWFwIHBhZ2UgTVZDQyBiYWNrc3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUg aXMgbm8gTVZDQyBzbmFwc2hvdCB0bworICAgcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9j Y3VwYW50IGF0IGFsbC4gIEZvciBpbmRleC1vbmx5IHNjYW5zLCBldmVuCisgICB3aXRoIGFuIE1W Q0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlIGhlYXAg cGFnZQorICAgYWx0b2dldGhlciAodXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBz byB0aGUgTVZDQyBjaGVjayB0aGF0IHdvdWxkCisgICBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3Vh bGx5IG5ldmVyIHJ1bnMuICBJbiBib3RoIGNhc2VzIHRoZSBpbnRlcmxvY2sgb24KKyAgIHRoZSBp bmRleCBwYWdlIGlzIHdoYXQgcHJldmVudHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9t IHJlY3ljbGluZworICAgVElEcyB3aGlsZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRl VW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCB0aGUgdGFibGUKKyAgIEFNIGRlY2lkZXMg PGVtcGhhc2lzPndoZW48L2VtcGhhc2lzPiB0byBjYWxsCisgICA8ZnVuY3Rpb24+YW11bmd1YXJk YmF0Y2g8L2Z1bmN0aW9uPjsgdGhlIGluZGV4IEFNIGRlY2lkZXMKKyAgIDxlbXBoYXNpcz53aGF0 PC9lbXBoYXNpcz4gdG8gcmVsZWFzZS4gIFdoZW4KKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVk aWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB0aGUgaW5kZXggQU0KKyAgIGRyb3Bz IHRoZSBpbnRlcmxvY2sgaXRzZWxmIChpbnNpZGUKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxf dW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4pLCBhbmQKKyAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRj aDwvZnVuY3Rpb24+IGlzIG5ldmVyIGNhbGxlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg U2ltaWxhcmx5LCBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2Fu IGlzIGluaGVyZW50bHkKKyAgIGFzeW5jaHJvbm91czogYWxsIG1hdGNoaW5nIFRJRHMgYXJlIGNv bGxlY3RlZCBpbnRvIGEgYml0bWFwIGJlZm9yZSBhbnkgaGVhcAorICAgYWNjZXNzIGJlZ2lucy4g IFN1Y2ggc2NhbnMgdGhlcmVmb3JlIHJlcXVpcmUgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3Qs CisgICBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGFjY2VzcyBtZXRob2QgdG8gaG9sZCBp bmRleCBwYWdlIHBpbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBt ZXRob2RzIHRoYXQgdXNlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBtYW5h Z2UKKyAgIHBpbiBsaWZldGltZSB0aGVtc2VsdmVzLCBzaW5jZSB0aGVyZSBpcyBubyB0YWJsZSBB TSBpbnRlcm1lZGlhcnkgKHVubGlrZQorICAgd2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+KS4gIFRoZSBpbmRleCBBTSBtdXN0IGhvbGQgYSBwaW4gb24gdGhlCisgICBjdXJyZW50 IGluZGV4IHBhZ2UgdW50aWwgdGhlIHNjYW4gbW92ZXMgdG8gYSBkaWZmZXJlbnQgcGFnZSBvciBl bmRzLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApp bmRleCBlMzQyNTg1YzcuLjJhMzU1ODY4ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s CkBAIC0xMTczLDEyICsxMTczLDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAgICAgIDwv cGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9y dCA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0gICAgICBsaW5rZW5k PSJpbmRleGFtIi8+KTsgYXQgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255 bT4KLSAgICAgIGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxvd2VkLCB0aGVyZSBp cyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNoIGluZGV4ZXMgd2l0 aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAgICBkb2VzIG5vdGhp bmcgdGhhdCBhbiBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4K LSAgICAgIFNvIGluIHByYWN0aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxh Y3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1 cHBvcnQgZWl0aGVyIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+CisgICAgICBvciA8bGl0 ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4YW0iLz4p OyBhdAorICAgICAgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4gY2Fu bm90IGJlIHVzZWQuICBBbHRob3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0 bGUgcG9pbnQgaW4gdXNpbmcgQi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAgICAgd2l0aCBhbiBl eGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGluZyB0aGF0IGFuCisg ICAgICBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4gIFNvIGlu IHByYWN0aWNlIHRoZQorICAgICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255 bT5HaVNUPC9hY3JvbnltPiBvcgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4uCiAg ICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9h bS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCmluZGV4IDMxZjhkMmI4MS4uYTk3NTZmNjVlIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMzQsMTAgKzMz NCwxMiBAQCBkaWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZGli ZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRz Y2FuID0gZGllbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBO VUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGNmNDBjODcwLi45ZDI4MzI3 M2EgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMDksNiArMjA5LDcgQEAgQk9PTAog Qk9PTEVBTgogQk9YCiBCVEFycmF5S2V5SW5mbworQlRCYXRjaERhdGEKIEJUQnVpbGRTdGF0ZQog QlRDYWxsYmFja1N0YXRlCiBCVEN5Y2xlSWQKQEAgLTIzNiw4ICsyMzcsNiBAQCBCVFNjYW5JbnNl cnREYXRhCiBCVFNjYW5LZXlQcmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJUU2Nhbk9wYXF1ZURhdGEK LUJUU2NhblBvc0RhdGEKLUJUU2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBCVFNvcnRBcnJheUNvbnRl eHQKIEJUU3Bvb2wKQEAgLTI2Niw2ICsyNjUsOSBAQCBCYXNlQmFja3VwQ21kCiBCYXNlQmFja3Vw VGFyZ2V0SGFuZGxlCiBCYXNlQmFja3VwVGFyZ2V0VHlwZQogQmF0Y2hNVkNDU3RhdGUKK0JhdGNo TWF0Y2hpbmdJdGVtCitCYXRjaFJpbmdCdWZmZXIKK0JhdGNoUmluZ0l0ZW1Qb3MKIEJlZ2luRGly ZWN0TW9kaWZ5X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25JbnNlcnRfZnVuY3Rpb24KIEJlZ2luRm9y ZWlnbk1vZGlmeV9mdW5jdGlvbgpAQCAtMTI2MSw2ICsxMjYzLDcgQEAgSGJhTGluZQogSGVhZGxp bmVKc29uU3RhdGUKIEhlYWRsaW5lUGFyc2VkVGV4dAogSGVhZGxpbmVXb3JkRW50cnkKK0hlYXBC YXRjaERhdGEKIEhlYXBDaGVja0NvbnRleHQKIEhlYXBDaGVja1JlYWRTdHJlYW1EYXRhCiBIZWFw UGFnZUZyZWV6ZQpAQCAtMTM0Myw2ICsxMzQ2LDggQEAgSW5kZXhPcmRlckJ5RGlzdGFuY2UKIElu ZGV4UGF0aAogSW5kZXhSdW50aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRleFNjYW5CYXRjaAor SW5kZXhTY2FuQmF0Y2hEYXRhCiBJbmRleFNjYW5EZXNjCiBJbmRleFNjYW5EZXNjRGF0YQogSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uCkBAIC0zNTg3LDE4ICszNTkyLDE3IEBAIGFtY2FucmV0dXJu X2Z1bmN0aW9uCiBhbWNvc3Rlc3RpbWF0ZV9mdW5jdGlvbgogYW1lbmRzY2FuX2Z1bmN0aW9uCiBh bWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uCithbWdldGJhdGNoX2Z1bmN0aW9uCiBhbWdl dGJpdG1hcF9mdW5jdGlvbgogYW1nZXR0cmVlaGVpZ2h0X2Z1bmN0aW9uCiBhbWdldHR1cGxlX2Z1 bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1bmN0aW9uCiBh bWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFtbWFya3Bvc19mdW5jdGlvbgogYW1vcHRpb25zX2Z1 bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCiBhbXByb3BlcnR5X2Z1bmN0aW9uCiBh bXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19mdW5jdGlvbgogYW10cmFuc2xhdGVfY21wdHlw ZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRlZ3lfZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51 cF9mdW5jdGlvbgotLSAKMi41My4wCgo= --0000000000000ad6a20652d164ac--