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 1w5oNr-003eYc-34 for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:20:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5oNq-004COD-1c for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:20:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5oNq-004CO5-03 for pgsql-hackers@lists.postgresql.org; Thu, 26 Mar 2026 17:20:38 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5oNn-00000001K6x-1dcr for pgsql-hackers@lists.postgresql.org; Thu, 26 Mar 2026 17:20:38 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b979d16dd0cso217727766b.1 for ; Thu, 26 Mar 2026 10:20:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774545635; cv=none; d=google.com; s=arc-20240605; b=ZI7/xT/HUp8lmzg+8cKVScqzPNsYQkyROZ3An+Ygzo/AuUDGbzd711WupJkbYF6Oni yK3IF4bkpYq0pAf0LA+N24EhDTd3SBppoBh2+8b0JnVmXdumL9pJ8uH2nVk2Q1b4jq8L Ax/rlPv1JCcAW+Qpi9CrLSvblYpnihaz3Erx426WN9K9R77P3Dgkt7tYsrIjBPWyY6te YjtQIllnVSejpRhngEpNwAvGXYDmekzW1nJgCr3WekmkmSI4hAaJLssszg0Axtajpe2m 9NKGbije9h7sx4KsHv70q3d0IDbyfuKvH3xudQ68k6pDVWoAbCT+QdLAoDsYNZgZN0yY jzyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=bgstUTIO8gSZx6wYeNZ/ULbeF4s8V9jrG1cSNlw6KuI=; fh=5fHmNCWET7V7stVobbdRFtYK0gAlPbR7SSCSbrs99Y4=; b=IuQ5vmL3rcuBo+KoJRVt21sZpiCAF3GrFxOzdwNIdlXUsYThs9X9M/147ZfglAUNqm LPqJN4hEOtY7gDhiqpNaPFggTQyjHebN0Kf0rFu4wjnwUb5zUB6TxqhZ+utA8+4pq+BR 2bl22E5rTgu78EqcUJ+Q6roRMA8pU4JarfhkJ67Zzx26yRk+IrAeelKrDVSl2wuhXGBm Xkm7PfZhToUCT+XZMZ4EYHsTsqlsgQF19/dQqwCiEILpIW+SCHsbqaZskedVz0lDUPpl FCR+0rO0SD0AvtuxZf/VKC6HZAburo/KktO1Z7tWzp1hCyCUNj0LBRq5IE67mbsMWhAT vPfQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774545635; x=1775150435; 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=bgstUTIO8gSZx6wYeNZ/ULbeF4s8V9jrG1cSNlw6KuI=; b=YKQnDyWMDAnofnrLw4+ubVzNATqZnccmkPg3TAnLFTifU2h+YoK3uIZY4qaB3rZUnC zW9PH7CddntOyuBv6kRbjHNo17M00YJuSYrlYHgAHAb77rm4HeXdND4kBilW5i3Z7r3O RjaMzibjXW709iQnkHxl/kSg2Zydo7rbxn+GqVz21A6SzyIFWQ9qh/uZQXtS3OAQviVh ddmnUIJtn514enbblDbpOzkGzVEBnURlJZGnqmVMNp3OVLHCPDX/79mzPnMN2UeR5UJ5 PgDcvUlkKmLE4kRsTJ4U6cSpR+/U0dam8woX5h19vrd7Zu/ipaJxVz69oV4T2qDMi7oI +UQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774545635; x=1775150435; 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=bgstUTIO8gSZx6wYeNZ/ULbeF4s8V9jrG1cSNlw6KuI=; b=NWk0i6yARTkQYCIAdnVa21OjOQ0uFQn+RQmbDqAygJG8GH28Mq45s/VOoUxEoFBlcu O10RO2YSbqtEgZXJivF38s1ebeFyuvV8SRMsG7MRGPZM7I+I1ljU+I51NrT3rHwcMyOj 64ITz7YnEnoT/+JVpI4r68lv+wcnzb9quA3T0V2ULfavTt5sbnAKySNcJPeFgioV+wYS MBFbgJqxxcUiScmiIu8wh9GT52CekUzlM0LnUiRD7lNnOrGi1VXfqVQUy/PaneA/3DXO BcbUJJtusXkQYamgUjnhu/071QzfLqDOj3HNVGUTt77ZDIn5uGkwxQF16kSa/cpJIoEX AMcw== X-Forwarded-Encrypted: i=1; AJvYcCV3xZ9kF22QDPUtijRSIbMJ7Xzhpfd3RuJ0QTXXBu0s8WI6M2ZI3zHrLv/C6coZkoLGEZtE8sqKCYdyNEWI@lists.postgresql.org X-Gm-Message-State: AOJu0YzXpBmHOXhiGjgl7O6kbJuZiHZUUjHniLctZ4U+SA/z8UAW8eO0 FBeTGDGx8NLWwZdbtRN6ntFh+kDzaCM5RZ1wWSr+Cp8GFPzGNCf6iRi5WHZLYdoeRzK2zHdgkQX oREluzhLQVqzKGNCUvh8p+CYoVFlBSrA= X-Gm-Gg: ATEYQzyU9c7TBAJO4U8etTiotc5wqwpCDcW2uR1pPycJfl4nBQIGGfVQAYusIzab1Yy bo3OCs6vrirTpCAASJdOMwC2tgjpq6mwCR6dXW54LN/FtVZWEACKBow+NBU169lgLe3rmblRa9s 1mTVaJvbtNBXboDVFjLRbPh4kYFN9DbSM53Umk1fKf/ZB//pWHiCt6kpj1DfFM4svcfthEoSQYB VTpGGUnUvp9hKgA3nEQdKUZUrcae8MT7K2cYpoVeefriq8qySXOJLsp1krj0+xKmQ920qX8QePE 3FCPm8Ni4oDJkv3cyaZFqxijn9/1zXO/2M9n9ao= X-Received: by 2002:a17:907:7ba9:b0:b97:6147:def1 with SMTP id a640c23a62f3a-b9a54237bdemr576605866b.33.1774545634319; Thu, 26 Mar 2026 10:20:34 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> <1299934.1773938807@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Thu, 26 Mar 2026 13:20:21 -0400 X-Gm-Features: AQROBzAHzego5JvS5gL7XgQBa7H2chgCzoN5khUluOtl-Y58wRpc57_bDX3xJj8 Message-ID: Subject: Re: pg_plan_advice To: Lukas Fittl Cc: Tom Lane , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002cd4f4064df09aff" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002cd4f4064df09aff Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 26, 2026 at 9:55=E2=80=AFAM Robert Haas = wrote: > Whoops. Obviously got the wrong thing stuck in my cut and paste buffer > when I was writing that. Thanks for checking it. I'm going to go ahead > and commit this, because I'm pretty confident that it's correct, and > the rest of these patches are not going to fix the buildfarm > instability without it, and I'm pretty sure multiple committers are > pretty tired of seeing these test_plan_advice failures already. Done. > Right, the comment isn't quite correct. I don't think your rewording > is quite right either, though, because there's really no reason to > mention plan_name here at all. I'll adjust it. Done and committed, after also adjusting the memory context handling to avoid re-breaking GEQO. > The dangling pointers are a good point; I agree that's bad. However, > I'd be more inclined to fix it by nulling out the alternative_root > pointers at the end of set_plan_references. I think that would just be > the case where root->isAltSubplan[ndx] && root->isUsedSubplan[ndx]. > The reason I'm reluctant to just store the name is that there's not an > easy way to find a PlannerInfo by name. I originally proposed an > "allroots" list in PlannerGlobal, but we went with subplanNames on > Tom's suggestion. I subsequently realized that this kind of stinks for > code that is trying to use this infrastructure for anything, for > exactly this reason, but Tom never responded and I never pressed the > issue. But I think we're boxing ourselves into a corner if we just > keep storing names that can't be looked up everywhere. It doesn't > matter for the issue before us, so maybe doing as you say here is the > right idea just so we can move forward, but I think we're probably > kidding ourselves a little bit. Here's a new version, where I've replaced alternative_root by alternative_plan_name, serving the same function. --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000002cd4f4064df09aff Content-Type: application/octet-stream; name="v23-0003-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v23-0003-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qmtvp2 RnJvbSAyMDMzMWFiNTUwMmM0OGMwNWM0ZTI2ZTU2NTZjNWUxNWZmOTFjOWU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMyAz LzRdIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBmb3IgYnVsayBjb2xsZWN0aW9uIG9mIHF1ZXJpZXMgYW5kIHRoZSBhc3NvY2lhdGVkCnBs YW4gYWR2aWNlIHN0cmluZ3MgdXNpbmcgZWl0aGVyIGJhY2tlbmQtbG9jYWwgbWVtb3J5IG9yIGR5 bmFtaWMKc2hhcmVkIG1lbW9yeS4gSW4gZWl0aGVyIGNhc2UsIG1lbW9yeSB1c2FnZSBjYW4gYmUg bGltaXRlZCBieQpyZXN0cmljdGlvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVlcmllcyBhbmQg YWR2aWNlIHN0cmluZ3Mgc3RvcmVkLgpDYXJlIHNob3VsZCBiZSB0YWtlbiB3aXRoIHRoZXNlIHZh bHVlcywgYW5kIHdpdGggdGhlIHVzZSBvZiB0aGlzCm1vZHVsZSBpbiBnZW5lcmFsLCBiZWNhdXNl IGl0J3MgZWFzeSB0byBjaGV3IHVwIGFuIHVucmVhc29uYWJseSBsYXJnZQphbW91bnQgb2YgbWVt b3J5LiBVbmxpa2UgcGdfc3RhdF9zdGF0ZW1lbnRzLCB0aGlzIG1vZHVsZSBkb2VzIG5vdApwcm92 aWRlIGZvciBxdWVyeSBub3JtYWxpemF0aW9uIG9yIGV2ZW4gZGVkdXBsaWNhdGlvbjsgaXQgc2lt cGx5IG1ha2VzCmEgcmVjb3JkIGZvciBldmVyeSBxdWVyeSBwbGFubmVkLgoKSXQgY2FuIGJlIHVz ZWZ1bCB0byBlbmFibGUgcXVlcnkgSUQgY29tcHV0YXRvbiBiZWZvcmUgdXNpbmcgdGhlCm1vZHVs ZSwgYnV0IGl0J3Mgbm90IHJlcXVpcmVkLiBJZiBub3QgZG9uZSwgYWxsIHF1ZXJpZXMgd2lsbCBz aW1wbHkKc2hvdyBhIHF1ZXJ5IElEIG9mIHplcm8uCgpSZXZpZXdlZC1ieTogQWxleGFuZHJhIFdh bmcgPGFsZXhhbmRyYS53YW5nLm9zc0BnbWFpbC5jb20+Ci0tLQogY29udHJpYi9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2 aWNlL01ha2VmaWxlICAgICAgICAgICAgfCAgMjYgKwogY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS9jb2xsZWN0b3IuYyAgICAgICAgIHwgNjQ5ICsrKysrKysrKysrKysrKysrKwogLi4uL2V4cGVj dGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgICAgICAgICAgICAgIHwgIDY5ICsrCiBjb250cmliL3Bn X2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jICAgICAgICAgfCAzMDMgKysrKysrKysKIGNvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3Bn X2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdf Y29sbGVjdF9hZHZpY2UuY29udHJvbCAgICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29s bGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgfCAgNDYgKysKIC4uLi90LzAwMV9z aGFyZWRfY29sbGVjdG9yLnBsICAgICAgICAgICAgICAgICB8IDE1NCArKysrKwogZG9jL3NyYy9z Z21sL2NvbnRyaWIuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwv cGdjb2xsZWN0YWR2aWNlLnNnbWwgICAgICAgICAgICAgfCAyNDQgKysrKysrKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICA2ICsKIDE2IGZpbGVzIGNo YW5nZWQsIDE2MjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2Nv bGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZhY2UuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfc2hhcmVkX2NvbGxlY3Rvci5wbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbAoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IGRkMDRj MjBhY2QyLi4yMjA3MTAzNGU1MSAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9j b250cmliL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIFNVQkRJUlMgPSBcCiAJCXBhZ2VpbnNw ZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCiAJCXBnX2J1ZmZlcmNhY2hlCVwKKwkJcGdfY29sbGVj dF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJ CXBnX292ZXJleHBsYWluIFwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250 cmliL21lc29uLmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3Li5mZjQyMmQ5YjdmYyAxMDA2NDQKLS0t IGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00NSw2 ICs0NSw3IEBAIHN1YmRpcigncGFnZWluc3BlY3QnKQogc3ViZGlyKCdwYXNzd29yZGNoZWNrJykK IHN1YmRpcigncGdfYnVmZmVyY2FjaGUnKQogc3ViZGlyKCdwZ2NyeXB0bycpCitzdWJkaXIoJ3Bn X2NvbGxlY3RfYWR2aWNlJykKIHN1YmRpcigncGdfZnJlZXNwYWNlbWFwJykKIHN1YmRpcigncGdf bG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVyZXhwbGFpbicpCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19jb2xsZWN0X2Fk dmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTk0 YzFiZjgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01h a2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKKyMgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtl ZmlsZQorCitNT0RVTEVfYmlnID0gcGdfY29sbGVjdF9hZHZpY2UKK09CSlMgPSBcCisJJChXSU4z MlJFUykgXAorCWNvbGxlY3Rvci5vIFwKKwlpbnRlcmZhY2UubworCitFWFRFTlNJT04gPSBwZ19j b2xsZWN0X2FkdmljZQorREFUQSA9IHBnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVE RVNDID0gInBnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBwbGFu IGFkdmljZSBzdHJpbmdzIgorCitSRUdSRVNTID0gbG9jYWxfY29sbGVjdG9yCitFWFRSQV9JTlNU QUxMID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQorVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19jb2xs ZWN0X2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRy aWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29sbGVjdG9yLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZmMzMjM4ZmJkCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpAQCAtMCww ICsxLDY0OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29sbGVjdG9yLmMKKyAqCSAg d29ya2hvcnNlIGZvciBzYXZpbmcgcGxhbiBhZHZpY2UgaW4gYmFja2VuZC1sb2NhbCBvciBzaGFy ZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNl L2NvbGxlY3Rvci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19jb2xsZWN0X2FkdmljZS5oIgorCisjaW5jbHVkZSAi ZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGlscy9h Y2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVz dGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfRlVOQ1RJT05fSU5G T19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9f VjEocGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBn X2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJ WkUJCTEwMjQKKyNkZWZpbmUgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQ R19HRVRfQURWSUNFX0NPTFVNTlMJNworCisvKgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9u ZSBxdWVyeSBwbGFuLCB0b2dldGhlciB3aXRoIHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJp b3VzIG90aGVyIGlkZW50aWZ5aW5nIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnY2Ff Y29sbGVjdGVkX2FkdmljZQoreworCU9pZAkJCXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9p ZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVl cnkgaWRlbnRpZmllciAqLworCVRpbWVzdGFtcFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVz dGFtcCAqLworCWludAkJCWFkdmljZV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0 dWFsIGRhdGEgKi8KKwljaGFyCQl0ZXh0dWFsX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsK K30gcGdjYV9jb2xsZWN0ZWRfYWR2aWNlOworCisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0 byBwZ2NhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxv Y2FsIG1lbW9yeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsK K3sKKwlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOwor fSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFs bCBvZiB0aGUgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3Rv cmluZyBpbiBsb2NhbCBtZW1vcnkuCisgKgorICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywg c3RhcnRpbmcgZnJvbSAwLCB0byBlYWNoIHBnY2FfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0 IHRoYXQgd2Ugc3RvcmUuIFRoZSBhY3R1YWwgc3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3Ms IHdoaWNoCisgKiBoZWxwcyBrZWVwIG1lbWNweSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0 IGRpc2NhcmRpbmcgb2xkZXIgZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9sb2NhbF9h ZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0 CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCXBnY2FfbG9j YWxfYWR2aWNlX2NodW5rICoqY2h1bmtzOworfSBwZ2NhX2xvY2FsX2FkdmljZTsKKworLyoKKyAq IEp1c3QgbGlrZSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFt aWMgc2hhcmVkIGFyZWEsCisgKiBzbyB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9m IG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9zaGFyZWRfYWR2aWNl X2NodW5rCit7CisJZHNhX3BvaW50ZXIgZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBn Y2Ffc2hhcmVkX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ2NhX2xvY2FsX2Fk dmljZSwgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0 IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdjYV9zaGFyZWRfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2 NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZTsKKwlkc2FfcG9pbnRlciBjaHVua3M7Cit9IHBnY2Ffc2hhcmVkX2FkdmljZTsK KworLyogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMg cGdjYV9sb2NhbF9hZHZpY2UgKmxvY2FsX2NvbGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdjYV9z aGFyZWRfYWR2aWNlICpzaGFyZWRfY29sbGVjdG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0 aW9ucyAqLworc3RhdGljIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqbWFrZV9jb2xsZWN0ZWRfYWR2 aWNlKE9pZCB1c2VyaWQsCisJCQkJCQkJCQkJCQkJT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJdWlu dDY0IHF1ZXJ5SWQsCisJCQkJCQkJCQkJCQkJVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJ CQkJCQkJCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQljb25zdCBjaGFy ICphZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCQkJCWRzYV9hcmVhICphcmVhLAorCQkJCQkJCQkJ CQkJCWRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgc3RvcmVfbG9jYWxfYWR2aWNl KHBnY2FfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgdHJpbV9sb2NhbF9hZHZp Y2UoaW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIHN0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50 ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCB0cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEg KmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBx dWVyeSBzdHJpbmcgZnJvbSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUg Y29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sK KwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4 dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0 YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5nKHBnY2FfY29sbGVjdGVkX2Fk dmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEgKyBjYS0+YWR2aWNlX29mZnNl dDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBhZHZpY2UgaW50byB0aGUgbG9j YWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBhcHByb3ByaWF0ZS4KKyAqLwor dm9pZAorcGdfY29sbGVjdF9hZHZpY2Vfc2F2ZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKQoreworCU9p ZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURhdGFiYXNlSWQ7CisJ VGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJaWYgKHBnX2NvbGxl Y3RfYWR2aWNlX2xvY2FsX2NvbGxlY3RvciAmJgorCQlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9j b2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCXBnY2FfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJ CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHBnX2NvbGxlY3RfYWR2aWNlX2dldF9tY3h0KCkpOworCQljYSA9IG1ha2VfY29s bGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVl cnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsKKwkJc3Rv cmVfbG9jYWxfYWR2aWNlKGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCX0KKworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yICYmCisJCXBn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCWRzYV9h cmVhICAgKmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgpOworCQlkc2FfcG9pbnRl ciBjYV9wb2ludGVyID0gSW52YWxpZERzYVBvaW50ZXI7IC8qIHBsYWNhdGUgY29tcGlsZXIgKi8K KworCQltYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJ CQkJCQkJICBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcsIGFyZWEsCisJCQkJCQkJICAmY2Ff cG9pbnRlcik7CisJCXN0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQorfQorCisv KgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVj dC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIG5l dyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1cm5lZCB2 aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0IGlzIGFs bG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1bHQgaXMg bm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICoKK21ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLCBPaWQgZGJpZCwgdWludDY0 IHF1ZXJ5SWQsCisJCQkJCSAgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkgIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLAorCQkJ CQkgIGRzYV9hcmVhICphcmVhLCBkc2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVl cnlfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFk dmljZV9zdHJpbmdfbGVuZ3RoID0gc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJ CXRvdGFsX2xlbmd0aDsKKwlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVu Z3RoID0gb2Zmc2V0b2YocGdjYV9jb2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsg cXVlcnlfc3RyaW5nX2xlbmd0aCArIGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEg PT0gTlVMTCkKKwkJY2EgPSBwYWxsb2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVz dWx0ID0gZHNhX2FsbG9jYXRlKGFyZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9h ZGRyZXNzKGFyZWEsICpyZXN1bHQpOworCX0KKworCWNhLT51c2VyaWQgPSB1c2VyaWQ7CisJY2Et PmRiaWQgPSBkYmlkOworCWNhLT5xdWVyeWlkID0gcXVlcnlJZDsKKwljYS0+dGltZXN0YW1wID0g dGltZXN0YW1wOworCWNhLT5hZHZpY2Vfb2Zmc2V0ID0gcXVlcnlfc3RyaW5nX2xlbmd0aDsKKwor CW1lbWNweShjYS0+dGV4dHVhbF9kYXRhLCBxdWVyeV9zdHJpbmcsIHF1ZXJ5X3N0cmluZ19sZW5n dGgpOworCW1lbWNweSgmY2EtPnRleHR1YWxfZGF0YVtjYS0+YWR2aWNlX29mZnNldF0sCisJCSAg IGFkdmljZV9zdHJpbmcsIGFkdmljZV9zdHJpbmdfbGVuZ3RoKTsKKworCXJldHVybiBjYTsKK30K KworLyoKKyAqIEFkZCBhIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tl bmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxl IGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhl IHByb3ZpZGVkIG9iamVjdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUg Y29udGV4dC4KKyAqLworc3RhdGljIHZvaWQKK3N0b3JlX2xvY2FsX2FkdmljZShwZ2NhX2NvbGxl Y3RlZF9hZHZpY2UgKmNhKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1 bmtfb2Zmc2V0OworCXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwor CS8qIElmIHRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yIGlzbid0IGluaXRpYWxpemVkIHlldCwg ZG8gdGhhdCBub3cuICovCisJaWYgKGxhID09IE5VTEwpCisJeworCQlsYSA9IHBhbGxvYzAoc2l6 ZW9mKHBnY2FfbG9jYWxfYWR2aWNlKSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcGFsbG9jMF9hcnJh eShwZ2NhX2xvY2FsX2FkdmljZV9jaHVuayAqLAorCQkJCQkJCQkgICBsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUpOworCQlsb2NhbF9jb2xsZWN0b3IgPSBsYTsKKwl9CisKKwkvKiBDb21w dXRlIGNodW5rIGFuZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJ Y2h1bmtfbnVtYmVyID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5L X1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURW SUNFX0NIVU5LX1NJWkU7CisKKwkvKiBFeHRlbmQgY2h1bmsgYXJyYXksIGlmIG5lZWRlZC4gKi8K KwlpZiAoY2h1bmtfbnVtYmVyID49IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7 CisJCWludAkJCW5ld19zaXplOworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBh bGxvYzBfYXJyYXkobGEtPmNodW5rcywKKwkJCQkJCQkJCSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVu ayAqLAorCQkJCQkJCQkJIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJ CSBuZXdfc2l6ZSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXpl OworCX0KKworCS8qIEFsbG9jYXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+ Y2h1bmtzW2NodW5rX251bWJlcl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJd ID0gcGFsbG9jMF9vYmplY3QocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tj aHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5r c1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0 X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQg b2xkIGRhdGEuICovCisJdHJpbV9sb2NhbF9hZHZpY2UocGdfY29sbGVjdF9hZHZpY2VfbG9jYWxf Y29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3Bv aW50ZXInIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX2NvbGxlY3RfYWR2 aWNlIERTQSBhcmVhCisgKiBhbmQgc2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBn Y2FfY29sbGVjdGVkX2FkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3N0b3JlX3NoYXJlZF9hZHZp Y2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1 aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19jb2xs ZWN0X2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZp Y2VfZHNhX2FyZWEoKTsKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdjYV9zaGFyZWRfYWR2aWNlX2NodW5r ICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJl KCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0 dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdy4K KwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBuZWVkIHRvIGNy ZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJc3RhdGUtPnNoYXJl ZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBnY2Ffc2hhcmVk X2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJs ZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQgaW4gY3JlYXRpbmcK KwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8gYWxsb2NhdGUgYW4g aW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGFsbG9j YXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qgd2UgY3JlYXRlZCB0 aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3Rvci0+Y2h1bmtf YXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNhLT5jaHVua3MgPQorCQkJZHNhX2Fs bG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICogQURWSUNFX0NIVU5L X0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0Vf Q0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBvZmZzZXQgYXQg d2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0gKHNhLT5uZXh0 X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0g KHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkvKiBH ZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFuZCwgaWYgbmVlZGVkLCBleHRlbmQg aXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3X2NodW5rczsKKwor CQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlzdGluZyBhbGxvY2F0aW9uLCBzbyB3 ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBhbmQgY29weSBkYXRhIG92ZXIuCisJ CSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklD RV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0gZHNhX2FsbG9jYXRlMChhcmVhLCBz aXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQljaHVua19hcnJheSA9IGRzYV9nZXRf YWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5KGNodW5rX2FycmF5LCBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBzaXplb2YoZHNhX3BvaW50ZXIpICog c2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUoYXJlYSwgc2EtPmNo dW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQorCQljaHVua19hcnJheSA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0 aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5r X2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCWNodW5rX2FycmF5 W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdjYV9zaGFy ZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtf YXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IElu dmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2FfcG9p bnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3Jh Z2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEs IHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVh c2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2sp OworfQorCisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5k LWxvY2FsIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8K K3N0YXRpYyB2b2lkCit0cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdjYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsK Kwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50 NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisK KwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5n IHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3RfaWQ7 CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUgZW5v dWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9j b3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJ eworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisKKwkJ Y2h1bmtfbnVtYmVyID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hV TktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkg JSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJd LT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3NbY2h1 bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVua19u dW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3RfaWQ7 CisJCS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93 IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3RfaWQg LSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsg biA8IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisKKwkv KiBTbGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2Yg dGhlIGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJh c2VfaWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0la RTsKKwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1 bmtfY291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmxh LT5jaHVua3NbMF0sICZsYS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihw Z2NhX2xvY2FsX2FkdmljZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkv KiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZsYS0+Y2h1 bmtzW3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ2NhX2xvY2FsX2Fk dmljZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVu a19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJ bGEtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQor CisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5 IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQK K3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KQoreworCXBnY2Ff c2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9j b3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsK Kwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291 bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQg cmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2Nv dW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9 IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJh eS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsK KworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGlt aXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJp bV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVu a19vZmZzZXQ7CisJCXBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkJY2h1bmtf bnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0la RTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJ Q0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19h cnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNl dF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2FfZnJlZShhcmVhLCBjaHVuay0+ZW50cmll c1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IEludmFs aWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7CisJCS0tdHJpbV9jb3VudDsKKwl9CisK KwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0 cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0Vf Q0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1fY2h1bmtfY291bnQ7ICsr bikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlbbl0pOworCisJLyogU2xpZGUgcmVtYWlu aW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8K Kwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkICsKKwkJCQkJ CSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5n X2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlm IChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZjaHVua19hcnJheVswXSwg JmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihkc2FfcG9pbnRlcikg KiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRl cnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJyYXlbcmVtYWluaW5nX2NodW5rX2NvdW50 XSwgMCwKKwkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqICh0b3RhbF9jaHVua19jb3VudCAtIHJl bWFpbmluZ19jaHVua19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3Jk aW5nbHkuICovCisJc2EtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVO S19TSVpFOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2 aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2Nh bF9jb2xsZWN0b3IgIT0gTlVMTCkKKwkJdHJpbV9sb2NhbF9hZHZpY2UoMCk7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQg YWR2aWNlIGNvbGxlY3RlZCBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9j b2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBnY2Ffc2hhcmVk X3N0YXRlICpzdGF0ZSA9IHBnX2NvbGxlY3RfYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAg KmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgm c3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRh Y2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJ ICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJu IHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29s bGVjdG9yID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJ CXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJl YWwgd29yayAqLworCXRyaW1fc2hhcmVkX2FkdmljZShhcmVhLCAwKTsKKworCUxXTG9ja1JlbGVh c2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwt Y2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwg bWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5D VElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICop IGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xs ZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVk U1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkKKwkJcmV0dXJuIChEYXR1bSkgMDsK KworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IGxhLT5v bGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251 bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBnY2FfY29sbGVjdGVkX2FkdmljZSAq Y2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVs bHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQljaHVua19udW1iZXIgPSAoaWQg LSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlk IC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2EgPSBsYS0+Y2h1bmtz W2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XTsKKworCQlpZiAoIW1lbWJlcl9j YW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVl c1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1 bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7 CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRd ID0gVGltZXN0YW1wVHpHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0 cmluZ0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmlu Z0dldFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1 ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBu dWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJs ZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitE YXR1bQorcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1 bHRpbmZvOworCXBnY2Ffc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX2NvbGxlY3RfYWR2aWNlX2F0 dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgp OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0g c2hhcmVkX2NvbGxlY3RvcjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRN YXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4g Ki8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsKKworCS8qCisJICog SWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQs IGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4gZXhp c3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJICov CisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0g SW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNhID0gZHNh X2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBJ ZiB0aGVyZSdzIG5vIGNodW5rIGFycmF5IHlldCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLwor CWlmIChzYS0+Y2h1bmtzID09IEludmFsaWREc2FQb2ludGVyKQorCXsKKwkJTFdMb2NrUmVsZWFz ZSgmc3RhdGUtPmxvY2spOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCS8qIEdldCBhIHBv aW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRy ZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLwor CWZvciAodWludDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkK Kwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJ cGdjYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdjYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQlu dWxsc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChp ZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAo aWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2Ff Z2V0X2FkZHJlc3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJaWYg KCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJCQljb250aW51ZTsK KworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0o Y2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJ CXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZhbHVl c1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2 XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxlc3Rv cmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJ IHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUu ICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJuIChEYXR1bSkgMDsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxf Y29sbGVjdG9yLm91dCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxf Y29sbGVjdG9yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjU3 Yjk2ZWU4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2V4 cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2OSBAQAorQ1JFQVRFIEVYVEVO U0lPTiBwZ19jb2xsZWN0X2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsK Ky0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxF Q1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3 ZSdsbCBleGNlZWQgaXQuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9s aW1pdCA9IDI7CistLSBFbmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRF IFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CistLSBUZXN0 IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7Cisg YSB8IGIgfCBhIHwgYiAKKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJP TSBkdW1teV90YWJsZTsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNob3VsZCBy ZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBwZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7Cisg ICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9T Q0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCist LSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0 ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0 aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBj aHVua3MuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIw MDA7CitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBQdXNo IGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4K KwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90 YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9y IHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisgY291bnQgCistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFy IG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2Js ZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZmViMTE5NzQxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBpbnRlcmZhY2UuYworICoJICBpbnRlcmZhY2Ugcm91dGluZXMg Zm9yIHRoZSBwbGFuIGFkdmljZSBjb2xsZWN0b3IKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19jb2xsZWN0X2Fkdmlj ZS5oIgorCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9n dWMuaCIKKworUEdfTU9EVUxFX01BR0lDOworCisvKiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICov CitzdGF0aWMgcGdjYV9zaGFyZWRfc3RhdGUgKnBnY2Ffc3RhdGUgPSBOVUxMOworc3RhdGljIGRz YV9hcmVhICpwZ2NhX2RzYV9hcmVhID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworYm9v bAkJcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19j b2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2Jvb2wJCXBnX2NvbGxl Y3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2 aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2hhZG93IHZhcmlhYmxlcyBm b3IgR1VDIGFzc2lnbiBob29rcyAqLworc3RhdGljIGJvb2wgcGdfY29sbGVjdF9hZHZpY2VfbG9j YWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBwZ19jb2xsZWN0 X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gZmFsc2U7CisKKy8qIE90aGVy IGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIHZvaWQgKCpyZXF1ZXN0X2FkdmljZV9nZW5l cmF0aW9uX2ZuKSAoYm9vbCBhY3RpdmF0ZSkgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRv d25faG9va190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CitzdGF0aWMgTWVtb3J5 Q29udGV4dCBwZ2NhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsKKworLyogRnVuY3Rpb24gcHJvdG90 eXBlcyAqLworc3RhdGljIHZvaWQgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZv aWQgKmFyZyk7CitzdGF0aWMgdm9pZCBwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkJICBQbGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdfY29sbGVj dF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fzc2lnbl9ob29rKGJvb2wgbmV3dmFsLAorCQkJCQkJ CQkJCQkJCQkgIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3No YXJlZF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAg IHZvaWQgKmV4dHJhKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShM aXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBt b2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBHZXQgYSBwb2lu dGVyIHNvIHdlIGNhbiBjYWxsIHBnX3BsYW5fYWR2aWNlX3JlcXVlc3RfYWR2aWNlX2dlbmVyYXRp b24uCisJICoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGRlZmluaW5nIGN1c3RvbSBH VUNzOyBvdGhlcndpc2UsIG91ciBhc3NpZ24KKwkgKiBob29rIHdpbGwgdHJ5IHRvIHVzZSB0aGlz IGZ1bmN0aW9uIHBvaW50ZXIgYmVmb3JlIGl0J3MgaW5pdGlhbGl6ZWQuCisJICoKKwkgKiBXZSBh bHNvIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgaW5zdGFsbGluZyBvdXIgb3duIGhvb2tzLCBzbyB0 aGF0IGlmCisJICogcGdfcGxhbl9hZHZpY2UgaXMgbm90IHlldCBsb2FkZWQsIGl0IHdpbGwgaW5z dGFsbCBpdHMgaG9va3MgYmVmb3JlIHdlCisJICogaW5zdGFsbCBvdXJzLiAoU2VlIGNvbW1lbnRz IGluIHBnY2FfcGxhbm5lcl9zaHV0ZG93bi4pCisJICovCisJcmVxdWVzdF9hZHZpY2VfZ2VuZXJh dGlvbl9mbiA9CisJCWxvYWRfZXh0ZXJuYWxfZnVuY3Rpb24oInBnX3BsYW5fYWR2aWNlIiwKKwkJ CQkJCQkgICAicGdfcGxhbl9hZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbiIsCisJCQkJ CQkJICAgdHJ1ZSwgTlVMTCk7CisKKwkvKiBEZWZpbmUgb3VyIEdVQ3MuICovCisJRGVmaW5lQ3Vz dG9tQm9vbFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IiLAorCQkJ CQkJCSAiRW5hYmxlIHRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEws CisJCQkJCQkJICZwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IsCisJCQkJCQkJIGZh bHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJ CQkJCQkgcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJ CQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0 byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZw Z19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJ CQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5V TEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJp YWJsZSgicGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFi bGUgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJ ICZwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJ CQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19j b2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJCQkJCSBOVUxM KTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRf Y29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWlu IGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2 aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01B WCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwsCisJCQkJCQkJTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX2NvbGxlY3Rf YWR2aWNlIik7CisKKwkvKiBJbnN0YWxsIGhvb2tzICovCisJcHJldl9wbGFubmVyX3NodXRkb3du ID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9IHBnY2Ff cGxhbm5lcl9zaHV0ZG93bjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdo ZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BnY2FfaW5pdF9zaGFyZWRfc3Rh dGUodm9pZCAqcHRyLCB2b2lkICphcmcpCit7CisJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0g KHBnY2Ffc2hhcmVkX3N0YXRlICopIHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5s b2NrLAorCQkJCQkgTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9sb2NrIikp OworCXN0YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfY29sbGVjdF9h ZHZpY2VfZHNhIik7CisJc3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUt PnNoYXJlZF9jb2xsZWN0b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVy biBhIHBvaW50ZXIgdG8gYSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFu YWdlZCBieSB0aGlzCisgKiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4 dAorcGdfY29sbGVjdF9hZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdjYV9tZW1vcnlf Y29udGV4dCA9PSBOVUxMKQorCQlwZ2NhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX2NvbGxlY3RfYWR2aWNl IiwKKwkJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ2Nh X21lbW9yeV9jb250ZXh0OworfQorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVk IHN0YXRlLgorICoKKyAqIElmIG5vIHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5p dGlhbGl6ZSBpdC4gSWYgaXQgZG9lcyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90 IHlldCBhY2Nlc3NlZCBpdCwgYXR0YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisg KiBvdXIgY2FjaGVkIHBvaW50ZXIuCisgKi8KK3BnY2Ffc2hhcmVkX3N0YXRlICoKK3BnX2NvbGxl Y3RfYWR2aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ2NhX3N0YXRlID09IE5VTEwpCisJewor CQlib29sCQlmb3VuZDsKKworCQlwZ2NhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgi cGdfY29sbGVjdF9hZHZpY2UiLCBzaXplb2YocGdjYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAg IHBnY2FfaW5pdF9zaGFyZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHBn Y2Ffc3RhdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX2NvbGxlY3RfYWR2 aWNlJ3MgRFNBIGFyZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgor cGdfY29sbGVjdF9hZHZpY2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdjYV9kc2FfYXJlYSA9 PSBOVUxMKQorCXsKKwkJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZp Y2VfYXR0YWNoKCk7CisJCWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX2Nv bGxlY3RfYWR2aWNlX2dldF9tY3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJl YV9oYW5kbGUgPT0gRFNBX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ2NhX2RzYV9hcmVhID0g ZHNhX2NyZWF0ZShzdGF0ZS0+ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ2NhX2RzYV9hcmVh KTsKKwkJCXN0YXRlLT5hcmVhID0gZHNhX2dldF9oYW5kbGUocGdjYV9kc2FfYXJlYSk7CisJCQlM V0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlwZ2NhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVh X2hhbmRsZSk7CisJCX0KKworCQlkc2FfcGluX21hcHBpbmcocGdjYV9kc2FfYXJlYSk7CisKKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ2NhX2Rz YV9hcmVhOworfQorCisvKgorICogQWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUsIHJldHJpZXZl IHRoZSBhZHZpY2Ugc3RyaW5nLCBpZiBwcmVzZW50LCBhbmQKKyAqIHBhc3MgaXQgdGhyb3VnaCB0 byB0aGUgY29sbGVjdG9yLgorICovCitzdGF0aWMgdm9pZAorcGdjYV9wbGFubmVyX3NodXRkb3du KFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpx dWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlEZWZFbGVtICAgICpwZ3BhX2l0 ZW07CisJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisKKwkvKgorCSAqIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLgorCSAqCisJICog V2Ugd2FudCB0byBiZSBjYWxsZWQgYWZ0ZXIgcGdfcGxhbl9hZHZpY2UncyBzaHV0ZG93biBob29r IGhhcyBhbHJlYWR5CisJICogZXhlY3V0ZWQuIE91ciBfUEdfaW5pdCgpIG1ha2VzIHN1cmUgdGhh dCBwZ19wbGFuX2FkdmljZSdzIGhvb2tzIGFyZQorCSAqIGFsd2F5cyBsb2FkZWQgYmVmb3JlIG91 cnMsIGFuZCBoZXJlIHdlIHBhc3MgdGhlIGhvb2sgY2FsbCBkb3duIGZpcnN0LAorCSAqIGJlZm9y ZSBkb2luZyBvdXIgb3duIHdvcmsuIFRoZSBjb21iaW5hdGlvbiBvZiB0aG9zZSB0d28gdGhpbmdz IHNob3VsZAorCSAqIGJlIGdvb2QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRoZSBhZHZpY2Ugc3Ry aW5nIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuCisJICogd2UgZ28gbG9va2luZyBmb3IgaXQuCisJ ICovCisJaWYgKHByZXZfcGxhbm5lcl9zaHV0ZG93bikKKwkJKCpwcmV2X3BsYW5uZXJfc2h1dGRv d24pIChnbG9iLCBwYXJzZSwgcXVlcnlfc3RyaW5nLCBwc3RtdCk7CisKKwkvKiBGaXNoIG91dCB0 aGUgYWR2aWNlIHN0cmluZy4gSWYgbm90IGZvdW5kLCBkbyBub3RoaW5nLiAqLworCXBncGFfaXRl bSA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJ CQkJCQkJInBnX3BsYW5fYWR2aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQlyZXR1 cm47CisJYWR2aWNlX3N0cmluZ19pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoKExpc3Qg KikgcGdwYV9pdGVtLT5hcmcsCisJCQkJCQkJCQkJCQkgImFkdmljZV9zdHJpbmciKTsKKwlpZiAo YWR2aWNlX3N0cmluZ19pdGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nID0g c3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKworCS8qCisJICogUGFzcyBpdCB0aHJv dWdoIHRvIHRoZSBhY3R1YWwgY29sbGVjdG9yLiBCdXQsIGlmIGl0J3MgdGhlIGVtcHR5IHN0cmlu ZywKKwkgKiB3ZSBhc3N1bWUgdGhhdCBjb2xsZWN0aW5nIGl0IGlzIHVuaW50ZXJlc3RpbmcuCisJ ICovCisJaWYgKGFkdmljZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJcGdfY29sbGVjdF9hZHZpY2Vf c2F2ZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nKTsKK30KKwor LyoKKyAqIHBnY2FfcGxhbm5lcl9zaHV0ZG93biB3b24ndCBmaW5kIGFueSBhZHZpY2UgdG8gY29s bGVjdCB1bmxlc3Mgd2UndmUKKyAqIHJlcXVlc3RlZCB0aGF0IGl0IGJlIGdlbmVyYXRlZC4gU28s IHdoZW5ldmVyIHRoZSBlZmZlY3RpdmUgdmFsdWUgb2YKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmxv Y2FsX2NvbGxlY3RvciBjaGFuZ2VzLCBlaXRoZXIgbWFrZSBvcgorICogcmV2b2tlIGEgcmVxdWVz dCBmb3IgYWR2aWNlIGdlbmVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19jb2xsZWN0X2Fk dmljZV9sb2NhbF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWwsIHZvaWQgKmV4dHJh KQoreworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQg JiYgIW5ld3ZhbCkKKwkJKCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAoZmFsc2UpOwor CWlmICghcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5l d3ZhbCkKKwkJKCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29s bGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gbmV3dmFsOworfQorCisv KgorICogU2FtZSBhcyBhYm92ZSwgYnV0IGZvciBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29s bGVjdG9yCisgKi8KK3N0YXRpYyB2b2lkCitwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVj dG9yX2Fzc2lnbl9ob29rKGJvb2wgbmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlpZiAocGdfY29s bGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQko KnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0 X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5ld3ZhbCkKKwkJKCpyZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCA9IG5ld3ZhbDsKK30KKworLyoKKyAqIFNlYXJjaCBh IGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRp YyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIg KmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJewor CQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRl bTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMDJkYzY1ZDI2MAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQK QEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyA9IGZp bGVzKAorICAnY29sbGVjdG9yLmMnLAorICAnaW50ZXJmYWNlLmMnLAorKQorCitpZiBob3N0X3N5 c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyArPSByY19saWJf Z2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Bn X2NvbGxlY3RfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19jb2xsZWN0X2FkdmljZSAt IGNvbGxlY3QgcXVlcmllcyBhbmQgdGhlaXIgcGxhbiBhZHZpY2Ugc3RyaW5ncycsXSkKK2VuZGlm CisKK3BnX2NvbGxlY3RfYWR2aWNlID0gc2hhcmVkX21vZHVsZSgncGdfY29sbGVjdF9hZHZpY2Un LAorICBwZ19jb2xsZWN0X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBp bmNsdWRlX2RpcmVjdG9yaWVzKCcuJyksCisgIGt3YXJnczogY29udHJpYl9tb2RfYXJncywKKykK K2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19jb2xsZWN0X2FkdmljZQorCitpbnN0YWxsX2RhdGEoCisg ICdwZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19jb2xsZWN0X2FkdmljZS5jb250 cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAn bmFtZSc6ICdwZ19jb2xsZWN0X2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNl X2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6 IHsKKyAgICAnc3FsJzogWworICAgICAgJ2xvY2FsX2NvbGxlY3RvcicsCisgICAgXSwKKyAgfSwK KyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfc2hhcmVkX2NvbGxlY3Rv ci5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2 aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4wYmU4NmM1NGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MyBA QAorLyogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNx bCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIg dGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBn X2NvbGxlY3RfYWR2aWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNU SU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAn TU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5H VUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVh cl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUg RlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwK KwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAor CU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VU IGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFN RScsICdwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOwor CitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBp ZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlk IGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0 ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RV TEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wgYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYwMWU1ZTI0ZWExCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCkBA IC0wLDAgKzEsNSBAQAorIyBwZ19jb2xsZWN0X2FkdmljZSBleHRlbnNpb24KK2NvbW1lbnQgPSAn Y29sbGVjdCBxdWVyaWVzIGFuZCB0aGUgYXNzb2NpYXRlZCBwbGFuIGFkdmljZScKK2RlZmF1bHRf dmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jb2xsZWN0X2Fk dmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9w Z19jb2xsZWN0X2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40ODBjMmM2MzNjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZp Y2UvcGdfY29sbGVjdF9hZHZpY2UuaApAQCAtMCwwICsxLDM5IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ19jb2xsZWN0X2FkdmljZS5oCisgKgkgIGRlZmluaXRpb25zIGFuZCBkZWNs YXJhdGlvbnMgZm9yIHBnX2NvbGxlY3RfYWR2aWNlIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAo YykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq CSAgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfQ09MTEVDVF9BRFZJQ0VfSAorI2RlZmlu ZSBQR19DT0xMRUNUX0FEVklDRV9ICisKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2lu Y2x1ZGUgInV0aWxzL2RzYS5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ2NhX3NoYXJlZF9zdGF0ZQor eworCUxXTG9jawkJbG9jazsKKwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFyZWE7 CisJZHNhX3BvaW50ZXIgc2hhcmVkX2NvbGxlY3RvcjsKK30gcGdjYV9zaGFyZWRfc3RhdGU7CisK Ky8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBib29sIHBnX2NvbGxlY3RfYWR2aWNlX2xvY2Fs X2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlv bl9saW1pdDsKK2V4dGVybiBib29sIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7 CitleHRlcm4gaW50CXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0Owor CisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19jb2xs ZWN0X2FkdmljZV9nZXRfbWN4dCh2b2lkKTsKK2V4dGVybiBwZ2NhX3NoYXJlZF9zdGF0ZSAqcGdf Y29sbGVjdF9hZHZpY2VfYXR0YWNoKHZvaWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19jb2xsZWN0 X2FkdmljZV9kc2FfYXJlYSh2b2lkKTsKK2V4dGVybiB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3Nh dmUodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJICAg Y29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQxYjE4N2M1Mzc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsx LDQ2IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlOworU0VUIGRlYnVnX3Bh cmFsbGVsX3F1ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2 ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSds bCBleGNlZWQgaXQuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1p dCA9IDI7CisKKy0tIEVuYWJsZSB0aGUgY29sbGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNl LmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFU RSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworCistLSBU ZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7 CitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZp Y2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9j YWxfY29sbGVjdG9yID0gb2ZmOworU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRf bG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNs ZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxl Y3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9j b2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xs ZWN0b3IgPSBvbjsKKworLS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29s bGVjdG9yLgorRE8gJCQKK0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUg J1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsKKworLS0g Q2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0 aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVu IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVj dGVkX2xvY2FsX2FkdmljZSgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS90LzAwMV9zaGFyZWRfY29sbGVjdG9yLnBsIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS90 LzAwMV9zaGFyZWRfY29sbGVjdG9yLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iYmEwYzg4M2U1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvdC8wMDFfc2hhcmVkX2NvbGxlY3Rvci5wbApAQCAtMCwwICsxLDE1NCBAQAorIyBD b3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKworIyBUZXN0IHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rvci4KK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMg SGVscGVyIGZ1bmN0aW9uLCB0byBhdm9pZCBkZXBlbmRpbmcgb24gZXhhY3QgbGluZS1icmVhayBi ZWhhdmlvci4KK3N1YiBzbWFzaF93aGl0ZXNwYWNlCit7CisJbXkgJHMgPSBzaGlmdDsKKwkkcyA9 fiBzL15ccysvLzsKKwkkcyA9fiBzL1xzKyQvLzsKKwkkcyA9fiBzL1xzKy8gL2c7CisJcmV0dXJu ICRzOworfQorCisjIFJldHJpZXZlIGFsbCBjb2xsZWN0ZWQgc2hhcmVkIGFkdmljZSBhcyBhbiBh cnJheSBvZiB3aGl0ZXNwYWNlLW5vcm1hbGl6ZWQKKyMgc3RyaW5ncywgb3JkZXJlZCBieSBpZC4K K3N1YiBnZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UKK3sKKwlteSAkcHNxbCA9IHNoaWZ0Owor CW15ICRvdXRwdXQgPSAkcHNxbC0+cXVlcnlfc2FmZSgKKwkJIlNFTEVDVCBzdHJpbmdfYWdnKGFk dmljZSwgJyFTRVBBUkFUT1IhJyBPUkRFUiBCWSBpZCkgIgorCQkuICJGUk9NIHBnX2dldF9jb2xs ZWN0ZWRfc2hhcmVkX2FkdmljZSgpIik7CisJcmV0dXJuICgpIGlmICRvdXRwdXQgZXEgJyc7CisJ cmV0dXJuIG1hcCB7IHNtYXNoX3doaXRlc3BhY2UoJF8pIH0gc3BsaXQoLyFTRVBBUkFUT1IhLywg JG91dHB1dCk7Cit9CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsK KworIyBMb2FkIHBnX2NvbGxlY3RfYWR2aWNlIGFuZCBjb25maWd1cmUgYSBzaGFyZWQgY29sbGVj dGlvbiBsaW1pdCBvZiA1LgorJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCA8 PEVPTSk7CitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfY29sbGVjdF9hZHZpY2UKK3BnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUKK0VPTQorJG5vZGUtPnN0YXJ0 OworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxlY3Rv cgorbXkgJHRlc3RfZGIgPSAnY29sbGVjdGlvbl90ZXN0JzsKK215ICR0ZXN0X3JvbGUgPSAnY29s bGVjdGlvbl9yb2xlJzsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworQ1JF QVRFIERBVEFCQVNFICR0ZXN0X2RiOworQ1JFQVRFIFVTRVIgJHRlc3Rfcm9sZTsKK0FMVEVSIFJP TEUgJHRlc3Rfcm9sZSBTRVQgcGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciA9IG9u OworRU9NCiskbm9kZS0+c2FmZV9wc3FsKCR0ZXN0X2RiLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19j b2xsZWN0X2FkdmljZScpOworCisjIFNldCB1cCB0d28gY29ubmVjdGlvbnMsIG9uZSB0byBjb250 cm9sIHRoZSB0ZXN0aW5nIHByb2Nlc3MsIGFuZCB0aGUgb3RoZXIKKyMgdG8gZXhlY3V0ZSB0aGUg cXVlcmllcyB1bmRlciB0ZXN0LgorbXkgJHBzcWxfY29udHJvbCA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJHRlc3RfZGIsIG9uX2Vycm9yX3N0b3AgPT4gMSk7CitteSAkcHNxbF90ZXN0ID0KKwkk bm9kZS0+YmFja2dyb3VuZF9wc3FsKCR0ZXN0X2RiLCBvbl9lcnJvcl9zdG9wID0+IDEsCisJCQkJ CQkgICBleHRyYV9wYXJhbXMgPT4gWyAnLS11c2VybmFtZScgPT4gJHRlc3Rfcm9sZSBdKTsKKwor IyBJbml0aWFsIHNldHVwLgorJHBzcWxfY29udHJvbC0+cXVlcnlfc2FmZSg8PEVPTSk7CitHUkFO VCBDUkVBVEUgT04gU0NIRU1BIHB1YmxpYyBUTyAkdGVzdF9yb2xlOworR1JBTlQgU0VUIE9OIFBB UkFNRVRFUiBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCBUTyAkdGVz dF9yb2xlOworU0VUIFJPTEUgJHRlc3Rfcm9sZTsKK0NSRUFURSBUQUJMRSBzYWNfZGltIChpZCBz ZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNhY19kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgc2FjX2RpbTsK KworQ1JFQVRFIFRBQkxFIHNhY19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBzYWNfZGltIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2FjX2ZhY3QKK1NFTEVDVCBnLCAo ZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNh Y19mYWN0X2RpbV9pZCBPTiBzYWNfZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIHNhY19m YWN0OworUkVTRVQgUk9MRTsKK0VPTQorCisjIFJ1biBhIGZldyB0ZXN0IHF1ZXJpZXMuCiskcHNx bF90ZXN0LT5xdWVyeV9zYWZlKDw8J0VPTScpOworU0VMRUNUICogRlJPTSBzYWNfZmFjdCBXSEVS RSBpZCA9IDQyOworU0VMRUNUICogRlJPTSBzYWNfZGltIGQgSk9JTiBzYWNfZmFjdCBmIE9OIGQu aWQgPSBmLmRpbV9pZDsKK1NFTEVDVCAqIEZST00gc2FjX2RpbSBkCisgICAgV0hFUkUgZC5pZCBJ TiAoU0VMRUNUIGYuZGltX2lkIEZST00gc2FjX2ZhY3QgZik7CitFT00KKworIyBDaGVjayB0aGF0 IHdlIGdvdCB0aHJlZSBhZHZpY2UgY29sbGVjdGlvbnMsIGFuZCB0aGUgcmlnaHQgdmFsdWVzIGZv ciBlYWNoLgorbXkgQGFkdmljZSA9IGdldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgkcHNxbF9j b250cm9sKTsKK2lzKHNjYWxhciBAYWR2aWNlLCAzLCAidGhyZWUgYWR2aWNlIGVudHJpZXMgY29s bGVjdGVkIik7CitpcygkYWR2aWNlWzBdLCAnSU5ERVhfU0NBTihzYWNfZmFjdCBwdWJsaWMuc2Fj X2ZhY3RfcGtleSkgTk9fR0FUSEVSKHNhY19mYWN0KScsCisJImNvcnJlY3QgYWR2aWNlIGZvciBx dWVyeSAxIik7CitpcygkYWR2aWNlWzFdLCAnSk9JTl9PUkRFUihmIGQpIEhBU0hfSk9JTihkKSBT RVFfU0NBTihmIGQpIE5PX0dBVEhFUihkIGYpJywKKwkiY29ycmVjdCBhZHZpY2UgZm9yIHF1ZXJ5 IDIiKTsKK2lzKCRhZHZpY2VbMl0sICdKT0lOX09SREVSKGQgZikgTkVTVEVEX0xPT1BfUExBSU4o ZikgU0VRX1NDQU4oZCkgSU5ERVhfT05MWV9TQ0FOKGYgcHVibGljLnNhY19mYWN0X2RpbV9pZCkg U0VNSUpPSU5fTk9OX1VOSVFVRShmKSBOT19HQVRIRVIoZCBmKScsCisJImNvcnJlY3QgYWR2aWNl IGZvciBxdWVyeSAzIik7CisKKyMgUnVuIGEgZmV3IG1vcmUgdGVzdCBxdWVyaWVzLCBvdmVycnVu bmluZyB0aGUgbGltaXQuIChTRVQgYW5kIFBSRVBBUkUgZG9uJ3QKKyMgdHJpZ2dlciBwbGFubmlu ZywgYnV0IEVYRUNVVEUgZG9lcy4pCiskcHNxbF90ZXN0LT5xdWVyeV9zYWZlKDw8J0VPTScpOwor QkVHSU47CitTRVQgTE9DQUwgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQg TE9DQUwgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgTE9DQUwgcGFyYWxsZWxfdHVwbGVf Y29zdCA9IDA7CitTRUxFQ1QgY291bnQoKikgRlJPTSBzYWNfZmFjdDsKK0NPTU1JVDsKK0VYUExB SU4gU0VMRUNUICogRlJPTSBzYWNfZGltOworUFJFUEFSRSB0ZXN0X3N0bXQgQVMgU0VMRUNUICog RlJPTSBzYWNfZmFjdCBXSEVSRSBpZCA9ICQxOworRVhFQ1VURSB0ZXN0X3N0bXQoNDIpOworRU9N CisKKyMgQ2hlY2sgdGhhdCBhZHZpY2UgY29sbGVjdGlvbiB3YXMgdHJpbW1lZCB0byB0aGUgY29u ZmlndXJlZCBsaW1pdC4KK0BhZHZpY2UgPSBnZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoJHBz cWxfY29udHJvbCk7CitpcyhzY2FsYXIgQGFkdmljZSwgNSwgImFkdmljZSB0cmltbWVkIHRvIGNv bGxlY3Rpb24gbGltaXQiKTsKKworIyBDaGVjayB0aGUgYWR2aWNlIGZvciBxdWVyaWVzIDQsIDUs IGFuZCA2LgoraXMoJGFkdmljZVsyXSwgJ1NFUV9TQ0FOKHNhY19mYWN0KSBHQVRIRVIoc2FjX2Zh Y3QpJywKKwkiY29ycmVjdCBhZHZpY2UgZm9yIHF1ZXJ5IDQiKTsKK2lzKCRhZHZpY2VbM10sICdT RVFfU0NBTihzYWNfZGltKSBOT19HQVRIRVIoc2FjX2RpbSknLAorCSJjb3JyZWN0IGFkdmljZSBm b3IgcXVlcnkgNSIpOworaXMoJGFkdmljZVs0XSwKKwknSU5ERVhfU0NBTihzYWNfZmFjdCBwdWJs aWMuc2FjX2ZhY3RfcGtleSkgTk9fR0FUSEVSKHNhY19mYWN0KScsCisJImNvcnJlY3QgYWR2aWNl IGZvciBxdWVyeSA2Iik7CisKKyMgUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3 ZSBjYW4gY29sbGVjdCBlbm91Z2ggYWR2aWNlIHRvIG5lZWQKKyMgbXVsdGlwbGUgY2h1bmtzLCBh bmQgdGhlbiByZXZlcnQgYmFjayB0byB0aGUgb2xkIHZhbHVlLCBzbyB0aGF0IHdlIHRyeQorIyB0 byBmcmVlIGFuIGVudGlyZSBjaHVuay4KKyRwc3FsX3Rlc3QtPnF1ZXJ5X3NhZmUoIlNFVCBwZ19j b2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDE1MDAiKTsKKyRwc3FsX3Rl c3QtPnF1ZXJ5X3NhZmUoPDwnRU9NJyk7CitETyAkJAorQkVHSU4KKwlGT1IgaSBJTiAxLi4xNTAw IExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUIDEnOworCUVORCBMT09QOworRU5EICQkOworRU9NCitA YWR2aWNlID0gZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCRwc3FsX2NvbnRyb2wpOworaXMo c2NhbGFyIEBhZHZpY2UsIDE1MDAsICJpbmNyZWFzZWQgY29sbGVjdGlvbiBsaW1pdCByZWFjaGVk Iik7CiskcHNxbF90ZXN0LT5xdWVyeV9zYWZlKCJSRVNFVCBwZ19jb2xsZWN0X2FkdmljZS5zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCIpOworJHBzcWxfdGVzdC0+cXVlcnlfc2FmZSgiU0VMRUNUICog RlJPTSBzYWNfZGltIik7CitAYWR2aWNlID0gZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCRw c3FsX2NvbnRyb2wpOworaXMoc2NhbGFyIEBhZHZpY2UsIDUsICJhZHZpY2UgdHJpbW1lZCBhY3Jv c3MgY2h1bmsgYm91bmRhcnkiKTsKKworIyBUcnkgY2xlYXJpbmcgYWxsIHRoZSBhZHZpY2UuCisk cHNxbF9jb250cm9sLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UoKSIpOworQGFkdmljZSA9IGdldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgkcHNx bF9jb250cm9sKTsKK2lzKHNjYWxhciBAYWR2aWNlLCAwLCAiYWxsIHNoYXJlZCBhZHZpY2UgY2xl YXJlZCIpOworCisjIENsZWFuIHVwLgorJHBzcWxfdGVzdC0+cXVpdDsKKyRwc3FsX2NvbnRyb2wt PnF1aXQ7Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmli LnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCmluZGV4IGJkZDQ4NjVmNTNmLi4yYWI2 ZmFmYmFiMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvY29udHJpYi5zZ21sCkBAIC0xNTIsNiArMTUyLDcgQEAgQ1JFQVRFIEVYVEVOU0lP TiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGFnZWluc3Bl Y3Q7CiAgJnBhc3N3b3JkY2hlY2s7CiAgJnBnYnVmZmVyY2FjaGU7CisgJnBnY29sbGVjdGFkdmlj ZTsKICAmcGdjcnlwdG87CiAgJnBnZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0Owpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmls ZWxpc3Quc2dtbAppbmRleCBkOTBiNDMzOGQyYS4uNDA3ZmYzYWJmZmUgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21s CkBAIC0xNDUsNiArMTQ1LDcgQEAKIDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBh Z2VpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dv cmRjaGVjay5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVy Y2FjaGUuc2dtbCI+Cis8IUVOVElUWSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3Rh ZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5z Z21sIj4KIDwhRU5USVRZIHBnZnJlZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNn bWwiPgogPCFFTlRJVFkgcGdsb2dpY2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0 LnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4yMjBhYWJlNzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMv c2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbApAQCAtMCwwICsxLDI0NCBAQAorPCEtLSBkb2Mvc3Jj L3NnbWwvcGdjb2xsZWN0YWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdjb2xsZWN0YWR2 aWNlIiB4cmVmbGFiZWw9InBnX2NvbGxlY3RfYWR2aWNlIj4KKyA8dGl0bGU+cGdfY29sbGVjdF9h ZHZpY2UgJm1kYXNoOyBjb2xsZWN0IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmlu Z3M8L3RpdGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ2NvbGxlY3RhZHZpY2UiPgorICA8cHJp bWFyeT5wZ19jb2xsZWN0X2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJh PgorICBUaGUgPGZpbGVuYW1lPnBnX2NvbGxlY3RfYWR2aWNlPC9maWxlbmFtZT4gZXh0ZW5zaW9u IGFsbG93cyB5b3UgdG8KKyAgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBwbGFuIGFkdmljZSBlYWNo IHRpbWUgYSBxdWVyeSBpcyBwbGFubmVkIGFuZCBzdG9yZQorICB0aGUgcXVlcnkgYW5kIHRoZSBn ZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4K KyAgTm90ZSB0aGF0IHRoaXMgZXh0ZW5zaW9uIHJlcXVpcmVzIHRoZSA8eHJlZiBsaW5rZW5kPSJw Z3BsYW5hZHZpY2UiIC8+IG1vZHVsZSwKKyAgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbCBwbGFu IGFkdmljZSBnZW5lcmF0aW9uOyB0aGlzIG1vZHVsZSBvbmx5IGtub3dzCisgIGhvdyB0byBzdG9y ZSB0aGUgZ2VuZXJhdGVkIGFkdmljZSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uIFdoZW5ldmVyCisg IDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBpcyBsb2FkZWQsIGl0IHdpbGwg YXV0b21hdGljYWxseSBsb2FkCisgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPi4K KyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ug d2lsbCBuZWVkIHRvIGV4ZWN1dGUKKyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xs ZWN0X2FkdmljZTwvbGl0ZXJhbD4gaW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNlLCBzbyB0aGF0 IHlvdSBoYXZlIGEgd2F5IHRvIGV4YW1pbmUgdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisgIFlvdSB3 aWxsIGFsc28gbmVlZCB0aGUgPGxpdGVyYWw+cGdfY29sbGVjdF9hZHZpY2U8L2xpdGVyYWw+IG1v ZHVsZQorICB0byBiZSBsb2FkZWQgaW4gYWxsIHNlc3Npb25zIHdoZXJlIGFkdmljZSBpcyB0byBi ZSBjb2xsZWN0ZWQuIEl0IHdpbGwKKyAgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRk aW5nIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPgorICB0byA8eHJlZiBsaW5r ZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQor ICBzZXJ2ZXIuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2 aWNlPC9saXRlcmFsPiBpbmNsdWRlcyBib3RoIGEgc2hhcmVkIGFkdmljZQorICBjb2xsZWN0b3Ig YW5kIGEgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3Ig bWFrZXMKKyAgcXVlcmllcyBhbmQgdGhlaXIgYWR2aWNlIHN0cmluZ3MgdmlzaWJsZSBvbmx5IHRv IHRoZSBzZXNzaW9uIHdoZXJlIHRob3NlCisgIHF1ZXJpZXMgd2VyZSBwbGFubmVkLCB3aGlsZSB0 aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgY29sbGVjdHMgZGF0YQorICBvbiBhIHN5c3RlbS13 aWRlIGJhc2lzLCBhbmQgYXV0aG9yaXplZCB1c2VycyBjYW4gZXhhbWluZSBkYXRhIGZyb20gYWxs CisgIHNlc3Npb25zLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBUbyBlbmFibGUgYSBjb2xsZWN0 b3IsIHlvdSBtdXN0IGZpcnN0IHNldCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgIG51 bWJlciBvZiBxdWVyaWVzIGZvciB3aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMg dGhlIGNvbGxlY3Rpb24KKyAgbGltaXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJl c3BvbmRpbmcgYWR2aWNlIHdpbGwgYmUgZGlzY2FyZGVkLgorICBUaGVuLCB5b3UgbXVzdCBhZGp1 c3QgYSBzZXBhcmF0ZSBzZXR0aW5nIHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgY29sbGVj dGlvbi4gRm9yIHRoZSBsb2NhbCBjb2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBi eSBjb25maWd1cmluZworICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0PC9saXRlcmFsPiB0byBhIHZhbHVlCisgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQg dGhlbiBlbmFibGUgYWR2aWNlIGNvbGxlY3Rpb24gYnkgc2V0dGluZworICA8bGl0ZXJhbD5wZ19j b2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBz aGFyZWQKKyAgY29sbGVjdG9yLCB0aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhh dCB0aGUgbmFtZXMgb2YgdGhlIHNldHRpbmdzCisgIGFyZSA8bGl0ZXJhbD5wZ19jb2xsZWN0X2Fk dmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgIDxsaXRlcmFsPnBn X2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgaW4g Ym90aAorICBjYXNlcywgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGFyZSBzdG9yZWQg aW4gbWVtb3J5LCBzbworICBjb25maWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBj b25zaWRlcmFibGUgbWVtb3J5IGNvbnN1bXB0aW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBP bmNlIHRoZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9y IHdoaWNoIHlvdSB3aXNoCisgIHRvIHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlLiBUaGVu LCB5b3UgY2FuIGV4YW1pbmUgd2hhdCBoYXMgYmVlbgorICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hl dmVyIG9mCisgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoKTwvbGl0ZXJhbD4gb3IKKyAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKTwvbGl0ZXJhbD4KKyAgY29ycmVzcG9uZHMgdG8gdGhlIGNv bGxlY3RvciB5b3UgZW5hYmxlZC4gVG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICBh bmQgcmVsZWFzZSBtZW1vcnksIHlvdSBjYW4gY2FsbAorICA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlKCk8L2xpdGVyYWw+CisgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgor ICBJbiBhZGRpdGlvbiB0byB0aGUgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzLCB0aGUg YWR2aWNlIGNvbGxlY3RvcnMKKyAgd2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUg dGhhdCBjYXVzZWQgdGhlIHF1ZXJ5IHRvIGJlIHBsYW5uZWQsCisgIHRoZSBPSUQgb2YgdGhlIGRh dGFiYXNlIGluIHdoaWNoIHRoZSBxdWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICBh bmQgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGNvbGxlY3Rpb24gb2NjdXJyZWQuIFRoaXMgbW9kdWxl IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0 aGVyZWZvcmUsIGlmIHlvdSB3YW50IHRoZQorICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0 ZWQgaW4gY29sbGVjdGVkIGFkdmljZSwgYmUgc3VyZSB0byBjb25maWd1cmUKKyAgPGxpdGVyYWw+ Y29tcHV0ZV9xdWVyeV9pZCA9IG9uPC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQg bWF5CisgIGFsd2F5cyBzaG93IGFzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorIDwvcGFyYT4KKwor IDxzZWN0MiBpZD0icGdjb2xsZWN0YWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlv bnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkg cmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 PnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBS ZW1vdmVzIGFsbCBjb2xsZWN0ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20g YmFja2VuZC1sb2NhbAorICAgICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNl dG9mIChpZCBiaWdpbnQsCisgICAgICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJp Z2ludCwgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBh ZHZpY2UgdGV4dCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1 cm5zIGFsbCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2Nh bAorICAgICAgYWR2aWNlIGNvbGxlY3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPGZ1bmN0aW9uPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2 b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBh bGwgY29sbGVjdGVkIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAor ICAgICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+ cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50 LAorICAgICAgICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rp b25fdGltZSB0aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9m dW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5 IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgYWR2 aWNlIGNvbGxlY3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxp c3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9 InBnY29sbGVjdGFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24g UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29s bGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+ CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBl bmFibGVzIHRoZQorICAgICAgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFs dWUgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAg ICA8cHJpbWFyeT48dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xp bWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9p bmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8L3Zh cm5hbWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQg YWR2aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBsb2NhbCBhZHZpY2UgY29sbGVj dG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVk X2NvbGxlY3RvcjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2Nv bGxlY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg IDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJu YW1lPiBlbmFibGVzIHRoZQorICAgICAgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBkZWZh dWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgIE9ubHkgc3VwZXJ1 c2VycyBhbmQgdXNlcnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFs PgorICAgICAgcHJpdmlsZWdlIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29s bGVjdGlvbl9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5k ZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQ8L3Zhcm5hbWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBx dWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFy ZWQgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0 ZXJhbD4uCisgICAgICBPbmx5IHN1cGVydXNlcnMgYW5kIHVzZXJzIHdpdGggdGhlIGFwcHJvcHJp YXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4KKyAgICAgIHByaXZpbGVnZSBjYW4gY2hhbmdlIHRo aXMgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBn Y29sbGVjdGFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFy YT4KKyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+Cisg IDwvcGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCBkZWNjOWY3YTU3Mi4uZDQxZGJiZmE4MDEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC00MDE5LDYgKzQwMTksMTIgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJs CiBwZ3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ2NhX2xv Y2FsX2FkdmljZQorcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3BnY2Ffc2hhcmVkX2FkdmljZQor cGdjYV9zaGFyZWRfYWR2aWNlX2NodW5rCitwZ2NhX3NoYXJlZF9zdGF0ZQogcGdwYV9hZHZpY2Vf aXRlbQogcGdwYV9hZHZpY2VfdGFnX3R5cGUKIHBncGFfYWR2aWNlX3RhcmdldAotLSAKMi41MS4w Cgo= --0000000000002cd4f4064df09aff Content-Type: application/octet-stream; name="v23-0002-pg_plan_advice-Invent-DO_NOT_SCAN-relation_ident.patch" Content-Disposition: attachment; filename="v23-0002-pg_plan_advice-Invent-DO_NOT_SCAN-relation_ident.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qmtvn1 RnJvbSA4YTg5MTRiOWM0ODllOGI3YjcyMzczYzhmY2VhNmU0ZDViMDVmNWE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgTWFyIDIwMjYgMTE6NTM6NDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyAy LzRdIHBnX3BsYW5fYWR2aWNlOiBJbnZlbnQKIERPX05PVF9TQ0FOKHJlbGF0aW9uX2lkZW50aWZp ZXIpLgoKVGhlIHByZW1pc2Ugb2Ygc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlIGlz IHRoYXQgaWYgd2UgcGxhbgphIHF1ZXJ5IG9uY2UsIGdlbmVyYXRlIHBsYW4gYWR2aWNlLCBhbmQg dGhlbiByZXBsYW4gaXQgdXNpbmcgdGhhdApzYW1lIGFkdmljZSwgYWxsIG9mIHRoYXQgYWR2aWNl IHNob3VsZCBhcHBseSBjbGVhbmx5LCBzaW5jZSB0aGUKc2V0dGluZ3MgYW5kIGV2ZXJ5dGhpbmcg ZWxzZSBhcmUgdGhlIHNhbWUuIFVuZm9ydHVuYXRlbHksIHRoYXQncwpub3QgdGhlIGNhc2U6IHRo ZSB0ZXN0IHN1aXRlIGlzIHRoZSBtYWluIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZApjb25jdXJyZW50 IGFjdGl2aXR5IGNhbiBjaGFuZ2UgdGhlIHN0YXRpc3RpY3Mgb24gdGFibGVzIGludm9sdmVkCmlu IHRoZSBxdWVyeSwgZXNwZWNpYWxseSBzeXN0ZW0gY2F0YWxvZ3MuIFRoYXQncyBPSyBhcyBsb25n IGFzIGl0Cm9ubHkgYWZmZWN0cyBjb3N0aW5nLCBidXQgaW4gYSBmZXcgY2FzZXMsIGl0IGFmZmVj dHMgd2hpY2ggcmVsYXRpb25zCmFwcGVhciBpbiB0aGUgZmluYWwgcGxhbiBhdCBhbGwuCgpJbiB0 aGUgYnVpbGRmYXJtIGZhaWx1cmVzIG9ic2VydmVkIHRvIGRhdGUsIHRoaXMgaGFwcGVucyBiZWNh dXNlCndlIGNvbnNpZGVyIGFsdGVybmF0aXZlIHN1YnBsYW5zIGZvciB0aGUgc2FtZSBwb3J0aW9u IG9mIHRoZSBxdWVyeTsKaW4gdGhlb3J5LCBNaW5NYXhBZ2dQYXRoIGlzIHZ1bG5lcmFibGUgdG8g YSBzaW1pbGFyIGhhemFyZC4gSW4gYm90aApjYXNlcywgdGhlIHBsYW5uZXIgY2xvbmVzIGFuIGVu dGlyZSBzdWJxdWVyeSwgYW5kIHRoZSBjbG9uZSBoYXMgYQpkaWZmZXJlbnQgcGxhbiBuYW1lLCBh bmQgdGhlcmVmb3JlIGRpZmZlcmVudCByYW5nZSB0YWJsZSBpZGVudGlmaWVycywKdGhhbiB0aGUg b3JpZ2luYWwuIElmIGEgY29zdCBjaGFuZ2UgcmVzdWx0cyBpbiBmbGlwcGluZyBiZXR3ZWVuIG9u ZQpvZiB0aGVzZSBwbGFucyBhbmQgdGhlIG90aGVyLCB0aGUgdGVzdF9wbGFuX2FkdmljZSB0ZXN0 cyB3aWxsIGZhaWwsCmJlY2F1c2UgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIHRvIHdoaWNo IGFkdmljZSB3YXMgYXBwbGllZCB3b24ndApldmVuIGJlIHByZXNlbnQgaW4gdGhlIG91dHB1dCBv ZiB0aGUgc2Vjb25kIHBsYW5uaW5nIGN5Y2xlLgoKVG8gZml4LCBpbnZlbnQgYSBuZXcgRE9fTk9U X1NDQU4gYWR2aWNlIHRhZy4gV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwKZW1pdCBpdCBmb3IgcmVs YXRpb25zIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIGZpbmFsIHBsYW4gYXQKYWxsLCBi ZWNhdXNlIHNvbWUgYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZiB0aGF0IHJlbGF0aW9uIHdhcyB1c2Vk Cmluc3RlYWQuIFdoZW4gRE9fTk9UX1NDQU4gaXMgc3VwcGxpZWQsIGRpc2FibGUgYWxsIHNjYW4g bWV0aG9kcyBmb3IKdGhhdCByZWxhdGlvbi4KClRvIG1ha2UgdGhpcyB3b3JrLCB3ZSByZXVzZSBh IGJ1bmNoIG9mIHRoZSBtYWNoaW5lcnkgdGhhdCBwcmV2aW91c2x5CmV4aXN0ZWQgZm9yIHRoZSBw dXJwb3NlIG9mIGVuc3VyaW5nIHRoYXQgd2UgYnVpbGQgdGhlIHNhbWUgc2V0IG9mCnJlbGF0aW9u IGlkZW50aWZpZXJzIGR1cmluZyBwbGFubmluZyBhcyB3ZSBkbyBmcm9tIHRoZSBmaW5hbApQbGFu bmVkU3RtdC4gSW4gdGhlIHByb2Nlc3MsIHRoaXMgY29tbWl0IHNsaWdodGx5IHdlYWtlbnMgdGhl CmNyb3NzLWNoZWNrIG1lY2hhbmlzbTogYmVmb3JlIHRoaXMgY29tbWl0LCBpdCB3b3VsZCBmaXJl IHdoZW5ldmVyCnRoZSBwZ19wbGFuX2FkdmljZSBtb2R1bGUgd2FzIGxvYWRlZCwgZXZlbiBpZiBw Z19wbGFuX2FkdmljZSB3YXNuJ3QKYWN0dWFsbHkgZG9pbmcgYW55dGhpbmc7IG5vdywgaXQgd2ls bCBvbmx5IGVuZ2FnZSB3aGVuIHdlIGhhdmUgc29tZQpvdGhlciByZWFzb24gdG8gY3JlYXRlIGEg cGdwYV9wbGFubmVyX3N0YXRlLiBUaGUgb2xkIHdheSB3YXMgY29tcGxleAphbmQgZGlkbid0IGFk ZCBtdWNoIHVzZWZ1bCB0ZXN0IGNvdmVyYWdlLCBzbyB0aGlzIHNlZW1zIGxpa2UgYW4KYWNjZXB0 YWJsZSBzYWNyaWZpY2UuCi0tLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAg ICAgICAgICAgIHwgICA3ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2 ZXMub3V0ICB8IDE1OCArKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3NjYW4ub3V0ICAgICAgfCAgMTcgKy0KIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24u YnVpbGQgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmMgICAgICAgICAgICAgfCAgIDYgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5o ICAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQu YyAgICAgICAgICB8ICAzNSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmMgICAgICAgICB8IDIxMyArKysrKysrKysrLS0tLS0tLS0KIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmggICAgICAgICB8ICAyNiArKy0KIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAxNTYgKysrKysrKysrKystLQogY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2FsdGVybmF0aXZlcy5zcWwgICB8ICA1OCArKysrKwogY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwgICAgICAgICAgIHwgICA1ICstCiBkb2Mvc3JjL3NnbWwv cGdwbGFuYWR2aWNlLnNnbWwgICAgICAgICAgICAgICAgfCAgMTQgKy0KIDE1IGZpbGVzIGNoYW5n ZWQsIDU4MSBpbnNlcnRpb25zKCspLCAxMTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2ZXMub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvYWx0ZXJuYXRpdmVzLnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9SRUFETUUKaW5kZXggYjBlNGZkMWQ2ZTEuLjJlYTYxZTliYzQxIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQpAQCAtMTA5LDYgKzEwOSwxMyBAQCBCaXRtYXAgaGVhcCBzY2FucyBj dXJyZW50bHkgZG8gbm90IGFsbG93IGZvciBhbiBpbmRleCBzcGVjaWZpY2F0aW9uOgogQklUTUFQ X0hFQVBfU0NBTihmb28gYmFyKSBzaW1wbHkgbWVhbnMgdGhhdCBlYWNoIG9mIGZvbyBhbmQgYmFy IHNob3VsZCB1c2UKIHNvbWUgc29ydCBvZiBiaXRtYXAgaGVhcCBzY2FuLgogCitUaGVyZSBpcyBh IHNwZWNpYWwgRE9fTk9UX1NDQU4oKSBhZHZpY2UgdGFnIHdoaWNoIHNheXMgdGhhdCBhIGNlcnRh aW4KK3JlbGF0aW9uIHNob3VsZG4ndCBiZSBzY2FubmVkIGF0IGFsbC4gVGhpcyBpcyB1c2VkIHRv IGNvbnRyb2wgd2hpY2ggb2YKK3R3byBjaG9pY2VzIGlzIHNlbGVjdGVkIHdoZW4gYW4gQWx0ZXJu YXRpdmVTdWJQbGFuIGlzIHJlc29sdmVkLCBhbmQKK3doZXRoZXIgb3Igbm90IGEgTWluTWF4QWdn UGF0aCBpcyBjaG9zZW4uIENvbnRyb2wgb3ZlciB1cHBlciBwbGFubmVyCitiZWhhdmlvciBpcyBn ZW5lcmFsbHkgb3V0LW9mLXNjb3BlIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGVzZSBjYXNlcyBoYWQK K3RvIGJlIGhhbmRsZWQgdG8gcHJldmVudCB0ZXN0X3BsYW5fYWR2aWNlIGZhaWx1cmVzIGluIHRo ZSBidWlsZGZhcm0uCisKIEpvaW4gT3JkZXIgQWR2aWNlCiA9PT09PT09PT09PT09PT09PQogCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2FsdGVybmF0aXZlcy5v dXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2FsdGVybmF0aXZlcy5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2ZmIyOTZkNGI0Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2ZXMu b3V0CkBAIC0wLDAgKzEsMTU4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgYWx0X3QxIChhIGlu dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIGFsdF90 MiAoYSBpbnQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRF WCBPTiBhbHRfdDIoYSk7CitJTlNFUlQgSU5UTyBhbHRfdDEgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLCAxMDAwKTsKK0lOU0VSVCBJTlRPIGFsdF90MiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwMCk7CitWQUNVVU0gQU5BTFlaRSBhbHRfdDE7CitWQUNVVU0gQU5BTFlaRSBhbHRfdDI7 CistLSBUaGlzIHF1ZXJ5IHVzZXMgYW4gT1IgdG8gcHJldmVudCB0aGUgRVhJU1RTIGZyb20gYmVp bmcgY29udmVydGVkIHRvIGEKKy0tIHNlbWktam9pbiwgZm9yY2luZyB0aGUgcGxhbm5lciB0aHJv dWdoIHRoZSBBbHRlcm5hdGl2ZVN1YlBsYW4gcGF0aC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUgRVhJU1RTIChTRUxFQ1QgMSBG Uk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBPUiBhbHRfdDEuYSA8IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYWx0X3QxCisgICBGaWx0ZXI6ICgo QU5ZIChhID0gKGhhc2hlZCBTdWJQbGFuIGV4aXN0c18yKS5jb2wxKSkgT1IgKGEgPCAwKSkKKyAg IFN1YlBsYW4gZXhpc3RzXzIKKyAgICAgLT4gIFNlcSBTY2FuIG9uIGFsdF90MgorIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF90MSBhbHRfdDJAZXhpc3RzXzIpCisgICBO T19HQVRIRVIoYWx0X3QxIGFsdF90MkBleGlzdHNfMikKKyAgIERPX05PVF9TQ0FOKGFsdF90MkBl eGlzdHNfMSkKKyg4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGVpdGhl ciBBbHRlcm5hdGl2ZVN1YlBsYW4gYnkgYWR2aXNpbmcgYWdhaW5zdAorLS0gc2Nhbm5pbmcgdGhl IG90aGVyIHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0RPX05PVF9TQ0FOKGFsdF90MkBleGlzdHNfMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gYWx0X3QxCitXSEVSRSBFWElTVFMgKFNFTEVDVCAx IEZST00gYWx0X3QyIFdIRVJFIGFsdF90Mi5hID0gYWx0X3QxLmEpIE9SIGFsdF90MS5hIDwgMDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBhbHRfdDEKKyAgIEZpbHRlcjog KChBTlkgKGEgPSAoaGFzaGVkIFN1YlBsYW4gZXhpc3RzXzIpLmNvbDEpKSBPUiAoYSA8IDApKQor ICAgU3ViUGxhbiBleGlzdHNfMgorICAgICAtPiAgU2VxIFNjYW4gb24gYWx0X3QyCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBET19OT1RfU0NBTihhbHRfdDJAZXhpc3RzXzEpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihhbHRfdDEgYWx0X3Qy QGV4aXN0c18yKQorICAgTk9fR0FUSEVSKGFsdF90MSBhbHRfdDJAZXhpc3RzXzIpCisgICBET19O T1RfU0NBTihhbHRfdDJAZXhpc3RzXzEpCisoMTAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihhbHRfdDJAZXhpc3RzXzIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUgRVhJ U1RTIChTRUxFQ1QgMSBGUk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBPUiBh bHRfdDEuYSA8IDA7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBhbHRfdDEKKyAgIEZpbHRlcjogKEVYSVNUUyhT dWJQbGFuIGV4aXN0c18xKSBPUiAoYSA8IDApKQorICAgU3ViUGxhbiBleGlzdHNfMQorICAgICAt PiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFsdF90Ml9hX2lkeCBvbiBhbHRfdDIKKyAgICAgICAg ICAgSW5kZXggQ29uZDogKGEgPSBhbHRfdDEuYSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IERPX05PVF9TQ0FOKGFsdF90MkBleGlzdHNfMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF90MSkKKyAgIElOREVYX09OTFlfU0NBTihhbHRf dDJAZXhpc3RzXzEgcHVibGljLmFsdF90Ml9hX2lkeCkKKyAgIE5PX0dBVEhFUihhbHRfdDEgYWx0 X3QyQGV4aXN0c18xKQorICAgRE9fTk9UX1NDQU4oYWx0X3QyQGV4aXN0c18yKQorKDEyIHJvd3Mp CisKK0NPTU1JVDsKKy0tIE5vdyBsZXQncyB0ZXN0IGEgY2FzZSBpbnZvbHZpbmcgTWluTWF4QWdn UGF0aCwgd2hpY2ggd2UgdHJlYXQgc2ltaWxhcmx5CistLSB0byB0aGUgQWx0ZXJuYXRpdmVTdWJQ bGFuIGNhc2UuCitDUkVBVEUgVEFCTEUgYWx0X21pbm1heCAoYSBpbnQpIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRFWCBPTiBhbHRfbWlubWF4KGEpOworSU5T RVJUIElOVE8gYWx0X21pbm1heCBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKK1ZB Q1VVTSBBTkFMWVpFIGFsdF9taW5tYXg7CistLSBVc2luZyBhbiBJbmRleCBTY2FuIGluc2lkZSBv ZiBhbiBJbml0UGxhbiBzaG91bGQgd2luIG92ZXIgYSBmdWxsIHRhYmxlCistLSBzY2FuLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9N IGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgUmVwbGFjZXM6IE1pbk1heEFn Z3JlZ2F0ZQorICAgSW5pdFBsYW4gbWlubWF4XzEKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAg IC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4 CisgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBOVUxMKQorICAgSW5pdFBs YW4gbWlubWF4XzIKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gQmFja3dhcmQgdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4IGFsdF9taW5t YXhfMQorICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBJUyBOT1QgTlVMTCkKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oYWx0X21pbm1heEBtaW5tYXhf MSBwdWJsaWMuYWx0X21pbm1heF9hX2lkeAorICAgIGFsdF9taW5tYXhAbWlubWF4XzIgcHVibGlj LmFsdF9taW5tYXhfYV9pZHgpCisgICBOT19HQVRIRVIoYWx0X21pbm1heEBtaW5tYXhfMSBhbHRf bWlubWF4QG1pbm1heF8yKQorICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heCkKKygxNSByb3dzKQor CistLSBBZHZpc2luZyBhZ2FpbnN0IHRoZSBzY2FuIG9mIGFsdF9taW5tYXggYXQgdGhlIHJvb3Qg cXVlcnkgbGV2ZWwgc2hvdWxkCistLSBjaGFuZ2Ugbm90aGluZywgYnV0IGlmIHdlIHNheSB3ZSBk b24ndCB3YW50IGVpdGhlciBvZiBvciBib3RoIG9mIHRoZQorLS0gbWlubWF4LXZhcmlhbnQgc2Nh bnMsIHRoZSBwbGFuIHNob3VsZCBzd2l0Y2ggdG8gYSBmdWxsIHRhYmxlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1h eCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSksIG1h eChhKSBGUk9NIGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgUmVwbGFjZXM6 IE1pbk1heEFnZ3JlZ2F0ZQorICAgSW5pdFBsYW4gbWlubWF4XzEKKyAgICAgLT4gIExpbWl0Cisg ICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBh bHRfbWlubWF4CisgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBOVUxMKQor ICAgSW5pdFBsYW4gbWlubWF4XzIKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIC0+ICBJbmRl eCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4 IGFsdF9taW5tYXhfMQorICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBJUyBOT1QgTlVM TCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIERPX05PVF9TQ0FOKGFsdF9taW5tYXgpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4o YWx0X21pbm1heEBtaW5tYXhfMSBwdWJsaWMuYWx0X21pbm1heF9hX2lkeAorICAgIGFsdF9taW5t YXhAbWlubWF4XzIgcHVibGljLmFsdF9taW5tYXhfYV9pZHgpCisgICBOT19HQVRIRVIoYWx0X21p bm1heEBtaW5tYXhfMSBhbHRfbWlubWF4QG1pbm1heF8yKQorICAgRE9fTk9UX1NDQU4oYWx0X21p bm1heCkKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0RP X05PVF9TQ0FOKGFsdF9taW5tYXhAbWlubWF4XzEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBhbHRfbWlubWF4OworICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdn cmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gYWx0X21pbm1heAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF9taW5tYXgpCisgICBOT19H QVRIRVIoYWx0X21pbm1heCkKKyAgIERPX05PVF9TQ0FOKGFsdF9taW5tYXhAbWlubWF4XzEgYWx0 X21pbm1heEBtaW5tYXhfMikKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSkgRE9fTk9UX1NDQU4oYWx0 X21pbm1heEBtaW5tYXhfMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCBtaW4oYSksIG1heChhKSBGUk9NIGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBTZXEgU2NhbiBvbiBhbHRfbWlubWF4CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBET19O T1RfU0NBTihhbHRfbWlubWF4QG1pbm1heF8xKSAvKiBtYXRjaGVkICovCisgICBET19OT1RfU0NB TihhbHRfbWlubWF4QG1pbm1heF8yKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oYWx0X21pbm1heCkKKyAgIE5PX0dBVEhFUihhbHRfbWlubWF4KQor ICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSBhbHRfbWlubWF4QG1pbm1heF8yKQor KDkgcm93cykKKworQ09NTUlUOworRFJPUCBUQUJMRSBhbHRfdDEsIGFsdF90MiwgYWx0X21pbm1h eDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CmluZGV4IDNmOWUxM2I2 ZDQxLi40NGNlNDBmMzNhNiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9zY2FuLm91dAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4u b3V0CkBAIC0yNzAsNyArMjcwLDggQEAgRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOwogQ09NTUlUOwogLS0gV2UgY2Fu IGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0 IHdlCiAtLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8g dGhlIGNvbHVtbiBsaXN0KQotLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9m IGEgVElEIHF1YWwpLgorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEg VElEIHF1YWwpLiBJZiB3ZSBhcHBseSBET19OT1RfU0NBTgorLS0gaGVyZSwgd2Ugc2hvdWxkIGdl dCBhIHZhbGlkIHBsYW4gYW55d2F5LCBidXQgd2l0aCB0aGUgc2NhbiBkaXNhYmxlZC4KIEJFR0lO OwogU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxl KSc7CiBFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CkBAIC0zMTMsNiArMzE0LDIwIEBAIEVYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKICAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQogKDggcm93cykKIAorU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIERPX05PVF9T Q0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCiBDT01NSVQ7CiAtLSBXZSBjYW4g Zm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBi dXQgd2UgY2FuJ3QKIC0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5l ciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKaW5k ZXggMzZiYmM0ZTk4MjYuLmYyMDk4OTQ3YjY0IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVp bGQKQEAgLTUzLDYgKzUzLDcgQEAgdGVzdHMgKz0gewogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1 aWxkX2RpcigpLAogICAncmVncmVzcyc6IHsKICAgICAnc3FsJzogWworICAgICAgJ2FsdGVybmF0 aXZlcycsCiAgICAgICAnZ2F0aGVyJywKICAgICAgICdqb2luX29yZGVyJywKICAgICAgICdqb2lu X3N0cmF0ZWd5JywKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwppbmRleCBmNGZhNmE2MjZkNC4u M2MzNDBjNmFlN2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTMyLDYgKzMyLDgg QEAgcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3Rh ZykKIAl7CiAJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKIAkJCXJldHVybiAiQklU TUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfRE9fTk9UX1NDQU46CisJCQlyZXR1cm4g IkRPX05PVF9TQ0FOIjsKIAkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CiAJCQlyZXR1cm4g IkZPUkVJR05fSk9JTiI7CiAJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgpAQCAtOTIsNiArOTQsMTAg QEAgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKIAkJ CWlmIChzdHJjbXAodGFnLCAiYml0bWFwX2hlYXBfc2NhbiIpID09IDApCiAJCQkJcmV0dXJuIFBH UEFfVEFHX0JJVE1BUF9IRUFQX1NDQU47CiAJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlpZiAo c3RyY21wKHRhZywgImRvX25vdF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRE9f Tk9UX1NDQU47CisJCQlicmVhazsKIAkJY2FzZSAnZic6CiAJCQlpZiAoc3RyY21wKHRhZywgImZv cmVpZ25fam9pbiIpID09IDApCiAJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9hc3QuaAppbmRleCAzYzNkYjgwMTkyNi4uYTg5ZjEyNTE5MjkgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0CiB0eXBlZGVmIGVudW0gcGdwYV9hZHZpY2VfdGFnX3R5cGUK IHsKIAlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFfVEFHX0RPX05PVF9TQ0FOLAog CVBHUEFfVEFHX0ZPUkVJR05fSk9JTiwKIAlQR1BBX1RBR19HQVRIRVIsCiAJUEdQQV9UQUdfR0FU SEVSX01FUkdFLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCmluZGV4IDI4ZDI4Mzlj ZTFhLi5jZDQ0MTFmMzUwYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X291dHB1dC5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAt NTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3kocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsK IHN0YXRpYyB2b2lkIHBncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpj b250ZXh0LAogCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFf b3V0cHV0X2RvX25vdF9zY2FuKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJ CQlMaXN0ICppZGVudGlmaWVycyk7CiBzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCiAJCQkJCQkJCSAg Qml0bWFwc2V0ICpyZWxpZHMpOwogCkBAIC0xNTYsNiArMTU4LDkgQEAgcGdwYV9vdXRwdXRfYWR2 aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAog CS8qIEVtaXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KIAlwZ3BhX291dHB1dF9ub19nYXRoZXIoJmNv bnRleHQsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKKworCS8qIEVtaXQgRE9fTk9UX1NDQU4g YWR2aWNlLiAqLworCXBncGFfb3V0cHV0X2RvX25vdF9zY2FuKCZjb250ZXh0LCB3YWxrZXItPmRv X25vdF9zY2FuX2lkZW50aWZpZXJzKTsKIH0KIAogLyoKQEAgLTM5NSw2ICs0MDAsMzYgQEAgcGdw YV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNl dCAqcmVsaWRzKQogCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKIH0K IAorLyoKKyAqIE91dHB1dCBET19OT1RfU0NBTiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgaW4g dGhlIHByb3ZpZGVkIGxpc3Qgb2YKKyAqIGlkZW50aWZpZXJzLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9vdXRwdXRfZG9fbm90X3NjYW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgTGlz dCAqaWRlbnRpZmllcnMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKGlkZW50aWZp ZXJzID09IE5JTCkKKwkJcmV0dXJuOworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhjb250ZXh0LT5idWYsICJET19OT1RfU0NBTigiKTsKKworCWZvcmVhY2hfcHRyKHBn cGFfaWRlbnRpZmllciwgcmlkLCBpZGVudGlmaWVycykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZp cnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4 dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcgJyk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0 LT5idWYsIHBncGFfaWRlbnRpZmllcl9zdHJpbmcocmlkKSk7CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCiAvKgogICogT3V0cHV0IHRoZSBpZGVu dGlmaWVycyBmb3IgZWFjaCBSVEkgaW4gdGhlIHByb3ZpZGVkIHNldC4KICAqCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuYwppbmRleCA2YjU3NGRhNjU1Zi4uYWZhOTU4N2E3MjUgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMTY0LDExICsxNjQsMTMgQEAg c3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2sp Owogc3RhdGljIHBncGFfcGxhbm5lcl9pbmZvICpwZ3BhX3BsYW5uZXJfZ2V0X3Byb290KHBncGFf cGxhbm5lcl9zdGF0ZSAqcHBzLAogCQkJCQkJCQkJCQkJIFBsYW5uZXJJbmZvICpyb290KTsKIAot c3RhdGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0 ZSAqcHBzLAotCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAotCQkJCQkJCQkJCVJlbE9wdElu Zm8gKnJlbCk7Ci1zdGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFu bmVyX3N0YXRlICpwcHMsCi0JCQkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyBp bmxpbmUgdm9pZCBwZ3BhX2NvbXB1dGVfcnRfaWRlbnRpZmllcihwZ3BhX3BsYW5uZXJfaW5mbyAq cHJvb3QsCisJCQkJCQkJCQkJCSAgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgUmVs T3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfY29tcHV0ZV9ydF9vZmZzZXRzKHBncGFf cGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRp YyB2b2lkIHBncGFfdmFsaWRhdGVfcnRfaWRlbnRpZmllcnMocGdwYV9wbGFubmVyX3N0YXRlICpw cHMsCisJCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CiAKIHN0YXRpYyBjaGFyICpwZ3Bh X2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3Bh X2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpOwpAQCAtMjY0LDIwICsyNjYs MTAgQEAgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJz ZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQl9CiAJfQogCi0jaWZkZWYgVVNFX0FTU0VS VF9DSEVDS0lORwotCi0JLyoKLQkgKiBJZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVp bGQgYSBwcml2YXRlIHN0YXRlIG9iamVjdCBmb3IKLQkgKiBjcm9zcy1jaGVja3MuCi0JICovCi0J bmVlZHNfcHBzID0gdHJ1ZTsKLSNlbmRpZgotCiAJLyoKIAkgKiBXZSBvbmx5IGNyZWF0ZSBhbmQg aW5pdGlhbGl6ZSBhIHByaXZhdGUgc3RhdGUgb2JqZWN0IGlmIGl0J3MgbmVlZGVkIGZvcgogCSAq IHNvbWUgcHVycG9zZS4gVGhhdCBjb3VsZCBiZSAoMSkgcmVjb3JkaW5nIHRoYXQgd2Ugd2lsbCBu ZWVkIHRvIGdlbmVyYXRlCi0JICogYW4gYWR2aWNlIHN0cmluZywgKDIpIHN0b3JpbmcgYSB0cm92 ZSBvZiBzdXBwbGllZCBhZHZpY2UsIG9yICgzKQotCSAqIGZhY2lsaXRhdGluZyBkZWJ1Z2dpbmcg Y3Jvc3MtY2hlY2tzIHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZC4KKwkgKiBhbiBhZHZpY2Ugc3Ry aW5nIG9yICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQgYWR2aWNlLgogCSAqCiAJICog Q3VycmVudGx5LCB0aGUgYWN0aXZlIG1lbW9yeSBjb250ZXh0IHNob3VsZCBiZSBvbmUgdGhhdCB3 aWxsIGxhc3QgZm9yCiAJICogdGhlIGVudGlyZSBkdXJhdGlvbiBvZiBxdWVyeSBwbGFubmluZywg YnV0IGlmIEdFUU8gaXMgaW4gdXNlLCBpdCdzCkBAIC0zMjEsOSArMzEzLDE2IEBAIHBncGFfcGxh bm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCiAJcHBzID0g R2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKIAlpZiAocHBzICE9IE5VTEwpCiAJeworCQkvKiBTZXQgdXAgc29tZSBsb2NhbCB2YXJpYWJs ZXMuICovCiAJCXRyb3ZlID0gcHBzLT50cm92ZTsKIAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNr ID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CiAJCWdlbmVyYXRlX2FkdmljZV9zdHJp bmcgPSBwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisKKwkJLyogQ29tcHV0ZSByYW5nZSB0 YWJsZSBvZmZzZXRzLiAqLworCQlwZ3BhX2NvbXB1dGVfcnRfb2Zmc2V0cyhwcHMsIHBzdG10KTsK KworCQkvKiBDcm9zcy1jaGVjayByYW5nZSB0YWJsZSBpZGVudGlmaWVycy4gKi8KKwkJcGdwYV92 YWxpZGF0ZV9ydF9pZGVudGlmaWVycyhwcHMsIHBzdG10KTsKIAl9CiAKIAkvKgpAQCAtMzk0LDEz ICszOTMsNiBAQCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVl cnkgKnBhcnNlLAogCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAogCQkJCQltYWtl RGVmRWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOwogCi0J LyoKLQkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJh dGVkIHJhbmdlIHRhYmxlCi0JICogaWRlbnRpZmllcnMuCi0JICovCi0JaWYgKHBwcyAhPSBOVUxM KQotCQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Ci0KIAkvKiBQYXNzIGNh bGwgdG8gcHJldmlvdXMgaG9vay4gKi8KIAlpZiAocHJldl9wbGFubmVyX3NodXRkb3duKQogCQko KnByZXZfcGxhbm5lcl9zaHV0ZG93bikgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsIHBzdG10 KTsKQEAgLTQwOCwzNSArNDAwLDM4IEBAIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xv YmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCiAKIC8qCiAgKiBIb29rIGZ1bmN0aW9uIGZvciBidWls ZF9zaW1wbGVfcmVsKCkuCi0gKgotICogV2UgY2FuIGFwcGx5IHNjYW4gYWR2aWNlIGF0IHRoaXMg cG9pbnQsIGFuZCB3ZSBhbHNvIHVzZSB0aGlzIGFzIGFuCi0gKiBvcHBvcnR1bml0eSB0byBkbyBy YW5nZS10YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCi0g KiBidWlsZHMuCiAgKi8KIHN0YXRpYyB2b2lkCiBwZ3BhX2J1aWxkX3NpbXBsZV9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogewogCXBn cGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfcGxhbm5lcl9pbmZvICpwcm9vdCA9IE5VTEw7 CiAKIAkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9z ZXR1cCgpLiAqLwogCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5n bG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CiAKLQkvKiBTYXZlIGRldGFpbHMgbmVlZGVkIGZv ciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nLiAqLworCS8qCisJICogTG9v ayB1cCB0aGUgcGdwYV9wbGFubmVyX2luZm8gZm9yIHRoaXMgc3VicXVlcnksIGFuZCBtYWtlIHN1 cmUgd2UndmUKKwkgKiBzYXZlZCBhIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIuCisJICovCiAJaWYg KHBwcyAhPSBOVUxMKQotCQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwcHMsIHJvb3QsIHJlbCk7CisJ eworCQlwcm9vdCA9IHBncGFfcGxhbm5lcl9nZXRfcHJvb3QocHBzLCByb290KTsKKwkJcGdwYV9j b21wdXRlX3J0X2lkZW50aWZpZXIocHJvb3QsIHJvb3QsIHJlbCk7CisJfQogCiAJLyogSWYgcXVl cnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2VhcmNoIGZvciByZWxldmFudCBlbnRyaWVzLiAqLwog CWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRyb3ZlICE9IE5VTEwpCiAJewotCQlwZ3BhX2lkZW50 aWZpZXIgcmlkOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsKIAkJcGdwYV90cm92ZV9yZXN1bHQg dHJlc3VsdF9zY2FuOwogCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3JlbDsKIAogCQkvKiBT ZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFuZCBnZW5lcmFsIHJlbCBhZHZpY2UuICovCi0JCXBncGFf Y29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCByZWwtPnJlbGlkLCAmcmlkKTsKLQkJcGdw YV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJp ZCwKKwkJcmlkID0gJnByb290LT5yaWRfYXJyYXlbcmVsLT5yZWxpZCAtIDFdOworCQlwZ3BhX3Ry b3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAxLCByaWQsCiAJ CQkJCQkgICZ0cmVzdWx0X3NjYW4pOwotCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQ R1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+ dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwgMSwgcmlkLAogCQkJCQkJICAmdHJlc3VsdF9y ZWwpOwogCiAJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhlbS4g Ki8KQEAgLTE2MjYsNiArMTYyMSw4IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMs CiAJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKIHsKKwljb25zdCB1aW50NjQgYWxs X3NjYW5fbWFzayA9IFBHU19TQ0FOX0FOWSB8IFBHU19BUFBFTkQgfAorCQlQR1NfTUVSR0VfQVBQ RU5EIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKIAlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBm YWxzZTsKIAlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CiAJQml0bWFw c2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOwpAQCAtMTYzNiwxNiArMTYzMywxOCBAQCBw Z3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAogCUJpdG1hcHNl dCAgKnNjYW5fdHlwZV9pbmRleGVzID0gTlVMTDsKIAlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVs X2luZGV4ZXMgPSBOVUxMOwogCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOwotCXVpbnQ2NAkJc2Nh bl90eXBlID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IGFsbF9zY2FuX21hc2s7CS8qIHNlbnRp bmVsOiBubyBhZHZpY2UgeWV0ICovCiAKIAkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFk dmljZS4gKi8KIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkg Pj0gMCkKIAl7CiAJCXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tp XTsKLQkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAwOworCQl1aW50NjQJCW15X3NjYW5fdHlwZSA9 IGFsbF9zY2FuX21hc2s7CiAKIAkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNj YW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLwotCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BB X1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19E T19OT1RfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IDA7CisJCWVsc2UgaWYgKG15X2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKIAkJewogCQkJLyoKIAkJCSAqIEN1cnJl bnRseSwgUEdTX0NPTlNJREVSX0lOREVYT05MWSBjYW4gc3VwcHJlc3MgQml0bWFwIEhlYXAKQEAg LTE2NzksOSArMTY3OCw5IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJ bmZvICpyZWwsCiAJCSAqIElOREVYX1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBp dCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKIAkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEg YiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgY29kZS4KIAkJICovCi0JCWlmIChteV9z Y2FuX3R5cGUgIT0gMCkKKwkJaWYgKG15X3NjYW5fdHlwZSAhPSBhbGxfc2Nhbl9tYXNrKQogCQl7 Ci0JCQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJ CWlmIChzY2FuX3R5cGUgIT0gYWxsX3NjYW5fbWFzayAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90 eXBlKQogCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CiAJCQlpZiAoIXNjYW5fdHlwZV9j b25mbGljdCAmJiBzY2FuX2VudHJ5ICE9IE5VTEwgJiYKIAkJCQlteV9lbnRyeS0+dGFyZ2V0LT5p dGFyZ2V0ICE9IE5VTEwgJiYKQEAgLTE3MTYsNyArMTcxNSw3IEBAIHBncGFfcGxhbm5lcl9hcHBs eV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJCQl7CiAJCQkJY29uc3QgdWludDY0IG15 X3NjYW5fdHlwZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EOwogCi0JCQkJaWYgKHNj YW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJaWYgKHNjYW5f dHlwZSAhPSBhbGxfc2Nhbl9tYXNrICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCiAJCQkJ CXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CiAJCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5Owog CQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKQEAgLTE3OTUsNyArMTc5NCw3IEBAIHBncGFf cGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJCWlmIChtYXRjaGVk X2luZGV4ID09IE5VTEwpCiAJCXsKIAkJCS8qIERvbid0IGZvcmNlIHRoZSBzY2FuIHR5cGUgaWYg dGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCi0JCQlzY2FuX3R5cGUgPSAwOworCQkJc2Nhbl90 eXBlID0gYWxsX3NjYW5fbWFzazsKIAogCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxl LiAqLwogCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5k ZXhlcywKQEAgLTE4MzksMTQgKzE4MzgsOCBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZp Y2UoUmVsT3B0SW5mbyAqcmVsLAogCSAqIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBzbyB0aGF0IHdl IHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvCiAJICogbm90aGluZyBpbiBjYXNl cyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEgc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4KIAkgKi8KLQlp ZiAoc2Nhbl90eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKLQl7Ci0JCXVpbnQ2NAkJ YWxsX3NjYW5fbWFzazsKLQotCQlhbGxfc2Nhbl9tYXNrID0gUEdTX1NDQU5fQU5ZIHwgUEdTX0FQ UEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAotCQkJUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwlp ZiAoc2Nhbl90eXBlICE9IGFsbF9zY2FuX21hc2sgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKIAkJ cmVsLT5wZ3NfbWFzayAmPSB+KGFsbF9zY2FuX21hc2sgJiB+c2Nhbl90eXBlKTsKLQl9CiAJaWYg KGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKIAl7CiAJCXVpbnQ2NAkJYWxs X2dhdGhlcl9tYXNrOwpAQCAtMjAwMSw5ICsxOTk0LDM4IEBAIHBncGFfcGxhbm5lcl9nZXRfcHJv b3QocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290KQogCQl9CiAJfQog Ci0JLyogQ3JlYXRlIG5ldyBvYmplY3QsIGFkZCB0byBsaXN0LCBhbmQgbWFrZSBpdCBtb3N0IHJl Y2VudGx5IHVzZWQuICovCisJLyogQ3JlYXRlIG5ldyBvYmplY3QuICovCiAJbmV3X3Byb290ID0g cGFsbG9jMF9vYmplY3QocGdwYV9wbGFubmVyX2luZm8pOworCisJLyogU2V0IHBsYW4gbmFtZSBh bmQgYWx0ZXJuYXRpdmUgcGxhbiBuYW1lLiAqLwogCW5ld19wcm9vdC0+cGxhbl9uYW1lID0gcm9v dC0+cGxhbl9uYW1lOworCW5ld19wcm9vdC0+YWx0ZXJuYXRpdmVfcGxhbl9uYW1lID0gcm9vdC0+ YWx0ZXJuYXRpdmVfcGxhbl9uYW1lOworCisJLyoKKwkgKiBJZiB0aGUgbmV3bHktY3JlYXRlZCBw cm9vdCBzaGFyZXMgYW4gYWx0ZXJuYXRpdmVfcGxhbl9uYW1lIHdpdGggb25lIG9yCisJICogbW9y ZSBvdGhlcnMsIGFsbCBzaG91bGQgaGF2ZSB0aGUgaXNfYWx0ZXJuYXRpdmVfcGxhbiBmbGFnIHNl dC4KKwkgKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5mbywgb3RoZXJfcHJvb3QsIHBw cy0+cHJvb3RzKQorCXsKKwkJaWYgKHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKG5ld19wcm9v dC0+YWx0ZXJuYXRpdmVfcGxhbl9uYW1lLAorCQkJCQkJCQkJICAgb3RoZXJfcHJvb3QtPmFsdGVy bmF0aXZlX3BsYW5fbmFtZSkpCisJCXsKKwkJCW5ld19wcm9vdC0+aXNfYWx0ZXJuYXRpdmVfcGxh biA9IHRydWU7CisJCQlvdGhlcl9wcm9vdC0+aXNfYWx0ZXJuYXRpdmVfcGxhbiA9IHRydWU7CisJ CX0KKwl9CisKKwkvKgorCSAqIE91dGVybW9zdCBxdWVyeSBsZXZlbCBhbHdheXMgaGFzIHJ0b2Zm c2V0IDA7IG90aGVyIHJ0b2Zmc2V0IHZhbHVlcyBhcmUKKwkgKiBjb21wdXRlZCBsYXRlci4KKwkg Ki8KKwlpZiAocm9vdC0+cGxhbl9uYW1lID09IE5VTEwpCisJeworCQluZXdfcHJvb3QtPmhhc19y dG9mZnNldCA9IHRydWU7CisJCW5ld19wcm9vdC0+cnRvZmZzZXQgPSAwOworCX0KKworCS8qIEFk ZCB0byBsaXN0IGFuZCBtYWtlIGl0IG1vc3QgcmVjZW50bHkgdXNlZC4gKi8KIAlwcHMtPnByb290 cyA9IGxhcHBlbmQocHBzLT5wcm9vdHMsIG5ld19wcm9vdCk7CiAJcHBzLT5sYXN0X3Byb290ID0g bmV3X3Byb290OwogCkBAIC0yMDExLDE5ICsyMDMzLDE1IEBAIHBncGFfcGxhbm5lcl9nZXRfcHJv b3QocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290KQogfQogCiAvKgot ICogU2F2ZSB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmb3Igb25lIHJlbGF0aW9uIGZvciBm dXR1cmUgY3Jvc3MtY2hlY2tpbmcuCisgKiBDb21wdXRlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlm aWVyIGZvciBvbmUgcmVsYXRpb24gYW5kIHNhdmUgaXQgZm9yIGZ1dHVyZQorICogdXNlLgogICov CiBzdGF0aWMgdm9pZAotcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpw cHMsIFBsYW5uZXJJbmZvICpyb290LAotCQkJCQkgUmVsT3B0SW5mbyAqcmVsKQorcGdwYV9jb21w dXRlX3J0X2lkZW50aWZpZXIocGdwYV9wbGFubmVyX2luZm8gKnByb290LCBQbGFubmVySW5mbyAq cm9vdCwKKwkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCkKIHsKLSNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCi0JcGdwYV9wbGFubmVyX2luZm8gKnByb290OwogCXBncGFfaWRlbnRpZmllciAqcmlk OwogCi0JLyogR2V0IHRoZSBwZ3BhX3BsYW5uZXJfaW5mbyBmb3IgdGhpcyBQbGFubmVySW5mby4g Ki8KLQlwcm9vdCA9IHBncGFfcGxhbm5lcl9nZXRfcHJvb3QocHBzLCByb290KTsKLQogCS8qIEFs bG9jYXRlIG9yIGV4dGVuZCB0aGUgcHJvb3QncyByaWRfYXJyYXkgYXMgbmVjZXNzYXJ5LiAqLwog CWlmIChwcm9vdC0+cmlkX2FycmF5X3NpemUgPCByZWwtPnJlbGlkKQogCXsKQEAgLTIwNDMsMzYg KzIwNjEsMzIgQEAgcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMs IFBsYW5uZXJJbmZvICpyb290LAogCXJpZCA9ICZwcm9vdC0+cmlkX2FycmF5W3JlbC0+cmVsaWQg LSAxXTsKIAlpZiAocmlkLT5hbGlhc19uYW1lID09IE5VTEwpCiAJCXBncGFfY29tcHV0ZV9pZGVu dGlmaWVyX2J5X3J0aShyb290LCByZWwtPnJlbGlkLCByaWQpOwotI2VuZGlmCiB9CiAKIC8qCi0g KiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFibGUg dG8gZ2VuZXJhdGUgZHVyaW5nCi0gKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5lcmF0 ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqIENvbXB1dGUgdGhlIHJhbmdlIHRhYmxlIG9mZnNl dCBmb3IgZWFjaCBwZ3BhX3BsYW5uZXJfaW5mbyBmb3Igd2hpY2ggaXQKKyAqIGlzIHBvc3NpYmxl IHRvIG1lYW5pbmdmdWxseSBkbyBzby4KICAqLwogc3RhdGljIHZvaWQKLXBncGFfcmlfY2hlY2tl cl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQor cGdwYV9jb21wdXRlX3J0X29mZnNldHMocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZWRT dG10ICpwc3RtdCkKIHsKLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0JcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVyczsKLQlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3Ro KHBzdG10LT5ydGFibGUpOwotCi0JLyogQ3JlYXRlIGlkZW50aWZpZXJzIGZyb20gdGhlIHBsYW5u ZWQgc3RhdGVtZW50LiAqLwotCXJ0X2lkZW50aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmll cnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7Ci0KLQkvKiBJdGVyYXRlIG92ZXIgaWRlbnRpZmll cnMgY3JlYXRlZCBkdXJpbmcgcGxhbm5pbmcsIHNvIHdlIGNhbiBjb21wYXJlLiAqLwogCWZvcmVh Y2hfcHRyKHBncGFfcGxhbm5lcl9pbmZvLCBwcm9vdCwgcHBzLT5wcm9vdHMpCiAJewotCQlpbnQJ CQlydG9mZnNldCA9IDA7CisJCS8qIEZvciB0aGUgdG9wIHF1ZXJ5IGxldmVsLCB3ZSd2ZSBwcmV2 aW91c2x5IHNldCBydG9mZnNldCAwLiAqLworCQlpZiAocHJvb3QtPnBsYW5fbmFtZSA9PSBOVUxM KQorCQl7CisJCQlBc3NlcnQocHJvb3QtPmhhc19ydG9mZnNldCk7CisJCQljb250aW51ZTsKKwkJ fQogCiAJCS8qCi0JCSAqIElmIHRoZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0 aGlzIGVudHJ5LCB0aGVuIHRoZQotCQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNh biBzZWFyY2ggdGhlIFN1YlBsYW5SVEluZm8gbGlzdCB0bwotCQkgKiBmaW5kIHRoZSBydG9mZnNl dC4KKwkJICogSXQncyBub3QgZ3VhcmFudGVlZCB0aGF0IGV2ZXJ5IHBsYW4gbmFtZSB3ZSBzYXcg ZHVyaW5nIHBsYW5uaW5nIGhhcworCQkgKiBhIFN1YlBsYW5JbmZvLCBidXQgYW55IHRoYXQgZG8g bm90IGNlcnRhaW5seSBkb24ndCBhcHBlYXIgaW4gdGhlCisJCSAqIGZpbmFsIHJhbmdlIHRhYmxl LgogCQkgKi8KLQkJaWYgKHByb290LT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJZm9yZWFjaF9ub2Rl KFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5mb3MpCiAJCXsKLQkJCWZvcmVh Y2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJaWYg KHN0cmNtcChwcm9vdC0+cGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMCkKIAkJCXsK IAkJCQkvKgogCQkJCSAqIElmIHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVy eSdzIHJhbmdlIHRhYmxlCkBAIC0yMDgxLDMwICsyMDk1LDUxIEBAIHBncGFfcmlfY2hlY2tlcl92 YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQogCQkJ CSAqIFJURV9TVUJRVUVSWSBlbnRyaWVzIHRoYXQgd2VyZSBvbmNlIFJURV9SRUxBVElPTiBlbnRy aWVzCiAJCQkJICogd2lsbCBiZSBjb3BpZWQsIGFzIHBlciBhZGRfcnRlc190b19mbGF0X3J0YWJs ZS4gVGhlcmVmb3JlLAogCQkJCSAqIHRoZXJlJ3Mgbm8gZml4ZWQgcnRvZmZzZXQgdGhhdCB3ZSBj YW4gYXBwbHkgdG8gdGhlIFJUSXMKLQkJCQkgKiB1c2VkIGR1cmluZyBwbGFubmluZyB0byBsb2Nh dGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb25zCisJCQkJICogdXNlZCBkdXJpbmcgcGxhbm5p bmcgdG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucy4KIAkJCQkgKi8KLQkJCQlp ZiAoc3RyY21wKHByb290LT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwCi0JCQkJ CSYmICFydGluZm8tPmR1bW15KQorCQkJCWlmIChydGluZm8tPmR1bW15KQogCQkJCXsKLQkJCQkJ cnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OwotCQkJCQlBc3NlcnQocnRvZmZzZXQgPiAwKTsK KwkJCQkJLyoKKwkJCQkJICogSXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gbWFrZSBhbnkgZWZm ZWN0aXZlIHVzZSBvZiB0aGUKKwkJCQkJICogc2pfdW5pcXVlX3JlbHMgbGlzdCBpbiB0aGlzIGNh c2UsIGFuZCBpdCBhbHNvIHdvbid0IGJlCisJCQkJCSAqIGltcG9ydGFudCB0byBkbyBzby4gU28g anVzdCB0aHJvdyB0aGUgbGlzdCBhd2F5IHRvIGF2b2lkCisJCQkJCSAqIGNvbmZ1c2luZyBwZ3Bh X3BsYW5fd2Fsa2VyLgorCQkJCQkgKi8KKwkJCQkJcHJvb3QtPnNqX3VuaXF1ZV9yZWxzID0gTklM OwogCQkJCQlicmVhazsKIAkJCQl9CisJCQkJQXNzZXJ0KCFwcm9vdC0+aGFzX3J0b2Zmc2V0KTsK KwkJCQlwcm9vdC0+aGFzX3J0b2Zmc2V0ID0gdHJ1ZTsKKwkJCQlwcm9vdC0+cnRvZmZzZXQgPSBy dGluZm8tPnJ0b2Zmc2V0OworCQkJCWJyZWFrOwogCQkJfQotCi0JCQkvKgotCQkJICogSXQncyBu b3QgYW4gZXJyb3IgaWYgd2UgZG9uJ3QgZmluZCB0aGUgcGxhbiBuYW1lOiB0aGF0IGp1c3QKLQkJ CSAqIG1lYW5zIHRoYXQgd2UgcGxhbm5lZCBhIHN1YnBsYW4gYnkgdGhpcyBuYW1lIGJ1dCBpdCBl bmRlZCB1cAotCQkJICogYmVpbmcgYSBkdW1teSBzdWJwbGFuIGFuZCBzbyB3YXNuJ3QgaW5jbHVk ZWQgaW4gdGhlIGZpbmFsIHBsYW4KLQkJCSAqIHRyZWUuCi0JCQkgKi8KLQkJCWlmIChydG9mZnNl dCA9PSAwKQotCQkJCWNvbnRpbnVlOwogCQl9CisJfQorfQorCisvKgorICogVmFsaWRhdGUgdGhh dCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1 cmluZworICogcGxhbm5pbmcgbWF0Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZp bmFsIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3ZhbGlkYXRlX3J0X2lkZW50aWZpZXJz KHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnM7CisJ SW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChwc3RtdC0+cnRhYmxlKTsKKworCS8q IENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9p ZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0 bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5u aW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5m bywgcHJvb3QsIHBwcy0+cHJvb3RzKQorCXsKKwkJaWYgKCFwcm9vdC0+aGFzX3J0b2Zmc2V0KQor CQkJY29udGludWU7CiAKIAkJZm9yIChpbnQgcnRpID0gMTsgcnRpIDw9IHByb290LT5yaWRfYXJy YXlfc2l6ZTsgKytydGkpCiAJCXsKLQkJCUluZGV4CQlmbGF0X3J0aSA9IHJ0b2Zmc2V0ICsgcnRp OworCQkJSW5kZXgJCWZsYXRfcnRpID0gcHJvb3QtPnJ0b2Zmc2V0ICsgcnRpOwogCQkJcGdwYV9p ZGVudGlmaWVyICpyaWQxID0gJnByb290LT5yaWRfYXJyYXlbcnRpIC0gMV07CiAJCQlwZ3BhX2lk ZW50aWZpZXIgKnJpZDI7CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wbGFubmVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCmluZGV4 IGU5MDQ1ZjY5YmNhLi45M2ZkYTIwNTViMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3BsYW5uZXIuaAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxh bm5lci5oCkBAIC0yNCwxMSArMjQsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFubmVyX2lu Zm8KIAkvKiBQbGFuIG5hbWUgdGFrZW4gZnJvbSB0aGUgY29ycmVzcG9uZGluZyBQbGFubmVySW5m bzsgTlVMTCBhdCB0b3AgbGV2ZWwuICovCiAJY2hhcgkgICAqcGxhbl9uYW1lOwogCi0jaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCS8qCisJICogSWYgdGhlIGNvcnJlc3BvbmRpbmcgUGxhbm5l ckluZm8gaGFzIGFuIGFsdGVybmF0aXZlX3Jvb3QsIHRoZW4gdGhpcyBpcworCSAqIHRoZSBwbGFu IG5hbWUgZnJvbSB0aGF0IFBsYW5uZXJJbmZvOyBvdGhlcndpc2UsIGl0IGlzIHRoZSBzYW1lIGFz CisJICogcGxhbl9uYW1lLgorCSAqCisJICogaXNfYWx0ZXJuYXRpdmVfcGxhbiBpcyBzZXQgdG8g dHJ1ZSBmb3IgZXZlcnkgcGdwYV9wbGFubmVyX2luZm8gdGhhdAorCSAqIHNoYXJlcyBhbiBhbHRl cm5hdGl2ZV9wbGFuX25hbWUgd2l0aCBhdCBsZWFzdCBvbmUgb3RoZXIsIGFuZCB0byBmYWxzZQor CSAqIG90aGVyd2lzZS4KKwkgKi8KKwljaGFyCSAgICphbHRlcm5hdGl2ZV9wbGFuX25hbWU7CisJ Ym9vbAkJaXNfYWx0ZXJuYXRpdmVfcGxhbjsKKwogCS8qIFJlbGF0aW9uIGlkZW50aWZpZXJzIGNv bXB1dGVkIGZvciBiYXNlcmVscyBhdCB0aGlzIHF1ZXJ5IGxldmVsLiAqLwogCXBncGFfaWRlbnRp ZmllciAqcmlkX2FycmF5OwogCWludAkJCXJpZF9hcnJheV9zaXplOwotI2VuZGlmCisKKwkvKgor CSAqIElmIGhhc19ydG9mZnNldCBpcyB0cnVlLCB0aGVuIHJ0b2Zmc2V0IGlzIHRoZSBvZmZzZXQg cmVxdWlyZWQgdG8gYWxpZ24KKwkgKiBSVElzIGZvciB0aGlzIHF1ZXJ5IGxldmVsIHdpdGggUlRJ cyBmcm9tIHRoZSBmaW5hbCwgZmxhdHRlbmVkIHJhbmdldGFibGUuCisJICogSWYgaGFzX3J0b2Zm c2V0IGlzIGZhbHNlLCB0aGVuIHRoaXMgc3VicXVlcnkncyByYW5nZSB0YWJsZSB3YXNuJ3QgY29w aWVkLAorCSAqIG9yIHdhcyBvbmx5IHBhcnRpYWxseSBjb3BpZWQsIGludG8gdGhlIGZpbmFsIHJh bmdlIHRhYmxlLiAoTm90ZSB0aGF0CisJICogd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBydG9mZnNl dCB2YWx1ZXMgdW50aWwgdGhlIGZpbmFsIHJhbmdlIHRhYmxlCisJICogYWN0dWFsbHkgZXhpc3Rz OyBiZWZvcmUgdGhhdCB0aW1lLCBoYXNfcnRvZmZzZXQgd2lsbCBiZSBmYWxzZSBldmVyeXdoZXJl CisJICogZXhjZXB0IGF0IHRoZSB0b3AgbGV2ZWwuKQorCSAqLworCWJvb2wJCWhhc19ydG9mZnNl dDsKKwlJbmRleAkJcnRvZmZzZXQ7CiAKIAkvKgogCSAqIExpc3Qgb2YgQml0bWFwc2V0IG9iamVj dHMuIEVhY2ggcmVwcmVzZW50cyB0aGUgcmVsaWQgc2V0IG9mIGEgcmVsYXRpb24KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3Ryb3ZlLmMKaW5kZXggNjM0ZWM1YzRjNmUuLjdhZGUwYjVjYTljIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYworKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpAQCAtMTYyLDYgKzE2Miw3IEBAIHBncGFfYnVp bGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKQogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBHUEFf VEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0RPX05PVF9TQ0FOOgogCQkJ Y2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CiAJCQljYXNlIFBHUEFfVEFHX0lOREVYX1ND QU46CiAJCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dh bGtlci5jCmluZGV4IDZmYmM3ODRiZjU0Li4wYTQ1MTJkNDkyMSAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV93YWxrZXIuYwpAQCAtNTksNiArNTksMTAgQEAgc3RhdGljIGJvb2wgcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAkJCQkJ CQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOwogc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFp bnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAogCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfY2xhc3NpZnlfYWx0ZXJu YXRpdmVfc3VicGxhbnMocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJ CQkJCSAgIExpc3QgKnByb290cywKKwkJCQkJCQkJCQkJICAgTGlzdCAqKmNob3Nlbl9wcm9vdHMs CisJCQkJCQkJCQkJCSAgIExpc3QgKipkaXNjYXJkZWRfcHJvb3RzKTsKIAogLyoKICAqIFRvcC1s ZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCkBAIC03NSw2ICs3OSw4IEBA IHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW5u ZWRTdG10ICpwc3RtdCwKIAlMaXN0Q2VsbCAgICpsYzsKIAlMaXN0CSAgICpzal91bmlxdWVfcnRp cyA9IE5VTEw7CiAJTGlzdAkgICAqc2pfbm9udW5pcXVlX3FmcyA9IE5VTEw7CisJTGlzdAkgICAq Y2hvc2VuX3Byb290czsKKwlMaXN0CSAgICpkaXNjYXJkZWRfcHJvb3RzOwogCiAJLyogSW5pdGlh bGl6YXRpb24uICovCiAJbWVtc2V0KHdhbGtlciwgMCwgc2l6ZW9mKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCkpOwpAQCAtOTUsNDIgKzEwMSwyMyBAQCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAqcHN0bXQsCiAJLyogQWRqdXN0 IFJUSXMgZnJvbSBzal91bmlxdWVfcmVscyBmb3IgdGhlIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4g Ki8KIAlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5mbywgcHJvb3QsIHByb290cykKIAl7Ci0J CWludAkJCXJ0b2Zmc2V0ID0gMDsKLQkJYm9vbAkJZHVtbXkgPSBmYWxzZTsKLQogCQkvKiBJZiB0 aGVyZSBhcmUgbm8gc2pfdW5pcXVlX3JlbHMgZm9yIHRoaXMgcHJvb3QsIHdlIGNhbiBza2lwIGl0 LiAqLwogCQlpZiAocHJvb3QtPnNqX3VuaXF1ZV9yZWxzID09IE5JTCkKIAkJCWNvbnRpbnVlOwog CiAJCS8qIElmIHRoaXMgaXMgYSBzdWJwbGFuLCBmaW5kIHRoZSByYW5nZSB0YWJsZSBvZmZzZXQu ICovCi0JCWlmIChwcm9vdC0+cGxhbl9uYW1lICE9IE5VTEwpCi0JCXsKLQkJCWZvcmVhY2hfbm9k ZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQotCQkJewotCQkJCWlm IChzdHJjbXAocHJvb3QtPnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDApCi0JCQkJ ewotCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7Ci0JCQkJCWR1bW15ID0gcnRpbmZv LT5kdW1teTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAocnRvZmZzZXQgPT0g MCkKLQkJCQllbG9nKEVSUk9SLCAibm8gcnRvZmZzZXQgZm9yIHBsYW4gJXMiLCBwcm9vdC0+cGxh bl9uYW1lKTsKLQkJfQorCQlpZiAoIXByb290LT5oYXNfcnRvZmZzZXQpCisJCQllbG9nKEVSUk9S LCAibm8gcnRvZmZzZXQgZm9yIHBsYW4gJXMiLCBwcm9vdC0+cGxhbl9uYW1lKTsKIAotCQkvKiBJ ZiB0aGlzIGVudHJ5IHBlcnRhaW5zIHRvIGEgZHVtbXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8K LQkJaWYgKGR1bW15KQotCQkJY29udGludWU7Ci0KLQkJLyogT2Zmc2V0IGVhY2ggcmVsaWQgc2V0 IGJ5IHRoZSBydG9mZnNldCB3ZSBqdXN0IGNvbXB1dGVkLiAqLworCQkvKiBPZmZzZXQgZWFjaCBy ZWxpZCBzZXQgYnkgdGhlIHByb290J3MgcnRvZmZzZXQuICovCiAJCWZvcmVhY2hfbm9kZShCaXRt YXBzZXQsIHJlbGlkcywgcHJvb3QtPnNqX3VuaXF1ZV9yZWxzKQogCQl7CiAJCQlpbnQJCQlydGlu ZGV4ID0gLTE7CiAJCQlCaXRtYXBzZXQgICpmbGF0X3JlbGlkcyA9IE5VTEw7CiAKIAkJCXdoaWxl ICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQotCQkJ CWZsYXRfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoZmxhdF9yZWxpZHMsIHJ0aW5kZXggKyBydG9m ZnNldCk7CisJCQkJZmxhdF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcihmbGF0X3JlbGlkcywKKwkJ CQkJCQkJCQkJIHJ0aW5kZXggKyBwcm9vdC0+cnRvZmZzZXQpOwogCiAJCQlzal91bmlxdWVfcnRp cyA9IGxhcHBlbmQoc2pfdW5pcXVlX3J0aXMsIGZsYXRfcmVsaWRzKTsKIAkJfQpAQCAtMTkzLDYg KzE4MCw0MiBAQCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLCBQbGFubmVkU3RtdCAqcHN0bXQsCiAKIAkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0XSA9 IHF1ZXJ5X2ZlYXR1cmVzOwogCX0KKworCS8qIENsYXNzaWZ5IGFsdGVybmF0aXZlIHN1YnBsYW5z LiAqLworCXBncGFfY2xhc3NpZnlfYWx0ZXJuYXRpdmVfc3VicGxhbnMod2Fsa2VyLCBwcm9vdHMs CisJCQkJCQkJCQkgICAmY2hvc2VuX3Byb290cywgJmRpc2NhcmRlZF9wcm9vdHMpOworCisJLyoK KwkgKiBGaWd1cmUgb3V0IHdoaWNoIG9mIHRoZSBkaXNjYXJkZWQgYWx0ZXJuYXRpdmVzIGhhdmUg YSBub24tZGlzY2FyZGVkCisJICogYWx0ZXJuYXRpdmUuIFRob3NlIGFyZSB0aGUgb25lcyBmb3Ig d2hpY2ggd2Ugd2FudCB0byBlbWl0IERPX05PVF9TQ0FOCisJICogYWR2aWNlLiAoSWYgZXZlcnkg YWx0ZXJuYXRpdmUgd2FzIGRpc2NhcmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LikKKwkgKi8K Kwlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5mbywgZGlzY2FyZGVkX3Byb290LCBkaXNjYXJk ZWRfcHJvb3RzKQorCXsKKwkJYm9vbAkJc29tZV9hbHRlcm5hdGl2ZV9jaG9zZW4gPSBmYWxzZTsK KworCQlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5mbywgY2hvc2VuX3Byb290LCBjaG9zZW5f cHJvb3RzKQorCQl7CisJCQlpZiAoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwoZGlzY2FyZGVk X3Byb290LT5hbHRlcm5hdGl2ZV9wbGFuX25hbWUsCisJCQkJCQkJCQkJICAgY2hvc2VuX3Byb290 LT5hbHRlcm5hdGl2ZV9wbGFuX25hbWUpKQorCQkJeworCQkJCXNvbWVfYWx0ZXJuYXRpdmVfY2hv c2VuID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChzb21lX2FsdGVybmF0 aXZlX2Nob3NlbikKKwkJeworCQkJZm9yIChpbnQgcnRpID0gMTsgcnRpIDw9IGRpc2NhcmRlZF9w cm9vdC0+cmlkX2FycmF5X3NpemU7IHJ0aSsrKQorCQkJeworCQkJCXBncGFfaWRlbnRpZmllciAq cmlkID0gJmRpc2NhcmRlZF9wcm9vdC0+cmlkX2FycmF5W3J0aSAtIDFdOworCisJCQkJaWYgKHJp ZC0+YWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJCQl3YWxrZXItPmRvX25vdF9zY2FuX2lkZW50aWZp ZXJzID0KKwkJCQkJCWxhcHBlbmQod2Fsa2VyLT5kb19ub3Rfc2Nhbl9pZGVudGlmaWVycywgcmlk KTsKKwkJCX0KKwkJfQorCX0KIH0KIAogLyoKQEAgLTY5Nyw2ICs3MjAsMzAgQEAgcGdwYV93YWxr ZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAogCQlyZXR1 cm4gZmFsc2U7CiAJfQogCisJLyoKKwkgKiBET19OT1RfU0NBTiBhZHZpY2UgdGFyZ2V0cyByZWxz IHRoYXQgbWF5IG5vdCBiZSBpbiB0aGUgZmxhdCByYW5nZSB0YWJsZQorCSAqIChlLmcuIE1pbk1h eEFnZyBsb3NlcnMpLCBzbyB3ZSBjYW4ndCB1c2UgcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50 aWZpZXIuCisJICogSW5zdGVhZCwgY2hlY2sgZGlyZWN0bHkgYWdhaW5zdCB0aGUgZG9fbm90X3Nj YW5faWRlbnRpZmllcnMgbGlzdC4KKwkgKi8KKwlpZiAodGFnID09IFBHUEFfVEFHX0RPX05PVF9T Q0FOKQorCXsKKwkJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikK KwkJCXJldHVybiBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9pZGVudGlmaWVyLCByaWQsIHdh bGtlci0+ZG9fbm90X3NjYW5faWRlbnRpZmllcnMpCisJCXsKKwkJCWlmIChzdHJjbXAocmlkLT5h bGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSA9PSAwICYmCisJCQkJcmlkLT5vY2N1 cnJlbmNlID09IHRhcmdldC0+cmlkLm9jY3VycmVuY2UgJiYKKwkJCQlzdHJpbmdzX2VxdWFsX29y X2JvdGhfbnVsbChyaWQtPnBhcnRuc3AsCisJCQkJCQkJCQkJICAgdGFyZ2V0LT5yaWQucGFydG5z cCkgJiYKKwkJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBhcnRyZWwsCisJCQkJ CQkJCQkJICAgdGFyZ2V0LT5yaWQucGFydHJlbCkgJiYKKwkJCQlzdHJpbmdzX2VxdWFsX29yX2Jv dGhfbnVsbChyaWQtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgICB0YXJnZXQtPnJpZC5wbGFuX25h bWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlpZiAo dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQogCXsKIAkJSW5kZXgJCXJ0 aTsKQEAgLTczMCw2ICs3NzcsMTAgQEAgcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAogCQkJLyogc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVk IGFib3ZlICovCiAJCQlwZ191bnJlYWNoYWJsZSgpOwogCQkJYnJlYWs7CisJCWNhc2UgUEdQQV9U QUdfRE9fTk9UX1NDQU46CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8K KwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKIAkJY2FzZSBQR1BBX1RBR19CSVRNQVBf SEVBUF9TQ0FOOgogCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCiAJCQkJ CQkJCQkJIFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKQEAgLTEwMzUsMyArMTA4Niw2MCBAQCBwZ3Bh X3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsCiB7CiAJcmV0dXJuIGJtc19pc19zdWJzZXQocmVsaWRzLCB3YWxrZXItPm5vX2dhdGhlcl9z Y2Fucyk7CiB9CisKKy8qCisgKiBDbGFzc2lmeSBhbHRlcm5hdGl2ZSBzdWJwbGFucyBhcyBjaG9z ZW4gb3IgZGlzY2FyZGVkLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9jbGFzc2lmeV9hbHRlcm5h dGl2ZV9zdWJwbGFucyhwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJ ICAgTGlzdCAqcHJvb3RzLAorCQkJCQkJCQkgICBMaXN0ICoqY2hvc2VuX3Byb290cywKKwkJCQkJ CQkJICAgTGlzdCAqKmRpc2NhcmRlZF9wcm9vdHMpCit7CisJQml0bWFwc2V0ICAqYWxsX3NjYW5f cnRpcyA9IE5VTEw7CisKKwkvKiBJbml0aWFsaXplIGJvdGggb3V0cHV0IGxpc3RzIHRvIGVtcHR5 LiAqLworCSpjaG9zZW5fcHJvb3RzID0gTklMOworCSpkaXNjYXJkZWRfcHJvb3RzID0gTklMOwor CisJLyogQ29sbGVjdCBhbGwgc2NhbiBSVElzLiAqLworCWZvciAoaW50IHMgPSAwOyBzIDwgTlVN X1BHUEFfU0NBTl9TVFJBVEVHWTsgcysrKQorCQlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4s IHdhbGtlci0+c2NhbnNbc10pCisJCQlhbGxfc2Nhbl9ydGlzID0gYm1zX2FkZF9tZW1iZXJzKGFs bF9zY2FuX3J0aXMsIHNjYW4tPnJlbGlkcyk7CisKKwkvKiBOb3cgY2xhc3NpZnkgZWFjaCBzdWJw bGFuLiAqLworCWZvcmVhY2hfcHRyKHBncGFfcGxhbm5lcl9pbmZvLCBwcm9vdCwgcHJvb3RzKQor CXsKKwkJYm9vbAkJY2hvc2VuID0gZmFsc2U7CisKKwkJLyoKKwkJICogV2UncmUgb25seSBpbnRl cmVzdGVkIGluIGNsYXNzaWZ5aW5nIHN1YnBsYW5zIGZvciB3aGljaCB0aGVyZSBhcmUKKwkJICog YWx0ZXJuYXRpdmVzLgorCQkgKi8KKwkJaWYgKCFwcm9vdC0+aXNfYWx0ZXJuYXRpdmVfcGxhbikK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEEgc3VicGxhbiBoYXMgYmVlbiBjaG9zZW4gaWYg YW55IG9mIGl0cyBzY2FuIFJUSXMgYXBwZWFyIGluIHRoZQorCQkgKiBmaW5hbCBwbGFuLiBUaGlz IGNhbm5vdCBiZSB0aGUgY2FzZSBpZiBpdCBoYXMgbm8gUlQgb2Zmc2V0LgorCQkgKi8KKwkJaWYg KHByb290LT5oYXNfcnRvZmZzZXQpCisJCXsKKwkJCWZvciAoaW50IHJ0aSA9IDE7IHJ0aSA8PSBw cm9vdC0+cmlkX2FycmF5X3NpemU7IHJ0aSsrKQorCQkJeworCQkJCWlmIChwcm9vdC0+cmlkX2Fy cmF5W3J0aSAtIDFdLmFsaWFzX25hbWUgIT0gTlVMTCAmJgorCQkJCQlibXNfaXNfbWVtYmVyKHBy b290LT5ydG9mZnNldCArIHJ0aSwgYWxsX3NjYW5fcnRpcykpCisJCQkJeworCQkJCQljaG9zZW4g PSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBBZGQgaXQgdG8g dGhlIGNvcnJlY3QgbGlzdC4gKi8KKwkJaWYgKGNob3NlbikKKwkJCSpjaG9zZW5fcHJvb3RzID0g bGFwcGVuZCgqY2hvc2VuX3Byb290cywgcHJvb3QpOworCQllbHNlCisJCQkqZGlzY2FyZGVkX3By b290cyA9IGxhcHBlbmQoKmRpc2NhcmRlZF9wcm9vdHMsIHByb290KTsKKwl9Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKaW5kZXggOWI3NGNkM2JhNTUuLjQ3NjY3YzAzMzc0IDEw MDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCkBAIC0xMDAsNiArMTAwLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0CiAJTGlzdAkgICAqam9pbl9zdHJh dGVnaWVzW05VTV9QR1BBX0pPSU5fU1RSQVRFR1ldOwogCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVz W05VTV9QR1BBX1FGX1RZUEVTXTsKIAlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7CisJ TGlzdAkgICAqZG9fbm90X3NjYW5faWRlbnRpZmllcnM7CiB9IHBncGFfcGxhbl93YWxrZXJfY29u dGV4dDsKIAogZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2Fs dGVybmF0aXZlcy5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9hbHRlcm5hdGl2ZXMu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNjI5OWVkZDE5Ngot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2FsdGVybmF0aXZl cy5zcWwKQEAgLTAsMCArMSw1OCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgYWx0X3QxIChh IGludCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIGFs dF90MiAoYSBpbnQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJ TkRFWCBPTiBhbHRfdDIoYSk7CitJTlNFUlQgSU5UTyBhbHRfdDEgU0VMRUNUIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKTsKK0lOU0VSVCBJTlRPIGFsdF90MiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDAwMCk7CitWQUNVVU0gQU5BTFlaRSBhbHRfdDE7CitWQUNVVU0gQU5BTFlaRSBhbHRf dDI7CisKKy0tIFRoaXMgcXVlcnkgdXNlcyBhbiBPUiB0byBwcmV2ZW50IHRoZSBFWElTVFMgZnJv bSBiZWluZyBjb252ZXJ0ZWQgdG8gYQorLS0gc2VtaS1qb2luLCBmb3JjaW5nIHRoZSBwbGFubmVy IHRocm91Z2ggdGhlIEFsdGVybmF0aXZlU3ViUGxhbiBwYXRoLgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gYWx0X3QxCitXSEVSRSBFWElTVFMgKFNFTEVD VCAxIEZST00gYWx0X3QyIFdIRVJFIGFsdF90Mi5hID0gYWx0X3QxLmEpIE9SIGFsdF90MS5hIDwg MDsKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgZWl0aGVyIEFsdGVybmF0aXZlU3Vi UGxhbiBieSBhZHZpc2luZyBhZ2FpbnN0CistLSBzY2FubmluZyB0aGUgb3RoZXIgcmVsYXRpb24u CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRE9fTk9UX1NDQU4o YWx0X3QyQGV4aXN0c18xKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBhbHRfdDEKK1dIRVJFIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBhbHRfdDIgV0hF UkUgYWx0X3QyLmEgPSBhbHRfdDEuYSkgT1IgYWx0X3QxLmEgPCAwOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihhbHRfdDJAZXhpc3RzXzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUg RVhJU1RTIChTRUxFQ1QgMSBGUk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBP UiBhbHRfdDEuYSA8IDA7CitDT01NSVQ7CisKKy0tIE5vdyBsZXQncyB0ZXN0IGEgY2FzZSBpbnZv bHZpbmcgTWluTWF4QWdnUGF0aCwgd2hpY2ggd2UgdHJlYXQgc2ltaWxhcmx5CistLSB0byB0aGUg QWx0ZXJuYXRpdmVTdWJQbGFuIGNhc2UuCitDUkVBVEUgVEFCTEUgYWx0X21pbm1heCAoYSBpbnQp IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRFWCBPTiBhbHRf bWlubWF4KGEpOworSU5TRVJUIElOVE8gYWx0X21pbm1heCBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDAwKTsKK1ZBQ1VVTSBBTkFMWVpFIGFsdF9taW5tYXg7CisKKy0tIFVzaW5nIGFuIElu ZGV4IFNjYW4gaW5zaWRlIG9mIGFuIEluaXRQbGFuIHNob3VsZCB3aW4gb3ZlciBhIGZ1bGwgdGFi bGUKKy0tIHNjYW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUIG1p bihhKSwgbWF4KGEpIEZST00gYWx0X21pbm1heDsKKworLS0gQWR2aXNpbmcgYWdhaW5zdCB0aGUg c2NhbiBvZiBhbHRfbWlubWF4IGF0IHRoZSByb290IHF1ZXJ5IGxldmVsIHNob3VsZAorLS0gY2hh bmdlIG5vdGhpbmcsIGJ1dCBpZiB3ZSBzYXkgd2UgZG9uJ3Qgd2FudCBlaXRoZXIgb2Ygb3IgYm90 aCBvZiB0aGUKKy0tIG1pbm1heC12YXJpYW50IHNjYW5zLCB0aGUgcGxhbiBzaG91bGQgc3dpdGNo IHRvIGEgZnVsbCB0YWJsZSBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0RPX05PVF9TQ0FOKGFsdF9taW5tYXgpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBhbHRfbWlubWF4OworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihhbHRfbWlubWF4QG1p bm1heF8xKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUIG1pbihh KSwgbWF4KGEpIEZST00gYWx0X21pbm1heDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSkgRE9fTk9UX1NDQU4oYWx0X21p bm1heEBtaW5tYXhfMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCBtaW4oYSksIG1heChhKSBGUk9NIGFsdF9taW5tYXg7CitDT01NSVQ7CisKK0RST1AgVEFCTEUg YWx0X3QxLCBhbHRfdDIsIGFsdF9taW5tYXg7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3Fs CmluZGV4IDRmYzQ5NGM3ZDhlLi44MDBmZjdhNDYyMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c2Nhbi5zcWwKQEAgLTc5LDcgKzc5LDggQEAgQ09NTUlUOwogCiAtLSBXZSBjYW4gZm9yY2UgYSBw cmltYXJ5IGtleSBsb29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKIC0tIGNh bid0IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1u IGxpc3QpCi0tLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVh bCkuCistLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCku IElmIHdlIGFwcGx5IERPX05PVF9TQ0FOCistLSBoZXJlLCB3ZSBzaG91bGQgZ2V0IGEgdmFsaWQg cGxhbiBhbnl3YXksIGJ1dCB3aXRoIHRoZSBzY2FuIGRpc2FibGVkLgogQkVHSU47CiBTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKIEVYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKQEAgLTg3LDYgKzg4LDggQEAgU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKIEVYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKIFNFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nh bl90YWJsZSknOwogRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdET19OT1RfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CiBDT01NSVQ7CiAK IC0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGlu ZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BncGxhbmFk dmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCmluZGV4IDhkZjhhOTc4 ZWNmLi5jM2UxY2NiNjBhMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbApAQCAtMjY3LDcgKzI2Nyw4 IEBAIFRJRF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQog SU5ERVhfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxl PmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQogSU5ERVhfT05MWV9TQ0FOKDxyZXBs YWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+aW5kZXhfbmFtZTwvcmVw bGFjZWFibGU+IFsgLi4uIF0pCiBGT1JFSUdOX1NDQU4oKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3Jl cGxhY2VhYmxlPiBbIC4uLiBdKSBbIC4uLiBdKQotQklUTUFQX0hFQVBfU0NBTig8cmVwbGFjZWFi bGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgorQklUTUFQX0hFQVBf U0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0RPX05PVF9T Q0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKTwvc3lub3BzaXM+ CiAKICAgIDxwYXJhPgogICAgIDxsaXRlcmFsPlNFUV9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMg dGhhdCBlYWNoIHRhcmdldCBzaG91bGQgYmUKQEAgLTI5Nyw2ICsyOTgsMTcgQEAgQklUTUFQX0hF QVBfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9w c2lzPgogICAgIHRoYXQgcHVycG9zZS4KICAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgPGxp dGVyYWw+RE9fTk9UX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciB0 YXJnZXQKKyAgICBzaG91bGQgbm90IGFwcGVhciBpbiB0aGUgZmluYWwgcGxhbiBhdCBhbGwuIElu IG1vc3QgY2FzZXMsIHRoaXMgaXMKKyAgICBpbXBvc3NpYmxlLCBhbmQgd2lsbCBzaW1wbHkgY2F1 c2UgdGhlIHNjYW4gb2YgdGhlIHRhcmdldCByZWxhdGlvbiB0bworICAgIGJlIG1hcmtlZCBkaXNh YmxlZC4gSG93ZXZlciwgaW4gY2VydGFpbiBjYXNlcywgdGhlIHBsYW5uZXIgY29uc2lkZXJzCisg ICAgb3B0aW1pemF0aW9ucyB3aGVyZSBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSBpcyBjb3Bp ZWQgYW5kIG11dGF0ZWQsCisgICAgYW5kIHRoZW4gY29uc2lkZXJlZCBhcyBhbiBhbHRlcm5hdGl2 ZSB0byB0aGUgb3JpZ2luYWwuIEluIHRob3NlIGNhc2VzLAorICAgIDxsaXRlcmFsPkRPX05PVF9T Q0FOPC9saXRlcmFsPiBjYW4gYmUgdXNlZCB0byBleGNsdWRlIHRoZSBub24tcHJlZmVycmVkCisg ICAgYWx0ZXJuYXRpdmUuCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIFRoZSBwbGFubmVy IHN1cHBvcnRzIG1hbnkgdHlwZXMgb2Ygc2NhbnMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaGVy ZTsKICAgICBob3dldmVyLCBpbiBtb3N0IG9mIHRob3NlIGNhc2VzLCB0aGVyZSBpcyBubyBtZWFu aW5nZnVsIGRlY2lzaW9uIHRvIGJlCi0tIAoyLjUxLjAKCg== --0000000000002cd4f4064df09aff Content-Type: application/octet-stream; name="v23-0001-Add-an-alternative_plan_name-field-to-PlannerInf.patch" Content-Disposition: attachment; filename="v23-0001-Add-an-alternative_plan_name-field-to-PlannerInf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qmtv80 RnJvbSA3MjIwMDBkNDJhMjY3ZjRkMjBjMjE2NGJjOTA5NWFkMDBjM2E4YmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjMgTWFyIDIwMjYgMDg6NDk6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyAx LzRdIEFkZCBhbiBhbHRlcm5hdGl2ZV9wbGFuX25hbWUgZmllbGQgdG8gUGxhbm5lckluZm8uCgpU eXBpY2FsbHksIHdlIGhhdmUgb25seSBvbmUgUGxhbm5lckluZm8gZm9yIGFueSBnaXZlbiBzdWJx dWVyeSwgYnV0CndoZW4gd2UgYXJlIGNvbnNpZGVyaW5nIGEgTWluTWF4QWdnUGF0aCBvciBhIGhh c2hlZCBzdWJwbGFuLCB3ZSBlbmQKdXAgY3JlYXRpbmcgYSBzZWNvbmQgUGxhbm5lckluZm8gZm9y IHRoZSBzYW1lIHBvcnRpb24gb2YgdGhlIHF1ZXJ5LAp3aXRoIGEgY2xvbmUgb2YgdGhlIG9yaWdp bmFsIHJhbmdlIHRhYmxlLiBJbiBmYWN0LCBpbiB0aGUgTWluTWF4QWdnUGF0aApjYXNlLCB3ZSBt aWdodCBlbmQgdXAgY3JlYXRpbmcgc2V2ZXJhbCBjbG9uZXMsIG9uZSBwZXIgYWdncmVnYXRlLgoK QXQgcHJlc2VudCwgdGhlcmUncyBubyBlYXN5IHdheSBmb3IgYSBwbHVnaW4sIHN1Y2ggYXMgcGdf cGxhbl9hZHZpY2UsCnRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUg b3JpZ2luYWwgcmFuZ2UgdGFibGUgYW5kCnRoZSBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgY3JlYXRl ZCBpbiB0aGVzZSBjYXNlcy4gIFRvIGZpeCwgYWRkIGFuCmFsdGVybmF0aXZlX3BsYW5fbmFtZSBm aWVsZCB0byBQbGFubmVySW5mby4gRm9yIGEgaGFzaGVkIHN1YnBsYW4sIHRoaXMKaXMgdGhlIHBs YW4gbmFtZSBmb3IgdGhlIG5vbi1oYXNoZWQgYWx0ZXJuYXRpdmU7IGZvciBtaW5tYXggYWdncmVn YXRlcywKdGhpcyBpcyB0aGUgcGxhbl9uYW1lIGZyb20gdGhlIHBhcmVudCBQbGFubmVySW5mbzsg b3RoZXJ3aXNlLCBpdCdzIHRoZQpzYW1lIGFzIHBsYW5fbmFtZS4KLS0tCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFuYWdnLmMgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYyAgICAgIHwgMTUgKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zdWJzZWxlY3QuYyAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcGpvaW50cmVlLmMgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9w cmVwdW5pb24uYyAgICB8ICAyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAg ICAgICAgICB8IDEyICsrKysrKysrKysrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5uZXIu aCAgICAgICAgICAgfCAgMSArCiA4IGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggYzI2 ZjQ4ZWRmYTAuLjYxMDkzZjIyMmExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKQEAgLTI4MzMsNyArMjgzMyw3IEBAIHNldF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCS8qIEdlbmVyYXRlIGEgc3Vicm9vdCBhbmQgUGF0 aHMgZm9yIHRoZSBzdWJxdWVyeSAqLwogCXBsYW5fbmFtZSA9IGNob29zZV9wbGFuX25hbWUocm9v dC0+Z2xvYiwgcnRlLT5lcmVmLT5hbGlhc25hbWUsIGZhbHNlKTsKIAlyZWwtPnN1YnJvb3QgPSBz dWJxdWVyeV9wbGFubmVyKHJvb3QtPmdsb2IsIHN1YnF1ZXJ5LCBwbGFuX25hbWUsCi0JCQkJCQkJ CQlyb290LCBmYWxzZSwgdHVwbGVfZnJhY3Rpb24sIE5VTEwpOworCQkJCQkJCQkJcm9vdCwgTlVM TCwgZmFsc2UsIHR1cGxlX2ZyYWN0aW9uLCBOVUxMKTsKIAogCS8qIElzb2xhdGUgdGhlIHBhcmFt cyBuZWVkZWQgYnkgdGhpcyBzcGVjaWZpYyBzdWJwbGFuICovCiAJcmVsLT5zdWJwbGFuX3BhcmFt cyA9IHJvb3QtPnBsYW5fcGFyYW1zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbmFnZy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbmFnZy5jCmlu ZGV4IDA5YjM4YjJjMzc4Li43NWY2NDc1Y2I1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbmFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5hZ2cuYwpAQCAtMzQxLDYgKzM0MSw3IEBAIGJ1aWxkX21pbm1heF9wYXRoKFBsYW5uZXJJbmZv ICpyb290LCBNaW5NYXhBZ2dJbmZvICptbWluZm8sCiAJc3Vicm9vdC0+cXVlcnlfbGV2ZWwrKzsK IAlzdWJyb290LT5wYXJlbnRfcm9vdCA9IHJvb3Q7CiAJc3Vicm9vdC0+cGxhbl9uYW1lID0gY2hv b3NlX3BsYW5fbmFtZShyb290LT5nbG9iLCAibWlubWF4IiwgdHJ1ZSk7CisJc3Vicm9vdC0+YWx0 ZXJuYXRpdmVfcGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOwogCiAJLyogcmVzZXQgc3VicGxh bi1yZWxhdGVkIHN0dWZmICovCiAJc3Vicm9vdC0+cGxhbl9wYXJhbXMgPSBOSUw7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggNDI2MDRhMGY3NWMuLmQxOTgwMGFkNmE1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MTUsOCArNTE1LDggQEAgc3Rh bmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50 IGN1cnNvck9wdGlvbnMsCiAJCQkJCQkJICAgJnR1cGxlX2ZyYWN0aW9uLCBlcyk7CiAKIAkvKiBw cmltYXJ5IHBsYW5uaW5nIGVudHJ5IHBvaW50IChtYXkgcmVjdXJzZSBmb3Igc3VicXVlcmllcykg Ki8KLQlyb290ID0gc3VicXVlcnlfcGxhbm5lcihnbG9iLCBwYXJzZSwgTlVMTCwgTlVMTCwgZmFs c2UsIHR1cGxlX2ZyYWN0aW9uLAotCQkJCQkJCU5VTEwpOworCXJvb3QgPSBzdWJxdWVyeV9wbGFu bmVyKGdsb2IsIHBhcnNlLCBOVUxMLCBOVUxMLCBOVUxMLCBmYWxzZSwKKwkJCQkJCQl0dXBsZV9m cmFjdGlvbiwgTlVMTCk7CiAKIAkvKiBTZWxlY3QgYmVzdCBQYXRoIGFuZCB0dXJuIGl0IGludG8g YSBQbGFuICovCiAJZmluYWxfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVMX0ZJ TkFMLCBOVUxMKTsKQEAgLTcxNSw2ICs3MTUsOCBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpw YXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKICAqIHBh cnNlIGlzIHRoZSBxdWVyeXRyZWUgcHJvZHVjZWQgYnkgdGhlIHBhcnNlciAmIHJld3JpdGVyLgog ICogcGxhbl9uYW1lIGlzIHRoZSBuYW1lIHRvIGFzc2lnbiB0byB0aGlzIHN1YnBsYW4gKE5VTEwg YXQgdGhlIHRvcCBsZXZlbCkuCiAgKiBwYXJlbnRfcm9vdCBpcyB0aGUgaW1tZWRpYXRlIHBhcmVu dCBRdWVyeSdzIGluZm8gKE5VTEwgYXQgdGhlIHRvcCBsZXZlbCkuCisgKiBhbHRlcm5hdGl2ZV9y b290IGlzIGEgcHJldmlvdXNseSBjcmVhdGVkIFBsYW5uZXJJbmZvIGZvciB3aGljaCB0aGlzIHF1 ZXJ5CisgKiBsZXZlbCBpcyBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgb3IgZWxzZSBO VUxMLgogICogaGFzUmVjdXJzaW9uIGlzIHRydWUgaWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBXSVRI IHF1ZXJ5LgogICogdHVwbGVfZnJhY3Rpb24gaXMgdGhlIGZyYWN0aW9uIG9mIHR1cGxlcyB3ZSBl eHBlY3Qgd2lsbCBiZSByZXRyaWV2ZWQuCiAgKiB0dXBsZV9mcmFjdGlvbiBpcyBpbnRlcnByZXRl ZCBhcyBleHBsYWluZWQgZm9yIGdyb3VwaW5nX3BsYW5uZXIsIGJlbG93LgpAQCAtNzQxLDggKzc0 Myw5IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogICovCiBQbGFubmVySW5mbyAqCiBzdWJxdWVyeV9w bGFubmVyKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY2hhciAqcGxhbl9uYW1l LAotCQkJCSBQbGFubmVySW5mbyAqcGFyZW50X3Jvb3QsIGJvb2wgaGFzUmVjdXJzaW9uLAotCQkJ CSBkb3VibGUgdHVwbGVfZnJhY3Rpb24sIFNldE9wZXJhdGlvblN0bXQgKnNldG9wcykKKwkJCQkg UGxhbm5lckluZm8gKnBhcmVudF9yb290LCBQbGFubmVySW5mbyAqYWx0ZXJuYXRpdmVfcm9vdCwK KwkJCQkgYm9vbCBoYXNSZWN1cnNpb24sIGRvdWJsZSB0dXBsZV9mcmFjdGlvbiwKKwkJCQkgU2V0 T3BlcmF0aW9uU3RtdCAqc2V0b3BzKQogewogCVBsYW5uZXJJbmZvICpyb290OwogCUxpc3QJICAg Km5ld1dpdGhDaGVja09wdGlvbnM7CkBAIC03NTgsNiArNzYxLDEwIEBAIHN1YnF1ZXJ5X3BsYW5u ZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjaGFyICpwbGFuX25hbWUsCiAJ cm9vdC0+Z2xvYiA9IGdsb2I7CiAJcm9vdC0+cXVlcnlfbGV2ZWwgPSBwYXJlbnRfcm9vdCA/IHBh cmVudF9yb290LT5xdWVyeV9sZXZlbCArIDEgOiAxOwogCXJvb3QtPnBsYW5fbmFtZSA9IHBsYW5f bmFtZTsKKwlpZiAoYWx0ZXJuYXRpdmVfcm9vdCAhPSBOVUxMKQorCQlyb290LT5hbHRlcm5hdGl2 ZV9wbGFuX25hbWUgPSBhbHRlcm5hdGl2ZV9yb290LT5wbGFuX25hbWU7CisJZWxzZQorCQlyb290 LT5hbHRlcm5hdGl2ZV9wbGFuX25hbWUgPSBwbGFuX25hbWU7CiAJcm9vdC0+cGFyZW50X3Jvb3Qg PSBwYXJlbnRfcm9vdDsKIAlyb290LT5wbGFuX3BhcmFtcyA9IE5JTDsKIAlyb290LT5vdXRlcl9w YXJhbXMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vi c2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwppbmRleCAw ZDMxODYxZGE3Zi4uY2NlYzFlYWE3ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3N1YnNlbGVjdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNl bGVjdC5jCkBAIC0yMjQsNyArMjI0LDcgQEAgbWFrZV9zdWJwbGFuKFBsYW5uZXJJbmZvICpyb290 LCBRdWVyeSAqb3JpZ19zdWJxdWVyeSwKIAkvKiBHZW5lcmF0ZSBQYXRocyBmb3IgdGhlIHN1YnF1 ZXJ5ICovCiAJc3Vicm9vdCA9IHN1YnF1ZXJ5X3BsYW5uZXIocm9vdC0+Z2xvYiwgc3VicXVlcnks CiAJCQkJCQkJICAgY2hvb3NlX3BsYW5fbmFtZShyb290LT5nbG9iLCBzdWJsaW5rc3RyLCB0cnVl KSwKLQkJCQkJCQkgICByb290LCBmYWxzZSwgdHVwbGVfZnJhY3Rpb24sIE5VTEwpOworCQkJCQkJ CSAgIHJvb3QsIE5VTEwsIGZhbHNlLCB0dXBsZV9mcmFjdGlvbiwgTlVMTCk7CiAKIAkvKiBJc29s YXRlIHRoZSBwYXJhbXMgbmVlZGVkIGJ5IHRoaXMgc3BlY2lmaWMgc3VicGxhbiAqLwogCXBsYW5f cGFyYW1zID0gcm9vdC0+cGxhbl9wYXJhbXM7CkBAIC0yNzQsNyArMjc0LDcgQEAgbWFrZV9zdWJw bGFuKFBsYW5uZXJJbmZvICpyb290LCBRdWVyeSAqb3JpZ19zdWJxdWVyeSwKIAkJCS8qIEdlbmVy YXRlIFBhdGhzIGZvciB0aGUgQU5ZIHN1YnF1ZXJ5OyB3ZSdsbCBuZWVkIGFsbCByb3dzICovCiAJ CQlwbGFuX25hbWUgPSBjaG9vc2VfcGxhbl9uYW1lKHJvb3QtPmdsb2IsIHN1YmxpbmtzdHIsIHRy dWUpOwogCQkJc3Vicm9vdCA9IHN1YnF1ZXJ5X3BsYW5uZXIocm9vdC0+Z2xvYiwgc3VicXVlcnks IHBsYW5fbmFtZSwKLQkJCQkJCQkJCSAgIHJvb3QsIGZhbHNlLCAwLjAsIE5VTEwpOworCQkJCQkJ CQkJICAgcm9vdCwgc3Vicm9vdCwgZmFsc2UsIDAuMCwgTlVMTCk7CiAKIAkJCS8qIElzb2xhdGUg dGhlIHBhcmFtcyBuZWVkZWQgYnkgdGhpcyBzcGVjaWZpYyBzdWJwbGFuICovCiAJCQlwbGFuX3Bh cmFtcyA9IHJvb3QtPnBsYW5fcGFyYW1zOwpAQCAtOTcxLDcgKzk3MSw3IEBAIFNTX3Byb2Nlc3Nf Y3RlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJICovCiAJCXN1YnJvb3QgPSBzdWJxdWVyeV9wbGFu bmVyKHJvb3QtPmdsb2IsIHN1YnF1ZXJ5LAogCQkJCQkJCQkgICBjaG9vc2VfcGxhbl9uYW1lKHJv b3QtPmdsb2IsIGN0ZS0+Y3RlbmFtZSwgZmFsc2UpLAotCQkJCQkJCQkgICByb290LCBjdGUtPmN0 ZXJlY3Vyc2l2ZSwgMC4wLCBOVUxMKTsKKwkJCQkJCQkJICAgcm9vdCwgTlVMTCwgY3RlLT5jdGVy ZWN1cnNpdmUsIDAuMCwgTlVMTCk7CiAKIAkJLyoKIAkJICogU2luY2UgdGhlIGN1cnJlbnQgcXVl cnkgbGV2ZWwgZG9lc24ndCB5ZXQgY29udGFpbiBhbnkgUlRFcywgaXQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggZDVlMTA0MWZmYTMuLjk1YmY1MTYwNmNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpAQCAtMTQxOCw2 ICsxNDE4LDcgQEAgcHVsbF91cF9zaW1wbGVfc3VicXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5v ZGUgKmp0bm9kZSwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCXN1YnJvb3QtPmdsb2IgPSByb290LT5n bG9iOwogCXN1YnJvb3QtPnF1ZXJ5X2xldmVsID0gcm9vdC0+cXVlcnlfbGV2ZWw7CiAJc3Vicm9v dC0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCXN1YnJvb3QtPmFsdGVybmF0aXZlX3Bs YW5fbmFtZSA9IHJvb3QtPmFsdGVybmF0aXZlX3BsYW5fbmFtZTsKIAlzdWJyb290LT5wYXJlbnRf cm9vdCA9IHJvb3QtPnBhcmVudF9yb290OwogCXN1YnJvb3QtPnBsYW5fcGFyYW1zID0gTklMOwog CXN1YnJvb3QtPm91dGVyX3BhcmFtcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXB1bmlvbi5jCmluZGV4IDU4M2NiMGI3YTI1Li5kMWYwMjJjNWJmZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTI1MCw3ICsyNTAsNyBAQCByZWN1cnNlX3NldF9v cGVyYXRpb25zKE5vZGUgKnNldE9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJICovCiAJCXBsYW5f bmFtZSA9IGNob29zZV9wbGFuX25hbWUocm9vdC0+Z2xvYiwgInNldG9wIiwgdHJ1ZSk7CiAJCXN1 YnJvb3QgPSByZWwtPnN1YnJvb3QgPSBzdWJxdWVyeV9wbGFubmVyKHJvb3QtPmdsb2IsIHN1YnF1 ZXJ5LAotCQkJCQkJCQkJCQkJICBwbGFuX25hbWUsIHJvb3QsCisJCQkJCQkJCQkJCQkgIHBsYW5f bmFtZSwgcm9vdCwgTlVMTCwKIAkJCQkJCQkJCQkJCSAgZmFsc2UsIHJvb3QtPnR1cGxlX2ZyYWN0 aW9uLAogCQkJCQkJCQkJCQkJICBwYXJlbnRPcCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXgg Mjc3NThlYzE2ZmUuLjk2ZWMzMjI3MjYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMzIwLDYg KzMyMCwxOCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkvKiBTdWJwbGFuIG5hbWUgZm9yIEVYUExB SU4gYW5kIGRlYnVnZ2luZyBwdXJwb3NlcyAoTlVMTCBhdCB0b3AgbGV2ZWwpICovCiAJY2hhcgkg ICAqcGxhbl9uYW1lOwogCisJLyoKKwkgKiBJZiB0aGlzIFBsYW5uZXJJbmZvIGV4aXN0cyB0byBj b25zaWRlciBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbgorCSAqIHN0cmF0ZWd5IGZvciBh IHBvcnRpb24gb2YgdGhlIHF1ZXJ5IHRoYXQgY291bGQgYWxzbyBiZSBpbXBsZW1lbnRlZCBieQor CSAqIHNvbWUgb3RoZXIgUGxhbm5lckluZm8sIHRoaXMgaXMgdGhlIHBsYW5fbmFtZSBmb3IgdGhh dCBvdGhlcgorCSAqIFBsYW5uZXJJbmZvLiBXaGVuIHdlIGFyZSBjb25zaWRlcmluZyB0aGUgZmly c3Qgb3Igb25seSBhbHRlcm5hdGl2ZSwKKwkgKiBpdCBpcyB0aGUgc2FtZSBhcyBwbGFuX25hbWUu CisJICoKKwkgKiBDdXJyZW50bHksIHdlIHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBw bGFuX25hbWUgb25seSB3aGVuCisJICogY29uc2lkZXJpbmcgYSBNaW5NYXhBZ2dQYXRoIG9yIGEg aGFzaGVkIFN1YlBsYW4uCisJICovCisJY2hhcgkgICAqYWx0ZXJuYXRpdmVfcGxhbl9uYW1lOwor CiAJLyoKIAkgKiBwbGFuX3BhcmFtcyBjb250YWlucyB0aGUgZXhwcmVzc2lvbnMgdGhhdCB0aGlz IHF1ZXJ5IGxldmVsIG5lZWRzIHRvCiAJICogbWFrZSBhdmFpbGFibGUgdG8gYSBsb3dlciBxdWVy eSBsZXZlbCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwbGFubmVkLgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5uZXIuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bmVyLmgKaW5kZXggODA1MDk3NzNjMDEuLjljNDk1MGIzNDBmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGxhbm5lci5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bmVyLmgKQEAgLTYzLDYgKzYzLDcgQEAgZXh0ZXJuIFBsYW5uZWRTdG10ICpzdGFuZGFyZF9wbGFu bmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogZXh0ZXJuIFBsYW5u ZXJJbmZvICpzdWJxdWVyeV9wbGFubmVyKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJz ZSwKIAkJCQkJCQkJCSBjaGFyICpwbGFuX25hbWUsCiAJCQkJCQkJCQkgUGxhbm5lckluZm8gKnBh cmVudF9yb290LAorCQkJCQkJCQkJIFBsYW5uZXJJbmZvICphbHRlcm5hdGl2ZV9yb290LAogCQkJ CQkJCQkJIGJvb2wgaGFzUmVjdXJzaW9uLCBkb3VibGUgdHVwbGVfZnJhY3Rpb24sCiAJCQkJCQkJ CQkgU2V0T3BlcmF0aW9uU3RtdCAqc2V0b3BzKTsKIAotLSAKMi41MS4wCgo= --0000000000002cd4f4064df09aff Content-Type: application/octet-stream; name="v23-0004-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v23-0004-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn7qmtvs3 RnJvbSBkMmI3NmI3MGE3ZGQ0YmQ4ODdlMDkyMjdlNzMzNDE0Y2YxM2Y1OWZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMyA0 LzRdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSBp cyBzZXQgdG8gdGhlIG5hbWUgb2YgYW4gYWR2aWNlCnN0YXNoLCBhbmQgaWYgcXVlcnkgaWRlbnRp ZmllcnMgYXJlIGVuYWJsZWQsIHRoZSBxdWVyeSBpZGVudGlmaWVyCmZvciBlYWNoIHF1ZXJ5IHdp bGwgYmUgbG9va2VkIHVwIGluIHRoZSBhZHZpY2Ugc3Rhc2ggYW5kIHRoZQphc3NvY2lhdGVkIGFk dmljZSBzdHJpbmcsIGlmIGFueSwgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSB0aGF0IHF1ZXJ5Cmlz IHBsYW5uZWQuCi0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAg fCAgMjYgKwogLi4uL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQgICAgICAgICAgICAgIHwg MzI4ICsrKysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAg ICB8ICAzNSArCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAg fCAgNDMgKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwg OTAwICsrKysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuY29udHJvbCAgIHwgICA1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2Fk dmljZS5zcWwgICB8IDE0NyArKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAg ICAgICAgIHwgMjE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgICAgICAgfCAgIDYgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTcxMiBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9h ZHZpY2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVz b24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19z dGFzaF9hZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNo X2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMjIwNzEwMzRlNTEuLjA2 NjE1ZTEyM2YwIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFr ZWZpbGUKQEAgLTM3LDYgKzM3LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAog CQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3ByZXdhcm0JXAorCQlwZ19zdGFzaF9hZHZpY2UJXAog CQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKIAkJcGdfdHJnbQkJXApkaWZm IC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXgg ZmY0MjJkOWI3ZmMuLjQ4NjJiYTk3ZWQxIDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxk CisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTUyLDYgKzUyLDcgQEAgc3ViZGlyKCdwZ19v dmVyZXhwbGFpbicpCiBzdWJkaXIoJ3BnX3BsYW5fYWR2aWNlJykKIHN1YmRpcigncGdfcHJld2Fy bScpCiBzdWJkaXIoJ3Bncm93bG9ja3MnKQorc3ViZGlyKCdwZ19zdGFzaF9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19zdGF0X3N0YXRlbWVudHMnKQogc3ViZGlyKCdwZ3N0YXR0dXBsZScpCiBzdWJkaXIo J3BnX3N1cmdlcnknKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZp bGUgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5YjdmMzAxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDI2IEBACisjIGNvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19zdGFzaF9hZHZpY2UK K09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXBnX3N0YXNoX2FkdmljZS5vCisKK0VYVEVOU0lP TiA9IHBnX3N0YXNoX2FkdmljZQorREFUQSA9IHBnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAorUEdG SUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBs eSBwbGFuIGFkdmljZSIKKworUkVHUkVTUyA9IHBnX3N0YXNoX2FkdmljZQorRVhUUkFfSU5TVEFM TCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NQUEZMQUdT ID0gLUkkKGluY2x1ZGVkaXJfc2VydmVyKS9leHRlbnNpb24KK1BHX0NPTkZJRyA9IHBnX2NvbmZp ZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykK K2Vsc2UKK1BHX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8u LgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAk KHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0IGIv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDFlOTM1NzlkOGEKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZp Y2Uub3V0CkBAIC0wLDAgKzEsMzI4IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2Fkdmlj ZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CistLSBIZWxwZXI6IGV4dHJhY3QgcXVlcnkgaWRlbnRpZmllciBmcm9t IEVYUExBSU4gVkVSQk9TRSBvdXRwdXQuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRf cXVlcnlfaWQocXVlcnlfdGV4dCB0ZXh0KSBSRVRVUk5TIGJpZ2ludAorTEFOR1VBR0UgcGxwZ3Nx bCBBUyAkJAorREVDTEFSRQorICAgIGxpbmUgdGV4dDsKKyAgICBxaWQgYmlnaW50OworQkVHSU4K KyAgICBGT1IgbGluZSBJTiBFWEVDVVRFICdFWFBMQUlOIChWRVJCT1NFLCBGT1JNQVQgVEVYVCkg JyB8fCBxdWVyeV90ZXh0CisgICAgTE9PUAorICAgICAgICBJRiBsaW5lIH4gJ1F1ZXJ5IElkZW50 aWZpZXI6JyBUSEVOCisgICAgICAgICAgICBxaWQgOj0gcmVnZXhwX3JlcGxhY2UobGluZSwgJy4q UXVlcnkgSWRlbnRpZmllcjpccyooLT9cZCspLionLCAnXDEnKTo6YmlnaW50OworICAgICAgICAg ICAgUkVUVVJOIHFpZDsKKyAgICAgICAgRU5EIElGOworICAgIEVORCBMT09QOworICAgIFJBSVNF IEVYQ0VQVElPTiAnUXVlcnkgSWRlbnRpZmllciBub3QgZm91bmQgaW4gRVhQTEFJTiBvdXRwdXQn OworRU5EOworJCQ7CitDUkVBVEUgVEFCTEUgYWFfZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3Nv bWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9kaW0xOworQ1JFQVRFIFRBQkxFIGFhX2Rp bTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRp bTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFh X2RpbTI7CitDUkVBVEUgVEFCTEUgYWFfZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRp bTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2RpbTEgKGlkKSwKKwlkaW0yX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0yIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZmFjdAorCVNFTEVDVCBnLCAo ZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGFhX2ZhY3Q7CistLSBHZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxF Q1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFf ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFp ZCBcZ3NldAorLS0gQ3JlYXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2 aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gn KTsKKyBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0 YXNoJzsKKy0tIFJ1biBvdXIgdGVzdCBxdWVyeSBmb3IgdGhlIGZpcnN0IHRpbWUgd2l0aCBubyBz dGFzaGVkIGFkdmljZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYWFfZmFj dCBmIExFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFz aCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBh YV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorKDExIHJvd3MpCisKKy0tIEZvcmNlIGFuIGluZGV4 IHNjYW4gb24gZGltMQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFz aCcsIDoncWlkJywKKwknSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpJyk7CisgcGdfc2V0X3N0 YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2gg Sm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFf ZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkp IC8qIG1hdGNoZWQgKi8KKygxMyByb3dzKQorCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBqb2lu IG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidx aWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGlt MV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQK KwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAt PiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCiso MTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNU IHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVE X0xPT1BfUExBSU4oZDEpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNo IENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9m YWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g YWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBhYV9kaW0xX3BrZXkgb24gYWFfZGltMSBkMQorICAgICAgICAg SW5kZXggQ29uZDogKGlkID0gZi5kaW0xX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkMSkgLyogbWF0 Y2hlZCAqLworKDEyIHJvd3MpCisKKy0tIEFkZCBhIHVzZWxlc3MgZXh0cmEgZW50cnkgdG8gb3Vy IHRlc3Qgc3Rhc2guIFNob3VsZG4ndCBjaGFuZ2UgdGhlIHJlc3VsdAorLS0gZnJvbSB0aGUgcHJl dmlvdXMgdGVzdC4KKy0tIChJZiB3ZSdyZSB1bmx1Y2t5IGVub3VnaCB0aGF0IHRoaXMgZXZlciBm YWlscyBkdWUgdG8gcXVlcnkgSUQgYWN0dWFsbHkKKy0tIGJlaW5nIDEsIHRoZW4ganVzdCBwdXQg c29tZSBvdGhlciBjb25zdGFudCBoZXJlLiBTZWVtcyB1bmxpa2VseS4pCitTRUxFQ1QgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMSwgJ1NFUV9TQ0FOKGQxKScpOworIHBn X3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpP SU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIu aWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFf ZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGlt MV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNoZWQgKi8KKygxMiByb3dzKQorCist LSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcKK1NFTEVDVCBw Z19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfY3JlYXRl X2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFh X2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBm LmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFf aWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGlt Ml9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisoMTEgcm93cykKKworLS0gVGVzdCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rh c2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2YgdGhlbSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBu b25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkg T1JERVIgQlkgc3Rhc2hfbmFtZTsKKyAgICAgc3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJpZXMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlfc3Rh c2ggfCAgICAgICAgICAgMAorIHJlZ3Jlc3Nfc3Rhc2ggICAgICAgfCAgICAgICAgICAgMgorKDIg cm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9h ZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsK KyAgc3Rhc2hfbmFtZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQor IHJlZ3Jlc3Nfc3Rhc2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVD VCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9j b250ZW50cygncmVncmVzc19lbXB0eV9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworIHN0YXNo X25hbWUgfCBhZHZpY2Vfc3RyaW5nIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorKDAg cm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwpIE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9u YW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAgICAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0YXNoIHwgU0VRX1NDQU4oZDEpCisgcmVncmVzc19z dGFzaCB8IE5FU1RFRF9MT09QX1BMQUlOKGQxKQorKDIgcm93cykKKworU0VMRUNUIHN0YXNoX25h bWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdu b19zdWNoX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitFUlJPUjogIGFkdmljZSBzdGFzaCAi bm9fc3VjaF9zdGFzaCIgZG9lcyBub3QgZXhpc3QKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gcmVtb3Zl IGFkdmljZS4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6 J3FpZCcsIG51bGwpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdy ZWdyZXNzX3N0YXNoJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0 IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhh c2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g YWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25h bWUgICAgICB8IG51bV9lbnRyaWVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0KKyByZWdyZXNzX2VtcHR5X3N0YXNoIHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAg ICAgIHwgICAgICAgICAgIDEKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vf c3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNo JykgT1JERVIgQlkgcXVlcnlfaWQ7CisgIHN0YXNoX25hbWUgICB8IGFkdmljZV9zdHJpbmcgCist LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FO KGQxKQorKDEgcm93KQorCistLSBDYW4ndCBjcmVhdGUgYSBzdGFzaCB0aGF0IGFscmVhZHkgZXhp c3RzLCBvciBkcm9wIG9uZSB0aGF0IGRvZXNuJ3QuCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9z dGFzaCgncmVncmVzc19zdGFzaCcpOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggInJlZ3Jlc3Nfc3Rh c2giIGFscmVhZHkgZXhpc3RzCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ25vX3N1Y2hf c3Rhc2gnKTsKK0VSUk9SOiAgYWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBl eGlzdAorLS0gQ2FuJ3QgYWRkIHRvIG9yIHJlbW92ZSBmcm9tIGEgc3Rhc2ggdGhhdCBkb2VzIG5v dCBleGlzdC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ25vX3N1Y2hfc3Rhc2gnLCAx LCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAgYWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBk b2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFz aCcsIDEsIG51bGwpOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggIm5vX3N1Y2hfc3Rhc2giIGRvZXMg bm90IGV4aXN0CistLSBDYW4ndCB1c2UgcXVlcnkgSUQgMC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCAwLCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAgY2Fu bm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBxdWVyeSBJRCAwCistLSBTdGFzaCBuYW1lcyBtdXN0 IGJlIG5vbi1lbXB0eSwgQVNDSUksIGFuZCBub3QgdG9vIGxvbmcuCitTRUxFQ1QgcGdfY3JlYXRl X2FkdmljZV9zdGFzaCgnJyk7CitFUlJPUjogIGFkdmljZSBzdGFzaCBuYW1lIG1heSBub3QgYmUg emVybyBsZW5ndGgKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyk7CitF UlJPUjogIGFkdmljZSBzdGFzaCBuYW1lcyBtYXkgbm90IGJlIGxvbmdlciB0aGFuIDYzIGJ5dGVz CitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaChFJ2NhZlx1MDBlOScpOworRVJST1I6ICBh ZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnY2Fmw6knOworRVJST1I6ICBpbnZhbGlk IHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIjogImNhZsOp IgorREVUQUlMOiAgYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBub3QgY29udGFpbiBub24tQVNDSUkg Y2hhcmFjdGVycworLS0gQ2xlYW4gdXAgc3RhdGUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5Lgor U0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7CisgcGdfZHJvcF9h ZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVD VCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2Ryb3Bf YWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iNjY2YmNkMGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3N0YXNoX2Fk dmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdGFzaF9hZHZpY2UuYycKKykKKworaWYgaG9z dF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzICs9IHJjX2xp Yl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAn cGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19zdGFzaF9hZHZpY2UgLSBz dG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScsXSkKK2VuZGlmCisKK3Bn X3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3N0YXNoX2FkdmljZScsCisgIHBnX3N0 YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9hZHZp Y2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyldLAorICBrd2FyZ3M6IGNvbnRyaWJfbW9k X2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfc3Rhc2hfYWR2aWNlCisKK2luc3RhbGxf ZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19zdGFzaF9hZHZpY2Uu Y29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9IHsK KyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3Vy Y2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNz JzogeworICAgICdzcWwnOiBbCisgICAgICAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICBdLAorICB9 LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYxYgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fkdmlj ZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9w Z19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNv dXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVz ZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBc cXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1l IHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRlX2Fk dmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZHJv cF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0LCBx dWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVSTlMg dm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitMQU5H VUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9VVCBz dGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBTRVRP RiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVzJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNo X2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmlnaW50 LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAn TU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5HVUFH RSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2godGV4 dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNlX3N0 YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2 aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5D VElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04g RlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJPTSBQ VUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjEyMjIzNjY5NAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0wLDAg KzEsOTAwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2UuYwor ICoJICBBcHBseSBwbGFuIGFkdmljZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IFNRTCBtb2RpZmlj YXRpb25zLgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyBwbGFuIGFkdmljZSBzdHJpbmdzIChh cyB1c2VkIGFuZCBnZW5lcmF0ZWQgYnkKKyAqIHBnX3BsYW5fYWR2aWNlKSB0byBiZSAic3Rhc2hl ZCIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFuZCwgZnJvbQorICogdGhlcmUsIGF1dG9tYXRp Y2FsbHkgYmUgYXBwbGllZCB0byBxdWVyaWVzIGFzIHRoZXkgYXJlIHBsYW5uZWQuCisgKiBZb3Ug Y2FuIGNyZWF0ZSBhbnkgbnVtYmVyIG9mIGFkdmljZSBzdGFzaGVzLCBlYWNoIG9mIHdoaWNoIGlz CisgKiBpZGVudGlmaWVkIGJ5IGEgaHVtYW4tcmVhZGFibGUsIEFTQ0lJIG5hbWUsIGFuZCBlYWNo IG9mIHRoZW0gaXMKKyAqIGVzc2VudGlhbGx5IGEgcXVlcnkgSUQgLT4gYWR2aWNlX3N0cmluZyBt YXBwaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdf c3Rhc2hfYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY29tbW9u L3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5j bHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5j bHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor I2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2gpOworUEdfRlVOQ1RJT05fSU5G T19WMShwZ19kcm9wX2FkdmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9h ZHZpY2Vfc3Rhc2hfY29udGVudHMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfYWR2aWNl X3N0YXNoZXMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zZXRfc3Rhc2hlZF9hZHZpY2UpOwor Cit0eXBlZGVmIHN0cnVjdCBwZ3NhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9jazsKKwlp bnQJCQlkc2FfdHJhbmNoZTsKKwlpbnQJCQlzdGFzaF90cmFuY2hlOworCWludAkJCWVudHJ5X3Ry YW5jaGU7CisJdWludDY0CQluZXh0X3N0YXNoX2lkOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hh c2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9o YXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaAor eworCWNoYXIJCW5hbWVbTkFNRURBVEFMRU5dOworCXVpbnQ2NAkJcGdzYV9zdGFzaF9pZDsKK30g cGdzYV9zdGFzaDsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9lbnRyeV9rZXkKK3sKKwl1aW50NjQJ CXBnc2Ffc3Rhc2hfaWQ7CisJaW50NjQJCXF1ZXJ5SWQ7Cit9IHBnc2FfZW50cnlfa2V5OworCit0 eXBlZGVmIHN0cnVjdCBwZ3NhX2VudHJ5Cit7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCWRzYV9w b2ludGVyIGFkdmljZV9zdHJpbmc7Cit9IHBnc2FfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHBn c2Ffc3Rhc2hfY291bnQKK3sKKwl1aW50MzIJCXN0YXR1czsKKwl1aW50NjQJCXBnc2Ffc3Rhc2hf aWQ7CisJaW50NjQJCW51bV9lbnRyaWVzOworfSBwZ3NhX3N0YXNoX2NvdW50OworCisjZGVmaW5l IFNIX1BSRUZJWCBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQ RSBwZ3NhX3N0YXNoX2NvdW50CisjZGVmaW5lIFNIX0tFWV9UWVBFIHVpbnQ2NAorI2RlZmluZSBT SF9LRVkgcGdzYV9zdGFzaF9pZAorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KSBoYXNoX2J5 dGVzKChjb25zdCB1bnNpZ25lZCBjaGFyICopICYoa2V5KSwgc2l6ZW9mKHVpbnQ2NCkpCisjZGVm aW5lIFNIX0VRVUFMKHRiLCBhLCBiKSAoYSA9PSBiKQorI2RlZmluZSBTSF9TQ09QRSBzdGF0aWMg aW5saW5lCisjZGVmaW5lIFNIX0RFRklORQorI2RlZmluZSBTSF9ERUNMQVJFCisjaW5jbHVkZSAi bGliL3NpbXBsZWhhc2guaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9uYW1lCit7CisJ dWludDMyCQlzdGF0dXM7CisJdWludDY0CQlwZ3NhX3N0YXNoX2lkOworCWNoYXIJICAgKm5hbWU7 Cit9IHBnc2Ffc3Rhc2hfbmFtZTsKKworI2RlZmluZSBTSF9QUkVGSVggcGdzYV9zdGFzaF9uYW1l X3RhYmxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRSBwZ3NhX3N0YXNoX25hbWUKKyNkZWZpbmUg U0hfS0VZX1RZUEUgdWludDY0CisjZGVmaW5lIFNIX0tFWSBwZ3NhX3N0YXNoX2lkCisjZGVmaW5l IFNIX0hBU0hfS0VZKHRiLCBrZXkpIGhhc2hfYnl0ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg JihrZXkpLCBzaXplb2YodWludDY0KSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIpIChhID09 IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVGSU5FCisj ZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisvKiBTaGFy ZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdzYV9zaGFyZWRfc3RhdGUgKnBnc2Ffc3Rh dGU7CitzdGF0aWMgZHNhX2FyZWEgKnBnc2FfZHNhX2FyZWE7CitzdGF0aWMgZHNoYXNoX3RhYmxl ICpwZ3NhX3N0YXNoX2RzaGFzaDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc2FfZW50cnlfZHNo YXNoOworCisvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1ldGVycyAqLworc3RhdGlj IGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CisJTkFN RURBVEFMRU4sCisJc2l6ZW9mKHBnc2Ffc3Rhc2gpLAorCWRzaGFzaF9zdHJjbXAsCisJZHNoYXNo X3N0cmhhc2gsCisJZHNoYXNoX3N0cmNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMg c2V0IGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBwZ3NhX2Vu dHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworCXNpemVvZihwZ3NhX2VudHJ5X2tleSksCisJc2l6 ZW9mKHBnc2FfZW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJZHNoYXNoX21lbWhhc2gsCisJZHNo YXNoX21lbWNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMgc2V0IGF0IHJ1bnRpbWUg Ki8KK307CisKKy8qIEdVQyB2YXJpYWJsZSAqLworc3RhdGljIGNoYXIgKnBnX3N0YXNoX2Fkdmlj ZV9zdGFzaF9uYW1lID0gIiI7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8KK3N0YXRp YyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2FkdmljZV9tY3h0OworCisvKiBGdW5jdGlvbiBwcm90 b3R5cGVzICovCitzdGF0aWMgY2hhciAqcGdzYV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LAorCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7 CitzdGF0aWMgdm9pZCBwZ3NhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2hlY2tf c3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKTsKK3N0YXRpYyBib29sIHBnc2FfY2hlY2tfc3Rh c2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJICBHdWNT b3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY3JlYXRlX3N0 YXNoKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9kcm9wX3N0YXNoKGNoYXIg KnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpw dHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgdWludDY0IHBnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIg KnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpz dGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3RyaW5n KTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0 KHZvaWQpCit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlz b3JfaG9vayBob29rKTsKKworCS8qIElmIGNvbXB1dGVfcXVlcnlfaWQgPSAnYXV0bycsIHdlIHdv dWxkIGxpa2UgcXVlcnkgSURzLiAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qIERlZmluZSBv dXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfc3Rhc2hfYWR2aWNl LnN0YXNoX25hbWUiLAorCQkJCQkJCSAgICJOYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8gYmUg dXNlZCBpbiB0aGlzIHNlc3Npb24uIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19z dGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0NfVVNF UlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnc2FfY2hlY2tfc3Rhc2hfbmFtZV9ndWMs CisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNl cnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CisKKwkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRoYXQg d2Ugd2FudCB0byBwcm92aWRlIGFkdmljZSBzdHJpbmdzLiAqLworCWFkZF9hZHZpc29yX2ZuID0K KwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9hZHZp Y2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCSgqYWRkX2Fkdmlzb3Jf Zm4pIChwZ3NhX2Fkdmlzb3IpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRv IGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vfc3Rh c2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90b19j c3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShz dGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJ CXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxlYXNl KCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FM LWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVtCitw Z19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNo X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdzYV9j aGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2Rz aGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0 YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1lKTsK KwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOwor fQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGFk dmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBm Y2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdzYV9l bnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90YWJs ZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8q IEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNo KCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAqLwor CWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRl eHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5X2Rz aGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3Ip KSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7CisK KwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJCSAg ZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYgKCFm b3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJpZXMr KzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3VsdHMu ICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRydWUp OworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkK Kwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0YXNo X2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gtPm5h bWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxl X2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJbnQ2 NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFdID0g ZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFfdGVy bSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxs YWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitEYXR1 bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJl dHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5m bzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1lID0g TlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCXVpbnQ2 NAkJc3Rhc2hfaWQgPSAwOworCXBnc2FfZW50cnkgKmVudHJ5OworCisJSW5pdE1hdGVyaWFsaXpl ZFNSRihmY2luZm8sIDApOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBp ZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9 PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qIFVzZXIgY2FuIHBhc3MgTlVMTCBmb3Ig YWxsIHN0YXNoZXMsIG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgc3Rhc2guICovCisJaWYgKCFQ R19BUkdJU05VTEwoMCkpCisJeworCQlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dF VEFSR19URVhUX1BQKDApKTsKKwkJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOwor CQlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNoX25hbWUpOworCisJCS8qIElm IHRoZSB1c2VyIHNwZWNpZmllZCBhIHN0YXNoIG5hbWUsIGl0IHNob3VsZCBleGlzdC4gKi8KKwkJ aWYgKHN0YXNoX2lkID09IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImFkdmljZSBzdGFzaCBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJfQorCWVsc2UKKwl7CisJCXBn c2Ffc3Rhc2ggKnN0YXNoOworCisJCS8qCisJCSAqIElmIHdlJ3JlIGR1bXBpbmcgZGF0YSBhYm91 dCBhbGwgc3Rhc2hlcywgd2UgbmVlZCBhbiBJRC0+bmFtZSBsb29rdXAKKwkJICogdGFibGUuCisJ CSAqLworCQluaGFzaCA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsIDY0LCBOVUxMKTsKKwkJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9z dGFzaF9kc2hhc2gsIHRydWUpOworCQl3aGlsZSAoKHN0YXNoID0gZHNoYXNoX3NlcV9uZXh0KCZp dGVyYXRvcikpICE9IE5VTEwpCisJCXsKKwkJCXBnc2Ffc3Rhc2hfbmFtZSAqbjsKKwkJCWJvb2wJ CWZvdW5kOworCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2luc2VydChuaGFzaCwKKwkJ CQkJCQkJCQkJIHN0YXNoLT5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCQkgJmZvdW5kKTsKKwkJ CUFzc2VydCghZm91bmQpOworCQkJbi0+bmFtZSA9IHBzdHJkdXAoc3Rhc2gtPm5hbWUpOworCQl9 CisJCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3IpOworCX0KKworCS8qIE5vdyBpdGVyYXRlIG92 ZXIgYWxsIHRoZSBlbnRyaWVzLiAqLworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff ZW50cnlfZHNoYXNoLCBmYWxzZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCXsKKwkJRGF0dW0JCXZhbHVlc1szXTsKKwkJYm9vbAkJbnVs bHNbM107CisJCWNoYXIJICAgKnRoaXNfc3Rhc2hfbmFtZTsKKwkJY2hhcgkgICAqYWR2aWNlX3N0 cmluZzsKKworCQkvKiBTa2lwIGluY29tcGxldGUgZW50cmllcyB3aGVyZSB0aGUgYWR2aWNlIHN0 cmluZyB3YXMgbmV2ZXIgc2V0LiAqLworCQlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCQljb250aW51ZTsKKworCQlpZiAoc3Rhc2hfaWQgIT0gMCkKKwkJ eworCQkJLyoKKwkJCSAqIFdlJ3JlIG9ubHkgZHVtcGluZyBkYXRhIGZvciBvbmUgcGFydGljdWxh ciBzdGFzaCwgc28gc2tpcAorCQkJICogZW50cmllcyBmb3IgYW55IG90aGVyIHN0YXNoIGFuZCB1 c2UgdGhlIHN0YXNoIG5hbWUgc3BlY2lmaWVkIGJ5CisJCQkgKiB0aGUgdXNlci4KKwkJCSAqLwor CQkJaWYgKHN0YXNoX2lkICE9IGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCkKKwkJCQljb250aW51 ZTsKKwkJCXRoaXNfc3Rhc2hfbmFtZSA9IHN0YXNoX25hbWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlwZ3NhX3N0YXNoX25hbWUgKm47CisKKwkJCS8qCisJCQkgKiBXZSdyZSBkdW1waW5nIGRhdGEg Zm9yIGFsbCBzdGFzaGVzLCBzbyBsb29rIHVwIHRoZSBjb3JyZWN0IG5hbWUKKwkJCSAqIHRvIHVz ZSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgbm90aGluZyBpcyBmb3VuZCwgd2hpY2ggaXMKKwkJCSAq IHBvc3NpYmxlIGR1ZSB0byByYWNlIGNvbmRpdGlvbnMsIG1ha2UgdXAgYSBzdHJpbmcgdG8gdXNl LgorCQkJICovCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2xvb2t1cChuaGFzaCwgZW50 cnktPmtleS5wZ3NhX3N0YXNoX2lkKTsKKwkJCWlmIChuICE9IE5VTEwpCisJCQkJdGhpc19zdGFz aF9uYW1lID0gbi0+bmFtZTsKKwkJCWVsc2UKKwkJCQl0aGlzX3N0YXNoX25hbWUgPSBwc3ByaW50 ZigiPHN0YXNoICUiIFBSSXU2NCAiPiIsCisJCQkJCQkJCQkJICAgZW50cnktPmtleS5wZ3NhX3N0 YXNoX2lkKTsKKwkJfQorCisJCS8qIFdvcmsgb3V0IHR1cGxlIHZhbHVlcy4gKi8KKwkJdmFsdWVz WzBdID0gQ1N0cmluZ0dldFRleHREYXR1bSh0aGlzX3N0YXNoX25hbWUpOworCQludWxsc1swXSA9 IGZhbHNlOworCQl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT5rZXkucXVlcnlJZCk7 CisJCW51bGxzWzFdID0gZmFsc2U7CisJCWFkdmljZV9zdHJpbmcgPSBkc2FfZ2V0X2FkZHJlc3Mo cGdzYV9kc2FfYXJlYSwgZW50cnktPmFkdmljZV9zdHJpbmcpOworCQl2YWx1ZXNbMl0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcpOworCQludWxsc1syXSA9IGZhbHNlOworCisJ CS8qIEVtaXQgdGhlIHR1cGxlLiAqLworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsCisJCQkJCQkJIG51bGxzKTsKKwl9CisJ ZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisv KgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHVwZGF0ZSBhbiBhZHZpY2Ugc3Rhc2ggZW50 cnkgZm9yIGEgcGFydGljdWxhcgorICogcXVlcnkgSUQKKyAqCisgKiBJZiB0aGUgc2Vjb25kIGFy Z3VtZW50IGlzIE5VTEwsIHdlIGRlbGV0ZSBhbnkgZXhpc3RpbmcgYWR2aWNlIHN0YXNoCisgKiBl bnRyeTsgb3RoZXJ3aXNlLCB3ZSBlaXRoZXIgY3JlYXRlIGFuIGVudHJ5IG9yIHVwZGF0ZSBpdCB3 aXRoIHRoZSBuZXcKKyAqIGFkdmljZSBzdHJpbmcuCisgKi8KK0RhdHVtCitwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lOworCWlu dDY0CQlxdWVyeUlkOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSB8fCBQR19BUkdJU05VTEwoMSkp CisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBHZXQgYW5kIGNoZWNrIGFkdmljZSBzdGFzaCBu YW1lLiAqLworCXN0YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAo MCkpOworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsKKworCS8qCisJICogR2V0 IGFuZCBjaGVjayBxdWVyeSBJRC4KKwkgKgorCSAqIHF1ZXJ5SUQgMCBtZWFucyBubyBxdWVyeSBJ RCB3YXMgY29tcHV0ZWQsIHNvIHJlamVjdCB0aGF0LgorCSAqLworCXF1ZXJ5SWQgPSBQR19HRVRB UkdfSU5UNjQoMSk7CisJaWYgKHF1ZXJ5SWQgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiY2Fu bm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBxdWVyeSBJRCAwIikpOworCisJLyogQXR0YWNoIHRv IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxp a2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8q IE5vdyBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBkbyB0aGUgcmVhbCB3b3JrLiAq LworCWlmIChQR19BUkdJU05VTEwoMikpCisJCXBnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhzdGFz aF9uYW1lLCBxdWVyeUlkKTsKKwllbHNlCisJeworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0g dGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDIpKTsKKworCQlwZ3NhX3NldF9hZHZp Y2Vfc3RyaW5nKHN0YXNoX25hbWUsIHF1ZXJ5SWQsIGFkdmljZV9zdHJpbmcpOworCX0KKworCVBH X1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFkdmljZSBzdHJpbmcgdGhhdCBo YXMgYmVlbiBjb25maWd1cmVkIGZvciB0aGlzIHF1ZXJ5LCBpZiBhbnksCisgKiBhbmQgcmV0dXJu IGl0LiBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqCitwZ3NhX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCisJCQkgRXhwbGFpblN0YXRlICplcykK K3sKKwlwZ3NhX2VudHJ5X2tleSBrZXk7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJY2hhcgkgICAq YWR2aWNlX3N0cmluZzsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyoKKwkgKiBFeGl0IHF1aWNr bHkgaWYgdGhlIHN0YXNoIG5hbWUgaXMgZW1wdHkgb3IgdGhlcmUncyBubyBxdWVyeSBJRC4KKwkg Ki8KKwlpZiAocGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWVbMF0gPT0gJ1wwJyB8fCBwYXJzZS0+ cXVlcnlJZCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEF0dGFjaCB0byBkeW5hbWljIHNo YXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdzYV9l bnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKgorCSAqIFRyYW5z bGF0ZSBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSB0byBhbiBpbnRlZ2VyIElELgorCSAqCisJ ICogcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YygpIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCB0aGUg YWR2aWNlIHN0YXNoCisJICogbmFtZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjYWxsIHBnc2FfY2hl Y2tfc3Rhc2hfbmFtZSgpIGhlcmUuCisJICovCisJc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFz aF9pZChwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSk7CisJaWYgKHN0YXNoX2lkID09IDApCisJ CXJldHVybiBOVUxMOworCisJLyoKKwkgKiBMb29rIHVwIHRoZSBhZHZpY2Ugc3RyaW5nIGZvciB0 aGUgZ2l2ZW4gc3Rhc2ggSUQgKyBxdWVyeSBJRC4KKwkgKgorCSAqIElmIHdlIGZpbmQgYW4gYWR2 aWNlIHN0cmluZywgd2UgY29weSBpdCBpbnRvIHRoZSBjdXJyZW50IG1lbW9yeQorCSAqIGNvbnRl eHQsIHByZXN1bWFibHkgc2hvcnQtbGl2ZWQsIHNvIHRoYXQgd2UgY2FuIHJlbGVhc2UgdGhlIGxv Y2sgb24gdGhlCisJICogZHNoYXNoIGVudHJ5LiBwZ19wbGFuX2FkdmljZSBvbmx5IG5lZWRzIHRo ZSB2YWx1ZSB0byByZW1haW4gYWxsb2NhdGVkCisJICogbG9uZyBlbm91Z2ggZm9yIGl0IHRvIGJl IHBhcnNlZCwgc28gdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCisJICovCisJbWVtc2V0KCZr ZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rh c2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBwYXJzZS0+cXVlcnlJZDsKKwllbnRyeSA9IGRzaGFzaF9m aW5kKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCBmYWxzZSk7CisJaWYgKGVudHJ5ID09IE5VTEwp CisJCXJldHVybiBOVUxMOworCWlmIChlbnRyeS0+YWR2aWNlX3N0cmluZyA9PSBJbnZhbGlkRHNh UG9pbnRlcikKKwkJYWR2aWNlX3N0cmluZyA9IE5VTEw7CisJZWxzZQorCQlhZHZpY2Vfc3RyaW5n ID0gcHN0cmR1cChkc2FfZ2V0X2FkZHJlc3MocGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJCWVu dHJ5LT5hZHZpY2Vfc3RyaW5nKSk7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX2VudHJ5X2Rz aGFzaCwgZW50cnkpOworCisJLyogSWYgd2UgZm91bmQgYW4gYWR2aWNlIHN0cmluZywgZW1pdCBh IGRlYnVnIG1lc3NhZ2UuICovCisJaWYgKGFkdmljZV9zdHJpbmcgIT0gTlVMTCkKKwkJZWxvZyhE RUJVRzIsICJzdXBwbHlpbmcgYXV0b21hdGljIGFkdmljZSBmb3Igc3Rhc2ggXCIlc1wiLCBxdWVy eSBJRCAlIiBQUklkNjQgIjogJXMiLAorCQkJIHBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lLCBr ZXkucXVlcnlJZCwgYWR2aWNlX3N0cmluZyk7CisKKwlyZXR1cm4gYWR2aWNlX3N0cmluZzsKK30K KworLyoKKyAqIEF0dGFjaCB0byB2YXJpb3VzIHN0cnVjdHVyZXMgaW4gZHluYW1pYyBzaGFyZWQg bWVtb3J5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgcmVzaWxpZW50 IGFnYWluc3QgZXJyb3JzLiBUaGF0IGlzLCBpZiBpdAorICogZmFpbHMgcGFydHdheSB0aHJvdWdo LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2FsbCBpdCBhZ2FpbiwgcmVwZWF0IG5vCisgKiB3 b3JrIGFscmVhZHkgY29tcGxldGVkLCBhbmQgcG90ZW50aWFsbHkgc3VjY2VlZCBvciBhdCBsZWFz dCBnZXQgZnVydGhlciBpZgorICogd2hhdGV2ZXIgY2F1c2VkIHRoZSBwcmV2aW91cyBmYWlsdXJl IGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfYXR0YWNoKHZvaWQp Cit7CisJYm9vbAkJZm91bmQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyoKKwkg KiBDcmVhdGUgYSBtZW1vcnkgY29udGV4dCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29udHJvbCBz dHJ1Y3R1cmVzCisJICogYWxsb2NhdGVkIGluIGxvY2FsIG1lbW9yeSBhcmUgc3VmZmljaWVudGx5 IHBlcnNpc3RlbnQuCisJICovCisJaWYgKHBnX3N0YXNoX2FkdmljZV9tY3h0ID09IE5VTEwpCisJ CXBnX3N0YXNoX2FkdmljZV9tY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkJICJwZ19zdGFzaF9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCSBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKHBnX3N0YXNoX2FkdmljZV9tY3h0KTsKKworCS8qIEF0dGFjaCB0byB0aGUgZml4ZWQtc2l6 ZSBzdGF0ZSBvYmplY3QgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9zdGF0ZSA9 PSBOVUxMKQorCQlwZ3NhX3N0YXRlID0gR2V0TmFtZWREU01TZWdtZW50KCJwZ19zdGFzaF9hZHZp Y2UiLAorCQkJCQkJCQkJCXNpemVvZihwZ3NhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJCQkJcGdz YV9pbml0X3NoYXJlZF9zdGF0ZSwKKwkJCQkJCQkJCQkmZm91bmQsIE5VTEwpOworCisJLyogQXR0 YWNoIHRvIHRoZSBEU0EgYXJlYSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmIChwZ3NhX2Rz YV9hcmVhID09IE5VTEwpCisJeworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOworCisJCUxXTG9j a0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFuZGxl ID0gcGdzYV9zdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5W QUxJRCkKKwkJeworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUocGdzYV9zdGF0ZS0+ZHNh X3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3NhX2RzYV9hcmVhKTsKKwkJCXBnc2Ffc3RhdGUtPmFy ZWEgPSBkc2FfZ2V0X2hhbmRsZShwZ3NhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnBn c2Ffc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmcGdz YV9zdGF0ZS0+bG9jayk7CisJCQlwZ3NhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRs ZSk7CisJCX0KKwkJZHNhX3Bpbl9tYXBwaW5nKHBnc2FfZHNhX2FyZWEpOworCX0KKworCS8qIEF0 dGFjaCB0byB0aGUgc3Rhc2hfbmFtZS0+c3Rhc2hfaWQgaGFzaCB0YWJsZSBpZiBub3QgYWxyZWFk eSBkb25lLiAqLworCWlmIChwZ3NhX3N0YXNoX2RzaGFzaCA9PSBOVUxMKQorCXsKKwkJZHNoYXNo X3RhYmxlX2hhbmRsZSBzdGFzaF9oYW5kbGU7CisKKwkJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0 ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycy50 cmFuY2hlX2lkID0gcGdzYV9zdGF0ZS0+c3Rhc2hfdHJhbmNoZTsKKwkJc3Rhc2hfaGFuZGxlID0g cGdzYV9zdGF0ZS0+c3Rhc2hfaGFzaDsKKwkJaWYgKHN0YXNoX2hhbmRsZSA9PSBEU0hBU0hfSEFO RExFX0lOVkFMSUQpCisJCXsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2NyZWF0ZShw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJcGdzYV9zdGF0ZS0+c3Rhc2hfaGFzaCA9CisJCQkJ ZHNoYXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShwZ3NhX3N0YXNoX2RzaGFzaCk7CisJCQlMV0xv Y2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9j a1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9zdGFzaF9kc2hhc2ggPSBkc2hh c2hfYXR0YWNoKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCSAgJnBnc2Ffc3Rhc2hfZHNoYXNo X3BhcmFtZXRlcnMsCisJCQkJCQkJCQkJCSAgc3Rhc2hfaGFuZGxlLCBOVUxMKTsKKwkJfQorCX0K KworCS8qIEF0dGFjaCB0byB0aGUgZW50cnkgaGFzaCB0YWJsZSBpZiBub3QgYWxyZWFkeSBkb25l LiAqLworCWlmIChwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKQorCXsKKwkJZHNoYXNoX3RhYmxl X2hhbmRsZSBlbnRyeV9oYW5kbGU7CisKKwkJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9j aywgTFdfRVhDTFVTSVZFKTsKKwkJcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycy50cmFuY2hl X2lkID0gcGdzYV9zdGF0ZS0+ZW50cnlfdHJhbmNoZTsKKwkJZW50cnlfaGFuZGxlID0gcGdzYV9z dGF0ZS0+ZW50cnlfaGFzaDsKKwkJaWYgKGVudHJ5X2hhbmRsZSA9PSBEU0hBU0hfSEFORExFX0lO VkFMSUQpCisJCXsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2NyZWF0ZShwZ3NhX2Rz YV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJ CQkJCQkJCQkgIE5VTEwpOworCQkJcGdzYV9zdGF0ZS0+ZW50cnlfaGFzaCA9CisJCQkJZHNoYXNo X2dldF9oYXNoX3RhYmxlX2hhbmRsZShwZ3NhX2VudHJ5X2RzaGFzaCk7CisJCQlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVh c2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9lbnRyeV9kc2hhc2ggPSBkc2hhc2hfYXR0 YWNoKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCSAgJnBnc2FfZW50cnlfZHNoYXNoX3BhcmFt ZXRlcnMsCisJCQkJCQkJCQkJCSAgZW50cnlfaGFuZGxlLCBOVUxMKTsKKwkJfQorCX0KKworCS8q IFJlc3RvcmUgcHJldmlvdXMgbWVtb3J5IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbiBhZHZpY2Ugc3Rh c2ggbmFtZSBpcyBsZWdhbCwgYW5kIHNpZ25hbCBhbiBlcnJvciBpZiBub3QuCisgKgorICogS2Vl cCB0aGlzIGluIHN5bmMgd2l0aCBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjLCBiZWxvdy4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc2FfY2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKQor eworCS8qIFJlamVjdCBlbXB0eSBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8KKwlpZiAoc3Rhc2hfbmFt ZVswXSA9PSAnXDAnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtYXkg bm90IGJlIHplcm8gbGVuZ3RoIikpOworCisJLyogUmVqZWN0IG92ZXJsb25nIGFkdmljZSBzdGFz aCBuYW1lcy4gKi8KKwlpZiAoc3RybGVuKHN0YXNoX25hbWUpICsgMSA+IE5BTUVEQVRBTEVOKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIg dGhhbiAlZCBieXRlcyIsCisJCQkJCSAgIE5BTUVEQVRBTEVOIC0gMSkpOworCisJLyoKKwkgKiBS ZWplY3Qgbm9uLUFTQ0lJIGFkdmljZSBzdGFzaCBuYW1lcywgc2luY2UgYWR2aWNlIHN0YXNoZXMg YXJlIHZpc2libGUKKwkgKiBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBhbmQgdGhlIGVuY29kaW5ncyBv ZiB0aG9zZSBkYXRhYmFzZXMgbWlnaHQgZGlmZmVyLgorCSAqLworCWlmICghcGdfaXNfYXNjaWko c3Rhc2hfbmFtZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBuYW1lIG11c3Qg bm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKSk7Cit9CisKKy8qCisgKiBBcyBhYm92 ZSwgYnV0IGZvciB0aGUgR1VDIGNoZWNrX2hvb2suIFdlIGFsbG93IHRoZSBlbXB0eSBzdHJpbmcg aGVyZSwKKyAqIHRob3VnaCwgYXMgZXF1aXZhbGVudCB0byBkaXNhYmxpbmcgdGhlIGZlYXR1cmUu CisgKi8KK3N0YXRpYyBib29sCitwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjKGNoYXIgKipuZXd2 YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwljaGFyCSAgICpzdGFzaF9u YW1lID0gKm5ld3ZhbDsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZpY2Ugc3Rhc2ggbmFtZXMu ICovCisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFUQUxFTikKKwl7CisJCUdV Q19jaGVja19lcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNf Y2hlY2tfZXJyZGV0YWlsKCJhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIgdGhh biAlZCBieXRlcyIsCisJCQkJCQkJTkFNRURBVEFMRU4gLSAxKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCS8qCisJICogUmVqZWN0IG5vbi1BU0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNl IGFkdmljZSBzdGFzaGVzIGFyZSB2aXNpYmxlCisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5k IHRoZSBlbmNvZGluZ3Mgb2YgdGhvc2UgZGF0YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlp ZiAoIXBnX2lzX2FzY2lpKHN0YXNoX25hbWUpKQorCXsKKwkJR1VDX2NoZWNrX2VycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSk7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoImFk dmljZSBzdGFzaCBuYW1lIG11c3Qgbm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRl IGFuIGFkdmljZSBzdGFzaC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY3JlYXRlX3N0YXNoKGNo YXIgKnN0YXNoX25hbWUpCit7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJYm9vbAkJZm91bmQ7CisK KwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSkpOworCisJLyogQ3JlYXRlIGEgc3Rhc2ggd2l0aCB0aGlzIG5hbWUsIHVubGVzcyBvbmUg YWxyZWFkeSBleGlzdHMuICovCisJc3Rhc2ggPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9z dGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwgc3Rhc2hfbmFt ZSkpOworCXN0YXNoLT5wZ3NhX3N0YXNoX2lkID0gcGdzYV9zdGF0ZS0+bmV4dF9zdGFzaF9pZCsr OworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9zdGFzaF9kc2hhc2gsIHN0YXNoKTsKK30KKwor LyoKKyAqIFJlbW92ZSBhbnkgc3RvcmVkIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBhZHZp Y2Ugc3Rhc2ggYW5kIHF1ZXJ5IElELgorICovCitzdGF0aWMgdm9pZAorcGdzYV9jbGVhcl9hZHZp Y2Vfc3RyaW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpCit7CisJcGdzYV9lbnRy eSAqZW50cnk7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisJZHNh X3BvaW50ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1lIHRvIGFuIGlu dGVnZXIgSUQuICovCisJaWYgKChzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNo X25hbWUpKSA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGRv ZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCisJLyoKKwkgKiBMb29rIGZvciBhbiBleGlz dGluZyBlbnRyeSwgYW5kIGZyZWUgaXQuIEJ1dCwgYmUgc3VyZSB0byBzYXZlIHRoZQorCSAqIHBv aW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQgYWR2aWNlIHN0cmluZywgaWYgYW55LgorCSAqLworCW1l bXNldCgma2V5LCAwLCBzaXplb2YocGdzYV9lbnRyeV9rZXkpKTsKKwlrZXkucGdzYV9zdGFzaF9p ZCA9IHN0YXNoX2lkOworCWtleS5xdWVyeUlkID0gcXVlcnlJZDsKKwllbnRyeSA9IGRzaGFzaF9m aW5kKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkK KwkJb2xkX2RwID0gSW52YWxpZERzYVBvaW50ZXI7CisJZWxzZQorCXsKKwkJb2xkX2RwID0gZW50 cnktPmFkdmljZV9zdHJpbmc7CisJCWRzaGFzaF9kZWxldGVfZW50cnkocGdzYV9lbnRyeV9kc2hh c2gsIGVudHJ5KTsKKwl9CisKKwkvKiBOb3cgd2UgZnJlZSB0aGUgYWR2aWNlIHN0cmluZyBhcyB3 ZWxsLCBpZiB0aGVyZSB3YXMgb25lLiAqLworCWlmIChvbGRfZHAgIT0gSW52YWxpZERzYVBvaW50 ZXIpCisJCWRzYV9mcmVlKHBnc2FfZHNhX2FyZWEsIG9sZF9kcCk7Cit9CisKKy8qCisgKiBEcm9w IGFuIGFkdmljZSBzdGFzaC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfZHJvcF9zdGFzaChjaGFy ICpzdGFzaF9uYW1lKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCXBnc2Ffc3Rhc2ggKnN0YXNo OworCWRzaGFzaF9zZXFfc3RhdHVzIGl0ZXJhdG9yOworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisKKwlB c3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lW RSkpOworCisJLyogUmVtb3ZlIHRoZSBlbnRyeSBmb3IgdGhpcyBhZHZpY2Ugc3Rhc2guICovCisJ c3Rhc2ggPSBkc2hhc2hfZmluZChwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2hfbmFtZSwgdHJ1ZSk7 CisJaWYgKHN0YXNoID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJc3Rhc2hfaWQgPSBzdGFzaC0+ cGdzYV9zdGFzaF9pZDsKKwlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2Ffc3Rhc2hfZHNoYXNoLCBz dGFzaCk7CisKKwkvKgorCSAqIE5vdyByZW1vdmUgYWxsIHRoZSBlbnRyaWVzLiBTaW5jZSBwZ3Nh X3N0YXRlLT5sb2NrIG11c3QgYmUgaGVsZCBhdAorCSAqIGxlYXN0IGluIHNoYXJlZCBtb2RlIHRv IGluc2VydCBlbnRyaWVzIGludG8gcGdzYV9lbnRyeV9kc2hhc2gsIGl0CisJICogZG9lc24ndCBt YXR0ZXIgd2hldGhlciB3ZSBkbyB0aGlzIGJlZm9yZSBvciBhZnRlciBkZWxldGluZyB0aGUgZW50 cnkKKwkgKiBmcm9tIHBnc2Ffc3Rhc2hfZHNoYXNoLgorCSAqLworCWRzaGFzaF9zZXFfaW5pdCgm aXRlcmF0b3IsIHBnc2FfZW50cnlfZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNo YXNoX3NlcV9uZXh0KCZpdGVyYXRvcikpICE9IE5VTEwpCisJeworCQlpZiAoc3Rhc2hfaWQgPT0g ZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkKQorCQl7CisJCQlpZiAoZW50cnktPmFkdmljZV9zdHJp bmcgIT0gSW52YWxpZERzYVBvaW50ZXIpCisJCQkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgZW50 cnktPmFkdmljZV9zdHJpbmcpOworCQkJZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZpdGVyYXRvcik7 CisJCX0KKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7Cit9CisKKy8qCisgKiBJbml0 aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3NhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBnc2Ff c2hhcmVkX3N0YXRlICpzdGF0ZSA9IChwZ3NhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xv Y2tJbml0aWFsaXplKCZzdGF0ZS0+bG9jaywKKwkJCQkJIExXTG9ja05ld1RyYW5jaGVJZCgicGdf c3Rhc2hfYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdMb2NrTmV3VHJh bmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfZHNhIik7CisJc3RhdGUtPnN0YXNoX3RyYW5jaGUgPSBM V0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9zdGFzaCIpOworCXN0YXRlLT5lbnRy eV90cmFuY2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfZW50cnkiKTsK KwlzdGF0ZS0+bmV4dF9zdGFzaF9pZCA9IFVJTlQ2NENPTlNUKDEpOworCXN0YXRlLT5hcmVhID0g RFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zdGFzaF9oYXNoID0gRFNIQVNIX0hBTkRMRV9J TlZBTElEOworCXN0YXRlLT5lbnRyeV9oYXNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworfQor CisvKgorICogTG9vayB1cCB0aGUgaW50ZWdlciBJRCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBn aXZlbiBzdGFzaCBuYW1lLgorICoKKyAqIFJldHVybnMgMCBpZiBubyBzdWNoIHN0YXNoIGV4aXN0 cy4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hf bmFtZSkKK3sKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyog U2VhcmNoIHRoZSBzaGFyZWQgaGFzaCB0YWJsZS4gKi8KKwlzdGFzaCA9IGRzaGFzaF9maW5kKHBn c2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1lLCBmYWxzZSk7CisJaWYgKHN0YXNoID09IE5VTEwp CisJCXJldHVybiAwOworCXN0YXNoX2lkID0gc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNo X3JlbGVhc2VfbG9jayhwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJcmV0dXJuIHN0YXNo X2lkOworfQorCisvKgorICogU3RvcmUgYSBuZXcgb3IgdXBkYXRlZCBhZHZpY2Ugc3RyaW5nIGZv ciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFuZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQK K3Bnc2Ffc2V0X2FkdmljZV9zdHJpbmcoY2hhciAqc3Rhc2hfbmFtZSwgaW50NjQgcXVlcnlJZCwg Y2hhciAqYWR2aWNlX3N0cmluZykKK3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlib29sCQlmb3Vu ZDsKKwlwZ3NhX2VudHJ5X2tleSBrZXk7CisJdWludDY0CQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRl ciBuZXdfZHA7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJLyoKKwkgKiBUaGUgd29yayB3ZSBu ZWVkIHRvIGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IHNpbXBsZSwgYnV0IHRoZQor CSAqIGRhbmdlciBvZiBhIHNlcnZlci1saWZlc3BhbiBEU0EgbWVtb3J5IGxlYWsgaXMgdmVyeSBy ZWFsLiBBY3F1aXJpbmcgYQorCSAqIGxvY2sgaGVyZSBoZWxwcyBmb3IgdHdvIHJlYXNvbnMuCisJ ICoKKwkgKiBGaXJzdCwgaXQgaG9sZHMgb2ZmIGludGVycnVwdHMsIHNvIHRoYXQgd2UgY2FuJ3Qg YmFpbCBvdXQgb2YgdGhpcyBjb2RlCisJICogYWZ0ZXIgYWxsb2NhdGluZyBEU0EgbWVtb3J5IGZv ciB0aGUgYWR2aWNlIHN0cmluZyBhbmQgYmVmb3JlIHN0b3JpbmcKKwkgKiB0aGUgcmVzdWx0aW5n IHBvaW50ZXIgc29tZXdoZXJlIHRoYXQgb3RoZXJzIGNhbiBmaW5kIGl0LgorCSAqCisJICogU2Vj b25kLCB3ZSBuZWVkIHRvIGF2b2lkIGEgcmFjZSBhZ2FpbnN0IHBnc2FfZHJvcF9zdGFzaCgpLiBU aGF0CisJICogZnVuY3Rpb24gcmVtb3ZlcyBhIHN0YXNoX25hbWUtPnN0YXNoX2lkIG1hcHBpbmcg YW5kIGFsbCB0aGUgZW50cmllcyBmb3IKKwkgKiB0aGF0IHN0YXNoX2lkLiBXaXRob3V0IHRoZSBs b2NrLCB0aGVyZSdzIGEgcmFjZSBjb25kaXRpb24gbm8gbWF0dGVyCisJICogd2hpY2ggb2YgdGhv c2UgdGhpbmdzIGl0IGRvZXMgZmlyc3QsIGJlY2F1c2UgYXMgc29vbiBhcyB3ZSd2ZSBsb29rZWQg dXAKKwkgKiB0aGUgc3Rhc2ggSUQsIHRoYXQgd2hvbGUgZnVuY3Rpb24gY2FuIGV4ZWN1dGUgYmVm b3JlIHdlIGRvIHRoZSByZXN0IG9mCisJICogb3VyIHdvcmssIHdoaWNoIHdvdWxkIHJlc3VsdCBp biB1cyBhZGRpbmcgYW4gZW50cnkgZm9yIGEgc3Rhc2ggdGhhdCBubworCSAqIGxvbmdlciBleGlz dHMuCisJICovCisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsK KworCS8qIExvb2sgdXAgdGhlIHN0YXNoIElELiAqLworCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xv b2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIEFs bG9jYXRlIHNwYWNlIGZvciB0aGUgYWR2aWNlIHN0cmluZy4gKi8KKwluZXdfZHAgPSBkc2FfYWxs b2NhdGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMSk7CisJc3RyY3B5 KGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZpY2Vfc3RyaW5nKTsK KworCS8qIEF0dGVtcHQgdG8gaW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIGhhc2ggdGFibGUuICov CisJbWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0 YXNoX2lkID0gc3Rhc2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNo YXNoX2ZpbmRfb3JfaW5zZXJ0X2V4dGVuZGVkKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCAmZm91 bmQsCisJCQkJCQkJCQkJICAgRFNIQVNIX0lOU0VSVF9OT19PT00pOworCisJLyoKKwkgKiBJZiBp dCBkaWRuJ3Qgd29yaywgYmFpbCBvdXQsIGJlaW5nIGNhcmVmdWwgdG8gZnJlZSB0aGUgc2hhcmVk IG1lbW9yeQorCSAqIHdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGJlZm9yZSB0aHJvd2luZyBhbiBl cnJvciwgc2luY2UgZXJyb3IgY2xlYW51cAorCSAqIHdpbGwgbm90IGRvIHNvLgorCSAqLworCWlm IChlbnRyeSA9PSBOVUxMKQorCXsKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgbmV3X2RwKTsK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJ CQkJZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJZXJyZGV0YWlsKCJjb3VsZCBub3QgaW5z ZXJ0IGFkdmljZSBzdHJpbmcgaW50byBzaGFyZWQgaGFzaCB0YWJsZSIpKTsKKwl9CisKKwkvKiBV cGRhdGUgdGhlIGVudHJ5IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAqLworCW9sZF9kcCA9IGZvdW5k ID8gZW50cnktPmFkdmljZV9zdHJpbmcgOiBJbnZhbGlkRHNhUG9pbnRlcjsKKwllbnRyeS0+YWR2 aWNlX3N0cmluZyA9IG5ld19kcDsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNo YXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBzYWZlIGZyb20gbGVha3MgeWV0IQor CSAqCisJICogVGhlcmUncyBub3cgYSBwb2ludGVyIHRvIG5ld19kcCBpbiB0aGUgZW50cnkgdGhh dCB3ZSBqdXN0IHVwZGF0ZWQsIGJ1dAorCSAqIHRoYXQgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIGxv bmdlciBhbnl0aGluZyBwb2ludGluZyB0byBvbGRfZHAuIEZyZWUgaXQKKwkgKiBmaXJzdCwgYW5k IHRoZW4gd2UgY2FuIHJlbGVhc2Ugb3VyIGxhc3QgTFdMb2NrLCBhbGxvd2luZyBpbnRlcnJ1cHRz LgorCSAqLworCWlmIChEc2FQb2ludGVySXNWYWxpZChvbGRfZHApKQorCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBvbGRfZHApOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNv bnRyb2wgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29udHJvbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGEwZmZmNWM4NjYKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfc3Rhc2hfYWR2aWNlIGV4dGVuc2lvbgorY29tbWVu dCA9ICdzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScKK2RlZmF1bHRf dmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19zdGFzaF9hZHZp Y2UnCityZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Fs L3BnX3N0YXNoX2FkdmljZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjNmNmJmYjgzMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZp Y2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKQEAgLTAsMCArMSwxNDcgQEAKK0NSRUFURSBFWFRF TlNJT04gcGdfc3Rhc2hfYWR2aWNlOworU0VUIGNvbXB1dGVfcXVlcnlfaWQgPSBvbjsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworLS0gSGVscGVyOiBleHRyYWN0 IHF1ZXJ5IGlkZW50aWZpZXIgZnJvbSBFWFBMQUlOIFZFUkJPU0Ugb3V0cHV0LgorQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3F1ZXJ5X2lkKHF1ZXJ5X3RleHQgdGV4dCkgUkVUVVJOUyBi aWdpbnQKK0xBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0RFQ0xBUkUKKyAgICBsaW5lIHRleHQ7Cisg ICAgcWlkIGJpZ2ludDsKK0JFR0lOCisgICAgRk9SIGxpbmUgSU4gRVhFQ1VURSAnRVhQTEFJTiAo VkVSQk9TRSwgRk9STUFUIFRFWFQpICcgfHwgcXVlcnlfdGV4dAorICAgIExPT1AKKyAgICAgICAg SUYgbGluZSB+ICdRdWVyeSBJZGVudGlmaWVyOicgVEhFTgorICAgICAgICAgICAgcWlkIDo9IHJl Z2V4cF9yZXBsYWNlKGxpbmUsICcuKlF1ZXJ5IElkZW50aWZpZXI6XHMqKC0/XGQrKS4qJywgJ1wx Jyk6OmJpZ2ludDsKKyAgICAgICAgICAgIFJFVFVSTiBxaWQ7CisgICAgICAgIEVORCBJRjsKKyAg ICBFTkQgTE9PUDsKKyAgICBSQUlTRSBFWENFUFRJT04gJ1F1ZXJ5IElkZW50aWZpZXIgbm90IGZv dW5kIGluIEVYUExBSU4gb3V0cHV0JzsKK0VORDsKKyQkOworCitDUkVBVEUgVEFCTEUgYWFfZGlt MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChpZCwgZGlt MSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9k aW0xOworCitDUkVBVEUgVEFCTEUgYWFfZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt MiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBhYV9kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmls bGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMjsKKworQ1JFQVRFIFRBQkxFIGFhX2ZhY3Qg KAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJl bmNlcyBhYV9kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg YWFfZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGFhX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9mYWN0OworCistLSBH ZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxFQ1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1Qg KiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFpZCBcZ3NldAorCistLSBDcmVhdGUgYW4gYWR2 aWNlIHN0YXNoIGFuZCBwb2ludCBwZ19zdGFzaF9hZHZpY2UgYXQgaXQuCitTRUxFQ1QgcGdfY3Jl YXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5z dGFzaF9uYW1lID0gJ3JlZ3Jlc3Nfc3Rhc2gnOworCistLSBSdW4gb3VyIHRlc3QgcXVlcnkgZm9y IHRoZSBmaXJzdCB0aW1lIHdpdGggbm8gc3Rhc2hlZCBhZHZpY2UuCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBpbmRleCBzY2Fu IG9uIGRpbTEKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6 J3FpZCcsCisJJ0lOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KScpOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGFuIGFsdGVybmF0 aXZlIGpvaW4gb3JkZXIKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rh c2gnLCA6J3FpZCcsCisJJ2pvaW5fb3JkZXIoZiBkMSBkMiknKTsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2 ZSBqb2luIHN0cmF0ZWd5CitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0 YXNoJywgOidxaWQnLAorCSdORVNURURfTE9PUF9QTEFJTihkMSknKTsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQy LmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBBZGQgYSB1c2VsZXNzIGV4 dHJhIGVudHJ5IHRvIG91ciB0ZXN0IHN0YXNoLiBTaG91bGRuJ3QgY2hhbmdlIHRoZSByZXN1bHQK Ky0tIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCistLSAoSWYgd2UncmUgdW5sdWNreSBlbm91Z2gg dGhhdCB0aGlzIGV2ZXIgZmFpbHMgZHVlIHRvIHF1ZXJ5IElEIGFjdHVhbGx5CistLSBiZWluZyAx LCB0aGVuIGp1c3QgcHV0IHNvbWUgb3RoZXIgY29uc3RhbnQgaGVyZS4gU2VlbXMgdW5saWtlbHku KQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDEsICdTRVFf U0NBTihkMSknKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYK KwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBh YV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworCistLSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcK K1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFh X2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBm LmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gVGVz dCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rhc2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2YgdGhl bSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBub25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsKK1NFTEVDVCBz dGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRl bnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFt ZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3Jl Z3Jlc3NfZW1wdHlfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKK1NFTEVDVCBzdGFzaF9uYW1l LCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhOVUxM KSBPUkRFUiBCWSBxdWVyeV9pZDsKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJ IEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygnbm9fc3VjaF9zdGFzaCcpIE9SREVS IEJZIHF1ZXJ5X2lkOworCistLSBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSBhZHZpY2UuCitTRUxF Q1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLCBudWxsKTsK K1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VMRUNUICogRlJP TSBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBzdGFzaF9uYW1lOworU0VMRUNUIHN0 YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVu dHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gQ2FuJ3QgY3JlYXRl IGEgc3Rhc2ggdGhhdCBhbHJlYWR5IGV4aXN0cywgb3IgZHJvcCBvbmUgdGhhdCBkb2Vzbid0Lgor U0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFTEVDVCBw Z19kcm9wX2FkdmljZV9zdGFzaCgnbm9fc3VjaF9zdGFzaCcpOworCistLSBDYW4ndCBhZGQgdG8g b3IgcmVtb3ZlIGZyb20gYSBzdGFzaCB0aGF0IGRvZXMgbm90IGV4aXN0LgorU0VMRUNUIHBnX3Nl dF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFzaCcsIDEsICdTRVFfU0NBTih0KScpOworU0VM RUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFzaCcsIDEsIG51bGwpOworCist LSBDYW4ndCB1c2UgcXVlcnkgSUQgMC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3Jl Z3Jlc3Nfc3Rhc2gnLCAwLCAnU0VRX1NDQU4odCknKTsKKworLS0gU3Rhc2ggbmFtZXMgbXVzdCBi ZSBub24tZW1wdHksIEFTQ0lJLCBhbmQgbm90IHRvbyBsb25nLgorU0VMRUNUIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2goJycpOworU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ2FhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEn KTsKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKEUnY2FmXHUwMGU5Jyk7CitTRVQgcGdf c3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnY2Fmw6knOworCistLSBDbGVhbiB1cCBzdGF0ZSBp biBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3Jl Z3Jlc3Nfc3Rhc2gnKTsKK1NFTEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0 eV9zdGFzaCcpOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCBiL2RvYy9z cmMvc2dtbC9jb250cmliLnNnbWwKaW5kZXggMmFiNmZhZmJhYjEuLjhmMDlkNzI4Njk4IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb250 cmliLnNnbWwKQEAgLTE2MCw2ICsxNjAsNyBAQCBDUkVBVEUgRVhURU5TSU9OIDxyZXBsYWNlYWJs ZT5leHRlbnNpb25fbmFtZTwvcmVwbGFjZWFibGU+OwogICZwZ3BsYW5hZHZpY2U7CiAgJnBncHJl d2FybTsKICAmcGdyb3dsb2NrczsKKyAmcGdzdGFzaGFkdmljZTsKICAmcGdzdGF0c3RhdGVtZW50 czsKICAmcGdzdGF0dHVwbGU7CiAgJnBnc3VyZ2VyeTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggNDA3ZmYz YWJmZmUuLjhjMTRiYWI4NGU5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ0LDYgKzE0NCw3IEBACiA8 IUVOVElUWSBvaWQybmFtZSAgICAgICAgU1lTVEVNICJvaWQybmFtZS5zZ21sIj4KIDwhRU5USVRZ IHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkgcGFz c3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KKzwhRU5USVRZIHBnc3Rh c2hhZHZpY2UgICBTWVNURU0gInBnc3Rhc2hhZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ2J1ZmZl cmNhY2hlICAgU1lTVEVNICJwZ2J1ZmZlcmNhY2hlLnNnbWwiPgogPCFFTlRJVFkgcGdjb2xsZWN0 YWR2aWNlIFNZU1RFTSAicGdjb2xsZWN0YWR2aWNlLnNnbWwiPgogPCFFTlRJVFkgcGdjcnlwdG8g ICAgICAgIFNZU1RFTSAicGdjcnlwdG8uc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cGdzdGFzaGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDg5ZmM2NjQ0NmYKLS0tIC9kZXYv bnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCkBAIC0wLDAgKzEsMjE4 IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBp ZD0icGdzdGFzaGFkdmljZSIgeHJlZmxhYmVsPSJwZ19zdGFzaF9hZHZpY2UiPgorIDx0aXRsZT5w Z19zdGFzaF9hZHZpY2UgJm1kYXNoOyBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFu IGFkdmljZTwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBnc3Rhc2hhZHZpY2UiPgorICA8 cHJpbWFyeT5wZ19zdGFzaF9hZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cGFy YT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19zdGFzaF9hZHZpY2U8L2ZpbGVuYW1lPiBleHRlbnNpb24g YWxsb3dzIHlvdSB0byBzdGFzaAorICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiPnBsYW4g YWR2aWNlPC9saW5rPiBzdHJpbmdzIGluIGR5bmFtaWMKKyAgc2hhcmVkIG1lbW9yeSB3aGVyZSB0 aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFwcGxpZWQuIEFuCisgIDxsaXRlcmFsPmFkdmljZSBz dGFzaDwvbGl0ZXJhbD4gaXMgYSBtYXBwaW5nIGZyb20KKyAgPGxpbmsgbGlua2VuZD0iZ3VjLWNv bXB1dGUtcXVlcnktaWQiPnF1ZXJ5IGlkZW50aWZpZXJzPC9saW5rPiB0byBwbGFuIGFkdmljZQor ICBzdHJpbmdzLiBXaGVuZXZlciBhIHNlc3Npb24gaXMgYXNrZWQgdG8gcGxhbiBhIHF1ZXJ5IHdo b3NlIHF1ZXJ5IElEIGFwcGVhcnMKKyAgaW4gdGhlIHJlbGV2YW50IGFkdmljZSBzdGFzaCwgdGhl IHBsYW4gYWR2aWNlIHN0cmluZyBpcyBhdXRvbWF0aWNhbGx5IGFwcGxpZWQKKyAgdG8gZ3VpZGUg cGxhbm5pbmcuIE5vdGUgdGhhdCBhZHZpY2Ugc3Rhc2hlcyBleGlzdCBwdXJlbHkgaW4gbWVtb3J5 LiBUaGlzCisgIG1lYW5zIGJvdGggdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgbWluZGZ1bCBv ZiBtZW1vcnkgY29uc3VtcHRpb24gd2hlbgorICBkZWNpZGluZyBob3cgbXVjaCBwbGFuIGFkdmlj ZSB0byBzdGFzaCwgYW5kIGFsc28gdGhhdCBhZHZpY2Ugc3Rhc2hlcyBtdXN0CisgIGJlIHJlY3Jl YXRlZCBhbmQgcmVwb3B1bGF0ZWQgd2hlbmV2ZXIgdGhlIHNlcnZlciBpcyByZXN0YXJ0ZWQuCisg PC9wYXJhPgorCisgPHBhcmE+CisgIEluIG9yZGVyIHRvIHVzZSB0aGlzIG1vZHVsZSwgeW91IHdp bGwgbmVlZCB0byBleGVjdXRlCisgIDxsaXRlcmFsPkNSRUFURSBFWFRFTlNJT04gcGdfc3Rhc2hf YWR2aWNlPC9saXRlcmFsPiBpbiBhdCBsZWFzdAorICBvbmUgZGF0YWJhc2UsIHNvIHRoYXQgeW91 IGhhdmUgYWNjZXNzIHRvIHRoZSBTUUwgZnVuY3Rpb25zIHRvIG1hbmFnZQorICBhZHZpY2Ugc3Rh c2hlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRoZSA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xp dGVyYWw+CisgIG1vZHVsZSB0byBiZSBsb2FkZWQgaW4gYWxsIHNlc3Npb25zIHdoZXJlIHlvdSB3 YW50IHRoaXMgbW9kdWxlIHRvCisgIGF1dG9tYXRpY2FsbHkgYXBwbHkgYWR2aWNlLiBJdCB3aWxs IHVzdWFsbHkgYmUgYmVzdCB0byBkbyB0aGlzIGJ5IGFkZGluZworICA8bGl0ZXJhbD5wZ19zdGFz aF9hZHZpY2U8L2xpdGVyYWw+IHRvCisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9h ZC1saWJyYXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcgdGhlIHNlcnZlci4KKyA8L3BhcmE+CisKKyA8 cGFyYT4KKyAgT25jZSB5b3UgaGF2ZSBtZXQgdGhlIGFib3ZlIGNyaXRlcmlhLCB5b3UgY2FuIGNy ZWF0ZSBhZHZpY2Ugc3Rhc2hlcworICB1c2luZyB0aGUgPGxpdGVyYWw+cGdfY3JlYXRlX2Fkdmlj ZV9zdGFzaDwvbGl0ZXJhbD4gZnVuY3Rpb24gZGVzY3JpYmVkCisgIGJlbG93IGFuZCBzZXQgdGhl IHBsYW4gYWR2aWNlIGZvciBhIGdpdmVuIHF1ZXJ5IElEIGluIGEgZ2l2ZW4gc3Rhc2ggdXNpbmcK KyAgdGhlIDxsaXRlcmFsPnBnX3NldF9zdGFzaGVkX2FkdmljZTwvbGl0ZXJhbD4gZnVuY3Rpb24u IFRoZW4sIHlvdSBuZWVkCisgIG9ubHkgY29uZmlndXJlIDxsaXRlcmFsPnBnX3N0YXNoX2Fkdmlj ZS5zdGFzaF9uYW1lPC9saXRlcmFsPiB0byBwb2ludAorICB0byB0aGUgY2hvc2VuIGFkdmljZSBz dGFzaCBuYW1lLiBGb3Igc29tZSB1c2UgY2FzZXMsIHJhdGhlciB0aGFuIHNldHRpbmcKKyAgdGhp cyBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCB5b3UgbWF5IGZpbmQgaXQgaGVscGZ1bCB0byB1c2UK KyAgPGxpdGVyYWw+QUxURVIgREFUQUJBU0UgLi4uIFNFVDwvbGl0ZXJhbD4gb3IKKyAgPGxpdGVy YWw+QUxURVIgUk9MRSAuLi4gU0VUPC9saXRlcmFsPiB0byBjb25maWd1cmUgdmFsdWVzIHRoYXQg d2lsbCBhcHBseQorICBvbmx5IHRvIGEgZGF0YWJhc2Ugb3Igb25seSB0byBhIGNlcnRhaW4gcm9s ZS4gTGlrZXdpc2UsIGl0IG1heSBzb21ldGltZXMKKyAgYmUgYmV0dGVyIHRvIHNldCB0aGUgc3Rh c2ggbmFtZSBpbiBhIHBhcnRpY3VsYXIgc2Vzc2lvbiB1c2luZworICA8bGl0ZXJhbD5TRVQ8L2xp dGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBCZWNhdXNlIDxsaXRlcmFsPnBnX3N0YXNo X2FkdmljZTwvbGl0ZXJhbD4gd29ya3Mgb24gdGhlIGJhc2lzIG9mIHF1ZXJ5CisgIGlkZW50aWZp ZXJzLCB5b3Ugd2lsbCBuZWVkIHRvIGRldGVybWluZSB0aGUgcXVlcnkgaWRlbnRpZmllciBmb3Ig ZWFjaCBxdWVyeQorICB3aG9zZSBwbGFuIHlvdSB3aXNoIHRvIGNvbnRyb2wuIFlvdSB3aWxsIGFs c28gbmVlZCB0byBkZXRlcm1pbmUgdGhlIGFkdmljZQorICBzdHJpbmcgdGhhdCB5b3Ugd2lzaCB0 byBzdG9yZSBmb3IgZWFjaCBxdWVyeS4gT25lIHdheSB0byBkbyB0aGlzIGlzIHRvIHVzZQorICA8 bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjogdGhlIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+ IG9wdGlvbiB3aWxsCisgIHNob3cgdGhlIHF1ZXJ5IElELCBhbmQgdGhlIDxsaXRlcmFsPlBMQU5f QURWSUNFPC9saXRlcmFsPiBvcHRpb24gd2lsbAorICBzaG93IHBsYW4gYWR2aWNlLiA8eHJlZiBs aW5rZW5kPSJwZ2NvbGxlY3RhZHZpY2UiIC8+IGNhbiBiZSB1c2VkIHRvCisgIG9idGFpbiB0aGlz IGluZm9ybWF0aW9uIGZvciBhbiBlbnRpcmUgd29ya2xvYWQsIGFsdGhvdWdoIGNhcmUgbXVzdCBi ZQorICB0YWtlbiBzaW5jZSBpdCBjYW4gdXNlIHVwIGEgbG90IG9mIG1lbW9yeSB2ZXJ5IHF1aWNr bHkuIFF1ZXJ5IGlkZW50aWZpZXJzIGNhbgorICBhbHNvIGJlIG9idGFpbmVkIHRocm91Z2ggdG9v bHMgc3VjaCBhcyA8eHJlZiBsaW5rZW5kPSJwZ3N0YXRzdGF0ZW1lbnRzIiAvPgorICBvciA8eHJl ZiBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtYWN0aXZpdHktdmlldyIgLz4sIGJ1dCB0aGVz ZSB0b29scworICB3aWxsIG5vdCBwcm92aWRlIHBsYW4gYWR2aWNlIHN0cmluZ3MuIE5vdGUgdGhh dAorICA8eHJlZiBsaW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCIgLz4gbXVzdCBiZSBlbmFi bGVkIGZvciBxdWVyeQorICBpZGVudGlmaWVycyB0byBiZSBjb21wdXRlZDsgaWYgc2V0IHRvIDxs aXRlcmFsPmF1dG88L2xpdGVyYWw+LCBsb2FkaW5nCisgIDxsaXRlcmFsPnBnX3N0YXNoX2Fkdmlj ZTwvbGl0ZXJhbD4gd2lsbCBlbmFibGUgaXQgYXV0b21hdGljYWxseS4KKyA8L3BhcmE+CisKKyA8 cGFyYT4KKyAgR2VuZXJhbGx5LCB0aGUgZmFjdCB0aGF0IHRoZSBwbGFubmVyIGlzIGFibGUgdG8g Y2hhbmdlIHF1ZXJ5IHBsYW5zIGFzCisgIHRoZSB1bmRlcmx5aW5nIGRpc3RyaWJ1dGlvbiBvZiBk YXRhIGNoYW5nZXMgaXMgYSBmZWF0dXJlLCBub3QgYSBidWcuCisgIE1vcmVvdmVyLCBhcHBseWlu ZyBwbGFuIGFkdmljZSBjYW4gaGF2ZSBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgY29zdCBldmVu CisgIHdoZW4gaXQgZG9lcyBub3QgcmVzdWx0IGluIGEgY2hhbmdlIHRvIHRoZSBxdWVyeSBwbGFu LiBUaGVyZWZvcmUsIGl0IGlzCisgIGEgZ29vZCBpZGVhIHRvIHVzZSB0aGlzIGZlYXR1cmUgb25s eSB3aGVuIGFuZCB0byB0aGUgZXh0ZW50IG5lZWRlZC4KKyAgUGxhbiBhZHZpY2Ugc3RyaW5ncyBj YW4gYmUgdHJpbW1lZCBkb3duIHRvIG1lbnRpb24gb25seSB0aG9zZSBhc3BlY3RzCisgIG9mIHRo ZSBwbGFuIHRoYXQgbmVlZCB0byBiZSBjb250cm9sbGVkLCBhbmQgdXNlZCBvbmx5IGZvciBxdWVy aWVzIHdoZXJlCisgIHRoZXJlIGlzIGJlbGlldmVkIHRvIGJlIGEgc2lnbmlmaWNhbnQgcmlzayBv ZiBwbGFubmVyIGVycm9yLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBOb3RlIHRoYXQgPGxpdGVy YWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiBjdXJyZW50bHkgbGFja3MgYSBzb3BoaXN0aWNh dGVkCisgIHNlY3VyaXR5IG1vZGVsLiBPbmx5IHRoZSBzdXBlcnVzZXIsIG9yIGEgdXNlciB0byB3 aG9tIHRoZSBzdXBlcnVzZXIgaGFzCisgIGdyYW50ZWQgPGxpdGVyYWw+RVhFQ1VURTwvbGl0ZXJh bD4gcGVybWlzc2lvbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLAorICBtYXkgY3JlYXRlIGFk dmljZSBzdGFzaGVzIG9yIGFsdGVyIHRoZWlyIGNvbnRlbnRzLCBidXQgYW55IHVzZXIgbWF5IHNl dAorICA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZTwvbGl0ZXJhbD4gZm9yIHRo ZWlyIHNlc3Npb24sIGFuZCB0aGlzCisgIG1heSByZXZlYWwgdGhlIGNvbnRlbnRzIG9mIGFueSBh ZHZpY2Ugc3Rhc2ggd2l0aCB0aGF0IG5hbWUuIFVzZXJzIHNob3VsZAorICBhc3N1bWUgdGhhdCBp bmZvcm1hdGlvbiBlbWJlZGRlZCBpbiBzdGFzaGVkIGFkdmljZSBzdHJpbmdzIG1heSBiZWNvbWUg dmlzaWJsZQorICB0byBub25wcml2aWxlZ2VkIHVzZXJzLgorIDwvcGFyYT4KKworIDxzZWN0MiBp ZD0icGdzdGFzaGFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4K KworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8ZnVuY3Rpb24+cGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1lIHRleHQpIHJldHVy bnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19j cmVhdGVfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgQ3JlYXRlcyBhIG5ldywg ZW1wdHkgYWR2aWNlIHN0YXNoIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19kcm9wX2FkdmljZV9zdGFzaChzdGFzaF9uYW1l IHRleHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT5wZ19kcm9wX2FkdmljZV9zdGFzaDwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIERyb3Bz IHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2ggYW5kIGFsbCBvZiBpdHMgZW50cmllcy4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX3NldF9zdGFzaGVkX2FkdmljZShz dGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwKKyAgICAgICBhZHZpY2Vfc3RyaW5nIHRl eHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJp bWFyeT5wZ19zZXRfc3Rhc2hlZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTdG9yZXMg YW4gYWR2aWNlIHN0cmluZyBpbiB0aGUgbmFtZWQgYWR2aWNlIHN0YXNoLCBhc3NvY2lhdGVkIHdp dGgKKyAgICAgIHRoZSBnaXZlbiBxdWVyeSBpZGVudGlmaWVyLiBJZiBhbiBlbnRyeSBmb3IgdGhh dCBxdWVyeSBpZGVudGlmaWVyCisgICAgICBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3Rhc2gsIGl0 IGlzIHJlcGxhY2VkLiBJZgorICAgICAgPHBhcmFtZXRlcj5hZHZpY2Vfc3RyaW5nPC9wYXJhbWV0 ZXI+IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LAorICAgICAgYW55IGV4aXN0aW5nIGVudHJ5 IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIgaXMgcmVtb3ZlZC4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIHJldHVybnMg c2V0b2YgKHN0YXNoX25hbWUgdGV4dCwKKyAgICAgICBudW1fZW50cmllcyBiaWdpbnQpPC9mdW5j dGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZpY2Vfc3Rh c2hlczwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgb25lIHJvdyBmb3IgZWFjaCBhZHZp Y2Ugc3Rhc2gsIHNob3dpbmcgdGhlIHN0YXNoIG5hbWUgYW5kCisgICAgICB0aGUgbnVtYmVyIG9m IGVudHJpZXMgaXQgY29udGFpbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxm dW5jdGlvbj5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKHN0YXNoX25hbWUgdGV4dCkgcmV0 dXJucyBzZXRvZgorICAgICAgIChzdGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwgYWR2 aWNlX3N0cmluZyB0ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJp bWFyeT5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg UmV0dXJucyBvbmUgcm93IGZvciBlYWNoIGVudHJ5IGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2gu IElmCisgICAgICA8cGFyYW1ldGVyPnN0YXNoX25hbWU8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4sIHJldHVybnMKKyAgICAgIGVudHJpZXMgZnJvbSBhbGwgc3Rhc2hlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8 L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnc3Rhc2hhZHZpY2Ut Y29uZmlnLXBhcmFtcyI+CisgIDx0aXRsZT5Db25maWd1cmF0aW9uIFBhcmFtZXRlcnM8L3RpdGxl PgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDx2YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiAoPHR5cGU+ c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l PnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFt ZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYWR2 aWNlIHN0YXNoIHRvIGNvbnN1bHQgZHVyaW5nIHF1ZXJ5CisgICAgICBwbGFubmluZy4gVGhlIGRl ZmF1bHQgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggZGlzYWJsZXMKKyAgICAgIHRo aXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdz dGFzaGFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4K KyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwv cGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCBkNDFkYmJmYTgwMS4uZThiOTcyYjM5N2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC00MDU2LDYgKzQwNTYsMTIgQEAgcGdwYV90cm92ZV9sb29rdXBfdHlwZQogcGdwYV90cm92ZV9y ZXN1bHQKIHBncGFfdHJvdmVfc2xpY2UKIHBncGFfdW5yb2xsZWRfam9pbgorcGdzYV9lbnRyeQor cGdzYV9lbnRyeV9rZXkKK3Bnc2Ffc2hhcmVkX3N0YXRlCitwZ3NhX3N0YXNoCitwZ3NhX3N0YXNo X2NvdW50CitwZ3NhX3N0YXNoX25hbWUKIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50 cnkKLS0gCjIuNTEuMAoK --0000000000002cd4f4064df09aff--