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 1vSiCi-0044AC-35 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 20:51:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSiCh-001bDY-0t for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 20:51:31 +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 1vSiCg-001bDP-09 for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 20:51:31 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSiCb-003ojQ-1b for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 20:51:28 +0000 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-477b1cc8fb4so34611985e9.1 for ; Mon, 08 Dec 2025 12:51:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1765227084; x=1765831884; 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=TwgufOrNvX3kTAZDt7mdePLZAGonX3ox3Pb4RwaU5tQ=; b=QKAvt1w3qTdgXqJUPsCChRNebjLOfKcjK6IGN5mV4J9D0I6UGutr+u0BoMQgtEFXPu +fb8FYpOerL3qCTYtmR/HKuQDO8QTQum2/5Cfz8FEDA98h6BE6MhOVO+nJjPVVddlK1x XWXM5icNzympzgRlMuFO/dTbmvQG5FD5q/+uv6NCOaUpCkxawEKuWkNy2RO4YWFDF6Hc CAuUo1cce8rGmuiCmMLQCvj5vljaCXHfmbrg/Vbf7roVY1W2py4cbgfRPSXyBKSONJT9 REnAJWgD64kQRB8gzinXlass7DXG2adG3Z1JNPIW4fDPfQVws2hhvfDaUdL6q7FqypW/ lD4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765227084; x=1765831884; 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=TwgufOrNvX3kTAZDt7mdePLZAGonX3ox3Pb4RwaU5tQ=; b=kPzzHk6yYI9OHDeiV9JbfvAfjpF7LxpLTZH7vswuhzw1ARwGFS8OgwxRhfaOejRa6l 9G9FjB5789BpYZOYJWn0s+OZ8dazNs2r/bV5p6+ReAs74Ew8apsiXKVufGDiVH+D/hFs sy1qOK/ss47Ge8bUMfbXcEnpYCUYZbPCmtoIKAosrnljUxo4A2kewUGnmL0hXXxt98fN MS+ZB6DzjU6jT7MCAv8uJTYH19W8WgKp/3EozoN0KLwLPMeml1W1u495svVILFWLs94L Jb3HPqqmNv1dtfjEMy29BG+ro/nyCdNvbaQTvd5rW5YYArIhDStV2QrmNzhTr0qn0gU+ y29w== X-Forwarded-Encrypted: i=1; AJvYcCWrwt7Kt7ryP5Vi9Y6gPnevytGGF3N2SMViFNlVxeDljoEcP2xP6YKQnM/8x6N+hk8aQG6aRrcBjOCftU1e@lists.postgresql.org X-Gm-Message-State: AOJu0YxVylX2jzLz5jpM8AhgrWxY3M9IoOr4bkjcuiAzQMLM5lzzGDsr U2nF6Uc0eSd6GKOG/oUd2sUax+TOa/R614SKqJDAsyBFrW9qGvJvO98PcFrwh0Ua1/aCGmmkYp4 wHuC4/4Wf9qrUvOde3UCaIslk9284jicljbVe/zzyVQ== X-Gm-Gg: ASbGncsCDMODA4BO4jSK+FxJBNj5in1QJ+X/3Gr4eEJxQzR/a976IqK3kAGFCYczla9 mOOrmxje8czVeUktBEPproCSXEW7r7MFYkcae481WJUwOSC5qU/f4ms9QXRV0x7LzU+80REBYxo PJ26WMEpKXIvGapfAAO+y7AwOlY85izV0L27eEtRdbNiAiStDayoBQpMNAwZJf1sNULeulNJR9e 6exgDFLf3PLy9I+5BNrtxbwsWmg1O+5BkG1VXGiA7VT3TjKTJuMiBEDpIGJJgGF5gDfUgQsiQb0 J1RCDg== X-Google-Smtp-Source: AGHT+IGxJK1QEEHNC4UUh+w9k9Xg5XyWex3AvCCi6dpIohRVfU7PQo8lTzcTvHo5UksuaIWEYgCbmJIzEAOUmtWkbSs= X-Received: by 2002:a05:600c:35c6:b0:477:fcb:226b with SMTP id 5b1f17b1804b1-47939df2636mr92044295e9.2.1765227083630; Mon, 08 Dec 2025 12:51:23 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Mon, 8 Dec 2025 15:50:56 -0500 X-Gm-Features: AQt7F2oT-8GG07yZhdJ9_L6QVQV5ucifrAkd9zO0UghrPHJZw26p921hx0k24mg Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000045724e064576f530" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000045724e064576f530 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Nov 30, 2025 at 8:23=E2=80=AFPM Peter Geoghegan wrote: > Attached patch makes the table AM revisions we talked about. This is a > significant change in direction, so I'm adopting a new patch > versioning scheme: this new version is v1. (I just find it easier to > deal with sequential patch version numbers.) Attached is v2, just to keep the patch set cleanly applying against HEAD following recent changes in nbtree. No real changes here. -- Peter Geoghegan --00000000000045724e064576f530 Content-Type: application/x-patch; name="v2-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v2-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixm7wia1 RnJvbSAwZTIwNGM0NDgzZGE1NDk4ODg3OTQzZjgxNWFkODE2MjRiYjk1MjFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyIDQvNF0gQWRk IGFtZ2V0YmF0Y2ggc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBwYXRjaCBzaG91bGQg YmUgY29uc2lkZXJlZCBhIHdvcmsgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgb25seSBiZWVuCmxpZ2h0 bHkgdGVzdGVkLCBhbmQgaXQncyBub3QgY2xlYXIgaWYgSSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBv ZiB0aGUKaW50cmljYWNpZXMgd2l0aCBidWNrZXQgc3BsaXRzIChhbmQgd2l0aCBwaW5zIHRoYXQg YXJlIGhlbGQgYnkgdGhlCnNjYW4ncyBvcGFxdWUgc3RhdGUgbW9yZSBnZW5lcmFsbHkpLgoKVGhp cyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIGhhc2ggaW5kZXhlcyBvdmVyIHRvIHVzaW5nIHRoZSBk cm9wUGluCm9wdGltaXphdGlvbiwgc2luY2UgdGhhdCBpcyBzdGFuZGFyZCB3aGVuIHVzaW5nIHRo ZSBuZXcgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBUaGlzIHdvbid0IGJyaW5nIHNpbWlsYXIgYmVu ZWZpdHMgdG8gaGFzaCBpbmRleCBzY2FucyB0aGF0Cm5idHJlZSBpbmRleCBzY2FucyBnYWluZWQg d2hlbiBjb21taXQgMmVkNWI4N2Ygd2VudCBpbi4gIEhhc2ggaW5kZXgKdmFjdXVtaW5nIGFjcXVp cmVzIGEgY2xlYW51cCBsb2NrIG9uIGJ1Y2tldCBwYWdlcywgYnV0IGNvbmZsaWN0aW5nIHBpbnMK b24gYnVja2V0IHBhZ2VzIGFyZSBzdGlsbCBoZWxkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiBl YWNoIGluZGV4IHNjYW4uCgpIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBpbmRlcGVuZGVudCB2YWx1 ZSBpbiBhdm9pZGluZyBob2xkaW5nIG9uIHRvCmJ1ZmZlciBwaW5zIGR1cmluZyBpbmRleCBzY2Fu czogaW5kZXggcHJlZmV0Y2hpbmcgdGVuZHMgdG8gaG9sZCBvcGVuCmFzIG1hbnkgYXMgc2V2ZXJh bCBkb3plbiBiYXRjaGVzIHdpdGggY2VydGFpbiB3b3JrbG9hZHMgKHdvcmtsb2FkcyB3aGVyZQp0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyB0byBnZXQgcXVpdGUgZmFyIGFoZWFkIG9mIHRoZSByZWFk IHBvc2l0aW9uIGluCm9yZGVyIHRvIG1haW50YWluIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXRjaCBk aXN0YW5jZSBvbiB0aGUgaGVhcGFtIHNpZGUpLgpHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNo ZXMgd29uJ3QgaG9sZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQKbGVhc3QgZHVyaW5n IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QsIHBlciB0aGUgcnVs ZXMKZXN0YWJsaXNoZWQgYnkgY29tbWl0IDJlZDViODdmKSBpcyBsaWtlbHkgdG8gbWFrZSBsaWZl IGVhc2llciB3aGVuIHRoZQpyZXNvdXJjZSBtYW5hZ2VtZW50IHJ1bGVzIGZvciBJL08gcHJlZmV0 Y2hpbmcgYXJlIGZ1bGx5IGlyb25lZC1vdXQuCgpOb3RlIHRoYXQgdGhlIGNvZGUgcGF0aCBpbiBf aGFzaF9raWxsX2l0ZW1zIHRoYXQgY2FsbHMgX2hhc2hfZ2V0YnVmCih0aG91Z2ggb25seSB3aXRo IHRoZSBMSF9PVkVSRkxPV19QQUdFIGZsYWcvb3ZlcmZsb3cgcGFnZXMpIGlzIGRlYWQKY29kZS92 ZXN0aWdpYWwgb24gbWFzdGVyIFsxXS4gIEhvd2V2ZXIsIGl0J3Mgbm93IHVzZWZ1bCBhZ2Fpbiwg c2luY2UKX2hhc2hfa2lsbF9pdGVtcyBtaWdodCBub3cgbmVlZCB0byByZWxvY2sgYW5kIHJlcGlu IGFuIG92ZXJmbG93IHBhZ2UKKG5vdCBqdXN0IHJlbG9jayBpdCkgZHVyaW5nIGRyb3BQaW4gc2Nh bnMuCgpbMV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PThtZWZ5OFFVY3NuS0xUZVB1eTR0 RThwZE8rZ1NSUTl5UXdVSG9hZUZURndAbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggICAgICAg ICAgICB8ICA3MyArLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAxMjMgKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAg fCAgMTkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDI4NyArKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGls LmMgICB8ICA5OCArKysrLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICB8ICAgMiAtCiA2IGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25zKCspLCAzNjMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggODM5YzM0MzEyLi4wM2Y4YmM5YjMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2gu aApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAqSGFzaFBh Z2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5cGVkZWYg c3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0 Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQg aGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3Mg bG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0 cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhl IGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQg aGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJm bG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3Ig YnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRl cmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdo ZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBh cnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxs IGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBh bmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29y IHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwot CWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJ CWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Q b3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwot fSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlk KHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBv cykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwK LQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUg SGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1 ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2Nr TnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAot CQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3Mp LmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBv cykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNoU2Nhbk9wYXF1 ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8KQEAgLTE3 OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVm ZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9v bAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkg KGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJ dGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJ CW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkv KgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZl IHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3Vy clBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsK IAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDEx ICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2 YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1 ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5m byAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBoYXNoZ2V0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJh dGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRl eFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNo X3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJ CSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJu IGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCk7Citl eHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9v bCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQx OSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hf Z2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21h c2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4g dm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IGI0YjQ2MDcyNC4uZmQxYTkxNzNhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzOwog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1y ZXNjYW4gPSBoYXNocmVzY2FuOwotCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBs ZTsKLQlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOwotCWFtcm91dGluZS0+YW1mcmVlYmF0 Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bWdldGJhdGNoID0gaGFzaGdldGJhdGNoOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2ggPSBoYXNo ZnJlZWJhdGNoOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwOwogCWFt cm91dGluZS0+YW1lbmRzY2FuID0gaGFzaGVuZHNjYW47CiAJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0 ID0gTlVMTDsKQEAgLTI4NSw1NCArMjg1LDIyIEBAIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0t IEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdl dCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9v bAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitC YXRjaEluZGV4U2NhbgoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRl eFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7Ci0JSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7Ci0KIAkvKiBI YXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNo IGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8qCi0JICogSWYgd2UndmUg YWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4g dGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNj YW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMg PSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxM KQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2 aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2Un bGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBs ZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2Ug aWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0J CQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlw bGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBq dXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28t PmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1zID0gKGludCAqKQotCQkJ CQlwYWxsb2MoTWF4SW5kZXhUdXBsZXNQZXJQYWdlICogc2l6ZW9mKGludCkpOwotCi0JCQlpZiAo c28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRl bXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQotCi0JCS8q Ci0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQo c2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBi YXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGly KTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVy IGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9oYXNoX25l eHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNDIsMjYgKzMxMCwyMyBAQCBo YXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0 CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0J SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29s CQlyZXM7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNo U2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCWludAkJCWl0ZW1JbmRleDsKIAotCXJlcyA9IF9oYXNo X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9oYXNoX2ZpcnN0 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJd2hpbGUgKGJh dGNoICE9IE5VTEwpCiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3Vy clBvcy5pdGVtSW5kZXhdOworCQlmb3IgKGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJ CQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJewor CQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCwg MSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKLQkJLyoKLQkJICogX2hhc2hfZmlyc3QgYW5k IF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJICogd2hl bmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9yZSwgdGhl cmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0cyB0byB0 aGUgVElEQml0bWFwLgotCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5o ZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM4Mywx NiArMzQ4LDEyIEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRl cmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jKHNpemVvZihIYXNoU2Nhbk9w YXF1ZURhdGEpKTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5o YXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZh bHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMg PSBOVUxMOwotCXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CiAKIAly ZXR1cm4gc2NhbjsKQEAgLTQwOCwxOCArMzY5LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBz byA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4t PmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkK LQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVt cyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBw b3NpdGlvbiBpbnZhbGlkICh0aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlI YXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5 LCBpZiBhIG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJP ZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVy T2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CkBAIC00MjgsNiArMzc5LDI1IEBAIGhhc2hy ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMs CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVlYmF0 Y2goKSAtLSBGcmVlIGJhdGNoIHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGluCisg Ki8KK3ZvaWQKK2hhc2hmcmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2Nh biBiYXRjaCkKK3sKKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9oYXNoX2tpbGxfaXRl bXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKQorCXsK KwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVy LCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgYmF0Y2gpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2Nh bgogICovCkBAIC00MzcsMTcgKzQwNyw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1Zihy ZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtp bGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IGI4ZTViZDAwNS4uYjBiMGM1MzBjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3Bi dWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRp bmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhv bGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBw cmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tl dCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJl bGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9s ZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hz b19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3Mu YnVmKQorCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNo X2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0 X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1h cnkgYnVja2V0IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1Zh bGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9i dWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHBy aW1hcnkgYnVja2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklz VmFsaWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWws IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xk ICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1 ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZl cjsKLQogCS8qIHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQg PSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHNlYXJjaC5jCmluZGV4IDkyYzE1YTY1Yi4uN2I5YjMxZWVlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0yMiwxMDQgKzIyLDc0IEBACiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKIHN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworCQkJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXIsIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0J CQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0 aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVt SW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp ciwKKwkJCQkJCQkJCSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9p ZCBfaGFzaF9zYXZlaXRlbShCYXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJ CQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZv aWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJ CQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hh c2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQo KSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBl bnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQot ICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBp ZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlP biBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRo IGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0 LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVh cCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nl c3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJv bQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhh dCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBo ZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVw bGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBi dXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRh aW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICov Ci1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CitCYXRjaEluZGV4U2NhbgorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVt YmVyIGJsa25vOwogCUJ1ZmZlcgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJ QmF0Y2hJbmRleFNjYW4gYmF0Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVw bGUgb24gdGhlIGN1cnJlbnQgcGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRh IGZyb20gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rp b24uIEJlZm9yZQotCSAqIG1vdmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ug c3VyZSB0aGF0IHdlIGRlYWwgd2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERl dGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBh bmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1J bmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQ YWdlOworCQlpZiAoIUJsb2NrTnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1v cmVSaWdodCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAo QmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYo cmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNo X3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJ CX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CisJCQlfaGFzaF9kcm9wc2NhbmJ1 ZihyZWwsIHNvKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgt LXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJYmxrbm8g PSBwcmlvcmJhdGNoLT5wcmV2UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8p IHx8ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3Mu cHJldlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQli dWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9C VUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdh eXMgbWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAq IG9wZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVp cmVkCi0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVj a2V0X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJ CQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nh biwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQot CQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKKwkJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwor CQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2Nh dGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYyhzY2FuLCBNYXhJbmRleFR1cGxlc1BlclBhZ2UsIGZhbHNlKTsKKworCS8qIEdldCB0aGUg YnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8s IEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2Ug YW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRw YWdlKHNjYW4sICZidWYsIGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVs LCBzbyk7Ci0JCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBm YWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1 cm4gTlVMTDsKIAl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8K LQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwot CXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOwor CS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBw YWdlICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjY5LDIyICsyMzksMjEgQEAgX2hh c2hfcmVhZHByZXYoSW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3Qo KSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0g RmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5k IHRoZSBmaXJzdCBpdGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4g dGhlCi0gKgkJaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRl ZCB3aXRoIHRoZSBzY2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBi YXRjaCBvZiBpdGVtcyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gp IGluIHRoZSBpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVk IHdpdGgKKyAqCQl0aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4 aXQsIGlmIHRoZSBwYWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJ CW92ZXJmbG93IHBhZ2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlm IGl0IGlzIGEgYnVja2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tl ZCBhbmQgZGF0YSBhYm91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBo YXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlz IHNldCB0byB0aGUgaGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vz c2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAq CQlPdGhlcndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1 cnRoZXIgbWF0Y2hlcy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJu LgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZh bHNlLCB3aXRoIHBpbiBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9j a3MgaGVsZCBvbiBvdmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBw aW4gb24gdGhlIGJ1Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGgg YSBidWNrZXQgcGFnZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluIGlmZgor ICoJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIGRldGVybWluZWQgdGhhdCB0YWJsZSBBTSBy ZXF1aXJlcyBvbmUuCiAgKi8KLWJvb2wKK0JhdGNoSW5kZXhTY2FuCiBfaGFzaF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTUsNyArMjY0LDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlw YWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVt OworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4ocmVs KTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNSw3ICsyOTQsNyBAQCBfaGFzaF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0ZW1zIGluIHRo ZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJu IGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21wdXRlIHRoZSBo YXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFueQpAQCAtNDE4 LDM0ICszODcsMzMgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsK IAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAq LwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQ b3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJh dGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4sIE1heEluZGV4VHVwbGVzUGVyUGFn ZSwgZmFsc2UpOwogCi0JLyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUg cXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5k IGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sICZidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4 IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tz by0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVh cFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQg dHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5n IG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFk cGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJy UG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXgg cGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJy ZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBz YXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUg YmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBp dGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5l eHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5 IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1z IGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRp cikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2Fu RGlyZWN0aW9uIGRpciwKKwkJCSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTQ2MSw4ICs0MjksOCBAQCBfaGFzaF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ cGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShw YWdlKTsKIAotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+ Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCiAJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC00NzMsMjUgKzQ0MSwyMSBAQCBfaGFzaF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2gg Ki8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gp OwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdl LCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVt cyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJ aWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgogCQkJICogQ291bGQgbm90 IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0J CQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFs IHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCi0JCQkgKi8KLQkJCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgorCQkJICogdGhl IG5leHQgcGFnZS4KKwkJCSAqCiAJCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFn ZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKIAkJCSAqIGJsb2NrIG51bWJlci4KIAkJ CSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwK LQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJ aWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gtPmJ1 ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJcHJldl9ibGtubyA9IEludmFs aWRCbG9ja051bWJlcjsKIAkJCWVsc2UKIAkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19w cmV2Ymxrbm87CkBAIC00OTksMjkgKzQ2MywyNSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFk bmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChi dWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5j dXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1 ZjsKKwkJCQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJ fQogCQkJZWxzZQogCQkJewogCQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlv dXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0 aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhh dCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0 IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9r aWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkg KiBmdW5jdGlvbiByZXR1cm5zLgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyB3ZXJlIGZvdW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2Ug PSBwcmV2X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVt YmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBw cmV2X2Jsa25vOworCQkJCWJhdGNoLT5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJ CQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJ CX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRl bSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNo LT5maXJzdEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0K IAllbHNlCiAJewpAQCAtNTMyLDc3ICs0OTIsOTEgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyogbmV3IHBh Z2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZu dW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0J CQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZu dW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2Fu LCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0 ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCiAJ CQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBh Z2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUg Y3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiB0 aGUgcHJldmlvdXMgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJ X2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+ aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmKQorCQkJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRf YnVmIHx8CisJCQkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJ CQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCiAJCQlfaGFzaF9yZWFk cHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChi dWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5j dXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1 ZjsKKwkJCQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJ fQogCQkJZWxzZQogCQkJewogCQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlv dXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0 aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhh dCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0 IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9r aWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkg KiBmdW5jdGlvbiByZXR1cm5zLgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyB3ZXJlIGZvdW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Js a25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CisJCQkJYmF0Y2gtPm5leHRQYWdlID0gbmV4dF9ibGtubzsKKwkJ CQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJ CX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9z Lmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRl bUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9 IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0g MTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8 fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8q IFNhdmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLCBzbyBwcmVwYXJlIHRv IHJldHVybiBpdCAqLworCWlmIChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8 fAorCQliYXRjaC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNv LT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5u ZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJy UG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIg aXMgZWl0aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9w dWxhdGVkIGR1ZSB0byBhIHNwbGl0CisJCSAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7CisJCWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25v OworCQliYXRjaC0+bW9yZUxlZnQgPSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJgor CQkJCQkJICAgQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSkpOworCQliYXRjaC0+ bW9yZVJpZ2h0ID0gKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSAmJgorCQkJCQkJCUJsb2Nr TnVtYmVySXNWYWxpZChiYXRjaC0+bmV4dFBhZ2UpKTsKKworCQkvKgorCQkgKiBJbmNyZW1lbnQg bG9jYWwgcmVmZXJlbmNlIGNvdW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAor CQkgKiBidWZmZXIgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNoZnJlZWJh dGNoKSBiZWZvcmUgdGhlCisJCSAqIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNr ZXRfYnVmIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291 bnQoYmF0Y2gtPmJ1Zik7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0g b3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVl LT5oYXNob19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7 Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCWJhdGNoLT5wcmV2UGFnZSA9 IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKKwkJYmF0Y2gtPm1vcmVMZWZ0ID0gKFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcikgJiYKKwkJCQkJCSAgIEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+cHJldlBhZ2Up KTsKKwkJYmF0Y2gtPm1vcmVSaWdodCA9IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYK KwkJCQkJCQlCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPm5leHRQYWdlKSk7CiAJfQogCi0JQXNz ZXJ0KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyog VW5sb2NrIChhbmQgbGlrZWx5IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJhdGNoIGNvbnRyYWN0 ICovCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQo YmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQog CiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRl eCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3Jl YWRwYWdlLgorICogaW50byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFn ZS4KICAqLwogc3RhdGljIGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7 CkBAIC02MzksNyArNjEzLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQog CQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlf aGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3Nh dmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7 CiAJCQl9CiAJCQllbHNlCkBAIC02ODYsNyArNjYwLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4 LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9o YXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2 ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJ CXsKQEAgLTcwNSwxMyArNjc5LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4 U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAot X2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9z YXZlaXRlbShCYXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNl dE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJY3Vyckl0ZW0tPmhl YXBUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJ Y3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsJLyogSGFzaCBkb2Vzbid0IHN1cHBvcnQgaW5kZXgt b25seSBzY2FucyAqLwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggZjQxMjMz ZmNkLi5kMDFkM2I3ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1 dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtNTEwLDY3 ICs1MTAsNzQgQEAgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiBy ZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFE IHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJl IGtpbGxlZC4KICAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdo IHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQg a2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAq IGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCisgKiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNv bnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZAorICog dHVwbGVzIHRoZXJlb24gKHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGJhdGNoLT5udW1L aWxsZWQgPiAwKS4KICAqCi0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRo ZSBwYWdlIGFuZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBi dWZmZXIuICBOb3RlIHRoYXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAq IExQX0RFQUQgc3RhdHVzICh3aGljaCBpcyBvbmx5IGEgaGludCkuCisgKiBDYWxsZXIgc2hvdWxk IG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBo b2xkIGEKKyAqIGJ1ZmZlciBwaW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBz dGlsbCB3b24ndCBiZSBsb2NrZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZl ciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIFRoZSBjYWxsZXIg bXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBw aW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQ aW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJl Zm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoK LSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0 aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9j ayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBB IHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBh Z2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBj YW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhl IG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMg b25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxs eQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVk IHR1cGxlLgorICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRo ZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvIHNldAorICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlz IG9uZSB0aGF0IGhvbGRzIGEgYnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKKyAqIGNvbnRp bnVvdXNseSBmcm9tIGluaXRpYWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0 aGlzIGZ1bmN0aW9uCisgKiAoaWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5v dCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQorICogcGFnZSwgc28gdGhlIHBhZ2UncyBU SURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKKyAq IHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNl IGEgcmVjeWNsZWQgVElECisgKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2Ft ZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKKyAqIHBhZ2UpLiAgV2UgY2FuJ3Qg cmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQor ICogKGkuZS4gZHJvcFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0 dGluZyBMUF9ERUFEIGJpdHMgb24KKyAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQg c2luY2UgYmFjayB3aGVuIF9oYXNoX3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KKyAqIFdlIHRvdGFs bHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFu Z2VkLgogICovCiB2b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19o YXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkK IHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87 CiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJ T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28t Pm51bUtpbGxlZDsKKwlpbnQJCQludW1LaWxsZWQgPSBiYXRjaC0+bnVtS2lsbGVkOwogCWludAkJ CWk7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZh bHNlOwogCi0JQXNzZXJ0KHNvLT5udW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0 ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsK KwlBc3NlcnQobnVtS2lsbGVkID4gMCk7CisJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyAhPSBO VUxMKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCi0J LyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9y IHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0g MDsKKwkvKiBBbHdheXMgaW52YWxpZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgZnJl ZWluZyBiYXRjaCAqLworCWJhdGNoLT5udW1LaWxsZWQgPSAwOwogCi0JYmxrbm8gPSBzby0+Y3Vy clBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCisJ aWYgKCFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKQogCXsKIAkJLyoKLQkJICogV2UgYWxyZWFk eSBoYXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAq IGFjcXVpcmUgbG9jayBvbiBpdC4KKwkJICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBw YWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKKwkJICogc28gYWxsIHdlIG5lZWQg dG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHByZXZlbnRlZAorCQkgKiBjb25j dXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdl LgogCQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJ YnVmID0gYmF0Y2gtPmJ1ZjsKIAkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsK IAl9CiAJZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBM SF9PVkVSRkxPV19QQUdFKTsKKwl7CisJCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJCUFzc2Vy dChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBiYXRj aC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZF UkZMT1dfUEFHRSk7CisKKwkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJ CUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJCWlmIChiYXRjaC0+bHNuICE9IGxh dGVzdGxzbikKKwkJeworCQkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQkJ X2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFVubW9kaWZp ZWQsIGhpbnRpbmcgaXMgc2FmZSAqLworCX0KIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7 CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC01NzgsMTMgKzU4NSwxMyBA QCBfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWZvciAoaSA9IDA7IGkg PCBudW1LaWxsZWQ7IGkrKykKIAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVt c1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tp dGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJ CUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsK IAogCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRl eCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3Vy clBvcy5sYXN0SXRlbSk7CisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAm JgorCQkJICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAKIAkJd2hpbGUgKG9mZm51 bSA8PSBtYXhvZmYpCiAJCXsKQEAgLTYxMyw5ICs2MjAsOCBAQCBfaGFzaF9raWxsX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0K IAotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0gc28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhh dmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OworCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbikKKwkJTG9ja0J1ZmZlcihidWYsIEJV RkZFUl9MT0NLX1VOTE9DSyk7CiAJZWxzZQogCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwogfQpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA2YzJjOTQ2OTAuLjM3MTEwZmNlZiAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExODQsOCArMTE4NCw2IEBAIEhhc2hQYWdlU3RhdAog SGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9z RGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFs dWVGdW5jCi0tIAoyLjUxLjAKCg== --00000000000045724e064576f530 Content-Type: application/x-patch; name="v2-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v2-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixm7wig2 RnJvbSBlZTQ2MzEzNGU1MmY1MmRiYzVmZmM3MzJkMzFkNjdhMmRmMTc4N2I5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA5N2Mx MTI0YzEuLjFlZjNlYmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGNlNTJkNmNhOC4uYjRmODExMmJlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTUzOCw2ICsxNTM4LDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTY3MCw3ICsxNzEw LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE2ODks MTEgKzE3MjksNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTc3OSw2ICsxODc0LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTgzNiw5ICsxOTY4LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --00000000000045724e064576f530 Content-Type: application/x-patch; name="v2-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v2-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixm7wi60 RnJvbSA4YjJlMDg4ZDllODcxN2I1MDMyODZhMGU1MjY3ZGVjMTBiZGRlZDdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyNyAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA1ICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArLS0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjQ0ICsr KysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA1 NyArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDUxMiArKysrKysr KysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAg MTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEz MCArLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA2 NDAgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMg ICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2Uu YyAgICAgICB8IDE5OCArKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMg ICAgICAgICAgICB8IDMwNyArKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMgICAgICAgICB8IDUxMSArKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgIDU2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29uc3RyYWludC5jICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwMCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYyAgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYyAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YyAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YyAgICAgICAgICAgICAgfCAgNTcgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgMzEwICsrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9k dW1teV9pbmRleF9hbS5jICAgfCAgIDQgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgNCAtCiA0MyBmaWxlcyBjaGFuZ2VkLCAyMjg5IGluc2VydGlv bnMoKyksIDExODkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmLi5h N2ViMzNjZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9p ZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29s ICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVz ICovCit0eXBlZGVmIEJhdGNoSW5kZXhTY2FuICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwK KwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJh dGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEJhdGNoSW5kZXhTY2FuIGJhdGNo KTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0 Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0 bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRt YXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwog dHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsK IAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFy a3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2Vk IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGlu ZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1w b3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBCYXRjaElu ZGV4U2NhbiBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0g Zm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsK IAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0 dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNo OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkv KiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBj YW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9z X2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0 aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBh bXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaAppbmRleCA5MjAwYTIyYmQuLmYxOTg0ZTcwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTEx NSw2ICsxMTUsNyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0 ZW1Qb2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25z IGFwcGVhciBpbiByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh ICpJbmRleFNjYW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRj aEluZGV4U2NhbjsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7 CiAKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5k ZXhTY2FuRGVzYzsKQEAgLTE3NSw2ICsxNzYsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRf Y2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBp bmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNsb3Qs CiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cyk7CkBAIC0yMDEsMTQgKzIwMywxMiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5f aW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVs YXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNs b3QsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAog CQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5l eHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkJICAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLApAQCAtMjcy LDQgKzI3MiwyNSBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihS ZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2Zp bmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxl X2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNo IHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK3N0 cnVjdCBCYXRjaFF1ZXVlSXRlbVBvczsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX2luaXQoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiBib29sIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBiYXRjaF9mcmVl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK2V4 dGVybiB2b2lkIGluZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFt Z2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBBTXMgKGluIGluZGV4YmF0Y2guYykK KyAqLworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBp bnQgbWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwor CiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDYzMmM0MzMy YS4uZThkMzQ3ZTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMTgsNiArMTE4LDExIEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJQnVmZmVyCQl4c19jYnVmOwkJLyogY3Vy cmVudCBoZWFwIGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8KIAkvKiBOQjogaWYgeHNfY2J1ZiBp cyBub3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLworCisJ QnVmZmVyCQl2bWJ1ZjsJCQkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlUdXBsZVRhYmxl U2xvdCAqaW9zX3RhYmxlc2xvdDsJLyogdHJhbnNpZW50IHNsb3QgZm9yIGZldGNoaW5nIHR1cGxl cyB0bworCQkJCQkJCQkJICogY2hlY2sgdmlzaWJpbGl0eSBkdXJpbmcgaW5kZXgtb25seQorCQkJ CQkJCQkJICogc2NhbnMgKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29k ZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDdh M2VmZDIwOS4uNjU4YzQ2YTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC05MjQsMTEyICs5MjQsNiBA QCB0eXBlZGVmIHN0cnVjdCBCVFZhY3V1bVBvc3RpbmdEYXRhCiAKIHR5cGVkZWYgQlRWYWN1dW1Q b3N0aW5nRGF0YSAqQlRWYWN1dW1Qb3N0aW5nOwogCi0vKgotICogQlRTY2FuT3BhcXVlRGF0YSBp cyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KLSAqIFRo aXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNz X2tleXMoKSBmb3IKLSAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBsb2NhdGlvbgotICogb2YgdGhlIHNjYW4sIGFuZCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgbWFya2VkIGxvY2F0aW9uLCBpZiBhbnkuICAoV2UgdXNlCi0gKiBCVFNj YW5Qb3NEYXRhIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBuZWVkZWQgZm9yIGVhY2ggb2YgY3VycmVu dCBhbmQgbWFya2VkCi0gKiBsb2NhdGlvbnMuKQlJbiBhZGRpdGlvbiB3ZSBjYW4gcmVtZW1iZXIg c29tZSBrbm93bi1raWxsZWQgaW5kZXggZW50cmllcwotICogdGhhdCBtdXN0IGJlIG1hcmtlZCBi ZWZvcmUgd2UgY2FuIG1vdmUgb2ZmIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogSW5kZXggc2Nh bnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lOiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwg aWRlbnRpZnkKLSAqIGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UgYW5kIHNhdmUg dGhlbSBpbiBCVFNjYW5Qb3NEYXRhLCB0aGVuCi0gKiByZWxlYXNlIHRoZSByZWFkLWxvY2sgd2hp bGUgcmV0dXJuaW5nIHRoZSBpdGVtcyB0byB0aGUgY2FsbGVyIGZvcgotICogcHJvY2Vzc2luZy4g IFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrIHRyYWZmaWMuICBXZSBtdXN0IGFs d2F5cwotICogZHJvcCB0aGUgbG9jayB0byBtYWtlIGl0IG9rYXkgZm9yIGNhbGxlciB0byBwcm9j ZXNzIHRoZSByZXR1cm5lZCBpdGVtcy4KLSAqIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBhbHNvIHJl bGVhc2UgdGhlIHBpbiBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCB2YXJ5LgotICogV2UgZHJvcCB0 aGUgcGluICh3aGVuIHNvLT5kcm9wUGluKSB0byBhdm9pZCBibG9ja2luZyBwcm9ncmVzcyBieSBW QUNVVU0KLSAqIChzZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgc2FmZSkuCi0gKiBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluIG9uIHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlCi0gKiBtb3Zpbmcg b24gdG8gaXRzIHNpYmxpbmcgcGFnZS4KLSAqCi0gKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgt b25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAotICogbWF0 Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJ bmRleFR1cGxlcyBnbwotICogaW50byBhIHNlcGFyYXRlIHdvcmtzcGFjZSBhcnJheTsgZWFjaCBC VFNjYW5Qb3NJdGVtIHN0b3JlcyBpdHMgdHVwbGUncwotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFy cmF5LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAotICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0Ci0gKiB0dXBsZS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJ dGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2lu dGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZz ZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFn ZSAqLwotCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQg aW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KLX0gQlRTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBzdHJ1 Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52 YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2 ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQ YWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIg cHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyog Y3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlv biBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2Fu RGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4g dGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4 dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdo ZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0 byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5Lgot CSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhl IGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVh c2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFy dCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVk IGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIu Ci0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3Qg cmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdl XTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2Fu UG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3Mp IFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBh Z2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJ c1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBv cykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxl ICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0 TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2Nh bnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCi0KIC8q IFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJS QVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiB7CkBAIC0xMDUw LDYgKzk0NCwzMCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhp Z2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlL ZXlJbmZvOwogCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBz dGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJv Y2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFp bHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBj dXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nh biB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZQorICogYW5k IF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJhY2sgYW55 dGhpbmcgYWJvdXQgdGhlCisgKiBjdXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhpcyBvcGFxdWUg c3RydWN0LiAgVGhhdCBpcyB0cmFja2VkIGV4dGVybmFsbHksCisgKiBieSBpbXBsZW1lbnRpbmcg YSBxdWV1ZSBvZiAiYmF0Y2hlcyIsIHdoZXJlIGVhY2ggYmF0Y2ggcmVwcmVzZW50cyB0aGUgaXRl bXMKKyAqIHJldHVybmVkIGJ5IGJ0Z2V0YmF0Y2ggd2l0aGluIGEgc2luZ2xlIGxlYWYgcGFnZS4K KyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5 IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBh Z2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCBy ZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0 aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0X25leHQgaXMg cGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hpY2gKKyAqIHBh Z2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQgYXMg YW4gYXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAqCisgKiBJZiB3 ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhU dXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBU SUQgYW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJhdGNoIGNvbnRy YWN0LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAorICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJ LyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA2NiwzMiArOTg0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJy YXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFy cmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3Ig cmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAv KiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yg a2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRs eSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZv cmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3Bh Y2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxl IHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUg c3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9u IGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1 c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRl bUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFy ayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmss IGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICov Ci0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQg Ki8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlC VFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNj YW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNj YW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsK QEAgLTExNjAsMTQgKzEwNTIsMTYgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4g U2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQp OwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVs cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p OwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG1hcmtiYXRj aCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1 dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMs CiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcx LDggKzExNjUsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHJlYWRwYWdl LmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBh Z2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJ bmRleFNjYW4gbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0 X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRl cm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKIAkJCQkJ CQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEyODcsOCAr MTE4Miw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBh Y2Nlc3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24g cmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFy ZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVy IG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNj YW4gX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9l bmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAv KgpAQCAtMTI5Niw3ICsxMTkyLDcgQEAgZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJl bGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAgKi8KIGV4dGVybiBC VFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7 CiBleHRlcm4gdm9pZCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spOwotZXh0ZXJuIHZvaWQg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2J0X2tpbGxp dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiBC VEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gQlRDeWNs ZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIF9idF9lbmRf dmFjdXVtKFJlbGF0aW9uIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA4N2E4YmUxMDQuLjNh NDE2ZTc2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1 ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCkBAIC0xMjMsOCAr MTI0LDE5MiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0 YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbglyZWw7CisKKwlpbnQJCQluaGVhcGFjY2Vzc2VzOwkv KiBudW1iZXIgb2YgaGVhcCBhY2Nlc3NlcywgZm9yCisJCQkJCQkJCSAqIGluc3RydW1lbnRhdGlv bi9tZXRyaWNzICovCiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBRdWV1ZS13aXNl IGxvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgQmF0Y2hJ bmRleFNjYW4KKyAqIHJldHVybmVkIGJ5IChhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4g YW1nZXRiYXRjaCByb3V0aW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUXVldWVJdGVtUG9z Cit7CisJLyogQmF0Y2hRdWV1ZS5iYXRjaGVzW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRj aEluZGV4U2NhbiAqLworCWludAkJCWJhdGNoOworCisJLyogQmF0Y2hJbmRleFNjYW4uaXRlbXNb XS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRl bTsKK30gQmF0Y2hRdWV1ZUl0ZW1Qb3M7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmF0Y2hfcmVz ZXRfcG9zKEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisJcG9zLT5iYXRjaCA9IC0xOworCXBv cy0+aXRlbSA9IC0xOworfQorCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdl dGJhdGNoIChpbiByZXR1cm5lZCBCYXRjaEluZGV4U2NhbikgZHVyaW5nIGFuCisgKiBpbmRleCBz Y2FuLiAgVXNlZCBieSB0YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUg dHVwbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLworCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNl dCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAq IERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRv KSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hJbmRleFNjYW5EYXRhCit7CisJLyoKKwkgKiBJbmZvcm1hdGlvbiBvdXRwdXQgYnkgYW1n ZXRiYXRjaCBpbmRleCBBTXMgdXBvbiByZXR1cm5pbmcgYSBiYXRjaCB3aXRoCisJICogb25lIG9y IG1vcmUgbWF0Y2hpbmcgaXRlbXMsIGRlc2NyaWJpbmcgZGV0YWlscyBvZiB0aGUgaW5kZXggcGFn ZSB3aGVyZQorCSAqIG1hdGNoZXMgd2VyZSBsb2NhdGVkLgorCSAqCisJICogVXNlZCBpbiB0aGUg bmV4dCBhbWdldGJhdGNoIGNhbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVh ZAorCSAqIG5leHQgKG9yIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIG5vIGZ1cnRoZXIgbWF0Y2hl cyBpbiBjdXJyZW50IHNjYW4KKwkgKiBkaXJlY3Rpb24pLgorCSAqLworCUJsb2NrTnVtYmVyIGN1 cnJQYWdlOwkJLyogSW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1i ZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLworCUJsb2NrTnVtYmVyIG5l eHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCisKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICovCisJWExvZ1JlY1B0cgls c247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gZHJvcFBpbikgKi8KKworCS8qIHNjYW4gZGly ZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRp cjsKKworCS8qCisJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRo aW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZworCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQg YW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseQorCSAqLworCWJvb2wJ CW1vcmVMZWZ0OworCWJvb2wJCW1vcmVSaWdodDsKKworCS8qCisJICogVGhlIGl0ZW1zIGFycmF5 IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZworCSAqIGlu ZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8g ZmlsbCB0aGUKKwkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFz dCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KKwkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICovCisJaW50 CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJ CWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KKwlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4K KwkgKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0 aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMg KHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICogaXMgb2Ygc2l6ZSBCTENL U1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZgorCSAq IHR1cGxlcy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBm b3IgaXRlbXNbXSAqLworCWludAkJCW1heGl0ZW1zOwkJLyogYWxsb2NhdGVkIHNpemUgb2YgaXRl bXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 Cit9IEJhdGNoSW5kZXhTY2FuRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5E YXRhICpCYXRjaEluZGV4U2NhbjsKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMg KGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQorICogbWluaW11 bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3 aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRF WF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pIFwKKwkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0 Y2ggLSAoc2NhbiktPmJhdGNocXVldWUtPmhlYWRCYXRjaCkKKworLyogRGlkIHdlIGFscmVhZHkg bG9hZCBiYXRjaCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5kZXg/ICovCisjZGVmaW5lIElOREVYX1ND QU5fQkFUQ0hfTE9BREVEKHNjYW4sIGlkeCkgXAorCSgoaWR4KSA8IChzY2FuKS0+YmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoKQorCisvKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2Yg YmF0Y2hlcz8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pIFwKKwkoSU5E RVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKQorCisv KiBSZXR1cm4gYmF0Y2ggZm9yIHRoZSBwcm92aWRlZCBpbmRleC4gKi8KKyNkZWZpbmUgSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hxdWV1ZS0+YmF0Y2hlc1so aWR4KSAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNdKQorCisvKiBJcyB0aGUgcG9zaXRpb24gaW52 YWxpZC91bmRlZmluZWQ/ICovCisjZGVmaW5lIElOREVYX1NDQU5fUE9TX0lOVkFMSUQocG9zKSBc CisJCSgoKHBvcyktPmJhdGNoID09IC0xKSAmJiAoKHBvcyktPml0ZW0gPT0gLTEpKQorCisjaWZk ZWYgSU5ERVhBTV9ERUJVRworI2RlZmluZSBERUJVR19MT0coLi4uKSBlbG9nKEFtUmVndWxhckJh Y2tlbmRQcm9jZXNzKCkgPyBOT1RJQ0UgOiBERUJVRzIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNk ZWZpbmUgREVCVUdfTE9HKC4uLikKKyNlbmRpZgorCisvKgorICogU3RhdGUgdXNlZCBieSB0YWJs ZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNoCisg KiBpbnRlcmZhY2UuICBTY2FucyB3b3JrIHdpdGggYSBxdWV1ZSBvZiBiYXRjaGVzIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisgKgorICogQmF0Y2hlcyBhcmUga2VwdCBpbiB0aGUgb3JkZXIgdGhh dCB0aGV5IHdlcmUgcmV0dXJuZWQgaW4gYnkgYW1nZXRiYXRjaCwKKyAqIHNpbmNlIHRoYXQgaXMg dGhlIHNhbWUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCByZXR1cm4K KyAqIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJsZSBBTXMgYXJlIGZyZWUgdG8gZmV0Y2ggdGFi bGUgdHVwbGVzIGluIHdoYXRldmVyCisgKiBvcmRlciBpcyBtb3N0IGNvbnZlbmllbnQvZWZmaWNp ZW50IC0tIHByb3ZpZGVkIHRoYXQgc3VjaCByZW9yZGVyaW5nIGNhbm5vdAorICogYWZmZWN0IHRo ZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlciByZXR1cm5zIHR1cGxl cyBpbi4KKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgdGFibGUgQU1z IHdpdGggYSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlv biBieSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAq IHRoZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBz ZWUgaW50byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8g cmVvcmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogRm9yIGV4YW1wbGUs IGluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRvIHJlYWRhaGVhZCBieSBhcyBtYW55IGFzIGEg ZmV3CisgKiBkb3plbiBhbWdldGJhdGNoIGJhdGNoZXMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4g b3B0aW1hbCBJL08gcHJlZmV0Y2gKKyAqIGRpc3RhbmNlIChkaXN0YW5jZSBmb3IgcmVhZGluZyB0 YWJsZSBibG9ja3MvZmV0Y2hpbmcgdGFibGUgdHVwbGVzKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hRdWV1ZQoreworCS8qIGFtZ2V0YmF0Y2ggY2FuIHNhZmVseSBkcm9wIHBpbnMgb24gcmV0 dXJuZWQgYmF0Y2gncyBpbmRleCBwYWdlPyAqLworCWJvb2wJCWRyb3BQaW47CisKKwkvKgorCSAq IERpZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPyBUaGUg YmF0Y2hlcyBtYXkgYmUKKwkgKiBsb2FkZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGFuZCB3ZSBu ZWVkIHRvIHJlbWVtYmVyIHdoZW4gd2UgZmFpbCB0bworCSAqIGxvYWQgdGhlIG5leHQgYmF0Y2gg aW4gYSBnaXZlbiBzY2FuICh3aGljaCBtZWFucyAibm8gbW9yZSBiYXRjaGVzIikuCisJICogYW1n ZXRiYXRjaCBtYXkgcmVzdGFydCB0aGUgc2NhbiBvbiB0aGUgZ2V0IGNhbGwsIHNvIHdlIG5lZWQg dG8gcmVtZW1iZXIKKwkgKiBpdCdzIG92ZXIuCisJICovCisJYm9vbAkJZmluaXNoZWQ7CisKKwkv KiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hl cyAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCisJLyogY3VycmVudCBwb3NpdGlvbnMg aW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyog cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVz dG9yZSBwb3NpdGlvbiAqLworCisJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoOworCisJLyoKKwkg KiBBcnJheSBvZiBiYXRjaGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhlIGFycmF5IGhhcyBhIGNh cGFjaXR5IChidXQgY2FuCisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQpLiBUaGUgaGVhZEJhdGNo IGlzIGFuIGluZGV4IG9mIHRoZSBiYXRjaCB3ZSdyZQorCSAqIGN1cnJlbnRseSByZWFkaW5nIGZy b20gKHRoaXMgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCBieSBtb2R1bG8KKwkgKiBJTkRFWF9TQ0FO X01BWF9CQVRDSEVTIGludG8gaW5kZXggaW4gdGhlIGJhdGNoZXMgYXJyYXkpLgorCSAqLworCWlu dAkJCWhlYWRCYXRjaDsJCS8qIGhlYWQgYmF0Y2ggc2xvdCAqLworCWludAkJCW5leHRCYXRjaDsJ CS8qIG5leHQgZW1wdHkgYmF0Y2ggc2xvdCAqLworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8g Y2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGNhY2hlW0lOREVY X1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBxdWV1ZWQg YmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hF U107CisKK30gQmF0Y2hRdWV1ZTsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsK IAogLyoKQEAgLTE0MCw2ICszMjUsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCXN0cnVjdCBTbmFwc2hvdERhdGEgKnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBzZWUg Ki8KIAlpbnQJCQludW1iZXJPZktleXM7CS8qIG51bWJlciBvZiBpbmRleCBxdWFsaWZpZXIgY29u ZGl0aW9ucyAqLwogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmlu ZyBvcGVyYXRvcnMgKi8KKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlOwkJLyogYW1nZXRiYXRjaCBy ZWxhdGVkIHN0YXRlICovCisKIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5 IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAq b3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCiAJYm9v bAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCkBAIC0y MTYsNCArNDAzLDYxIEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0JCQlTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBDaGVj ayB0aGF0IGEgcG9zaXRpb24gKGJhdGNoLGl0ZW0pIGlzIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0 aGUgYmF0Y2hlcyB3ZQorICogaGF2ZSBjdXJyZW50bHkgbG9hZGVkLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9wb3NfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4s IEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogbWFrZSBz dXJlIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBmb3IgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICov CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPj0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKwlBc3NlcnQo cG9zLT5iYXRjaCA8IGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisjZW5kaWYKK30KKworLyoKKyAq IENoZWNrIGEgc2luZ2xlIGJhdGNoIGlzIHZhbGlkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2JhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgQmF0Y2hJ bmRleFNjYW4gYmF0Y2gpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNo aW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0 ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJQXNzZXJ0 KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBraWxsZWQg aXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5kIHRoZXJlIG11c3QgYmUgYW4gYXJyYXkgb2YKKwkgKiBp bmRleGVzIGlmIHRoZXJlIGFyZSBpdGVtcy4KKwkgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxl ZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRjaC0+bnVtS2lsbGVkID4gMCAmJiBiYXRjaC0+a2lsbGVk SXRlbXMgPT0gTlVMTCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9i YXRjaGVzX3ZhbGlkKEluZGV4U2NhbkRlc2NEYXRhICAqc2NhbikKK3sKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7 CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBiYXRjaGVzIGluaXRpYWxpemVkICovCisJQXNzZXJ0KGJh dGNocXVldWUgIT0gTlVMTCk7CisKKwkvKiBUaGUgaGVhZC9uZXh0IGluZGV4ZXMgc2hvdWxkIGRl ZmluZSBhIHZhbGlkIHJhbmdlICovCisJQXNzZXJ0KGJhdGNocXVldWUtPmhlYWRCYXRjaCA+PSAw ICYmCisJCSAgIGJhdGNocXVldWUtPmhlYWRCYXRjaCA8PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gp OworCisJLyogQ2hlY2sgYWxsIGN1cnJlbnQgYmF0Y2hlcyAqLworCWZvciAoaW50IGkgPSBiYXRj aHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJ CUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBpKTsKKworCQli YXRjaF9hc3NlcnRfYmF0Y2hfdmFsaWQoc2NhbiwgYmF0Y2gpOworCX0KKyNlbmRpZgorfQorCiAj ZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAyZmE3OTBi NmIuLjNlOThkODUzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00MjAsNyArNDIwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKgogCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXgg c2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KIAkgKi8KLQlz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0aW9u IHJlbCk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4p IChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxl c2xvdCk7CiAKIAkvKgogCSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2gKQEAgLTQzMywxMSArNDM0LDM0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBu ZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQor CSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBm b3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93 cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICog aW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBs eSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0g dGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9y bWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUg c2xvdC4gVGhpcyBlbmFibGVzIGltcG9ydGFudCBvcHRpbWl6YXRpb25zIChzdWNoIGFzIHRhYmxl IGJsb2NrIEkvTworCSAqIHByZWZldGNoaW5nKSB0aGF0IHJlcXVpcmUgdGhhdCB0aGUgdGFibGUg QU0gZGlyZWN0bHkgbWFuYWdlcyB0aGUKKwkgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nhbi4K KwkgKgorCSAqIFRhYmxlIEFNcyB0aGF0IGltcGxlbWVudCB0aGlzIGFyZSBleHBlY3RlZCB0byB1 c2UgYmF0Y2hfZ2V0bmV4dCAoYW5kCisJICogb3RoZXIgYmF0Y2ggdXRpbGl0eSByb3V0aW5lcykg dG8gcGVyZm9ybSBhbWdldGJhdGNoIGluZGV4IHNjYW5zLgorCSAqLworCWJvb2wJCSgqaW5kZXhf Z2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkv KgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZp c2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdh cyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUs IGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFj ayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBm YXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5ldmVyIHBvc3NpYmxlLgor CSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5k ZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0 dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlz IHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBA IC00NTksNyArNDgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJv b2wgKmFsbF9kZWFkKTsKIAotCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogQ2FsbGJhY2tzIGZv ciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKIAkgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTExNTksMTQgKzExODIsMTUgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKIAog LyoKICAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVk ZWQgd2hlbiBmZXRjaGluZyB0dXBsZXMKLSAqIGZvciBhbiBpbmRleCBzY2FuLgorICogZm9yIGFu IGluZGV4IHNjYW4uICBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyBtdXN0IHByb3ZpZGUgaW9zX3Rh Ymxlc2xvdCwKKyAqIHdoaWNoIGlzIGEgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBm cm9tIHRoZSB0YWJsZS4KICAqCiAgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKS4KICAqLwogc3RhdGljIGlu bGluZSBJbmRleEZldGNoVGFibGVEYXRhICoKLXRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0 aW9uIHJlbCkKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKmlvc190YWJsZXNsb3QpCiB7Ci0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhf ZmV0Y2hfYmVnaW4ocmVsKTsKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9i ZWdpbihyZWwsIGlvc190YWJsZXNsb3QpOwogfQogCiAvKgpAQCAtMTE4OCw2ICsxMjEyLDI2IEBA IHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoK KyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwg c2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYg YSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2Nh biBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCku CisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2Fu IGtleXMgaWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgbXVzdCBw YXNzIGFuIGluZGV4IHNjYW4gZGVzY3JpcHRvciB0aGF0IHdhcyBjcmVhdGVkCisgKiBieSBwYXNz aW5nIGEgdmFsaWQgaW9zX3RhYmxlc2xvdCB0byBpbmRleF9iZWdpbnNjYW4uICBUaGlzIGlvc190 YWJsZXNsb3QKKyAqIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGFibGVfaW5kZXhfZmV0Y2hfYmVn aW4gYnkgaW5kZXhfYmVnaW5zY2FuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlkeHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNfaGVhcGZldGNoOworCisJcmV0dXJuIHNj YW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlv biwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4s IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5 IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBw YXNzZWQKQEAgLTEyMTEsNiArMTI1NSw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBX aGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVz IHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFi bGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMg d2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRl cmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91 bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIg cG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDY0ZmY2OTk2NC4uYjYwNjRiYjNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc1MSw3 ICsxNzUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50 CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAg IHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlU YWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFi bGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVz dGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25s eSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1l IHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3Vu dCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBA IC0xNzc0LDcgKzE3NzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90ICppb3Nz X1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2Nhbkxl bjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05h bWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQ2YTg2NTU2Mi4uMTE4MDVi ZmY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFj ZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8q IGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVk IGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyog QU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBo ZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IGNiMzMzMTkyMS4uZDU0Yzc4MmNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CkBAIC0yOTQsMTAgKzI5NCwxMSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNj YW4gPSBicmlucmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFt ZW5kc2NhbiA9IGJyaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlh bXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVz Y2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IDBkNDEwOGQwNS4uNzRlZTg5 MDMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhl IG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmlu ZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJl LXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBv ZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBz dXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBu b3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0 LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBl bnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxl IG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNj YW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29u Y3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHku CiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCmluZGV4IDc4ZjdiN2EyNC4uOWI1NWFiMjMwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuOwogCWFtcm91dGlu ZS0+YW1yZXNjYW4gPSBnaW5yZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2gg PSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXA7CiAJYW1yb3V0 aW5lLT5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFs bGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCAzZmIxYTEyODUuLjBl MGJjYzAzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTEgQEAgZ2lz dGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2lz dGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lzdHJlc2NhbjsKIAlhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0 Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdpc3RlbmRz Y2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJw b3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5h bWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVs c2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwppbmRleCA1MzA2MWM4MTkuLmI0YjQ2MDcyNCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUt PmFtcmVzY2FuID0gaGFzaHJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBoYXNoZ2V0 dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJl ZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsK IAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJr cG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IGJjYmFjODQ0Yi4uZWM3NTI3YWVkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTcyLDYgKzcyLDMzIEBAIGhlYXBhbV9zbG90X2Nh bGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKIAlyZXR1cm4gJlRUU09wc0J1ZmZlckhlYXBUdXBs ZTsKIH0KIAorc3RhdGljIHZvaWQKK1N0b3JlSW5kZXhUdXBsZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVzYyBpdHVwZGVzYykKK3sKKwkvKgorCSAq IE5vdGU6IHdlIG11c3QgdXNlIHRoZSB0dXBkZXNjIHN1cHBsaWVkIGJ5IHRoZSBBTSBpbiBpbmRl eF9kZWZvcm1fdHVwbGUsCisJICogbm90IHRoZSBzbG90J3MgdHVwZGVzYywgaW4gY2FzZSB0aGUg bGF0dGVyIGhhcyBkaWZmZXJlbnQgZGF0YXR5cGVzCisJICogKHRoaXMgaGFwcGVucyBmb3IgYnRy ZWUgbmFtZV9vcHMgaW4gcGFydGljdWxhcikuICBUaGV5J2QgYmV0dGVyIGhhdmUKKwkgKiB0aGUg c2FtZSBudW1iZXIgb2YgY29sdW1ucyB0aG91Z2gsIGFzIHdlbGwgYXMgYmVpbmcgZGF0YXR5cGUt Y29tcGF0aWJsZQorCSAqIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBjYW4ndCBzbyBlYXNpbHkgY2hl Y2suCisJICovCisJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09IGl0 dXBkZXNjLT5uYXR0cyk7CisKKwlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwlpbmRleF9kZWZvcm1f dHVwbGUoaXR1cCwgaXR1cGRlc2MsIHNsb3QtPnR0c192YWx1ZXMsIHNsb3QtPnR0c19pc251bGwp OworCisJLyoKKwkgKiBDb3B5IGFsbCBuYW1lIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIGJh Y2sgaW50byBhIE5BTUVEQVRBTEVOIGJ5dGUKKwkgKiBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFy ayB0aGlzIGJyYW5jaCBhcyB1bmxpa2VseSBhcyBnZW5lcmFsbHkgIm5hbWUiCisJICogaXMgdXNl ZCBvbmx5IGZvciB0aGUgc3lzdGVtIGNhdGFsb2dzIGFuZCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUg YSB1c2VyCisJICogcXVlcnkgcnVubmluZyBvbiB0aG9zZSBvciBzb21lIG90aGVyIHVzZXIgdGFi bGUgd2l0aCBhbiBpbmRleCBvbiBhIG5hbWUKKwkgKiBjb2x1bW4uCisJICovCisKKwlFeGVjU3Rv cmVWaXJ0dWFsVHVwbGUoc2xvdCk7Cit9CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRl eCBTY2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNzksMTIgKzEwNiwxNyBAQCBoZWFwYW1f c2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiAgKi8KIAogc3RhdGljIEluZGV4RmV0 Y2hUYWJsZURhdGEgKgotaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKK2hl YXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICppb3Nf dGFibGVzbG90KQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwKHNpemVv ZihJbmRleEZldGNoSGVhcERhdGEpKTsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFs bG9jKHNpemVvZihJbmRleEZldGNoSGVhcERhdGEpKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9 IHJlbDsKKwloc2Nhbi0+eHNfYmFzZS5uaGVhcGFjY2Vzc2VzID0gMDsKKworCS8qIGhlYXBhbSBz cGVjaWZpYyBmaWVsZHMgKi8KIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJaHNj YW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+aW9zX3RhYmxlc2xvdCA9IGlvc190 YWJsZXNsb3Q7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQpAQCAtOTQsNiArMTI2LDcg QEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7 CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nh bjsKIAorCS8qIGRlbGliZXJhdGVseSBkb24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwog CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwpAQCAtMTA4LDYgKzE0MSwxMiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hf ZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbik7CiAKKwlpZiAoaHNjYW4tPnZtYnVmICE9IEludmFsaWRCdWZmZXIpCisJeworCQlS ZWxlYXNlQnVmZmVyKGhzY2FuLT52bWJ1Zik7CisJCWhzY2FuLT52bWJ1ZiA9IEludmFsaWRCdWZm ZXI7CisJfQorCiAJcGZyZWUoaHNjYW4pOwogfQogCkBAIC0xNzMsNiArMjEyLDQ2OCBAQCBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJ cmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQogCisvKgorICogaGVhcF9iYXRjaF9hZHZhbmNlX3Bv cworICoJCUFkdmFuY2UgdGhlIHBvc2l0aW9uIHRvIHRoZSBuZXh0IGl0ZW0sIGRlcGVuZGluZyBv biBzY2FuIGRpcmVjdGlvbi4KKyAqCisgKiBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRo ZSBiYXRjaCBwb2ludGVkIHRvIGJ5IGNhbGxlcidzIHBvcy4gIFRoaXMgaXMKKyAqIHVzdWFsbHkg cmVhZFBvcy4gIEFkdmFuY2VzIHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBlaXRoZXIg aW4gdGhlCisgKiBzYW1lIGJhdGNoIG9yIHRoZSBmb2xsb3dpbmcgb25lIChpZiBhbHJlYWR5IGF2 YWlsYWJsZSkuCisgKgorICogV2UgY2FuIGFkdmFuY2Ugb25seSBpZiB3ZSBhbHJlYWR5IGhhdmUg c29tZSBiYXRjaGVzIGxvYWRlZCwgYW5kIHRoZXJlJ3MKKyAqIGVpdGhlciBlbm91Z2ggaXRlbXMg aW4gdGhlIGN1cnJlbnQgYmF0Y2gsIG9yIHNvbWUgbW9yZSBpdGVtcyBpbiB0aGUKKyAqIHN1YnNl cXVlbnQgYmF0Y2hlcy4KKyAqCisgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZHZhbmNlIChyaWdo dCBhZnRlciBsb2FkaW5nIHRoZSBpbml0aWFsL2hlYWQgYmF0Y2gpLAorICogcG9zaXRpb24gaXMg c3RpbGwgdW5kZWZpbmVkLiAgT3RoZXJ3aXNlIHdlIGV4cGVjdCB0aGUgcG9zaXRpb24gdG8gYmUg dmFsaWQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiB3YXMgYWR2YW5jZWQs IGZhbHNlIG90aGVyd2lzZS4gIFRoZSBwb3NpdGlvbgorICogaXMgZ3VhcmFudGVlZCB0byBiZSB2 YWxpZCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBhZHZhbmNlLgorICovCitzdGF0aWMgYm9vbAor aGVhcF9iYXRjaF9hZHZhbmNlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIHN0cnVjdCBCYXRjaFF1 ZXVlSXRlbVBvcyAqcG9zLAorCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlC YXRjaEluZGV4U2NhbiBiYXRjaDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGJhdGNoaW5nIGlu aXRpYWxpemVkIGFuZCBjb25zaXN0ZW50ICovCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQo c2Nhbik7CisKKwkvKiBzaG91bGQga25vdyBkaXJlY3Rpb24gYnkgbm93ICovCisJQXNzZXJ0KGRp cmVjdGlvbiA9PSBzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rpb24pOworCUFzc2VydChkaXJlY3Rp b24gIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyogV2UgY2FuJ3QgYWR2YW5jZSBp ZiB0aGVyZSBhcmUgbm8gYmF0Y2hlcyBhdmFpbGFibGUuICovCisJaWYgKElOREVYX1NDQU5fQkFU Q0hfQ09VTlQoc2NhbikgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGUg cG9zaXRpb24gaGFzIG5vdCBiZWVuIGFkdmFuY2VkIHlldCwgaXQgaGFzIHRvIGJlIHJpZ2h0IGFm dGVyIHdlCisJICogbG9hZGVkIHRoZSBpbml0aWFsIGJhdGNoIChtdXN0IGJlIHRoZSBoZWFkIGJh dGNoKS4gSW4gdGhhdCBjYXNlIGp1c3QKKwkgKiBpbml0aWFsaXplIGl0IHRvIHRoZSBiYXRjaCdz IGZpcnN0IGl0ZW0gKG9yIGl0cyBsYXN0IGl0ZW0sIHdoZW4KKwkgKiBzY2FubmluZyBiYWNrd2Fy ZHMpLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykpCisJeworCQkvKgor CQkgKiBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGhlIHNjYW4ncyBpbml0aWFsIGJhdGNoLCBvciBt YXliZSB3ZSBoYXZlCisJCSAqIGNoYW5nZWQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2NhbiBhZnRl ciBzY2FubmluZyBhbGwgdGhlIHdheSB0byB0aGUKKwkJICogZW5kIChpbiB3aGljaCBjYXNlIHRo ZSBwb3NpdGlvbiBpcyBpbnZhbGlkLCBhbmQgd2UgbWFrZSBpdCBsb29rCisJCSAqIGxpa2UgdGhl cmUgaXMganVzdCBvbmUgYmF0Y2gpLiBXZSBzaG91bGQgaGF2ZSBqdXN0IG9uZSBiYXRjaCwKKwkJ ICogdGhvdWdoLgorCQkgKi8KKwkJQXNzZXJ0KElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2Nhbikg PT0gMSk7CisKKwkJLyoKKwkJICogR2V0IHRoZSBpbml0aWFsIGJhdGNoICh3aGljaCBtdXN0IGJl IHRoZSBoZWFkKSwgYW5kIGluaXRpYWxpemUgdGhlCisJCSAqIHBvc2l0aW9uIHRvIHRoZSBhcHBy b3ByaWF0ZSBpdGVtIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbgorCQkgKi8KKwkJYmF0 Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHNjYW4tPmJhdGNocXVldWUtPmhlYWRCYXRjaCk7 CisKKwkJcG9zLT5iYXRjaCA9IHNjYW4tPmJhdGNocXVldWUtPmhlYWRCYXRjaDsKKworCQlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJcG9zLT5pdGVtID0gYmF0Y2gt PmZpcnN0SXRlbTsKKwkJZWxzZQorCQkJcG9zLT5pdGVtID0gYmF0Y2gtPmxhc3RJdGVtOworCisJ CWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcG9zKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwkvKgorCSAqIFRoZSBwb3NpdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQsIHNvIHdlIHNob3Vs ZCBoYXZlIHNvbWUgYmF0Y2hlcyBsb2FkZWQKKwkgKiBhbmQgdGhlIHBvc2l0aW9uIGhhcyB0byBi ZSB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhvc2UuCisJICovCisJYmF0Y2hfYXNzZXJ0X3Bvc192 YWxpZChzY2FuLCBwb3MpOworCisJLyoKKwkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gaW4g dGhlIHNhbWUgYmF0Y2gsIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zLiBJZgorCSAqIHdlJ3JlIGF0 IHRoZSBsYXN0IGl0ZW0sIHdlJ2xsIHRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgYmF0Y2ggbGF0 ZXIuCisJICovCisJYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHBvcy0+YmF0Y2gpOwor CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bv cy0+aXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pCisJCXsKKwkJCWJhdGNoX2Fzc2VydF9wb3NfdmFs aWQoc2NhbiwgcG9zKTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxzZQkJCQkJCS8q IFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkICovCisJeworCQlpZiAoLS1wb3MtPml0ZW0gPj0gYmF0 Y2gtPmZpcnN0SXRlbSkKKwkJeworCQkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBwb3Mp OworCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCS8qCisJICogV2UgY291bGRuJ3QgYWR2 YW5jZSB3aXRoaW4gdGhlIHNhbWUgYmF0Y2gsIHRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQKKwkg KiBiYXRjaCwgaWYgaXQncyBhbHJlYWR5IGxvYWRlZC4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9C QVRDSF9MT0FERUQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogYWR2YW5jZSB0byB0 aGUgbmV4dCBiYXRjaCAqLworCQlwb3MtPmJhdGNoKys7CisKKwkJYmF0Y2ggPSBJTkRFWF9TQ0FO X0JBVENIKHNjYW4sIHBvcy0+YmF0Y2gpOworCQlBc3NlcnQoYmF0Y2ggIT0gTlVMTCk7CisKKwkJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXBvcy0+aXRlbSA9IGJh dGNoLT5maXJzdEl0ZW07CisJCWVsc2UKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5sYXN0SXRlbTsK KworCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7 CisJfQorCisJLyogY2FuJ3QgYWR2YW5jZSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJ RCBmcm9tIGluZGV4IHNjYW4gYmF0Y2ggcXVldWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxl bWVudHMgaGVhcGFtJ3MgdmVyc2lvbiBvZiBnZXR0aW5nIHRoZSBuZXh0IFRJRCBmcm9tIGFuCisg KiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBJdCBpcyBp bXBsZW1lbnRlZCB1c2luZworICogdmFyaW91cyBpbmRleGJhdGNoLmMgdXRpbGl0eSByb3V0aW5l cy4KKyAqCisgKiBUaGUgcm91dGluZXMgZnJvbSBpbmRleGJhdGNoLmMgYXJlIHN0YXRlbGVzcyAt LSB0aGV5IGp1c3QgaW1wbGVtZW50IGJhdGNoCisgKiBxdWV1ZSBtZWNoYW5pY3MuICBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQgaW1wbGVtZW50cyB0aGUgaGVhcGFtIHBvbGljeTsgaXQKKyAqIGRl Y2lkZXMgd2hlbiB0byBsb2FkL2ZyZWUgYmF0Y2hlcywgYW5kIGNvbnRyb2xzIHNjYW4gZGlyZWN0 aW9uIGNoYW5nZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRl cgoraGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24pCit7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNo cXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3M7CisKKwkvKiBzaG91bGRuJ3QgZ2V0 IGhlcmUgd2l0aG91dCBiYXRjaGluZyAqLworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNj YW4pOworCisJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLworCWlmIChi YXRjaHF1ZXVlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWJhdGNo cXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1bmxpa2VseShiYXRjaHF1 ZXVlLT5kaXJlY3Rpb24gIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qCisJCSAqIEhhbmRsZSBhIGNo YW5nZSBpbiB0aGUgc2NhbidzIGRpcmVjdGlvbi4KKwkJICoKKwkJICogUmVsZWFzZSBmdXR1cmUg YmF0Y2hlcyBwcm9wZXJseSwgdG8gbWFrZSBpdCBsb29rIGxpa2UgdGhlIGN1cnJlbnQKKwkJICog YmF0Y2ggaXMgdGhlIG9ubHkgb25lIHdlIGxvYWRlZC4KKwkJICovCisJCXdoaWxlIChiYXRjaHF1 ZXVlLT5uZXh0QmF0Y2ggPiBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggKyAxKQorCQl7CisJCQkvKiBy ZWxlYXNlICJsYXRlciIgYmF0Y2hlcyBpbiByZXZlcnNlIG9yZGVyICovCisJCQlCYXRjaEluZGV4 U2NhbiBmYmF0Y2g7CisKKwkJCWJhdGNocXVldWUtPm5leHRCYXRjaC0tOworCQkJZmJhdGNoID0g SU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpOworCQkJYmF0Y2hf ZnJlZShzY2FuLCBmYmF0Y2gpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG5ldyBk aXJlY3Rpb24sIGFuZCBtYWtlIHN1cmUgdGhlIHNjYW4gaXMgbm90IG1hcmtlZCBhcworCQkgKiAi ZmluaXNoZWQiICh3ZSBtaWdodCBoYXZlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCBiYXRjaCwgYnV0 IG5vdyB3ZQorCQkgKiBuZWVkIHRvIHN0YXJ0IG92ZXIpLgorCQkgKi8KKwkJYmF0Y2hxdWV1ZS0+ ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9IGZhbHNlOwor CX0KKworCS8qIHNob3J0Y3V0IGZvciB0aGUgcmVhZCBwb3NpdGlvbiwgZm9yIGNvbnZlbmllbmNl ICovCisJcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOworCisJLyoKKwkgKiBUcnkgYWR2 YW5jaW5nIHRoZSBiYXRjaCBwb3NpdGlvbi4gSWYgdGhhdCBkb2Vzbid0IHN1Y2NlZWQsIGl0IG1l YW5zIHdlCisJICogZG9uJ3QgaGF2ZSBtb3JlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGJhdGNoLCBh bmQgdGhlcmUncyBubyBmdXR1cmUgYmF0Y2gKKwkgKiBsb2FkZWQuIFNvIHRyeSBsb2FkaW5nIGFu b3RoZXIgYmF0Y2gsIGFuZCByZXRyeSBpZiBuZWVkZWQuCisJICovCisJd2hpbGUgKHRydWUpCisJ eworCQkvKgorCQkgKiBJZiB3ZSBtYW5hZ2UgdG8gYWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtcywg cmV0dXJuIGl0IGFuZCB3ZSdyZQorCQkgKiBkb25lLiBPdGhlcndpc2UgdHJ5IGxvYWRpbmcgYW5v dGhlciBiYXRjaC4KKwkJICovCisJCWlmIChoZWFwX2JhdGNoX2FkdmFuY2VfcG9zKHNjYW4sIHJl YWRQb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9IElO REVYX1NDQU5fQkFUQ0goc2NhbiwgcmVhZFBvcy0+YmF0Y2gpOworCisJCQkvKiBzZXQgdGhlIFRJ RCAvIGl0dXAgZm9yIHRoZSBzY2FuICovCisJCQlzY2FuLT54c19oZWFwdGlkID0gcmVhZEJhdGNo LT5pdGVtc1tyZWFkUG9zLT5pdGVtXS5oZWFwVGlkOworCisJCQkvKiB4c19oaXR1cCBpcyBub3Qg c3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwkJCUFzc2VydCghc2Nhbi0+eHNfaGl0 dXApOworCisJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJCXNjYW4tPnhzX2l0dXAgPQor CQkJCQkoSW5kZXhUdXBsZSkgKHJlYWRCYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgcmVh ZEJhdGNoLT5pdGVtc1tyZWFkUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkJCS8qCisJCQkg KiBJZiB3ZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBiYXRjaCwgcmVsZWFzZSB0aGUgYmF0Y2ggd2Ug bm8KKwkJCSAqIGxvbmdlciBuZWVkLiBUaGUgcG9zaXRpb25zIGlzIHRoZSAicmVhZCIgcG9zaXRp b24sIGFuZCB3ZSBjYW4KKwkJCSAqIGNvbXBhcmUgaXQgdG8gaGVhZEJhdGNoLgorCQkJICovCisJ CQlpZiAodW5saWtlbHkocmVhZFBvcy0+YmF0Y2ggIT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKSkK KwkJCXsKKwkJCQlCYXRjaEluZGV4U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNj YW4sCisJCQkJCQkJCQkJCQkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJCQkJLyogRnJl ZSB0aGUgaGVhZCBiYXRjaCAoZXhjZXB0IHdoZW4gaXQncyBtYXJrQmF0Y2gpICovCisJCQkJYmF0 Y2hfZnJlZShzY2FuLCBoZWFkQmF0Y2gpOworCisJCQkJLyoKKwkJCQkgKiBJbiBhbnkgY2FzZSwg cmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByZWd1bGFyIHF1ZXVlLCBldmVuCisJCQkJICogaWYg d2Uga2VwdCBpdCBmb3IgbWFyay9yZXN0b3JlLgorCQkJCSAqLworCQkJCWJhdGNocXVldWUtPmhl YWRCYXRjaCsrOworCisJCQkJLyogd2UgY2FuJ3Qgc2tpcCBhbnkgYmF0Y2hlcyAqLworCQkJCUFz c2VydChiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPT0gcmVhZFBvcy0+YmF0Y2gpOworCQkJfQorCisJ CQlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEpOworCQkJ cmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworCQl9CisKKwkJLyoKKwkJICogRmFpbGVkIHRvIGFk dmFuY2UgdGhlIHJlYWQgcG9zaXRpb24uICBIYXZlIGluZGV4YmF0Y2guYyB1dGlsaXR5CisJCSAq IHJvdXRpbmUgbG9hZCBhbm90aGVyIGJhdGNoIGludG8gb3VyIHF1ZXVlIChuZXh0IGluIHRoaXMg ZGlyZWN0aW9uKS4KKwkJICovCisJCWlmICghYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24p KQorCQl7CisJCQkvKiB3ZSdyZSBkb25lIC0tIHRoZXJlJ3Mgbm8gbW9yZSBiYXRjaGVzIGluIHRo aXMgc2NhbiBkaXJlY3Rpb24gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3 ZSBnZXQgaGVyZSwgd2UgZmFpbGVkIHRvIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGFuZCB0aGVyZSBh cmUgbm8gbW9yZQorCSAqIGJhdGNoZXMgdG8gYmUgbG9hZGVkIGluIHRoZSBjdXJyZW50IHNjYW4g ZGlyZWN0aW9uLiAgRGVmZW5zaXZlbHkgcmVzZXQKKwkgKiB0aGUgcmVhZCBwb3NpdGlvbi4KKwkg Ki8KKwliYXRjaF9yZXNldF9wb3MocmVhZFBvcyk7CisJQXNzZXJ0KHNjYW4tPmJhdGNocXVldWUt PmZpbmlzaGVkKTsKKworCXJldHVybiBOVUxMOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisg KgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQorICoK KyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRo ZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNj YW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4 aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UK KyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBp dCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0 byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBo ZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJl LgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgYm9vbAoraW5kZXhfZmV0Y2hfaGVh cChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCWFs bF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJ CQkJIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwX2Nv bnRpbnVlLCAmYWxsX2RlYWQpOworCisJaWYgKGZvdW5kKQorCQlwZ3N0YXRfY291bnRfaGVhcF9m ZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKKworCS8qCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdo b2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAorCSAq IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0 IGluIHRoZSBuZXh0CisJICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCku ICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCisJICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkg dmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCisJICogUmVsYXRpb25HZXRJ bmRleFNjYW4oKS4KKwkgKgorCSAqIFhYWCBGb3Igc2NhbnMgdXNpbmcgYmF0Y2hpbmcsIHJlY29y ZCB0aGUgZmxhZyBpbiB0aGUgYmF0Y2ggKHdlIHdpbGwKKwkgKiBwYXNzIGl0IHRvIHRoZSBBTSBs YXRlciwgd2hlbiBmcmVlaW5nIGl0KS4gT3RoZXJ3aXNlIGp1c3QgcGFzcyBpdCB0bworCSAqIHRo ZSBBTSB1c2luZyB0aGUga2lsbF9wcmlvcl90dXBsZSBmaWVsZC4KKwkgKi8KKwlpZiAoIXNjYW4t PnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwl7CisJCWlmIChzY2FuLT5iYXRjaHF1ZXVlID09IE5V TEwpCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCWVsc2UgaWYgKGFs bF9kZWFkKQorCQkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVtKHNjYW4pOworCX0KKworCXJldHVybiBm b3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9pbmRleF9nZXRuZXh0 X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCisgKiBUaGUgcmVzdWx0 IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFw c2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVk IGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxp a2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKKyAqIGRy b3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwgdG8gaW5kZXhf ZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVj aywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNjYW4ga2V5cyBpZiByZXF1aXJl ZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCisgKiBlbm91 Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2hlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUl0ZW1Qb2lu dGVyIHRpZCA9IE5VTEw7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCFzY2FuLT54c19oZWFwX2Nv bnRpbnVlKQorCQl7CisJCQkvKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXRiYXRjaCBp bmRleCBBTSBhcmUgbWFuYWdlZCBieSBoZWFwYW0ncworCQkJICogaW5kZXggc2NhbiBtYW5hZ2Vy LiAgVGhpcyBnaXZlcyBoZWFwYW0gdGhlIGFiaWxpdHkgdG8gcmVhZCBoZWFwCisJCQkgKiB0dXBs ZXMgaW4gYSBmbGV4aWJsZSBvcmRlciB0aGF0IGlzIGF0dHVuZWQgdG8gYm90aCBjb3N0cyBhbmQK KwkJCSAqIGJlbmVmaXRzIG9uIHRoZSBoZWFwYW0gYW5kIHRhYmxlIEFNIHNpZGUuCisJCQkgKgor CQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXR0dXBsZSBpbmRleCBBTSBzaW1wbHkgY2FsbCB0 aHJvdWdoIHRvCisJCQkgKiBpbmRleF9nZXRuZXh0X3RpZCB0byBnZXQgdGhlIG5leHQgVElEIHJl dHVybmVkIGJ5IGluZGV4IEFNLiBUaGUKKwkJCSAqIHByb2dyZXNzIG9mIHRoZSBzY2FuIHdpbGwg YmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgaW5kZXggQU0gKHdlCisJCQkgKiBqdXN0IHBhc3MgaXQg dGhyb3VnaCBhIGRpcmVjdGlvbiB0byBnZXQgdGhlIG5leHQgdHVwbGUgaW4pLCBzbworCQkJICog d2UgY2Fubm90IHJlb3JkZXIgYW55IHdvcmsuCisJCQkgKi8KKwkJCWlmIChzY2FuLT5iYXRjaHF1 ZXVlICE9IE5VTEwpCisJCQkJdGlkID0gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKHNjYW4sIGRp cmVjdGlvbik7CisJCQllbHNlCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGly ZWN0aW9uKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRv bmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAq IEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5k ZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFu ZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAqIHRoZSBpbmRleC4KKwkJICovCisJCUFzc2Vy dChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwkJaWYgKCFzY2FuLT54 c193YW50X2l0dXApCisJCXsKKwkJCS8qIFBsYWluIGluZGV4IHNjYW4gKi8KKwkJCWlmIChpbmRl eF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UK KwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkJCSAqCisJCQkgKiBXZSBjYW4g c2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24K KwkJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAg SW4gYW55IGNhc2UsCisJCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVh cCB0dXBsZSBhcyB0aGUgZGF0YQorCQkJICogc291cmNlLgorCQkJICoKKwkJCSAqIE5vdGUgb24g TWVtb3J5IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzCisJ CQkgKiBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRo ZSByZXN1bHQgd2UKKwkJCSAqIHJlYWQgaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhv d2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlCisJCQkgKiBlbm91Z2ggdG8gbWF0dGVyLgorCQkJICoK KwkJCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNl cnQgcmlnaHQKKwkJCSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhl IGluZGV4IHBhZ2UgYnV0IG5vdAorCQkJICogdmlzaWJsZS4gVGhlIHJlYWRpbmcgb2YgdGhlIFRJ RCBieSB0aGlzIHNjYW4gKHVzaW5nIGEgc2hhcmVkCisJCQkgKiBsb2NrIG9uIHRoZSBpbmRleCBi dWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZQorCQkJICogVElEIGlu dG8gdGhlIGluZGV4ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXgKKwkJCSAq IGJ1ZmZlcikuIEJlY2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0 aGUKKwkJCSAqIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2Ug YWN0cyBhcyBhIGZ1bGwKKwkJCSAqIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUg dGhlIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhCisJCQkgKiByZWNlbnRseS1pbnNlcnRlZCBUSUQu CisJCQkgKgorCQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5 IFZBQ1VVTSB3aWxsIGNsZWFyCisJCQkgKiBvdXQgdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBv ZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdAorCQkJICogc2VyaWFsaXplZCB3aXRoIHRo aXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCisJCQkgKiBzaWdu aWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWxldGUK KwkJCSAqIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50 aWwgdGhlCisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1l bnQgZW5kcyAoaWYgaXQncyBvdXIKKwkJCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0aGVyIGNhc2Us IHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbAorCQkJICogaGF2ZSBiZWVuIHJlbGVhc2Vk IChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZworCQkJICogdGhlIGJp dC4gQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUKKwkJCSAq IGRlbGV0aW5nIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11 c3QgaGF2ZQorCQkJICogYWNxdWlyZWQgUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFj dGluZyBhcyBhIHJlYWQKKwkJCSAqIGJhcnJpZXIuCisJCQkgKgorCQkJICogSXQncyB3b3J0aCBn b2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5nIHRvCisJCQkgKiBs b2NrIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRp b24uCisJCQkgKi8KKwkJCWlmICghVk1fQUxMX1ZJU0lCTEUoaHNjYW4tPnhzX2Jhc2UucmVsLAor CQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSZoc2Nhbi0+ dm1idWYpKQorCQkJeworCQkJCS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUg aGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgorCQkJCSAqLworCQkJCWhzY2FuLT54c19iYXNlLm5o ZWFwYWNjZXNzZXMrKzsKKwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbiwgaHNjYW4tPmlv c190YWJsZXNsb3QpKQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5l eHQgaW5kZXggZW50cnkgKi8KKworCQkJCS8qCisJCQkJICogc2VsZnVuY3MuYyBjYWxsZXIgdXNl cyBTbmFwc2hvdE5vblZhY3V1bWFibGUuICBKdXN0IGFzc3VtZQorCQkJCSAqIHRoYXQgaXQncyBn b29kIGVub3VnaCB0aGF0IGFueSBvbmUgdHVwbGUgZnJvbSBIT1QgY2hhaW4gaXMKKwkJCQkgKiB2 aXNpYmxlIGZvciBzdWNoIGEgY2FsbGVyCisJCQkJICovCisJCQkJaWYgKHVubGlrZWx5KCFJc01W Q0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKworCQkJ CUV4ZWNDbGVhclR1cGxlKGhzY2FuLT5pb3NfdGFibGVzbG90KTsKKworCQkJCS8qCisJCQkJICog T25seSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBi ZQorCQkJCSAqIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEg dmlzaWJsZQorCQkJCSAqIGVudHJ5IGhhcyBiZWVuIGZvdW5kLgorCQkJCSAqLworCQkJCWlmIChz Y2FuLT54c19oZWFwX2NvbnRpbnVlKQorCQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNo b3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKKworCQkJCS8qCisJ CQkJICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVh cCBwYWdlLAorCQkJCSAqIGFzIHJlY29yZGVkIGluIEluZGV4RmV0Y2hIZWFwRGF0YS54c19jYnVm LiAgV2UgY291bGQKKwkJCQkgKiByZWxlYXNlIHRoYXQgcGluIG5vdywgYnV0IHdlIHByZWZlciB0 byBob2xkIG9uIHRvIFZNIHBpbnMuCisJCQkJICogaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHRo ZSBpbmRleCBlbnRyeSB3aWxsIHJlcXVpcmUgYQorCQkJCSAqIHZpc2l0IHRvIHRoZSBzYW1lIGhl YXAgcGFnZS4gIEl0J3MgZXZlbiBtb3JlIGxpa2VseSB0aGF0CisJCQkJICogdGhlIGluZGV4IGVu dHJ5IHdpbGwgZm9yY2UgdXMgdG8gcGVyZm9ybSBhIGxvb2t1cCB0aGF0IHVzZXMKKwkJCQkgKiB0 aGUgc2FtZSBhbHJlYWR5LXBpbm5lZCBWTSBwYWdlLgorCQkJCSAqLworCQkJCWlmIChzY2FuLT54 c19pdHVwKQorCQkJCQlTdG9yZUluZGV4VHVwbGUoc2xvdCwgc2Nhbi0+eHNfaXR1cCwgc2Nhbi0+ eHNfaXR1cGRlc2MpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlk bid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2UnbGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVk aWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJ ICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJCSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKGhz Y2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJfQorCQkJcmV0dXJuIHRydWU7 CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICog Q2FsbGJhY2tzIGZvciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBs ZXMgZm9yIGhlYXAgQU0KQEAgLTc1Myw3ICsxMjU0LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlf Zm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQl0YWJs ZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4X2Jl Z2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIE5VTEwsIDAsIDApOworCQlp bmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIE5VTEwsIFNuYXBz aG90QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4X3Jlc2NhbihpbmRleFNjYW4s IE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC03OTAsNyArMTI5Miw4IEBAIGhlYXBh bV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5l d0hlYXAsCiAKIAkJaWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4X2dl dG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJCWlm ICghaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uLAorCQkJCQkJCQkJCSAgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1 c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAqLwpAQCAtMjYz Myw2ICszMTM2LDcgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2Rz ID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbiwKIAku aW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2Zl dGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2dldG5leHRfc2xvdCA9 IGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9pbnNl cnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwK IAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWlu ZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFj a2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5h bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggYzk2OTE3MDg1Li5m ZTE1Mjg2MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC04OSw2ICs4OSw3IEBAIFJl bGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50 IG5vcmRlcmJ5cykKIAlzY2FuLT54c19zbmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsJLyogY2Fs bGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAJc2Nhbi0+bnVtYmVyT2ZLZXlzID0gbmtleXM7 CiAJc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9IG5vcmRlcmJ5czsKKwlzY2FuLT5iYXRjaHF1ZXVl ID0gTlVMTDsJLyogdXNlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcyAqLwogCiAJLyoKIAkgKiBX ZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVu dGlsIGFtcmVzY2FuLgpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5k ZXgiKTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxh dGlvbiwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0 aW9uLCBpcmVsLCBOVUxMLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwog CQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwog CQlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTUxNyw3ICs1MTgsOCBAQCBzeXN0YWJsZV9nZXRu ZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAKIAlpZiAoc3lzc2Nhbi0+aXJlbCkKIAl7Ci0JCWlm IChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzeXNzY2FuLT5zbG90KSkKKwkJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2Fu LT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkgc3lzc2Nhbi0+c2xvdCkp CiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7CiAKQEAgLTcwNyw3ICs3MDksNyBAQCBzeXN0YWJs ZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQllbG9nKEVSUk9S LCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAotCXN5c3NjYW4tPmlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2Nh biA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sIE5VTEwsCiAJ CQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nh bi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNjYW4gPSBOVUxM OwpAQCAtNzM0LDcgKzczNiw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2FuRGVz YyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9IE5V TEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChz eXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3Qp KQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxzZSwg TlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMKaW5kZXggMDQ5MmQ5MmQyLi45ZTRlZDViNTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFsbGVs c2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFy YWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJ CWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJ CWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJCWlu ZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJaW5k ZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJaW5k ZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJ aW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9i dWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFj dXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTI1NSw2 ICsyNTMsNyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAog SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ CQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCVR1cGxlVGFibGVTbG90ICppb3NfdGFibGVz bG90LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlv biAqaW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMpCkBAIC0yODMsOCAr MjgyLDExIEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+ eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsK IAorCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlp bmRleF9iYXRjaF9pbml0KHNjYW4pOworCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRj aGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRj aF9iZWdpbihoZWFwUmVsYXRpb24pOworCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbiwgaW9zX3RhYmxlc2xvdCk7CiAKIAlyZXR1cm4gc2Nh bjsKIH0KQEAgLTM4MCw2ICszODIsOCBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu LAogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNj YW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAorCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4s IHRydWUpOworCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4s IGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKIH0KQEAgLTM5 NCw2ICszOTgsOSBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NI RUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4pOwogCisJLyogQ2xlYW51cCBi YXRjaGluZywgc28gdGhhdCB0aGUgQU0gY2FuIHJlbGVhc2UgcGlucyBhbmQgc28gb24uICovCisJ aW5kZXhfYmF0Y2hfZW5kKHNjYW4pOworCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVm ZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNo KQogCXsKQEAgLTQyMiw5ICs0MjksMTAgQEAgdm9pZAogaW5kZXhfbWFya3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCiB7CiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1tYXJr cG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAotCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbW1hcmtwb3Moc2Nhbik7CisJLyogT25seSBhbWdldGJhdGNo IGluZGV4IEFNcyBzdXBwb3J0IG1hcmsgYW5kIHJlc3RvcmUgKi8KKwlyZXR1cm4gaW5kZXhfYmF0 Y2hfbWFya19wb3Moc2Nhbik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0OCw3ICs0 NTYsOCBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KElzTVZD Q1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19T Q0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJh dGNoKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAogCS8qIHJlbGVhc2Ug cmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKQEAgLTQ1Nyw3ICs0NjYsNyBAQCBpbmRleF9yZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBm b3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCi0Jc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJaW5kZXhfYmF0Y2hf cmVzdG9yZV9wb3Moc2Nhbik7CiB9CiAKIC8qCkBAIC01NzksNiArNTg4LDggQEAgaW5kZXhfcGFy YWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gp CiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKKwlpbmRl eF9iYXRjaF9yZXNldChzY2FuLCB0cnVlKTsKKwogCS8qIGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0 aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlkZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4oc2Nhbik7CkBAIC01 OTEsNiArNjAyLDcgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQog ICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVh cHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJs ZXNsb3QsCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJ CQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRl c2MgcHNjYW4pCkBAIC02MTQsMTcgKzYyNiwyNCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwo UmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJc2Nhbi0+eHNfc25hcHNob3Qg PSBzbmFwc2hvdDsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAorCWlmIChpbmRl eHJlbC0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hfaW5pdChz Y2FuKTsKKwogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICov Ci0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7 CisJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCwg aW9zX3RhYmxlc2xvdCk7CiAKIAlyZXR1cm4gc2NhbjsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0t LQotICogaW5kZXhfZ2V0bmV4dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCisg KiBpbmRleF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAgKgogICogVGhlIHJl c3VsdCBpcyB0aGUgbmV4dCBUSUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAogICogb3IgTlVM TCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBUaGlzIHNob3VsZCBv bmx5IGJlIGNhbGxlZCBieSB0YWJsZSBBTSdzIGluZGV4X2dldG5leHRfc2xvdCBpbXBsZW1lbnRh dGlvbiwKKyAqIGFuZCBvbmx5IGdpdmVuIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhlIHNp bmdsZS10dXBsZSBhbWdldHR1cGxlCisgKiBpbnRlcmZhY2UuCiAgKiAtLS0tLS0tLS0tLS0tLS0t CiAgKi8KIEl0ZW1Qb2ludGVyCkBAIC02NjcsOTcgKzY4Niw2IEBAIGluZGV4X2dldG5leHRfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJcmV0dXJuICZz Y2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZmV0 Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoKLSAqIFRoZSByZXN1 bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQg bW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRuZXh0X3RpZCwgb3IgTlVMTCBp ZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUg dGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1QgY2hhaW5zLAotICogYWx0aG91 Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZv ciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKLSAqCi0gKiBPbiBzdWNj ZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZCAodGhlIHBp biB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRl eF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNh bGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcg b2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJl IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVm ZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8K LWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xv dCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwotCWJvb2wJCWZvdW5kOwotCi0J Zm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0Y2gsICZzY2Fu LT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCi0JCQkJCQkJ CQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKLQotCWlmIChmb3VuZCkKLQkJ cGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7Ci0KLQkvKgotCSAq IElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBs ZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRo aXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4g aW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgotCSAqIHJlY292 ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBp bgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0JaWYgKCFzY2FuLT54YWN0U3Rh cnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKLQot CXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2dldG5l eHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgotICoKLSAqIFRoZSByZXN1 bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNu YXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9y ZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHJlc291cmNlcyAo bGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQgd2lsbCBiZQotICog ZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBv ciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVj ayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2Nh biBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRv bid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0 aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7Ci0JCWlmICghc2Nhbi0+eHNf aGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCi0JCQkvKiBUaW1lIHRv IGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0 bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4 IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0gTlVMTCkKLQkJCQlicmVhazsK LQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsK LQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAg dHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhp bmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCi0JCSAqIHRoZSBpbmRl eC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQp KTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCi0JCQlyZXR1cm4gdHJ1ZTsK LQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRl eF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4gaW5kZXggc2Nhbgog ICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uZTMwY2MxNzljCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDY0MCBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIGFtZ2V0YmF0Y2ggaW1wbGVtZW50 YXRpb24gcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMKKyAqCisgKiBJTlRFUkZBQ0UgUk9VVElORVMKKyAqCQlpbmRleF9iYXRjaF9pbml0 IC0gSW5pdGlhbGl6ZSBmaWVsZHMgbmVlZGVkIGJ5IGJhdGNoaW5nCisgKgkJaW5kZXhfYmF0Y2hf cmVzZXQgLSByZXNldCBhIGJhdGNoCisgKgkJaW5kZXhfYmF0Y2hfbWFya19wb3MgLSBzZXQgYSBt YXJrIGZyb20gY3VycmVudCBiYXRjaCBwb3NpdGlvbgorICoJCWluZGV4X2JhdGNoX3Jlc3RvcmVf cG9zIC0gcmVzdG9yZSBtYXJrIHRvIGN1cnJlbnQgYmF0Y2ggcG9zaXRpb24KKyAqCQlpbmRleF9i YXRjaF9raWxsX2l0ZW0gLSByZWNvcmQgZGVhZCBpbmRleCB0dXBsZQorICoJCWluZGV4X2JhdGNo X2VuZCAtIGVuZCBiYXRjaAorICoKKyAqCQlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIC0gdW5s b2NrIGJhdGNoJ3MgYnVmZmVyIGxvY2sKKyAqCQlpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgLSBh bGxvY2F0ZSBhbm90aGVyIGJhdGNoCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UgLSBy ZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgorI2luY2x1 ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCisKK3N0YXRpYyB2b2lk IGJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoY29uc3QgY2hhciAqbGFiZWwsIEluZGV4U2NhbkRl c2Mgc2Nhbik7CisKKy8qCisgKiBpbmRleF9iYXRjaF9pbml0CisgKgkJSW5pdGlhbGl6ZSB2YXJp b3VzIGZpZWxkcyBhbmQgYXJyYXlzIG5lZWRlZCBieSBiYXRjaGluZy4KKyAqCisgKiBTZXRzIHVw IHRoZSBiYXRjaCBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIGl0cyBpbml0aWFsIHJlYWQgcG9zaXRpb24u ICBBbHNvCisgKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBlYWdlcmx5IGRyb3Ag aW5kZXggcGFnZSBwaW5zLiAgSXQgaXNuJ3QKKyAqIHNhZmUgdG8gZHJvcCBpbmRleCBwYWdlIHBp bnMgZWFnZXJseSB3aGVuIGRvaW5nIHNvIHJpc2tzIGJyZWFraW5nIGFuCisgKiBhc3N1bXB0aW9u IChhYm91dCB0YWJsZSBUSUQgcmVjeWNsaW5nKSB0aGF0IGFtZnJlZWJhdGNoIHJvdXRpbmVzIG1h a2Ugd2hlbgorICogc2V0dGluZyBMUF9ERUFEIGJpdHMgZm9yIGtub3duLWRlYWQgaW5kZXggdHVw bGVzLiAgU3BlY2lmaWNhbGx5LCBidWZmZXIKKyAqIHBpbnMgb24gaW5kZXggcGFnZXMgc2VydmUg YXMgaW50ZXJsb2NrcyBwcmV2ZW50aW5nIFZBQ1VVTSBmcm9tIHJlY3ljbGluZworICogVElEcyBv biB0aG9zZSBwYWdlcywgcHJvdGVjdGluZyB0aGUgdGFibGUgQU0gZnJvbSBjb25mdXNpbmcgYSBy ZWN5Y2xlZCBUSUQKKyAqIHdpdGggdGhlIG9yaWdpbmFsIHJvdyBpdCBtZWFudCB0byByZWZlcmVu Y2UuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQorewor CS8qIEJvdGggYW1nZXRiYXRjaCBhbmQgYW1mcmVlYmF0Y2ggbXVzdCBiZSBwcmVzZW50IHRvZ2V0 aGVyICovCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVl YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHF1ZXVlID0gcGFsbG9jKHNpemVvZihCYXRj aFF1ZXVlKSk7CisKKwkvKgorCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdl IHBpbnMgYmVmb3JlIGFtZ2V0YmF0Y2ggcmV0dXJucy4KKwkgKiBUaGlzIGF2b2lkcyBtYWtpbmcg VkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KKwkgKgor CSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25s eSBzY2FucyBkdWUgdG8gYQorCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0 dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCisJICogSXQncyBhbHNvIHVuc2FmZSBm b3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KKwkgKgor CSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2VybHksIHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBp bmRleCB0dXBsZXMgYXMKKwkgKiBMUF9ERUFEIGhhcyB0byBkZWFsIHdpdGggY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHJhY2VzLiAgVGhlIHNjaGVtZQorCSAqIHVzZWQgdG8gZGV0ZWN0IHVuc2Fm ZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZyB1bmxvZ2dlZAorCSAqIHJl bGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBMU04p LiAgT3B0IG91dAorCSAqIG9mIGVhZ2VyIHBpbiBkcm9wcGluZyBkdXJpbmcgdW5sb2dnZWQgcmVs YXRpb24gc2NhbnMgZm9yIG5vdy4KKwkgKi8KKwlzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluID0K KwkJKCFzY2FuLT54c193YW50X2l0dXAgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNo b3QpICYmCisJCSBSZWxhdGlvbk5lZWRzV0FMKHNjYW4tPmluZGV4UmVsYXRpb24pKTsKKwlzY2Fu LT5iYXRjaHF1ZXVlLT5maW5pc2hlZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocXVldWUtPmRpcmVj dGlvbiA9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uOworCisJLyogcG9zaXRpb25zIGluIHRoZSBx dWV1ZSBvZiBiYXRjaGVzICovCisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5y ZWFkUG9zKTsKKwliYXRjaF9yZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPm1hcmtQb3MpOwor CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+bWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaHF1ZXVl LT5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGhlYWQgYmF0Y2ggKi8KKwlzY2FuLT5iYXRjaHF1 ZXVlLT5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIHN0YXJ0cyBlbXB0eSAqLworCW1l bXNldCgmc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGUsIDAsIHNpemVvZihzY2FuLT5iYXRjaHF1ZXVl LT5jYWNoZSkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJYmF0Y2hfZ2V0bmV4dCAt IGdldCB0aGUgbmV4dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgorICogQ2FsbGVkIGJ5 IHRhYmxlIEFNJ3Mgb3JkZXJlZCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgbmVl ZHMgdG8KKyAqIGxvYWQgdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggZW50cmllcyB0byBwcm9jZXNz IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKgorICogVGhlIHRhYmxlIEFNIGNvbnRyb2xzIHRo ZSBvdmVyYWxsIHByb2dyZXNzIG9mIHRoZSBzY2FuLCBkZWNpZGluZyB3aGVuIHRvCisgKiByZXF1 ZXN0IG5ldyBiYXRjaGVzLiAgVGhpcyBkaXZpc2lvbiBvZiBsYWJvciBnaXZlcyB0aGUgdGFibGUg QU0gdGhlIGFiaWxpdHkKKyAqIHRvIHJlb3JkZXIgZmV0Y2hlcyBvZiBuZWFyYnkgdGFibGUgdHVw bGVzIChmcm9tIHRoZSBzYW1lIGJhdGNoLCBvciBmcm9tCisgKiBhZGphY2VudCBiYXRjaGVzKSBi YXNlZCBvbiBpdHMgb3duIGNvbnNpZGVyYXRpb25zLiAgSW1wb3J0YW50bHksIHRhYmxlIEFNcwor ICogYXJlIF9ub3RfIHJlcXVpcmVkIHRvIGZyZWUgYSBiYXRjaCBiZWZvcmUgbG9hZGluZyB0aGUg bmV4dCBiYXRjaCBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4gb2YgYW4gaW5kZXggdGhhdCB1c2Vz IHRoZSBhbWdldGJhdGNoL2FtZnJlZWJhdGNoIGludGVyZmFjZS4KKyAqIChUaGlzIGlzbid0IHBv c3NpYmxlIHdpdGggdGhlIHNpbmdsZS10dXBsZSBhbWdldHR1cGxlIGludGVyZmFjZSwgd2hpY2gg Z2l2ZXMKKyAqIHRoZSBpbmRleCBBTSBkaXJlY3QgY29udHJvbCBvdmVyIHRoZSBwcm9ncmVzcyBv ZiB0aGUgaW5kZXggc2Nhbi4gIGFtZ2V0dHVwbGUKKyAqIGluZGV4IHNjYW5zIHBlcmZvcm0gdGhl IHdvcmsgdGhhdCB3ZSBwZXJmb3JtIGluIGJhdGNoX2ZyZWUgYXMgdGhlIHNjYW4KKyAqIHByb2dy ZXNzZXMsIGFuZCB3aXRob3V0IG5vdGlmeWluZyB0aGUgdGFibGUgQU0sIHdoaWNoIG1ha2VzIGl0 IGltcG9zc2libGUKKyAqIHRvIHNhZmVseSByZW9yZGVyIHdvcmsgaW4gdGhlIHdheSB0aGF0IG91 ciBjYWxsZXJzIGNhbi4pCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlIG1hbmFnZWQgdG8gcmVh ZCBhIGJhdGNoIG9mIFRJRHMsIG9yIGZhbHNlIGlmIHRoZXJlIGFyZQorICogbm8gbW9yZSBiYXRj aGVzIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAq LworYm9vbAorYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVl OworCUJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2ggPSBOVUxMLAorCQkJCWJhdGNoID0gTlVMTDsK KworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9y IHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikp OworCisJLyogRGlkIHdlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCBiYXRjaCBmb3IgdGhpcyBzY2Fu PyAqLworCWlmIChiYXRjaHF1ZXVlLT5maW5pc2hlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJQXNz ZXJ0KCFJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikpOworCisJYmF0Y2hfZGVidWdfcHJpbnRf YmF0Y2hlcygiYmF0Y2hfZ2V0bmV4dCAvIHN0YXJ0Iiwgc2Nhbik7CisKKwkvKgorCSAqIEdldCB0 aGUgcHJldmlvdXNseSByZXR1cm5lZCBiYXRjaCB0byBwYXNzIHRvIGFtZ2V0YmF0Y2guICBUaGUg aW5kZXggQU0KKwkgKiB1c2VzIHRoaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8g cmVhZCBuZXh0LCB0eXBpY2FsbHkgYnkKKwkgKiBmb2xsb3dpbmcgcGFnZSBsaW5rcyBmb3J3YXJk IG9yIGJhY2t3YXJkLgorCSAqLworCWlmIChiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPCBiYXRjaHF1 ZXVlLT5uZXh0QmF0Y2gpCisJCXByaW9yYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJh dGNocXVldWUtPm5leHRCYXRjaCAtIDEpOworCisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW1nZXRiYXRjaChzY2FuLCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkJCSAg ZGlyZWN0aW9uKTsKKwlpZiAoYmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0 Y2ggZnJvbSB0aGUgQU0gLS0gYWRkIGl0IHRvIG91ciBxdWV1ZSAqLworCQlpbnQJCQliYXRjaElu ZGV4ID0gYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOworCisJCUlOREVYX1NDQU5fQkFUQ0goc2Nhbiwg YmF0Y2hJbmRleCkgPSBiYXRjaDsKKworCQliYXRjaHF1ZXVlLT5uZXh0QmF0Y2grKzsKKworCQlE RUJVR19MT0coImJhdGNoX2dldG5leHQgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAlZCBiYXRjaCAl cCIsCisJCQkJICBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5leHRCYXRjaCwg YmF0Y2gpOworCX0KKwllbHNlCisJCWJhdGNocXVldWUtPmZpbmlzaGVkID0gdHJ1ZTsKKworCWJh dGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCisJYmF0Y2hfZGVidWdfcHJpbnRfYmF0 Y2hlcygiYmF0Y2hfZ2V0bmV4dCAvIGVuZCIsIHNjYW4pOworCisJcmV0dXJuIChiYXRjaCAhPSBO VUxMKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNoX3Jlc2V0IC0g cmVzZXQgYmF0Y2ggcXVldWUgYW5kIHJlYWQgcG9zaXRpb24KKyAqCisgKiBSZXNldHMgYWxsIGxv YWRlZCBiYXRjaGVzIGluIHRoZSBxdWV1ZSwgYW5kIHJlc2V0cyB0aGUgcmVhZCBwb3NpdGlvbiB0 byB0aGUKKyAqIGluaXRpYWwgc3RhdGUgKG9yIGp1c3QgaW5pdGlhbGl6ZSBxdWV1ZSBzdGF0ZSku ICBXaGVuICdjb21wbGV0ZScgaXMgdHJ1ZSwKKyAqIGFsc28gZnJlZXMgdGhlIHNjYW4ncyBtYXJr ZWQgYmF0Y2ggKGlmIGFueSksIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIGVuZGluZyBhbgorICogYW1n ZXRiYXRjaC1iYXNlZCBpbmRleCBzY2FuLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lk CitpbmRleF9iYXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7 CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CisKKwkvKiBiYWls IG91dCBpZiBiYXRjaGluZyBub3QgZW5hYmxlZCAqLworCWlmICghYmF0Y2hxdWV1ZSkKKwkJcmV0 dXJuOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CisJYmF0Y2hfZGVidWdf cHJpbnRfYmF0Y2hlcygiaW5kZXhfYmF0Y2hfcmVzZXQiLCBzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+ eHNfaGVhcGZldGNoKTsKKworCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KKwliYXRjaF9yZXNl dF9wb3MoJmJhdGNocXVldWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBXaXRoICJjb21wbGV0ZSIg cmVzZXQsIG1ha2Ugc3VyZSB0byBhbHNvIGZyZWUgdGhlIG1hcmtlZCBiYXRjaCwgZWl0aGVyCisJ ICogYnkganVzdCBmb3JnZXR0aW5nIGl0IChpZiBpdCdzIHN0aWxsIGluIHRoZSBxdWV1ZSksIG9y IGJ5IGV4cGxpY2l0bHkKKwkgKiBmcmVlaW5nIGl0LgorCSAqLworCWlmIChjb21wbGV0ZSAmJiB1 bmxpa2VseShiYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggIT0gTlVMTCkpCisJeworCQlCYXRjaFF1ZXVl SXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOworCQlCYXRjaEluZGV4U2Nh biBtYXJrQmF0Y2ggPSBiYXRjaHF1ZXVlLT5tYXJrQmF0Y2g7CisKKwkJLyogYWx3YXlzIHJlc2V0 IHRoZSBwb3NpdGlvbiwgZm9yZ2V0IHRoZSBtYXJrZWQgYmF0Y2ggKi8KKwkJYmF0Y2hxdWV1ZS0+ bWFya0JhdGNoID0gTlVMTDsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IG1vdmVkIHBh c3QgdGhlIG1hcmtlZCBiYXRjaCAoaXQncyBub3QgaW4gdGhlCisJCSAqIGN1cnJlbnQgcXVldWUp LCBmcmVlIGl0IGV4cGxpY2l0bHkuIE90aGVyd2lzZSBpdCdsbCBiZSBpbiB0aGUgZnJlZWQKKwkJ ICogbGF0ZXIuCisJCSAqLworCQlpZiAobWFya1Bvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5oZWFk QmF0Y2ggfHwKKwkJCW1hcmtQb3MtPmJhdGNoID49IGJhdGNocXVldWUtPm5leHRCYXRjaCkKKwkJ CWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsKKworCQkvKiByZXNldCBwb3NpdGlvbiBvbmx5 IGFmdGVyIHRoZSBxdWV1ZSByYW5nZSBjaGVjayAqLworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNo cXVldWUtPm1hcmtQb3MpOworCX0KKworCS8qIG5vdyByZWxlYXNlIGFsbCBvdGhlciBjdXJyZW50 bHkgbG9hZGVkIGJhdGNoZXMgKi8KKwl3aGlsZSAoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoIDwgYmF0 Y2hxdWV1ZS0+bmV4dEJhdGNoKQorCXsKKwkJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBJTkRFWF9T Q0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPmhlYWRCYXRjaCk7CisKKwkJREVCVUdfTE9HKCJm cmVlaW5nIGJhdGNoICVkICVwIiwgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoLCBiYXRjaCk7CisKKwkJ YmF0Y2hfZnJlZShzY2FuLCBiYXRjaCk7CisKKwkJLyogdXBkYXRlIHRoZSB2YWxpZCByYW5nZSwg c28gdGhhdCBhc3NlcnRzIC8gZGVidWdnaW5nIHdvcmtzICovCisJCWJhdGNocXVldWUtPmhlYWRC YXRjaCsrOworCX0KKworCS8qIHJlc2V0IHJlbGV2YW50IGJhdGNoIHN0YXRlIGZpZWxkcyAqLwor CWJhdGNocXVldWUtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggKi8KKwliYXRjaHF1 ZXVlLT5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCisKKwliYXRj aHF1ZXVlLT5maW5pc2hlZCA9IGZhbHNlOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQo c2Nhbik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9tYXJrX3Bv cyAtIG1hcmsgY3VycmVudCBwb3NpdGlvbiBpbiBzY2FuIGZvciByZXN0b3JhdGlvbgorICoKKyAq IFNhdmVzIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2ggc28g dGhhdCB0aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMgcG9pbnQgbGF0ZXIsIHZp YSBhIGNhbGwgdG8gaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNo IGlzIHJldGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhl CisgKiBzY2FuIGVuZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfbWFya19wb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOwor CUJhdGNoUXVldWVJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocXVldWUtPm1hcmtQb3M7CisJQmF0 Y2hJbmRleFNjYW4gbWFya0JhdGNoID0gYmF0Y2hxdWV1ZS0+bWFya0JhdGNoOworCisJLyoKKwkg KiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpLCBidXQgb25seSBpZiB0aGUg YmF0Y2ggaXMgbm8KKwkgKiBsb25nZXIgdmFsaWQgKGluIHRoZSBjdXJyZW50IGhlYWQvbmV4dCBy YW5nZSkuICBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZQorCSAqIHRvIGRvIHRoaXMgaW4gdGhlIGNv bW1vbiBjYXNlIHdoZXJlIHdlIG1hcmsgYSBwb3NpdGlvbiB0aGF0IGNvbWVzIGZyb20KKwkgKiBv dXIgY3VycmVudCByZWFkQmF0Y2guCisJICovCisJaWYgKG1hcmtCYXRjaCAhPSBOVUxMICYmICht YXJrUG9zLT5iYXRjaCA8IGJhdGNocXVldWUtPmhlYWRCYXRjaCB8fAorCQkJCQkJCSAgbWFya1Bv cy0+YmF0Y2ggPj0gYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKSkKKwl7CisJCWJhdGNocXVldWUtPm1h cmtCYXRjaCA9IE5VTEw7CisJCWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkv KiBjb3B5IHRoZSByZWFkIHBvc2l0aW9uICovCisJYmF0Y2hxdWV1ZS0+bWFya1BvcyA9IGJhdGNo cXVldWUtPnJlYWRQb3M7CisJYmF0Y2hxdWV1ZS0+bWFya0JhdGNoID0gSU5ERVhfU0NBTl9CQVRD SChzY2FuLCBiYXRjaHF1ZXVlLT5tYXJrUG9zLmJhdGNoKTsKKworCS8qIHJlYWRQb3MvbWFya1Bv cyBtdXN0IGJlIHZhbGlkICovCisJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCAmYmF0Y2hx dWV1ZS0+bWFya1Bvcyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRj aF9yZXN0b3JlX3BvcyAtIHJlc3RvcmUgc2NhbiB0byBhIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0 aW9uCisgKgorICogUmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBwb3NpdGlvbiBwcmV2aW91c2x5IHNh dmVkIGJ5IGluZGV4X2JhdGNoX21hcmtfcG9zLgorICogVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0 b3JlZCBhcyB0aGUgY3VycmVudCBiYXRjaCwgYWxsb3dpbmcgdGhlIHNjYW4gdG8KKyAqIHJlc3Vt ZSBmcm9tIHRoZSBtYXJrZWQgcG9zaXRpb24uICBBbHNvIG5vdGlmaWVzIHRoZSBpbmRleCBBTSB2 aWEgYSBjYWxsIHRvCisgKiBpdHMgYW1wb3NyZXNldCByb3V0aW5lLCB3aGljaCBhbGxvd3MgaXQg dG8gaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorICogdGhhdCBpbmRlcGVuZGVudGx5IHRy YWNrcyBzY2FuIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0ZSkKKyAqCisgKiBGdW5j dGlvbiBjdXJyZW50bHkganVzdCBkaXNjYXJkcyBtb3N0IGJhdGNoIHF1ZXVlIHN0YXRlLiAgSXQg bWlnaHQgbWFrZQorICogc2Vuc2UgdG8gdGVhY2ggaXQgdG8gaG9sZCBvbiB0byBvdGhlciBuZWFy YnkgYmF0Y2hlcyAoc3RpbGwtaGVsZCBiYXRjaGVzCisgKiB0aGF0IGFyZSBsaWtlbHkgdG8gYmUg bmVlZGVkIG9uY2UgdGhlIHNjYW4gZmluaXNoZXMgcmV0dXJuaW5nIG1hdGNoaW5nCisgKiBpdGVt cyBmcm9tIHRoZSByZXN0b3JlZCBiYXRjaCkgYXMgYW4gb3B0aW1pemF0aW9uLiAgU3VjaCBhIHNj aGVtZSB3b3VsZAorICogaGF2ZSB0aGUgYmVuZWZpdCBvZiBhdm9pZGluZyByZXBlYXQgY2FsbHMg dG8gYW1nZXRiYXRjaC9yZXBlYXRlZGx5IHJlYWRpbmcKKyAqIHRoZSBzYW1lIGluZGV4IHBhZ2Vz LgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9yZXN0b3JlX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4t PmJhdGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+ bWFya1BvczsKKwlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFk UG9zOworCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsK KworCWlmIChyZWFkUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRjaCAmJgorCQlyZWFkUG9zLT5i YXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSBkb24ndCBo YXZlIHRvIGRpc2NhcmQgdGhlIHNjYW4ncyBzdGF0ZSBhZnRlciBhbGwsIHNpbmNlIHRoZQorCQkg KiBjdXJyZW50IGhlYWRCYXRjaCBpcyBhbHNvIHRoZSBiYXRjaCB0aGF0IHdlJ3JlIHJlc3Rvcmlu ZyB0bworCQkgKi8KKwkJcmVhZFBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsK Kwl9CisKKwkvKgorCSAqIENhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBp bnZhbGlkYXRlIGFueSBwcml2YXRlIHN0YXRlCisJICogdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNr cyB0aGUgc2NhbidzIHByb2dyZXNzCisJICovCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcG9zcmVzZXQoc2NhbiwgbWFya0JhdGNoKTsKKworCS8qCisJICogUmVzZXQgdGhlIGJh dGNoaW5nIHN0YXRlLCBleGNlcHQgZm9yIHRoZSBtYXJrZWQgYmF0Y2gsIGFuZCBtYWtlIGl0IGxv b2sKKwkgKiBsaWtlIHdlIGhhdmUgYSBzaW5nbGUgYmF0Y2ggLS0gdGhlIG1hcmtlZCBvbmUuCisJ ICovCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgZmFsc2UpOworCisJYmF0Y2hxdWV1ZS0+cmVh ZFBvcyA9ICptYXJrUG9zOworCWJhdGNocXVldWUtPmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNo OworCWJhdGNocXVldWUtPm5leHRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoICsgMTsKKworCUlOREVY X1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bWFya1Bvcy5iYXRjaCkgPSBtYXJrQmF0Y2g7 CisJYmF0Y2hxdWV1ZS0+bWFya0JhdGNoID0gbWFya0JhdGNoOworfQorCisvKgorICogYmF0Y2hf ZnJlZQorICoJCVJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGJhdGNoIHJldHVy bmVkIGJ5IHRoZSBpbmRleCBBTS4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVk IGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBh IGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFRoaXMg Y2FsbHMgdGhlIGluZGV4IEFNJ3MgYW1mcmVlYmF0Y2ggY2FsbGJhY2sgdG8gcmVsZWFzZSBBTS1z cGVjaWZpYworICogcmVzb3VyY2VzLCBhbmQgdG8gc2V0IExQX0RFQUQgYml0cyBvbiB0aGUgYmF0 Y2gncyBpbmRleCBwYWdlLiAgSXQgaXNuJ3QKKyAqIHNhZmUgZm9yIHRhYmxlIEFNcyB0byBmZXRj aCB0YWJsZSB0dXBsZXMgdXNpbmcgVElEcyBzYXZlZCBmcm9tIGEgYmF0Y2ggdGhhdAorICogd2Fz IGFscmVhZHkgZnJlZWQ6ICdkcm9wUGluJyBzY2FucyBuZWVkIHRoZSBpbmRleCBBTSB0byByZXRh aW4gYSBwaW4gb24gdGhlCisgKiBUSUQncyBpbmRleCBwYWdlLCBhcyBhbiBpbnRlcmxvY2sgYWdh aW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuCisgKi8KK3ZvaWQKK2JhdGNoX2ZyZWUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwliYXRjaF9hc3NlcnRf YmF0Y2hfdmFsaWQoc2NhbiwgYmF0Y2gpOworCisJLyogZG9uJ3QgZnJlZSB0aGUgYmF0Y2ggdGhh dCBpcyBtYXJrZWQgKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+YmF0Y2hxdWV1ZS0+bWFya0JhdGNo KQorCQlyZXR1cm47CisKKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVlYmF0 Y2goc2NhbiwgYmF0Y2gpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0 Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGl0ZW0gZm9yIGRlZmVycmVkIExQX0RFQUQgbWFya2luZwor ICoKKyAqIFJlY29yZHMgdGhlIGl0ZW0gaW5kZXggb2YgdGhlIGN1cnJlbnRseS1yZWFkIHR1cGxl IGluIHJlYWRCYXRjaCdzCisgKiBraWxsZWRJdGVtcyBhcnJheS4gVGhlIGl0ZW1zJyBpbmRleCB0 dXBsZXMgd2lsbCBsYXRlciBiZSBtYXJrZWQgTFBfREVBRAorICogd2hlbiBjdXJyZW50IHJlYWRC YXRjaCBpcyBmcmVlZCBieSBhbWZyZWViYXRjaCByb3V0aW5lIChzZWUgYmF0Y2hfZnJlZSkuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2tpbGxfaXRlbShJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3MgPSAmc2Nhbi0+ YmF0Y2hxdWV1ZS0+cmVhZFBvczsKKwlCYXRjaEluZGV4U2NhbiByZWFkQmF0Y2ggPSBJTkRFWF9T Q0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCWJhdGNoX2Fzc2VydF9wb3NfdmFs aWQoc2NhbiwgcmVhZFBvcyk7CisKKwlpZiAocmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxM KQorCQlyZWFkQmF0Y2gtPmtpbGxlZEl0ZW1zID0gKGludCAqKQorCQkJcGFsbG9jKHJlYWRCYXRj aC0+bWF4aXRlbXMgKiBzaXplb2YoaW50KSk7CisJaWYgKHJlYWRCYXRjaC0+bnVtS2lsbGVkIDwg cmVhZEJhdGNoLT5tYXhpdGVtcykKKwkJcmVhZEJhdGNoLT5raWxsZWRJdGVtc1tyZWFkQmF0Y2gt Pm51bUtpbGxlZCsrXSA9IHJlYWRQb3MtPml0ZW07Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqCQlpbmRleF9iYXRjaF9lbmQgLSBlbmQgYSBiYXRjaCBzY2FuIGFuZCBmcmVlIGFsbCByZXNv dXJjZXMKKyAqCisgKiBDYWxsZWQgd2hlbiBhbiBpbmRleCBzY2FuIGlzIGJlaW5nIGVuZGVkLCBy aWdodCBiZWZvcmUgdGhlIG93bmluZyBzY2FuCisgKiBkZXNjcmlwdG9yIGdvZXMgYXdheS4gIENs ZWFucyB1cCBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJaW5k ZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwkvKiBiYWlsIG91dCB3aXRob3V0IGJhdGNo aW5nICovCisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlKQorCQlyZXR1cm47CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4t PmJhdGNocXVldWUtPmNhY2hlW2ldID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlwZnJlZShz Y2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSk7CisJfQorCisJcGZyZWUoc2Nhbi0+YmF0Y2hxdWV1 ZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFt Z2V0YmF0Y2ggaW5kZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBh bGxvY2F0aW9uLCB1bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2Ug cmVjeWNsaW5nLiAgSW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2Ug dGhlc2UKKyAqIHJhdGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworLyoKKyAqIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgLSBEcm9wIGxvY2sg YW5kIGNvbmRpdGlvbmFsbHkgZHJvcCBwaW4gb24gYmF0Y2ggcGFnZQorICoKKyAqIFVubG9ja3Mg Y2FsbGVyJ3MgYmF0Y2gtPmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5p bmcgaXRlbXMKKyAqIHNhdmVkIGluIHRoYXQgYmF0Y2guICBNYW5hZ2VzIHRoZSBkZXRhaWxzIG9m IGRyb3BwaW5nIHRoZSBsb2NrIGFuZCBwb3NzaWJseQorICogdGhlIHBpbiBmb3IgaW5kZXggQU0g Y2FsbGVyIChkcm9wcGluZyB0aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nCisg KiBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2ssIGJ1dCBpc24ndCBhbHdheXMgc2FmZSkuCisg KgorICogT25seSBjYWxsIGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGlu ZyBpdGVtcyB0byByZXR1cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1h cCB0byBsb2FkIGludG8gaXRzIGJpdG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4g aW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1z IHRvIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisg KgorICogTm90ZTogSXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50 IGJvdGggYW1nZXRiaXRtYXAgYW5kCisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0ZW50bHkgdXNl IHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2b2lk cyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUuICBXZSBhbHdh eXMgZHJvcAorICogYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24g YmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxlcnMuCisgKiBTdWNoIGFtZ2V0Yml0bWFwIGNhbGxl cnMgbXVzdCBiZSBjYXJlZnVsIHRvIGZyZWUgYWxsIGJhdGNoZXMgd2l0aCBtYXRjaGluZworICog aXRlbXMgb25jZSB0aGV5J3JlIGRvbmUgc2F2aW5nIHRoZSBtYXRjaGluZyBUSURzICh0aGVyZSB3 aWxsIG5ldmVyIGJlIGFueQorICogY2FsbHMgdG8gYW1mcmVlYmF0Y2gsIHNvIGFtZ2V0Yml0bWFw IG11c3QgY2FsbCBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZQorICogZGlyZWN0bHksIGluIGxp ZXUgb2YgYSBkZWZlcnJlZCBjYWxsIHRvIGFtZnJlZWJhdGNoIGZyb20gY29yZSBjb2RlKS4KKyAq Lwordm9pZAoraW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEJh dGNoSW5kZXhTY2FuIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CisJYm9vbAkJZHJvcFBpbiA9ICFzY2FuLT5iYXRjaHF1ZXVlIHx8IHNjYW4tPmJhdGNocXVl dWUtPmRyb3BQaW47CisKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcg aXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+ PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmICghZHJv cFBpbikKKwl7CisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJCQlWQUxH UklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1op OworCisJCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCisJCUxvY2tCdWZm ZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJcmV0dXJuOworCX0KKworCWlm IChzY2FuLT5iYXRjaHF1ZXVlKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0bWFw KSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQkv KgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1mcmVlYmF0Y2ggaGFzIGEg d2F5IHRvIGRldGVjdCB3aGVuCisJCSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5 IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgorCQkgKiBJdCdsbCBvbmx5IGJlIHNhZmUg dG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUKKwkJICogcGFnZSBM U04gaGFzbid0IGFkdmFuY2VkLgorCQkgKi8KKwkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVs KSk7CisJCWJhdGNoLT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYmF0Y2gtPmJ1Zik7CisJfQor CisJLyogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluICovCisJTG9ja0J1ZmZlcihiYXRj aC0+YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZm ZXJzKHJlbCkpCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1ZmZlckdldFBhZ2UoYmF0 Y2gtPmJ1ZiksIEJMQ0tTWik7CisJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwliYXRjaC0+ YnVmID0gSW52YWxpZEJ1ZmZlcjsgLyogZGVmZW5zaXZlICovCit9CisKKy8qCisgKiBpbmRleGFt X3V0aWxfYmF0Y2hfYWxsb2MKKyAqCQlBbGxvY2F0ZSBhIGJhdGNoIHRoYXQgY2FuIGZpdCBtYXhp dGVtcy1tYW55IEJhdGNoTWF0Y2hpbmdJdGVtcy4KKyAqCisgKiBSZXR1cm5zIGEgQmF0Y2hJbmRl eFNjYW4gc2l6ZWQgdG8gY2FsbGVyJ3MgcmVxdWlyZWQgbWF4aXRlbXMgY2FwYWNpdHkuCisgKiBU aGlzIHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLCBvciBhIGJhdGNoIHJl dXNlZCBmcm9tIGEgY2FjaGUKKyAqIG9mIGJhdGNoZXMgYWxyZWFkeSBmcmVlZCBieSBjYWxsaW5n IGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLiAgU2VlCisgKiBjb21tZW50cyBhYm92ZSBpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCBhbGwgY2FsbHMg aGVyZSBkdXJpbmcgdGhlIHNhbWUgaW5kZXggc2NhbiB3aWxsIGFsd2F5cyB1c2UKKyAqIHRoZSBz YW1lIG1heGl0ZW1zIGFuZCB3YW50X2l0dXAgYXJndW1lbnRzLiAgSW5kZXggQU1zIHRoYXQgdXNl IGJhdGNoZXMKKyAqIHNob3VsZCBjYWxsIHRoaXMgZnJvbSBlaXRoZXIgdGhlaXIgYW1nZXRiYXRj aCBvciBhbWdldGJpdG1hcCByb3V0aW5lcy4KKyAqIFRoZXkgbXVzdCBub3QgY2FsbCBoZXJlIGZy b20gb3RoZXIgcm91dGluZXMgKHBhcnRpY3VsYXJseSBub3QgYW1mcmVlYmF0Y2gpLgorICovCitC YXRjaEluZGV4U2NhbgoraW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nh biwgaW50IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCkKK3sKKwlCYXRjaEluZGV4U2NhbiBiYXRj aCA9IE5VTEw7CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHF1 ZXVlJ3MgY2FjaGUgb2YgYmF0Y2hlcyAqLworCWlmIChzY2FuLT5iYXRjaHF1ZXVlICE9IE5VTEwp CisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsr KQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsK KwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVucmVmZXJlbmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0g c2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVb aV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFiYXRjaCkKKwl7 CisJCWJhdGNoID0gcGFsbG9jKG9mZnNldG9mKEJhdGNoSW5kZXhTY2FuRGF0YSwgaXRlbXMpICsK KwkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIG1heGl0ZW1zKTsKKworCQliYXRj aC0+bWF4aXRlbXMgPSBtYXhpdGVtczsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB3ZSBuZWVkIGEgdHVwbGUgc3RvcmFnZQorCQkgKiB3b3Jrc3BhY2Uu IFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhpcywgd2hpY2ggc2hvdWxkIGFsd2F5cyBnaXZlCisJ CSAqIHRoZSBpbmRleCBBTSBlbm91Z2ggc3BhY2UgdG8gZml0IGEgZnVsbCBwYWdlJ3Mgd29ydGgg b2YgdHVwbGVzLgorCQkgKi8KKwkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxMOworCQlpZiAod2Fu dF9pdHVwKQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBwYWxsb2MoQkxDS1NaKTsKKworCQkvKgor CQkgKiBCYXRjaGVzIGFsbG9jYXRlIGtpbGxlZEl0ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhh dCBjYWNoZWQKKwkJICogYmF0Y2hlcyBrZWVwIHRoZWlyIGtpbGxlZEl0ZW1zIGFsbG9jYXRpb24g d2hlbiByZWN5Y2xlZCkKKwkJICovCisJCWJhdGNoLT5raWxsZWRJdGVtcyA9IE5VTEw7CisJfQor CisJLyogd2FudF9pdHVwIGNhbGxlcnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJ QXNzZXJ0KGJhdGNoLT5tYXhpdGVtcyA9PSBtYXhpdGVtcyk7CisJQXNzZXJ0KCEod2FudF9pdHVw ICYmIChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSkpOworCisJLyogc2hhcmVkIGluaXRpYWxp emF0aW9uICovCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJYmF0Y2gtPmZpcnN0SXRl bSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1LaWxsZWQgPSAwOwor CisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UK KyAqCQlFaXRoZXIgc3Rhc2ggdGhlIGJhdGNoIGluIGEgc21hbGwgY2FjaGUgZm9yIHJldXNlLCBv ciBmcmVlIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0 byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgKHdoZW4gc2NhbgorICogaGFz bid0IGFscmVhZHkgZmluaXNoZWQpIHRvIHJlZHVjZSBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisg KgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdh cyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhl IHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0 YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1h dGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IGNhbGxpbmcgaGVyZSBhdCB0aGUgZW5kIG9m IHRoZWlyIGFtZnJlZWJhdGNoIHJvdXRpbmUuCisgKiBJbmRleCBBTXMgdGhhdCB1c2VzIGJhdGNo ZXMgc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSBhbnkgb2YKKyAqIHRo ZWlyIGFtZ2V0YmF0Y2gsIGFtZ2V0Yml0bWFwLCBhbmQgYW1mcmVlYmF0Y2ggcm91dGluZXMuCisg Ki8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJQXNzZXJ0KGJhdGNoLT5idWYgPT0gSW52YWxpZEJ1 ZmZlcik7CisKKwlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSkKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggc2Nh biBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQlp ZiAoc2Nhbi0+YmF0Y2hxdWV1ZS0+ZmluaXNoZWQpCisJCXsKKwkJCS8qIERvbid0IGJvdGhlciB1 c2luZyBjYWNoZSB3aGVuIHNjYW4gaXMgZW5kaW5nICovCisJCQlwZnJlZShiYXRjaCk7CisJCQly ZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBVc2UgY2FjaGUuICBUaGlzIGlzIGdlbmVyYWxseSBv bmx5IGJlbmVmaWNpYWwgd2hlbiB0aGVyZSBhcmUgbWFueQorCQkgKiBzbWFsbCByZXNjYW5zIG9m IGFuIGluZGV4LgorCQkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hF X0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldID09 IE5VTEwpCisJCQl7CisJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLworCQkJ CXNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldID0gYmF0Y2g7CisJCQkJcmV0dXJuOworCQkJfQor CQl9CisKKwkJLyoKKwkJICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNsb3QgZm9yIHRoaXMgYmF0 Y2guICBXZSdsbCBqdXN0IGZyZWUgaXQKKwkJICogb3Vyc2VsdmVzLiAgVGhpcyBpc24ndCByZWFs bHkgZXhwZWN0ZWQ7IGl0J3MganVzdCBkZWZlbnNpdmUuCisJCSAqLworCQlpZiAoYmF0Y2gtPmtp bGxlZEl0ZW1zKQorCQkJcGZyZWUoYmF0Y2gtPmtpbGxlZEl0ZW1zKTsKKwkJaWYgKGJhdGNoLT5j dXJyVHVwbGVzKQorCQkJcGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOworCX0KKwllbHNlCisJewor CQkvKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpOworCQlB c3NlcnQoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCk7CisJfQorCisJLyogbm8gZnJlZSBzbG90 IHRvIHNhdmUgdGhpcyBiYXRjaCAoZXhwZWN0ZWQgd2l0aCBhbWdldGJpdG1hcCBjYWxsZXJzKSAq LworCXBmcmVlKGJhdGNoKTsKK30KKworc3RhdGljIHZvaWQKK2JhdGNoX2RlYnVnX3ByaW50X2Jh dGNoZXMoY29uc3QgY2hhciAqbGFiZWwsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBJ TkRFWEFNX0RFQlVHCisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7 CisKKwlpZiAoIXNjYW4tPmJhdGNocXVldWUpCisJCXJldHVybjsKKworCWlmICghQW1SZWd1bGFy QmFja2VuZFByb2Nlc3MoKSkKKwkJcmV0dXJuOworCWlmIChJc0NhdGFsb2dSZWxhdGlvbihzY2Fu LT5pbmRleFJlbGF0aW9uKSkKKwkJcmV0dXJuOworCisJREVCVUdfTE9HKCIlczogYmF0Y2hlcyBo ZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIiwKKwkJCSAgbGFiZWwsCisJCQkgIGJhdGNocXVldWUt PmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKworCWZvciAoaW50IGkgPSBiYXRj aHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJ CUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBpKTsKKworCQlE RUJVR19MT0coIiAgICBiYXRjaCAlZCBjdXJyUGFnZSAldSAlcCBmaXJzdEl0ZW0gJWQgbGFzdEl0 ZW0gJWQga2lsbGVkICVkIiwKKwkJCQkgIGksIGJhdGNoLT5jdXJyUGFnZSwgYmF0Y2gsIGJhdGNo LT5maXJzdEl0ZW0sCisJCQkJICBiYXRjaC0+bGFzdEl0ZW0sIGJhdGNoLT5udW1LaWxsZWQpOwor CX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29u LmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4IGUyOWMw MzA4OS4uYzAxZmZmNzA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVz b24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01 LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAog ICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggYThkNTZmZTVhLi5lY2RiMDIxZTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDMzLDYgKzEwMzMsOSBAQCBfYnRfcmVs YnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQgd2l0aG91 dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExvY2tCdWZm ZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgog ICoKKyAqIE5vdGU6IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgaGFzIHNpbWlsYXIgVmFsZ3Jp bmQgYnVmZmVyIGxvY2sKKyAqIGluc3RydW1lbnRhdGlvbiwgd2hpY2ggd2UgcmVseSBvbiBoZXJl LgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3 aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVpcmVkIGlu IF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRleCBhYzY3YjZmN2EuLjMyNjlhOWJjZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBl ZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQg YnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7 CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJ LyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyog TG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7 CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmlu YWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCAr NjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1 cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0 YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0J CQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJ X2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJ CQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBU aWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf c2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJ CSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlk LCBpbnQgdHVwbGVPZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJhdGNoSW5kZXhT Y2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7Citz dGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwg aW50IGl0ZW1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldE51 bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7 CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCYXRjaEluZGV4U2NhbiBu ZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCBiYXNl T2Zmc2V0KTsKIHN0YXRpYyBib29sIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBC VFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwgYm9vbCBhcnJheUtleXMsCiAJCQkJCQkgIEluZGV4VHVw bGUgdHVwbGUsIGludCB0dXBuYXR0cyk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2tfY29tcGFyZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTExLDE1ICsxMTEsMTUg QEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAKIAogLyoKLSAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1 cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfYnRfcmVhZHBhZ2UoKSAtLSBM b2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBuZXdiYXRjaC4KICAqCi0gKiBD YWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgc28tPmN1cnJQb3MuYnVmOyB0 aGUgYnVmZmVyJ3Mgc3RhdGUKLSAqIGlzIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBjdXJyUG9z Lm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKLSAqIHRoZXkgYXJlIHVwZGF0 ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIHNvLT5jdXJyUG9zIGFyZQot ICogaW5pdGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCisgKiBDYWxsZXIgbXVzdCBoYXZlIHBp bm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUgaXMK KyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBwb3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBt dXN0IGJlIHZhbGlkOyB0aGV5IGFyZQorICogdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBv dGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlIGluaXRpYWxpemVkIGZyb20KKyAqIHNjcmF0Y2gg aGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVt IGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1h dGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBk aXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4g bmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRl KSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4g YmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24K ICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3 aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsOCArMTMxLDggQEAgc3RhdGljIGJvb2wgX2J0 X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1 cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBp ZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkK K19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNo LCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0 cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTE0NCwzNyArMTQ0LDMy IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBP ZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJvb2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVk X3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwK KwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdl L2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlw YWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlz by0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1 Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3Vy clBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28t PmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXBzdGF0 ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zm c2V0ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJH ZXRCbG9ja051bWJlcihuZXdiYXRjaC0+YnVmKTsKKwluZXdiYXRjaC0+cHJldlBhZ2UgPSBvcGFx dWUtPmJ0cG9fcHJldjsKKwluZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsK Kwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3JlUmln aHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8K LQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJp Z2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikgPyBuZXdiYXRjaC0+bW9yZVJpZ2h0IDogbmV3YmF0Y2gtPm1vcmVMZWZ0 KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKIAlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbikKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJl YWQgYnkgb3RoZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9z Lm5leHRQYWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFs bGVsX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gtPm5leHRQYWdlLCBuZXdiYXRjaC0+Y3VyclBhZ2Up OwogCQllbHNlCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5wcmV2 UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9y ZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5wcmV2UGFnZSwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9 CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54 c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBuZXdiYXRjaC0+Y3VyclBhZ2Us IHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCS8qIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzICov CiAJaW5kbmF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbCk7CkBA IC0xODIsNyArMTc3LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJbWlub2ZmID0gUF9GSVJTVERBVEFL RVkob3BhcXVlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwogCi0J LyogaW5pdGlhbGl6ZSBwYWdlLWxldmVsIHN0YXRlIHRoYXQgd2UnbGwgcGFzcyB0byBfYnRfY2hl Y2trZXlzICovCisJLyogaW5pdGlhbGl6ZSByZW1haW5pbmcgcGFnZS1sZXZlbCBzdGF0ZSAqLwog CXBzdGF0ZS5taW5vZmYgPSBtaW5vZmY7CiAJcHN0YXRlLm1heG9mZiA9IG1heG9mZjsKIAlwc3Rh dGUuZmluYWx0dXAgPSBOVUxMOwpAQCAtMjEyLDExICsyMDcsMTAgQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0s CiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0 dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2Nh biBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQkJ CW5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRy dWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3By aW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBh Z2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNo LT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjgg KzI3NCwyOCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4 Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJ CQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qCiAJCQkJCSAqIFNldCB1cCBzdGF0ZSB0byBy ZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmlyc3QKIAkJCQkJICogVElECiAJCQkJ CSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28s IGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBv c3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJ CQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQkvKiBS ZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJl ZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0 aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVt KG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBv c3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJh c2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zNDEsMTIg KzMzNSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVl c2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1v cmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVl UGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJ dGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3 YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAt IDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjMsMTEgKzM1NiwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1 cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2Fu IGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQlu ZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7 CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2Up OworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5j dXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjgsMTEgKzQ2 MCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJ CQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVt LCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwg aXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaW50CQkJ dHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyoKIAkJCQkJICog U2V0IHVwIHN0YXRlIHRvIHJldHVybiBwb3N0aW5nIGxpc3QsIGFuZCByZW1lbWJlciBmaXJzdApA QCAtNDg1LDE3ICs0NzcsMTcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSAqIGFzc29jaWF0ZWQg d2l0aCB0aGUgc2FtZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAJCQkJCSAqLwogCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBw b3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJU cmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJ CQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQkvKiBSZW1lbWJlciBhZGRpdGlvbmFs IFRJRHMgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3Rpbmco aXR1cCk7IGkrKykKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBv c3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0 ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0 UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJ YmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MTEsMTIgKzUwMywxMSBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0YXRl LmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQluZXdi YXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwotCQlz by0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVt ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1h eFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4 OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9CiAK IAkvKgpAQCAtNTMzLDcgKzUyNCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFzc2VydCgh cHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0 ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZpcnN0SXRl bSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAzNiw5MCArMTAyNyw5MyBA QCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g bmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRlbShC VFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwg SW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBp bnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1cCwg aW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3Vy clBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVw KSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9 IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28t PmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFy cmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAtPnRfdGlk OworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJ aWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBs ZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4 dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBs ZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsg KnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04o aXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMg ZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXgg aXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0g KiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3Ig cG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3Rp bmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRl bUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNv bmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisg KiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9m ZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBh dCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0 dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5l ZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3Rp bmdpdGVtcyhCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisJCQkJ CSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGlu Z0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRy ZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlk OwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMp CisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJaXRl bS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJ aWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUg KHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlp dHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBN QVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5u ZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsg c28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVw bGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsg KnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVu c2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFz ZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7 Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNl dCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJu IGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBh biBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVu dCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVt SW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhh dCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3Vy cmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZh bHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3Nl cyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9p ZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9m ZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9m ZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGludCBp dGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQs IGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwot CWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlkID0gKmhlYXBU aWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgt b25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQK IAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlp ZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0 OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNl T2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAg LTI4MzEsMTMgKzI4MjUsMTMgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBXZSBtYWtlIGEg c29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAq IGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBv ZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNj aGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEg cGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIHdoZW5ldmVy IGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBzdGF0ZS0+ZGly LgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRw YWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0 IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJ X2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdl KTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBh Z2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8K IAlyZXR1cm4gZmFsc2U7CkBAIC0yOTIyLDE0ICsyOTE2LDYgQEAgX2J0X2FkdmFuY2VfYXJyYXlf a2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkg KiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRp YXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxsZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUg YXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQogCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNvdWxkIG92ZXJsb29rIG1hdGNoaW5n IHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGdldHMgcmV2ZXJzZWQganVzdCBi ZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0bwotCSAqIHJldHVybiwgYnV0IGp1 c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkg KiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4gIFdoZW4gd2UncmUgb24gdGhlIGZp bmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+Y3VyclBvcyB0byBnZXQgaW52YWxp ZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiByZXR1cm5zIGZhbHNlLCB3aGljaCds bCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0 IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2 ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCAyMTFlMjBlYmMuLjdkMzZmM2I5YyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTksMTEgKzE1OSwxMiBAQCBidGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRq dXN0bWVtYmVyczsKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW47CiAJYW1y b3V0aW5lLT5hbXJlc2NhbiA9IGJ0cmVzY2FuOwotCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGJ0 Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFt Z2V0YmF0Y2ggPSBidGdldGJhdGNoOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2ggPSBidGZyZWVi YXRjaDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXA7CiAJYW1yb3V0aW5l LT5hbWVuZHNjYW4gPSBidGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBidG1hcmtw b3M7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gYnRyZXN0cnBvczsKKwlhbXJvdXRpbmUtPmFt cG9zcmVzZXQgPSBidHBvc3Jlc2V0OwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2Nh biA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW47CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNj YW4gPSBidGluaXRwYXJhbGxlbHNjYW47CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0g YnRwYXJhbGxlbHJlc2NhbjsKQEAgLTIyMSwxMyArMjIyLDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9u IHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBs ZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAt LSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8K LWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK K0JhdGNoSW5kZXhTY2FuCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRl eFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlCYXRjaEluZGV4 U2NhbiBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9 IE5VTEwpOwogCkBAIC0yNDIsNDQgKzI0MywxOCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24u ICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCiAJCSAqIF9idF9maXJzdCgpIHRv IGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJ aWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQll bHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhl IHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJp b3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRl ci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0 IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51 bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxs ZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJ CSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRo Ci0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwg YnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJ ICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRl bXMgPSAoaW50ICopCi0JCQkJCQlwYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihp bnQpKTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJ CXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4 OwotCQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoK LQkJCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQo c2NhbiwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4u LiAqLwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4g Ki8KKwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdl IG5lZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1B cnJheUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOwor CXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI4OSw2ICsyNjQsNyBAQCBpbnQ2NAogYnRnZXRi aXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmF0Y2hJbmRleFNjYW4gYmF0 Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKIAlJdGVtUG9pbnRlciBoZWFwVGlkOwogCkBAIC0yOTcs MjkgKzI3MywyOSBAQCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAq dGJtKQogCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9ybXMgYW5vdGhlciBwcmltaXRpdmUg aW5kZXggc2NhbiAqLwogCWRvCiAJewotCQkvKiBGZXRjaCB0aGUgZmlyc3QgcGFnZSAmIHR1cGxl ICovCi0JCWlmIChfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQorCQkvKiBG ZXRjaCB0aGUgZmlyc3QgYmF0Y2ggKi8KKwkJaWYgKChiYXRjaCA9IF9idF9maXJzdChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbikpKQogCQl7Ci0JCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29u dGludWUgc2Nhbm5pbmcgKi8KLQkJCWhlYXBUaWQgPSAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJCWlu dAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJ CWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCXRibV9hZGRf dHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7 OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFn ZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0 KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQ b3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXpl ZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7 CiAJCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAo IV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJaXRlbUluZGV4ID0g MDsKKwkJCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0 Y2gpOworCQkJCQlpZiAoIWJhdGNoKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCi0JCQkJLyogU2F2 ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQkJaGVhcFRpZCA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdLmhlYXBUaWQ7CisJCQkJaGVhcFRp ZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJCXRibV9hZGRfdHVwbGVz KHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOwogCQkJCW50aWRzKys7CiAJCQl9CkBAIC0zNDcsOCAr MzIzLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gKEJUU2Nhbk9w YXF1ZSkgcGFsbG9jKHNpemVvZihCVFNjYW5PcGFxdWVEYXRhKSk7Ci0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJ aWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBh bGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBA IC0zNjIsMTkgKzMzNiw4IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0 ID0gTlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8K LQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhl ciB0aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRl IHRoZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ug c2V0IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5v dCwgc2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1h cmtUdXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KHJlbCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsKTsKIAogCXJldHVybiBzY2FuOwogfQpAQCAtMzg4LDgyICszNTEsMzcg QEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9w IHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwot CQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBk cm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBh dm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhl IHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZp bmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3Mg YWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25h cHNob3QuCi0JICoKLQkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNt IHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBo YXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUg c2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hl biBzY2FubmluZwotCSAqIHVubG9nZ2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2 aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRy b3BwaW5nIGR1cmluZyB1bmxvZ2dlZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMg aXMgcHJlZmVyYWJsZSB0byBvcHRpbmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBz ZXR0aW5nKS4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlu cyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBm b3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3 YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5n IHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5n IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQ aW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBp biA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+ eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0 aW9uKSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJr SXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVo aW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJr UG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVl ZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBh IHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwg Ym90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0 aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICoKLQkgKiBOT1RF OiB0aGlzIGRhdGEgc3RydWN0dXJlIGFsc28gbWFrZXMgaXQgc2FmZSB0byByZXR1cm4gZGF0YSBm cm9tIGEKLQkgKiAibmFtZSIgY29sdW1uLCBldmVuIHRob3VnaCBidHJlZSBuYW1lX29wcyB1c2Vz IGFuIHVuZGVybHlpbmcgc3RvcmFnZQotCSAqIGRhdGF0eXBlIG9mIGNzdHJpbmcuICBUaGUgcmlz ayB0aGVyZSBpcyB0aGF0ICJuYW1lIiBpcyBzdXBwb3NlZCB0byBiZQotCSAqIHBhZGRlZCB0byBO QU1FREFUQUxFTiwgYnV0IHRoZSBhY3R1YWwgaW5kZXggdHVwbGUgaXMgcHJvYmFibHkgc2hvcnRl ci4KLQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBvbmx5IHJldHVybiBkYXRhIG91dCBvZiB0dXBsZXMg c2l0dGluZyBpbiB0aGUKLQkgKiBjdXJyVHVwbGVzIGFycmF5LCBhIGZldGNoIG9mIE5BTUVEQVRB TEVOIGJ5dGVzIGNhbiBhdCB3b3JzdCBwdWxsIHNvbWUKLQkgKiBkYXRhIG91dCBvZiB0aGUgbWFy a1R1cGxlcyBhcnJheSAtLS0gcnVubmluZyBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgZm9yCi0JICog YSBTSUdTRUdWIGlzIG5vdCBwb3NzaWJsZS4gIFllYWgsIHRoaXMgaXMgdWdseSBhcyBzaW4sIGJ1 dCBpdCBiZWF0cwotCSAqIGFkZGluZyBzcGVjaWFsLWNhc2UgdHJlYXRtZW50IGZvciBuYW1lX29w cyBlbHNld2hlcmUuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1 cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxD S1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0J fQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYg c2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXks IHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJp bVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURp ckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJl cHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRv ICovCiB9CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2ggcmVzb3VyY2VzLCBp bmNsdWRpbmcgaXRzIGJ1ZmZlciBwaW4KKyAqLwordm9pZAorYnRmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAoYmF0Y2gtPm51bUtpbGxl ZCA+IDApCisJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFzY2FuLT5iYXRj aHF1ZXVlLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBkaWRu J3QgdW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1ZmZlcihiYXRj aC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkg LS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDcyLDExNiArMzkwLDQ4IEBAIGJ0ZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3Ms IGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2ls bGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9 Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28t Pm1hcmtQb3MpOwotCi0JLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJB TSBpcyBhYm91dCB0byBiZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlm IChzby0+a2V5RGF0YSAhPSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFy cmF5S2V5cyBhbmQgc28tPm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChz by0+YXJyYXlDb250ZXh0ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5 Q29udGV4dCk7Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2ls bGVkSXRlbXMpOwotCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3Vy clR1cGxlcyk7Ci0JLyogc28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUg YnRyZXNjYW4gKi8KIAlwZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZl IGN1cnJlbnQgc2NhbiBwb3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2Nh bidzIGFycmF5IGtleXMKICAqLwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK K2J0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gp CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0J LyogVGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8K LQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJh eUtleXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRl bUluZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFz aW5nIHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBv ZgotCSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBl bnMpIHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBk b24ndCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byBy ZXN0b3JlIGEgbWFyayBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQg YmF0Y2guICBSZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJ ICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1J bmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2Fu LCBtYXJrYmF0Y2gtPmRpcik7CisKKwkvKgorCSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0 ZSBhbGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgorCSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGlu ZyBuZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBt b3JlTGVmdCwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRp bWUKKwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3Ig dG8gdGhlIGxlZnQpLiAgQXQgdGhhdAorCSAqIHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3Rv cmUgdGhlIHNjYW4ncyBhcnJheXMgdG8gZWxlbWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFj ayB0aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24gaW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAq LworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG1hcmtiYXRjaC0+ZGlyKSkKKwkJbWFya2Jh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUo c28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAq CWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICov Ci12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5k ZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5l dyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1J bmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0 aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5j dXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkv KgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciBy ZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdl LiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBz dGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBt dXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBr aWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0K LQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAg cGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0J CQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZD b3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJr UG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAg c28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNv LT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMs Ci0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUg c2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChz by0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNv LT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9 Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJbWFy a2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNv LT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0K IAogLyoKQEAgLTg5NywxNSArNzQ3LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRl c2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVm dC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRw YWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2Vu ZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5s ZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0 X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUo c28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJp Z2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDU1LDggKzg5Niw2IEBA IF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRl c2MgYnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJU U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24t cGFyYWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCA3ZmNkN2U5NGUuLjJjM2Rj OTg3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNSw1MiArMjUs MjEgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsK IHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBy ZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUs IEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVy IF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7 CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBw YWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBf YnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0 aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9m ZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMg Ym9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxr bm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGly LAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgQmF0Y2hJbmRleFNjYW4gX2J0X3JlYWRm aXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoLAor CQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRp YyBCYXRjaEluZGV4U2NhbiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxv Y2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAor CQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBC dWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJl ciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGlj IGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwotCi0KLS8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9j ayBzby0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4s IHRvby4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcg b24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9i dF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykK LXsKLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3Qg dGhlIHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJl dHVybjsKLQl9Ci0KLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkg KgotCSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMg aGFzIGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0JQXNzZXJ0KFJlbGF0 aW9uTmVlZHNXQUwocmVsKSk7Ci0Jc28tPmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWlj KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0J c28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLX0KK3N0YXRpYyBCYXRjaEluZGV4U2Nh biBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJ CQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCk7CiAKIC8qCiAgKglfYnRfc2VhcmNo KCkgLS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKQEAgLTg2MCwy MCArODI5LDE2IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKICAqCQljb25kaXRpb25zLCBh bmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKICAqCQlp ZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2Zp ZXMgdGhlCiAgKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBl eGl0LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhh cyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2Nr cyBhbmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAq CQlzby0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBw aW4uCi0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBz Y2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBo YXMgYmVlbiBsb2FkZWQgaW50byB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKgotICogSWYgdGhlcmUg YXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRo IG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZh bGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2Ug anVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBhbmQg dGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICogYXJlIGJvdGggc2Vh cmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlIGFib3V0IHRoaXMp LgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0aW9u LXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBvc2l0 aW9uLgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKQEAgLTg4Nyw4ICs4NTIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFs aWRTdHJhdGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJ CQlsYXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSk7CisJQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUg c2NhbiBrZXlzIGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhl CkBAIC05MTMsNyArODc3LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgog CQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIHRydWUp KQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBmYWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRvbmUg KHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhl IHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBA IC05MzAsMTQgKzg5NCw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1 cyAobm90IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxl bF9zY2FuICE9IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQo Ymxrbm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8s IGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3Jl dHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4 dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoK QEAgLTEyMjksNiArMTE4NywxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkJfQogCX0KIAorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBi YXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4 VElEc1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQkgIHNjYW4tPnhzX3dhbnRfaXR1cCk7CisKIAkv KgogCSAqIElmIHdlIGZvdW5kIG5vIHVzYWJsZSBib3VuZGFyeSBrZXlzLCB3ZSBoYXZlIHRvIHN0 YXJ0IGZyb20gb25lIGVuZCBvZgogCSAqIHRoZSB0cmVlLiAgV2FsayBkb3duIHRoYXQgZWRnZSB0 byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXksIGFuZCBzY2FuIGZyb20KQEAgLTEyMzcsNyArMTE5OSw3 IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAq IE5vdGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhl IHBhcmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5k cG9pbnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0 YmF0Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3 aXRoaW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTA1LDEyICsxNDY3LDEyIEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9u IG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0 X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOwor CXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYs IEJUX1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4g Ki8KIAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3Vy clBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJ QXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUyNiwxMSArMTQ4OCwxMSBAQCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xh dGlvbklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWws IHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZp bnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQkJc3RhY2sgPSBfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAJCQlfYnRf ZnJlZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewogCQkJ X2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xNTM4LDExICsx NTAwLDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8K LQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJ b2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBmaXJzdGJhdGNoLT5idWYpOwogCiAJ LyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVz dWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBj dXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkg PSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0 aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBA IC0xNTYwLDE2OCArMTUyMiw2OSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNr ZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBp dHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwot CWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFs c2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJu IF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAog LyoKICAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgogICoKLSAq CQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNo IG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0 ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5l ZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2Fz IGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBi YXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIHBhZ2Ug dG8gcmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVw ZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0 ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KKyAq CQlPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJl IGF0IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAo ZWxzZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5v IG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3Rp bGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcg ZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcg aW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1 cGxlcyksIHdlIHJldHVybiBOVUxMLiAgSXQnbGwgc3RpbGwgYmUKKyAqCQlwb3NzaWJsZSBmb3Ig dGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sIHRob3VnaAor ICoJCXdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVj dGlvbi4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkg KiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdzIG5v IG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCi0JICov Ci0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJy UG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9z dGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0J ewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0p Ci0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNl OwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwot fQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNb c28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0 aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICov Ci1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRf cmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3Vy clBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1 cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUg Y29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYg KHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3Vy clR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBh Z2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4K LSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBz dGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3Mg bXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2 ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBi ZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwg YmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9z dGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRl eFNjYW4KK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEJh dGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3RjdXJyYmxr bm87CiAKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyogQmVm b3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwot CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQotCS8qCi0J ICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRh IGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgotCSAqLwot CWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4gb24gY3VycmVu dCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYgKEJUU2NhblBv c0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBv cy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0JCQkgICBvZmZz ZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQb3MubGFzdEl0 ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBsZXMpCi0JCQlt ZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNvLT5jdXJyUG9z Lm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRl bUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAqIElmIHdlJ3Jl IGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkJICog KHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQgbmVlZHMgdG8g c2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIG1v cmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGN1cnJl bnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIgYmUgdGFrZW4g dG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVuZGVkCi0JCSAq ICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFuZGxlIHRoaXMg Y2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAqIG1hcmtQb3Mg c3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRlIGxpa2UgdGhp cwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3QgdW5zZXQgbWFy a1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGljaGV2ZXIgbWln aHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyByZXNldCB0aGUg c2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgotCQkgKiBJbiBl ZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVwIHRvIHRoZSBm aXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBhZnRlciBpdCBo YXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmltU2NhbikKLQkJ ewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGlyKSkKLQkJCQlz by0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5tYXJrUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3VwcG9ydGVkIGJ5 IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nhbik7Ci0JfQot Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJQXNzZXJ0KEJsb2NrTnVt YmVySXNWYWxpZChwcmlvcmJhdGNoLT5jdXJyUGFnZSkpOwogCiAJLyogV2FsayB0byB0aGUgbmV4 dCBwYWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0J CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4 dFBhZ2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJy Ymxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2 UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gcHJpb3JiYXRjaC0+Y3VyclBhZ2U7CiAKIAkvKgogCSAq IENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRo ZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0 aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5n IGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMg YXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJ ICogX2J0X3JlYWRwYWdlIGZvciBwb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJl Y3Rpb24gdG8gdGhlIG9uZQorCSAqIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mg b2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5IGtleXMKKwkgKiBhcy1pcywgc2luY2UgdGhl IG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKIAkgKi8KLQlpZiAoc28tPmN1 cnJQb3MuZGlyICE9IGRpcikKKwlpZiAocHJpb3JiYXRjaC0+ZGlyICE9IGRpcikKIAkJc28tPm5l ZWRQcmltU2NhbiA9IGZhbHNlOwogCisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFwcmlvcmJhdGNoLT5tb3JlUmlnaHQgOiAhcHJp b3JiYXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCBfYnRfcmVhZHBh Z2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28t Pm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0 KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0K KworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtu byAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxl bF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBO VUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCiAJcmV0 dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFs c2UpOwogfQogCisKIC8qCiAgKglfYnRfcmVhZGZpcnN0cGFnZSgpIC0tIFJlYWQgZmlyc3QgcGFn ZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9idF9maXJzdAogICoKQEAgLTE3MzEsNzMgKzE1 OTQsOTAgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVj a2tleXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVs bCBkZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBh bmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0 Y2ggbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAq IFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBj YWxsaW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJy UG9zIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1 cGRhdGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRp bmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBh Z2UgZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRp Y2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4g ZGlyZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFs bGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdl J2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwot c3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgQmF0Y2hJbmRleFNjYW4K K19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gZmly c3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQog ewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9j a051bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7 CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0 byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBh Z2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBv c2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsK IAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0g dHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9y ZUxlZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVl ZFByaW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWZp cnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWZp cnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFs c2U7CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20g dGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmlu aXNoIGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBf YnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxk cy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdo ZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIs IG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIs IG9mZm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwotCi0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChh bmQgbWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9u IGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBv ciBtb3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVtc1tdICovCisJCWluZGV4YW1fdXRpbF9i YXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0K IAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBz by0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNv LT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9u IHRoZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBmaXJzdGJhdGNo LT5idWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9i dF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICov Ci0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdh bGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxr bm8gPSBmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gZmlyc3RiYXRjaC0+ Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNv LT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRj aC0+ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6ICFmaXJzdGJh dGNoLT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBj YWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVl ZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJ CSAqLworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJ X2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4YW1f dXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2Nh biBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBh cmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtu bywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYg c28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFn ZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0x ODA3LDEwMiArMTY4Nyw2OSBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1z YXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2Ug dGhhdAogICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdh cyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdl IHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhl IGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJy UG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxr bm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3Igc2NhbiBw b3NpdGlvbidzIG5leHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gc2NhbgorICogZGly ZWN0aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIHBvc2l0aW9uJ3MgY3VyclBh Z2UuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2NrZWQgYnkg Y2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIvdW5waW5u ZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdvbid0 IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVsIHNj YW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZSBz aG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBhbmQgbGFz dGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNlaXpl ZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0YWtl biBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28tPmN1cnJQ b3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9ZmFs c2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UKLSAq IHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdoLiAg V2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBzZWl6aW5n IHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVhZHkgYmUg YmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxsZWwg c2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3VyclBvcy5w cmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBvcy5tb3Jl UmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBPbiBlbnRy eSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBzdWNjZXNz IGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20gdGhlIG5l eHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQgYSBw aW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5nIHNvLT5k cm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJseSB0byBh dm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHNjYW4g YmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQKKyAqIGludGVyZXN0aW5nIHBhZ2Uu ICBXZSBob2xkIGEgcGluIG9uIHRoZSBidWZmZXIgb24gc3VjY2VzcyBleGl0IChleGNlcHQKKyAq IGR1cmluZyBkcm9wUGluIHBsYWluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbiBl YWdlcmx5IHRvIGF2b2lkCisgKiBibG9ja2luZyBWQUNVVU0pLiAgSWYgdGhlcmUgYXJlIG5vIG1v cmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4KKyAqIGRpcmVjdGlvbiwgd2UganVzdCBy ZXR1cm4gTlVMTC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRz IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJyUG9zICh3 aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0dXJuIGZh bHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNj YW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNh bGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBhcmFsbGVs IHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBi bGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNj YW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxlLgogICov Ci1zdGF0aWMgYm9vbAorc3RhdGljIEJhdGNoSW5kZXhTY2FuCiBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVtYmVyIGxh c3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkgQmxvY2tO dW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKQog ewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhTY2FuIG5ld2JhdGNo OwogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2Vp emVkKTsKLQlBc3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFC VFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBu ZXh0IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbiwg TWF4VElEc1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQlzY2FuLT54c193YW50X2l0dXApOwogCiAJ LyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25v LCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBh IHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIHBvcyBpcyB0aGUg Zmlyc3QgdmFsaWQgcGFnZSB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBvZgorCSAqIGxh c3RjdXJyYmxrbm8uICBBbHNvIHByb3Zpc2lvbmFsbHkgYXNzdW1lIHRoYXQgdGhlcmUnbGwgYmUg YW5vdGhlciBwYWdlCisJICogd2UnbGwgbmVlZCB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0 KSBhaGVhZCBvZiBfYnRfcmVhZHBhZ2UgY2FsbC4KIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JZWxzZQotCQlz by0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCW5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7 CisJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJ cGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8 Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9y ZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQg X2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlB c3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsK LQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2Rv bmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2Fu IG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFz ZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVs X3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyog d2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJl ZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZh bHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQ cmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQ X05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8q IHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBi bGtubywgQlRfUkVBRCk7CisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25v LCBCVF9SRUFEKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5n IHJhY2UgKGFsc28gY2hlY2tzIGZvciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVm ID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCi0JCQkJCQkJCQkJCQkJ CSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZl cikKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZi bGtubywKKwkJCQkJCQkJCQkJCQkgICBsYXN0Y3VycmJsa25vKTsKKwkJCWlmIChuZXdiYXRjaC0+ YnVmID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25j dXJyZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1 cm4gZmFsc2U7CisJCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gp OworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo c28tPmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7 CiAJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtubyA9IGJs a25vOwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTAsMTcgKzE3NTcs MTcgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJs a25vLAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBhZ2UgKi8K IAkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyogbm90ZSB0 aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAo X2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2VpemVkKSkK KwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQX0ZJ UlNUREFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9 IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPm5leHRQYWdlOwog CQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9y ZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwg UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRw YWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVy KHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9z LnByZXZQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJ CWVsc2UKQEAgLTE5MzUsMTkgKzE3ODIsMzkgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVw bGVzIG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsK LQkJc2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1 cykgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIG5ld2JhdGNoLT5idWYpOworCQluZXdiYXRjaC0+YnVm ID0gSW52YWxpZEJ1ZmZlcjsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVj dGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSA/CisJCQkgIW5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhbmV3YmF0Y2gtPm1vcmVM ZWZ0KSkKKwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNj YW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3 YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlf YnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNj YW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2Nh biBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5w YXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJs a25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNv LT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7 CQkvKiBuZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVh ZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0J ICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmlu ZyB0dXBsZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsK LQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2Nr X2FuZF9tYXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gbmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChuZXdiYXRjaC0+Y3Vy clBhZ2UgPT0gYmxrbm8pOworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0 Y2gpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3 MCwyNSArMjAzNywyMyBAQCBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxl dmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUg c2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMg YXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9l bmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEJh dGNoSW5kZXhTY2FuCitfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0 TnVtYmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0JQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhl IGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAog CSAqIHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9i dF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlm aXJzdGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklz QmFja3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkK KwlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVt cHR5IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBs b2NrCkBAIC0yMTk5LDcgKzIwNjQsNyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoZmlyc3Ri YXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBf SVNMRUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI1LDkgKzIwOTAsNSBAQCBfYnRfZW5kcG9pbnQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRh dGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFk Zmlyc3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0 dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3Rw YWdlKHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR1dGlscy5jCmluZGV4IDMzYjBlNDA1NS4uMDk3MWM2ODg5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jCkBAIC0xNjEsNzMgKzE2MSw2OSBAQCBfYnRfZnJlZXN0YWNrKEJU U3RhY2sgc3RhY2spCiAgKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0 ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0b2xkIHVzIHdlcmUga2lsbGVkCiAgKgot ICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMg aW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMg dGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28t Pm51bUtpbGxlZCA+IDApLgorICogVGhlIGJhdGNoIHBhcmFtZXRlciBjb250YWlucyBpbmZvcm1h dGlvbiBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCBraWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9u ICh0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBiYXRjaC0+bnVtS2lsbGVkID4gMCkuCiAg KgotICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHNvLT5jdXJyUG9zIHBh Z2UsIGJ1dCBtdXN0IGhvbGQgYQotICogYnVmZmVyIHBpbiB3aGVuICFzby0+ZHJvcFBpbi4gIFdo ZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQuCi0gKiBJdCdsbCBjb250aW51 ZSB0byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCisg KiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgYmF0Y2ggcG9zaXRpb24ncyBw YWdlLCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZlciBwaW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4g d2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQuICBJdCdsbAorICogY29udGludWUg dG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoK ICAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0 aGUgcmlnaHQgb25lcyB0byBzZXQKICAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhh dCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCiAgKiBjb250aW51b3VzbHkg ZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5j dGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhh dmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCisgKiAoaWYgaXQgaXMgYSAhZHJvcFBpbiBzY2Fu KSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQogICogcGFnZSwg c28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVy ZSdzIG5vIHJpc2sKICAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0 IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECiAgKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVw bGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKICAqIHBh Z2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVy IHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0 IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgorICogKGkuZS4gZHJvcFBpbiBzY2Fu cyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24K ICAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9idF9y ZWFkcGFnZSBzYXcgdGhlIHBhZ2UuCiAgKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBM UF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KICAqCi0gKiBXZSBnaXZlIHVw IG11Y2ggbGVzcyBvZnRlbiBkdXJpbmcgIXNvLT5kcm9wUGluIHNjYW5zLCBidXQgaXQgc3RpbGwg aGFwcGVucy4KKyAqIFdlIHRlbmQgdG8gZ2l2ZSB1cCBsZXNzIG9mdGVuIGR1cmluZyAhZHJvcFBp biBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCiAgKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hl cmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCiAgKiBp dGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwg ZmFpbCB0byBmaW5kIGl0CiAgKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgogICovCiB2b2lkCi1f YnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19idF9raWxsaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVt YmVyIG1pbm9mZjsKIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNv LT5udW1LaWxsZWQ7CisJaW50CQkJbnVtS2lsbGVkID0gYmF0Y2gtPm51bUtpbGxlZDsKIAlib29s CQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKIAlCdWZmZXIJCWJ1ZjsKIAogCUFzc2VydChudW1L aWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUFz c2VydChCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQYWdlKSk7CiAJQXNzZXJ0KHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2NhbiAq LwogCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZp bmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKKwkvKiBBbHdheXMgaW52YWxp ZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgZnJlZWluZyBiYXRjaCAqLworCWJhdGNo LT5udW1LaWxsZWQgPSAwOwogCi0JaWYgKCFzby0+ZHJvcFBpbikKKwlpZiAoIXNjYW4tPmJhdGNo cXVldWUtPmRyb3BQaW4pCiAJewogCQkvKgogCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0 aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAogCQkgKiBzbyBhbGwgd2Ug bmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCiAJCSAq IGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhl IHBhZ2UuCiAJCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsK LQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYgPSBiYXRjaC0+YnVmOwogCQlfYnRfbG9j a2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7CiAJfQogCWVsc2UKIAl7CiAJCVhMb2dSZWNQdHIJbGF0 ZXN0bHNuOwogCi0JCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAkJ QXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBz by0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7CisJCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBi YXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOwogCiAJCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0 b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlm IChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQorCQlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBs YXRlc3Rsc24pOworCQlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCiAJCXsKIAkJCS8qIE1v ZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KIAkJCV9idF9yZWxidWYocmVsLCBidWYpOwpA QCAtMjQ0LDEyICsyNDAsMTEgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAK IAlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQogCXsKLQkJaW50CQkJaXRlbUlu ZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Qb3NJdGVtICpraXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+a2ls bGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNb aXRlbUluZGV4XTsKIAkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsK IAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAg aXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+ PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCQlp ZiAob2ZmbnVtIDwgbWlub2ZmKQogCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLwog CQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKQEAgLTI3NCw3ICsyNjksNyBAQCBfYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkgKiBjb3JyZWN0bmVzcy4KIAkJCQkgKgogCQkJ CSAqIE5vdGUgdGhhdCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFsbW9zdCBh bnkgd2F5Ci0JCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFzby0+ZHJvcFBp biBjYXNlKSwgc28gaXQncworCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAh ZHJvcFBpbiBjYXNlKSwgc28gaXQncwogCQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBwb3N0aW5n IGxpc3QgdHVwbGUgd2Fzbid0IGEgcG9zdGluZyBsaXN0CiAJCQkJICogdHVwbGUgd2hlbiB3ZSBm aXJzdCBlbmNvdW50ZXJlZCBpdHMgaGVhcCBUSURzLgogCQkJCSAqLwpAQCAtMjkwLDcgKzI4NSw4 IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCQkgKiB0aG91Z2ggb25s eSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHBhZ2UgY2FuJ3QKIAkJCQkJICogaGF2ZSBi ZWVuIGNvbmN1cnJlbnRseSBtb2RpZmllZAogCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5p bmRleE9mZnNldCA9PSBvZmZudW0gfHwgIXNvLT5kcm9wUGluKTsKKwkJCQkJQXNzZXJ0KGtpdGVt LT5pbmRleE9mZnNldCA9PSBvZmZudW0gfHwKKwkJCQkJCSAgICFzY2FuLT5iYXRjaHF1ZXVlLT5k cm9wUGluKTsKIAogCQkJCQkvKgogCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBo ZXJlLgpAQCAtMzA3LDcgKzMwMyw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCku CiAJCQkJCSAqLwogCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0JCQkJCQlraXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOworCQkJCQkJa2l0ZW0gPSAmYmF0 Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1twaSsrXV07CiAJCQkJfQogCiAJCQkJLyoKQEAg LTM1Nyw3ICszNTMsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFy a0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0KIAotCWlmICghc28tPmRyb3BQaW4pCisJ aWYgKCFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKQogCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVm KTsKIAllbHNlCiAJCV9idF9yZWxidWYocmVsLCBidWYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd1dGlscy5jCmluZGV4IDg3YzMxZGE3MS4uOWQ2NmQyNmRkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd1dGlscy5jCkBAIC04OCwxMCArODgsMTEgQEAgc3BnaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBzcGdiZWdpbnNjYW47CiAJYW1yb3V0 aW5lLT5hbXJlc2NhbiA9IHNwZ3Jlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBzcGdn ZXR0dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1m cmVlYmF0Y2ggPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXA7 CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJr cG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmlu ZGV4IDFlMDk5ZmViZC4uYTczNDFiY2FmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMK QEAgLTI0OCw3ICsyNDgsNyBAQCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlv biByZWwsCiAJYm9vbAkJZm91bmQ7CiAKIAlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVsLCBO VUxMKTsKLQlzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsKTsKKwlzY2FuID0gdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsLCBOVUxMKTsKIAlmb3VuZCA9IHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsIHNsb3QsICZjYWxsX2FnYWluLAogCQkJCQkJ CQkJYWxsX2RlYWQpOwogCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvbnN0cmFpbnQuYwppbmRleCAzNDk3YTgyMjEuLjhhNWQ3OWEyNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvbnN0cmFpbnQuYwpAQCAtMTA2LDcgKzEwNiw4IEBAIHVuaXF1ZV9rZXlfcmVjaGVjayhQR19G VU5DVElPTl9BUkdTKQogCSAqLwogCXRtcHRpZCA9IGNoZWNrdGlkOwogCXsKLQkJSW5kZXhGZXRj aFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50Z19y ZWxhdGlvbik7CisJCUluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJsZV9pbmRleF9mZXRj aF9iZWdpbih0cmlnZGF0YS0+dGdfcmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQlOVUxMKTsKIAkJ Ym9vbAkJY2FsbF9hZ2FpbiA9IGZhbHNlOwogCiAJCWlmICghdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc2NhbiwgJnRtcHRpZCwgU25hcHNob3RTZWxmLCBzbG90LApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYwppbmRleCBkOWNjY2I2YWMuLjNhYzkxZjEyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMKQEAgLTg4MCw3ICs4ODAsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNz IG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJ CQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFt Z2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBs ZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkg ZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBj b25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggMWQwZThhZDU3Li5hYzMzN2Q5 MDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOCw3ICs0MjgsNyBAQCBFeGVjU3VwcG9y dHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAK IAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgor CQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAq LwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFt Y2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBkZDMyM2M5 YjkuLjliNGI2YzMzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgxNiwx MCArODE2LDEyIEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlv biBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91 bmRfc2VsZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5k ZXgsICZEaXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhfc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgTlVMTCwgJkRpcnR5U25hcHNob3QsIE5VTEws CisJCQkJCQkJCSBpbmRua2V5YXR0cywgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNj YW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9z bG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLAorCQkJCQkJCQkJZXhpc3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3 YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBs aWNhdGlvbi5jCmluZGV4IGRlZjMyNzc0Yy4uYTc2OWQ5Yzg2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjA0LDcgKzIwNCw3IEBAIFJlbGF0aW9uRmluZFJlcGxU dXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVp bGRfcmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAog CS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWws IGlkeHJlbCwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKHJlbCwgaWR4cmVsLCBOVUxMLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOwog CiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHJldHJ5OgogCWlu ZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkg dG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJCS8qCiAJ CSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFy eSBrZXkgb3IKQEAgLTY2NSwxMiArNjY1LDEyIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRUdXBsZUlu Zm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNvbW1pdHRl ZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkgKiBleGNs dWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAqLwotCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0 dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgTlVMTCwgU25h cHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogCWluZGV4X3Jlc2NhbihzY2FuLCBz a2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUg Ki8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzY2Fuc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5z aXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZjQ2NGNjYTk1Li4xZjQyNGJm M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsMTQg KzM0LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNz L3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2Myw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mg c2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJ LyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQpAQCAtOTEsNiArODgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIG5vZGUtPmlvc3NfVGFibGVTbG90LAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90 LAogCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5p b3NzX051bVNjYW5LZXlzLApAQCAtMTAxLDcgKzk5LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUpCiAKIAkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4g Ki8KIAkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+ aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRp bWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAt MTE4LDc3ICsxMTUsMTIgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUp CiAJLyoKIAkgKiBPSywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBu ZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRl c2MsIGRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVh cCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2Ug Y2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdl IG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5 LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBo ZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkg T3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAq IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0 IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0 IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5l ZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdh eSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBi dXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2Fu ICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlh bGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVz aW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBW TSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9j a2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVt b3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYg d2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5v dCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAq IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBu b3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUg YSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRv bid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0 dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlv biBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNh Y3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhh dmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIg Y2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhh dCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVw bGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sg YWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0 J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0 byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50 IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFw UmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJ CSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUg dG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJD b3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2Ms IG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVw bGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlv c3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1 cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBm b2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJl ZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2Vl cAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0 X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51 ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVk IGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9p bnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29y ZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3cs Ci0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAg VGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUg c2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJ fQorCQlJbnN0ckNvdW50VHVwbGVzMihub2RlLCBzY2FuZGVzYy0+eHNfaGVhcGZldGNoLT5uaGVh cGFjY2Vzc2VzKTsKKwkJc2NhbmRlc2MtPnhzX2hlYXBmZXRjaC0+bmhlYXBhY2Nlc3NlcyA9IDA7 CiAKIAkJLyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9tIHRo ZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKQEAgLTIzOCwxOSArMTcwLDEzIEBAIEluZGV4T25seU5l eHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJsb3Nz eSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2Fu cyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3 ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBp ZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJICovCi0JCWlm ICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRlc2MtPmhlYXBS ZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJ CQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBzbG90OwogCX0KIAorCS8qIFhY WCBUaGlzIGlzIHVnbHksIGJ1dCBub3QgY2xlYXIgaG93IHRvIGRvIGJldHRlciAqLworCUluc3Ry Q291bnRUdXBsZXMyKG5vZGUsIHNjYW5kZXNjLT54c19oZWFwZmV0Y2gtPm5oZWFwYWNjZXNzZXMp OworCXNjYW5kZXNjLT54c19oZWFwZmV0Y2gtPm5oZWFwYWNjZXNzZXMgPSAwOworCiAJLyoKIAkg KiBpZiB3ZSBnZXQgaGVyZSBpdCBtZWFucyB0aGUgaW5kZXggc2NhbiBmYWlsZWQgc28gd2UgYXJl IGF0IHRoZSBlbmQgb2YKIAkgKiB0aGUgc2Nhbi4uCkBAIC00MDcsMTMgKzMzMyw2IEBAIEV4ZWNF bmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9u RGVzYyA9IG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjOwogCWluZGV4U2NhbkRlc2MgPSBub2RlLT5p b3NzX1NjYW5EZXNjOwogCi0JLyogUmVsZWFzZSBWTSBidWZmZXIgcGluLCBpZiBhbnkuICovCi0J aWYgKG5vZGUtPmlvc3NfVk1CdWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQl7Ci0JCVJlbGVhc2VC dWZmZXIobm9kZS0+aW9zc19WTUJ1ZmZlcik7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZh bGlkQnVmZmVyOwotCX0KLQogCS8qCiAJICogV2hlbiBlbmRpbmcgYSBwYXJhbGxlbCB3b3JrZXIs IGNvcHkgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgYnkgdGhlCiAJICogd29ya2VyIGJhY2sgaW50 byBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgaXQgY2FuIGJlIHBpY2tlZCB1cCBieSB0aGUgbWFpbgpA QCAtNzg2LDEyICs3MDUsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVn aW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5v ZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19UYWJsZVNsb3QsCiAJ CQkJCQkJCSAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1T Y2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBw aXNjYW4pOwogCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9k ZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFz cwpAQCAtODUyLDYgKzc3MSw3IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4 X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJ CSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfVGFibGVTbG90 LAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IGYzNjkyOWRlZS4uOGJkNzAwYzJhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDcsNyArMTA3LDcgQEAgSW5kZXhO ZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5k ZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRl c2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJ CQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRp b25EZXNjLCBOVUxMLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkg ICAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5 cywKQEAgLTEyOCw3ICsxMjgsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJ LyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0 IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVj dGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg ZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTIw Myw3ICsyMDMsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0 byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJICAg ZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlzc19JbnN0cnVtZW50LAog CQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjAsNyArMjYwLDcgQEAgSW5k ZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQg dHVwbGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWlu ZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQor CQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUg aW5kZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTE3MjEsNyArMTcyMSw3 IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJ bm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJ CQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBOVUxMLAogCQkJCQkJCQkgJm5vZGUtPmlz c19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkg bm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApAQCAtMTc4NSw3ICsxNzg1LDcgQEAgRXhlY0luZGV4 U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pc3Nf U2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVu dFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5v ZGUtPmlzc19SZWxhdGlvbkRlc2MsIE5VTEwsCiAJCQkJCQkJCSAmbm9kZS0+aXNzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3Nf TnVtT3JkZXJCeUtleXMsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCAy NjU0YzU5YzQuLjRlNzg3MWRiYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CkBAIC00NSw3ICs0NSw3IEBACiAvKiBXaGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBp bmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNU X0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFND QU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9C SVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FO LAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2NhblR5cGVDb250cm9sOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDA3ZjkyZmFjMi4uNmVjNjVmMjNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTMsMTEgKzMxMywxMSBAQCBnZXRfcmVs YXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wg aW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNo YXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxs czsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwot CQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwp OworCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5V TEwgfHwKKwkJCQkJCQkJCSAgIGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAkJCQlp bmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCAmJgog CQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAhPSBOVUxM OwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IChhbXJvdXRpbmUtPmFtbWFya3BvcyAhPSBOVUxM ICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJCQlpbmZv LT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUtPmFtcG9zcmVzZXQgIT0gTlVMTDsKIAkJCQlpbmZv LT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGU7CiAJCQkJQXNzZXJ0 KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggMTBiM2QwZDliLi43MjhiYmRlMGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTg4OSw3ICs4ODksOCBA QCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0 dHJNYXAgKmF0dHJtYXApCiAJICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBp bXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCiAJICogYmUgdXNlZCBsYXRlciB0byBm ZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KIAkg Ki8KLQlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBm YWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQo aWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJgorCQlH ZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1n ZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvYW11dGlscy5jCmluZGV4IDBhZjI2ZDZhYy4uMWViZTBhNzZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9hbXV0aWxzLmMKQEAgLTM2Myw3ICszNjMsNyBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFi bGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtZ2V0dHVwbGUgfHwgcm91dGluZS0+YW1nZXRiYXRjaCA/IHRydWUgOiBmYWxzZSk7 CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKQEAgLTM5Miw3ICszOTIsNyBAQCBpbmRl eGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0J CQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgfHwgcm91dGluZS0+YW1nZXRiYXRj aCA/IHRydWUgOiBmYWxzZSk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0lOQ0xVREU6CiAJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmluY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YwppbmRleCA1NDBhYTk2MjguLmIyMjg4Y2Q5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMK QEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9naW4uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgotI2luY2x1ZGUgImFj Y2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWMuaCIKQEAgLTcwNDMsMTAgKzcwNDIsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJU25h cHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3Nj YW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIgbGFz dF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9oZWFw X3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhf S0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CkBAIC03MDk4LDcgKzcwOTMsNyBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBv aW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFwc2hv dE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsKIAot CWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJaW5kZXhf c2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdGFibGVzbG90LAogCQkJ CQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJCQkJIDEsIDApOwogCS8q IFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCkBAIC03MTA2LDQ4ICs3MTAxLDIwIEBA IGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlpbmRleF9y ZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmly c3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBp bmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdo aWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0 YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CisJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUg Zm9yIGFueXRoaW5nICovCisJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7CiAKLQkJaWYgKCFW TV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikp Ci0JCXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xv dCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4 IGVudHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4g IEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2 ZSB1cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hh cmdlIGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFz IHRoZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAot CQkJCSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBz dGlsbCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhp cyBoZXVyaXN0aWMuCi0JCQkJICovCisJCS8qCisJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRo aXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8gYWR2YW5jZSB0byB0aGUKKwkJICogbmV4dCBl bnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcCBwYWdlIGZldGNoZXMgYW5kIGdpdmUg dXAKKwkJICogaWYgd2UndmUgZG9uZSB0b28gbWFueS4KKwkJICovCiAjZGVmaW5lIFZJU0lURURf UEFHRVNfTElNSVQgMTAwCiAKLQkJCQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJ CXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3Bh Z2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElN SVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUg dHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFj dHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJU dXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRo ZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWlu OyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9CisJ CWlmIChpbmRleF9zY2FuLT54c19oZWFwZmV0Y2gtPm5oZWFwYWNjZXNzZXMgPiBWSVNJVEVEX1BB R0VTX0xJTUlUKQorCQkJYnJlYWs7CiAKIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGlu ZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKQEAgLTcxODAsOCArNzE0Nyw2 IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJl YWs7CiAJfQogCi0JaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZm ZXIodm1idWZmZXIpOwogCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2 ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Js b29tL2JsdXRpbHMuYwppbmRleCA3YTQ2OGI0YTEuLjBjM2JhNjg0YSAxMDA2NDQKLS0tIGEvY29u dHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE0 OCw4ICsxNDgsNyBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFt Z2V0dHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcDsK IAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGJsZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3Bv cyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFt cG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+ YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCA2M2Q3ZTM3NmYuLmNkYzlj NjVhNiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjEsMTAgKzE2MSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAg IGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1n ZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBh bWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFt ZnJlZWJhdGNoOwkvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFt Z2V0Yml0bWFwOyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFt ZW5kc2NhbjsKLSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4g YmUgTlVMTCAqLwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNh biBiZSBOVUxMICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4g YmUgTlVMTCAqLwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFs bGVsIGluZGV4IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBh bWVzdGltYXRlcGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtNzQzLDYgKzc0 NCwxMzcgQEAgYW1nZXR0dXBsZSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVjdGZpZWxk PmFtZ2V0dHVwbGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhB bVJvdXRpbmU8L3N0cnVjdG5hbWU+CiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAg PC9wYXJhPgorICA8bm90ZT4KKyAgIDxwYXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gdmVyc2lvbiAxOSwgcG9zaXRpb24gbWFya2luZworICAgIGFu ZCByZXN0b3JhdGlvbiBvZiBzY2FucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGZvciB0aGUKKyAg ICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGludGVyZmFjZTsgb25seSB0aGUKKyAg ICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0cyB0aGlz IGZlYXR1cmUgdGhyb3VnaAorICAgIHRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+ IGNhbGxiYWNrLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxp c3Rpbmc+CitCYXRjaEluZGV4U2NhbgorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAor ICAgICAgICAgICAgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwKKyAgICAgICAgICAgIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4gdGhlIG5l eHQgYmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3ZpbmcgaW4gdGhl CisgICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGluZGV4KS4g IFJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkJhdGNoSW5kZXhTY2FuPC90eXBlPiB3 aXRoIGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBp ZiB0aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBwYXJhbWV0ZXIgcGFzc2VzIHRo ZSBiYXRjaCBwcmV2aW91c2x5CisgICByZXR1cm5lZCBieSBhbiBlYXJsaWVyIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbCAob3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ IG9uIHRoZSBmaXJzdCBjYWxsKS4gIFRoZSBpbmRleCBBTSB1c2VzCisgICA8bGl0ZXJhbD5wcmlv cmJhdGNoPC9saXRlcmFsPiB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5l eHQsCisgICB0eXBpY2FsbHkgYnkgZm9sbG93aW5nIHBhZ2UgbGlua3MgZm91bmQgaW4gPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uCisgICBUaGUgcmV0dXJuZWQgYmF0Y2ggY29udGFpbnMg bWF0Y2hpbmcgaXRlbXMgaW1tZWRpYXRlbHkgYWRqYWNlbnQgdG8gdGhvc2UKKyAgIGZyb20gPGxp dGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlCisgICA8 bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpcyB0aGUgYmF0Y2ggdGhhdCB3YXMgcmV0dXJu ZWQgYnkgdGhlIG1vc3QKKyAgIHJlY2VudCBjYWxsIHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gY2FsbCAodGhvdWdoIG5vdCB3aGVuIHRoZQorICAgbW9zdCByZWNlbnQgY2FsbCB1 c2VkIHRoZSBvcHBvc2l0ZSBzY2FuIGRpcmVjdGlvbiB0byB0aGlzIGNhbGwsIGFuZCBub3QKKyAg IHdoZW4gYSBtYXJrIGhhcyBiZWVuIHJlc3RvcmVkKS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlz IGd1YXJhbnRlZWQgdG8gYmUKKyAgIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmRleCBwYWdlIGNvbnRh aW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLgorICAgVGhlIGluZGV4IHBhZ2UgYXNz b2NpYXRlZCB3aXRoIHRoZSBiYXRjaCBtYXkgYmUgcmV0YWluZWQgaW4gYSBidWZmZXIgd2l0aAor ICAgaXRzIHBpbiBoZWxkIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieQorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gIFNlZSA8eHJlZiBsaW5r ZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBkZXRhaWxzCisgICBvbiBidWZmZXIgcGluIG1hbmFn ZW1lbnQgZHVyaW5nIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRl cmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBpbmRleC1vbmx5CisgICBzY2FucyB0aGF0IHJldHVybiBk YXRhIHZpYSB0aGUgPGxpdGVyYWw+eHNfaGl0dXA8L2xpdGVyYWw+IG1lY2hhbmlzbS4KKyAgIElu ZGV4LW9ubHkgc2NhbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSA8bGl0ZXJhbD54c19pdHVw PC9saXRlcmFsPgorICAgbWVjaGFuaXNtIG9ubHkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBi ZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgPHF1b3RlPnBsYWlu PC9xdW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAorICAgdGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8c3RydWN0bmFtZT5JbmRleEFt Um91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+QmF0Y2hJbmRleFNjYW48L3R5cGU+IHRoYXQgaXMg cmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9u Z2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBpcyB1cCB0byB0aGUgdGFi bGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSBmcmVlZCBieQorICAgcGFz c2luZyBpdCB0byA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4gIE5vdGUgYWxzbyB0 aGF0CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBtdXN0IG5l dmVyIG1vZGlmeSB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVsZD4g cGFyYW1ldGVyLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgYWNjZXNzIG1ldGhvZCBt YXkgcHJvdmlkZSBvbmx5IG9uZSBvZiA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+Cisg ICBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFja3MsIG5vdCBib3Ro IChYWFggdW5jZXJ0YWluKS4KKyAgIFdoZW4gdGhlIGFjY2VzcyBtZXRob2QgcHJvdmlkZXMgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgaXQgbXVzdAorICAgYWxzbyBwcm92aWRlIDxm dW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBUaGUgc2FtZSBjYXZlYXRzIGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBhcHBseSBoZXJlCisgICB0b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRj aCBtZWFucyBvbmx5IHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1h dGNoZXMgdGhlIHNjYW4ga2V5cywgbm90IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxs CisgICBleGlzdHMgaW4gdGhlIGhlYXAgb3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hv dCB0ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCith bWZyZWViYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgIEJhdGNoSW5kZXhT Y2FuIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZWxlYXNlcyBhIGJhdGNoIHJldHVy bmVkIGJ5IHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLgorICAg VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgdGFibGUgYWNjZXNzIG1ldGhv ZHMgdG8gaW5kaWNhdGUKKyAgIHRoYXQgcHJvY2Vzc2luZyBvZiB0aGUgYmF0Y2ggaXMgY29tcGxl dGU7IGl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aGluCisgICB0aGUgaW5kZXggYWNjZXNz IG1ldGhvZCBpdHNlbGYuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIDxmdW5jdGlvbj5hbWZy ZWViYXRjaDwvZnVuY3Rpb24+IGZyZWVzIGJ1ZmZlciBwaW5zIGhlbGQgb24gdGhlIGJhdGNoJ3MK KyAgIGFzc29jaWF0ZWQgaW5kZXggcGFnZSBhbmQgcmVsZWFzZXMgcmVsYXRlZCBtZW1vcnkgYW5k IHJlc291cmNlcy4gIFRoZXNlCisgICBidWZmZXIgcGlucyBzZXJ2ZSBhcyBhbiBpbnRlcmxvY2sg YWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwv Y29tbWFuZD4sIHByb3RlY3RpbmcgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgZnJvbSBjb25mdXNp b24KKyAgIGFib3V0IHdoaWNoIFRJRCBjb3JyZXNwb25kcyB0byB3aGljaCBsb2dpY2FsIHJvdy4g IFNlZSA8eHJlZgorICAgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBmb3IgZGV0YWlsZWQgZGlz Y3Vzc2lvbiBvZiBidWZmZXIgcGluIG1hbmFnZW1lbnQuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRoZSBpbmRleCBBTSBtYXkgY2hvb3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5z IGFjcm9zcyBtdWx0aXBsZQorICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gY2Fs bHMgd2hlbiB0aGlzIHNlcnZlcyBhbiBpbnRlcm5hbCBwdXJwb3NlCisgICAoZm9yIGV4YW1wbGUs IG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXggcGFnZXMgZm9yIHJl dXNlCisgICBhY3Jvc3MgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscykuICBI b3dldmVyLCBhbnkgc2NoZW1lIHRoYXQKKyAgIHJldGFpbnMgYnVmZmVyIHBpbnMgbXVzdCBrZWVw IHRoZSBudW1iZXIgb2YgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwsCisgICB0byBhdm9p ZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MgYnVmZmVyIHBpbiBsaW1pdC4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFNIGhhcyB0aGUgb3B0aW9uIG9mIHNldHRpbmcgPGxp dGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpbgorICAgdGhlIGluZGV4IHBhZ2UgdG8gbWFy ayBkZWFkIHR1cGxlcyBiZWZvcmUgcmVsZWFzaW5nIHRoZSBidWZmZXIgcGluLiAgV2hlbgorICAg PGxpdGVyYWw+QmF0Y2hRdWV1ZS5kcm9wUGluPC9saXRlcmFsPiBpcyB0cnVlIGFuZCB0aGUgYnVm ZmVyIHBpbiBpcyBiZWluZworICAgZHJvcHBlZCBlYWdlcmx5LCB0aGUgaW5kZXggQU0gbXVzdCBj aGVjayA8bGl0ZXJhbD5CYXRjaEluZGV4U2Nhbi5sc248L2xpdGVyYWw+CisgICB0byB2ZXJpZnkg dGhhdCB0aGUgcGFnZSBMU04gaGFzIG5vdCBhZHZhbmNlZCBzaW5jZSB0aGUgYmF0Y2ggd2FzIG9y aWdpbmFsbHkKKyAgIHJlYWQgYmVmb3JlIHNldHRpbmcgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJh bD4gYml0cywgdG8gYXZvaWQgY29uY3VycmVudAorICAgVElEIHJlY3ljbGluZyBoYXphcmRzLiAg V2hlbiA8bGl0ZXJhbD5zY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluPC9saXRlcmFsPgorICAgaXMg ZmFsc2UgKHJlcXVpcmluZyB0aGF0IGEgYnVmZmVyIHBpbiBiZSBoZWxkIHRocm91Z2hvdXQgZmly c3QgcmVhZGluZyB0aGUKKyAgIGluZGV4IGxlYWYgcGFnZSBhbmQgY2FsbGluZyA8ZnVuY3Rpb24+ YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiksCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBi aXRzIGNhbiBhbHdheXMgYmUgc2V0IHNhZmVseSB3aXRob3V0IGFuIExTTiBjaGVjay4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+ IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qg cHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4gT3RoZXJ3aXNlIGl0IGhh cyB0bworICAgcmVtYWluIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4KKyAgPC9wYXJh PgogCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgpAQCAtNzYyLDggKzg5NCw4IEBAIGFtZ2V0 Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBpdHNlbGYsIGFuZCB0aGVyZWZvcmUgY2Fs bGVycyByZWNoZWNrIGJvdGggdGhlIHNjYW4gY29uZGl0aW9ucyBhbmQgdGhlCiAgICBwYXJ0aWFs IGluZGV4IHByZWRpY2F0ZSAoaWYgYW55KSBmb3IgcmVjaGVja2FibGUgdHVwbGVzLiAgVGhhdCBt aWdodCBub3QKICAgIGFsd2F5cyBiZSB0cnVlLCBob3dldmVyLgotICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gYW5kCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGluZGV4IHNjYW47IHRoZXJlCisgICBPbmx5IG9u ZSBvZiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwKKyAgIG9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2Fu IGJlIHVzZWQgaW4gYW55IGdpdmVuIGluZGV4IHNjYW47IHRoZXJlCiAgICBhcmUgb3RoZXIgcmVz dHJpY3Rpb25zIHRvbyB3aGVuIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ LCBhcyBleHBsYWluZWQKICAgIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+Lgog ICA8L3BhcmE+CkBAIC03ODksMzIgKzkyMSwyNSBAQCBhbWVuZHNjYW4gKEluZGV4U2NhbkRlc2Mg c2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZAotYW1tYXJrcG9zIChJbmRl eFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIDwvcHJv Z3JhbWxpc3Rpbmc+Ci0gICBNYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3Mg bWV0aG9kIG5lZWQgb25seSBzdXBwb3J0IG9uZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9u IHBlciBzY2FuLgorICAgTm90aWZ5IGluZGV4IEFNIHRoYXQgY29yZSBjb2RlIHdpbGwgY2hhbmdl IHRoZSBzY2FuJ3MgcG9zaXRpb24gdG8gYW4gaXRlbQorICAgcmV0dXJuZWQgYXMgcGFydCBvZiBh biBlYXJsaWVyIGJhdGNoLiAgVGhlIGluZGV4IEFNIG11c3QgdGhlcmVmb3JlCisgICBpbnZhbGlk YXRlIGFueSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jl c3MKKyAgIChlLmcuLCBhcnJheSBrZXlzIHVzZWQgd2l0aCBhIFNjYWxhckFycmF5T3BFeHByIHF1 YWwpLiAgQ2FsbGVkIGJ5IHRoZSBjb3JlCisgICBzeXN0ZW0gd2hlbiBpdCBpcyBhYm91dCB0byBy ZXN0b3JlIGEgbWFyay4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5h bW1hcmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhl IGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0 LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBp dHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5 IGJlIHNldCB0byBOVUxMLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+ Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGlu Zz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0 aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8 L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2Vzcwot ICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhl IDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQg dG8gTlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9u IGNhbiBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBv cmRlcmVkIHNjYW5zIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4K KyAgIGludGVyZmFjZS4gIElmIGl0IGRvZXNuJ3QsIHRoZSA8c3RydWN0ZmllbGQ+YW1wb3NyZXNl dDwvc3RydWN0ZmllbGQ+IGZpZWxkCisgICBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRp bmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBzaG91bGQgYmUgc2V0IHRvCisgICBOVUxMLiAgSW5kZXgg QU1zIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IG1pZ2h0IG5lZWQgdG8g YmUKKyAgIGludmFsaWRhdGVkIG1pZ2h0IHN0aWxsIGZpbmQgaXQgdXNlZnVsIHRvIHByb3ZpZGUg YW4gZW1wdHkKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gZnVuY3Rp b247IGlmIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGlzIHNldCB0byBOVUxM LCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBhc3N1bWUgdGhhdCBpdCBpcyB1bnNhZmUgdG8gcmVzdG9y ZSBhCisgICBtYXJrZWQgcG9zaXRpb24uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTk4OCwz MCArMTExMyw0NyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9p ZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFs PmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQsCisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgZnVu Y3Rpb25zIGhhdmUgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAg d2hpY2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4gKHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCB0aGVuIHRoZQogICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMg dG8gYmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFs IGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRo aXMgd2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVj dGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAg Zmlyc3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBh cmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHRoZSBub3JtYWwgZnJvbnQtdG8tYmFjayBk aXJlY3Rpb24uICBJbiB0aGlzIGNhc2UsCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZQorICAgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQgbm9ybWFsbHkgd291bGQuICBTaW1pbGFy bHksCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgcmV0dXJuIHRoZSBs YXN0IG1hdGNoaW5nIGJhdGNoIG9mIGl0ZW1zCisgICB3aGVuIGVpdGhlciB0aGUgZmlyc3QgY2Fs bCBhZnRlciA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMKKyAgIDxsaXRl cmFsPkJhY2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4sIG9yIGEgc3Vic2VxdWVudCBjYWxs IGhhcworICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gYXMgaXRzIDxzdHJ1Y3RmaWVsZD5wcmlv cmJhdGNoPC9zdHJ1Y3RmaWVsZD4gYXJndW1lbnQKKyAgIChpbmRpY2F0aW5nIGEgYmFja3dhcmQg c2NhbiByZXN0YXJ0KS4gIChUaGlzIGJhY2t3YXJkLXNjYW4gYmVoYXZpb3Igd2lsbAorICAgb25s eSBvY2N1ciBmb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3Jk ZXI8L3N0cnVjdGZpZWxkPgorICAgdG8gdHJ1ZS4pICBBZnRlciB0aGUgZmlyc3QgY2FsbCwgYm90 aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4K ICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRy eS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4g aXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGly ZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVy bmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0 IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24g bmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3Bv czwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9z aXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0g ICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBh bmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRv IE5VTEwKLSAgIGluc3RlYWQuCisgICBBY2Nlc3MgbWV0aG9kcyB1c2luZyB0aGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgbWF5CisgICBzdXBwb3J0IDxxdW90ZT5t YXJraW5nPC9xdW90ZT4gYSBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0 bworICAgdGhlIG1hcmtlZCBwb3NpdGlvbiwgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuICBJZiB0 aGUgc2FtZSBtYXJrZWQgcG9zaXRpb24KKyAgIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRp bWVzLCB0aGUgY29yZSBzeXN0ZW0gbWFuYWdlcyBtYXJraW5nIGFuZAorICAgcmVzdG9yYXRpb24g dGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmluZGV4X2JhdGNoX21hcmtfcG9zPC9mdW5jdGlvbj4gYW5k CisgICA8ZnVuY3Rpb24+aW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3M8L2Z1bmN0aW9uPiBpbnRlcm5h bCBmdW5jdGlvbnMuICBXaGVuIGEKKyAgIG1hcmtlZCBwb3NpdGlvbiBpcyByZXN0b3JlZCwgdGhl IGluZGV4IEFNIGlzIG5vdGlmaWVkIHZpYSB0aGUKKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9m dW5jdGlvbj4gY2FsbGJhY2sgc28gaXQgY2FuIGludmFsaWRhdGUgYW55IHByaXZhdGUKKyAgIHN0 YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcyAoc3VjaCBh cyBhcnJheSBrZXkKKyAgIHN0YXRlKS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxm dW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gZnVuY3Rpb24gaW4gPHN0cnVjdG5hbWU+SW5k ZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+CisgICBzaG91bGQgYmUgc2V0IHRvIE5VTEwgZm9yIGFj Y2VzcyBtZXRob2RzIHRoYXQgZG8gbm90IHN1cHBvcnQgbWFyay9yZXN0b3JlLgorICAgRm9yIGFj Y2VzcyBtZXRob2RzIHRoYXQgZG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUsIDxmdW5jdGlvbj5hbXBv c3Jlc2V0PC9mdW5jdGlvbj4KKyAgIG11c3QgYmUgcHJvdmlkZWQgKHRob3VnaCBpdCBjYW4gYmUg YSBuby1vcCBmdW5jdGlvbiBpZiB0aGUgQU0gaGFzIG5vIHByaXZhdGUKKyAgIHN0YXRlIHRvIGlu dmFsaWRhdGUpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xMTgwLDYgKzEzMjIsOTQgQEAg YW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9p ZCBvcGNpbnR5cGUpOwogICAgcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2Ygc3VjaCB0cmFuc2FjdGlv biBjYW5jZWxsYXRpb25zLgogICA8L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1sb2NraW5n LWJhdGNoZXMiPgorICAgPHRpdGxlPkJhdGNoIFNjYW5uaW5nIGFuZCBCdWZmZXIgUGluIE1hbmFn ZW1lbnQ8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0 IGltcGxlbWVudCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgIGludGVy ZmFjZSBtdXN0IGNvb3BlcmF0ZSB3aXRoIHRoZSBjb3JlIHN5c3RlbSB0byBtYW5hZ2UgYnVmZmVy IHBpbnMgaW4gYQorICAgIHdheSB0aGF0IHByZXZlbnRzIGNvbmN1cnJlbnQgPGNvbW1hbmQ+VkFD VVVNPC9jb21tYW5kPiBmcm9tIGNyZWF0aW5nCisgICAgVElEIHJlY3ljbGluZyBoYXphcmRzLiAg VW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gc2NhbnMsCisgICAgd2hpY2gg a2VlcCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBpbiBjb250cm9sIG9mIHNjYW4gcHJvZ3Jlc3Np b24sCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyBnaXZlIGNvbnRy b2wgdG8gdGhlIHRhYmxlIGFjY2VzcworICAgIG1ldGhvZCwgd2hpY2ggbWF5IGZldGNoIHRhYmxl IHR1cGxlcyBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZSBpbmRleAorICAgIGVudHJpZXMg d2VyZSByZXR1cm5lZC4gIFRoaXMgY3JlYXRlcyB0aGUgbmVlZCBmb3IgZXhwbGljaXQgYnVmZmVy IHBpbgorICAgIG1hbmFnZW1lbnQgdG8gZW5zdXJlIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIGRv ZXMgbm90IGNvbmZ1c2UgYSByZWN5Y2xlZAorICAgIFRJRCB3aXRoIHRoZSBvcmlnaW5hbCByb3cg aXQgbWVhbnQgdG8gcmVmZXJlbmNlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVu IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gcmV0dXJucyBhIGJhdGNoLCB0aGUgYmF0 Y2gncworICAgIGFzc29jaWF0ZWQgaW5kZXggcGFnZSBtYXkgYmUgcmV0YWluZWQgaW4gYSBidWZm ZXIgd2l0aCBhIHBpbiBoZWxkIG9uIGl0LgorICAgIFRoaXMgcGluIHNlcnZlcyBhcyBhbiBpbnRl cmxvY2s6IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IHJlY3ljbGUKKyAgICBUSURz IG9uIGEgcGlubmVkIHBhZ2UuICBUaGUgYnVmZmVyIHBpbiBwcm90ZWN0cyBvbmx5IHRoZSB0YWJs ZSBhY2Nlc3MKKyAgICBtZXRob2QncyBhYmlsaXR5IHRvIG1hcCBUSURzIHRvIHJvd3MgY29ycmVj dGx5OyBpdCBkb2VzIG5vdCBwcm90ZWN0IHRoZQorICAgIGluZGV4IHN0cnVjdHVyZSBpdHNlbGYu ICBJbmRleCBhY2Nlc3MgbWV0aG9kcyBtYXkgdXNlIHBpbnMgZm9yIG90aGVyCisgICAgcHVycG9z ZXMgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIHBh Z2VzKSwgYnV0CisgICAgdGhvc2UgdXNlcyBhcmUgaW50ZXJuYWwgdG8gdGhlIGFjY2VzcyBtZXRo b2QgYW5kIGluZGVwZW5kZW50IG9mIHRoZQorICAgIHRhYmxlLUFNIHN5bmNocm9uaXphdGlvbiBk ZXNjcmliZWQgaGVyZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hldGhlciBhIHBp biBzaG91bGQgYmUgaGVsZCB3aGVuIHJldHVybmluZyBhIGJhdGNoIGlzIGNvbnRyb2xsZWQgYnkg dGhlCisgICAgPHN0cnVjdGZpZWxkPmRyb3BQaW48L3N0cnVjdGZpZWxkPiBmbGFnIGluIHRoZSA8 dHlwZT5CYXRjaFF1ZXVlPC90eXBlPgorICAgIHN0cnVjdHVyZS4gV2hlbiA8bGl0ZXJhbD5kcm9w UGluPC9saXRlcmFsPiBpcyB0cnVlLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgIGRyb3Bz IHRoZSBwaW4gYmVmb3JlIHJldHVybmluZyB0aGUgYmF0Y2gsIHdoaWNoIGF2b2lkcyBibG9ja2lu ZworICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwv bGl0ZXJhbD4gaXMgZmFsc2UsIHRoZQorICAgIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBob2xk IHRoZSBwaW4gdW50aWwgdGhlIGJhdGNoIGlzIGZyZWVkIHZpYQorICAgIDxmdW5jdGlvbj5hbWZy ZWViYXRjaDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgc3lzdGVtIHNldHMgdGhlCisgICAgPGxpdGVy YWw+ZHJvcFBpbjwvbGl0ZXJhbD4gZmxhZyBiYXNlZCBvbiBzY2FuIHR5cGU6IGl0IGlzIHRydWUg Zm9yCisgICAgTVZDQy1jb21wbGlhbnQgc25hcHNob3RzIG9uIGxvZ2dlZCByZWxhdGlvbnMgKHVu bGVzcyBpbmRleC1vbmx5IHNjYW5zIGFyZQorICAgIGluIHVzZSksIGFuZCBmYWxzZSBvdGhlcndp c2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwv bGl0ZXJhbD4gaXMgdHJ1ZSBhbmQgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaXMKKyAgICBlYWdl ciBhYm91dCBkcm9wcGluZyBwaW5zLCBpdCBtdXN0IHNhdmUgdGhlIHBhZ2UncyBMU04gaW4gdGhl IGJhdGNoIGJlZm9yZQorICAgIHJldHVybmluZy4gTGF0ZXIsIHdoZW4gPGZ1bmN0aW9uPmFtZnJl ZWJhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVkIGFuZCB0aGUKKyAgICBhY2Nlc3MgbWV0aG9kIHdp c2hlcyB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyB0byBtYXJrIGRlYWQK KyAgICB0dXBsZXMsIGl0IG11c3QgdmVyaWZ5IHRoYXQgdGhlIHBhZ2UncyBMU04gaGFzIG5vdCBj aGFuZ2VkIHNpbmNlIHRoZSBiYXRjaAorICAgIHdhcyByZWFkLiBJZiB0aGUgTFNOIGhhcyBjaGFu Z2VkLCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5CisgICAgY29uY3VycmVudCBh Y3Rpdml0eSBhbmQgaXQgaXMgdW5zYWZlIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBiaXRzLgorICAgIFRoaXMgTFNOLWJhc2VkIHZhbGlkYXRpb24gc2NoZW1lIHByb3RlY3RzIGFn YWluc3QgVElEIHJlY3ljbGluZyByYWNlcyB3aGVuCisgICAgcGlucyBoYXZlIGJlZW4gZHJvcHBl ZC4gIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgZmFsc2UsIHRoZSBwaW4KKyAg ICBwcmV2ZW50cyB1bnNhZmUgY29uY3VycmVudCByZW1vdmFsIG9mIHRhYmxlIFRJRCByZWZlcmVu Y2VzIGJ5CisgICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiwgc28gbm8gTFNOIGNoZWNrIGlz IG5lY2Vzc2FyeS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIGNvcmUgc3lzdGVt IHByb3ZpZGVzIHRocmVlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBiYXRjaAorICAg IHJlc291cmNlczoKKyAgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9mdW5j dGlvbj4gYWxsb2NhdGVzIGEgbmV3IGJhdGNoIG9yCisgICAgcmV1c2VzIGEgY2FjaGVkIG9uZSwK KyAgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jazwvZnVuY3Rpb24+IGRyb3Bz IHRoZSBsb2NrIGFuZAorICAgIGNvbmRpdGlvbmFsbHkgZHJvcHMgdGhlIHBpbiBvbiBhIGJhdGNo J3MgaW5kZXggcGFnZSAoYmFzZWQgb24gdGhlCisgICAgPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJh bD4gc2V0dGluZyksIGFuZAorICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZTwvZnVuY3Rpb24+IGZyZWVzIG9yIGNhY2hlcyBhIGJhdGNoLgorICAgIEluZGV4IGFjY2VzcyBt ZXRob2RzIHNob3VsZCB1c2UgdGhlc2UgdXRpbGl0aWVzIHJhdGhlciB0aGFuIG1hbmFnaW5nCisg ICAgYnVmZmVycyBkaXJlY3RseS4gIFRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS88L2ZpbGVuYW1lPgorICAgIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgcmVmZXJlbmNl IGV4YW1wbGUgb2YgY29ycmVjdCB1c2FnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAg Tm90ZSB0aGF0IDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBvbmx5 IGJ5IHRoZSBjb3JlIGNvZGUKKyAgICBhbmQgdGFibGUgYWNjZXNzIG1ldGhvZCwgbmV2ZXIgYnkg dGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaXRzZWxmLiBUaGUKKyAgICBpbmRleCBBTSBtdXN0IG5v dCBhc3N1bWUgdGhhdCBhIGNhbGwgdG8gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4K KyAgICB3aWxsIHRha2UgcGxhY2UgYmVmb3JlIGFub3RoZXIgY2FsbCB0byA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgKGZvciB0aGUgc2FtZSBpbmRleCBzY2FuKSB0YWtlcyBw bGFjZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIGluZGV4IEFNIG11c3QgYWxz byBhdm9pZCByZWx5aW5nIG9uIHRoZSBjb3JlIGNvZGUgY2FsbGluZworICAgIDxmdW5jdGlvbj5h bWZyZWViYXRjaDwvZnVuY3Rpb24+IHdpdGggYmF0Y2hlcyB0aGF0IGFyZSBpbiBhbnkgcGFydGlj dWxhcgorICAgIG9yZGVyLiAgRm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBva2F5IGZvciBhbiBpbmRl eCBBTSB0byBhc3N1bWUgdGhhdCBjYWxscworICAgIHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwv ZnVuY3Rpb24+IHdpbGwgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSBvcmRlciBhcworICAgIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzIHRoYXQgaW5pdGlhbGx5CisgICAg YWxsb2NhdGVkL3BvcHVsYXRlZC9yZXR1cm5lZCBlYWNoIGJhdGNoLgorICAgPC9wYXJhPgorCisg IDwvc2VjdDI+CisKICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJpbmRleC11bmlxdWUtY2hlY2tz Ij4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCmluZGV4IDY1NTdjNWNmZi4uOGYwOTUyYTUw IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTExNTIsMTIgKzExNTIsMTMgQEAg V0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0 ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAg ICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xp dGVyYWw+IChzZWUgPHhyZWYKLSAgICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50 IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQu ICBBbHRob3VnaCBpdCdzIGFsbG93ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwot ICAgICAgQi10cmVlIG9yIGhhc2ggaW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50 LCBiZWNhdXNlIHRoaXMKLSAgICAgIGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1 ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhl IGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IK KyAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1n ZXR0dXBsZTwvbGl0ZXJhbD4KKyAgICAgIG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+ IChzZWUgPHhyZWYgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMg bWVhbnMgPGFjcm9ueW0+R0lOPC9hY3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisg ICAgICBpdCdzIGFsbG93ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUg b3IgaGFzaCBpbmRleGVzCisgICAgICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNh dXNlIHRoaXMgZG9lcyBub3RoaW5nIHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25z dHJhaW50IGRvZXNuJ3QgZG8gYmV0dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nl c3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAg ICA8YWNyb255bT5TUC1HaVNUPC9hY3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMv dGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggOTRlZjYz OWI2Li40ZTI4NzdhNGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2Ft L2R1bW15X2luZGV4X2FtLmMKQEAgLTMxNywxMCArMzE3LDEwIEBAIGRpaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBkaWJlZ2luc2NhbjsKIAlhbXJv dXRpbmUtPmFtcmVzY2FuID0gZGlyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVM TDsKKwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRt YXAgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gZGllbmRzY2FuOwotCWFtcm91dGlu ZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFt cm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxs ZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggNmUyZWQwYzg4Li42YzJjOTQ2OTAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0yMjAsOCArMjIwLDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwog QlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJ dGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBAIC0zNDQ3LDEyICsz NDQ1LDEwIEBAIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlv bgogYW1pbnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9z X2Z1bmN0aW9uCiBhbW9wdGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24K IGFtcHJvcGVydHlfZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0 aW9uCiBhbXRyYW5zbGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9m dW5jdGlvbgogYW12YWN1dW1jbGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --00000000000045724e064576f530 Content-Type: application/x-patch; name="v2-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v2-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixm7wii3 RnJvbSBiMzlhZWY4MGI1OWFmNmVjOGFkYzI5M2Q3NzYwNzQ5YzA0OTQ3YTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYyIDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDMyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDQ2ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25z KCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZThkMzQ3ZTQ3Li4yY2M4 MTczNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFN IGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1 ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1i ZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5C OiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQg YnVmZmVyICovCiAKIAlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggM2E0MTZlNzZiLi5kZmVmMmZmZmIgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5j bHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxv Y2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxj YWNoZS5oIgpAQCAtMTI0LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3Ry ZWFtICpyczsKIAogCWludAkJCW5oZWFwYWNjZXNzZXM7CS8qIG51bWJlciBvZiBoZWFwIGFjY2Vz c2VzLCBmb3IKIAkJCQkJCQkJICogaW5zdHJ1bWVudGF0aW9uL21ldHJpY3MgKi8KQEAgLTIyNCw4 ICsyMjYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4 U2NhbjsKICAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBr ZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xs IG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJl YWQuCisgKgorICogVGhlIGNob2ljZSBvZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3Mg YWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFu ZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQg dGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0g bG9va3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGlu ZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1 dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pIFwKIAkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggLSAoc2NhbiktPmJhdGNo cXVldWUtPmhlYWRCYXRjaCkKQEAgLTI4Myw2ICsyOTEsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0 Y2hRdWV1ZQogCSAqIGl0J3Mgb3Zlci4KIAkgKi8KIAlib29sCQlmaW5pc2hlZDsKKwlib29sCQly ZXNldDsKKworCS8qCisJICogRGlkIHdlIGRpc2FibGUgcHJlZmV0Y2hpbmcvdXNlIG9mIGEgcmVh ZCBzdHJlYW0gYmVjYXVzZSBpdCBkaWRuJ3QgcGF5CisJICogZm9yIGl0c2VsZj8KKwkgKi8KKwli b29sCQlwcmVmZXRjaGluZ0xvY2tlZEluOworCWJvb2wJCWRpc2FibGVkOworCisJLyoKKwkgKiBE dXJpbmcgcHJlZmV0Y2hpbmcsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBi bG9jayBudW1iZXIKKwkgKiB0aGF0IHdhcyByZXR1cm5lZCBieSBvdXIgcmVhZCBzdHJlYW0gY2Fs bGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8KKwkgKiBzdXBwcmVzcyBkdXBsaWNhdGUgc3Vj Y2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1ZXN0cy4KKwkgKgorCSAqIFByZWZldGNoaW5n IGNhbiBzdGlsbCBwZXJmb3JtIG5vbi1zdWNjZXNzaXZlIHJlcXVlc3RzIGZvciB0aGUgc2FtZQor CSAqIGJsb2NrIG51bWJlciAoaW4gZ2VuZXJhbCB3ZSdyZSBwcmVmZXRjaGluZyBpbiBleGFjdGx5 IHRoZSBzYW1lIG9yZGVyCisJICogdGhhdCB0aGUgc2NhbiB3aWxsIHJldHVybiB0YWJsZSBBTSBU SURzIGluKS4gIFdlIG5lZWQgdG8gYXZvaWQKKwkgKiBkdXBsaWNhdGUgc3VjY2Vzc2l2ZSByZXF1 ZXN0cyBiZWNhdXNlIHRhYmxlIEFNcyBleHBlY3QgdG8gYmUgYWJsZSB0bworCSAqIGhhbmcgb24g dG8gYnVmZmVyIHBpbnMgYWNyb3NzIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGNhbGxzLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJlbnRQcmVmZXRjaEJsb2NrOwogCiAJLyogQ3VycmVudCBzY2Fu IGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTI5MCw2ICszMTksNyBAQCB0eXBlZGVmIHN0cnVjdCBCYXRj aFF1ZXVlCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJ QmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUXVl dWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUXVl dWVJdGVtUG9zIHN0cmVhbVBvczsJLyogc3RyZWFtIHBvc2l0aW9uIChmb3IgcHJlZmV0Y2hpbmcp ICovCiAKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2g7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4 IDNlOThkODUzNy4uYzNlNTgwMTJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1NCw2ICs0NTQs MjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCisJ LyoKKwkgKiBSZWFkIHN0cmVhbSBjYWxsYmFjaywgdXNlZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRj aGluZyBvZiB0YWJsZSBBTSBwYWdlcworCSAqIGR1cmluZyBgaW5kZXhfZ2V0bmV4dF9zbG90YCBp bmRleCBzY2Fucy4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgaXMgZGlyZWN0bHkgcGFzc2VkIHRv IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uLCBmcm9tCisJICogYmF0Y2hfZ2V0bmV4dCByb3V0 aW5lLiAgSXQgd2lsbCBvbmx5IGJlIHVzZWQgZHVyaW5nIHNjYW5zIHdob3NlIGluZGV4CisJICog QU0gdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICAoU2NhbnMgd2l0aCBhbWdldHR1cGxl LWJhc2VkIGluZGV4CisJICogQU1zIGNhbm5vdCByZWFzb25hYmx5IGJlIHVzZWQgZm9yIEkvTyBw cmVmZXRjaGluZywgc2luY2UgaXRzIG9wYXF1ZQorCSAqIHR1cGxlLWF0LWEtdGltZSBpbnRlcmZh Y2UgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzY2hlZHVsZSBpbmRleCBzY2FuCisJICogd29yayBz ZW5zaWJseS4pCisJICovCisJQmxvY2tOdW1iZXIgKCppbmRleF9nZXRuZXh0X3N0cmVhbSkgKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOworCiAJLyoKIAkgKiBGZXRjaCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QK IAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZCB0aGUgdmlzaWJpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4Li4wMGY0 YzNkMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgQ29zdCBkaXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf c2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90 aWRzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZWM3 NTI3YWVkLi5iOTBmOGU2YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNTksNiArNTksOSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0 X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFw U2Nhbk5leHRCbG9jayhUYWJsZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNr LAogCQkJCQkJCQkJdWludDY0ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7Citz dGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVh bSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2 b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExLDEw ICsxMTQsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVU YWJsZVNsb3QgKmlvc190YWJsZXNsb3QpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBh bGxvYyhzaXplb2YoSW5kZXhGZXRjaEhlYXBEYXRhKSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwg PSByZWw7CisJaHNjYW4tPnhzX2Jhc2UucnMgPSBOVUxMOwogCWhzY2FuLT54c19iYXNlLm5oZWFw YWNjZXNzZXMgPSAwOwogCiAJLyogaGVhcGFtIHNwZWNpZmljIGZpZWxkcyAqLwogCWhzY2FuLT54 c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVt YmVyOwogCWhzY2FuLT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJaHNjYW4tPmlvc190YWJsZXNs b3QgPSBpb3NfdGFibGVzbG90OwogCkBAIC0xMjYsMTEgKzEzMSwxNSBAQCBoZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCisJaWYgKHNjYW4t PnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT5ycyk7CisKIAkvKiBkZWxpYmVyYXRlbHkg ZG9uJ3QgZHJvcCBWTSBidWZmZXIgcGluIGhlcmUgKi8KIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nh bi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCX0KIH0KIApAQCAtMTQxLDYgKzE1MCw5IEBAIGhlYXBhbV9pbmRleF9mZXRj aF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldChzY2FuKTsKIAorCWlmIChzY2FuLT5ycykKKwkJcmVhZF9zdHJlYW1fZW5kKHNjYW4tPnJz KTsKKwogCWlmIChoc2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKIAl7CiAJCVJlbGVhc2VC dWZmZXIoaHNjYW4tPnZtYnVmKTsKQEAgLTE2MywyMyArMTc1LDM3IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCUFzc2VydChU VFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1z d2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpjYWxs X2FnYWluKQorCS8qCisJICogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhh dmUgaXQgYWxyZWFkeSAod2UgY2FuIHNraXAgdGhpcworCSAqIGlmIHdlJ3JlIGluIG1pZC1IT1Qg Y2hhaW4pCisJICovCisJaWYgKCEqY2FsbF9hZ2FpbiAmJiBoc2Nhbi0+eHNfYmxrICE9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKIAl7Ci0JCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1 ZmZlciBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHkgKi8KLQkJQnVmZmVyCQlwcmV2X2J1ZiA9 IGhzY2FuLT54c19jYnVmOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJl ciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciho c2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJ CQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX2NidWYpKQorCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAK IAkJLyoKLQkJICogUHJ1bmUgcGFnZSwgYnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9u IHRoaXMgcGFnZQorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0gd2ls bCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRob3Vn aCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKIAkJICovCi0JCWlmIChw cmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4t PnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWlmIChzY2FuLT5ycykKKwkJCWhzY2Fu LT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc2Nhbi0+cnMsIE5VTEwpOworCQll bHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfYmxrKTsKKworCQkvKgorCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVk IGZvciB0aGUgZmlyc3QgdGltZQorCQkgKi8KKwkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAKKwkvKiBBc3NlcnQgdGhhdCB0aGUg VElEJ3MgYmxvY2sgbnVtYmVyJ3MgYnVmZmVyIGlzIG5vdyBwaW5uZWQgKi8KKwlBc3NlcnQoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJl cihoc2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CisKIAkvKiBPYnRhaW4gc2hhcmUt bG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2Nr QnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVw bGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKQEAgLTM2MywxMyArMzg5LDI0IEBAIGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKQogCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KIAlp ZiAoYmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQogCQli YXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJZWxzZSBpZiAodW5saWtlbHkoYmF0 Y2hxdWV1ZS0+ZGlzYWJsZWQgJiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykpCisJeworCQkvKgor CQkgKiBIYW5kbGUgY2FuY2VsbGluZyB0aGUgdXNlIG9mIHRoZSByZWFkIHN0cmVhbSBmb3IgcHJl ZmV0Y2hpbmcKKwkJICovCisJCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9z KTsKKworCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJc2Nh bi0+eHNfaGVhcGZldGNoLT5ycyA9IE5VTEw7CisJfQogCWVsc2UgaWYgKHVubGlrZWx5KGJhdGNo cXVldWUtPmRpcmVjdGlvbiAhPSBkaXJlY3Rpb24pKQogCXsKIAkJLyoKIAkJICogSGFuZGxlIGEg Y2hhbmdlIGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLgogCQkgKgogCQkgKiBSZWxlYXNlIGZ1dHVy ZSBiYXRjaGVzIHByb3Blcmx5LCB0byBtYWtlIGl0IGxvb2sgbGlrZSB0aGUgY3VycmVudAotCQkg KiBiYXRjaCBpcyB0aGUgb25seSBvbmUgd2UgbG9hZGVkLgorCQkgKiBiYXRjaCBpcyB0aGUgb25s eSBvbmUgd2UgbG9hZGVkLiBBbHNvIHJlc2V0IHRoZSBzdHJlYW0gcG9zaXRpb24sIGFzCisJCSAq IGlmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHRoZSBzY2FuLgogCQkgKi8KIAkJd2hpbGUgKGJhdGNo cXVldWUtPm5leHRCYXRjaCA+IGJhdGNocXVldWUtPmhlYWRCYXRjaCArIDEpCiAJCXsKQEAgLTM4 NCwxMCArNDIxLDE2IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCQkvKgogCQkgKiBSZW1lbWJlciB0aGUgbmV3 IGRpcmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2NhbiBpcyBub3QgbWFya2VkIGFzCiAJCSAq ICJmaW5pc2hlZCIgKHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSByZWFkIHRoZSBsYXN0IGJhdGNoLCBi dXQgbm93IHdlCi0JCSAqIG5lZWQgdG8gc3RhcnQgb3ZlcikuCisJCSAqIG5lZWQgdG8gc3RhcnQg b3ZlcikuIERvIHRoaXMgYmVmb3JlIHJlc2V0dGluZyB0aGUgc3RyZWFtIC0gaXQKKwkJICogc2hv dWxkIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIHVudGlsIHRoZSBmaXJzdCByZWFkLCBidXQgaXQg bWF5CisJCSAqIHNlZW0gYSBiaXQgY29uZnVzaW5nIG90aGVyd2lzZS4KIAkJICovCiAJCWJhdGNo cXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKIAkJYmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBm YWxzZTsKKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOworCisJCWlm IChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoLT5ycyk7CiAJfQogCiAJLyogc2hvcnRjdXQgZm9yIHRoZSByZWFkIHBvc2l0aW9u LCBmb3IgY29udmVuaWVuY2UgKi8KQEAgLTQyOSw2ICs0NzIsMzcgQEAgaGVhcGFtX2JhdGNoX2dl dG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJ CQkJQmF0Y2hJbmRleFNjYW4gaGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLAogCQkJ CQkJCQkJCQkJCQkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKIAorCQkJCS8qCisJCQkJICogWFhY IFdoZW4gYWR2YW5jaW5nIHJlYWRQb3MsIHRoZSBzdHJlYW1Qb3MgbWF5IGdldCBiZWhpbmQgYXMK KwkJCQkgKiB3ZSdyZSBvbmx5IGFkdmFuY2luZyBpdCB3aGVuIGFjdHVhbGx5IHJlcXVlc3Rpbmcg aGVhcAorCQkJCSAqIGJsb2Nrcy4gQnV0IHdlIG1heSBub3QgZG8gdGhhdCBvZnRlbiBlbm91Z2gg LSBlLmcuIElPUyBtYXkKKwkJCQkgKiBub3QgbmVlZCB0byBhY2Nlc3MgYWxsLXZpc2libGUgaGVh cCBibG9ja3MsIHNvIHRoZQorCQkJCSAqIHJlYWRfbmV4dCBjYWxsYmFjayBkb2VzIG5vdCBnZXQg aW52b2tlZCBmb3IgYSBsb25nIHRpbWUuCisJCQkJICogSXQncyBwb3NzaWJsZSB0aGUgc3RyZWFt IGdldHMgc28gZmFyIGJlaGluZCB0aGUgcG9zaXRpb24KKwkJCQkgKiB0aGF0IGlzIGJlY29tZXMg aW52YWxpZCwgYXMgd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBiYXRjaC4KKwkJCQkgKiBCdXQgdGhh dCBtZWFucyB3ZSBkb24ndCBuZWVkIGFueSBoZWFwIGJsb2NrcyB1bnRpbCB0aGUKKwkJCQkgKiBj dXJyZW50IHJlYWQgcG9zaXRpb24gLS0gaWYgd2UgZGlkLCB3ZSB3b3VsZCBub3QgYmUgaW4gdGhp cworCQkJCSAqIHNpdHVhdGlvbiAob3IgaXQncyBhIHNpZ24gb2YgYSBidWcsIGFzIHRob3NlIHR3 byBwbGFjZXMgYXJlCisJCQkJICogZXhwZWN0ZWQgdG8gYmUgaW4gc3luYykuIFNvIGlmIHRoZSBz dHJlYW1Qb3Mgc3RpbGwgcG9pbnRzCisJCQkJICogYXQgdGhlIGJhdGNoIHdlJ3JlIGFib3V0IHRv IGZyZWUsIHJlc2V0IHRoZSBwb3NpdGlvbiAtLQorCQkJCSAqIHdlJ2xsIHNldCBpdCB0byByZWFk UG9zIGluIHRoZSByZWFkX25leHQgY2FsbGJhY2sgbGF0ZXIgb24uCisJCQkJICoKKwkJCQkgKiBY WFggVGhpcyBjYW4gaGFwcGVuIGFmdGVyIHRoZSBxdWV1ZSBnZXRzIGZ1bGwsIHdlICJwYXVzZSIK KwkJCQkgKiB0aGUgc3RyZWFtLCBhbmQgdGhlbiByZXNldCBpdCB0byBjb250aW51ZS4gQnV0IEkg dGhpbmsgdGhhdAorCQkJCSAqIGp1c3QgaW5jcmVhc2VzIHRoZSBwcm9iYWJpbGl0eSBvZiBoaXR0 aW5nIHRoZSBpc3N1ZSwgaXQncworCQkJCSAqIGp1c3QgbW9yZSBjaGFuY2UgdG8gdG8gbm90IGFk dmFuY2UgdGhlIHN0cmVhbVBvcywgd2hpY2gKKwkJCQkgKiBkZXBlbmRzIG9uIHdoZW4gd2UgdHJ5 IHRvIGZldGNoIHRoZSBmaXJzdCBoZWFwIGJsb2NrIGFmdGVyCisJCQkJICogY2FsbGluZyByZWFk X3N0cmVhbV9yZXNldCgpLgorCQkJCSAqCisJCQkJICogRklYTUUgU2ltcGxpZnkvY2xhcmlmeS9z aG9ydGVuIHRoaXMgY29tbWVudC4gQ2FuIGl0CisJCQkJICogYWN0dWFsbHkgaGFwcGVuLCBpZiB3 ZSBuZXZlciBwdWxsIGZyb20gdGhlIHN0cmVhbSBpbiBJT1M/CisJCQkJICogV2UgcHJvYmFibHkg ZG9uJ3QgbG9vayBhaGVhZCBmb3IgdGhlIGZpcnN0IGNhbGwuCisJCQkJICovCisJCQkJaWYgKHVu bGlrZWx5KGJhdGNocXVldWUtPnN0cmVhbVBvcy5iYXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFkQmF0 Y2gpKQorCQkJCXsKKwkJCQkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OworCQkJCX0KKwogCQkJCS8qIEZyZWUgdGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3Mg bWFya0JhdGNoKSAqLwogCQkJCWJhdGNoX2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsKIApAQCAtNDQ3 LDggKzUyMSwzOCBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkJfQogCiAJCS8qCi0JCSAqIEZhaWxlZCB0byBh ZHZhbmNlIHRoZSByZWFkIHBvc2l0aW9uLiAgSGF2ZSBpbmRleGJhdGNoLmMgdXRpbGl0eQotCQkg KiByb3V0aW5lIGxvYWQgYW5vdGhlciBiYXRjaCBpbnRvIG91ciBxdWV1ZSAobmV4dCBpbiB0aGlz IGRpcmVjdGlvbikuCisJCSAqIFdlIGZhaWxlZCB0byBhZHZhbmNlLCBpLmUuIHdlIHJhbiBvdXQg b2YgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzLgorCQkgKiBTbyBpZiB3ZSBmaWxsZWQgdGhlIHF1 ZXVlLCB0aGlzIGlzIGEgZ29vZCB0aW1lIHRvIHJlc2V0IHRoZSBzdHJlYW0KKwkJICogKGJlZm9y ZSB3ZSB0cnkgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCkuCisJCSAqLworCQlpZiAodW5saWtlbHko YmF0Y2hxdWV1ZS0+cmVzZXQpKQorCQl7CisJCQliYXRjaHF1ZXVlLT5yZXNldCA9IGZhbHNlOwor CQkJYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisKKwkJCS8qCisJCQkgKiBOZWVkIHRvIHJlc2V0IHRoZSBzdHJlYW0gcG9zaXRpb24sIGl0IG1p Z2h0IGJlIHRvbyBmYXIgYmVoaW5kLgorCQkJICogVWx0aW1hdGVseSB3ZSB3YW50IHRvIHNldCBp dCB0byByZWFkUG9zLCBidXQgd2UgY2FuJ3QgZG8gdGhhdAorCQkJICogeWV0IC0gcmVhZFBvcyBz dGlsbCBwb2ludCBzYXQgdGhlIG9sZCBiYXRjaCwgc28ganVzdCByZXNldCBpdAorCQkJICogYW5k IHdlJ2xsIGluaXQgaXQgdG8gcmVhZFBvcyBsYXRlciBpbiB0aGUgY2FsbGJhY2suCisJCQkgKi8K KwkJCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9zKTsKKworCQkJaWYgKHNj YW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVh cGZldGNoLT5ycyk7CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gYWR2YW5jZSB0aGUgcmVh ZCBwb3NpdGlvbiwgc28gdHJ5IHJlYWRpbmcgdGhlIG5leHQgYmF0Y2guCisJCSAqIElmIHRoaXMg ZmFpbHMsIHdlJ3JlIGRvbmUgLSB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBsb2FkLgorCQkgKgor CQkgKiBNb3N0IG9mIHRoZSBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQgZnJvbSByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlciwKKwkJICogYnV0IHdlIG5lZWQgdG8gY2FsbCBiYXRjaF9nZXRuZXh0IGhl cmUgdG9vLCBmb3IgdHdvIHJlYXNvbnMuIEZpcnN0LAorCQkgKiB0aGUgcmVhZF9zdHJlYW0gb25s eSBnZXRzIHdvcmtpbmcgYWZ0ZXIgd2UgdHJ5IGZldGNoaW5nIHRoZSBmaXJzdAorCQkgKiBoZWFw IHR1cGxlLCBzbyB3ZSBuZWVkIHRvIGxvYWQgdGhlIGluaXRpYWwgYmF0Y2ggKHRoZSBoZWFkKS4K KwkJICogU2Vjb25kLCB3aGlsZSBtb3N0IGJhdGNoZXMgd2lsbCBiZSBwcmVsb2FkZWQgYnkgdGhl IHN0cmVhbSB0aGFua3MKKwkJICogdG8gcHJlZmV0Y2hpbmcsIGl0J3MgcG9zc2libGUgdG8gc2V0 IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeT0wLAorCQkgKiBhbmQgaW4gdGhhdCBjYXNlIGFsbCB0 aGUgYmF0Y2hlcyBnZXQgbG9hZGVkIGZyb20gaGVyZS4KIAkJICovCiAJCWlmICghYmF0Y2hfZ2V0 bmV4dChzY2FuLCBkaXJlY3Rpb24pKQogCQl7CkBAIC00NjgsNiArNTcyLDE5OCBAQCBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIENvbnRyb2xzIHdoZW4gd2UgY2FuY2Vs IHVzZSBvZiBhIHJlYWQgc3RyZWFtIHRvIGRvIHByZWZldGNoaW5nCisgKi8KKyNkZWZpbmUgSU5E RVhfU0NBTl9NSU5fRElTVEFOQ0VfTkJBVENIRVMJMjAKKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5f VFVQTEVfRElTVEFOQ0UJCTcKKworLyoKKyAqIGhlYXBhbV9nZXRuZXh0X3N0cmVhbQorICoJCXJl dHVybiB0aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVhbQorICoKKyAqIFRo aXMgYXNzdW1lcyB0aGUgImN1cnJlbnQiIHNjYW4gZGlyZWN0aW9uLCByZXF1ZXN0ZWQgYnkgdGhl IGNhbGxlci4KKyAqCisgKiBJZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMgYmVmb3JlIGNvbnN1bWlu ZyBhbGwgYmxvY2tzLCB3ZSdsbCByZXNldCB0aGUgc3RyZWFtCisgKiBhbmQgc3RhcnQgZnJvbSBz Y3JhdGNoLiBUaGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlIGlzIGhhbmRsZWQgZWxzZXdoZXJlLgor ICogSGVyZSB3ZSByZWx5IG9uIGhhdmluZyB0aGUgY29ycmVjdCB2YWx1ZSBpbiBiYXRjaHF1ZXVl LT5kaXJlY3Rpb24uCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBz dG9yZWQgaW4gc3RyZWFtUG9zLCB3aGljaCBtYXkgYmUgYWhlYWQgb2YKKyAqIHRoZSBjdXJyZW50 IHJlYWRQb3MgKHdoaWNoIGlzIHdoYXQgZ290IGNvbnN1bWVkIGJ5IHRoZSBzY2FuKS4KKyAqCisg KiBUaGUgc3RyZWFtUG9zIGNhbiBob3dldmVyIGFsc28gZ2V0IGJlaGluZCByZWFkUG9zIHRvbywg d2hlbiBzb21lIGJsb2NrcyBhcmUKKyAqIHNraXBwZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUg cmVhZF9zdHJlYW0uIEFuIGV4YW1wbGUgaXMgYW4gaW5kZXggc2NhbiBvbgorICogYSBjb3JyZWxh dGVkIGluZGV4LCB3aXRoIG1hbnkgZHVwbGljYXRlIGJsb2NrcyBhcmUgc2tpcHBlZCwgb3IgYW4g SU9TIHdoZXJlCisgKiBhbGwtdmlzaWJsZSBibG9ja3MgYXJlIHNraXBwZWQuCisgKgorICogVGhl IGluaXRpYWwgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBmcm9tIGJhdGNoX2dldG5leHRfdGlkKCku IFdlIGRvbid0CisgKiBnZXQgaGVyZSB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoKSBjYWxsLCB3aGVuIHB1bGxpbmcgdGhlCisgKiBmaXJzdCBoZWFwIHR1cGxlIGZyb20g dGhlIHN0cmVhbS4gQWZ0ZXIgdGhhdCwgbW9zdCBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQKKyAq IGJ5IHRoaXMgY2FsbGJhY2ssIGRyaXZlbiBieSB0aGUgcmVhZF9zdHJlYW0gbG9vay1haGVhZCBk aXN0YW5jZS4gSG93ZXZlciwKKyAqIHdpdGggZGlzYWJsZWQgcHJlZmV0Y2hpbmcgKHRoYXQgaXMs IHdpdGggZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTApLCBhbGwKKyAqIGJhdGNoZXMgd2lsbCBi ZSBsb2FkZWQgaW4gYmF0Y2hfZ2V0bmV4dF90aWQuCisgKgorICogSXQncyBwb3NzaWJsZSB3ZSBn b3QgaGVyZSBvbmx5IGZhaXJseSBsYXRlIGluIHRoZSBzY2FuLCBlLmcuIGlmIG1hbnkgdHVwbGVz CisgKiBnb3Qgc2tpcHBlZCBpbiB0aGUgaW5kZXgtb25seSBzY2FuLCBldGMuIEluIHRoaXMgY2Fz ZSBqdXN0IHVzZSB0aGUgcmVhZAorICogcG9zaXRpb24gYXMgYSBzdHJlYW1Qb3Mgc3RhcnRpbmcg cG9pbnQuCisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2dldG5leHRfc3RyZWFtKFJl YWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkgIHZv aWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5kZXhTY2Fu RGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBz Y2FuLT5iYXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICpzdHJlYW1Qb3MgPSAmYmF0Y2hx dWV1ZS0+c3RyZWFtUG9zOworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uID0gYmF0Y2hxdWV1ZS0+ ZGlyZWN0aW9uOworCisJLyogQnkgbm93IHdlIHNob3VsZCBrbm93IHRoZSBkaXJlY3Rpb24gb2Yg dGhlIHNjYW4uICovCisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlv bik7CisKKwkvKgorCSAqIFRoZSByZWFkIHBvc2l0aW9uIChyZWFkUG9zKSBoYXMgdG8gYmUgdmFs aWQuCisJICoKKwkgKiBXZSBpbml0aWFsaXplL2FkdmFuY2UgaXQgYmVmb3JlIGV2ZW4gYXR0ZW1w dGluZyB0byByZWFkIHRoZSBoZWFwIHR1cGxlLAorCSAqIGFuZCBpdCBnZXRzIGludmFsaWRhdGVk IHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgc2NhbiAoYnV0IHRoZW4gd2UKKwkgKiBkb24n dCBpbnZva2UgdGhlIGNhbGxiYWNrIGFnYWluKS4KKwkgKgorCSAqIFhYWCBUaGlzIGFwcGxpZXMg dG8gdGhlIHJlYWRQb3MuIFdlJ2xsIHVzZSBzdHJlYW1Qb3MgdG8gZGV0ZXJtaW5lIHdoaWNoCisJ ICogYmxvY2tzIHRvIHBhc3MgdG8gdGhlIHN0cmVhbSwgYW5kIHJlYWRQb3MgbWF5IGJlIHVzZWQg dG8gaW5pdGlhbGl6ZSBpdC4KKwkgKi8KKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sICZi YXRjaHF1ZXVlLT5yZWFkUG9zKTsKKworCS8qCisJICogVHJ5IHRvIGFkdmFuY2UgdGhlIHN0cmVh bVBvcyB0byB0aGUgbmV4dCBpdGVtLCBhbmQgaWYgdGhhdCBkb2Vzbid0CisJICogc3VjY2VlZCAo aWYgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMgaW4gbG9hZGVkIGJhdGNoZXMpLCB0cnkgbG9hZGlu ZyB0aGUKKwkgKiBuZXh0IG9uZS4KKwkgKgorCSAqIEZJWE1FIFVubGlrZSBiYXRjaF9nZXRuZXh0 X3RpZCwgdGhpcyBjYW4gbG9vcCBtb3JlIHRoYW4gdHdpY2UuIElmIG1hbnkKKwkgKiBibG9ja3Mg Z2V0IHNraXBwZWQgZHVlIHRvIGN1cnJlbnRQcmVmZXRjaEJsb2NrIG9yIGFsbC12aXNpYmlsaXR5 IChwZXIKKwkgKiB0aGUgInByZWZldGNoIiBjYWxsYmFjayksIHdlIGdldCB0byBsb2FkIGFkZGl0 aW9uYWwgYmF0Y2hlcy4gSW4gdGhlCisJICogd29yc3QgY2FzZSB3ZSBoaXQgdGhlIElOREVYX1ND QU5fTUFYX0JBVENIRVMgbGltaXQgYW5kIGhhdmUgdG8gInBhdXNlIgorCSAqIHRoZSBzdHJlYW0u CisJICovCisJd2hpbGUgKHRydWUpCisJeworCQlib29sCQlhZHZhbmNlZCA9IGZhbHNlOworCisJ CS8qCisJCSAqIElmIHRoZSBzdHJlYW0gcG9zaXRpb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVk IHlldCwgc2V0IGl0IHRvIHRoZQorCQkgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24uIFRoaXMgaXMg dGhlIGl0ZW0gdGhlIGNhbGxlciBpcyB0cnlpbmcgdG8KKwkJICogcmVhZCwgc28gaXQncyB3aGF0 IHdlIHNob3VsZCByZXR1cm4gdG8gdGhlIHN0cmVhbS4KKwkJICovCisJCWlmIChJTkRFWF9TQ0FO X1BPU19JTlZBTElEKHN0cmVhbVBvcykpCisJCXsKKwkJCSpzdHJlYW1Qb3MgPSBiYXRjaHF1ZXVl LT5yZWFkUG9zOworCQkJYWR2YW5jZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGhlYXBfYmF0 Y2hfYWR2YW5jZV9wb3Moc2Nhbiwgc3RyZWFtUG9zLCBkaXJlY3Rpb24pKQorCQl7CisJCQlhZHZh bmNlZCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBGSVhNRSBNYXliZSBjaGVjayB0aGUgc3Ry ZWFtUG9zIGlzIG5vdCBiZWhpbmQgcmVhZFBvcz8KKwkJICoKKwkJICogRklYTUUgQWN0dWFsbHks IGNvdWxkIHN0cmVhbVBvcyBnZXQgc3RhbGUvbGFnZ2luZyBiZWhpbmQgcmVhZFBvcywKKwkJICog YW5kIGlmIHllcyBob3cgbXVjaC4gQ291bGQgaXQgZ2V0IHNvIGZhciBiZWhpbmQgdG8gbm90IGJl IHZhbGlkLAorCQkgKiBwb2ludGluZyBhdCBhIGZyZWVkIGJhdGNoPyBJbiB0aGF0IGNhc2Ugd2Ug Y2FuJ3QgZXZlbiBhZHZhbmNlIGl0LAorCQkgKiBhbmQgd2Ugc2hvdWxkIGp1c3QgaW5pdGlhbGl6 ZSBpdCB0byByZWFkUG9zLiBXZSBtaWdodCBkbyB0aGF0CisJCSAqIGFueXdheSwgSSBndWVzcywg anVzdCB0byBzYXZlIG9uICJwb2ludGxlc3MiIGFkdmFuY2VzIChpdCBtdXN0CisJCSAqIGFncmVl IHdpdGggcmVhZFBvcywgd2UgY2FuJ3QgYWxsb3cgInJldHJvYWN0aXZlbHkiIGNoYW5naW5nIHRo ZQorCQkgKiBibG9jayBzZXF1ZW5jZSkuCisJCSAqLworCisJCS8qCisJCSAqIElmIHdlIGFkdmFu Y2VkIHRoZSBwb3NpdGlvbiwgZWl0aGVyIHJldHVybiB0aGUgYmxvY2sgZm9yIHRoZSBUSUQsCisJ CSAqIG9yIHNraXAgaXQgKGFuZCB0aGVuIHRyeSBhZHZhbmNpbmcgYWdhaW4pLgorCQkgKgorCQkg KiBUaGUgYmxvY2sgbWF5IGJlICJza2lwcGVkIiBmb3IgdHdvIHJlYXNvbnMuIEZpcnN0LCB0aGUg Y2FsbGVyIG1heQorCQkgKiBkZWZpbmUgYSAicHJlZmV0Y2giIGNhbGxiYWNrIHRoYXQgdGVsbHMg dXMgdG8gc2tpcCBpdGVtcyAoSU9TIGRvZXMKKwkJICogdGhpcyB0byBza2lwIGFsbC12aXNpYmxl IHBhZ2VzKS4gU2Vjb25kLCBjdXJyZW50UHJlZmV0Y2hCbG9jayBpcworCQkgKiB1c2VkIHRvIHNr aXAgZHVwbGljYXRlIGJsb2NrIG51bWJlcnMgKGEgc2VxdWVuY2Ugb2YgVElEUyBmb3IgdGhlCisJ CSAqIHNhbWUgYmxvY2spLgorCQkgKi8KKwkJaWYgKGFkdmFuY2VkKQorCQl7CisJCQlCYXRjaElu ZGV4U2NhbiBzdHJlYW1CYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nhbiwgc3RyZWFtUG9zLT5i YXRjaCk7CisJCQlJdGVtUG9pbnRlciB0aWQgPSAmc3RyZWFtQmF0Y2gtPml0ZW1zW3N0cmVhbVBv cy0+aXRlbV0uaGVhcFRpZDsKKworCQkJREVCVUdfTE9HKCJoZWFwYW1fZ2V0bmV4dF9zdHJlYW06 IGl0ZW0gJWQsIFRJRCAoJXUsJXUpIiwKKwkJCQkJICBzdHJlYW1Qb3MtPml0ZW0sCisJCQkJCSAg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0T2Zm c2V0TnVtYmVyKHRpZCkpOworCisJCQkvKiBzYW1lIGJsb2NrIGFzIGJlZm9yZSwgZG9uJ3QgbmVl ZCB0byByZWFkIGl0ICovCisJCQlpZiAoYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sg PT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQorCQkJeworCQkJCURFQlVHX0xPRygi aGVhcGFtX2dldG5leHRfc3RyZWFtOiBza2lwIGJsb2NrIChjdXJyZW50UHJlZmV0Y2hCbG9jayki KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNo QmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCXJldHVybiBiYXRj aHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jazsKKwkJfQorCisJCS8qCisJCSAqIENvdWxkbid0 IGFkdmFuY2UgdGhlIHBvc2l0aW9uLCBubyBtb3JlIGl0ZW1zIGluIHRoZSBsb2FkZWQgYmF0Y2hl cy4KKwkJICogVHJ5IGxvYWRpbmcgdGhlIG5leHQgYmF0Y2ggLSBpZiB0aGF0IHN1Y2NlZWRzLCB0 cnkgYWR2YW5jaW5nIGFnYWluCisJCSAqICh0aGlzIHRpbWUgdGhlIGFkdmFuY2Ugc2hvdWxkIHdv cmssIGJ1dCB3ZSBtYXkgc2tpcCBhbGwgdGhlIGl0ZW1zKS4KKwkJICoKKwkJICogSWYgd2UgZmFp bCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoLCB3ZSdyZSBkb25lLgorCQkgKi8KKwkJaWYgKCFiYXRj aF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlvbikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDb25z aWRlciBkaXNhYmxpbmcgcHJlZmV0Y2hpbmcgd2hlbiB3ZSBjYW4ndCBrZWVwIGEgc3VmZmljaWVu dGx5CisJCSAqIGxhcmdlICJpbmRleCB0dXBsZSBkaXN0YW5jZSIgYmV0d2VlbiByZWFkUG9zIGFu ZCBzdHJlYW1Qb3MuCisJCSAqCisJCSAqIE9ubHkgY29uc2lkZXIgZG9pbmcgdGhpcyB3aGVuIHdl J3JlIG5vdCBvbiB0aGUgc2NhbidzIGluaXRpYWwKKwkJICogYmF0Y2gsIHdoZW4gcmVhZFBvcyBh bmQgc3RyZWFtUG9zIHNoYXJlIHRoZSBzYW1lIGJhdGNoLgorCQkgKi8KKwkJaWYgKCFiYXRjaHF1 ZXVlLT5maW5pc2hlZCAmJiAhYmF0Y2hxdWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbikKKwkJewor CQkJaW50CQkJaXRlbWRpZmY7CisKKwkJCWlmIChzdHJlYW1Qb3MtPmJhdGNoIDw9IElOREVYX1ND QU5fTUlOX0RJU1RBTkNFX05CQVRDSEVTKQorCQkJeworCQkJCS8qIFRvbyBlYXJseSB0byBjaGVj ayBpZiBwcmVmZXRjaGluZyBzaG91bGQgYmUgZGlzYWJsZWQgKi8KKwkJCX0KKwkJCWVsc2UgaWYg KGJhdGNocXVldWUtPnJlYWRQb3MuYmF0Y2ggPT0gc3RyZWFtUG9zLT5iYXRjaCkKKwkJCXsKKwkJ CQlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOworCisJ CQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQkJaXRlbWRpZmYg PSBzdHJlYW1Qb3MtPml0ZW0gLSByZWFkUG9zLT5pdGVtOworCQkJCWVsc2UKKwkJCQl7CisJCQkJ CUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9CisJCQkJCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4s IHJlYWRQb3MtPmJhdGNoKTsKKworCQkJCQlpdGVtZGlmZiA9IChyZWFkUG9zLT5pdGVtIC0gcmVh ZEJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJCQkJCShzdHJlYW1Qb3MtPml0ZW0gLSByZWFkQmF0Y2gt PmZpcnN0SXRlbSk7CisJCQkJfQorCisJCQkJaWYgKGl0ZW1kaWZmIDwgSU5ERVhfU0NBTl9NSU5f VFVQTEVfRElTVEFOQ0UpCisJCQkJeworCQkJCQliYXRjaHF1ZXVlLT5kaXNhYmxlZCA9IHRydWU7 CisJCQkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQkJCX0KKwkJ CX0KKwkJCWVsc2UKKwkJCQliYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluID0gdHJ1ZTsK KwkJfQorCX0KKworCS8qIG5vIG1vcmUgaXRlbXMgaW4gdGhpcyBzY2FuICovCisJcmV0dXJuIElu dmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2Zl dGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCkBAIC0zMTM3LDYg KzM0MzMsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7 CiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRl eF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAogCS5pbmRleF9nZXRuZXh0X3Ns b3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAorCS5pbmRleF9nZXRuZXh0X3N0cmVhbSA9 IGhlYXBhbV9nZXRuZXh0X3N0cmVhbSwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5k ZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDllNGVkNWI1NS4uMTkzNmEzNGM4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTQ1OSw3ICs0NTksMTUgQEAgaW5kZXhf cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0 YmF0Y2gpOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0JLyogcmVsZWFz ZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkv KgorCSAqIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFj Y2Vzc2VzCisJICoKKwkgKiBYWFg6IEN1cnJlbnRseSwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyBy ZW1lbWJlcmVkIGFjcm9zcyBhbnkKKwkgKiByZWFkX3N0cmVhbV9yZXNldCBjYWxscyAodG8gd29y ayBhcm91bmQgdGhlIHNjYW4tPmJhdGNocXVldWUtPnJlc2V0CisJICogYmVoYXZpb3Igb2YgcmVz ZXR0aW5nIHRoZSBzdHJlYW0gdG8gZGVhbCB3aXRoIHJ1bm5pbmcgb3V0IG9mIGJhdGNoZXMpLgor CSAqIFdlIHByb2JhYmx5IF9zaG91bGRfIGJlIGZvcmdldHRpbmcgdGhlIGRpc3RhbmNlIHdoZW4g d2UgcmVzZXQgdGhlCisJICogc3RyZWFtIGhlcmUgKHRocm91Z2ggb3VyIHRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0IGNhbGwpLCB0aG91Z2guCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggZTMwY2MxNzljLi4zNGY5NmU1NDQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNzUsMTEgKzc1LDE2IEBAIGlu ZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkoIXNjYW4tPnhzX3dhbnRfaXR1 cCAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKIAkJIFJlbGF0aW9uTmVl ZHNXQUwoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOwogCXNjYW4tPmJhdGNocXVldWUtPmZpbmlzaGVk ID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQgPSBmYWxzZTsKKwlzY2FuLT5iYXRj aHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ ZGlzYWJsZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9j ayA9IEludmFsaWRCbG9ja051bWJlcjsKIAlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBO b01vdmVtZW50U2NhbkRpcmVjdGlvbjsKIAogCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVldWUgb2Yg YmF0Y2hlcyAqLwogCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVhZFBvcyk7 CiAJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwliYXRjaF9y ZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CiAKIAlzY2FuLT5iYXRjaHF1 ZXVlLT5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJhdGNocXVldWUtPmhlYWRCYXRjaCA9IDA7 CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwpAQCAtMTIzLDcgKzEyOCwyMyBAQCBiYXRjaF9nZXRu ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJaWYgKGJh dGNocXVldWUtPmZpbmlzaGVkKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlBc3NlcnQoIUlOREVYX1ND QU5fQkFUQ0hfRlVMTChzY2FuKSk7CisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IHVzZWQgdGhlIG1h eGltdW0gbnVtYmVyIG9mIGJhdGNoIHNsb3RzIGF2YWlsYWJsZSwgaXQncworCSAqIHBvaW50bGVz cyB0byB0cnkgbG9hZGluZyBhbm90aGVyIG9uZS4gVGhpcyBjYW4gaGFwcGVuIGZvciB2YXJpb3Vz CisJICogcmVhc29ucywgZS5nLiBmb3IgaW5kZXgtb25seSBzY2FucyBvbiBhbGwtdmlzaWJsZSB0 YWJsZSwgb3Igc2tpcHBpbmcKKwkgKiBkdXBsaWNhdGUgYmxvY2tzIG9uIHBlcmZlY3RseSBjb3Jy ZWxhdGVkIGluZGV4ZXMsIGV0Yy4KKwkgKgorCSAqIFdlIGNvdWxkIGVubGFyZ2UgdGhlIGFycmF5 IHRvIGFsbG93IG1vcmUgYmF0Y2hlcywgYnV0IHRoYXQncyBmdXRpbGUsIHdlCisJICogY2FuIGFs d2F5cyBjb25zdHJ1Y3QgYSBjYXNlIHVzaW5nIG1vcmUgbWVtb3J5LiBOb3Qgb25seSBpdCB3b3Vs ZCByaXNrCisJICogT09NLCBpdCdkIGFsc28gYmUgaW5lZmZpY2llbnQgYmVjYXVzZSB0aGlzIGhh cHBlbnMgZWFybHkgaW4gdGhlIHNjYW4KKwkgKiAoc28gaXQnZCBpbnRlcmZlcmUgd2l0aCBMSU1J VCBxdWVyaWVzKS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKQorCXsK KwkJREVCVUdfTE9HKCJiYXRjaF9nZXRuZXh0OiByYW4gb3V0IG9mIHNwYWNlIGZvciBiYXRjaGVz Iik7CisJCXNjYW4tPmJhdGNocXVldWUtPnJlc2V0ID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KIAogCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoImJhdGNoX2dldG5leHQgLyBzdGFydCIs IHNjYW4pOwogCkBAIC0xNDgsNiArMTY5LDE3IEBAIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAogCQlERUJVR19MT0coImJhdGNoX2dl dG5leHQgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAlZCBiYXRjaCAlcCIsCiAJCQkJICBiYXRjaHF1 ZXVlLT5oZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5leHRCYXRjaCwgYmF0Y2gpOworCisJCS8qIERl bGF5IGluaXRpYWxpemluZyBzdHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQg YmF0Y2ggKi8KKwkJaWYgKHByaW9yYmF0Y2ggJiYgIXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgJiYg IWJhdGNocXVldWUtPmRpc2FibGVkICYmCisJCQkhc2Nhbi0+eHNfd2FudF9pdHVwICYmCS8qIFhY WCBwcmVmZXRjaGluZyBkaXNhYmxlZCBmb3IgSW9TLCBmb3IKKwkJCQkJCQkJCSAqIG5vdyAqLwor CQkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMg PQorCQkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RFRkFVTFQsIE5V TEwsCisJCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJ CQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9nZXRuZXh0X3N0 cmVhbSwKKwkJCQkJCQkJCQkgICBzY2FuLCAwKTsKIAl9CiAJZWxzZQogCQliYXRjaHF1ZXVlLT5m aW5pc2hlZCA9IHRydWU7CkBAIC0xODAsOSArMjEyLDEyIEBAIGluZGV4X2JhdGNoX3Jlc2V0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkKIAliYXRjaF9hc3NlcnRfYmF0Y2hlc192 YWxpZChzY2FuKTsKIAliYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJpbmRleF9iYXRjaF9yZXNl dCIsIHNjYW4pOwogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCWlmIChzY2FuLT54c19o ZWFwZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJz KTsKIAogCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KIAliYXRjaF9yZXNldF9wb3MoJmJhdGNo cXVldWUtPnJlYWRQb3MpOworCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9z KTsKIAogCS8qCiAJICogV2l0aCAiY29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBm cmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgpAQCAtMjI4LDYgKzI2Myw4IEBAIGluZGV4X2Jh dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkKIAliYXRjaHF1ZXVl LT5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCiAKIAliYXRjaHF1 ZXVlLT5maW5pc2hlZCA9IGZhbHNlOworCWJhdGNocXVldWUtPnJlc2V0ID0gZmFsc2U7CisJYmF0 Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAli YXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKIH0KQEAgLTI5MSw5ICszMjgsMTMgQEAg aW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJhdGNoUXVl dWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOwogCUJhdGNoUXVldWVJdGVtUG9zICpt YXJrUG9zID0gJmJhdGNocXVldWUtPm1hcmtQb3M7Ci0JQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQ b3MgPSAmYmF0Y2hxdWV1ZS0+cmVhZFBvczsKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBi YXRjaHF1ZXVlLT5tYXJrQmF0Y2g7CiAKKwkvKgorCSAqIFhYWCBEaXNhYmxlIHRoaXMgb3B0aW1p emF0aW9uIHdoZW4gSS9PIHByZWZldGNoaW5nIGlzIGluIHVzZSwgYXQgbGVhc3QKKwkgKiB1bnRp bCB0aGUgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggc3RyZWFtUG9zIGFyZSBmdWxseSB1bmRl cnN0b29kLgorCSAqLworI2lmIDAKIAlpZiAocmVhZFBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0 Y2ggJiYKIAkJcmVhZFBvcy0+YmF0Y2ggPT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQogCXsKQEAg LTMwNCw2ICszNDUsNyBAQCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4pCiAJCXJlYWRQb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOwogCQlyZXR1cm47CiAJfQorI2Vu ZGlmCiAKIAkvKgogCSAqIENhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBp bnZhbGlkYXRlIGFueSBwcml2YXRlIHN0YXRlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYwppbmRleCA1YTcyODNiZDIuLjZmNjM2OTNmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCkBAIC0xNDQsNiArMTQ0LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDI7CiAKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRj aCA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7CiBib29sCQllbmFi bGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCAwMzFmZGU5ZjQuLmUzNGU2MDA2MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OSw2ICs5OSw3IEBAIHN0 cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCWZvcndhcmRlZF9idWZmZXJzOwogCWludDE2CQlwaW5u ZWRfYnVmZmVyczsKIAlpbnQxNgkJZGlzdGFuY2U7CisJaW50MTYJCWRpc3RhbmNlX29sZDsKIAlp bnQxNgkJaW5pdGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQJCQlyZWFkX2J1ZmZlcnNfZmxhZ3M7CiAJ Ym9vbAkJc3luY19tb2RlOwkJLyogdXNpbmcgaW9fbWV0aG9kPXN5bmMgKi8KQEAgLTQ2NCw2ICs0 NjUsNyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYg KGJsb2NrbnVtID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVh bS4gKi8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5kaXN0YW5jZTsKIAkJCXN0 cmVhbS0+ZGlzdGFuY2UgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg2Miw2ICs4NjQsNyBAQCBy ZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVm ZmVyX2RhdGEpCiAJCWVsc2UKIAkJewogCQkJLyogTm8gbW9yZSBibG9ja3MsIGVuZCBvZiBzdHJl YW0uICovCisJCQlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFuY2U7CiAJCQlz dHJlYW0tPmRpc3RhbmNlID0gMDsKIAkJCXN0cmVhbS0+b2xkZXN0X2J1ZmZlcl9pbmRleCA9IHN0 cmVhbS0+bmV4dF9idWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnBpbm5lZF9idWZmZXJzID0gMDsK QEAgLTEwNDYsNiArMTA0OSw5IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVh bSkKIAlpbnQxNgkJaW5kZXg7CiAJQnVmZmVyCQlidWZmZXI7CiAKKwkvKiByZW1lbWJlciB0aGUg b2xkIGRpc3RhbmNlIChpZiB3ZSByZXNldCBiZWZvcmUgZW5kIG9mIHRoZSBzdHJlYW0pICovCisJ c3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBNYXgoc3RyZWFtLT5kaXN0YW5jZSwgc3RyZWFtLT5kaXN0 YW5jZV9vbGQpOworCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwogCXN0cmVhbS0+ZGlzdGFu Y2UgPSAwOwogCkBAIC0xMDc4LDggKzEwODQsMTIgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApOwogCUFz c2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKTsKIAotCS8qIFN0YXJ0IG9mZiBhc3N1 bWluZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMTsKKwkvKgorCSAq IFJlc3RvcmUgdGhlIG9sZCBkaXN0YW5jZSwgaWYgd2UgaGF2ZSBvbmUuIE90aGVyd2lzZSBzdGFy dCBhc3N1bWluZyBkYXRhCisJICogaXMgY2FjaGVkLgorCSAqLworCXN0cmVhbS0+ZGlzdGFuY2Ug PSBNYXgoMSwgc3RyZWFtLT5kaXN0YW5jZV9vbGQpOworCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0g MDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5k ZXggM2I5ZDgzNDkwLi4zZjI2NGYxY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0CkBAIC04ODIsNiArODgyLDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywK IH0sCiAKK3sgbmFtZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jv b2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVU SE9EJywKKyAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2Nh bnMgYW5kIGluZGV4LW9ubHktc2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAg dmFyaWFibGUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAn dHJ1ZScsCit9LAorCiB7IG5hbWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wn LCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9E JywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJp YWxpemF0aW9uLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZGM5ZTIyNTVmLi5kYTUwYWUx NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK QEAgLTQxMiw2ICs0MTIsNyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFi bGVfaW5kZXhzY2FuID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVt b2l6ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3lzdmlld3Mub3V0CmluZGV4IDA0MTFkYjgzMi4uYTJhOGMzYWZhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU5LDYgKzE1OSw3IEBAIHNlbGVjdCBuYW1lLCBz ZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFi bGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAg ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFi bGVfaW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAg ICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFi bGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTczLDcgKzE3NCw3IEBAIHNlbGVj dCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUl JzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAg ICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwg b24KLSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVu dCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5 IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBv c3RtYXN0ZXIgc3RhcnQuCi0tIAoyLjUxLjAKCg== --00000000000045724e064576f530--