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 1w7uWq-0001F7-1m for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 12:18:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7uWp-00HQSC-0T for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 12:18:35 +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 1w7uWo-00HQS3-1T for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 12:18:35 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7uWm-000000000TY-3CPM for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 12:18:33 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-358d80f60ccso4252616a91.3 for ; Wed, 01 Apr 2026 05:18:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775045912; cv=none; d=google.com; s=arc-20240605; b=ih3JmTHgn2Q+FO97v+tMSPHvGTZc7eQ1toSmBWskrcvjin+YxXicUYBFfrL3a78ho7 wKk7rHs6qqT2jPpx3wqMFy4NkEQjCr1FW7vx0tC0zPXt5xt3SpsSCUGVE7Llz6wXZZYM QQF3/n++6u8FDPM9nNNBTCTiCdqZZYtmt1yxeDoy5lEk+nlVJMw2SiyRqOeTajzMBTyL 2umiI7eXr+D5M+qT59wqwyFqZej46Lm6H/nCMUG6S/cZ0HTcD/ggHk3X83t1ZmSkKUxe y8prIWfU+zEFFQkDbW3n0xRXwhcckI1rZuQoLJXdqPtyL7SBG4JdHR2kEXHzf89gUVxR Bkcg== 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=sQ+3fEx3O0jwuxW/ZJY4xUwJGbXnsAguRCZtLQTYYYw=; fh=Q6gv1vUvixRB+rXpRIF9ZSrc1aX+TkLk8F3fRRUqs3g=; b=EG0OMoZjAy6mZWr3sp25Q/58SF3HFQB9qrkj5pHuUJkoNozYX2/RAqfhrxs6TyBM0G rnhr0n3a32SEkg44VpbwuY/BQSZn4wphygzajLvkMbuTd37ewuYo65g35MnHipPamX7f coFkqKmHtVa7hX7mHBAtAS1RDM2y3VUx6PTzB05cAbqS7+oLk4if6Cr6144SLjuFGtyK PiSnJAZnVVD20T9jTw0uEIxlvrrXA86u536Obr2Juffbus0PdpaugKeq43J0Db/iHaZl gAeK2YiXemb30EF3IqE0fc+wBdzfxqsPkz6/nFN+XaHbX/A8y5unV3ECteG5+oYMN4Um YZJA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775045912; x=1775650712; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=sQ+3fEx3O0jwuxW/ZJY4xUwJGbXnsAguRCZtLQTYYYw=; b=NxRSs0KIB9YK5lk44eUe/+5f1Z+kaKbsVLTFnUaLK6WdbvKA2I1mnr7WDbiOwx2aXA D5vTsTL8KRrfGYleaSq3LA4+Rjdx2t9VQkPrS44tPvA0pXrm8ieJz6D7K296F21BKGiE TtT2Xmn2MFnnSiWT0ixpVHn9+NBZPeeHi6fWnYNdVrVkAt+2oFlhUkmIBPbPxT7sfxj/ YLWAtxmvG543jIlMwGhNJC8Gehax7wKxP+kBMMXHZDwVJt+cVTd3lfgoLyF93qgiqYSP o4pszB0o+FvJ5RLk1sg758PqBNat/OpbA/e3VbbP8saLTSr/hgALaBOKlzHjNzr/i6in KQzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775045912; x=1775650712; 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=sQ+3fEx3O0jwuxW/ZJY4xUwJGbXnsAguRCZtLQTYYYw=; b=Qf841osihbPPPNOwXpu3My4cS3hhtHlUbHNCbm5WBXL9kqbBoRjOX0seeGEkPDOszN 52PnQjkAjM/516wkDp2M/24MeDLVSd2Hyxs8Lb1loX4GBl7it/P0gHz1aZCQuatl8tVq ayTF3ALQyduecm0ZApQDS2dBXjuxfbyAnLzViR8WjhJ4e1CL2SOa1IAT6q/NO9yXVo7n HR5ijiyunntg9VbBlNgO4YqKlwypznew/GKDmDhLs/zDRSZ1+hSRlXXf8fVoyicni0id rYju+Z/lgzHagsVJbf2R6/m7SKEuhqKYNCLX+jgTi/2AekQsuv9l9/crurB52SuL99f2 nxIA== X-Forwarded-Encrypted: i=1; AJvYcCW0mUXVUG8HgP1DcP4WqIFRWzjn29/4E1vgDdap1h1R3YdfRjTIhCsNXHylvSkXwOqMLi8N8hq5knDmL/+w@postgresql.org X-Gm-Message-State: AOJu0YwKRWdS9KZYGMu2CtCngQP46jm6z6yQNtv5VFTamaSYJEYHtIzj BIr2/ngupCAkt6q9bLRI7+ZpCEiULBPfNmIgYMWoOJtJkyn4zHc3Zr5sg3PW7/nCiG4kgI8z4Tk JOvGS3r/1sXrBVuRxY9T6YSe9wqUoOwE= X-Gm-Gg: ATEYQzzNyYusC02L4blrMYKiPbCERHCDnK3TfB9rX+2zSQRArx26dTNVRLdyyCI6FgF 7bUdenuuaYca6NM/+ijxq0O+Wd3HJhHVqrAZNRv+AjI5kYLX9Vl8Xwiu3FcvFf9jRNJlITD/a4P 79PgcbdC7eKeWtnhSqhEDm9uIz/RBv68dnze2a3MzHPaufF4myk48tFfgy+8Kfsmg6+NZSqX4uk 2JmjbCvwAke58Xa3uEtCaXszZMdi6Jr3ngwaYlHJaO9Uxc1Njf5rowhL8GlWNPIk5yuObxGJTGZ wzig1hjq X-Received: by 2002:a17:90b:4e88:b0:35d:ac66:ae72 with SMTP id 98e67ed59e1d1-35dc6f8e3f8mr3036052a91.30.1775045912001; Wed, 01 Apr 2026 05:18:32 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> In-Reply-To: From: Amit Langote Date: Wed, 1 Apr 2026 21:18:14 +0900 X-Gm-Features: AQROBzAiuhNsvaqyQ1WZfxLsCuMReI0D7F-N6pzETAAmdHkfJdwekdI84j4wMGc Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Chao Li , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000000b9393064e6515c5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000b9393064e6515c5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 8:56=E2=80=AFPM Junwang Zhao wro= te: > On Wed, Apr 1, 2026 at 5:51=E2=80=AFPM Amit Langote wrote: > > > > On Wed, Apr 1, 2026 at 5:51=E2=80=AFPM Amit Langote wrote: > > > On Wed, Apr 1, 2026 at 12:54=E2=80=AFAM Junwang Zhao wrote: > > > > + if (riinfo->fpmeta =3D=3D NULL) > > > > + { > > > > + /* Reload to ensure it's valid. */ > > > > + riinfo =3D ri_LoadConstraintInfo(riinfo->constraint= _id); > > > > > > > > I was thinking of wrapping the reload in a conditional check like > > > > `!riinfo->valid`, since `riinfo` can be valid even when `fpmeta =3D= =3D NULL`. > > > > However, `if (riinfo->fpmeta =3D=3D NULL)` should rarely be true, = so the > > > > unconditional reload is harmless, and the code is cleaner. > > > > > > > > +1 to the fix. > > > > > > Thanks for checking. > > > > > > I have just pushed a slightly modified version of that. > > > > > > > > 0002 is the rebased batching patch. > > > > > > > > The change of RI_FastPathEntry from storing riinfo to fk_relid > > > > makes sense to me. I'll do another review on 0002 tomorrow. > > > > > > Here's another version. > > > > > > This time, I have another fixup patch (0001) to make FastPathMeta > > > self-contained by copying the FmgrInfo structs it needs out of > > > RI_CompareHashEntry rather than storing pointers into it. This avoid= s > > > any dependency on those cache entries remaining stable. I'll push > > > that once the just committed patch has seen enough BF animals. > > > > Pushed. > > > > > 0002 is rebased over that. > > > > Rebased again. > > +static void > +ri_FastPathBatchFlush(RI_FastPathEntry *fpentry, Relation fk_rel) > +{ > + /* Reload; may have been invalidated since last batch accumulation. */ > + const RI_ConstraintInfo *riinfo =3D ri_LoadConstraintInfo(fpentry->cono= id); > > ... > + if (riinfo->fpmeta =3D=3D NULL) > + { > + /* Reload to ensure it's valid. */ > + riinfo =3D ri_LoadConstraintInfo(riinfo->constraint_id); > + ri_populate_fastpath_metadata((RI_ConstraintInfo *) riinfo, > + fk_rel, idx_rel); > + } > > ri_LoadConstraintInfo is currently invoked twice within > ri_FastPathBatchFlush. Should we eliminate the second call? I think we can't because the entry may be stale by the time we get to the ri_populate_fastpath_metadata() call due to intervening steps; even something as benign-looking index_beginscan() may call code paths that can trigger invalidation in rare cases. Maybe predictably in CLOBBER_CACHE_ALWAYS builds. > Alternatively, we could refactor ri_FastPathBatchFlush to accept > an additional parameter, `const RI_ConstraintInfo *riinfo`, so we > can remove the need for the first call. In that case, we need to call > ri_LoadConstraintInfo in ri_FastPathEndBatch. Yeah, I think that's fine. Done that way in the attached. Also, I realized that we could do: @@ -2937,7 +2937,7 @@ ri_FastPathBatchFlush(RI_FastPathEntry *fpentry, Relation fk_rel) fk_rel, idx_rel); } Assert(riinfo->fpmeta); - if (riinfo->nkeys =3D=3D 1) + if (riinfo->nkeys =3D=3D 1 && fpentry->batch_count > 1) violation_index =3D ri_FastPathFlushArray(fpentry, fk_slot, riinfo= , fk_rel, snapshot, scandesc= ); so that the fixed overhead of ri_FastPathFlushArray (allocating matched[] array on stack and constructing ArrayType, etc.) is not paid unnecessarily for single-row batches. Attached patch is updated that way. I will continue looking at this tomorrow morning with the aim of committing it by EOD or Friday. --=20 Thanks, Amit Langote --0000000000000b9393064e6515c5 Content-Type: application/octet-stream; name="v16-0001-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v16-0001-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mng0h5jo0 RnJvbSAyNTdmNTVmMjBlOGExOTYyMzVkYTMzYjJkNGI1ODFlZWMyZGRkZDI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTg6MjI6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx Nl0gQmF0Y2ggRksgcm93cyBhbmQgdXNlIFNLX1NFQVJDSEFSUkFZIGZvciBmYXN0LXBhdGggRksK IHByb2JlcwoKSW5zdGVhZCBvZiBwcm9iaW5nIHRoZSBQSyBpbmRleCBvbiBlYWNoIHRyaWdnZXIg aW52b2NhdGlvbiwgYnVmZmVyCkZLIHJvd3MgaW4gYSBuZXcgcGVyLWNvbnN0cmFpbnQgY2FjaGUg ZW50cnkgKFJJX0Zhc3RQYXRoRW50cnkpIGFuZApmbHVzaCB0aGVtIGFzIGEgYmF0Y2guICBDb21i aW5lZCB3aXRoIHRoZSBmYXN0IHBhdGggaW50cm9kdWNlZCBpbgp0aGUgcHJldmlvdXMgY29tbWl0 LCBidWxrIEZLIGluc2VydHMgYXJlIH4yLjl4IGZhc3RlciAoaW50IFBLIC8KaW50IEZLLCAxTSBy b3dzLCBQSyB0YWJsZSBhbmQgaW5kZXggY2FjaGVkIGluIG1lbW9yeSkuCgpPbiBlYWNoIHRyaWdn ZXIgaW52b2NhdGlvbiwgdGhlIG5ldyByaV9GYXN0UGF0aEJhdGNoQWRkKCkgYnVmZmVycwp0aGUg Rksgcm93IGluIFJJX0Zhc3RQYXRoRW50cnkuICBXaGVuIHRoZSBidWZmZXIgZmlsbHMgKDY0IHJv d3MpCm9yIHRoZSB0cmlnZ2VyLWZpcmluZyBjeWNsZSBlbmRzLCB0aGUgbmV3IHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaCgpCnByb2JlcyB0aGUgaW5kZXggZm9yIGFsbCBidWZmZXJlZCByb3dzLCBzaGFy aW5nIGEgc2luZ2xlCkNvbW1hbmRDb3VudGVySW5jcmVtZW50LCBzbmFwc2hvdCwgcGVybWlzc2lv biBjaGVjaywgYW5kIHNlY3VyaXR5CmNvbnRleHQgc3dpdGNoIGFjcm9zcyB0aGUgYmF0Y2gsIHJh dGhlciB0aGFuIHJlcGVhdGluZyBlYWNoIHBlciByb3cKYXMgdGhlIFNQSSBwYXRoIGRvZXMuICBQ ZXItZmx1c2ggQ0NJIGlzIHNhZmUgYmVjYXVzZSBhbGwgQUZURVIKdHJpZ2dlcnMgZm9yIHRoZSBi dWZmZXJlZCByb3dzIGhhdmUgYWxyZWFkeSBmaXJlZCBieSBmbHVzaCB0aW1lLgoKRm9yIHNpbmds ZS1jb2x1bW4gZm9yZWlnbiBrZXlzLCB0aGUgZmx1c2ggYnVpbGRzIGFuIEFycmF5VHlwZSBmcm9t CnRoZSBidWZmZXJlZCBGSyB2YWx1ZXMgKGNhc3RpbmcgdG8gdGhlIFBLLXNpZGUgdHlwZSBpZiBu ZWVkZWQpIGFuZApjb25zdHJ1Y3RzIGEgc2NhbiBrZXkgd2l0aCB0aGUgU0tfU0VBUkNIQVJSQVkg ZmxhZy4gIFRoZSBpbmRleCBBTQpzb3J0cyBhbmQgZGVkdXBsaWNhdGVzIHRoZSBhcnJheSBpbnRl cm5hbGx5LCB0aGVuIHdhbGtzIG1hdGNoaW5nCmxlYWYgcGFnZXMgaW4gb25lIG9yZGVyZWQgdHJh dmVyc2FsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBmcm9tIHRoZQpyb290IG9uY2UgcGVyIHJvdy4g IEEgbWF0Y2hlZFtdIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2ggaXRlbXMKd2VyZSBzYXRpc2Zp ZWQ7IHRoZSBmaXJzdCB1bm1hdGNoZWQgaXRlbSBpcyByZXBvcnRlZCBhcyBhCnZpb2xhdGlvbi4g IE11bHRpLWNvbHVtbiBmb3JlaWduIGtleXMgZmFsbCBiYWNrIHRvIHBlci1yb3cgcHJvYmluZwp2 aWEgdGhlIG5ldyByaV9GYXN0UGF0aEZsdXNoTG9vcCgpLgoKRksgdHVwbGVzIGFyZSBtYXRlcmlh bGl6ZWQgdmlhIEV4ZWNDb3B5U2xvdEhlYXBUdXBsZSgpIGludG8gYSBuZXcKcHVycG9zZS1zcGVj aWZpYyBtZW1vcnkgY29udGV4dCAoZmx1c2hfY3h0KSwgY2hpbGQgb2YKVG9wVHJhbnNhY3Rpb25D b250ZXh0LCB3aGljaCBpcyBhbHNvIHVzZWQgZm9yIHBlci1mbHVzaCB0cmFuc2llbnQKd29yazog Y2FzdCByZXN1bHRzLCB0aGUgc2VhcmNoIGFycmF5LCBhbmQgaW5kZXggc2NhbiBhbGxvY2F0aW9u cy4KSXQgaXMgcmVzZXQgYWZ0ZXIgZWFjaCBmbHVzaCBhbmQgZGVsZXRlZCBpbiB0ZWFyZG93bi4K ClRoZSBQSyByZWxhdGlvbiwgaW5kZXgsIHR1cGxlIHNsb3RzLCBhbmQgZmFzdC1wYXRoIG1ldGFk YXRhIGFyZQpjYWNoZWQgaW4gUklfRmFzdFBhdGhFbnRyeSBhY3Jvc3MgdHJpZ2dlciBpbnZvY2F0 aW9ucyB3aXRoaW4gYQp0cmlnZ2VyLWZpcmluZyBiYXRjaCwgYXZvaWRpbmcgcmVwZWF0ZWQgb3Bl bi9jbG9zZSBvdmVyaGVhZC4gIFRoZQpzbmFwc2hvdCBhbmQgSW5kZXhTY2FuRGVzYyBhcmUgdGFr ZW4gZnJlc2ggcGVyIGZsdXNoLgoKcmlfRmFzdFBhdGhFbmRCYXRjaCgpIGZsdXNoZXMgYW55IHBh cnRpYWwgYmF0Y2ggYmVmb3JlIHRlYXJpbmcKZG93biBjYWNoZWQgcmVzb3VyY2VzLiAgU2luY2Ug dGhlIEZLIHJlbGF0aW9uIG1heSBhbHJlYWR5IGJlCmNsb3NlZCBieSBmbHVzaCB0aW1lIChlLmcu IGZvciBkZWZlcnJlZCBjb25zdHJhaW50cyBhdCBDT01NSVQpLAppdCByZW9wZW5zIHRoZSByZWxh dGlvbiB1c2luZyBlbnRyeS0+ZmtfcmVsaWQgaWYgbmVlZGVkLgoKVGhlIGV4aXN0aW5nIEFMVEVS IFRBQkxFIHZhbGlkYXRpb24gcGF0aCBieXBhc3NlcyBiYXRjaGluZyBhbmQKY29udGludWVzIHRv IGNhbGwgcmlfRmFzdFBhdGhDaGVjaygpIGRpcmVjdGx5IHBlciByb3cuCgpMaWZlY3ljbGUgbWFu YWdlbWVudCBmb3IgUklfRmFzdFBhdGhFbnRyeSByZWxpZXMgb24gdGhyZWUgbmV3Cm1lY2hhbmlz bXM6CgogIC0gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjazogQSBuZXcgZ2VuZXJhbC1wdXJwb3Nl IGNhbGxiYWNrCiAgICBtZWNoYW5pc20gaW4gdHJpZ2dlci5jLiAgQ2FsbGJhY2tzIHJlZ2lzdGVy ZWQgdmlhCiAgICBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soKSBmaXJlIGF0IHRo ZSBlbmQgb2YgZWFjaAogICAgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKEFmdGVyVHJpZ2dlckVuZFF1 ZXJ5IGZvciBpbW1lZGlhdGUKICAgIGNvbnN0cmFpbnRzLCBBZnRlclRyaWdnZXJGaXJlRGVmZXJy ZWQgYXQgQ09NTUlULCBhbmQKICAgIEFmdGVyVHJpZ2dlclNldFN0YXRlIGZvciBTRVQgQ09OU1RS QUlOVFMgSU1NRURJQVRFKS4gIFRoZSBSSQogICAgY29kZSByZWdpc3RlcnMgcmlfRmFzdFBhdGhF bmRCYXRjaCBhcyBhIGJhdGNoIGNhbGxiYWNrLgoKICAtIEJhdGNoIGNhbGxiYWNrcyBvbmx5IGZp cmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAogICAgKGNoZWNrZWQgaW5zaWRlIEZpcmVB ZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyksIHNvIG5lc3RlZAogICAgcXVlcmllcyBmcm9tIFNQ SSBpbnNpZGUgb3RoZXIgQUZURVIgdHJpZ2dlcnMgZG8gbm90IHRlYXIgZG93bgogICAgdGhlIGNh Y2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNr IE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50ZXIgYXQgdHJhbnNhY3Rpb24gZW5kLCBo YW5kbGluZyB0aGUgYWJvcnQgcGF0aCB3aGVyZSB0aGUKICAgIGJhdGNoIGNhbGxiYWNrIG5ldmVy IGZpcmVkLgoKICAtIFN1YlhhY3RDYWxsYmFjazogcmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2sg TlVMTHMgdGhlIHN0YXRpYwogICAgY2FjaGUgcG9pbnRlciBvbiBzdWJ0cmFuc2FjdGlvbiBhYm9y dCwgcHJldmVudGluZyB0aGUgYmF0Y2gKICAgIGNhbGxiYWNrIGZyb20gYWNjZXNzaW5nIGFscmVh ZHktcmVsZWFzZWQgcmVzb3VyY2VzLgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUoKTog QSBuZXcgZXhwb3J0ZWQgYWNjZXNzb3IgdGhhdAogICAgcmV0dXJucyB0cnVlIHdoZW4gYWZ0ZXJU cmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nCiAgICBBTFRFUiBUQUJMRSAuLi4gQURE IEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJzIGFyZQogICAgY2FsbGVkIGRpcmVj dGx5IG91dHNpZGUgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3JrLCBzbyBiYXRjaAogICAgY2Fs bGJhY2tzIHdvdWxkIG5ldmVyIGZpcmUuICBUaGUgZmFzdC1wYXRoIGNvZGUgdXNlcyB0aGlzIHRv CiAgICBmYWxsIGJhY2sgdG8gdGhlIG5vbi1jYWNoZWQgcGVyLWludm9jYXRpb24gcGF0aCBpbiB0 aGF0CiAgICBjb250ZXh0LgoKQXV0aG9yOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21h aWwuY29tPgpDby1hdXRob3JlZC1ieTogSnVud2FuZyBaaGFvIDx6aGp3cGt1QGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpUZXN0ZWQtYnk6 IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQdXZ3bkF3a1NwN3NmdmdHajN5UT1MaTZLTk1x QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYyAgICAg ICAgICAgIHwgMTA1ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAg ICAgIHwgNTk3ICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Ry aWdnZXIuaCAgICAgICAgICAgIHwgIDE4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9y ZWlnbl9rZXkub3V0IHwgMTI2ICsrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tl eS5zcWwgICAgICB8IDExOCArKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgfCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCA5NjMgaW5zZXJ0aW9ucygrKSwgNCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKaW5kZXggNjU5Njg0M2E4ZDguLjRiYzMx Y2FiZmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCkBAIC0zODkzLDYgKzM4OTMsOCBAQCB0eXBl ZGVmIHN0cnVjdCBBZnRlclRyaWdnZXJzRGF0YQogCS8qIHBlci1zdWJ0cmFuc2FjdGlvbi1sZXZl bCBkYXRhOiAqLwogCUFmdGVyVHJpZ2dlcnNUcmFuc0RhdGEgKnRyYW5zX3N0YWNrOwkvKiBhcnJh eSBvZiBzdHJ1Y3RzIHNob3duIGJlbG93ICovCiAJaW50CQkJbWF4dHJhbnNkZXB0aDsJLyogYWxs b2NhdGVkIGxlbiBvZiBhYm92ZSBhcnJheSAqLworCisJTGlzdAkgICAqYmF0Y2hfY2FsbGJhY2tz OwkvKiBMaXN0IG9mIEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqLwogfSBBZnRlclRyaWdnZXJz RGF0YTsKIAogc3RydWN0IEFmdGVyVHJpZ2dlcnNRdWVyeURhdGEKQEAgLTM5MjksNiArMzkzMSwx MyBAQCBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YQogCVR1cGxlVGFibGVTbG90ICpzdG9y ZXNsb3Q7CS8qIGZvciBjb252ZXJ0aW5nIHRvIHR1cGxlc3RvcmUncyBmb3JtYXQgKi8KIH07CiAK Ky8qIEVudHJ5IGluIGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzICovCit0eXBlZGVmIHN0 cnVjdCBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KK3sKKwlBZnRlclRyaWdnZXJCYXRjaENhbGxi YWNrIGNhbGxiYWNrOworCXZvaWQJICAgKmFyZzsKK30gQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVt OworCiBzdGF0aWMgQWZ0ZXJUcmlnZ2Vyc0RhdGEgYWZ0ZXJUcmlnZ2VyczsKIAogc3RhdGljIHZv aWQgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKQEAgLTM5NjQsNiArMzk3Myw3 IEBAIHN0YXRpYyBTZXRDb25zdHJhaW50U3RhdGUgU2V0Q29uc3RyYWludFN0YXRlQWRkSXRlbShT ZXRDb25zdHJhaW50U3RhdGUgc3RhdGUsCiAJCQkJCQkJCQkJCQkJT2lkIHRnb2lkLCBib29sIHRn aXNkZWZlcnJlZCk7CiBzdGF0aWMgdm9pZCBjYW5jZWxfcHJpb3Jfc3RtdF90cmlnZ2VycyhPaWQg cmVsaWQsIENtZFR5cGUgY21kVHlwZSwgaW50IHRnZXZlbnQpOwogCitzdGF0aWMgdm9pZCBGaXJl QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCk7CiAKIC8qCiAgKiBHZXQgdGhlIEZEVyB0 dXBsZXN0b3JlIGZvciB0aGUgY3VycmVudCB0cmlnZ2VyIHF1ZXJ5IGxldmVsLCBjcmVhdGluZyBp dApAQCAtNTA4OSw2ICs1MDk5LDcgQEAgQWZ0ZXJUcmlnZ2VyQmVnaW5YYWN0KHZvaWQpCiAJICov CiAJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfY291bnRlciA9IChDb21tYW5kSWQpIDE7CS8qIG11c3Ru J3QgYmUgMCAqLwogCWFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPSAtMTsKKwlhZnRlclRyaWdn ZXJzLmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsKIAogCS8qCiAJICogVmVyaWZ5IHRoYXQgdGhlcmUg aXMgbm8gbGVmdG92ZXIgc3RhdGUgcmVtYWluaW5nLiAgSWYgdGhlc2UgYXNzZXJ0aW9ucwpAQCAt NTIxMCw2ICs1MjIxLDE1IEBAIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KEVTdGF0ZSAqZXN0YXRlKQog CQkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBGaXJlIGJhdGNoIGNhbGxiYWNrcyBiZWZvcmUgcmVs ZWFzaW5nIHF1ZXJ5LWxldmVsIHN0b3JhZ2UgYW5kIGJlZm9yZQorCSAqIGRlY3JlbWVudGluZyBx dWVyeV9kZXB0aC4gIENhbGxiYWNrcyBtYXkgZG8gcmVhbCB3b3JrIChpbmRleCBwcm9iZXMsCisJ ICogZXJyb3IgcmVwb3J0aW5nKSBhbmQgcmVseSBvbiBxdWVyeV9kZXB0aCBzdGlsbCByZWZsZWN0 aW5nIHRoZSBjdXJyZW50CisJICogYmF0Y2ggbGV2ZWwgc28gdGhhdCBuZXN0ZWQgY2FsbHMgZnJv bSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIGFyZQorCSAqIGNvcnJlY3RseSBzdXBwcmVzc2Vk IGJ5IEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcydzIGRlcHRoIGd1YXJkLgorCSAqLwor CUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyogUmVsZWFzZSBxdWVyeS1s ZXZlbC1sb2NhbCBzdG9yYWdlLCBpbmNsdWRpbmcgdHVwbGVzdG9yZXMgaWYgYW55ICovCiAJQWZ0 ZXJUcmlnZ2VyRnJlZVF1ZXJ5KCZhZnRlclRyaWdnZXJzLnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dl cnMucXVlcnlfZGVwdGhdKTsKIApAQCAtNTMxNyw2ICs1MzM3LDkgQEAgQWZ0ZXJUcmlnZ2VyRmly ZURlZmVycmVkKHZvaWQpCiAJCQlicmVhazsJCQkJLyogYWxsIGZpcmVkICovCiAJfQogCisJLyog Rmx1c2ggYW55IGZhc3QtcGF0aCBiYXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBq dXN0IGZpcmVkLiAqLworCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyoK IAkgKiBXZSBkb24ndCBib3RoZXIgZnJlZWluZyB0aGUgZXZlbnQgbGlzdCwgc2luY2UgaXQgd2ls bCBnbyBhd2F5IGFueXdheQogCSAqIChhbmQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHZpYSBwZnJl ZSkgaW4gQWZ0ZXJUcmlnZ2VyRW5kWGFjdC4KQEAgLTYwNTksNiArNjA4MiwxMSBAQCBBZnRlclRy aWdnZXJTZXRTdGF0ZShDb25zdHJhaW50c1NldFN0bXQgKnN0bXQpCiAJCQkJYnJlYWs7CQkJLyog YWxsIGZpcmVkICovCiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBhbnkgZmFzdC1wYXRoIGJhdGNo ZXMgYWNjdW11bGF0ZWQgYnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQuCisJCSAqLworCQlGaXJl QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCQlpZiAoc25hcHNob3Rfc2V0KQogCQkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CkBAIC02NzU1LDMgKzY3ODMsODAgQEAgY2hlY2tfbW9k aWZpZWRfdmlydHVhbF9nZW5lcmF0ZWQoVHVwbGVEZXNjIHR1cGRlc2MsIEhlYXBUdXBsZSB0dXBs ZSkKIAogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0 Y2hDYWxsYmFjaworICoJCVJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhl IGN1cnJlbnQgdHJpZ2dlci1maXJpbmcKKyAqCQliYXRjaCBjb21wbGV0ZXMuCisgKgorICogTXVz dCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIGNv bnRleHQKKyAqIChpLmUuLCB3aGlsZSBhZnRlclRyaWdnZXJzIHN0YXRlIGlzIGFjdGl2ZSkuCisg KgorICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBpbnZvY2F0aW9uLCBzbyB0 aGUgY2FsbGVyIG11c3QKKyAqIHJlLXJlZ2lzdGVyIGZvciBlYWNoIG5ldyBiYXRjaCBpZiBuZWVk ZWQuCisgKi8KK3ZvaWQKK1JlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRy aWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkgIHZvaWQgKmFyZykKK3sKKwlB ZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW07CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisK KwkvKgorCSAqIEFsbG9jYXRlIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBzbyB0aGUgaXRlbSBz dXJ2aXZlcyBmb3IgdGhlIGR1cmF0aW9uCisJICogb2YgdGhlIGJhdGNoLCB3aGljaCBtYXkgc3Bh biBtdWx0aXBsZSB0cmlnZ2VyIGludm9jYXRpb25zLgorCSAqCisJICogTXVzdCBiZSBjYWxsZWQg d2hpbGUgYWZ0ZXJUcmlnZ2VycyBpcyBhY3RpdmUgKHF1ZXJ5X2RlcHRoID49IDApOworCSAqIGNh bGxiYWNrcyByZWdpc3RlcmVkIG91dHNpZGUgYSB0cmlnZ2VyLWZpcmluZyBjb250ZXh0IHdvdWxk IG5ldmVyIGZpcmUuCisJICovCisJQXNzZXJ0KGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0g MCk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4 dCk7CisJaXRlbSA9IHBhbGxvYyhzaXplb2YoQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtKSk7CisJ aXRlbS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlpdGVtLT5hcmcgPSBhcmc7CisJYWZ0ZXJUcmln Z2Vycy5iYXRjaF9jYWxsYmFja3MgPQorCQlsYXBwZW5kKGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2Fs bGJhY2tzLCBpdGVtKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoK KyAqIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcworICoJCUludm9rZSBhbmQgY2xlYXIg YWxsIHJlZ2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzLgorICoKKyAqIE9ubHkgZmlyZXMgYXQgdGhl IG91dGVybW9zdCBxdWVyeSBsZXZlbCAocXVlcnlfZGVwdGggPT0gMCkgb3IgZnJvbQorICogdG9w LWxldmVsIG9wZXJhdGlvbnMgKHF1ZXJ5X2RlcHRoID09IC0xLCBlLmcuIEFmdGVyVHJpZ2dlckZp cmVEZWZlcnJlZAorICogYXQgQ09NTUlUKS4gIE5lc3RlZCBxdWVyaWVzIGZyb20gU1BJIGluc2lk ZSBBRlRFUiB0cmlnZ2VycyBydW4gYXQKKyAqIGRlcHRoID4gMCBhbmQgbXVzdCBub3QgdGVhciBk b3duIHJlc291cmNlcyB0aGUgb3V0ZXIgYmF0Y2ggc3RpbGwgbmVlZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKworCWlmIChhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID4gMCkKKwkJcmV0dXJuOwor CisJZm9yZWFjaChsYywgYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MpCisJeworCQlBZnRl clRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW0gPSBsZmlyc3QobGMpOworCisJCWl0ZW0tPmNhbGxi YWNrKGl0ZW0tPmFyZyk7CisJfQorCisJbGlzdF9mcmVlX2RlZXAoYWZ0ZXJUcmlnZ2Vycy5iYXRj aF9jYWxsYmFja3MpOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOworfQor CisvKgorICogQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZQorICoJCVJldHVybnMgdHJ1ZSBpZiB3 ZSdyZSBpbnNpZGUgYSBxdWVyeS1sZXZlbCB0cmlnZ2VyIGJhdGNoIHdoZXJlCisgKgkJcmVnaXN0 ZXJlZCBiYXRjaCBjYWxsYmFja3Mgd2lsbCBhY3R1YWxseSBiZSBpbnZva2VkLgorICoKKyAqIFRo aXMgaXMgZmFsc2UgZHVyaW5nIHZhbGlkYXRlRm9yZWlnbktleUNvbnN0cmFpbnQoKSwgd2hpY2gg Y2FsbHMKKyAqIFJJIHRyaWdnZXIgZnVuY3Rpb25zIGRpcmVjdGx5IG91dHNpZGUgdGhlIGFmdGVy LXRyaWdnZXIgZnJhbWV3b3JrLgorICovCitib29sCitBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZl KHZvaWQpCit7CisJcmV0dXJuIGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0gMDsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggMmRlMDhkYTY1MzkuLjc4YmE5YzdjYzM0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMTk5LDYgKzE5OSw0OCBAQCB0 eXBlZGVmIHN0cnVjdCBSSV9Db21wYXJlSGFzaEVudHJ5CiAJRm1nckluZm8JY2FzdF9mdW5jX2Zp bmZvOwkvKiBpbiBjYXNlIHdlIG11c3QgY29lcmNlIGlucHV0ICovCiB9IFJJX0NvbXBhcmVIYXNo RW50cnk7CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBGSyByb3dzIGJ1ZmZlcmVkIGJlZm9y ZSBmbHVzaGluZy4KKyAqCisgKiBMYXJnZXIgYmF0Y2hlcyBhbW9ydGl6ZSBwZXItZmx1c2ggb3Zl cmhlYWQgYW5kIGxldCB0aGUgU0tfU0VBUkNIQVJSQVkKKyAqIHBhdGggd2FsayBtb3JlIGxlYWYg cGFnZXMgaW4gYSBzaW5nbGUgc29ydGVkIHRyYXZlcnNhbC4gIEJ1dCBlYWNoCisgKiBidWZmZXJl ZCByb3cgaXMgYSBtYXRlcmlhbGl6ZWQgSGVhcFR1cGxlIGluIGZsdXNoX2N4dCwgYW5kIHRoZSBt YXRjaGVkW10KKyAqIHNjYW4gaW4gcmlfRmFzdFBhdGhGbHVzaEFycmF5KCkgaXMgTyhiYXRjaF9z aXplKSBwZXIgaW5kZXggbWF0Y2guCisgKiBCZW5jaG1hcmtpbmcgc2hvd2VkIGxpdHRsZSBkaWZm ZXJlbmNlIGJldHdlZW4gMTYgYW5kIDY0LCB3aXRoIDI1NgorICogY29uc2lzdGVudGx5IHNsb3dl ci4gIDY0IGlzIGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICovCisjZGVmaW5lIFJJX0ZBU1RQQVRI X0JBVENIX1NJWkUJNjQKKworLyoKKyAqIFJJX0Zhc3RQYXRoRW50cnkKKyAqCQlQZXItY29uc3Ry YWludCBjYWNoZSBvZiByZXNvdXJjZXMgbmVlZGVkIGJ5IHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgp LgorICoKKyAqIE9uZSBlbnRyeSBwZXIgY29uc3RyYWludCwga2V5ZWQgYnkgcGdfY29uc3RyYWlu dCBPSUQuICBDcmVhdGVkIGxhemlseQorICogYnkgcmlfRmFzdFBhdGhHZXRFbnRyeSgpIG9uIGZp cnN0IHVzZSB3aXRoaW4gYSB0cmlnZ2VyLWZpcmluZyBiYXRjaAorICogYW5kIHRvcm4gZG93biBi eSByaV9GYXN0UGF0aFRlYXJkb3duKCkgYXQgYmF0Y2ggZW5kLgorICoKKyAqIEZLIHR1cGxlcyBh cmUgYnVmZmVyZWQgaW4gYmF0Y2hbXSBhY3Jvc3MgdHJpZ2dlciBpbnZvY2F0aW9ucyBhbmQKKyAq IGZsdXNoZWQgd2hlbiB0aGUgYnVmZmVyIGZpbGxzIG9yIHRoZSBiYXRjaCBlbmRzLgorICovCit0 eXBlZGVmIHN0cnVjdCBSSV9GYXN0UGF0aEVudHJ5Cit7CisJT2lkCQkJY29ub2lkOwkJCS8qIGhh c2gga2V5OiBwZ19jb25zdHJhaW50IE9JRCAqLworCU9pZAkJCWZrX3JlbGlkOwkJLyogZm9yIHJp X0Zhc3RQYXRoRW5kQmF0Y2goKSAqLworCVJlbGF0aW9uCXBrX3JlbDsKKwlSZWxhdGlvbglpZHhf cmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90OworCVR1cGxlVGFibGVTbG90ICpma19zbG90 OworCU1lbW9yeUNvbnRleHQgZmx1c2hfY3h0OwkvKiBzaG9ydC1saXZlZCBjb250ZXh0IGZvciBw ZXItZmx1c2ggd29yayAqLworCisJLyoKKwkgKiBUT0RPOiBiYXRjaFtdIGlzIEhlYXBUdXBsZVtd IGJlY2F1c2UgdGhlIEFGVEVSIHRyaWdnZXIgbWFjaGluZXJ5CisJICogY3VycmVudGx5IHBhc3Nl cyB0dXBsZXMgYXMgSGVhcFR1cGxlcy4gIE9uY2UgdHJpZ2dlciBpbmZyYXN0cnVjdHVyZSBpcwor CSAqIHNsb3RpZmllZCwgdGhpcyBzaG91bGQgdXNlIGEgc2xvdCBhcnJheSBvciB3aGF0ZXZlciBi YXRjaGVkIHR1cGxlCisJICogc3RvcmFnZSBhYnN0cmFjdGlvbiBleGlzdHMgYXQgdGhhdCBwb2lu dCB0byBiZSBUQU0tYWdub3N0aWMuCisJICovCisJSGVhcFR1cGxlCWJhdGNoW1JJX0ZBU1RQQVRI X0JBVENIX1NJWkVdOworCWludAkJCWJhdGNoX2NvdW50OworfSBSSV9GYXN0UGF0aEVudHJ5Owog CiAvKgogICogTG9jYWwgZGF0YQpAQCAtMjA4LDYgKzI1MCw4IEBAIHN0YXRpYyBIVEFCICpyaV9x dWVyeV9jYWNoZSA9IE5VTEw7CiBzdGF0aWMgSFRBQiAqcmlfY29tcGFyZV9jYWNoZSA9IE5VTEw7 CiBzdGF0aWMgZGNsaXN0X2hlYWQgcmlfY29uc3RyYWludF9jYWNoZV92YWxpZF9saXN0OwogCitz dGF0aWMgSFRBQiAqcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworc3RhdGljIGJvb2wgcmlfZmFz dHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOwogCiAvKgogICogTG9jYWwgZnVuY3Rp b24gcHJvdG90eXBlcwpAQCAtMjU4LDYgKzMwMiwxNiBAQCBzdGF0aWMgYm9vbCByaV9QZXJmb3Jt Q2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQlib29sIGRldGVj dE5ld1Jvd3MsIGludCBleHBlY3RfT0spOwogc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVjayhj b25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQkJCSBSZWxhdGlvbiBma19yZWws IFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQmF0Y2hB ZGQoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJUmVsYXRpb24gZmtf cmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7CitzdGF0aWMgaW50CXJpX0Zhc3RQYXRoRmx1 c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xv dCwKKwkJCQkJCQkJICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBm a19yZWwsCisJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRl c2MpOworc3RhdGljIGludAlyaV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpm cGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJCQkJIGNvbnN0IFJJX0NvbnN0 cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwsCisJ CQkJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbyk7CiBzdGF0aWMgYm9vbCBy aV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gaWR4X3JlbCwKIAkJ CQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYywgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJ CQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLApA QCAtMjgwLDYgKzMzNCwxMCBAQCBwZ19ub3JldHVybiBzdGF0aWMgdm9pZCByaV9SZXBvcnRWaW9s YXRpb24oY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQkJCQkgICBSZWxh dGlvbiBwa19yZWwsIFJlbGF0aW9uIGZrX3JlbCwKIAkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xv dCAqdmlvbGF0b3JzbG90LCBUdXBsZURlc2MgdHVwZGVzYywKIAkJCQkJCQkJCQkgICBpbnQgcXVl cnlubywgYm9vbCBpc19yZXN0cmljdCwgYm9vbCBwYXJ0Z29uZSk7CitzdGF0aWMgUklfRmFzdFBh dGhFbnRyeSAqcmlfRmFzdFBhdGhHZXRFbnRyeShjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlp bmZvLAorCQkJCQkJCQkJCQkgUmVsYXRpb24gZmtfcmVsKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQ YXRoRW5kQmF0Y2godm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoVGVhcmRvd24o dm9pZCk7CiAKIAogLyoKQEAgLTM5MCwxMiArNDQ4LDIyIEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dl ckRhdGEgKnRyaWdkYXRhKQogCSAqIGxvY2suICBUaGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFs ZW50IHRvIHRoZSBTUEkgcGF0aCBiZWxvdyBidXQgYXZvaWRzCiAJICogdGhlIHBlci1yb3cgZXhl Y3V0b3Igb3ZlcmhlYWQuCiAJICoKLQkgKiByaV9GYXN0UGF0aENoZWNrKCkgcmVwb3J0cyB0aGUg dmlvbGF0aW9uIGl0c2VsZiAodmlhIGVyZXBvcnQpIGlmIG5vCi0JICogbWF0Y2hpbmcgUEsgcm93 IGlzIGZvdW5kLCBzbyBpdCBvbmx5IHJldHVybnMgb24gc3VjY2Vzcy4KKwkgKiByaV9GYXN0UGF0 aEJhdGNoQWRkKCkgYW5kIHJpX0Zhc3RQYXRoQ2hlY2soKSByZXBvcnQgdGhlIHZpb2xhdGlvbgor CSAqIHRoZW1zZWx2ZXMgaWYgbm8gbWF0Y2hpbmcgUEsgcm93IGlzIGZvdW5kLCBzbyB0aGV5IG9u bHkgcmV0dXJuIG9uCisJICogc3VjY2Vzcy4KIAkgKi8KIAlpZiAocmlfZmFzdHBhdGhfaXNfYXBw bGljYWJsZShyaWluZm8pKQogCXsKLQkJcmlfRmFzdFBhdGhDaGVjayhyaWluZm8sIGZrX3JlbCwg bmV3c2xvdCk7CisJCWlmIChBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZlKCkpCisJCXsKKwkJCS8q IEJhdGNoZWQgcGF0aDogYnVmZmVyIGFuZCBwcm9iZSBpbiBncm91cHMgKi8KKwkJCXJpX0Zhc3RQ YXRoQmF0Y2hBZGQocmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQl9CisJCWVsc2UKKwkJewor CQkJLyogQUxURVIgVEFCTEUgdmFsaWRhdGlvbjogcGVyLXJvdywgbm8gY2FjaGUgKi8KKwkJCXJp X0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQl9CiAJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCkBAIC0yNjkwLDEwICsyNzU4LDE0IEBAIHJpX1Bl cmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCiAvKgogICogcmlf RmFzdFBhdGhDaGVjawotICoJCVBlcmZvcm0gRksgZXhpc3RlbmNlIGNoZWNrIHZpYSBkaXJlY3Qg aW5kZXggcHJvYmUsIGJ5cGFzc2luZyBTUEkuCisgKgkJUGVyZm9ybSBwZXIgcm93IEZLIGV4aXN0 ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4IHByb2JlLAorICoJCWJ5cGFzc2luZyBTUEkuCiAg KgogICogSWYgbm8gbWF0Y2hpbmcgUEsgcm93IGV4aXN0cywgcmVwb3J0IHRoZSB2aW9sYXRpb24g dmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpLAogICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0 dXJucyBub3JtYWxseS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgQUxU RVIgVEFCTEUgdmFsaWRhdGlvbiBwYXRoLiBPdGhlciBwYXRocyB1c2UKKyAqIHJpX0Zhc3RQYXRo QmF0Y2hBZGQoKS4KICAqLwogc3RhdGljIHZvaWQKIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklf Q29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI3NjEsNiArMjgzMywzMjkgQEAgcmlfRmFzdFBh dGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCXRhYmxlX2Nsb3NlKHBr X3JlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIHJpX0Zhc3RQYXRoQmF0Y2hBZGQKKyAqCQlCdWZm ZXIgYSBGSyByb3cgZm9yIGJhdGNoZWQgcHJvYmluZy4KKyAqCisgKiBBZGRzIHRoZSByb3cgdG8g dGhlIGJhdGNoIGJ1ZmZlci4gIFdoZW4gdGhlIGJ1ZmZlciBpcyBmdWxsLCBmbHVzaGVzIGFsbAor ICogYnVmZmVyZWQgcm93cyBieSBwcm9iaW5nIHRoZSBQSyBpbmRleC4gIEFueSB2aW9sYXRpb24g aXMgcmVwb3J0ZWQKKyAqIGltbWVkaWF0ZWx5IGR1cmluZyB0aGUgZmx1c2ggdmlhIHJpX1JlcG9y dFZpb2xhdGlvbiAod2hpY2ggZG9lcyBub3QgcmV0dXJuKS4KKyAqCisgKiBVc2VzIHRoZSBwZXIt YmF0Y2ggY2FjaGUgKFJJX0Zhc3RQYXRoRW50cnkpIHRvIGF2b2lkIHBlci1yb3cgcmVsYXRpb24K KyAqIG9wZW4vY2xvc2UsIHNsb3QgY3JlYXRpb24sIGV0Yy4KKyAqCisgKiBUaGUgYmF0Y2ggaXMg YWxzbyBmbHVzaGVkIGF0IGVuZCBvZiB0cmlnZ2VyLWZpcmluZyBjeWNsZSB2aWEKKyAqIHJpX0Zh c3RQYXRoRW5kQmF0Y2goKS4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoQmF0Y2hBZGQo Y29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJUmVsYXRpb24gZmtfcmVsLCBU dXBsZVRhYmxlU2xvdCAqbmV3c2xvdCkKK3sKKwlSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5ID0g cmlfRmFzdFBhdGhHZXRFbnRyeShyaWluZm8sIGZrX3JlbCk7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQ7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0 KTsKKwlmcGVudHJ5LT5iYXRjaFtmcGVudHJ5LT5iYXRjaF9jb3VudF0gPQorCQlFeGVjQ29weVNs b3RIZWFwVHVwbGUobmV3c2xvdCk7CisJZnBlbnRyeS0+YmF0Y2hfY291bnQrKzsKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlmIChmcGVudHJ5LT5iYXRjaF9jb3VudCA+PSBS SV9GQVNUUEFUSF9CQVRDSF9TSVpFKQorCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZnBlbnRyeSwg ZmtfcmVsLCByaWluZm8pOworfQorCisvKgorICogcmlfRmFzdFBhdGhCYXRjaEZsdXNoCisgKgkJ Rmx1c2ggYWxsIGJ1ZmZlcmVkIEZLIHJvd3MgYnkgcHJvYmluZyB0aGUgUEsgaW5kZXguCisgKgor ICogRGlzcGF0Y2hlcyB0byByaV9GYXN0UGF0aEZsdXNoQXJyYXkoKSBmb3Igc2luZ2xlLWNvbHVt biBGS3MKKyAqICh1c2luZyBTS19TRUFSQ0hBUlJBWSkgb3IgcmlfRmFzdFBhdGhGbHVzaExvb3Ao KSBmb3IgbXVsdGktY29sdW1uCisgKiBGS3MgKHBlci1yb3cgcHJvYmluZykuICBWaW9sYXRpb25z IGFyZSByZXBvcnRlZCBpbW1lZGlhdGVseSB2aWEKKyAqIHJpX1JlcG9ydFZpb2xhdGlvbigpLCB3 aGljaCBkb2VzIG5vdCByZXR1cm4uCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEJhdGNo Rmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgUmVsYXRpb24gZmtfcmVsLAorCQkJCQkg IGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8pCit7CisJUmVsYXRpb24JcGtfcmVsID0g ZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOwor CVR1cGxlVGFibGVTbG90ICpma19zbG90ID0gZnBlbnRyeS0+Zmtfc2xvdDsKKwlTbmFwc2hvdAlz bmFwc2hvdDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCU9pZAkJCXNhdmVkX3VzZXJpZDsK KwlpbnQJCQlzYXZlZF9zZWNfY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlpbnQJ CQl2aW9sYXRpb25faW5kZXg7CisKKwlpZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPT0gMCkKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBDQ0kgYW5kIHNlY3VyaXR5IGNvbnRleHQgc3dpdGNoIGFyZSBk b25lIG9uY2UgZm9yIHRoZSBlbnRpcmUgYmF0Y2guCisJICogUGVyLXJvdyBDQ0kgaXMgdW5uZWNl c3NhcnkgYmVjYXVzZSBieSB0aGUgdGltZSBhIGZsdXNoIHJ1bnMsIGFsbCBBRlRFUgorCSAqIHRy aWdnZXJzIGZvciB0aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgKHRyaWdnZXIg aW52b2NhdGlvbnMKKwkgKiBzdHJpY3RseSBhbHRlcm5hdGUgcGVyIHJvdyksIHNvIGEgc2luZ2xl IENDSSBhZHZhbmNlcyBwYXN0IGFsbCB0aGVpcgorCSAqIGVmZmVjdHMuICBQZXItcm93IHNlY3Vy aXR5IGNvbnRleHQgc3dpdGNoIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgZWFjaAorCSAqIHJvdydz IHByb2JlIHJ1bnMgZW50aXJlbHkgYXMgdGhlIFBLIHRhYmxlIG93bmVyLCBzYW1lIGFzIHRoZSBT UEkgcGF0aAorCSAqIC0tIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgU1BJIHBhdGgg c2V0cyBhbmQgcmVzdG9yZXMgdGhlCisJICogY29udGV4dCBwZXIgcm93IHdoZXJlYXMgd2UgZG8g aXQgb25jZSBhcm91bmQgdGhlIHdob2xlIGJhdGNoLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7CisJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25h cHNob3QoKSk7CisKKwkvKgorCSAqIGJ1aWxkX2luZGV4X3NjYW5rZXlzKCkgbWF5IHBhbGxvYyBj YXN0IHJlc3VsdHMgZm9yIGNyb3NzLXR5cGUgRktzLiBVc2UKKwkgKiB0aGUgZW50cnkncyBzaG9y dC1saXZlZCBmbHVzaCBjb250ZXh0IHNvIHRoZXNlIGRvbid0IGFjY3VtdWxhdGUgYWNyb3NzCisJ ICogYmF0Y2hlcy4KKwkgKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRy eS0+Zmx1c2hfY3h0KTsKKworCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4 X3JlbCwgc25hcHNob3QsIE5VTEwsCisJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwgU09fTk9O RSk7CisKKwlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZzYXZlZF9zZWNf Y29udGV4dCk7CisJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZvcm0ocGtfcmVs KS0+cmVsb3duZXIsCisJCQkJCQkgICBzYXZlZF9zZWNfY29udGV4dCB8CisJCQkJCQkgICBTRUNV UklUWV9MT0NBTF9VU0VSSURfQ0hBTkdFIHwKKwkJCQkJCSAgIFNFQ1VSSVRZX05PRk9SQ0VfUkxT KTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB1c2VyIGhhcyBwZXJtaXNzaW9u IHRvIGFjY2VzcyBwa19yZWwuIERvbmUgaGVyZQorCSAqIHJhdGhlciB0aGFuIGF0IGVudHJ5IGNy ZWF0aW9uIHNvIHRoYXQgcGVybWlzc2lvbiBjaGFuZ2VzIGJldHdlZW4KKwkgKiBmbHVzaGVzIGFy ZSByZXNwZWN0ZWQsIG1hdGNoaW5nIHRoZSBwZXItcm93IGJlaGF2aW9yIG9mIHRoZSBTUEkgcGF0 aCwKKwkgKiBhbGJlaXQgY2hlY2tlZCBvbmNlIHBlciBmbHVzaCByYXRoZXIgdGhhbiBvbmNlIHBl ciByb3csIGxpa2UgaW4KKwkgKiByaV9GYXN0UGF0aENoZWNrKCkuCisJICovCisJcmlfQ2hlY2tQ ZXJtaXNzaW9ucyhwa19yZWwpOworCisJaWYgKHJpaW5mby0+ZnBtZXRhID09IE5VTEwpCisJewor CQkvKiBSZWxvYWQgdG8gZW5zdXJlIGl0J3MgdmFsaWQuICovCisJCXJpaW5mbyA9IHJpX0xvYWRD b25zdHJhaW50SW5mbyhyaWluZm8tPmNvbnN0cmFpbnRfaWQpOworCQlyaV9wb3B1bGF0ZV9mYXN0 cGF0aF9tZXRhZGF0YSgoUklfQ29uc3RyYWludEluZm8gKikgcmlpbmZvLAorCQkJCQkJCQkJICBm a19yZWwsIGlkeF9yZWwpOworCX0KKwlBc3NlcnQocmlpbmZvLT5mcG1ldGEpOworCisJLyogU2tp cCBhcnJheSBvdmVyaGVhZCBmb3Igc2luZ2xlLXJvdyBiYXRjaGVzLiAqLworCWlmIChyaWluZm8t Pm5rZXlzID09IDEgJiYgZnBlbnRyeS0+YmF0Y2hfY291bnQgPiAxKQorCQl2aW9sYXRpb25faW5k ZXggPSByaV9GYXN0UGF0aEZsdXNoQXJyYXkoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLAorCQkJ CQkJCQkJCQkJZmtfcmVsLCBzbmFwc2hvdCwgc2NhbmRlc2MpOworCWVsc2UKKwkJdmlvbGF0aW9u X2luZGV4ID0gcmlfRmFzdFBhdGhGbHVzaExvb3AoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLAor CQkJCQkJCQkJCQkgICBma19yZWwsIHNuYXBzaG90LCBzY2FuZGVzYyk7CisKKwlTZXRVc2VySWRB bmRTZWNDb250ZXh0KHNhdmVkX3VzZXJpZCwgc2F2ZWRfc2VjX2NvbnRleHQpOworCVVucmVnaXN0 ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJaW5kZXhfZW5kc2NhbihzY2FuZGVzYyk7CisKKwlpZiAo dmlvbGF0aW9uX2luZGV4ID49IDApCisJeworCQlFeGVjU3RvcmVIZWFwVHVwbGUoZnBlbnRyeS0+ YmF0Y2hbdmlvbGF0aW9uX2luZGV4XSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9SZXBvcnRWaW9s YXRpb24ocmlpbmZvLCBwa19yZWwsIGZrX3JlbCwKKwkJCQkJCSAgIGZrX3Nsb3QsIE5VTEwsCisJ CQkJCQkgICBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLLCBmYWxzZSwgZmFsc2UpOworCX0KKworCU1l bW9yeUNvbnRleHRSZXNldChmcGVudHJ5LT5mbHVzaF9jeHQpOworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworCisJLyogUmVzZXQuICovCisJZnBlbnRyeS0+YmF0Y2hfY291bnQgPSAw OworfQorCisvKgorICogcmlfRmFzdFBhdGhGbHVzaExvb3AKKyAqCQlNdWx0aS1jb2x1bW4gZmFs bGJhY2s6IHByb2JlIHRoZSBpbmRleCBvbmNlIHBlciBidWZmZXJlZCByb3cuCisgKgorICogVXNl ZCBmb3IgY29tcG9zaXRlIGZvcmVpZ24ga2V5cyB3aGVyZSBTS19TRUFSQ0hBUlJBWSBkb2VzIG5v dAorICogYXBwbHksIGFuZCBhbHNvIGZvciBzaW5nbGUtcm93IGJhdGNoZXMgb2Ygc2luZ2xlLWNv bHVtbiBGS3Mgd2hlcmUKKyAqIHRoZSBhcnJheSBvdmVyaGVhZCBpcyBub3Qgd29ydGggaXQuCisg KgorICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZpb2xhdGluZyByb3cgaW4gdGhl IGJhdGNoIGFycmF5LCBvciAtMSBpZgorICogYWxsIHJvd3MgYXJlIHZhbGlkLgorICovCitzdGF0 aWMgaW50CityaV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBU dXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNj YW5EZXNjIHNjYW5kZXNjKQoreworCVJlbGF0aW9uCXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsK KwlSZWxhdGlvbglpZHhfcmVsID0gZnBlbnRyeS0+aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAq cGtfc2xvdCA9IGZwZW50cnktPnBrX3Nsb3Q7CisJRGF0dW0JCXBrX3ZhbHNbSU5ERVhfTUFYX0tF WVNdOworCWNoYXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKKwlTY2FuS2V5RGF0YSBza2V5 W0lOREVYX01BWF9LRVlTXTsKKwlib29sCQlmb3VuZCA9IHRydWU7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGZwZW50cnktPmJhdGNoX2NvdW50OyBpKyspCisJeworCQlFeGVjU3RvcmVIZWFwVHVw bGUoZnBlbnRyeS0+YmF0Y2hbaV0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJcmlfRXh0cmFjdFZhbHVl cyhma19yZWwsIGZrX3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBrX251bGxzKTsKKwkJ YnVpbGRfaW5kZXhfc2NhbmtleXMocmlpbmZvLCBpZHhfcmVsLCBwa192YWxzLCBwa19udWxscywg c2tleSk7CisKKwkJZm91bmQgPSByaV9GYXN0UGF0aFByb2JlT25lKHBrX3JlbCwgaWR4X3JlbCwg c2NhbmRlc2MsIHBrX3Nsb3QsCisJCQkJCQkJCQlzbmFwc2hvdCwgcmlpbmZvLCBza2V5LCByaWlu Zm8tPm5rZXlzKTsKKworCQkvKiBSZXBvcnQgZmlyc3QgdW5tYXRjaGVkIHJvdyAqLworCQlpZiAo IWZvdW5kKQorCQkJcmV0dXJuIGk7CisJfQorCisJLyogQWxsIHBhc3MuICovCisJcmV0dXJuIC0x OworfQorCisvKgorICogcmlfRmFzdFBhdGhGbHVzaEFycmF5CisgKgkJU2luZ2xlLWNvbHVtbiBm YXN0IHBhdGggdXNpbmcgU0tfU0VBUkNIQVJSQVkuCisgKgorICogQnVpbGRzIGFuIGFycmF5IG9m IEZLIHZhbHVlcyBhbmQgZG9lcyBvbmUgaW5kZXggc2NhbiB3aXRoCisgKiBTS19TRUFSQ0hBUlJB WS4gIFRoZSBpbmRleCBBTSBzb3J0cyBhbmQgZGVkdXBsaWNhdGVzIHRoZSBhcnJheQorICogaW50 ZXJuYWxseSwgdGhlbiB3YWxrcyBtYXRjaGluZyBsZWFmIHBhZ2VzIGluIG9yZGVyLiAgRWFjaAor ICogbWF0Y2hlZCBQSyB0dXBsZSBpcyBsb2NrZWQgYW5kIHJlY2hlY2tlZCBhcyBiZWZvcmU7IGEg bWF0Y2hlZFtdCisgKiBiaXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zIHdlcmUgc2F0aXNm aWVkLgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aW9sYXRpbmcgcm93 IGluIHRoZSBiYXRjaCBhcnJheSwgb3IgLTEgaWYKKyAqIGFsbCByb3dzIGFyZSB2YWxpZC4KKyAq Lworc3RhdGljIGludAorcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZw ZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAorCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hv dCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYykKK3sKKwlGYXN0UGF0aE1ldGEgKmZwbWV0YSA9IHJp aW5mby0+ZnBtZXRhOworCVJlbGF0aW9uCXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsKKwlSZWxh dGlvbglpZHhfcmVsID0gZnBlbnRyeS0+aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAqcGtfc2xv dCA9IGZwZW50cnktPnBrX3Nsb3Q7CisJRGF0dW0JCXNlYXJjaF92YWxzW1JJX0ZBU1RQQVRIX0JB VENIX1NJWkVdOworCWJvb2wJCW1hdGNoZWRbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJaW50 CQkJbnZhbHMgPSBmcGVudHJ5LT5iYXRjaF9jb3VudDsKKwlEYXR1bQkJcGtfdmFsc1tJTkRFWF9N QVhfS0VZU107CisJY2hhcgkJcGtfbnVsbHNbSU5ERVhfTUFYX0tFWVNdOworCVNjYW5LZXlEYXRh IHNrZXlbMV07CisJRm1nckluZm8gICAqY2FzdF9mdW5jX2ZpbmZvOworCUZtZ3JJbmZvICAgKmVx X29wcl9maW5mbzsKKwlPaWQJCQllbGVtX3R5cGU7CisJaW50MTYJCWVsZW1fbGVuOworCWJvb2wJ CWVsZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsKKwlBcnJheVR5cGUgICphcnI7CisKKwlB c3NlcnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVkLCAwLCBudmFscyAqIHNpemVvZihib29s KSk7CisKKwkvKgorCSAqIEV4dHJhY3QgRksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRv cidzIGV4cGVjdGVkIGlucHV0IHR5cGUgaWYKKwkgKiBuZWVkZWQgKGUuZy4gaW50OCBGSyAtPiBp bnQ0IGZvciBpbnQ0OGVxKS4KKwkgKi8KKwljYXN0X2Z1bmNfZmluZm8gPSAmZnBtZXRhLT5jYXN0 X2Z1bmNfZmluZm9bMF07CisJZXFfb3ByX2ZpbmZvID0gJmZwbWV0YS0+ZXFfb3ByX2ZpbmZvWzBd OworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBU dXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFs dWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOwor CisJCS8qIENhc3QgaWYgbmVlZGVkIChlLmcuIGludDggRksgLT4gbnVtZXJpYyBQSykgKi8KKwkJ aWYgKE9pZElzVmFsaWQoY2FzdF9mdW5jX2ZpbmZvLT5mbl9vaWQpKQorCQkJc2VhcmNoX3ZhbHNb aV0gPSBGdW5jdGlvbkNhbGwzKGNhc3RfZnVuY19maW5mbywKKwkJCQkJCQkJCQkgICBwa192YWxz WzBdLAorCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0dW0oLTEpLAorCQkJCQkJCQkJCSAgIEJvb2xH ZXREYXR1bShmYWxzZSkpOworCQllbHNlCisJCQlzZWFyY2hfdmFsc1tpXSA9IHBrX3ZhbHNbMF07 CisJfQorCisJLyoKKwkgKiBBcnJheSBlbGVtZW50IHR5cGUgbXVzdCBtYXRjaCB0aGUgb3BlcmF0 b3IncyByaWdodC1oYW5kIGlucHV0IHR5cGUsCisJICogd2hpY2ggaXMgd2hhdCB0aGUgaW5kZXgg Y29tcGFyaXNvbiBleHBlY3RzIG9uIHRoZSBzZWFyY2ggc2lkZS4KKwkgKiByaV9wb3B1bGF0ZV9m YXN0cGF0aF9tZXRhZGF0YSgpIHN0b3JlcyBleGFjdGx5IHRoaXMgdmlhCisJICogZ2V0X29wX29w ZmFtaWx5X3Byb3BlcnRpZXMoKSwgd2hpY2ggcmV0dXJucyB0aGUgb3BlcmF0b3IncyByaWdodC1o YW5kCisJICogdHlwZSBhcyB0aGUgc3VidHlwZSBmb3IgY3Jvc3MtdHlwZSBvcGVyYXRvcnMgKGUu Zy4gaW50OCBmb3IgaW50NDhlcSkKKwkgKiBhbmQgdGhlIGNvbW1vbiB0eXBlIGZvciBzYW1lLXR5 cGUgb3BlcmF0b3JzLgorCSAqLworCWVsZW1fdHlwZSA9IGZwbWV0YS0+c3VidHlwZXNbMF07CisJ QXNzZXJ0KE9pZElzVmFsaWQoZWxlbV90eXBlKSk7CisJZ2V0X3R5cGxlbmJ5dmFsYWxpZ24oZWxl bV90eXBlLCAmZWxlbV9sZW4sICZlbGVtX2J5dmFsLCAmZWxlbV9hbGlnbik7CisKKwlhcnIgPSBj b25zdHJ1Y3RfYXJyYXkoc2VhcmNoX3ZhbHMsIG52YWxzLAorCQkJCQkJICBlbGVtX3R5cGUsIGVs ZW1fbGVuLCBlbGVtX2J5dmFsLCBlbGVtX2FsaWduKTsKKworCS8qCisJICogQnVpbGQgc2NhbiBr ZXkgd2l0aCBTS19TRUFSQ0hBUlJBWS4gIFRoZSBpbmRleCBBTSBjb2RlIHdpbGwgaW50ZXJuYWxs eQorCSAqIHNvcnQgYW5kIGRlZHVwbGljYXRlLCB0aGVuIHdhbGsgbGVhZiBwYWdlcyBpbiBvcmRl ci4KKwkgKi8KKwlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZza2V5WzBdLAorCQkJCQkJICAgU0tf U0VBUkNIQVJSQVksCisJCQkJCQkgICAxLAkvKiBhdHRubyAqLworCQkJCQkJICAgZnBtZXRhLT5z dHJhdHNbMF0sCisJCQkJCQkgICBmcG1ldGEtPnN1YnR5cGVzWzBdLAorCQkJCQkJICAgaWR4X3Jl bC0+cmRfaW5kY29sbGF0aW9uWzBdLAorCQkJCQkJICAgZnBtZXRhLT5yZWdvcHNbMF0sCisJCQkJ CQkgICBQb2ludGVyR2V0RGF0dW0oYXJyKSk7CisKKwlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNr ZXksIDEsIE5VTEwsIDApOworCisJLyoKKwkgKiBXYWxrIGFsbCBtYXRjaGVzLiAgVGhlIGluZGV4 IEFNIHJldHVybnMgdGhlbSBpbiBpbmRleCBvcmRlci4gIEZvciBlYWNoCisJICogbWF0Y2gsIGZp bmQgd2hpY2ggYmF0Y2ggaXRlbShzKSBpdCBzYXRpc2ZpZXMuCisJICovCisJd2hpbGUgKGluZGV4 X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHBrX3Nsb3QpKQor CXsKKwkJRGF0dW0JCWZvdW5kX3ZhbDsKKwkJYm9vbAkJZm91bmRfbnVsbDsKKwkJYm9vbAkJY29u Y3VycmVudGx5X3VwZGF0ZWQ7CisJCVNjYW5LZXlEYXRhIHJlY2hlY2tfc2tleVsxXTsKKworCQlp ZiAoIXJpX0xvY2tQS1R1cGxlKHBrX3JlbCwgcGtfc2xvdCwgc25hcHNob3QsICZjb25jdXJyZW50 bHlfdXBkYXRlZCkpCisJCQljb250aW51ZTsKKworCQkvKiBFeHRyYWN0IHRoZSBQSyB2YWx1ZSBm cm9tIHRoZSBtYXRjaGVkIGFuZCBsb2NrZWQgdHVwbGUgKi8KKwkJZm91bmRfdmFsID0gc2xvdF9n ZXRhdHRyKHBrX3Nsb3QsIHJpaW5mby0+cGtfYXR0bnVtc1swXSwgJmZvdW5kX251bGwpOworCQlB c3NlcnQoIWZvdW5kX251bGwpOworCisJCWlmIChjb25jdXJyZW50bHlfdXBkYXRlZCkKKwkJewor CQkJLyoKKwkJCSAqIEJ1aWxkIGEgc2luZ2xlLWtleSBzY2Fua2V5IGZvciByZWNoZWNrLiAgV2Ug bmVlZCB0aGUgYWN0dWFsIFBLCisJCQkgKiB2YWx1ZSB0aGF0IHdhcyBmb3VuZCwgbm90IHRoZSBG SyBzZWFyY2ggdmFsdWUuCisJCQkgKi8KKwkJCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnJlY2hl Y2tfc2tleVswXSwgMCwgMSwKKwkJCQkJCQkJICAgZnBtZXRhLT5zdHJhdHNbMF0sCisJCQkJCQkJ CSAgIGZwbWV0YS0+c3VidHlwZXNbMF0sCisJCQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxh dGlvblswXSwKKwkJCQkJCQkJICAgZnBtZXRhLT5yZWdvcHNbMF0sCisJCQkJCQkJCSAgIGZvdW5k X3ZhbCk7CisJCQlpZiAoIXJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZShpZHhfcmVsLCByZWNoZWNr X3NrZXksIHBrX3Nsb3QpKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTGluZWFy IHNjYW4gdG8gbWFyayBhbGwgYmF0Y2ggaXRlbXMgbWF0Y2hpbmcgdGhpcyBQSyB2YWx1ZS4KKwkJ ICogTyhiYXRjaF9zaXplKSBwZXIgbWF0Y2gsIE8oYmF0Y2hfc2l6ZV4yKSB3b3JzdCBjYXNlIC0t IGZpbmUgZm9yIHRoZQorCQkgKiBjdXJyZW50IGJhdGNoIHNpemUgb2YgNjQuCisJCSAqLworCQlm b3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJCXsKKwkJCWlmICghbWF0Y2hlZFtpXSAm JgorCQkJCURhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbChlcV9vcHJfZmluZm8sCisJCQkJ CQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxhdGlvblswXSwKKwkJCQkJCQkJCQkJICAgZm91 bmRfdmFsLAorCQkJCQkJCQkJCQkgICBzZWFyY2hfdmFsc1tpXSkpKQorCQkJCW1hdGNoZWRbaV0g PSB0cnVlOworCQl9CisJfQorCisJLyogUmVwb3J0IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJCWlmICghbWF0Y2hlZFtpXSkKKwkJCXJl dHVybiBpOworCisJLyogQWxsIHBhc3MuICovCisJcmV0dXJuIC0xOworfQorCiAvKgogICogcmlf RmFzdFBhdGhQcm9iZU9uZQogICoJCVByb2JlIHRoZSBQSyBpbmRleCBmb3Igb25lIHNldCBvZiBz Y2FuIGtleXMsIGxvY2sgdGhlIG1hdGNoaW5nCkBAIC0zNjg3LDMgKzQwODIsMTk3IEBAIFJJX0ZL ZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2ZvaWQpCiAKIAlyZXR1cm4gUklfVFJJR0dFUl9OT05FOwog fQorCisvKgorICogcmlfRmFzdFBhdGhFbmRCYXRjaAorICoJCUZsdXNoIHJlbWFpbmluZyByb3dz IGFuZCB0ZWFyIGRvd24gY2FjaGVkIHN0YXRlLgorICoKKyAqIFJlZ2lzdGVyZWQgYXMgYW4gQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjay4gIE5vdGU6IHRoZSBmbHVzaCBjYW4KKyAqIGRvIHJlYWwg d29yayAoQ0NJLCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCwgaW5kZXggcHJvYmVzKSBhbmQgY2Fu CisgKiB0aHJvdyBFUlJPUiBvbiBhIGNvbnN0cmFpbnQgdmlvbGF0aW9uLiAgSWYgdGhhdCBoYXBw ZW5zLAorICogcmlfRmFzdFBhdGhUZWFyZG93biBuZXZlciBydW5zOyBSZXNvdXJjZU93bmVyICsg WGFjdENhbGxiYWNrCisgKiBoYW5kbGUgcmVzb3VyY2UgY2xlYW51cCBvbiB0aGUgYWJvcnQgcGF0 aC4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAqYXJnKQorewor CUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7CisKKwlp ZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogRmx1c2ggYW55 IHBhcnRpYWwgYmF0Y2hlcyAtLSBjYW4gdGhyb3cgRVJST1IgKi8KKwloYXNoX3NlcV9pbml0KCZz dGF0dXMsIHJpX2Zhc3RwYXRoX2NhY2hlKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2Vh cmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5iYXRjaF9jb3VudCA+IDAp CisJCXsKKwkJCVJlbGF0aW9uCWZrX3JlbCA9IHRhYmxlX29wZW4oZW50cnktPmZrX3JlbGlkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbyA9IHJp X0xvYWRDb25zdHJhaW50SW5mbyhlbnRyeS0+Y29ub2lkKTsKKworCQkJcmlfRmFzdFBhdGhCYXRj aEZsdXNoKGVudHJ5LCBma19yZWwsIHJpaW5mbyk7CisJCQl0YWJsZV9jbG9zZShma19yZWwsIE5v TG9jayk7CisJCX0KKwl9CisKKwkvKiBPcmRlcmx5IHRlYXJkb3duICovCisJcmlfRmFzdFBhdGhU ZWFyZG93bigpOworfQorCisvKgorICogcmlfRmFzdFBhdGhUZWFyZG93bgorICoJCVRlYXIgZG93 biBhbGwgY2FjaGVkIGZhc3QtcGF0aCBzdGF0ZS4KKyAqCisgKiBDYWxsZWQgZnJvbSByaV9GYXN0 UGF0aEVuZEJhdGNoKCkgYWZ0ZXIgZmx1c2hpbmcgYW55IHJlbWFpbmluZyByb3dzLgorICovCitz dGF0aWMgdm9pZAorcmlfRmFzdFBhdGhUZWFyZG93bih2b2lkKQoreworCUhBU0hfU0VRX1NUQVRV UyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7CisKKwlpZiAocmlfZmFzdHBhdGhf Y2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9m YXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVz KSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+aWR4X3JlbCkKKwkJCWluZGV4X2Nsb3NlKGVu dHJ5LT5pZHhfcmVsLCBOb0xvY2spOworCQlpZiAoZW50cnktPnBrX3JlbCkKKwkJCXRhYmxlX2Ns b3NlKGVudHJ5LT5wa19yZWwsIE5vTG9jayk7CisJCWlmIChlbnRyeS0+cGtfc2xvdCkKKwkJCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZW50cnktPnBrX3Nsb3QpOworCQlpZiAoZW50cnkt PmZrX3Nsb3QpCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGVudHJ5LT5ma19zbG90 KTsKKwkJaWYgKGVudHJ5LT5mbHVzaF9jeHQpCisJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGVudHJ5 LT5mbHVzaF9jeHQpOworCX0KKworCWhhc2hfZGVzdHJveShyaV9mYXN0cGF0aF9jYWNoZSk7CisJ cmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVy ZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19y ZWdpc3RlcmVkID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aFhhY3RDYWxsYmFj ayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIE9uIGFib3J0LCBSZXNv dXJjZU93bmVyIGFscmVhZHkgcmVsZWFzZWQgcmVsYXRpb25zOyBvbiBjb21taXQsCisJICogcmlf RmFzdFBhdGhUZWFyZG93biBhbHJlYWR5IHJhbi4gIEVpdGhlciB3YXksIGp1c3QgTlVMTCB0aGUg c3RhdGljCisJICogcG9pbnRlcnMgc28gdGhleSBkb24ndCBkYW5nbGUgaW50byB0aGUgbmV4dCB0 cmFuc2FjdGlvbi4KKwkgKi8KKwlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CisJcmlfZmFzdHBh dGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorcmlfRmFz dFBhdGhTdWJYYWN0Q2FsbGJhY2soU3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklk IG15U3ViaWQsCisJCQkJCQkgICBTdWJUcmFuc2FjdGlvbklkIHBhcmVudFN1YmlkLCB2b2lkICph cmcpCit7CisJaWYgKGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRfQUJPUlRfU1VCKQorCXsKKwkJLyoK KwkJICogUmVzb3VyY2VPd25lciBhbHJlYWR5IHJlbGVhc2VkIHJlbGF0aW9ucy4gIE5VTEwgdGhl IHN0YXRpYyBwb2ludGVycworCQkgKiBzbyB0aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxs YmFjayBiZWNvbWVzIGEgbm8tb3AgZm9yIHRoZSByZXN0CisJCSAqIG9mIHRoaXMgdHJhbnNhY3Rp b24uCisJCSAqLworCQlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CisJCXJpX2Zhc3RwYXRoX2Nh bGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEdl dEVudHJ5CisgKgkJTG9vayB1cCBvciBjcmVhdGUgYSBwZXItYmF0Y2ggY2FjaGUgZW50cnkgZm9y IHRoZSBnaXZlbiBjb25zdHJhaW50LgorICoKKyAqIE9uIGZpcnN0IGNhbGwgZm9yIGEgY29uc3Ry YWludCB3aXRoaW4gYSBiYXRjaDogb3BlbnMgcGtfcmVsIGFuZCB0aGUgaW5kZXgsCisgKiBhbGxv Y2F0ZXMgc2xvdHMgZm9yIGJvdGggRksgcm93IGFuZCB0aGUgbG9va2VkIHVwIFBLIHJvdywgYW5k IHJlZ2lzdGVycyB0aGUKKyAqIGNsZWFudXAgY2FsbGJhY2suCisgKgorICogT24gc3Vic2VxdWVu dCBjYWxsczogcmV0dXJucyB0aGUgZXhpc3RpbmcgZW50cnkuCisgKi8KK3N0YXRpYyBSSV9GYXN0 UGF0aEVudHJ5ICoKK3JpX0Zhc3RQYXRoR2V0RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8g KnJpaW5mbywgUmVsYXRpb24gZmtfcmVsKQoreworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5Owor CWJvb2wJCWZvdW5kOworCisJLyogQ3JlYXRlIGhhc2ggdGFibGUgb24gZmlyc3QgdXNlIGluIHRo aXMgYmF0Y2ggKi8KKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwl7CisJCUhBU0hD VEwJCWN0bDsKKworCQlpZiAoIXJpX2Zhc3RwYXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCkK KwkJeworCQkJUmVnaXN0ZXJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2ssIE5V TEwpOworCQkJUmVnaXN0ZXJTdWJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJh Y2ssIE5VTEwpOworCQkJcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1 ZTsKKwkJfQorCisJCWN0bC5rZXlzaXplID0gc2l6ZW9mKE9pZCk7CisJCWN0bC5lbnRyeXNpemUg PSBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSk7CisJCWN0bC5oY3h0ID0gVG9wVHJhbnNhY3Rpb25D b250ZXh0OworCQlyaV9mYXN0cGF0aF9jYWNoZSA9IGhhc2hfY3JlYXRlKCJSSSBmYXN0LXBhdGgg Y2FjaGUiLAorCQkJCQkJCQkJCTE2LAorCQkJCQkJCQkJCSZjdGwsCisJCQkJCQkJCQkJSEFTSF9F TEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09OVEVYVCk7CisJfQorCisJZW50cnkgPSBoYXNoX3Nl YXJjaChyaV9mYXN0cGF0aF9jYWNoZSwgJnJpaW5mby0+Y29uc3RyYWludF9pZCwKKwkJCQkJCUhB U0hfRU5URVIsICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJTWVtb3J5Q29udGV4dCBv bGRjeHQ7CisKKwkJLyoKKwkJICogWmVybyBvdXQgbm9uLWtleSBmaWVsZHMgc28gcmlfRmFzdFBh dGhUZWFyZG93biBpcyBzYWZlIGlmIHdlIGVycm9yCisJCSAqIG91dCBkdXJpbmcgcGFydGlhbCBp bml0aWFsaXphdGlvbiBiZWxvdy4KKwkJICovCisJCW1lbXNldCgoKGNoYXIgKikgZW50cnkpICsg b2Zmc2V0b2YoUklfRmFzdFBhdGhFbnRyeSwgcGtfcmVsKSwgMCwKKwkJCSAgIHNpemVvZihSSV9G YXN0UGF0aEVudHJ5KSAtIG9mZnNldG9mKFJJX0Zhc3RQYXRoRW50cnksIHBrX3JlbCkpOworCisJ CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOwor CisJCWVudHJ5LT5ma19yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQoZmtfcmVsKTsKKworCQkvKgor CQkgKiBPcGVuIFBLIHRhYmxlIGFuZCBpdHMgdW5pcXVlIGluZGV4LgorCQkgKgorCQkgKiBSb3dT aGFyZUxvY2sgb24gcGtfcmVsIG1hdGNoZXMgd2hhdCB0aGUgU1BJIHBhdGgncyBTRUxFQ1QgLi4u IEZPUgorCQkgKiBLRVkgU0hBUkUgd291bGQgYWNxdWlyZSBhcyBhIHJlbGF0aW9uLWxldmVsIGxv Y2suIEFjY2Vzc1NoYXJlTG9jaworCQkgKiBvbiB0aGUgaW5kZXggaXMgc3RhbmRhcmQgZm9yIGlu ZGV4IHNjYW5zLgorCQkgKgorCQkgKiBXZSBkb24ndCByZWxlYXNlIHRoZXNlIGxvY2tzIHVudGls IGVuZCBvZiB0cmFuc2FjdGlvbiwgbWF0Y2hpbmcgU1BJCisJCSAqIGJlaGF2aW9yLgorCQkgKi8K KwkJZW50cnktPnBrX3JlbCA9IHRhYmxlX29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVM b2NrKTsKKwkJZW50cnktPmlkeF9yZWwgPSBpbmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCWVudHJ5LT5wa19zbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50 cnktPnBrX3JlbCwgTlVMTCk7CisKKwkJLyoKKwkJICogTXVzdCBiZSBUVFNPcHNIZWFwVHVwbGUg YmVjYXVzZSBFeGVjU3RvcmVIZWFwVHVwbGUoKSBpcyB1c2VkIHRvCisJCSAqIGxvYWQgZW50cmll cyBmcm9tIGJhdGNoW10gaW50byB0aGlzIHNsb3QgZm9yIHZhbHVlIGV4dHJhY3Rpb24uCisJCSAq LworCQllbnRyeS0+Zmtfc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdl dERlc2NyKGZrX3JlbCksCisJCQkJCQkJCQkJCQkgICZUVFNPcHNIZWFwVHVwbGUpOworCisJCWVu dHJ5LT5mbHVzaF9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250 ZXh0LAorCQkJCQkJCQkJCQkJICJSSSBmYXN0IHBhdGggZmx1c2ggdGVtcG9yYXJ5IGNvbnRleHQi LAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX1NNQUxMX1NJWkVTKTsKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CisKKwkJLyogRW5zdXJlIGNsZWFudXAgYXQgZW5kIG9mIHRoaXMgdHJp Z2dlci1maXJpbmcgYmF0Y2ggKi8KKwkJaWYgKCFyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3Rl cmVkKQorCQl7CisJCQlSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBh dGhFbmRCYXRjaCwgTlVMTCk7CisJCQlyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0g dHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaApp bmRleCAyN2FmNTI4NDQwNi4uNzY2NDI5OGY1YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKQEAg LTI4OSw0ICsyODksMjIgQEAgZXh0ZXJuIHZvaWQgUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRy aWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwKIAogZXh0ZXJuIGludAlSSV9GS2V5X3Ry aWdnZXJfdHlwZShPaWQgdGdmb2lkKTsKIAorLyoKKyAqIENhbGxiYWNrIHR5cGUgZm9yIGVuZC1v Zi10cmlnZ2VyLWJhdGNoIG5vdGlmaWNhdGlvbnMuCisgKgorICogUmVnaXN0ZXJlZCB2aWEgUmVn aXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKCkuICBJbnZva2VkIHdoZW4KKyAqIGEgYmF0 Y2ggb2YgYWZ0ZXItdHJpZ2dlciBwcm9jZXNzaW5nIGNvbXBsZXRlczoKKyAqCS0gQWZ0ZXJUcmln Z2VyRW5kUXVlcnkoKSAgICAgIChpbW1lZGlhdGUgY29uc3RyYWludHMpCisgKgktIEFmdGVyVHJp Z2dlckZpcmVEZWZlcnJlZCgpICAoZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKQorICoJ LSBBZnRlclRyaWdnZXJTZXRTdGF0ZSgpICAgICAgKFNFVCBDT05TVFJBSU5UUyBJTU1FRElBVEUp CisgKgorICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBlYWNoIGJhdGNoLiAg Q2FsbGVycyBtdXN0CisgKiByZS1yZWdpc3RlciBpZiB0aGV5IG5lZWQgdG8gYmUgY2FsbGVkIGFn YWluIGluIGEgc3Vic2VxdWVudCBiYXRjaC4KKyAqLwordHlwZWRlZiB2b2lkICgqQWZ0ZXJUcmln Z2VyQmF0Y2hDYWxsYmFjaykgKHZvaWQgKmFyZyk7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNr LAorCQkJCQkJCQkJCQkgIHZvaWQgKmFyZyk7CitleHRlcm4gYm9vbCBBZnRlclRyaWdnZXJCYXRj aElzQWN0aXZlKHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogVFJJR0dFUl9IICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IDZjNjA3ZDM2MjIyLi45MTI5 NTc1NGJhYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tl eS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAg LTM1NTcsMyArMzU1NywxMjkgQEAgREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3Bh cnQxM190MQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MgogZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBma3BhcnQxM190MwogUkVTRVQgc2VhcmNoX3BhdGg7CistLSBUZXN0cyBmb3Jl aWduIGtleSBjaGVjayBmYXN0LXBhdGggbm8tY2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9w a19hbHRlciAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VM RUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChh IGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMCk7CistLSBWYWxpZGF0aW9uIHBhdGg6IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBm cF9ma19hbHRlciBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJ TlNFUlQgSU5UTyBmcF9ma19hbHRlciBWQUxVRVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29u c3RyYWludCBhY3RpdmUpCitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2Zr X2FsdGVyIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19hbHRlcl9hX2Zr ZXkiCitERVRBSUw6ICBLZXkgKGEpPSgxMDEpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9w a19hbHRlciIuCitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRlcjsKKy0tIFNlcGFy YXRlIHRlc3Q6IHZhbGlkYXRpb24gY2F0Y2hlcyBleGlzdGluZyB2aW9sYXRpb24KK0NSRUFURSBU QUJMRSBmcF9wa19hbHRlcjIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3Br X2FsdGVyMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyMiAoYSBpbnQpOwor SU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIyIFZBTFVFUyAoMSksICgyMDApOyAgLS0gMjAwIGhhcyBu byBQSyBtYXRjaAorQUxURVIgVEFCTEUgZnBfZmtfYWx0ZXIyIEFERCBGT1JFSUdOIEtFWSAoYSkg UkVGRVJFTkNFUyBmcF9wa19hbHRlcjI7ICAtLSBzaG91bGQgZmFpbAorRVJST1I6ICBpbnNlcnQg b3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19hbHRlcjIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNv bnN0cmFpbnQgImZwX2ZrX2FsdGVyMl9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSgyMDApIGlz IG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19hbHRlcjIiLgorRFJPUCBUQUJMRSBmcF9ma19h bHRlcjIsIGZwX3BrX2FsdGVyMjsKKy0tIFRlc3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVz IGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBfcGsxIChh IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfcGsyIChiIGludCBQUklNQVJZIEtF WSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBW QUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX211bHRpX2ZrICgKKyAgICBhIGludCBSRUZFUkVO Q0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VSVCBJTlRP IGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7ICAtLSB0d28gY29uc3RyYWludHMsIG9uZSBiYXRj aAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsgVkFMVUVTICgxLCAyKTsgIC0tIHNlY29uZCBjb25z dHJhaW50IGZhaWxzCitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX211bHRp X2ZrIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9tdWx0aV9ma19iX2ZrZXki CitERVRBSUw6ICBLZXkgKGIpPSgyKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGsyIi4K K0RST1AgVEFCTEUgZnBfbXVsdGlfZmssIGZwX3BrMSwgZnBfcGsyOworLS0gVGVzdCB0aGF0IGZh c3QtcGF0aCBjYWNoZSBoYW5kbGVzIGRlZmVycmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RS QUlOVFMgSU1NRURJQVRFCitDUkVBVEUgVEFCTEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkg S0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19k ZWZlciBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19k ZWZlciBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZB TFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNU UkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBmaXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNF UlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVz dHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1cAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9u IHRhYmxlICJmcF9ma19kZWZlciIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBf ZmtfZGVmZXJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMykgaXMgbm90IHByZXNlbnQgaW4g dGFibGUgImZwX3BrX2RlZmVyIi4KK0NPTU1JVDsKK0RST1AgVEFCTEUgZnBfcGtfZGVmZXIsIGZw X2ZrX2RlZmVyOworLS0gU3VidHJhbnNhY3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJl IGludmFsaWRhdGVkIG9uIFJPTExCQUNLIFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAo YSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJF RkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVF UyAoMSksICgyKTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEp OworU0FWRVBPSU5UIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsK K1JPTExCQUNLIFRPIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsK K0NPTU1JVDsKK1NFTEVDVCAqIEZST00gZnBfZmtfc3VieGFjdDsKKyBhIAorLS0tCisgMQorIDEK KygyIHJvd3MpCisKK0RST1AgVEFCTEUgZnBfZmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsKKy0t IEZLIGNoZWNrIG11c3Qgc2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmln Z2VycworLS0gZmlyaW5nIG9uIHRoZSBzYW1lIHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3Br X2NjaSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQg UkVGRVJFTkNFUyBmcF9wa19jY2kpOworQ1JFQVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKSBSRVRV Uk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisgIFJBSVNFIE5PVElDRSAnZnBfYXV0b19wayBjYWxs ZWQnOworICBJTlNFUlQgSU5UTyBmcF9wa19jY2kgVkFMVUVTIChORVcuYSk7CisgIFJFVFVSTiBO RVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKy0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBS SSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBwZXIgcm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1 dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19jY2kKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVO Q1RJT04gZnBfYXV0b19waygpOworLS0gU2hvdWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lv bnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxV RVMgKDEpLCAoMiksICgzKTsKK05PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVkCitOT1RJQ0U6ICBm cF9hdXRvX3BrIGNhbGxlZAorTk9USUNFOiAgZnBfYXV0b19wayBjYWxsZWQKK0RST1AgVEFCTEUg ZnBfZmtfY2NpLCBmcF9wa19jY2k7CitEUk9QIEZVTkNUSU9OIGZwX2F1dG9fcGs7CistLSBNdWx0 aS1jb2x1bW4gRks6IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBv c2l0ZSBrZXlzCitDUkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFS WSBLRVkgKGEsIGIpKTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBp bnQsIGEgaW50LCBiIGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9w a19tdWx0aSk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMg KDEsIDk5OSwgOTk5KTsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtf bXVsdGkiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX211bHRpX2FfYl9m a2V5IgorREVUQUlMOiAgS2V5IChhLCBiKT0oOTk5LCA5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRh YmxlICJmcF9wa19tdWx0aSIuCitEUk9QIFRBQkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsK Ky0tIERlZmVycmVkIGNvbnN0cmFpbnQ6IGJhdGNoIGZsdXNoZWQgYXQgQ09NTUlULCBub3QgYXQg c3RhdGVtZW50IGVuZAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NvbW1pdCAoYSBpbnQgUFJJTUFSWSBL RVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2NvbW1pdCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19j b21taXQKKyAgICBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBm cF9wa19jb21taXQgVkFMVUVTICgxKTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0 IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VS VCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDk5OSk7CitDT01NSVQ7CitFUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX2NvbW1pdCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkg Y29uc3RyYWludCAiZnBfZmtfY29tbWl0X2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkg aXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrX2NvbW1pdCIuCitEUk9QIFRBQkxFIGZwX2Zr X2NvbW1pdCwgZnBfcGtfY29tbWl0OworLS0gQ3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0 OiBpbnQ4IEZLIHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJy YXkgY29uc3RydWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZ IEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEs IDIwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3Br X2Nyb3NzKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMo MSwgMjAwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0VSUk9SOiAg aW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfY3Jvc3MiIHZpb2xhdGVzIGZvcmVpZ24g a2V5IGNvbnN0cmFpbnQgImZwX2ZrX2Nyb3NzX2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5 OSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrX2Nyb3NzIi4KK0RST1AgVEFCTEUgZnBf ZmtfY3Jvc3MsIGZwX3BrX2Nyb3NzOworLS0gRHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1c2lu ZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25pemVk IGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhlIGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUgZnBf cGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVT ICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kdXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVw KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19kdXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2ZvcmVpZ25fa2V5LnNxbAppbmRleCBmY2RkMDA2Yzk3MS4uZjY0NmRkMTA0MDEgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKQEAgLTI1MzUsMyArMjUzNSwxMjEgQEAgV0lUSCBj dGUgQVMgKAogCiBEUk9QIFNDSEVNQSBma3BhcnQxMyBDQVNDQURFOwogUkVTRVQgc2VhcmNoX3Bh dGg7CisKKy0tIFRlc3RzIGZvcmVpZ24ga2V5IGNoZWNrIGZhc3QtcGF0aCBuby1jYWNoZSBwYXRo LgorQ1JFQVRFIFRBQkxFIGZwX3BrX2FsdGVyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQg SU5UTyBmcF9wa19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitDUkVBVEUg VEFCTEUgZnBfZmtfYWx0ZXIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKKy0tIFZhbGlkYXRpb24gcGF0aDogc2hvdWxkIHN1 Y2NlZWQKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJF TkNFUyBmcF9wa19hbHRlcjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFZBTFVFUyAoMTAxKTsg IC0tIHNob3VsZCBmYWlsIChjb25zdHJhaW50IGFjdGl2ZSkKK0RST1AgVEFCTEUgZnBfZmtfYWx0 ZXIsIGZwX3BrX2FsdGVyOworCistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMg ZXhpc3RpbmcgdmlvbGF0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklN QVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBU QUJMRSBmcF9ma19hbHRlcjIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxV RVMgKDEpLCAoMjAwKTsgIC0tIDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2Zr X2FsdGVyMiBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0g c2hvdWxkIGZhaWwKK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CisKKy0t IFRlc3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNv bnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBfcGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVB VEUgVEFCTEUgZnBfcGsyIChiIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEg VkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxF IGZwX211bHRpX2ZrICgKKyAgICBhIGludCBSRUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBS RUZFUkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwg MSk7ICAtLSB0d28gY29uc3RyYWludHMsIG9uZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlf ZmsgVkFMVUVTICgxLCAyKTsgIC0tIHNlY29uZCBjb25zdHJhaW50IGZhaWxzCitEUk9QIFRBQkxF IGZwX211bHRpX2ZrLCBmcF9wazEsIGZwX3BrMjsKKworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBj YWNoZSBoYW5kbGVzIGRlZmVycmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1N RURJQVRFCitDUkVBVEUgVEFCTEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NS RUFURSBUQUJMRSBmcF9ma19kZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZF UlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxV RVMgKDEpLCAoMik7CisKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgx KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMik7CitTRVQgQ09OU1RSQUlOVFMg QUxMIElNTUVESUFURTsgIC0tIGZpcmVzIGJhdGNoIGNhbGxiYWNrIGhlcmUKK0lOU0VSVCBJTlRP IGZwX2ZrX2RlZmVyIFZBTFVFUyAoMyk7ICAtLSBzaG91bGQgZmFpbCwgYWxzbyB0ZXN0cyB0aGF0 IGNhY2hlIHdhcyBjbGVhbmVkIHVwCitDT01NSVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBm cF9ma19kZWZlcjsKKworLS0gU3VidHJhbnNhY3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0 IGJlIGludmFsaWRhdGVkIG9uIFJPTExCQUNLIFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFj dCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50 IFJFRkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZB TFVFUyAoMSksICgyKTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMg KDEpOworU0FWRVBPSU5UIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgy KTsKK1JPTExCQUNLIFRPIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgx KTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00gZnBfZmtfc3VieGFjdDsKK0RST1AgVEFCTEUgZnBf Zmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsKKworLS0gRksgY2hlY2sgbXVzdCBzZWUgUEsgcm93 cyBpbnNlcnRlZCBieSBlYXJsaWVyIEFGVEVSIHRyaWdnZXJzCistLSBmaXJpbmcgb24gdGhlIHNh bWUgc3RhdGVtZW50CitDUkVBVEUgVEFCTEUgZnBfcGtfY2NpIChhIGludCBQUklNQVJZIEtFWSk7 CitDUkVBVEUgVEFCTEUgZnBfZmtfY2NpIChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2NjaSk7CisK K0NSRUFURSBGVU5DVElPTiBmcF9hdXRvX3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJ TgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBf cGtfY2NpIFZBTFVFUyAoTkVXLmEpOworICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBs cGdzcWw7CisKKy0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBm aXJzdCBwZXIgcm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBm cF9ma19jY2kKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOwor CistLSBTaG91bGQgc3VjY2VlZDogQUFBX2F1dG8gcHJvdmlzaW9ucyB0aGUgUEsgcm93IGJlZm9y ZSBSSSBjaGVjaworSU5TRVJUIElOVE8gZnBfZmtfY2NpIFZBTFVFUyAoMSksICgyKSwgKDMpOwor CitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBfcGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRv X3BrOworCistLSBNdWx0aS1jb2x1bW4gRks6IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJv YmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlzCitDUkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50 LCBiIGludCwgUFJJTUFSWSBLRVkgKGEsIGIpKTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNF TEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBm cF9ma19tdWx0aSAoeCBpbnQsIGEgaW50LCBiIGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikg UkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1Qg aSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9m a19tdWx0aSBWQUxVRVMgKDEsIDk5OSwgOTk5KTsKK0RST1AgVEFCTEUgZnBfZmtfbXVsdGksIGZw X3BrX211bHRpOworCistLSBEZWZlcnJlZCBjb25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENP TU1JVCwgbm90IGF0IHN0YXRlbWVudCBlbmQKK0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEg aW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVS RU5DRVMgZnBfcGtfY29tbWl0CisgICAgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOwor SU5TRVJUIElOVE8gZnBfcGtfY29tbWl0IFZBTFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRP IGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVF UyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOwor RFJPUCBUQUJMRSBmcF9ma19jb21taXQsIGZwX3BrX2NvbW1pdDsKKworLS0gQ3Jvc3MtdHlwZSBG SyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZLIHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1 ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3RydWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jv c3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50 OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVF UyAoOTk5KTsKK0RST1AgVEFCTEUgZnBfZmtfY3Jvc3MsIGZwX3BrX2Nyb3NzOworCistLSBEdXBs aWNhdGUgRksgdmFsdWVzOiB3aGVuIHVzaW5nIHRoZSBiYXRjaGVkIFNBT1AgcGF0aCwgZXZlcnkK Ky0tIHJvdyBtdXN0IGJlIHJlY29nbml6ZWQgYXMgc2F0aXNmaWVkLCBub3QganVzdCB0aGUgZmly c3QgbWF0Y2gKK0NSRUFURSBUQUJMRSBmcF9wa19kdXAgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lO U0VSVCBJTlRPIGZwX3BrX2R1cCBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2R1cCAo YSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kdXApOworSU5TRVJUIElOVE8gZnBfZmtfZHVwIFNFTEVD VCAxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitEUk9QIFRBQkxFIGZwX2ZrX2R1cCwg ZnBfcGtfZHVwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4ZTljMDY1NDdkNi4uYzBi OWU1MWUzMzUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zMCw2ICszMCw4IEBAIEFk ZEZvcmVpZ25VcGRhdGVUYXJnZXRzX2Z1bmN0aW9uCiBBZGRySW5mbwogQWZmaXhOb2RlCiBBZmZp eE5vZGVEYXRhCitBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrCitBZnRlclRyaWdnZXJDYWxsYmFj a0l0ZW0KIEFmdGVyVHJpZ2dlckV2ZW50CiBBZnRlclRyaWdnZXJFdmVudENodW5rCiBBZnRlclRy aWdnZXJFdmVudERhdGEKQEAgLTI0ODUsNiArMjQ4Nyw3IEBAIFJJWAogUklfQ29tcGFyZUhhc2hF bnRyeQogUklfQ29tcGFyZUtleQogUklfQ29uc3RyYWludEluZm8KK1JJX0Zhc3RQYXRoRW50cnkK IFJJX1F1ZXJ5SGFzaEVudHJ5CiBSSV9RdWVyeUtleQogUlRFS2luZAotLSAKMi40Ny4zCgo= --0000000000000b9393064e6515c5--