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 1vTiIy-008iQX-10 for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 15:10:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTiIv-00480z-2j for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Dec 2025 15:10:06 +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 1vTiIv-00480q-0F for pgsql-hackers@lists.postgresql.org; Thu, 11 Dec 2025 15:10:06 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vTiIs-000BP0-16 for pgsql-hackers@lists.postgresql.org; Thu, 11 Dec 2025 15:10:05 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b79af62d36bso41533566b.3 for ; Thu, 11 Dec 2025 07:10:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765465801; x=1766070601; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=AUUqU2/RyJ7gNGTRosoeMQRd1yQPJmfO5W7ZsOtmZ1k=; b=XrWTROScMttNaduibwJjLW4yZd63QnLozVAuetDWtFlnA26l0+SqoeG6DcdyKUtloF 12va96PnNVphasIVx0nsHcVHzJ8cusa3nJ7kCyFLXzNAPovT0tYsM8sW1DNI5oaPNMS5 8mqJXRNOHpoyHegDonoUJBh6mDmCrs31JzrqFokwiVLLdPRKvvPaIUcUmy2S6N7eDti4 bx02GtTClbRLSXAh6TrT20KbjRf3QFRp+QanlNC7YC4eLTQ3KrJSZon20OySy2QBiqfS YF+vqSL+qqxlN741SXM1qOMq2zGmal0QoHsDIR2BTu6D7kdWTTbkILoOH4AwlHm3zq/L SsuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765465801; x=1766070601; h=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=AUUqU2/RyJ7gNGTRosoeMQRd1yQPJmfO5W7ZsOtmZ1k=; b=AaApDhKIZdXeBf4zW+9VSBiSBfI0wAPo0yU2ekDnZ43WxvESIfzOMweJNzKNh9H+P+ p7AoPFyjLVWMbLSJCN5U2Yub7PzXG1aXFT4h35eYRF/vYE5GsawOQGwqinyiyu42kxcO ySUGFnqqB2eDex145ux7BgT6BM7+mWXpzx32ML2VYeOoywHpPDjyV6QVoUs0V1IJRqnd y2H965fQM1njsi50fIUA8+fvjoOzIuZmsv4wUYVj7C0El63VZJKnI8U4XaeR5jiPTbrK Be4/z6HzpOye6pp+6PcycqNiQotOolkn8gnQ+z3B3GfTWDEzpZ2jU7MkQNf0ROb/hZrn R++A== X-Gm-Message-State: AOJu0YzaLakIhMYETe0PHR8Lnn5HqmxYHRqa0O7mn3jWhso4ApY17ymb D0TNWmv9C/7YocQvs55SrlVaaRRVNhABAbFe/YrpJqpSUBAYeBpkeQIkZc/Gld0SBDcy+s3lBVB G7U4BCBWFOsiJDOOLrwG/0CxrF/+zzT8/LoYx X-Gm-Gg: AY/fxX5WrLRxHX6Hjwa4eajUjlTer5oaQzZ8LnskR4w8uFz/TrOm9LloT95dDh3BC8K b7ubsne+EbUdIz/fmnZfvUa1S4WDmlZ3zj/hNevDLIPizaZnbX44Mo3GlT1bBGxF5FFQ0QZ9yOz PVXbsMlEliZUnT6cpz/AkvybxJsc5Y3SF3sefS6H7dhT6C5p9llK18HETka1qPXb7u+fO/XYxSm ErrmvsiEW1/srKkLgIMPkGIcU8ERm6E4ltqcYka9VByB9eJpVNYXnL/AdmtUvgZm4ZeGKWDLmdz w1LRc0q/pwkmEfGn1XUiX53SqI8= X-Google-Smtp-Source: AGHT+IFYBZ0WsMiDXRoxQXZ7qPHAlIt7DEEUYHkOHbqoHsHs/+RAo/NNpw2iFKlcgSfEnuZi13CqtPQyNfktv/8/6L8= X-Received: by 2002:a17:907:7ea8:b0:b77:1166:7d63 with SMTP id a640c23a62f3a-b7ce841c50bmr746199566b.40.1765465800750; Thu, 11 Dec 2025 07:10:00 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Thu, 11 Dec 2025 10:09:47 -0500 X-Gm-Features: AQt7F2oO64-ElsNVLKGCE7YGCgDGhf6fqr8TOpagIC3Aom67BHm51SkvfVwiURA Message-ID: Subject: Re: pg_plan_advice To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000eaf7e10645ae89c3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eaf7e10645ae89c3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 5, 2025 at 2:57=E2=80=AFPM Robert Haas = wrote: > 014f9a831a320666bf2195949f41710f970c54ad removes the need for what was > previously 0004, so here is a new patch series with that dropped, to > avoid confusing cfbot or human reviewers. Here's v6, with minor improvements over v5. 0001: Unchanged. 0002, 0003: Unchanged except for typo fixes pointed out by reviewers. 0004: I've improved the hook placement, which was previously such as to make correct unique-semijoin handling impossible, and I improved the associated comment about how to use the hook, based on experience trying to actually do so. 0005: Fixed a small bug related to unique-semijoin handling (other problems remain). Tidied things up to avoid producing non-actionable NO_GATHER() advice in a number of cases, per some off-list feedback from Ajaykumar Pal. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000eaf7e10645ae89c3 Content-Type: application/octet-stream; name="v6-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v6-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj1kqjjk1 RnJvbSA4MDk4YTBmMWQ4MzhhZjIwM2FiOWM4ZmRiNjNhODE2YTYzODdlZGIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY2IDIv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCAxYzRjNzk2YWRiMi4uZTU0ZjhjZmMzMzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDMxZGNiZGYz NDIyLi5kZjlkMDNkNTQ5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBlZGNkNGFhYTUzZS4uNDA3ZWMzOWI2M2IgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNzaW5nLCBmb3IgdGhlIGJl bmVmaXQgb2YgY29kZSB0cnlpbmcgdG8gcmVjb25zdHJ1Y3QgcGxhbm5lciBkZWNpc2lvbnMKKyAq IGZyb20gZXhhbWluYXRpb24gb2YgdGhlIGZpbmFsIHBsYW4gdHJlZS4KKyAqLworc3RhdGljIHZv aWQKK3JlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFsICpnbG9iLCBpbnQgcGxhbl9ub2Rl X2lkLAorCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUsIEJpdG1hcHNldCAqcmVsaWRzKQorewor CUVsaWRlZE5vZGUgKm4gPSBtYWtlTm9kZShFbGlkZWROb2RlKTsKKworCW4tPnBsYW5fbm9kZV9p ZCA9IHBsYW5fbm9kZV9pZDsKKwluLT5lbGlkZWRfdHlwZSA9IGVsaWRlZF90eXBlOworCW4tPnJl bGlkcyA9IHJlbGlkczsKKworCWdsb2ItPmVsaWRlZE5vZGVzID0gbGFwcGVuZChnbG9iLT5lbGlk ZWROb2Rlcywgbik7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDM3ODJiYzY0MDc1Li40MmMx NDZkODAyYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE1OSw2ICsxNTksOSBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogdHlwZSBPSURzIGZvciBQQVJBTV9FWEVDIFBhcmFt cyAqLwogCUxpc3QJICAgKnBhcmFtRXhlY1R5cGVzOwogCisJLyogaW5mbyBhYm91dCBub2RlcyBl bGlkZWQgZnJvbSB0aGUgcGxhbiBkdXJpbmcgc2V0cmVmcyBwcm9jZXNzaW5nICovCisJTGlzdAkg ICAqZWxpZGVkTm9kZXM7CisKIAkvKiBoaWdoZXN0IFBsYWNlSG9sZGVyVmFyIElEIGFzc2lnbmVk ICovCiAJSW5kZXgJCWxhc3RQSElkOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDE1MjZkZDJl YzZiLi41ZDA1MjBkNWU1OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTE1Miw2ICsxNTIsOSBA QCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCS8qIG5vbi1udWxsIGlmIHRoaXMgaXMgdXRp bGl0eSBzdG10ICovCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CiAKKwkvKiBpbmZvIGFib3V0IG5v ZGVzIGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlM aXN0CSAgICplbGlkZWROb2RlczsKKwogCS8qCiAJICogRGVmRWxlbSBvYmplY3RzIGFkZGVkIGJ5 IGV4dGVuc2lvbnMsIGUuZy4gdXNpbmcgcGxhbm5lcl9zaHV0ZG93bl9ob29rCiAJICoKQEAgLTE4 MzgsNCArMTg0MSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBTdWJQbGFuUlRJbmZvCiAJYm9vbAkJZHVt bXk7CiB9IFN1YlBsYW5SVEluZm87CiAKKy8qCisgKiBFbGlkZWROb2RlCisgKgorICogSW5mb3Jt YXRpb24gYWJvdXQgbm9kZXMgZWxpZGVkIGZyb20gdGhlIGZpbmFsIHBsYW4gdHJlZTogdHJpdmlh bCBzdWJxdWVyeQorICogc2NhbnMsIGFuZCBzaW5nbGUtY2hpbGQgQXBwZW5kIGFuZCBNZXJnZUFw cGVuZCBub2Rlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRWxpZGVkTm9kZQoreworCU5vZGVUYWcJ CXR5cGU7CisJaW50CQkJcGxhbl9ub2RlX2lkOworCU5vZGVUYWcJCWVsaWRlZF90eXBlOworCUJp dG1hcHNldCAgKnJlbGlkczsKK30gRWxpZGVkTm9kZTsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5O T0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDAyNWJiYTg3ODM0Li44YjMw MGFlODIzMyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTcwMSw2ICs3MDEsNyBAQCBF YWNoU3RhdGUKIEVkZ2UKIEVkaXRhYmxlT2JqZWN0VHlwZQogRWxlbWVudHNTdGF0ZQorRWxpZGVk Tm9kZQogRW5hYmxlVGltZW91dFBhcmFtcwogRW5kRGF0YVB0clR5cGUKIEVuZERpcmVjdE1vZGlm eV9mdW5jdGlvbgotLSAKMi41MS4wCgo= --000000000000eaf7e10645ae89c3 Content-Type: application/octet-stream; name="v6-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v6-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj1kqjjn3 RnJvbSBkNDVjYjQ5ZDJmM2M3ZDUzOGFkOTQ3YWVhMTIwZTc1ODcxOTQyZGFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY2IDQv NV0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg5ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgNTQgKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgfCAgNDMgKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICA4MiArKysrKysrKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0 LmggICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAg fCAgIDkgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDQ1NSBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5MjhiOGQ4NGFk OC4uOGU5ZGRlM2QxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt OTU0LDcgKzk1NCw3IEBAIHNldF90YWJsZXNhbXBsZV9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqCiAJCSBibXNfbWVtYmVyc2hp cChyb290LT5hbGxfcXVlcnlfcmVscykgIT0gQk1TX1NJTkdMRVRPTikgJiYKIAkJIShHZXRUc21S b3V0aW5lKHJ0ZS0+dGFibGVzYW1wbGUtPnRzbWhhbmRsZXIpLT5yZXBlYXRhYmxlX2Fjcm9zc19z Y2FucykpCiAJewotCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBw YXRoKTsKKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgcGF0aCwg dHJ1ZSk7CiAJfQogCiAJYWRkX3BhdGgocmVsLCBwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IGEzOWNjNzkzYjRkLi41MTk0MGFlYzgyMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAgY29zdF9zZXFzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1NFUVNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0zMjcsOCArMzI4LDExIEBAIGNvc3Rfc2Vxc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJICovCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX3NlcXNjYW4g PyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1 X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKIH0KQEAgLTM1NCw2ICszNTgsNyBAQCBjb3N0X3Nh bXBsZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJc3BjX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNl IHJlbGF0aW9ucyB3aXRoIHRhYmxlc2FtcGxlIGNsYXVzZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+ cmVsaWQgPiAwKTsKQEAgLTQwMSw3ICs0MDYsMTEgQEAgY29zdF9zYW1wbGVzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0 LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJf dHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFy dHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29z dCArIHJ1bl9jb3N0OwogfQpAQCAtNDQwLDcgKzQ0OSw4IEBAIGNvc3RfZ2F0aGVyKEdhdGhlclBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9z ZXR1cF9jb3N0OwogCXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRo LnJvd3M7CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgt PmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYgUEdTX0dBVEhFUikgIT0gMCA/ IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QpOwogfQpAQCAtNTA2 LDggKzUxNiw4IEBAIGNvc3RfZ2F0aGVyX21lcmdlKEdhdGhlck1lcmdlUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3NldHVwX2Nvc3Q7CiAJ cnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgucm93cyAqIDEuMDU7 CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMKLQkJ KyAoZW5hYmxlX2dhdGhlcm1lcmdlID8gMCA6IDEpOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9k ZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAm IFBHU19HQVRIRVJfTUVSR0UpICE9IDAgPyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+cGF0aC50b3Rh bF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdCk7CiB9 CkBAIC01NTcsNiArNTY3LDcgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LCBkb3VibGUgbG9vcF9jb3VudCwKIAlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAJ ZG91YmxlCQlyYW5kX2hlYXBfcGFnZXM7CiAJZG91YmxlCQlpbmRleF9wYWdlczsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0 aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5mbykgJiYKQEAgLTU4OCw4ICs1 OTksMTEgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJICBwYXRoLT5pbmRleGNsYXVzZXMpOwogCX0K IAotCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZW5hYmxlX2luZGV4b25seXNjYW47IGluZHhw YXRoLmMgZG9lcyB0aGF0ICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9p bmRleHNjYW4gPyAwIDogMTsKKwkvKiBpcyB0aGlzIHNjYW4gdHlwZSBkaXNhYmxlZD8gKi8KKwll bmFibGVfbWFzayA9IChpbmRleG9ubHkgPyBQR1NfSU5ERVhPTkxZU0NBTiA6IFBHU19JTkRFWFND QU4pCisJCXwgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwID8gUEdTX0NPTlNJREVS X05PTlBBUlRJQUwgOiAwKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAKIAkv KgogCSAqIENhbGwgaW5kZXgtYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBjb2RlIHRvIGVzdGltYXRl IHRoZSBwcm9jZXNzaW5nIGNvc3QKQEAgLTEwMTAsNiArMTAyNCw3IEBAIGNvc3RfYml0bWFwX2hl YXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJl bCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9jb3N0LAogCQkJCXNwY19yYW5kb21fcGFnZV9jb3N0 OwogCWRvdWJsZQkJVDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0JJVE1BUFNDQU47CiAK IAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0 KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSk7CkBAIC0xMDc1LDYgKzEwOTAsOCBAQCBjb3N0X2Jp dG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmJhc2VyZWwsCiAKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCiAKIAlydW5fY29zdCArPSBjcHVfcnVuX2Nvc3Q7CkBAIC0xMDgzLDcg KzExMDAsOCBAQCBjb3N0X2JpdG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0 LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJs ZV9iaXRtYXBzY2FuID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTI0MCw2ICsxMjU4LDcgQEAgY29zdF90aWRzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnR1cGxlczsKIAlMaXN0 Q2VsbCAgICpsOwogCWRvdWJsZQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFi bGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xMjYxLDEwICsxMjgwLDEw IEBAIGNvc3RfdGlkc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkvKgog CQkgKiBXZSBtdXN0IHVzZSBhIFRJRCBzY2FuIGZvciBDdXJyZW50T2ZFeHByOyBpbiBhbnkgb3Ro ZXIgY2FzZSwgd2UKLQkJICogc2hvdWxkIGJlIGdlbmVyYXRpbmcgYSBUSUQgc2NhbiBvbmx5IGlm IGVuYWJsZV90aWRzY2FuPXRydWUuIEFsc28sCi0JCSAqIGlmIEN1cnJlbnRPZkV4cHIgaXMgdGhl IHF1YWwsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZS4KKwkJICogc2hvdWxkIGJlIGdlbmVyYXRp bmcgYSBUSUQgc2NhbiBvbmx5IGlmIFRJRCBzY2FucyBhcmUgYWxsb3dlZC4KKwkJICogQWxzbywg aWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgog CQkgKi8KLQkJQXNzZXJ0KGVuYWJsZV90aWRzY2FuIHx8IElzQShxdWFsLCBDdXJyZW50T2ZFeHBy KSk7CisJCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikgIT0gMCB8fCBJ c0EocXVhbCwgQ3VycmVudE9mRXhwcikpOwogCQlBc3NlcnQobGlzdF9sZW5ndGgodGlkcXVhbHMp ID09IDEgfHwgIUlzQShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAKIAkJaWYgKElzQShxdWFsLCBT Y2FsYXJBcnJheU9wRXhwcikpCkBAIC0xMzE2LDEwICsxMzM1LDE0IEBAIGNvc3RfdGlkc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogVGhlcmUgYXJlIGFzc2Vy dGlvbnMgYWJvdmUgdmVyaWZ5aW5nIHRoYXQgd2Ugb25seSByZWFjaCB0aGlzIGZ1bmN0aW9uCi0J ICogZWl0aGVyIHdoZW4gZW5hYmxlX3RpZHNjYW49dHJ1ZSBvciB3aGVuIHRoZSBUSUQgc2NhbiBp cyB0aGUgb25seSBsZWdhbAotCSAqIHBhdGgsIHNvIGl0J3Mgc2FmZSB0byBzZXQgZGlzYWJsZWRf bm9kZXMgdG8gemVybyBoZXJlLgorCSAqIGVpdGhlciB3aGVuIGJhc2VyZWwtPnBnc19tYXNrIGlu Y2x1ZGVzIFBHU19USURTQ0FOIG9yIHdoZW4gdGhlIFRJRCBzY2FuCisJICogaXMgdGhlIG9ubHkg bGVnYWwgcGF0aCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3RzIG9mCisJ ICogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZS4KIAkgKi8KLQlwYXRoLT5kaXNhYmxlZF9u b2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21h c2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQor CQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29z dCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTM1MCw2ICsxMzczLDcgQEAgY29z dF90aWRyYW5nZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlu c2VxcGFnZXM7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCXNwY19z ZXFfcGFnZV9jb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfVElEU0NBTjsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0MjgsOCArMTQ1MiwxNSBAQCBjb3N0X3RpZHJhbmdlc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jv d19lc3QocGF0aC0+cm93cyAvIHBhcmFsbGVsX2Rpdmlzb3IpOwogCX0KIAotCS8qIHdlIHNob3Vs ZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfdGlkc2Nhbj1mYWxzZSAq LwotCUFzc2VydChlbmFibGVfdGlkc2Nhbik7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGdlbmVy YXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gUEdTX1RJRFNDQU4gaXMgdW5zZXQsIGJ1dCB3ZQorCSAq IG1pZ2h0IG5lZWQgdG8gZGlzYWJsZSB0aGlzIHBhdGggZHVlIHRvIFBHU19DT05TSURFUl9OT05Q QVJUSUFMLgorCSAqLworCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikg IT0gMCk7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVfcnVuX2Nvc3Qg KyBkaXNrX3J1bl9jb3N0OwpAQCAtMTQ1Myw2ICsxNDg0LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4o U3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdAkgICAqcXBx dWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBi YXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJl bGlkID4gMCk7CkBAIC0xNDgzLDcgKzE1MTUsMTAgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVl cnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogU3VicXVlcnlTY2FuIG5v ZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3VudCBmb3Igc2VsZWN0aW9uIGFuZAogCSAq IHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9 IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOworCWlmIChwYXRoLT5wYXRoLnBhcmFsbGVs X3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7 CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25v ZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21h c2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+ c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxfY29zdCA9IHBhdGgtPnN1YnBhdGgtPnRv dGFsX2Nvc3Q7CiAKQEAgLTE1MzQsNiArMTU2OSw3IEBAIGNvc3RfZnVuY3Rpb25zY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VU YmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sg PSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0 IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE1NzQs NyArMTYxMCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNTk2LDYgKzE2MzUsNyBAQCBjb3N0X3RhYmxlZnVuY3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7 CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBT aG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9u cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTYzMSw3ICsxNjcxLDEwIEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNjUxLDYgKzE2 OTQsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIHZhbHVlcyBsaXN0cyAqLwogCUFz c2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY3OSw3ICsxNzIzLDEwIEBAIGNvc3RfdmFs dWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0g cGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzAyLDYgKzE3NDksNyBAQCBjb3N0 X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3Qg PSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJh c2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAw KTsKQEAgLTE3MjcsNyArMTc3NSwxMCBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Quc3Rh cnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBsZSAqIHBh dGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc0NCw2ICsxNzk1LDcgQEAgY29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29z dAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21h c2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0 aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAt MTc2NSw3ICsxODE3LDEwIEBAIGNvc3RfbmFtZWR0dXBsZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxlICs9IGNwdV90dXBsZV9jb3N0ICsgcXBx dWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVs LT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc4Miw2ICsxODM3LDcgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxf Y29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwog CiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBSVEVfUkVTVUxUIGJhc2UgcmVsYXRpb25z ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xODAwLDcgKzE4NTYsMTAgQEAg Y29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWNwdV9wZXJf dHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9jb3N0LnBlcl90dXBsZTsKIAlydW5fY29z dCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRf bm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9t YXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0K KwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6 IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE4MTgsNiArMTg3Nyw3IEBAIGNv c3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVy bSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJdG90YWxfY29zdDsKIAlkb3VibGUJCXRv dGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBo YXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24tcmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFy dHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsKQEAgLTE4NDAsNyArMTkwMCwxMCBAQCBj b3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24sIFBhdGggKm5ydGVybSwgUGF0aCAqcnRl cm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAK LQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJtLT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJt LT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJ CWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJs ZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9 IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nv c3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxfY29zdDsKIAlydW5pb24tPnJvd3MgPSB0 b3RhbF9yb3dzOwpAQCAtMjExMCw3ICsyMTczLDExIEBAIGNvc3RfaW5jcmVtZW50YWxfc29ydChQ YXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0X3R1cGxlczsKIAotCS8qIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFibGVfaW5jcmVtZW50YWxfc29ydD1mYWxz ZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVu YWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAqIFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2YW50LAorCSAqIGl0IHdp bGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgorCSAqLwogCUFzc2VydChl bmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9k aXNhYmxlZF9ub2RlczsKIApAQCAtMjE0OCw2ICsyMjE1LDEwIEBAIGNvc3Rfc29ydChQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0dXBfY29zdCArPSBpbnB1dF9jb3N0Owog CisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGhlcmUsIGJl Y2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3Rl ZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCXBhdGgtPmRp c2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDog MSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwpAQCAtMjIzOSw5ICsyMzEw LDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlzdCAqc3VicGF0aHMsIGludCBudW1wYXRo cywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBjb3N0X2FwcGVuZChBcHBlbmRQYXRoICph cGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVsT3B0SW5mbyAqcmVsID0gYXBhdGgtPnBh dGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19B UFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAotCWFwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJYXBhdGgtPnBh dGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0 aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0NTEsMTEgKzI1MjgsMTYgQEAgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCSAgZG91YmxlIHR1cGxlcykKIHsK KwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0g MDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJY29tcGFyaXNvbl9jb3N0OwogCWRvdWJs ZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19NRVJHRV9B UFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAogCS8qCiAJICogQXZvaWQgbG9nKDApLi4u CkBAIC0yNDc4LDcgKzI1NjAsOSBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIEFQUEVO RF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwt PnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0y NDk3LDcgKzI1ODEsNyBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5m byAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJICBpbnQg aW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2Fi bGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpCiB7CkBAIC0yNTA2LDYgKzI1 OTAsMTEgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAogCWRvdWJsZQkJbmJ5dGVzID0gcmVs YXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwogCWRvdWJsZQkJd29ya19tZW1fYnl0ZXMg PSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMg PT0gMCAmJgorCQlwYXRoLT5wYXJlbnQgIT0gTlVMTCAmJgorCQkocGF0aC0+cGFyZW50LT5wZ3Nf bWFzayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9PSAwKQorCQllbmFibGVkID0gZmFsc2U7 CisKIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoKQEAgLTI1MzUsNyArMjYyNCw3IEBAIGNv c3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5w YWdlczsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVz ICsgKGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlu cHV0X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTMyODcsNyArMzM3Niw3IEBAIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFu bmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9t YXNrLAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCSAg Sm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAtMzMwMSw3ICszMzkwLDcgQEAgaW5pdGlh bF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29y a3NwYWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5fY29zdDsKIAogCS8qIENvdW50IHVwIGRp c2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX25lc3Rsb29wID8gMCA6 IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09 IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlz YWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9k ZXM7CiAKQEAgLTM3MDEsNyArMzc5MCwxOSBAQCBpbml0aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5u ZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUFzc2VydChvdXRl cnN0YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3NlcnQoaW5uZXJzdGFydHNlbCA8PSBpbm5l cmVuZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9tZXJnZWpvaW4gPyAwIDogMTsK KwkvKgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVyIHRvIG1hdGVyaWFsaXplIHRoZSBpbm5l ciBwYXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdl IGRvbid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUgcGdzX21hc2sKKwkgKiBhZ2FpbiBQR1Nf TUVSR0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUuIEluc3RlYWQsIHdl CisJICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQgbm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRo YXQgdGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBkaXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0 IHRoZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCkuCisJICoKKwkgKiAoV2UgY291 bGQgYmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGluZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0 IHRoaXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJHRUpPSU5fUExBSU4gYW5kIFBHU19NRVJH RUpPSU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJsZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFn YWluc3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVp Y2ssIG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0aGUgZmluYWwgY29zdC4pCisJICovCisJ ZGlzYWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBvZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0z ODgwLDkgKzM5ODEsNyBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vqb2ludHVwbGVzLAogCQkJCXJlc2Nhbm5l ZHR1cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2Yg ZGlzYWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdv cmtzcGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkv KiBQcm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCByb3djb3VudHMgYXJlbid0IHpl cm8gKi8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCkBAIC00MDEyLDE2ICs0MTExLDIwIEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKIAkvKgotCSAqIFByZWZlciBt YXRlcmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIsIHVubGVzcyB0aGUgdXNlciBoYXMgYXNr ZWQgdG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRpb24uCisJICogSWYgbWVyZ2Ugam9pbnMg d2l0aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQsIHRoZW4gY2hvb3NlCisJICogbWF0ZXJp YWxpemF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3MgY2hlYXBlciBvciAoYikgbWVyZ2Ugam9p bnMKKwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBhcmUgZGlzYWJsZWQuCiAJICovCi0JZWxz ZSBpZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0 KQorCWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpF KSAhPSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0IHx8CisJCQkg IChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+ bWF0ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoKLQkgKiBFdmVuIGlmIG1hdGVyaWFsaXpp bmcgZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5l ciBwYXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgc29ydGluZykgYW5kIGl0IGRv ZXNuJ3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQg cGxhbiBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBi ZSwgd2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRoZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVz ZWQgZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0 IG1hcmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJICogaXMgbm90IGFuIG9wdGlvbiEKIAkg KgogCSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgb3JkZXJlZCwgYW5kIG9ubHkgU29y dHMgYW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRlIG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFu ZCB0aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUsIHlvdQpAQCAtNDAyOSwxMCArNDEzMiw2 IEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBh dGgsCiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlu cHV0cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3RlZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJn ZWpvaW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkgKiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2Vu dC4KLQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZhbHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBo ZXJlLCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0 bmVzcyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0JICogaXQgb2ZmIGRvZXMgbm90IGVudGl0 bGUgdXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4uCiAJICovCiAJZWxzZSBpZiAoaW5uZXJz b3J0a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0 aCkpCkBAIC00MDQ2LDEwICs0MTQ1LDExIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogdGhvdWdoLgogCSAqCiAJICogU2luY2Ug bWF0ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoaXMgY2Fz ZSwKLQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0 IGlmIGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4KKwkgKiByYXRoZXIgdGhhbiBuZWNlc3Nh cnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIG1hdGVyaWFsaXphdGlvbiBpcworCSAq IHN3aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJz b3J0a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdF Sk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlubmVyc29ydGtleXMgIT0gTklMICYmCiAJ CQkgcmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhfcm93cywKIAkJCQkJCQkJaW5uZXJfcGF0 aC0+cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3JrX21lbSAqIChTaXplKSAxMDI0KQpAQCAt NDA1NywxMSArNDE1NywyOSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9v dCwgTWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBm YWxzZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29zdCBmb3IgdGhlIGNo b3NlbiBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5 ZXQgaW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9k ZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJp Z2h0IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAq IGVuYWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAqLwogCWlmIChwYXRoLT5tYXRlcmlhbGl6 ZV9pbm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9pbm5lcl9jb3N0OworCQllbmFibGVfbWFz ayB8PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCX0KIAllbHNlCisJewogCQlydW5fY29z dCArPSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExB SU47CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhp cyBub2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dv cmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ aWYgKChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spCisJCSsr cGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsKIAogCS8qIENQVSBjb3N0cyAqLwogCkBA IC00MTk5LDkgKzQzMTcsMTMgQEAgaW5pdGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpy b290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCWludAkJCW51bWJhdGNoZXM7CiAJ aW50CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNwYWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAq LworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFTSEpPSU47CisKKwlpZiAob3V0ZXJfcGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVk X25vZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0 cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlz YWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9k ZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCmluZGV4IDVkNGY4MWVlNzdlLi44OTIyYjY4MDMzYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMyLDggKzIyMzIsOCBAQCBjaGVja19pbmRl eF9vbmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJbmZvICppbmRleCkKIAlMaXN0Q2VsbCAg ICpsYzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25seSBzY2FucyBtdXN0IGJlIGVuYWJsZWQg Ki8KLQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQorCS8qIElmIHdlJ3JlIG5vdCBhbGxvd2Vk IHRvIGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdpdmUgdXAgbm93ICovCisJaWYgKChyZWwt PnBnc19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05MWSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNl OwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRo LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGVhNWI2NDE1 MTg2Li44MmRhYjNkNjAwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBA IC0yOSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBp biBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQg Y29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9pbl9wYXRobGlzdF9o b29rX3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7Citqb2luX3BhdGhfc2V0dXBf aG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0gTlVMTDsKIAogLyoKICAqIFBhdGhzIHBh cmFtZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFt ZXRlcml6ZWQKQEAgLTE1MSw2ICsxNTIsMzMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5l ckluZm8gKnJvb3QsCiAJZXh0cmEubWVyZ2VjbGF1c2VfbGlzdCA9IE5JTDsKIAlleHRyYS5zamlu Zm8gPSBzamluZm87CiAJZXh0cmEucGFyYW1fc291cmNlX3JlbHMgPSBOVUxMOworCWV4dHJhLnBn c19tYXNrID0gam9pbnJlbC0+cGdzX21hc2s7CisKKwkvKgorCSAqIEdpdmUgZXh0ZW5zaW9ucyBh IGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIEluIHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lvbgorCSAq IG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJhLnBnc19tYXNrLiBJdCdzIHBvc3NpYmxlIHRvIG92 ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBxdWVyeS13aWRlIGJhc2lzIHVzaW5nIGpvaW5fc2Vh cmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3VsYXIKKwkgKiByZWxhdGlvbiB1c2luZyBqb2lucmVs X3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25zIHRoYXQgd2FudCB0byBwcm92aWRlCisJICogZGlm ZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUgam9pbnJlbCBiYXNlZCBvbiB0aGUgY2hvaWNlIG9m IGlubmVycmVsCisJICogYW5kIG91dGVycmVsIHdpbGwgbmVlZCB0byB1c2UgdGhpcyBob29rLgor CSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkgZm9yIGFuIGV4dGVuc2lvbiB0byB1c2UgdGhpcyBo b29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBnc19tYXNrICY9IH5QR1NfSk9JTl9BTlksIGlmIGl0 IHNpbXBseSBkb2Vzbid0IHdhbnQgYW55IG9mIHRoZQorCSAqIHBhdGhzIGdlbmVyYXRlZCBieSB0 aGlzIGNhbGwgdG8gYWRkX3BhdGhzX3RvX2pvaW5yZWwoKSB0byBiZSBzZWxlY3RlZC4KKwkgKiBB biBleHRlbnNpb24gY291bGQgdXNlIHRoaXMgdGVjaG5pcXVlIHRvIGNvbnN0cmFpbiB0aGUgam9p biBvcmRlciwKKwkgKiBzaW5jZSBpdCBjb3VsZCB0aGVyZWJ5IGFycmFuZ2UgdG8gcmVqZWN0IGFs bCBwYXRocyBmcm9tIGpvaW4gb3JkZXJzCisJICogdGhhdCBpdCBkb2VzIG5vdCBsaWtlLiBBbiBl eHRlbnNpb24gY2FuIGFsc28gc2VsZWN0aXZlbHkgY2xlYXIgYml0cworCSAqIGZyb20gZXh0cmEu cGdzX21hc2sgdG8gcnVsZSBvdXQgc3BlY2lmaWMgdGVjaG5pcXVlcyBmb3Igc3BlY2lmaWMgam9p bnMsCisJICogb3IgY291bGQgZXZlbiBzZXQgYWRkaXRpb25hbCBiaXRzIHRvIHJlLWFsbG93IG1l dGhvZHMgZGlzYWJsZWQgYXQgc29tZQorCSAqIGhpZ2hlciBsZXZlbC4KKwkgKgorCSAqIE5COiBC ZWxvdyB0aGlzIHBvaW50LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYXJlZnVsIHRvIHJlZmVy ZW5jZQorCSAqIGV4dHJhLnBnc19tYXNrIHJhdGhlciB0aGFuIHJlbC0+cGdzX21hc2sgdG8gYXZv aWQgZGlzcmVnYXJkaW5nIGFueQorCSAqIGNoYW5nZXMgbWFkZSBieSB0aGUgaG9vayB3ZSdyZSBh Ym91dCB0byBjYWxsLgorCSAqLworCWlmIChqb2luX3BhdGhfc2V0dXBfaG9vaykKKwkJam9pbl9w YXRoX3NldHVwX2hvb2socm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJ CSBqb2ludHlwZSwgJmV4dHJhKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBpbm5lciByZWxhdGlv biBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRoaXMgb3V0ZXIgcmVsLgpAQCAtMjEwLDEwICsyMzgs MTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJLyoKIAkgKiBG aW5kIHBvdGVudGlhbCBtZXJnZWpvaW4gY2xhdXNlcy4gIFdlIGNhbiBza2lwIHRoaXMgaWYgd2Ug YXJlIG5vdAogCSAqIGludGVyZXN0ZWQgaW4gZG9pbmcgYSBtZXJnZWpvaW4uICBIb3dldmVyLCBt ZXJnZWpvaW4gbWF5IGJlIG91ciBvbmx5Ci0JICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwg b3V0ZXIgam9pbiwgc28gb3ZlcnJpZGUgZW5hYmxlX21lcmdlam9pbiBpZgotCSAqIGl0J3MgYSBm dWxsIGpvaW4uCisJICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwgb3V0ZXIgam9pbiwgc28g aW4gdGhhdCBjYXNlIHdlIGRvbid0IGNhcmUKKwkgKiB3aGV0aGVyIG1lcmdlam9pbnMgYXJlIGRp c2FibGVkLgogCSAqLwotCWlmIChlbmFibGVfbWVyZ2Vqb2luIHx8IGpvaW50eXBlID09IEpPSU5f RlVMTCkKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX01FUkdFSk9JTl9BTlkpICE9IDAgfHwg am9pbnR5cGUgPT0gSk9JTl9GVUxMKQogCQlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gc2VsZWN0 X21lcmdlam9pbl9jbGF1c2VzKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgam9pbnJlbCwKIAkJCQkJ CQkJCQkJCQkJICBvdXRlcnJlbCwKQEAgLTMyMSwxMCArMzQ5LDEwIEBAIGFkZF9wYXRoc190b19q b2lucmVsKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiA0LiBDb25zaWRlciBwYXRocyB3 aGVyZSBib3RoIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbnMgbXVzdCBiZSBoYXNoZWQKLQkgKiBi ZWZvcmUgYmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIGRpc3JlZ2FyZCBlbmFibGVfaGFzaGpvaW4g Zm9yIGZ1bGwKLQkgKiBqb2lucywgYmVjYXVzZSB0aGVyZSBtYXkgYmUgbm8gb3RoZXIgYWx0ZXJu YXRpdmUuCisJICogYmVmb3JlIGJlaW5nIGpvaW5lZC4gIEFzIGFib3ZlLCB3aGVuIGl0J3MgYSBm dWxsIGpvaW4sIHdlIG11c3QgdHJ5IHRoaXMKKwkgKiBldmVuIHdoZW4gdGhlIHBhdGggdHlwZSBp cyBkaXNhYmxlZCwgYmVjYXVzZSBpdCBtYXkgYmUgb3VyIG9ubHkgb3B0aW9uLgogCSAqLwotCWlm IChlbmFibGVfaGFzaGpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEu cGdzX21hc2sgJiBQR1NfSEFTSEpPSU4pICE9IDAgfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQog CQloYXNoX2lubmVyX2FuZF9vdXRlcihyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWws CiAJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEpOwogCkBAIC0zMzMsNyArMzYxLDcgQEAgYWRkX3Bh dGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJICogdG8gdGhlIHNhbWUgc2VydmVy IGFuZCBhc3NpZ25lZCB0byB0aGUgc2FtZSB1c2VyIHRvIGNoZWNrIGFjY2VzcwogCSAqIHBlcm1p c3Npb25zIGFzLCBnaXZlIHRoZSBGRFcgYSBjaGFuY2UgdG8gcHVzaCBkb3duIGpvaW5zLgogCSAq LwotCWlmIChqb2lucmVsLT5mZHdyb3V0aW5lICYmCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBH U19GT1JFSUdOSk9JTikgIT0gMCAmJiBqb2lucmVsLT5mZHdyb3V0aW5lICYmCiAJCWpvaW5yZWwt PmZkd3JvdXRpbmUtPkdldEZvcmVpZ25Kb2luUGF0aHMpCiAJCWpvaW5yZWwtPmZkd3JvdXRpbmUt PkdldEZvcmVpZ25Kb2luUGF0aHMocm9vdCwgam9pbnJlbCwKIAkJCQkJCQkJCQkJCSBvdXRlcnJl bCwgaW5uZXJyZWwsCkBAIC0zNDIsOCArMzcwLDEzIEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBs YW5uZXJJbmZvICpyb290LAogCS8qCiAJICogNi4gRmluYWxseSwgZ2l2ZSBleHRlbnNpb25zIGEg Y2hhbmNlIHRvIG1hbmlwdWxhdGUgdGhlIHBhdGggbGlzdC4gIFRoZXkKIAkgKiBjb3VsZCBhZGQg bmV3IHBhdGhzIChzdWNoIGFzIEN1c3RvbVBhdGhzKSBieSBjYWxsaW5nIGFkZF9wYXRoKCksIG9y Ci0JICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFsbGVsIGF3YXJlLiAgVGhleSBjb3VsZCBh bHNvIGRlbGV0ZSBvciBtb2RpZnkKLQkgKiBwYXRocyBhZGRlZCBieSB0aGUgY29yZSBjb2RlLgor CSAqIGFkZF9wYXJ0aWFsX3BhdGgoKSBpZiBwYXJhbGxlbCBhd2FyZS4KKwkgKgorCSAqIEluIHRo ZW9yeSwgZXh0ZW5zaW9ucyBjb3VsZCBhbHNvIHVzZSB0aGlzIGhvb2sgdG8gZGVsZXRlIG9yIG1v ZGlmeQorCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUsIGJ1dCBpbiBwcmFjdGljZSB0 aGlzIGlzIGRpZmZpY3VsdCB0byBtYWtlCisJICogd29yaywgc2luY2UgaXQncyB0b28gbGF0ZSB0 byBnZXQgYmFjayBhbnkgcGF0aHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorCSAqIGRpc2NhcmRl ZCBieSBhZGRfcGF0aCgpIG9yIGFkZF9wYXJ0aWFsX3BhdGgoKS4gSWYgeW91J3JlIHRyeWluZyB0 bworCSAqIHN1cHByZXNzIHBhdGhzLCBjb25zaWRlciB1c2luZyBqb2luX3BhdGhfc2V0dXBfaG9v ayBpbnN0ZWFkLgogCSAqLwogCWlmIChzZXRfam9pbl9wYXRobGlzdF9ob29rKQogCQlzZXRfam9p bl9wYXRobGlzdF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTY5 MCw3ICs3MjMsNyBAQCBnZXRfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbm5lcnJlbCwKIAlMaXN0CSAgICpwaF9sYXRlcmFsX3ZhcnM7CiAKIAkvKiBPYnZpb3Vz bHkgbm90IGlmIGl0J3MgZGlzYWJsZWQgKi8KLQlpZiAoIWVuYWJsZV9tZW1vaXplKQorCWlmICgo ZXh0cmEtPnBnc19tYXNrICYgUEdTX05FU1RMT09QX01FTU9JWkUpID09IDApCiAJCXJldHVybiBO VUxMOwogCiAJLyoKQEAgLTg0NSw2ICs4NzgsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkgIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJICBMaXN0ICpwYXRoa2V5 cywKIAkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCSAgdWludDY0IG5lc3Rsb29wX3N1YnR5 cGUsCiAJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJUmVsaWRzCQlyZXF1aXJl ZF9vdXRlcjsKQEAgLTkyNyw2ICs5NjEsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkgKiBtZXRob2RvbG9neSB3b3J0aHdoaWxlLgogCSAqLwogCWluaXRpYWxfY29z dF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwKKwkJCQkJCSAgbmVzdGxvb3Bf c3VidHlwZSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMLAogCQkJCQkJICBvdXRlcl9wYXRoLCBp bm5lcl9wYXRoLCBleHRyYSk7CiAKIAlpZiAoYWRkX3BhdGhfcHJlY2hlY2soam9pbnJlbCwgd29y a3NwYWNlLmRpc2FibGVkX25vZGVzLApAQCAtOTY0LDYgKzk5OSw3IEBAIHRyeV9wYXJ0aWFsX25l c3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgIFBhdGggKmlubmVyX3BhdGgs CiAJCQkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJ CQkJCSAgdWludDY0IG5lc3Rsb29wX3N1YnR5cGUsCiAJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRh ICpleHRyYSkKIHsKIAlKb2luQ29zdFdvcmtzcGFjZSB3b3Jrc3BhY2U7CkBAIC0xMDExLDcgKzEw NDcsNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAq IEJlZm9yZSBjcmVhdGluZyBhIHBhdGgsIGdldCBhIHF1aWNrIGxvd2VyIGJvdW5kIG9uIHdoYXQg aXQgaXMgbGlrZWx5IHRvCiAJICogY29zdC4gIEJhaWwgb3V0IHJpZ2h0IGF3YXkgaWYgaXQgbG9v a3MgdGVycmlibGUuCiAJICovCi0JaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3Bh Y2UsIGpvaW50eXBlLAorCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBq b2ludHlwZSwgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0 aCwgZXh0cmEpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jr c3BhY2UuZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBw YXRoa2V5cykpCkBAIC0xODU5LDE0ICsxODk1LDE0IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBs YW5uZXJJbmZvICpyb290LAogCWlmIChuZXN0am9pbk9LKQogCXsKIAkJLyoKLQkJICogQ29uc2lk ZXIgbWF0ZXJpYWxpemluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzCi0JCSAqIGVu YWJsZV9tYXRlcmlhbCBpcyBvZmYgb3IgdGhlIHBhdGggaW4gcXVlc3Rpb24gbWF0ZXJpYWxpemVz IGl0cwotCQkgKiBvdXRwdXQgYW55d2F5LgorCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MgdGhhdCBpcworCQkgKiBkaXNhYmxlZCBvciB0 aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJCSAq LwotCQlpZiAoZW5hYmxlX21hdGVyaWFsICYmIGlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwg JiYKKwkJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUpICE9 IDAgJiYKKwkJCWlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwgJiYKIAkJCSFFeGVjTWF0ZXJp YWxpemVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJCQltYXRwYXRo ID0gKFBhdGggKikKLQkJCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hl YXBlc3RfdG90YWwpOworCQkJCWNyZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9j aGVhcGVzdF90b3RhbCwgdHJ1ZSk7CiAJfQogCiAJZm9yZWFjaChsYzEsIG91dGVycmVsLT5wYXRo bGlzdCkKQEAgLTE5MDksNiArMTk0NSw3IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkgIGlubmVycGF0aCwKIAkJCQkJCQkJICBtZXJnZV9wYXRoa2V5 cywKIAkJCQkJCQkJICBqb2ludHlwZSwKKwkJCQkJCQkJICBQR1NfTkVTVExPT1BfUExBSU4sCiAJ CQkJCQkJCSAgZXh0cmEpOwogCiAJCQkJLyoKQEAgLTE5MjUsNiArMTk2Miw3IEBAIG1hdGNoX3Vu c29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJICBtcGF0aCwKIAkJCQkJ CQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJCQkJICBQ R1NfTkVTVExPT1BfTUVNT0laRSwKIAkJCQkJCQkJCSAgZXh0cmEpOwogCQkJfQogCkBAIC0xOTM2 LDYgKzE5NzQsNyBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJICBtYXRwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpv aW50eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSwKIAkJCQkJCQkJICBl eHRyYSk7CiAJCX0KIApAQCAtMjA1MiwxNiArMjA5MSwxNyBAQCBjb25zaWRlcl9wYXJhbGxlbF9u ZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogQ29uc2lkZXIgbWF0ZXJpYWxp emluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzOiAxKQotCSAqIGVuYWJsZV9tYXRl cmlhbCBpcyBvZmYsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAorCSAqIG1hdGVy aWFsaXphdGlvbiBpcyBkaXNhYmxlZCBoZXJlLCAyKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBp cyBub3QKIAkgKiBwYXJhbGxlbC1zYWZlLCAzKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBpcyBw YXJhbWV0ZXJpemVkIGJ5IHRoZSBvdXRlcgogCSAqIHJlbCwgb3IgNCkgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGggbWF0ZXJpYWxpemVzIGl0cyBvdXRwdXQgYW55d2F5LgogCSAqLwotCWlmIChlbmFi bGVfbWF0ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwtPnBhcmFsbGVsX3NhZmUgJiYKKwlp ZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgor CQlpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgogCQkhUEFUSF9QQVJBTV9C WV9SRUwoaW5uZXJfY2hlYXBlc3RfdG90YWwsIG91dGVycmVsKSAmJgogCQkhRXhlY01hdGVyaWFs aXplc091dHB1dChpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGF0aHR5cGUpKQogCXsKIAkJbWF0cGF0 aCA9IChQYXRoICopCi0JCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hl YXBlc3RfdG90YWwpOworCQkJY3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2No ZWFwZXN0X3RvdGFsLCB0cnVlKTsKIAkJQXNzZXJ0KG1hdHBhdGgtPnBhcmFsbGVsX3NhZmUpOwog CX0KIApAQCAtMjA5MSw3ICsyMTMxLDggQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJY29udGludWU7CiAKIAkJCXRyeV9wYXJ0aWFsX25lc3Rsb29w X3BhdGgocm9vdCwgam9pbnJlbCwgb3V0ZXJwYXRoLCBpbm5lcnBhdGgsCi0JCQkJCQkJCQkgIHBh dGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUs CisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwgZXh0cmEpOwogCiAJCQkvKgogCQkJICog VHJ5IGdlbmVyYXRpbmcgYSBtZW1vaXplIHBhdGggYW5kIHNlZSBpZiB0aGF0IG1ha2VzIHRoZSBu ZXN0ZWQKQEAgLTIxMDIsMTMgKzIxNDMsMTUgQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3Ao UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgZXh0cmEpOwogCQkJaWYgKG1wYXRoICE9IE5V TEwpCiAJCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBh dGgsIG1wYXRoLAotCQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJ CQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkJICBQR1NfTkVTVExPT1BfTUVN T0laRSwgZXh0cmEpOwogCQl9CiAKIAkJLyogQWxzbyBjb25zaWRlciBtYXRlcmlhbGl6ZWQgZm9y bSBvZiB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCAqLwogCQlpZiAobWF0cGF0aCAhPSBOVUxMKQog CQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgsIG1h dHBhdGgsCi0JCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJ ICBwYXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTEla RSwgZXh0cmEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvdGlkcGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCmluZGV4 IDNkZGJjMTBiYmRmLi4xNTAxMTVjMjkzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvdGlkcGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBh dGguYwpAQCAtNDk5LDE4ICs0OTksMTkgQEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAlMaXN0CSAgICp0aWRxdWFsczsKIAlMaXN0CSAg ICp0aWRyYW5nZXF1YWxzOwogCWJvb2wJCWlzQ3VycmVudE9mOworCWJvb2wJCWVuYWJsZWQgPSAo cmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwOwogCiAJLyoKIAkgKiBJZiBhbnkgc3Vp dGFibGUgcXVhbHMgZXhpc3QgaW4gdGhlIHJlbCdzIGJhc2VyZXN0cmljdCBsaXN0LCBnZW5lcmF0 ZSBhCiAJICogcGxhaW4gKHVucGFyYW1ldGVyaXplZCkgVGlkUGF0aCB3aXRoIHRoZW0uCiAJICoK LQkgKiBXZSBza2lwIHRoaXMgd2hlbiBlbmFibGVfdGlkc2NhbiA9IGZhbHNlLCBleGNlcHQgd2hl biB0aGUgcXVhbCBpcworCSAqIFdlIHNraXAgdGhpcyB3aGVuIFRJRCBzY2FucyBhcmUgZGlzYWJs ZWQsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCiAJICogQ3VycmVudE9mRXhwci4gSW4gdGhhdCBj YXNlLCBhIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGNvcnJlY3QgcGF0aC4KIAkgKi8KIAl0aWRxdWFs cyA9IFRpZFF1YWxGcm9tUmVzdHJpY3RJbmZvTGlzdChyb290LCByZWwtPmJhc2VyZXN0cmljdGlu Zm8sIHJlbCwKIAkJCQkJCQkJCQkgICAmaXNDdXJyZW50T2YpOwogCi0JaWYgKHRpZHF1YWxzICE9 IE5JTCAmJiAoZW5hYmxlX3RpZHNjYW4gfHwgaXNDdXJyZW50T2YpKQorCWlmICh0aWRxdWFscyAh PSBOSUwgJiYgKGVuYWJsZWQgfHwgaXNDdXJyZW50T2YpKQogCXsKIAkJLyoKIAkJICogVGhpcyBw YXRoIHVzZXMgbm8gam9pbiBjbGF1c2VzLCBidXQgaXQgY291bGQgc3RpbGwgaGF2ZSByZXF1aXJl ZApAQCAtNTMyLDcgKzUzMyw3IEBAIGNyZWF0ZV90aWRzY2FuX3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwpCiAJfQogCiAJLyogU2tpcCB0aGUgcmVzdCBpZiBUSUQgc2Nh bnMgYXJlIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3RpZHNjYW4pCisJaWYgKCFlbmFibGVk KQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRl cGxhbi5jCmluZGV4IGUzZjI3YTU4NmNhLi42NmQ0OTFlY2IxMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtNjUwMyw3ICs2NTAzLDcgQEAgUGxhbiAqCiBtYXRl cmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiB7CiAJUGxhbgkgICAqbWF0cGxh bjsKLQlQYXRoCQltYXRwYXRoOwkJLyogZHVtbXkgZm9yIHJlc3VsdCBvZiBjb3N0X21hdGVyaWFs ICovCisJUGF0aAkJbWF0cGF0aDsJCS8qIGR1bW15IGZvciBjb3N0X21hdGVyaWFsICovCiAJQ29z dAkJaW5pdHBsYW5fY29zdDsKIAlib29sCQl1bnNhZmVfaW5pdHBsYW5zOwogCkBAIC02NTI1LDcg KzY1MjUsOSBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAJc3Vi cGxhbi0+dG90YWxfY29zdCAtPSBpbml0cGxhbl9jb3N0OwogCiAJLyogU2V0IGNvc3QgZGF0YSAq LworCW1hdHBhdGgucGFyZW50ID0gTlVMTDsKIAljb3N0X21hdGVyaWFsKCZtYXRwYXRoLAorCQkJ CSAgZW5hYmxlX21hdGVyaWFsLAogCQkJCSAgc3VicGxhbi0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJ ICBzdWJwbGFuLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwbGFuLT50b3RhbF9jb3N0LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDk0ZTFhYzk2ZWQ5Li4zNmEyOTM1NTEw NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDYyLDYgKzQ2Miw1MyBA QCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LCBpbnQgY3Vyc29yT3B0aW9ucywKIAkJdHVwbGVfZnJhY3Rpb24gPSAwLjA7CiAJfQogCisJLyoK KwkgKiBDb21wdXRlIHRoZSBpbml0aWFsIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgor CSAqCisJICogU29tZSBzdHJhdGVnaWVzLCBzdWNoIGFzIFBHU19GT1JFSUdOSk9JTiwgaGF2ZSBu byBjb3JyZXNwb25kaW5nIGVuYWJsZV8qCisJICogR1VDLCBhbmQgc28gdGhlIGNvcnJlc3BvbmRp bmcgYml0cyBhcmUgYWx3YXlzIHNldCBpbiB0aGUgZGVmYXVsdAorCSAqIHN0cmF0ZWd5IG1hc2su CisJICoKKwkgKiBJdCBtYXkgc2VlbSBzdXJwcmlzaW5nIHRoYXQgZW5hYmxlX2luZGV4c2NhbiBz ZXRzIGJvdGggUEdTX0lOREVYU0NBTgorCSAqIGFuZCBQR1NfSU5ERVhPTkxZU0NBTi4gSG93ZXZl ciwgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgdGhpcyBHVUMKKwkgKiBjb3JyZXNwb25kcyB0 byB0aGlzIGV4YWN0bHk6IGVuYWJsZV9pbmRleHNjYW49b2ZmIGRpc2FibGVzIGJvdGgKKwkgKiBp bmRleC1zY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4gcGF0aHMsIHdoZXJlYXMgZW5hYmxlX2luZGV4 b25seXNjYW49b2ZmCisJICogY29udmVydHMgdGhlIGluZGV4LW9ubHkgc2NhbiBwYXRocyB0aGF0 IHdlIHdvdWxkIGhhdmUgY29uc2lkZXJlZCBpbnRvCisJICogaW5kZXggc2NhbiBwYXRocy4KKwkg Ki8KKwlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBF TkQgfCBQR1NfRk9SRUlHTkpPSU4gfAorCQlQR1NfR0FUSEVSIHwgUEdTX0NPTlNJREVSX05PTlBB UlRJQUw7CisJaWYgKGVuYWJsZV90aWRzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9 IFBHU19USURTQ0FOOworCWlmIChlbmFibGVfc2Vxc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3Nf bWFzayB8PSBQR1NfU0VRU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4c2NhbikKKwkJZ2xvYi0+ZGVm YXVsdF9wZ3NfbWFzayB8PSBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU47CisJaWYg KGVuYWJsZV9pbmRleG9ubHlzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19D T05TSURFUl9JTkRFWE9OTFk7CisJaWYgKGVuYWJsZV9iaXRtYXBzY2FuKQorCQlnbG9iLT5kZWZh dWx0X3Bnc19tYXNrIHw9IFBHU19CSVRNQVBTQ0FOOworCWlmIChlbmFibGVfbWVyZ2Vqb2luKQor CXsKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQlp ZiAoZW5hYmxlX21hdGVyaWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVS R0VKT0lOX01BVEVSSUFMSVpFOworCX0KKwlpZiAoZW5hYmxlX25lc3Rsb29wKQorCXsKKwkJZ2xv Yi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfUExBSU47CisJCWlmIChlbmFibGVf bWF0ZXJpYWwpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9NQVRF UklBTElaRTsKKwkJaWYgKGVuYWJsZV9tZW1vaXplKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFz ayB8PSBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwl9CisJaWYgKGVuYWJsZV9oYXNoam9pbikKKwkJ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfSEFTSEpPSU47CisJaWYgKGVuYWJsZV9nYXRo ZXJtZXJnZSkKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfR0FUSEVSX01FUkdFOwor CWlmIChlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFOworCiAJLyogQWxsb3cgcGx1Z2lucyB0byB0 YWtlIGNvbnRyb2wgYWZ0ZXIgd2UndmUgaW5pdGlhbGl6ZWQgImdsb2IiICovCiAJaWYgKHBsYW5u ZXJfc2V0dXBfaG9vaykKIAkJKCpwbGFubmVyX3NldHVwX2hvb2spIChnbG9iLCBwYXJzZSwgcXVl cnlfc3RyaW5nLCAmdHVwbGVfZnJhY3Rpb24sIGVzKTsKQEAgLTM5NTQsNiArNDAwMSw5IEBAIG1h a2VfZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWws CiAJCWlzX3BhcmFsbGVsX3NhZmUocm9vdCwgaGF2aW5nUXVhbCkpCiAJCWdyb3VwZWRfcmVsLT5j b25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKiBBc3N1bWUgdGhhdCB0aGUgc2FtZSBwYXRo IGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUgYWxsb3dlZCAqLworCWdyb3VwZWRfcmVsLT5wZ3Nf bWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1dCByZWwg YmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIGdyb3VwZWQgcmVsLgogCSAqLwpA QCAtNTM0OCw2ICs1Mzk4LDkgQEAgY3JlYXRlX29yZGVyZWRfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsCiAJaWYgKGlucHV0X3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgdGFyZ2V0X3BhcmFsbGVs X3NhZmUpCiAJCW9yZGVyZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKiBB c3N1bWUgdGhhdCB0aGUgc2FtZSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUgYWxsb3dl ZC4gKi8KKwlvcmRlcmVkX3JlbC0+cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNrOworCiAJ LyoKIAkgKiBJZiB0aGUgaW5wdXQgcmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBzbyBkb2Vz IHRoZSBvcmRlcmVkX3JlbC4KIAkgKi8KQEAgLTc0MjgsNiArNzQ4MSw3IEBAIGNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlncm91cGVk X3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVs ID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBhcnRpYWxseV9ncm91cGVk X3JlbC0+cGdzX21hc2sgPSBncm91cGVkX3JlbC0+cGdzX21hc2s7CiAJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5yZWxvcHRraW5kID0gZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQ7CiAJcGFydGlhbGx5 X2dyb3VwZWRfcmVsLT5zZXJ2ZXJpZCA9IGdyb3VwZWRfcmVsLT5zZXJ2ZXJpZDsKIAlwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwtPnVzZXJpZCA9IGdyb3VwZWRfcmVsLT51c2VyaWQ7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCAzM2NlMzRmMDA4OC4uN2RkOWE3YzQ2MDkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMTY1OSw3ICsxNjU5LDcgQEAg Y3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAgKgkgIHBhdGhub2RlLgogICovCiBNYXRlcmlhbFBhdGggKgotY3JlYXRlX21hdGVyaWFs X3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQorY3JlYXRlX21hdGVyaWFsX3Bh dGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLCBib29sIGVuYWJsZWQpCiB7CiAJTWF0 ZXJpYWxQYXRoICpwYXRobm9kZSA9IG1ha2VOb2RlKE1hdGVyaWFsUGF0aCk7CiAKQEAgLTE2Nzgs NiArMTY3OCw3IEBAIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAq c3VicGF0aCkKIAlwYXRobm9kZS0+c3VicGF0aCA9IHN1YnBhdGg7CiAKIAljb3N0X21hdGVyaWFs KCZwYXRobm9kZS0+cGF0aCwKKwkJCQkgIGVuYWJsZWQsCiAJCQkJICBzdWJwYXRoLT5kaXNhYmxl ZF9ub2RlcywKIAkJCQkgIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwKIAkJCQkgIHN1YnBhdGgtPnRv dGFsX2Nvc3QsCkBAIC0xNzMwLDggKzE3MzEsMTUgQEAgY3JlYXRlX21lbW9pemVfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAogCXBhdGhub2Rl LT5lc3RfdW5pcXVlX2tleXMgPSAwLjA7CiAJcGF0aG5vZGUtPmVzdF9oaXRfcmF0aW8gPSAwLjA7 CiAKLQkvKiB3ZSBzaG91bGQgbm90IGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gZW5hYmxl X21lbW9pemU9ZmFsc2UgKi8KLQlBc3NlcnQoZW5hYmxlX21lbW9pemUpOworCS8qCisJICogV2Ug c2hvdWxkIG5vdCBiZSBhc2tlZCB0byBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIG1lbW9p emF0aW9uIGlzCisJICogZGlzYWJsZWQsIHNvIHNldCBvdXIgY291bnQgb2YgZGlzYWJsZWQgbm9k ZXMgZXF1YWwgdG8gdGhlIHN1YnBhdGgncworCSAqIGNvdW50LgorCSAqCisJICogSXQgd291bGQg YmUgbmljZSB0byBhbHNvIEFzc2VydCB0aGF0IG1lbW9pemF0aW9uIGlzIGVuYWJsZWQsIGJ1dCB0 aGUKKwkgKiB2YWx1ZSBvZiBlbmFibGVfbWVtb2l6ZSBpcyBub3QgY29udHJvbGxpbmc6IHdoYXQg d2Ugd291bGQgbmVlZCB0byBjaGVjaworCSAqIGlzIHRoYXQgdGhlIEpvaW5QYXRoRXh0cmFEYXRh J3MgcGdzX21hc2sgaW5jbHVkZWQgUEdTX05FU1RMT09QX01FTU9JWkUuCisJICovCiAJcGF0aG5v ZGUtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBzdWJwYXRoLT5kaXNhYmxlZF9ub2RlczsKIAogCS8q CkBAIC0zOTY1LDEzICszOTczLDE2IEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5lckluZm8g KnJvb3QsIFBhdGggKnBhdGgsCiAJCQl7CiAJCQkJTWF0ZXJpYWxQYXRoICptcGF0aCA9IChNYXRl cmlhbFBhdGggKikgcGF0aDsKIAkJCQlQYXRoCSAgICpzcGF0aCA9IG1wYXRoLT5zdWJwYXRoOwor CQkJCWJvb2wJCWVuYWJsZWQ7CiAKIAkJCQlzcGF0aCA9IHJlcGFyYW1ldGVyaXplX3BhdGgocm9v dCwgc3BhdGgsCiAJCQkJCQkJCQkJCXJlcXVpcmVkX291dGVyLAogCQkJCQkJCQkJCQlsb29wX2Nv dW50KTsKKwkJCQllbmFibGVkID0KKwkJCQkJKG1wYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzIDw9 IHNwYXRoLT5kaXNhYmxlZF9ub2Rlcyk7CiAJCQkJaWYgKHNwYXRoID09IE5VTEwpCiAJCQkJCXJl dHVybiBOVUxMOwotCQkJCXJldHVybiAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWws IHNwYXRoKTsKKwkJCQlyZXR1cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBz cGF0aCwgZW5hYmxlZCk7CiAJCQl9CiAJCWNhc2UgVF9NZW1vaXplOgogCQkJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IGU1NTNhZmI3ZjAxLi4xMzhhODgyODFlMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtNTc2LDYgKzU3Niw5IEBAIGdldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9v bCBpbmhwYXJlbnQsCiAJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXplIG9uIHRoZSBp bmZvIHdlIG9idGFpbmVkIGZyb20gdGhlCiAJICogY2F0YWxvZ3MuICBBY3Rpb25zIG1pZ2h0IGlu Y2x1ZGUgYWx0ZXJpbmcgdGhlIGFzc3VtZWQgcmVsYXRpb24gc2l6ZSwKIAkgKiByZW1vdmluZyBh biBpbmRleCwgb3IgYWRkaW5nIGEgaHlwb3RoZXRpY2FsIGluZGV4IHRvIHRoZSBpbmRleGxpc3Qu CisJICoKKwkgKiBBbiBleHRlbnNpb24gY2FuIGFsc28gbW9kaWZ5IHJlbC0+cGdzX21hc2sgaGVy ZSB0byBjb250cm9sIHBhdGgKKwkgKiBnZW5lcmF0aW9uLgogCSAqLwogCWlmIChnZXRfcmVsYXRp b25faW5mb19ob29rKQogCQkoKmdldF9yZWxhdGlvbl9pbmZvX2hvb2spIChyb290LCByZWxhdGlv bk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggNDA1ZjRkYWUxMDkuLjFkMmQ3MjkyZmU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcmVsbm9kZS5jCkBAIC00Nyw2ICs0Nyw5IEBAIHR5cGVkZWYgc3RydWN0IEpvaW5IYXNoRW50 cnkKIAlSZWxPcHRJbmZvICpqb2luX3JlbDsKIH0gSm9pbkhhc2hFbnRyeTsKIAorLyogSG9vayBm b3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLworam9pbnJl bF9zZXR1cF9ob29rX3R5cGUgam9pbnJlbF9zZXR1cF9ob29rID0gTlVMTDsKKwogc3RhdGljIHZv aWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9p bnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQlTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKQEAgLTIyNSw2ICsyMjgsNyBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAlyZWwtPmNvbnNp ZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlyZWwtPmNvbnNpZGVy X3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KIAly ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7IC8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVy ICovCisJcmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJcmVs LT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOwogCXJlbC0+cGF0aGxpc3Qg PSBOSUw7CiAJcmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtODIyLDYgKzgyNiw3IEBAIGJ1aWxkX2pv aW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCWpvaW5yZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAo cm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbV9zdGFy dHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lu cmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+ cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlqb2lucmVsLT5wYXRobGlz dCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtOTM0LDEwICs5MzksNiBAQCBi dWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNs YXNzX2pvaW5zID0gaGFzX3JlbGV2YW50X2VjbGFzc19qb2luY2xhdXNlKHJvb3QsIGpvaW5yZWwp OwogCi0JLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbi4gKi8KLQlidWlsZF9qb2lu cmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBz amluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyoKIAkgKiBTZXQgZXN0aW1hdGVz IG9mIHRoZSBqb2lucmVsJ3Mgc2l6ZS4KIAkgKi8KQEAgLTk2Myw2ICs5NjQsMTggQEAgYnVpbGRf am9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCWlzX3BhcmFsbGVsX3NhZmUocm9vdCwgKE5v ZGUgKikgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykpCiAJCWpvaW5yZWwtPmNvbnNpZGVyX3Bh cmFsbGVsID0gdHJ1ZTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXpl IG9uIHRoZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNs dWRlIGFsdGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFs bGVsLgorCSAqLworCWlmIChqb2lucmVsX3NldHVwX2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9o b29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJ CQkgICByZXN0cmljdGxpc3QpOworCisJLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlv bi4gKi8KKwlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVy X3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCiAJLyog QWRkIHRoZSBqb2lucmVsIHRvIHRoZSBQbGFubmVySW5mby4gKi8KIAlhZGRfam9pbl9yZWwocm9v dCwgam9pbnJlbCk7CiAKQEAgLTEwMTksNiArMTAzMiw3IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJam9pbnJlbC0+Y29u c2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCWpvaW5yZWwtPmNv bnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbGxl bCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3Nf bWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOwog CWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwtPnBwaWxpc3QgPSBOSUw7CkBAIC0x MTAyLDEwICsxMTE2LDYgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5z ID0gcGFyZW50X2pvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnM7CiAKLQkvKiBJcyB0aGUgam9pbiBi ZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwotCWJ1aWxkX2pvaW5yZWxf cGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5m bywKLQkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7Ci0KIAkvKiBDaGlsZCBqb2lucmVsIGlzIHBhcmFs bGVsIHNhZmUgaWYgcGFyZW50IGlzIHBhcmFsbGVsIHNhZmUuICovCiAJam9pbnJlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgPSBwYXJlbnRfam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAKQEAgLTEx MTMsNiArMTEyMywyMCBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3Qs IGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLAogCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJp Y3RsaXN0KTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXplIG9uIHRo ZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNsdWRlIGFs dGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFsbGVsLAor CSAqIGFsdGhvdWdoIHRoZSBsYXR0ZXIgd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhlIHBhcmVu dCBqb2lucmVsIHJhdGhlcgorCSAqIHRoYW4gaGVyZS4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1 cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3Jl bCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIElz IHRoZSBqb2luIGJldHdlZW4gcGFydGl0aW9ucyBpdHNlbGYgcGFydGl0aW9uZWQ/ICovCisJYnVp bGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVy X3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwogCS8qIFdlIGJ1aWxkIHRo ZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwgam9pbnJl bC0+cmVsaWRzKSk7CiAKQEAgLTE2MDIsNiArMTYyNiw3IEBAIGZldGNoX3VwcGVyX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIAl1 cHBlcnJlbCA9IG1ha2VOb2RlKFJlbE9wdEluZm8pOwogCXVwcGVycmVsLT5yZWxvcHRraW5kID0g UkVMT1BUX1VQUEVSX1JFTDsKIAl1cHBlcnJlbC0+cmVsaWRzID0gYm1zX2NvcHkocmVsaWRzKTsK Kwl1cHBlcnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCiAJ LyogY2hlYXAgc3RhcnR1cCBjb3N0IGlzIGludGVyZXN0aW5nIGlmZiBub3QgYWxsIHR1cGxlcyB0 byBiZSByZXRyaWV2ZWQgKi8KIAl1cHBlcnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50 dXBsZV9mcmFjdGlvbiA+IDApOwpAQCAtMjExOCw3ICsyMTQzLDcgQEAgYnVpbGRfam9pbnJlbF9w YXJ0aXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAlQYXJ0aXRpb25TY2hlbWUgcGFydF9z Y2hlbWU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHBhcnRpdGlvbndpc2Ugam9pbiB0ZWNobmlx dWUgaXMgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luKQorCWlm ICgoam9pbnJlbC0+cGdzX21hc2sgJiBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSkgPT0gMCkK IAl7CiAJCUFzc2VydCghSVNfUEFSVElUSU9ORURfUkVMKGpvaW5yZWwpKTsKIAkJcmV0dXJuOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCBjZTYyM2RhNzFjYy4uYzE4NDI0YjQ1OGEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCkBAIC0yMiw2ICsyMiw3OSBAQAogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKKy8qCisgKiBQYXRoIGdlbmVyYXRp b24gc3RyYXRlZ2llcy4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc3BlY2lm eSB0aGUgc2V0IG9mIHN0cmF0ZWdpZXMgdGhhdCB0aGUgcGxhbm5lcgorICogc2hvdWxkIHVzZSwg ZWl0aGVyIGZvciB0aGUgcXVlcnkgYXMgYSB3aG9sZSBvciBmb3IgYSBzcGVjaWZpYyBiYXNlcmVs IG9yCisgKiBqb2lucmVsLiBUaGUgdmFyaW91cyBwbGFubmVyLXJlbGF0ZWQgZW5hYmxlXyogR1VD cyBhcmUgdXNlZCB0byBzZXQgdGhlCisgKiBQbGFubmVyR2xvYmFsJ3MgZGVmYXVsdF9wZ3NfbWFz aywgYW5kIHRoYXQgaW4gdHVybiBpcyB1c2VkIHRvIHNldCBlYWNoCisgKiBSZWxPcHRJbmZvJ3Mg cGdzX21hc2suIEluIGJvdGggY2FzZXMsIGV4dGVuc2lvbnMgY2FuIHVzZSBob29rcyB0byBtb2Rp ZnkgdGhlCisgKiBkZWZhdWx0IHZhbHVlLiAgTm90IGV2ZXJ5IHN0cmF0ZWd5IGxpc3RlZCBoZXJl IGhhcyBhIGNvcnJlc3BvbmRpbmcgZW5hYmxlXyoKKyAqIEdVQzsgdGhvc2UgdGhhdCBkb24ndCBh cmUgYWx3YXlzIGFsbG93ZWQgdW5sZXNzIGRpc2FibGVkIGJ5IGFuIGV4dGVuc2lvbi4KKyAqIE5v dCBhbGwgc3RyYXRlZ2llcyBhcmUgcmVsZXZhbnQgZm9yIGV2ZXJ5IFJlbE9wdEluZm87IGUuZy4g UEdTX1NFUVNDQU4KKyAqIGRvZXNuJ3QgYWZmZWN0IGpvaW5yZWxzIG9uZSB3YXkgb3IgdGhlIG90 aGVyLgorICoKKyAqIEluIG1vc3QgY2FzZXMsIGRpc2FibGluZyBhIHBhdGggZ2VuZXJhdGlvbiBz dHJhdGVneSBtZXJlbHkgbWVhbnMgdGhhdCBhbnkKKyAqIHBhdGhzIGdlbmVyYXRlZCB1c2luZyB0 aGF0IHN0cmF0ZWd5IGFyZSBtYXJrZWQgYXMgZGlzYWJsZWQsIGJ1dCBpbiBzb21lCisgKiBjYXNl cywgcGF0aCBnZW5lcmF0aW9uIGlzIHNraXBwZWQgYWx0b2dldGhlci4gVGhlIGxhdHRlciBzdHJh dGVneSBpcyBvbmx5CisgKiBwZXJtaXNzaWJsZSB3aGVuIGl0IGNhbid0IHJlc3VsdCBpbiBwbGFu bmVyIGZhaWx1cmUgLS0gZm9yIGluc3RhbmNlLCB3ZQorICogY291bGRuJ3QgZG8gdGhpcyBmb3Ig c2VxdWVudGlhbCBzY2FucyBvbiBhIHBsYWluIHJlbCwgYmVjYXVzZSB0aGVyZSBtaWdodAorICog bm90IGJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoLiBOZXZlcnRoZWxlc3MsIHRoZSBiZWhhdmlv cnMgaW4gZWFjaAorICogaW5kaXZpZHVhbCBjYXNlIGFyZSB0byBzb21lIGV4dGVudCB0aGUgcmVz dWx0IG9mIGhpc3RvcmljYWwgYWNjaWRlbnQsCisgKiBjaG9zZW4gdG8gbWF0Y2ggdGhlIHByZWV4 aXN0aW5nIGJlaGF2aW9ycyBvZiB0aGUgZW5hYmxlXyogR1VDcy4KKyAqCisgKiBJbiBhIGZldyBj YXNlcywgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGJpdCBmb3IgdGhlIHNhbWUgc3RyYXRlZ3ksIGNv bnRyb2xsaW5nCisgKiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgcGxhbm5lciBiZWhhdmlvci4g V2hlbiBQR1NfQ09OU0lERVJfSU5ERVhPTkxZIGlzCisgKiB1bnNldCwgd2UgZG9uJ3QgZXZlbiBj b25zaWRlciBpbmRleC1vbmx5IHNjYW5zLCBhbmQgYW55IHN1Y2ggc2NhbnMgdGhhdAorICogd291 bGQgaGF2ZSBiZWVuIGdlbmVyYXRlZCBiZWNvbWUgaW5kZXggc2NhbnMgaW5zdGVhZC4gT24gdGhl IG90aGVyIGhhbmQsCisgKiB1bnNldHRpbmcgUEdTX0lOREVYU0NBTiBvciBQR1NfSU5ERVhPTkxZ U0NBTiBjYXVzZXMgZ2VuZXJhdGVkIHBhdGhzIG9mIHRoZQorICogY29ycmVzcG9uZGluZyB0eXBl cyB0byBiZSBtYXJrZWQgYXMgZGlzYWJsZWQuIFNpbWlsYXJseSwgdW5zZXR0aW5nCisgKiBQR1Nf Q09OU0lERVJfUEFSVElUSU9OV0lTRSBwcmV2ZW50cyBhbnkgc29ydCBvZiB0aGlua2luZyBhYm91 dCBwYXJ0aXRpb253aXNlCisgKiBqb2lucyBmb3IgdGhlIGN1cnJlbnQgcmVsLCB3aGljaCBpbmNp ZGVudGFsbHkgd2lsbCBwcmVjbHVkZSBoaWdoZXItbGV2ZWwKKyAqIGpvaW5yZWxzIGZyb20gYnVp bGRpbmcgcGFyaXRpdG9ud2lzZSBwYXRocyB1c2luZyBwYXRocyB0YWtlbiBmcm9tIHRoZQorICog Y3VycmVudCByZWwncyBjaGlsZHJlbi4gT24gdGhlIG90aGVyIGhhbmQsIHVuc2V0dGluZyBQR1Nf QVBQRU5EIG9yCisgKiBQR1NfTUVSR0VfQVBQRU5EIHdpbGwgb25seSBhcnJhbmdlIHRvIGRpc2Fi bGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHR5cGVzIGlmIHRoZXkgYXJlIGdlbmVy YXRlZCBhdCB0aGUgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIEZpbmFsbHksIHVu c2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBkaXNhYmxlcyBhbGwgbm9uLXBhcnRpYWwg cGF0aHMKKyAqIGV4Y2VwdCB0aG9zZSB0aGF0IHVzZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLiBJ biBtb3N0IG90aGVyIGNhc2VzLCBhCisgKiBwbHVnaW4gY2FuIG51ZGdlIHRoZSBwbGFubmVyIHRv d2FyZCBhIHBhcnRpY3VsYXIgc3RyYXRlZ3kgYnkgZGlzYWJsaW5nCisgKiBhbGwgb2YgdGhlIG90 aGVycywgYnV0IHRoYXQgZG9lc24ndCB3b3JrIGhlcmU6IHVuc2V0dGluZyBQR1NfU0VRU0NBTiwK KyAqIGZvciBpbnN0YW5jZSwgd291bGQgZGlzYWJsZSBib3RoIHBhcnRpYWwgYW5kIG5vbi1wYXJ0 aWFsIHNlcXVlbnRpYWwgc2NhbnMuCisgKi8KKyNkZWZpbmUgUEdTX1NFUVNDQU4JCQkJCTB4MDAw MDAwMDEKKyNkZWZpbmUgUEdTX0lOREVYU0NBTgkJCQkweDAwMDAwMDAyCisjZGVmaW5lIFBHU19J TkRFWE9OTFlTQ0FOCQkJMHgwMDAwMDAwNAorI2RlZmluZSBQR1NfQklUTUFQU0NBTgkJCQkweDAw MDAwMDA4CisjZGVmaW5lIFBHU19USURTQ0FOCQkJCQkweDAwMDAwMDEwCisjZGVmaW5lIFBHU19G T1JFSUdOSk9JTgkJCQkweDAwMDAwMDIwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fUExBSU4JCQkw eDAwMDAwMDQwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUJMHgwMDAwMDA4MAor I2RlZmluZSBQR1NfTkVTVExPT1BfUExBSU4JCQkweDAwMDAwMTAwCisjZGVmaW5lIFBHU19ORVNU TE9PUF9NQVRFUklBTElaRQkweDAwMDAwMjAwCisjZGVmaW5lIFBHU19ORVNUTE9PUF9NRU1PSVpF CQkweDAwMDAwNDAwCisjZGVmaW5lIFBHU19IQVNISk9JTgkJCQkweDAwMDAwODAwCisjZGVmaW5l IFBHU19BUFBFTkQJCQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgUEdTX01FUkdFX0FQUEVORAkJCTB4 MDAwMDIwMDAKKyNkZWZpbmUgUEdTX0dBVEhFUgkJCQkJMHgwMDAwNDAwMAorI2RlZmluZSBQR1Nf R0FUSEVSX01FUkdFCQkJMHgwMDAwODAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfSU5ERVhPTkxZ CQkweDAwMDEwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFCTB4MDAwMjAw MDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwJCTB4MDAwNDAwMDAKKworLyoKKyAq IENvbnZlbmllbmNlIG1hY3JvcyBmb3IgdXNlZnVsIGNvbWJpbmF0aW9uIG9mIHRoZSBiaXRzIGRl ZmluZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgUEdTX1NDQU5fQU5ZCQlcCisJKFBHU19TRVFTQ0FO IHwgUEdTX0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0JJVE1BUFNDQU4gfCBc CisJIFBHU19USURTQ0FOKQorI2RlZmluZSBQR1NfTUVSR0VKT0lOX0FOWQlcCisJKFBHU19NRVJH RUpPSU5fUExBSU4gfCBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKQorI2RlZmluZSBQR1NfTkVT VExPT1BfQU5ZCVwKKwkoUEdTX05FU1RMT09QX1BMQUlOIHwgUEdTX05FU1RMT09QX01BVEVSSUFM SVpFIHwgUEdTX05FU1RMT09QX01FTU9JWkUpCisjZGVmaW5lIFBHU19KT0lOX0FOWQkJXAorCShQ R1NfRk9SRUlHTkpPSU4gfCBQR1NfTUVSR0VKT0lOX0FOWSB8IFBHU19ORVNUTE9PUF9BTlkgfCBQ R1NfSEFTSEpPSU4pCiAKIC8qCiAgKiBSZWxpZHMKQEAgLTE4Niw2ICsyNTksOSBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogd29yc3QgUFJPUEFSQUxMRUwgaGF6YXJkIGxldmVs ICovCiAJY2hhcgkJbWF4UGFyYWxsZWxIYXphcmQ7CiAKKwkvKiBtYXNrIG9mIGFsbG93ZWQgcGF0 aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgKi8KKwl1aW50NjQJCWRlZmF1bHRfcGdzX21hc2s7CisK IAkvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIAlQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGl0 aW9uX2RpcmVjdG9yeSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCkBAIC05Mzks NyArMTAxNSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlDYXJkaW5hbGl0eSByb3dz OwogCiAJLyoKLQkgKiBwZXItcmVsYXRpb24gcGxhbm5lciBjb250cm9sIGZsYWdzCisJICogcGVy LXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbAogCSAqLwogCS8qIGtlZXAgY2hlYXAtc3RhcnR1cC1j b3N0IHBhdGhzPyAqLwogCWJvb2wJCWNvbnNpZGVyX3N0YXJ0dXA7CkBAIC05NDcsNiArMTAyMyw4 IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlib29sCQljb25zaWRlcl9wYXJhbV9zdGFy dHVwOwogCS8qIGNvbnNpZGVyIHBhcmFsbGVsIHBhdGhzPyAqLwogCWJvb2wJCWNvbnNpZGVyX3Bh cmFsbGVsOworCS8qIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrICovCisJdWludDY0CQlw Z3NfbWFzazsKIAogCS8qCiAJICogZGVmYXVsdCByZXN1bHQgdGFyZ2V0bGlzdCBmb3IgUGF0aHMg c2Nhbm5pbmcgdGhpcyByZWxhdGlvbjsgbGlzdCBvZgpAQCAtMzUwNiw2ICszNTg0LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgU2VtaUFudGlKb2luRmFjdG9ycwogICogc2ppbmZvIGlzIGV4dHJhIGluZm8g YWJvdXQgc3BlY2lhbCBqb2lucyBmb3Igc2VsZWN0aXZpdHkgZXN0aW1hdGlvbgogICogc2VtaWZh Y3RvcnMgaXMgYXMgc2hvd24gYWJvdmUgKG9ubHkgdmFsaWQgZm9yIFNFTUkvQU5USS9pbm5lcl91 bmlxdWUgam9pbnMpCiAgKiBwYXJhbV9zb3VyY2VfcmVscyBhcmUgT0sgdGFyZ2V0cyBmb3IgcGFy YW1ldGVyaXphdGlvbiBvZiByZXN1bHQgcGF0aHMKKyAqIHBnc19tYXNrIGlzIGEgYml0bWFzayBv ZiBQR1NfKiBjb25zdGFudHMgdG8gbGltaXQgdGhlIGpvaW4gc3RyYXRlZ3kKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIHsKQEAgLTM1MTUsNiArMzU5NCw3IEBAIHR5cGVk ZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiAJU3BlY2lhbEpvaW5JbmZvICpzamluZm87CiAJ U2VtaUFudGlKb2luRmFjdG9ycyBzZW1pZmFjdG9yczsKIAlSZWxpZHMJCXBhcmFtX3NvdXJjZV9y ZWxzOworCXVpbnQ2NAkJcGdzX21hc2s7CiB9IEpvaW5QYXRoRXh0cmFEYXRhOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4ZjMuLjJkODA0NjJiZWNlIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9j b3N0LmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBleHRlcm4gdm9pZCBjb3N0X21lcmdlX2FwcGVuZChQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1 cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkJCQkJICBkb3VibGUgdHVwbGVzKTsK IGV4dGVybiB2b2lkIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKLQkJCQkJCSAgaW50IGlucHV0 X2Rpc2FibGVkX25vZGVzLAorCQkJCQkJICBib29sIGVuYWJsZWQsIGludCBpbnB1dF9kaXNhYmxl ZF9ub2RlcywKIAkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90 YWxfY29zdCwKIAkJCQkJCSAgZG91YmxlIHR1cGxlcywgaW50IHdpZHRoKTsKIGV4dGVybiB2b2lk IGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LApAQCAtMTQ4LDcgKzE0OCw3 IEBAIGV4dGVybiB2b2lkIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCSAgIGRvdWJsZSBpbnB1dF90dXBsZXMpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbF9jb3N0 X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIEpvaW5Db3N0V29ya3NwYWNl ICp3b3Jrc3BhY2UsCi0JCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSAgSm9p blR5cGUgam9pbnR5cGUsIHVpbnQ2NCBlbmFibGVfbWFzaywKIAkJCQkJCQkJICBQYXRoICpvdXRl cl9wYXRoLCBQYXRoICppbm5lcl9wYXRoLAogCQkJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSk7CiBleHRlcm4gdm9pZCBmaW5hbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290 LCBOZXN0UGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo bm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggZGJmNDcwMmFj YzkuLjEyM2I3OGNiZjExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcsNiArMTcs MTQgQEAKICNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRo bm9kZXMuaCIKIAorLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJpbmcgam9p bnJlbCBzZXR1cCAqLwordHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1cF9ob29rX3R5cGUpIChQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJ CQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAorCQkJCQkJCQkJCSBSZWxPcHRJbmZvICppbm5l cl9yZWwsCisJCQkJCQkJCQkJIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkJCQkJCSBM aXN0ICpyZXN0cmljdGxpc3QpOworZXh0ZXJuIFBHRExMSU1QT1JUIGpvaW5yZWxfc2V0dXBfaG9v a190eXBlIGpvaW5yZWxfc2V0dXBfaG9vazsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIHBhdGhu b2RlLmMKQEAgLTg1LDcgKzkzLDggQEAgZXh0ZXJuIEdyb3VwUmVzdWx0UGF0aCAqY3JlYXRlX2dy b3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBQYXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJCQkJCQkg TGlzdCAqaGF2aW5ncXVhbCk7Ci1leHRlcm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxf cGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpOworZXh0ZXJuIE1hdGVyaWFsUGF0 aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAor CQkJCQkJCQkJCSAgYm9vbCBlbmFibGVkKTsKIGV4dGVybiBNZW1vaXplUGF0aCAqY3JlYXRlX21l bW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCQkJUGF0aCAqc3VicGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggZjZhNjJk ZjBiNDMuLjYxYzE2MDdmODcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjgsNyArMjgsMTQg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAKLS8qIEhv b2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCisv KiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkg Ki8KK3R5cGVkZWYgdm9pZCAoKmpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUpIChQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSAg IFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVs LAorCQkJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCSAgIEpvaW5QYXRo RXh0cmFEYXRhICpleHRyYSk7CitleHRlcm4gUEdETExJTVBPUlQgam9pbl9wYXRoX3NldHVwX2hv b2tfdHlwZSBqb2luX3BhdGhfc2V0dXBfaG9vazsKIHR5cGVkZWYgdm9pZCAoKnNldF9yZWxfcGF0 aGxpc3RfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkJSW5kZXggcnRpLAotLSAKMi41MS4wCgo= --000000000000eaf7e10645ae89c3 Content-Type: application/octet-stream; name="v6-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v6-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj1kqjjm2 RnJvbSA3OGEyOWZmYmEyNjhiYjY0OTI0NzhhOTI4NTRiZTcyN2E5NzgzOTM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY2IDMv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGU1NGY4Y2ZjMzMy Li5jMjgzNDhlYTk2NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0YzQzZmQwYjE5Yi4uOTI4YjhkODRhZDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzQsOCArMTg5MSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29s CQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDU4LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1 NywxMyArMjA4NCwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA3NSw2 ICsyMTA1LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODUsNiArMjExNiw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDk2LDYgKzIxMjgsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIxMDgsMTIgKzIxNDEsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMjEsNiArMjE1Niw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjU5 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjMyLDYgKzIyNjksOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2 ICsyMjg1LDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNTQsNiArMjI5NSw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMzA4LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI3NywxNCArMjMyNSwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MTMsNyArMjM2OSw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggODgyN2I5YTUyNDUuLjc2NDc4Mzg5NjUzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IGJjNDE3ZjkzODQwLi5lM2YyN2E1ODZjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGRmOWQwM2Q1NDkyLi45NGUx YWM5NmVkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IGEwMWIwMmYzYTdiLi4xMmQwYzgyMWVkNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTg0Myw3ICs4NDMsNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4OSw3ICs4ODksNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTgsNiArMTAxOCw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMjQsOCArMTIyNSwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGI2YmU0ZGRi ZDAxLi4zM2NlMzRmMDA4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAxLDYgKzEzMDEsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMTAsNiArMTMxMSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3Miw2ICsxNDc0LDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Nyw2ICsxNDkwLDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTEsNiArMzk1NSw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQyYzE0NmQ4MDJh Li5jZTYyM2RhNzFjYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzIsNiArMjE3MiwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBkb3duIHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAor ICogcGF0aHMgaW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2Fy eSBmb3IgcGxhbm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0 IG9mIGNvZGUgdGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5k ZXJzdGFuZCBob3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBm b3IgInN1YnBhdGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVu dHMuICBUaGVzZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4u CiAgKiBJbiBwYXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAi ZHVtbXkiIHBhdGggdGhhdApAQCAtMjE4Nyw2ICsyMTkzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBw ZW5kUGF0aAogCS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlz dF9sZW5ndGgoc3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7 CiAJQ2FyZGluYWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBs ZXMsIG9yIC0xICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVu ZFBhdGg7CiAKICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyMDMsMTIgKzIyMTAs MTUgQEAgZXh0ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICog TWVyZ2VBcHBlbmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1l cmdpbmcgb2Ygc29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8g cHJvZHVjZSBzaW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyBoYXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICov CiB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJ ICAgKnN1YnBhdGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0 eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8K KwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA1ZDA1MjBkNWU1OC4uMDQ1YjdlZTg0YTcgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25Q cnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVk ZWYgc3RydWN0IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJl bChzKSBmb3JtZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJ Lyogc2V0cyBvZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2Rl ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBy dW4gKi8KIAlMaXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBs YW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRl ZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkg dGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElz IG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAq Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAg ICptZXJnZXBsYW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQt a2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4 IDZiMDEwZjBiMWE1Li5kYmY0NzAyYWNjOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAg LTcxLDEyICs3MSwxNCBAQCBleHRlcm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2Fu X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtl cnMpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0ICpzdWJwYXRocywgTGlzdCAq cGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJ CQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJ CQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVy Z2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5m byAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3Qg KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAog CQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQ YXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCi0tIAoyLjUx LjAKCg== --000000000000eaf7e10645ae89c3 Content-Type: application/octet-stream; name="v6-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v6-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj1kqjje0 RnJvbSA5YzUyZDg5OTBmMDg3MTg5MTM3ZTk0NWJkYzZkZmRlMDYyYTI5NWFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHY2IDEv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ3MgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZmNkYzE3MDEy ZGEuLjFjNGM3OTZhZGIyIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA4YjIyYzMw NTU5Yi4uMzFkY2JkZjM0MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2Q3ZWExZTZiNTguLmVkY2Q0YWFhNTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDQ2YTg2NTU2MjFkLi4zNzgyYmM2NDA3NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMTUy NmRkMmVjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDlkZDY1YjEwMjU0Li4wMjViYmE4 NzgzNCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MDIsNiArMjkwMiw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000eaf7e10645ae89c3 Content-Type: application/octet-stream; name="v6-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v6-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj1kqjjp4 RnJvbSAxNDU3YWNmYjE5ZWIyMmU4YjQyOTJmNjMzYjY5NTM1NGU3ZDg0YjEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjYgNS81 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNTAgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3NSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzMjAgKysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAg fCAgMjkyICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0 IHwgIDI5NyArKysKIC4uLi9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0ICAgICAgICAgICAg ICB8ICAgNjUgKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0 IHwgIDI0MyArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAg ICB8ICA3NTcgKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4 Lm91dCAgICB8ICAgNTkgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAg ICAgICAgIHwgICA3MCArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5z cWwgICAgfCAgIDQyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAg ICAgICB8ICA0NTQgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu Y29udHJvbCB8ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5o ICAgICAgIHwgICAzNyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAg ICAgICAgfCAgMzkyICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAg ICAgICAgICB8ICAyMDQgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3Iu YyAgICAgICB8ICA2MzcgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVj dG9yLmggICAgICAgfCAgIDE4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlm aWVyLmMgICAgICB8ICA0NzYgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVu dGlmaWVyLmggICAgICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4u YyAgICAgICAgICAgIHwgIDYxNSArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9q b2luLmggICAgICAgICAgICB8ICAxMDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291 dHB1dC5jICAgICAgICAgIHwgIDYyOCArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9vdXRwdXQuaCAgICAgICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BhcnNlci55ICAgICAgICAgIHwgIDMzNyArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5jICAgICAgICAgfCAxNzA3ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMgICAgICAgICAgICB8ICAyODQgKysrCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oICAgICAgICAgICAgfCAgIDg1ICsKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwgICAgICAgICB8ICAyOTkgKysrCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyAgICAgICAgICAgfCAgNDkwICsrKysrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCAgICAgICAgICAgfCAgMTEzICsrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAgODkwICsrKysrKysrKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgIDEyMiArKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCAgICAgICAgIHwgICA3NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbCAgICAgfCAgIDk2ICsKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgNzYgKwogLi4u L3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsICAgIHwgICA0MSArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDc4ICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsICAgICAgICAgICB8ICAxOTUgKysKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwgICAgICAgICB8ICAgNDIgKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsICAgICAgIHwgIDE0NyArKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAzNyArCiA0NiBmaWxl cyBjaGFuZ2VkLCAxMTI1MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvUkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9nYXRoZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Bh cnRpdGlvbndpc2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9zY2FuLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRl Z3kuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9j YWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmls ZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMmYwYTg4ZDNmNzcuLmRkMDRjMjBhY2QyIDEwMDY0 NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0LDYg KzM0LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNhbGlu c3BlY3QgXAogCQlwZ19vdmVyZXhwbGFpbiBcCisJCXBnX3BsYW5fYWR2aWNlIFwKIAkJcGdfcHJl d2FybQlcCiAJCXBnX3N0YXRfc3RhdGVtZW50cyBcCiAJCXBnX3N1cmdlcnkJXApkaWZmIC0tZ2l0 IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggZWQzMGVl N2Q2MzkuLmNiNzE4ZGJkYWMwIDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBi L2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTQ4LDYgKzQ4LDcgQEAgc3ViZGlyKCdwZ2NyeXB0bycp CiBzdWJkaXIoJ3BnX2ZyZWVzcGFjZW1hcCcpCiBzdWJkaXIoJ3BnX2xvZ2ljYWxpbnNwZWN0JykK IHN1YmRpcigncGdfb3ZlcmV4cGxhaW4nKQorc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJk aXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKIHN1YmRpcigncGdfc3RhdF9z dGF0ZW1lbnRzJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9y ZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMTlhMTQyNTMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvcGdwYV9wYXJz ZXIuaAorL3BncGFfcGFyc2VyLmMKKy9wZ3BhX3NjYW5uZXIuYwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZp bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkNGM1NTlhZWQ4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpAQCAtMCww ICsxLDUwIEBACisjIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworTU9EVUxFX2Jp ZyA9IHBnX3BsYW5fYWR2aWNlCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19wbGFuX2Fk dmljZS5vIFwKKwlwZ3BhX2FzdC5vIFwKKwlwZ3BhX2NvbGxlY3Rvci5vIFwKKwlwZ3BhX2lkZW50 aWZpZXIubyBcCisJcGdwYV9qb2luLm8gXAorCXBncGFfb3V0cHV0Lm8gXAorCXBncGFfcGFyc2Vy Lm8gXAorCXBncGFfcGxhbm5lci5vIFwKKwlwZ3BhX3NjYW4ubyBcCisJcGdwYV9zY2FubmVyLm8g XAorCXBncGFfdHJvdmUubyBcCisJcGdwYV93YWxrZXIubworCitFWFRFTlNJT04gPSBwZ19wbGFu X2FkdmljZQorREFUQSA9IHBnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBn X3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4iCisKK1JF R1JFU1MgPSBnYXRoZXIgam9pbl9vcmRlciBqb2luX3N0cmF0ZWd5IHBhcnRpdGlvbndpc2Ugc2Nh bgorVEFQX1RFU1RTID0gMQorCitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2VyLmggcGdwYV9wYXJz ZXIuYyBwZ3BhX3NjYW5uZXIuYworCisjIHJlcXVpcmVkIGZvciAwMDFfcmVncmVzcy5wbAorUkVH UkVTU19TSExJQj0kKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQo RExTVUZGSVgpCitleHBvcnQgUkVHUkVTU19TSExJQgorCitpZmRlZiBVU0VfUEdYUworUEdfQ09O RklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2lu Y2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQordG9w X2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitl bmRpZgorCisjIFNlZSBub3RlcyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJvdXQg dGhlIGZvbGxvd2luZyB0d28gcnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMKKwl0 b3VjaCAkQAorCitwZ3BhX3BhcnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2UgdGhl c2UgZGVwZW5kZW5jaWVzIHRvIGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGluZm8g YnVpbHQ6CitwZ3BhX3BhcnNlci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NTkw Y2QwM2NlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1F CkBAIC0wLDAgKzEsMjc1IEBACitjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQbGFu IEFkdmljZQorPT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmktbGFu Z3VhZ2UgZm9yICJwbGFuIGFkdmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNlcnRh aW4ga2V5IHBsYW5uZXIgZGVjaXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcgcGxh bgorc3RhYmlsaXR5IChteSBwcmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxpa2Ug dG8ga2VlcCBnZXR0aW5nIGEKK3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJzIHRv IGV4cGVyaW1lbnQgd2l0aCBwbGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBieSB0 aGUgb3B0aW1pemVyLiBOb24tZ29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5IHBv c3NpYmxlIHBsYW5uZXIgZGVjaXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24gb2Yg cGxhbnMKK3RoYXQgdGhlIG9wdGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRoYW4g Y29zdC4gKFRoZXJlIGlzIHNvbWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0IGV4 YWN0bHkgdGhpcyBub24tZ29hbCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVyYXRp b24gZW50aXJlbHkgZm9yIGEgY2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Uga25v dyBpdCBjYW5ub3Qgd2luIG9uIGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFzZWQg cmVqZWN0aW9uCitldmVuIHRob3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKworR2Vu ZXJhbGx5LCBwbGFuIGFkdmljZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBh ZHZpY2UgaXRlbXMsCitlYWNoIG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBhIGxp c3Qgb2YgYWR2aWNlIHRhcmdldHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFTSF9K T0lOKGJhckBzcykiIGNvbnRhaW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qgb2Yg d2hpY2ggYXBwbGllcyB0aGUgU0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25kIG9m Cit3aGljaCBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlzIHNp bXBsZSBleGFtcGxlLCBlYWNoCit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlvbjsg c2VlICJSZWxhdGlvbiBJZGVudGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFsc28g YmUgYXBwbGllZCB0byBncm91cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNIX0pP SU4oYmF6IChibGV0Y2ggcXV1eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRoZSBz aW5nbGUKK3JlbGF0aW9uIGlkZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1pdGVt IGxpc3QgY29udGFpbmluZworImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwgdGhp cyBtb2R1bGUga25vd3MgYm90aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBhbgor YWxyZWFkeS1leGlzdGluZyBwbGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJpbmcg ZnV0dXJlIHBsYW5uaW5nCitjeWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRlZCB0 byBiZSAicm91bmQtdHJpcCBzYWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBhIHBs YW4gYW5kIHRoZW4gZmVlZCB0aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNsZSwg ZWFjaCBwaWVjZSBvZiBhZHZpY2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8gdGhl IGV4YWN0bHkgdGhlCitzYW1lIHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2FzIGdl bmVyYXRlZCB3aXRob3V0IGFtYmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxkIHN1 Y2Nlc2Z1bGx5IGVuZm9yY2UgdGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVkIHRv IGl0IGJlaW5nIGdlbmVyYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVyZSBp cyBubworaW50ZW50aW9uIHRoYXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVzZW5j ZSBvZiBpbnRlcnZlbmluZyBEREw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRpZXMg b2YgYSBmdW5jdGlvbiBzbyB0aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVkLCBv ciBpZiB5b3UgZHJvcCBhbiBpbmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBhZHZp Y2UKK2lzbid0IGdvaW5nIHRvIHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKworVGhp cyBtb2R1bGUgYWltcyB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3ZpZGVk IGFkdmljZSB3aXRob3V0CityZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJlIGdv b2QgYWR2aWNlIG9yIGJhZCBhZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFkdmlj ZSwgd2hldGhlciBkZXJpdmVkIGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitvciBt YW51YWxseSB3cml0dGVuLCB0aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRoaXMg YXMgdXNlciBlcnJvciwKK25vdCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMgbGlr ZWx5IHRoYXQgYXBwbHlpbmcgYWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRydWx5 IHJlcXVpcmVkIHRvIGF2b2lkIHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVsIHN0 cmF0ZWd5IHRoYW4gYXBwbHlpbmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMgYXJl IGZyZWUKK3RvIGV4cGVyaW1lbnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhpbmsg YmVzdC4KKworUmVsYXRpb24gSWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1Vu aXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0YWlu IHBpZWNlIG9mCithZHZpY2UgYXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91ciBi YXNpYyBhcHByb2FjaCBpcyB0byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGluZyBw b2ludCwgYW5kIHRoZW4gZGlzYW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhhdCBz YW1lIHJlbGF0aW9uIGFsaWFzIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQgY2Fu IGFwcGVhciBpbiBtb3JlIHRoYW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFyIG1v cmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4gYmFy KSB4IEpPSU4gZm9vLgorCiszLiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitBbnkg Y29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4gIFRo ZXJlZm9yZSwgb3VyCitnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlz OgorCithbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFydGl0 aW9uX25hbWVAcGxhbl9uYW1lCisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFsaWFz X25hbWUgYXJlIG9wdGlvbmFsIGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBXaGVu IGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCittdXN0 IGFsc28gYmUgb21pdHRlZC4gT2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9yaW5n IGNoaWxkcmVuIG9mCitwYXJ0aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQgb2Nj dXJyZW5jZSBudW1iZXIgaXMgMSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUg cGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZv ciBjaGlsZHJlbiBvZiBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRo ZQorcGFydGl0aW9uX3NjaGVtYSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMg YSBwYXJ0aXRpb25fbmFtZSwKK2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRo ZSBuYW1lIGFuZCBvbWl0IHRoZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9y IHRoZSB0b3AtbGV2ZWwgUGxhbm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQor CitGb3IgbWFueSB0eXBlcyBvZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3Np YmxlOyBmb3IgaW5zdGFuY2UsCithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEg c3VicXVlcnkgc2Nhbi4gV2hpbGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZz IHByb2Nlc3NpbmcsIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQor YmFzaWMgYXBwcm9hY2ggZXhpc3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkg dG8gcmVsYXRpb25zLCB3aGljaAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKwor V2UgdGVuZCB0byB0aGluayBvZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9u LCBhbmQgdGhhdCdzCitub3JtYWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBi ZS4gRm9yIGluc3RhbmNlLCBpZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRo aW5nIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4g ZWZmZWN0LCBpcyBhIGRlZ2VuZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29s bGFwc2VkCitwb3J0aW9uIG9mIHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJs ZSB0byBpbmplY3QgYSBjdXN0b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2Vz IGFuIGVudGlyZSBqb2luLiBJZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMs IGl0IHdvdWxkIHRhcmdldCBzZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQK K2J5IGN1cmx5IGJyYW5jZXMsIGUuZy4gU09NRV9TT1JUX09GX1NDQU4oZm9vIChiYXIgYmF6KSkg d291bGQgbWVhbiB0aGF0IHRoZQordGhlIGdpdmVuIHNjYW4gdHlwZSB3b3VsZCBiZSB1c2VkIGZv ciBmb28gYXMgYSBzaW5nbGUgcmVsYXRpb24gYW5kIGFsc28gdGhlCitjb21iaW5hdGlvbiBvZiBi YXIgYW5kIGJheiBhcyBhIGpvaW4gcHJvZHVjdC4gV2UgaGF2ZSBubyBzdWNoIGNhc2VzIGF0Citw cmVzZW50LgorCitGb3IgaW5kZXggYW5kIGluZGV4LW9ubHkgc2NhbnMsIGJvdGggdGhlIHJlbGF0 aW9uIGJlaW5nIHNjYW5uZWQgYW5kIHRoZQoraW5kZXggb3IgaW5kZXhlcyBiZWluZyB1c2VkIG11 c3QgYmUgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZSwgSU5ERVhfU0NBTihmb28KK2Zvb19hX2lkeCBi YXIgYmFyX2JfaWR4KSBpbmRpY2F0ZXMgdGhhdCBhbiBpbmRleCBzY2FuIChub3QgYW4gaW5kZXgt b25seQorc2Nhbikgc2hvdWxkIGJlIHVzZWQgb24gZm9vX2FfaWR4IHdoZW4gc2Nhbm5pbmcgZm9v LCBhbmQgdGhhdCBhbiBpbmRleCBzY2FuCitzaG91bGQgYmUgdXNlZCBvbiBiYXJfYl9pZHggd2hl biBzY2FubmluZyBiYXIuCisKK0JpdG1hcCBoZWFwIHNjYW5zIGFsbG93IGZvciBhIG1vcmUgY29t cGxpY2F0ZWQgaW5kZXggc3BlY2lmaWNhdGlvbi4gRm9yCitleGFtcGxlLCBCSVRNQVBfSEVBUF9T Q0FOKGZvbyAmJihmb29fYV9pZHggfHwoZm9vX2JfaWR4IGZvb19jX2lkeCkpKSBzYXlzCit0aGF0 IGZvbyBzaG91bGQgYmUgc2Nhbm5lZCB1c2luZyBhIEJpdG1hcEhlYXBTY2FuIG92ZXIgYSBCaXRt YXBBbmQgYmV0d2VlbgorZm9vX2FfaWR4IGFuZCB0aGUgcmVzdWx0IG9mIGEgQml0bWFwT3IgYmV0 d2VlbiBmb29fYl9pZHggYW5kIGZvb19jX2lkeC4KKworWFhYOiBDdXJyZW50bHksIEJJVE1BUF9I RUFQX1NDQU4gZG9lcyBub3QgZW5mb3JjZSB0aGUgaW5kZXggc3BlY2lmaWNhdGlvbiwKK2JlY2F1 c2UgdGhlIGF2YWlsYWJsZSBob29rcyBhcmUgaW5zdWZmaWNpZW50IHRvIGRvIHNvLiBJdCdzIHBv c3NpYmxlIHRoYXQKK3RoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZXhjbHVkZSB0aGUgaW5kZXgg c3BlY2lmaWNhdGlvbiBhbHRvZ2V0aGVyIGFuZAorc2ltcGx5IGluc2lzdCB0aGF0IHNvbWUgc29y dCBvZiBiaXRtYXAgaGVhcCBzY2FuIGlzIHVzZWQ7IGFsdGVybmF0aXZlbHksCit3ZSBuZWVkIGJl dHRlciBob29rcy4KKworSm9pbiBPcmRlciBBZHZpY2UKKz09PT09PT09PT09PT09PT09CisKK1Ro ZSBKT0lOX09SREVSIHRhZyBzcGVjaWZpZXMgdGhlIG9yZGVyIGluIHdoaWNoIHNldmVyYWwgdGFi bGVzIHRoYXQgYXJlCitwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbSBzaG91bGQgYmUgam9p bmVkLiBFYWNoIHN1YnF1ZXJ5IChleGNlcHQgZm9yCit0aG9zZSB0aGF0IGFyZSBpbmxpbmVkKSBp cyBhIHNlcGFyYXRlIGpvaW4gcHJvYmxlbS4gV2l0aGluIGEgc3VicXVlcnksCitwYXJ0aXRpb253 aXNlIGpvaW5zIGNhbiBjcmVhdGUgYWRkaXRpb25hbCwgc2VwYXJhdGUgam9pbiBwcm9ibGVtcy4g SGVuY2UsCitxdWVyaWVzIGludm9sdmluZyBwYXJ0aXRpb253aXNlIGpvaW5zIG1heSB1c2UgSk9J Tl9PUkRFUigpIG1hbnkgdGltZXMuCisKK1dlIHRha2UgdGhlIGNhbm9uaWNhbCBqb2luIHN0cnVj dHVyZSB0byBiZSBhbiBvdXRlci1kZWVwIHRyZWUsIHNvCitKT0lOX09SREVSKHQxIHQyIHQzKSBz YXlzIHRoYXQgdDEgaXMgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHNob3VsZCBiZSBqb2luZWQKK2Zp cnN0IHRvIHQyIGFuZCB0aGVuIHRvIHQzLiBJZiB0aGUgam9pbiBwcm9ibGVtIGludm9sdmVzIGFk ZGl0aW9uYWwgdGFibGVzLAordGhleSBjYW4gYmUgam9pbmVkIGluIGFueSBvcmRlciBhZnRlciB0 aGUgam9pbiBiZXR3ZWVuIHQxLCB0MiwgYW5kIHQzIGhhcworYmVlbiBjb25zdHJ1Y3R1cmVkLiBH ZW5lcmF0ZWQgam9pbiBhZHZpY2UgYWx3YXlzIG1lbnRpb25zIGFsbCB0YWJsZXMKK2luIHRoZSBq b2luIHByb2JsZW0sIGJ1dCBtYW51YWxseSB3cml0dGVuIGpvaW4gYWR2aWNlIG5lZWQgbm90IGRv IHNvLgorCitGb3IgdHJlZXMgd2hpY2ggYXJlIG5vdCBvdXRlci1kZWVwLCBwYXJlbnRoZXNlcyBj YW4gYmUgdXNlZC4gRm9yIGV4YW1wbGUsCitKT0lOX09SREVSKHQxICh0MiB0MykpIHNheXMgdGhh dCB0aGUgdG9wLWxldmVsIGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlCitvdXRlciBzaWRlIGFu ZCBhIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUuIFRoYXQgam9pbiBz aG91bGQKK2JlIGNvbnN0cnVjdGVkIHNvIHRoYXQgdDIgaXMgb24gdGhlIG91dGVyIHNpZGUgYW5k IHQzIGlzIG9uIHRoZSBpbm5lciBzaWRlLgorCitJbiBzb21lIGNhc2VzLCBpdCdzIG5vdCBwb3Nz aWJsZSB0byBmdWxseSBzcGVjaWZ5IHRoZSBqb2luIG9yZGVyIGluIHRoaXMgd2F5LgorRm9yIGV4 YW1wbGUsIGlmIHQyIGFuZCB0MyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHNpbmdsZSBjdXN0b20g c2NhbiBvciBmb3JlaWduCitzY2FuLCBvciBpZiBhIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBiZWlu ZyBwZXJmb3JtZWQgYmV0d2VlbiB0aG9zZSB0YWJsZXMsIHRoZW4KK2l0J3MgaW1wb3NzaWJsZSB0 byBzYXkgdGhhdCB0MiBpcyB0aGUgb3V0ZXIgdGFibGUgYW5kIHQzIGlzIHRoZSBpbm5lciB0YWJs ZSwKK29yIHRoZSBvdGhlciB3YXkgYXJvdW5kOyBpdCdzIGp1c3QgdW5kZWZpbmVkLiBJbiBzdWNo IGNhc2VzLCB3ZSBnZW5lcmF0ZQoram9pbiBhZHZpY2UgdGhhdCB1c2VzIGN1cmx5IGJyYWNlcywg aW50ZW5kaW5nIHRvIGluZGljYXRlIGEgbGFjayBvZiBvcmRlcmluZzoKK0pPSU5fT1JERVIodDEg e3QyIHQzfSkgc2F5cyB0aGF0IHRoZSB1cHBlcm1vc3Qgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0 aGUgb3V0ZXIKK3NpZGUgYW5kIHNvbWUga2luZCBvZiBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9u IHRoZSBpbm5lciBzaWRlLCBidXQgd2l0aG91dAorc2F5aW5nIGhvdyB0aGF0IGpvaW4gbXVzdCBi ZSBwZXJmb3JtZWQgb3IgYW55dGhpbmcgYWJvdXQgd2hpY2ggcmVsYXRpb24gc2hvdWxkCithcHBl YXIgb24gd2hpY2ggc2lkZSBvZiB0aGUgam9pbiwgb3IgZXZlbiB3aGV0aGVyIHRoaXMga2luZCBv ZiBqb2luIGhhcyBzaWRlcy4KKworSm9pbiBTdHJhdGVneSBBZHZpY2UKKz09PT09PT09PT09PT09 PT09PT09CisKK1RhZ3Mgc3VjaCBhcyBORVNURURfTE9PUF9QTEFJTiBzcGVjaWZ5IHRoZSBtZXRo b2QgdGhhdCBzaG91bGQgYmUgdXNlZCB0bworcGVyZm9ybSBhIGNlcnRhaW4gam9pbi4gTW9yZSBz cGVjaWZpY2FsbHksIE5FU1RFRF9MT09QX1BMQUlOKHggKHkgeikpIHNheXMKK3RoYXQgdGhlIHBs YW4gc2hvdWxkIHB1dCB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcyAieCIgb24gdGhl IGlubmVyCitzaWRlIG9mIGEgcGxhaW4gbmVzdGVkIGxvb3AgKG9uZSB3aXRob3V0IG1hdGVyaWFs aXphdGlvbiBvciBtZW1vaXphdGlvbikKK2FuZCB0aGF0IGl0IHNob3VsZCBhbHNvIHB1dCBhIGpv aW4gYmV0d2VlbiB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcworInkiIGFuZCB0aGUg cmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcyAieiIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBu ZXN0ZWQKK2xvb3AuIEhlbmNlLCBmb3IgYW4gTi10YWJsZSBqb2luIHByb2JsZW0sIHRoZXJlIHdp bGwgYmUgTi0xIHBpZWNlcyBvZiBqb2luCitzdHJhdGVneSBhZHZpY2U7IG5vIGpvaW4gc3RyYXRl Z3kgYWR2aWNlIGlzIHJlcXVpcmVkIGZvciB0aGUgb3V0ZXJtb3N0Cit0YWJsZSBpbiB0aGUgam9p biBwcm9ibGVtLgorCitDb25zaWRlcmluZyB0aGF0IHdlIGhhdmUgYm90aCBqb2luIG9yZGVyIGFk dmljZSBhbmQgam9pbiBzdHJhdGVneSBhZHZpY2UsCitpdCBtaWdodCBzZWVtIG5hdHVyYWwgdG8g c2F5IHRoYXQgTkVTVEVEX0xPT1BfUExBSU4oeCkgc2hvdWxkIGJlIHJlZGVmaW5lZAordG8gbWVh biB0aGF0IHggc2hvdWxkIGFwcGVhciBieSBpdHNlbGYgb24gb25lIHNpZGUgb3IgdGhlIG90aGVy IG9mIGEgbmVzdGVkCitsb29wLCByYXRoZXIgdGhhbiBzcGVjaWZpY2FsbHkgb24gdGhlIGlubmVy IHNpZGUsIGJ1dCB0aGlzIGRlZmluaXRpb24gYXBwZWFycwordXNlbGVzcyBpbiBwcmFjdGljZS4g SXQgZ2l2ZXMgdGhlIHBsYW5uZXIgdG9vIG11Y2ggZnJlZWRvbSB0byBkbyB0aGluZ3MgdGhhdAor YmVhciBsaXR0bGUgcmVzZW1ibGFuY2UgdG8gd2hhdCB0aGUgdXNlciBwcm9iYWJseSBoYWQgaW4g bWluZC4gVGhpcyBtYWtlcworb25seSBhIGxpbWl0ZWQgYW1vdW50IG9mIHByYWN0aWNhbCBkaWZm ZXJlbmNlIGluIHRoZSBjYXNlIG9mIGEgbWVyZ2Ugam9pbiBvcgordW5wYXJhbWV0ZXJpemVkIG5l c3RlZCBsb29wLCBidXQgZm9yIGEgcGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9vcCBvciBhIGhhc2gK K2pvaW4sIHRoZSB0d28gc2lkZXMgYXJlIHRyZWF0ZWQgdmVyeSBkaWZmZXJlbnRseSBhbmQgc2F5 aW5nIHRoYXQgYSBjZXJ0YWluCityZWxhdGlvbiBzaG91bGQgYmUgaW52b2x2ZWQgaW4gb25lIG9m IHRob3NlIG9wZXJhdGlvbnMgd2l0aG91dCBzYXlpbmcgd2hpY2gKK3JvbGUgaXQgc2hvdWxkIHRh a2UgaXNuJ3Qgc2F5aW5nIG11Y2guCisKK1RoaXMgY2hvaWNlIG9mIGRlZmluaXRpb24gaW1wbGll cyB0aGF0IGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGFsc28gaW1wb3NlcyBzb21lCitqb2luIG9yZGVy IGNvbnN0cmFpbnRzLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBqb2luIGJldHdlZW4gZm9vIGFuZCBi YXIsCitIQVNIX0pPSU4oYmFyKSBpbXBsaWVzIHRoYXQgZm9vIGlzIHRoZSBkcml2aW5nIHRhYmxl LiBPdGhlcndpc2UsIGl0IHdvdWxkCitiZSBpbXBvc3NpYmxlIHRvIHB1dCBiYXIgYmVuZWF0aCB0 aGUgaW5uZXIgc2lkZSBvZiBhIEhhc2ggSm9pbi4KKworTm90ZSB0aGF0LCBnaXZlbiB0aGlzIGRl ZmluaXRpb24sIGl0J3MgcmVhc29uYWJsZSB0byBjb25zaWRlciBkZWxldGluZyB0aGUKK2pvaW4g b3JkZXIgYWR2aWNlIGJ1dCBhcHBseWluZyB0aGUgam9pbiBzdHJhdGVneSBhZHZpY2UuIEZvciBl eGFtcGxlLAorY29uc2lkZXIgYSBzdGFyIHNjaGVtYSB3aXRoIHRhYmxlcyBmYWN0LCBkaW0xLCBk aW0yLCBkaW0zLCBkaW00LCBhbmQgZGltNS4KK1RoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBh ZHZpY2UgbWlnaHQgc3BlY2lmeSBKT0lOX09SREVSKGZhY3QgZGltMSBkaW0zCitkaW00IGRpbTIg ZGltNSkgSEFTSF9KT0lOKGRpbTIgZGltNCkgTkVTVEVEX0xPT1BfUExBSU4oZGltMSBkaW0zIGRp bTUpLgorRGVsZXRpbmcgdGhlIEpPSU5fT1JERVIgYWR2aWNlIGFsbG93cyB0aGUgcGxhbm5lciB0 byByZW9yZGVyIHRoZSBqb2lucworaG93ZXZlciBpdCBsaWtlcyB3aGlsZSBzdGlsbCBmb3JjaW5n IHRoZSBzYW1lIGNob2ljZSBvZiBqb2luIG1ldGhvZC4gVGhpcworc2VlbXMgcG90ZW50aWFsbHkg dXNlZnVsLCBhbmQgaXMgb25lIHJlYXNvbiB3aHkgYSB1bmlmaWVkIHN5bnRheCB0aGF0IGNvbnRy b2xzCitib3RoIGpvaW4gb3JkZXIgYW5kIGpvaW4gbWV0aG9kIGluIGEgc2luZ2xlIGxvY3V0aW9u IHdhcyBub3QgY2hvc2VuLgorCitBZHZpY2UgQ29tcGxldGVuZXNzCis9PT09PT09PT09PT09PT09 PT09CisKK0FuIGVzc2VudGlhbCBndWlkaW5nIHByaW5jaXBsZSBpcyB0aGF0IG5vIGluZmVyZW5j ZSBtYXkgbWFkZSBvbiB0aGUgYmFzaXMKK29mIHRoZSBhYnNlbmNlIG9mIGFkdmljZS4gVGhlIHVz ZXIgaXMgZW50aXRsZWQgdG8gcmVtb3ZlIGFueSBwb3J0aW9uIG9mIHRoZQorZ2VuZXJhdGVkIGFk dmljZSB3aGljaCB0aGV5IGRlZW0gdW5zdWl0YWJsZSBvciBjb3VudGVycHJvZHVjdGl2ZSBhbmQg dGhlCityZXN1bHQgc2hvdWxkIG9ubHkgYmUgdG8gaW5jcmVhc2UgdGhlIGZsZXhpYmlsaXR5IGFm Zm9yZGVkIHRvIHRoZSBwbGFubmVyLgorVGhpcyBtZWFucyB0aGF0IGlmIGFkdmljZSBjYW4gc2F5 IHRoYXQgYSBjZXJ0YWluIG9wdGltaXphdGlvbiBvciB0ZWNobmlxdWUKK3Nob3VsZCBiZSB1c2Vk LCBpdCBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBvcHRpbWl6YXRpb24gb3IK K3RlY2huaXF1ZSBzaG91bGQgbm90IGJlIHVzZWQuIFdlIHNob3VsZCBuZXZlciBhc3N1bWUgdGhh dCB0aGUgYWJzZW5jZSBvZiBhbgoraW5zdHJ1Y3Rpb24gdG8gZG8gYSBjZXJ0YWluIHRoaW5nIG1l YW5zIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBkb25lOyBhbGwKK2luc3RydWN0aW9ucyBtdXN0IGJl IGV4cGxpY2l0LgorCitTZW1pam9pbiBVbmlxdWVuZXNzCis9PT09PT09PT09PT09PT09PT09CisK K0ZhY2VkIHdpdGggYSBzZW1pam9pbiwgdGhlIHBsYW5uZXIgY29uc2lkZXJzIGJvdGggYSBkaXJl Y3QgaW1wbGVtZW50YXRpb24KK2FuZCBhIHBsYW4gd2hlcmUgdGhlIG9uZSBzaWRlIGlzIG1hZGUg dW5pcXVlIGFuZCB0aGVuIGFuIGlubmVyIGpvaW4gaXMKK3BlcmZvcm1lZC4gV2UgZW1pdCBTRU1J Sk9JTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiB0aGlzIHRyYW5zZm9ybWF0aW9uIG9jY3VycworYW5k IFNFTUlKT0lOX05PTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiBpdCBkb2Vzbid0LiBUaGVzZSBpdGVt cyB3b3JrIGxpa2UKK2pvaW4gc3RyYXRlZ3kgYWR2aWNlOiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUg cmVsZXZhbnQgam9pbiBpcyBuYW1lZCwgYW5kIHRoZQorY2hvc2VuIGpvaW4gb3JkZXIgbXVzdCBi ZSBjb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZSBoYXZpbmcgc29tZSBlZmZlY3QuCisKK1hYWDog Q3VycmVudGx5LCBTRU1JSk9JTl9OT05fVU5JUVVFKCkgYWR2aWNlIGlzIGVtaXR0ZWQgaW4gc29t ZSBzaXR1YXRpb25zCit3aGVyZSB0aGUgU0VNSUpPSU5fVU5JUVVFKCkgYXBwcm9hY2ggd2FzIGRl dGVybWluZWQgdG8gYmUgbm9uLXZpYWJsZTsgaWRlYWxseSwKK3dlIHNob3VsZCBhdm9pZCB0aGF0 LgorCitYWFg6IFJpZ2h0IHNlbWlqb2lucyBoYXZlbid0IGJlZW4gcHJvcGVybHkgdGhvdWdodCB0 aHJvdWdoLiBUaGUgYXNzb2NpYXRlZAorY29kZSBwcm9iYWJseSBqdXN0IGRvZXNuJ3Qgd29yay4K KworWFhYOiBTZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBoYXMgbm8gYXV0b21hdGVkIHRlc3Rz IGFuZCBuZWVkIHN1YnN0YW50aWFsbHkKK21vcmUgbWFudWFsIHRlc3RpbmcuCisKK1BhcnRpdGlv bndpc2UKKz09PT09PT09PT09PT0KKworUEFSVElUSU9OV0lTRSgpIGFkdmlzZSBjYW4gYmUgdXNl ZCB0byBzcGVjaWZ5IGJvdGggdGhvc2UgcGFydGl0aW9ud2lzZSBqb2lucword2hpY2ggc2hvdWxk IGJlIHBlcmZvcm1lZCBhbmQgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQ7IHRo ZSBpZGVhCitpcyB0aGF0IGVhY2ggYXJndW1lbnQgdG8gUEFSVElUSU9OV0lTRSBzcGVjaWZpZXMg YSBzZXQgb2YgcmVsYXRpb25zIHRoYXQKK3Nob3VsZCBiZSBzY2FubmVkIHBhcnRpdGlvbndpc2Ug YWZ0ZXIgYmVpbmcgam9pbmVkIHRvIGVhY2ggb3RoZXIgYW5kIG5vdGhpbmcKK2Vsc2UuIEhlbmNl LCBmb3IgZXhhbXBsZSwgUEFSVElUSU9OV0lTRSgodDEgdDIpIHQzKSBzcGVjaWZpZXMgdGhhdCB0 aGUKK3F1ZXJ5IHNob3VsZCBjb250YWluIGEgcGFydGl0aW9ud2lzZSBqb2luIGJldHdlZW4gdDEg YW5kIHQyIGFuZCB0aGF0IHQzCitzaG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndp c2Ugam9pbi4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlbHMKK2luIHRoZSBxdWVyeSwgc3BlY2lm eWluZyBqdXN0IFBBUlRJVElPTldJU0UoKHQxIHQyKSkgd291bGQgaGF2ZSB0aGUgc2FtZQorZWZm ZWN0LCBzaW5jZSB0aGVyZSB3b3VsZCBiZSBubyBvdGhlciByZWxzIHRvIHdoaWNoIHQzIGNvdWxk IGJlIGpvaW5lZCBpbgorYSBwYXJ0aXRpb253aXNlIGZhc2hpb24uCisKK1BhcmFsbGVsIFF1ZXJ5 IChHYXRoZXIsIGV0Yy4pCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFYWNoIGFy Z3VtZW50IHRvIEdBVEhFUigpIG9yIEdBVEhFUl9NRVJHRSgpIGlzIGEgc2luZ2xlIHJlbGF0aW9u IG9yIGFuCitleGFjdCBzZXQgb2YgcmVsYXRpb25zIG9uIHRvcCBvZiB3aGljaCBhIEdhdGhlciBv ciBHYXRoZXIgTWVyZ2Ugbm9kZSwKK3Jlc3BlY3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZC4gRWFj aCBhcmd1bWVudCB0byBOT19HQVRIRVIoKSBpcyBhIHNpbmdsZQorcmVsYXRpb24gdGhhdCBzaG91 bGQgbm90IGFwcGVhciBiZW5lYXRoIGFueSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGU7Cit0 aGF0IGlzLCBwYXJhbGxlbGlzbSBzaG91bGQgbm90IGJlIHVzZWQuCisKK0ltcGxpY2l0IEpvaW4g T3JkZXIgQ29uc3RyYWludHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hl biBKT0lOX09SREVSKCkgYWR2aWNlIGlzIG5vdCBwcm92aWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGpv aW4gcHJvYmxlbSwKK290aGVyIHBpZWNlcyBvZiBhZHZpY2UgbWF5IHN0aWxsIGluY2lkZW50YWxs eSBjb25zdHJhaW50IHRoZSBqb2luIG9yZGVyLgorRm9yIGV4YW1wbGUsIGEgdXNlciB3aG8gc3Bl Y2lmaWVzIEhBU0hfSk9JTigoZm9vIGJhcikpIGlzIGV4cGxpY2l0bHkgc2F5aW5nCit0aGF0IHRo ZXJlIHNob3VsZCBiZSBhIGhhc2ggam9pbiB3aXRoIGV4YWN0bHkgZm9vIGFuZCBiYXIgb24gdGhl IG91dGVyCitzaWRlIG9mIGl0LCBidXQgdGhhdCBhbHNvIGltcGxpZXMgdGhhdCBmb28gYW5kIGJh ciBtdXN0IGJlIGpvaW5lZCB0bworZWFjaCBvdGhlciBiZWZvcmUgZWl0aGVyIG9mIHRoZW0gaXMg am9pbmVkIHRvIGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZSwKK3RoZSBqb2luIHRoZSB1c2VyIGlz IGF0dGVtcHRpbmcgdG8gY29uc3RyYWludCB3b24ndCBhY3R1YWxseSBvY2N1ciBpbiB0aGUKK3F1 ZXJ5LCB3aGljaCBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGUgc3lzdGVtIGhhcyBqdXN0IGRlY2lk ZWQgdG8gaWdub3JlCit0aGUgYWR2aWNlIGFsdG9nZXRoZXIuCisKK0Z1dHVyZSBXb3JrCis9PT09 PT09PT09PQorCitXZSBkb24ndCBoYW5kbGUgY2hvaWNlIG9mIGFnZ3JlZ2F0aW9uOiBpdCB3b3Vs ZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZm9yY2UKK3NvcnRlZCBvciBncm91cGVkIGFnZ3JlZ2F0 aW9uLiBJJ20gZ3Vlc3NpbmcgdGhpcyBjYW4gYmUgbGVmdCB0byBmdXR1cmUgd29yay4KKworTW9y ZSBzZXJpb3VzbHksIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgZWFnZXIgYWdncmVnYXRp b24sIHdoaWNoIGNvdWxkCitoYXZlIGEgbGFyZ2UgaW1wYWN0IG9uIHRoZSBzaGFwZSBvZiB0aGUg cGxhbiB0cmVlLiBYWFg6IFRoaXMgbmVlZHMgc29tZSBzdHVkeQordG8gZGV0ZXJtaW5lIGhvdyBs YXJnZSBhIHByb2JsZW0gaXQgaXMsIGFuZCBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvb25lcgor cmF0aGVyIHRoYW4gbGF0ZXIuCisKK1dlIGRvbid0IG9mZmVyIGFueSBjb250cm9sIG92ZXIgZXN0 aW1hdGVzLCBvbmx5IG91dGNvbWVzLiBJdCBzZWVtcyBsaWtlIGEKK2dvb2QgaWRlYSB0byBpbmNv cnBvcmF0ZSB0aGF0IGFiaWxpdHkgYXQgc29tZSBmdXR1cmUgcG9pbnQsIGFzIHBnX2hpbnRfcGxh bgorZG9lcy4gSG93ZXZlciwgc2luY2UgcHJpbWFyeSBnb2FsIG9mIHRoZSBpbml0aWFsIGRldmVs b3BtZW50IHdvcmsgaXMgdG8gYmUKK2FibGUgdG8gaW5kdWNlIHRoZSBwbGFubmVyIHRvIHJlY3Jl YXRlIGEgZGVzaXJlZCBwbGFuIHRoYXQgd29ya2VkIHdlbGwgaW4KK3RoZSBwYXN0LCB0aGlzIGhh cyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBlZmZvcnQuCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQwMjI0YTJhZWU3Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0wLDAgKzEsMzIw IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxf dHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitT RVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBz ZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CitD UkVBVEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsK Ky0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhh c2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0Uo KGYgZCkpCisoMTQgcm93cykKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBi b3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxh bm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAg ICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNF UV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VR X1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZv cmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2gg cmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBH YXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBv biBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8q IG1hdGNoZWQgKi8KKyAgIEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQp CisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5k aW1faWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVy CisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg R0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BM QUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJvd3MpCisKK0NP TU1JVDsKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24g YnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAvKiBtYXRjaGVkICovCisg ICBOT19HQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZikK KyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBHQVRIRVJfTUVSR0UoZikK KyAgIE5PX0dBVEhFUihkKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGlt X2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShkKSAv KiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGQpCisgICBOT19HQVRIRVIoZikKKygx OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmKSBu b19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBC WSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAg ICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihmKSAvKiBt YXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAg U0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBHQVRI RVIoZikKKyAgIE5PX0dBVEhFUihkKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGlt X2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2Vy cyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3Rf ZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICov CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4o ZiBkKQorICAgR0FUSEVSKGQpCisgICBOT19HQVRIRVIoZikKKygxOSByb3dzKQorCitDT01NSVQ7 CistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHVzZSBhdCBhbGwuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnbm9fZ2F0aGVyKGYgZCknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBK T0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBD b25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3Br ZXkgb24gZ3RfZGltIGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg TUVSR0VfSk9JTl9QTEFJTihmKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJs aWMuZ3RfZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK0NPTU1JVDsK Ky0tIENhbid0IGZvcmNlIEdhdGhlciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2Us IGJ1dCBqdXN0IEdhdGhlciBpcyBPSy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgR2F0aGVyCisgICBEaXNhYmxlZDogdHJ1ZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAt PiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQu aWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAg ICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYg ZCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRI RVIoKGYgZCkpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyCisgICBX b3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQp CisgICBHQVRIRVIoKGYgZCkpCisoMTQgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmU4NzY1MjM3MGMzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApAQCAtMCwwICsxLDI5MiBA QAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21l IGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBUQUJMRSBqb19kaW0y IChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0y LCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19k aW0yOworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0x X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCksCisJZGltMl9pZCBp bnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGcl MTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBqb19mYWN0OworLS0gV2UgZXhwZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5k IHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRpb24gb24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZl LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAgU0VRX1NDQU4oZiBk MiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE2IHJvd3MpCisKKy0tIEZvcmNlIGEgZmV3 IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVu dCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZDEgZDIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZDEgZDIpCisgICBIQVNIX0pPSU4oZDEgZDIpCisgICBTRVFfU0NB TihmIGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFz aAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQyIGQxKQorICAgSEFTSF9KT0lOKGQyIGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkK KyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBk Mi5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGQxLmlkID0gZi5k aW0xX2lkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGYgZDIpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIGYgZDIpCisgICBI QVNIX0pPSU4oZiBkMikKKyAgIFNFUV9TQ0FOKGQxIGYgZDIpCisgICBOT19HQVRIRVIoZiBkMSBk MikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQg PSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hF UkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKChmLmRpbTFfaWQgPSBkMS5pZCkgQU5EIChmLmRpbTJfaWQgPSBkMi5pZCkpCisgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgTWF0 ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQy CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpCisgICBORVNU RURfTE9PUF9NQVRFUklBTElaRShkMikKKyAgIEhBU0hfSk9JTihkMikKKyAgIFNFUV9TQ0FOKGYg ZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitDT01NSVQ7CistLSBU aGUgdW51c3VhbCBmb3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZl bnQgdGhlIHF1ZXJ5CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBz b21lIG90aGVyIGpvaW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5z IHdpdGggYSBqb2luIHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpP SU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIu aWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9p ZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAg ICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVS KGQxIGYgZDIpCisoMTggcm93cykKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNl IHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBu b3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhl IHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitC RUdJTjsKKy0tIFhYWDogVGhlIGFkdmljZSBmZWVkYmFjayBzYXlzICdwYXJ0aWFsbHkgbWF0Y2hl ZCcgaGVyZSB3aGljaCBpc24ndCBleGFjdGx5CistLSB3cm9uZyBnaXZlbiB0aGUgd2F5IHRoYXQg ZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBjb2RlLCBidXQgaXQncyBhdCB0aGUgdmVyeQorLS0gbGVh c3QgY29uZnVzaW5nLiBTb21ldGhpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGltcHJvdmVkIGhlcmUu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGlt MSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9p ZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQor ICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVM TCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBEaXNhYmxlZDogdHJ1ZQorICAg ICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCArIDApKSkKKyAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDEgZDIpIC8q IHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfUExB SU4oZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjEg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYg ZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIg T04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBm LmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAg TWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRpbTJfaWQgKyAwKSkg PSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQy LmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQyIGQxKQorICAgTUVS R0VfSk9JTl9QTEFJTihkMikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VR X1NDQU4oZiBkMiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBmIGQxKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJ SU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCAr IDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5V TEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0g Zi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9p bgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCArIDAp KSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCAr IDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4o ZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkK KyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIwIHJvd3MpCisKK0NPTU1JVDsKKy0tIFhYWDogYWRk IHRlc3RzIGZvciBqb2luIG9yZGVyIHByZWZpeCBtYXRjaGluZworLS0gWFhYOiBqb2luX29yZGVy KGp1c3RvbmVyZWwpIHNob3VsZG4ndCByZXBvcnQgcGFydGlhbGx5IG1hdGNoZWQKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MWVlMjZhMzM3YQotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQK QEAgLTAsMCArMSwyOTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2Vy aWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsK K0NSRUFURSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQg aW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcs IChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVgg am9pbl9mYWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBq b2luX2ZhY3Q7CistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVmYXVsdC4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBv biBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2RpbSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBI QVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTAgcm93 cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9k aW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2Vw dCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNl IHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxs CistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihkKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pP SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpF KGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIERpc2FibGVkOiB0cnVlCisgICBNZXJnZSBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9p ZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBv biBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGQpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NB TihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25k OiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2Rp bV9pZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtl eSBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BM QUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMu am9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RF RF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklB TElaRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKQorICAgU0VRX1NDQU4oZiBk KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2Nh biBvbiBqb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZi5k aW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNU RURfTE9PUF9NRU1PSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkKKyAgIFNFUV9T Q0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRI RVIoZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBOb3cgdHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1l dGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFibGUuIEFsbCBv ZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChk LmlkID0gZi5kaW1faWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIEhBU0hfSk9JTihmKQorICAgU0VRX1NDQU4o ZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBm CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikK KyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9p bl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkK KygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pP SU5fUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRp bV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0g ZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3Qg ZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihmKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBN RVJHRV9KT0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkg ZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklB TElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRl cjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAt PiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5PX0dBVEhF UihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2RpbSBkCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBkLmlkCisgICAg ICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09Q X01FTU9JWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKQorICAgU0VRX1NDQU4oZCkK KyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNU RURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAg ICAgSW5kZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgU0VR X1NDQU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5P X0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuJ3QgZm9yY2UgYSBm b3JlaWduIGpvaW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsIGJlY2F1c2UgdGhleQorLS0gYXJlbid0 IGZvcmVpZ24gdGFibGVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgU2VxIFNjYW4gb24g am9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9p bl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBGT1JFSUdOX0pPSU4oKGYgZCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVE X0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpv aW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEzIHJvd3MpCisKK0NPTU1JVDsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9y Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTZmNTU0YmYyMzkKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2Nv bGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2NSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2Fk dmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKy0tIFRyeSBjbGVhcmluZyBh ZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVj dGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gU2V0IGEg c21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQuCitT RVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CistLSBTZXQgdXAg YSBkdW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBr ZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxf d29ya2VycyA9IDApOworLS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJPTSBkdW1teV90YWJs ZSBhLCBkdW1teV90YWJsZSBiOworIGEgfCBiIHwgYSB8IGIgCistLS0rLS0tKy0tLSstLS0KKygw IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisgYSB8IGIgCistLS0rLS0tCiso MCByb3dzKQorCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRl c3QgcXVlcnkuCitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisgICAgICAgICBhZHZpY2UgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3RhYmxlKSArCisgTk9f R0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmlj ZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdf Y2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0 aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZp Y2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIwMDA7CistLSBQdXNoIGEgYnVuY2ggb2YgcXVl cmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4y MDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExP T1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVD VCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgY291bnQg CistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUs IHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0 aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRf bG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGYwZjA1NTMxZDUKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CkBAIC0w LDAgKzEsMjQzIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRy dWU7CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQs IHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MWEg UEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElPTiBP RiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQxIEZP UiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywg J3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRBQkxFIHB0MiAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZB TFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAo MTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRv ICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBn LCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVN IEFOQUxZWkUgcHQyOworQ1JFQVRFIFRBQkxFIHB0MyAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYiBQ QVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2MgUEFSVElUSU9O IE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MyAoaWQsIGRpbTMsIHZhbDMpCisJ U0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MzsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZh bG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0 Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAo MTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00g KDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFu b3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQg PSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0g MSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQz XzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5 IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlk KQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8z LmlkID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJf MworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQz XzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIv cHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JE RVIocHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBK T0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFj KQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBw dDEvcHVibGljLnB0MWMpCisgICBIQVNIX0pPSU4ocHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMu cHQzYiBwdDMvcHVibGljLnB0M2MpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQzL3B1 YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGlj LnB0MmMgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVi bGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9w dWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBw dDMpKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1 YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGlj LnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCiso NDcgcm93cykKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0 IHBhcnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQ QVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0Mi5pZCkKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFi IHB0MV8yCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNo IENvbmQ6IChwdDIuaWQgPSBwdDMuaWQpCisgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgUEFSVElUSU9OV0lTRShwdDEpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJ U0UocHQyKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MykgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQxIChwdDIgcHQzKSkK KyAgIEhBU0hfSk9JTihwdDMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9w dWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1Ymxp Yy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisg ICAgcHQzL3B1YmxpYy5wdDNjKQorICAgUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MykKKyAgIE5P X0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBw dDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQwIHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0 MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlk CisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkKKyAgIC0+ICBBcHBlbmQKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8xLmlkID0g cHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzIuaWQgPSBwdDJfMi5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMy5pZCA9IHB0Ml8zLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAg QXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9 IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lT RShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEpCisgICBKT0lOX09SREVSKHB0MS9w dWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQx YyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtwdDEgcHQyfSBwdDMpCisgICBIQVNI X0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQz KQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGlj LnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQy YyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQzL3B1YmxpYy5wdDNjKQor ICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMu cHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAg IHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJs aWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKworQ09NTUlUOworLS0gQ2FuJ3Qg Zm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQgdGFibGUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQx IHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNtYXRjaC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERp c2FibGVkOiB0cnVlCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQx YSBwdDFfMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDFjIHB0MV8zCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYV9wa2V5IG9uIHB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2hf MQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgcHRtaXNtYXRjaGJfcGtleSBvbiBwdG1pc21hdGNoYiBwdG1pc21h dGNoXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0MS5pZCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSkgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihw dDEgcHRtaXNtYXRjaCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0bWlzbWF0Y2gpCisgICBTRVFf U0NBTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAg IElOREVYX1NDQU4ocHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGEgcHVibGljLnB0bWlzbWF0 Y2hhX3BrZXkKKyAgICBwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYiBwdWJsaWMucHRtaXNt YXRjaGJfcGtleSkKKyAgIFBBUlRJVElPTldJU0UocHQxIHB0bWlzbWF0Y2gpCisgICBOT19HQVRI RVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMKKyAgICBw dG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNo YikKKygyMiByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL3NjYW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9z Y2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTgwZGU3OGQ4 MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3Nj YW4ub3V0CkBAIC0wLDAgKzEsNzU3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAu MTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsK K1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAo YSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8 fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2Fu X3RhYmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNj YW5fdGFibGU7CistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICBRVUVSWSBQTEFOICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDQgcm93cykKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93 cykKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJv d3MpCisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOwor ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1h cCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYiA+ICdzb21lIHRl eHQgOCc6OnRleHQpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9iCisg ICAgICAgICBJbmRleCBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX2IpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIFRJRCBz Y2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBv biBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQg PiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFJhbmdl IFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkg QU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBU SURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQor CistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2Fu IHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFi bGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYiA+ICdz b21lIHRleHQgOCc6OnRleHQpCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJs ZV9iCisgICAgICAgICBJbmRleCBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9iKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQ X0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX2IpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6IChj dGlkID0gJygwLDEpJzo6dGlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4o c2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJ RF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgdG8gZm9yY2UgYSBmdWxsIHNj YW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCistLSBvZiB0 aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBjb3VsZCBw b3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhlIHBsYW5u ZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBkdWUgdG8g dGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl OworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09O TFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQ X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSBhZ2FpbiB0byBm b3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NB TgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0 IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNs dWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PiAwOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgRmlsdGVyOiAo YSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAw OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNo ZWNrIENvbmQ6IChhID4gMCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxl X3BrZXkKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDkgcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9v a3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0IHdlCistLSBjYW4ndCBmb3JjZSBpdCB0 byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0KQorLS0gb3Ig YSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90 YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjaWJseSBk b3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBjYW4n dAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRoZSBwbGFubmVyIHRoaW5rcyBp cyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElO REVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0 aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2Nh biwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3Nz aWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGIgPiAnc29t ZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8q IG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1J VDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIHJhdGhlciB0 aGFuIGEgVElEIHNjYW4gb3IKKy0tIFRJRCByYW5nZSBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBj dGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUKKyAgIEZpbHRlcjogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAn KDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjog KChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgbW9yZSBjb21w bGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBTaG91bGQgc3RpbGwg d29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEJ1dCBub3QgaWYgd2UgbWVudGlvbiB0aGUgd3Jvbmcg c2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBJdCdzIE9LIHRvIHJl cGVhdCB0aGUgc2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8q IG1hdGNoZWQgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDggcm93cykKKworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlz IGV2ZW4gbm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBUZXN0 IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBP bmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5vdGhpbmcp IC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBP bmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENv bmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4obm90aGlu ZyB3aGF0c29ldmVyKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0 Y2hlZCwgaW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSAvKiBub3QgbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K0NPTU1JVDsKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFu Y2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lO IHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBP TiBnID0gcy5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9p bgorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNj YW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChhID0gZy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUgc18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJ TihzIHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5IHMjMiBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDEyIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nlcmllcygx LDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9J TiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4K KyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0gcy5hKQor ICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzXzEK KyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4ocykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMjMikKKyAgIEhBU0hf Sk9JTihzKQorICAgU0VRX1NDQU4ocykKKyAgIElOREVYX1NDQU4ocyMyIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFz aCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAg ICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFTSF9KT0lO KHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDE3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocykgU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBK T0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAoZy5nID0gc18x LmEpCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMu YSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUg cworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHNfMQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0Y2hlZCAqLworICAg U0VRX1NDQU4ocyMyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihnIHMgcyMyKQorICAgSEFTSF9KT0lOKHMgcyMyKQorICAgU0VRX1NDQU4ocyBz IzIpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBv dXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNSByb3dzKQorCitCRUdJ TjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyog bm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNA eCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAeCkKKyg3IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbm90IG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1l ZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1l ZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5 LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHNAeCkKKyg3IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CisgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KSAvKiBub3Qg bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B1bm5h bWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B1bm5h bWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBv bmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFt ZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkg eDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVk X3N1YnF1ZXJ5KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B4 KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsK KyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KQorICAgTk9fR0FUSEVS KHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZGRkYjEyY2FlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKQEAgLTAsMCArMSw1OSBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQsIGFuZCBzbyBpcyBh biBlbXB0eSB0YXJnZXQgbGlzdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CistLSBUZXN0IGFzc29ydGVk IHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0 cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91 bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAg U0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKKy0tIFN5bnRheCBlcnJvcnMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUVVFTlRJ QUxfU0NBTih4KSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJv ciBhdCBvciBuZWFyICJTRVFVRU5USUFMX1NDQU4iCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4iCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2Ug YWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRl ciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIiCitERVRBSUw6 ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgcXVvdGVkIGlkZW50aWZpZXIg YXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTigjIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3lu dGF4IGVycm9yIGF0IG9yIG5lYXIgIiMiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygp JzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiOiAiKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJy b3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKK0VS Uk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2Ui OiAiMTIzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0 IG9yIG5lYXIgIjEyMyIKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICcvKiovJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8p LyoqKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hf Sk9JTigvKngqL3kpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAq LyBIQVNIX0pPSU4oeS8vKngqL3opJzsKKy0tIFVudGVybWluYXRlZCBjb21tZW50cy4KK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBw YXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICIvKiIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVuZCBvZiBpbnB1dAorU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzJzsKK0VS Uk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2Ui OiAiSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBh ZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVuZCBvZiBpbnB1dAorLS0gTmVzdGVkIGNv bW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwg YW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyovKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8qIHN0dWZmICovKi8nOwor RVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmlj ZSI6ICIvKi8qIHN0dWZmICovKi8iCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBz eW50YXggZXJyb3IgYXQgb3IgbmVhciAiKiIKKy0tIEZvcmVpZ24gam9pbiByZXF1aXJlcyBtdWx0 aXBsZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Rk9SRUlHTl9KT0lOKGEpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKGEpIgorREVUQUlMOiAgQ291bGQg bm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUg dGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBuZWFyICIpIgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkZPUkVJR05fSk9JTigo YSkpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdl dHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBu ZWFyICIpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjM0NTJlNWFkNDhlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDcwIEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitw Z19wbGFuX2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19wbGFuX2FkdmljZS5jJywKKyAg J3BncGFfYXN0LmMnLAorICAncGdwYV9jb2xsZWN0b3IuYycsCisgICdwZ3BhX2lkZW50aWZpZXIu YycsCisgICdwZ3BhX2pvaW4uYycsCisgICdwZ3BhX291dHB1dC5jJywKKyAgJ3BncGFfcGxhbm5l ci5jJywKKyAgJ3BncGFfc2Nhbi5jJywKKyAgJ3BncGFfdHJvdmUuYycsCisgICdwZ3BhX3dhbGtl ci5jJywKKykKKworcGdwYV9zY2FubmVyID0gY3VzdG9tX3RhcmdldCgncGdwYV9zY2FubmVyJywK KyAgaW5wdXQ6ICdwZ3BhX3NjYW5uZXIubCcsCisgIG91dHB1dDogJ3BncGFfc2Nhbm5lci5jJywK KyAgY29tbWFuZDogZmxleF9jbWQsCispCitnZW5lcmF0ZWRfc291cmNlcyArPSBwZ3BhX3NjYW5u ZXIKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCisKK3BncGFfcGFyc2Vy ID0gY3VzdG9tX3RhcmdldCgncGdwYV9wYXJzZXInLAorICBpbnB1dDogJ3BncGFfcGFyc2VyLnkn LAorICBrd2FyZ3M6IGJpc29uX2t3LAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9wYXJz ZXIudG9fbGlzdCgpCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHBncGFfcGFyc2VyCisKK2lm IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAncGdfcGxhbl9hZHZpY2UnLAorICAgICctLUZJTEVERVNDJywgJ3BnX3BsYW5fYWR2aWNlIC0g aGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4nLF0pCitlbmRpZgorCitwZ19wbGFu X2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3BsYW5fYWR2aWNlJywKKyAgcGdfcGxhbl9hZHZp Y2Vfc291cmNlcywKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogaW5jbHVkZV9kaXJlY3Rvcmllcygn LicpLAorICBrd2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0g cGdfcGxhbl9hZHZpY2UKKworaW5zdGFsbF9kYXRhKAorICAncGdfcGxhbl9hZHZpY2UtLTEuMC5z cWwnLAorICAncGdfcGxhbl9hZHZpY2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRh X2FyZ3MsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAncGdfcGxhbl9hZHZpY2UnLAorICAn c2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9i dWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdnYXRoZXIn LAorICAgICAgJ2pvaW5fb3JkZXInLAorICAgICAgJ2pvaW5fc3RyYXRlZ3knLAorICAgICAgJ2xv Y2FsX2NvbGxlY3RvcicsCisgICAgICAncGFydGl0aW9ud2lzZScsCisgICAgICAnc2NhbicsCisg ICAgICAnc3ludGF4JywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsK KyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5ZjRmMjI0ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQy IEBACisvKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsICov CisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfcGxh bl9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdf Y2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVf UEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMg U1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1 c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNv bGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNl IHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFU RSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2lu dCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50 LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJ T1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRI TkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklD VDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoKSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdf cGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjMyZThiN2EwZDMKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAg LTAsMCArMSw0NTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2aWNl LmMKKyAqCSAgbWFpbiBlbnRyeXBvaW50cyBmb3IgZ2VuZXJhdGluZyBhbmQgYXBwbHlpbmcgcGxh bm5lciBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdw YV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRl bnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFu bmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgi CisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBs YWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJj b21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIK KyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitzdGF0aWMgcGdw YV9zaGFyZWRfc3RhdGUgKnBncGFfc3RhdGUgPSBOVUxMOworc3RhdGljIGRzYV9hcmVhICpwZ3Bh X2RzYV9hcmVhID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxh bl9hZHZpY2VfYWR2aWNlID0gTlVMTDsKK3N0YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2Fsd2F5 c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IHRydWU7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2ludAkJCXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9j b2xsZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2F2ZWQgaG9vayB2YWx1ZSAqLworc3RhdGljIGV4 cGxhaW5fcGVyX3BsYW5faG9va190eXBlIHByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IE5VTEw7CisK Ky8qIE90aGVyIGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIGludAllc19leHRlbnNpb25f aWQ7CitzdGF0aWMgTWVtb3J5Q29udGV4dCBwZ3BhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsKKwor c3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWlu U3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJICBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBh cnNlU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Bl cl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9D bGF1c2UgKmludG8sCisJCQkJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBh cmFtcywKKwkJCQkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMg Ym9vbCBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lk ICoqZXh0cmEsCisJCQkJCQkJCQkJCSBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVt ICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsK KworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZv aWQpCit7CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmlj ZSIsCisJCQkJCQkJICAgImFkdmljZSB0byBhcHBseSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAor CQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJnBnX3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJ CQkgICBOVUxMLAorCQkJCQkJCSAgIFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJ ICAgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJ CQkJCQkgICBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZp Y2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0 cHV0IGluY2x1ZGVzIHN1cHBsaWVkIGFkdmljZSBldmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9B RFZJQ0UpIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19l eHBsYWluX3N1cHBsaWVkX2FkdmljZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJT RVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5V TEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2Nv bGxlY3Rpb25fbGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBp biBwZXItYmFja2VuZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2 aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFY LAorCQkJCQkJCVBHQ19VU0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlO VUxMLAorCQkJCQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3BsYW5f YWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50 cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkm cGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJ CQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEws CisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgi cGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIEdldCBhbiBJRCB0aGF0IHdlIGNhbiB1c2UgdG8gY2Fj aGUgZGF0YSBpbiBhbiBFeHBsYWluU3RhdGUuICovCisJZXNfZXh0ZW5zaW9uX2lkID0gR2V0RXhw bGFpbkV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogUmVnaXN0ZXIgdGhlIG5l dyBFWFBMQUlOIG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCisJUmVnaXN0 ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKCJwbGFuX2FkdmljZSIsCisJCQkJCQkJCSAgIHBnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOworCisJLyogSW5zdGFsbCBob29rcyAq LworCXBncGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tzKCk7CisJcHJldl9leHBsYWluX3Blcl9wbGFu ID0gZXhwbGFpbl9wZXJfcGxhbl9ob29rOworCWV4cGxhaW5fcGVyX3BsYW5faG9vayA9IHBnX3Bs YW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vazsKK30KKworLyoKKyAqIEluaXRpYWxpemUg c2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf aW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0 ZSA9IChwZ3BhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZzdGF0 ZS0+bG9jaywgTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9sb2NrIikpOworCXN0 YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfZHNh Iik7CisJc3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJlZF9j b2xsZWN0b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50 ZXIgdG8gYSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0 aGlzCisgKiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfcGxh bl9hZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdwYV9tZW1vcnlfY29udGV4dCA9PSBO VUxMKQorCQlwZ3BhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkJCQkJ CQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ3BhX21lbW9yeV9jb250ZXh0 OworfQorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoKKyAq IElmIG5vIHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gSWYg aXQgZG9lcyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3NlZCBp dCwgYXR0YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVkIHBv aW50ZXIuCisgKgorICogQWxvbmcgdGhlIHdheSwgbWFrZSBzdXJlIHRoZSByZWxldmFudCBMV0xv Y2sgdHJhbmNoZXMgYXJlIHJlZ2lzdGVyZWQuCisgKi8KK3BncGFfc2hhcmVkX3N0YXRlICoKK3Bn X3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ3BhX3N0YXRlID09IE5VTEwpCisJ eworCQlib29sCQlmb3VuZDsKKworCQlwZ3BhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVu dCgicGdfcGxhbl9hZHZpY2UiLCBzaXplb2YocGdwYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAg IHBncGFfaW5pdF9zaGFyZWRfc3RhdGUsICZmb3VuZCk7CisJfQorCisJcmV0dXJuIHBncGFfc3Rh dGU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX3BsYW5fYWR2aWNlJ3MgRFNB IGFyZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgorcGdfcGxhbl9h ZHZpY2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdwYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsK KwkJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJ CWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwor CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX3BsYW5fYWR2aWNlX2dldF9t Y3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOwor CQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUgPT0gRFNBX0hB TkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2NyZWF0ZShzdGF0ZS0+ ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3BhX2RzYV9hcmVhKTsKKwkJCXN0YXRlLT5hcmVh ID0gZHNhX2dldF9oYW5kbGUocGdwYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0 ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9j ayk7CisJCQlwZ3BhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7CisJCX0KKwor CQlkc2FfcGluX21hcHBpbmcocGdwYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ3BhX2RzYV9hcmVhOworfQorCisvKgor ICogSGFuZGxlciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgorICovCitzdGF0aWMgdm9pZAor cGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLCBE ZWZFbGVtICpvcHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSkKK3sKKwlib29sCSAg ICpwbGFuX2FkdmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0YXRl KGVzLCBlc19leHRlbnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2aWNlID09IE5VTEwpCisJewor CQlwbGFuX2FkdmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOworCQlTZXRFeHBsYWluRXh0ZW5z aW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZpY2UpOworCX0KKworCSpwbGFu X2FkdmljZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBzdHJp bmcgdGhhdCBpcyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBsZSBsaW5lcyBpbiBFWFBMQUlO CisgKiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3Rl eHRfbXVsdGlsaW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFsYWJlbCwKKwkJCQkJCQkJCSAg Y2hhciAqdmFsdWUpCit7CisJY2hhcgkgICAqczsKKworCS8qIEZvciBub24tdGV4dCBmb3JtYXRz LCBpdCdzIGJlc3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlpZiAoZXMt PmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJRXhwbGFpblByb3BlcnR5VGV4 dChxbGFiZWwsIHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbiB0ZXh0IGZvcm1h dCwgaWYgdGhlcmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5nLiAqLworCWlmICgqcWxhYmVs ID09ICdcMCcpCisJCXJldHVybjsKKworCS8qCisJICogSXQgbG9va3MgbmljZXN0IHRvIGluZGVu dCBlYWNoIGxpbmUgb2YgdGhlIGFkdmljZSBzZXBhcmF0ZWx5LCBiZWdpbm5pbmcKKwkgKiBvbiB0 aGUgbGluZSBiZWxvdyB0aGUgbGFiZWwuCisJICovCisJRXhwbGFpbkluZGVudFRleHQoZXMpOwor CWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzOlxuIiwgcWxhYmVsKTsKKwllcy0+aW5kZW50 Kys7CisJd2hpbGUgKChzID0gc3RyY2hyKHZhbHVlLCAnXG4nKSkgIT0gTlVMTCkKKwl7CisJCUV4 cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhlcy0+c3RyLCB2 YWx1ZSwgKHMgLSB2YWx1ZSkgKyAxKTsKKwkJdmFsdWUgPSBzICsgMTsKKwl9CisKKwkvKiBEb24n dCBpbnRlcnByZXQgYSB0ZXJtaW5hbCBuZXdsaW5lIGFzIGEgcmVxdWVzdCBmb3IgYW4gZW1wdHkg bGluZS4gKi8KKwlpZiAoKnZhbHVlICE9ICdcMCcpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChl cyk7CisJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzXG4iLCB2YWx1ZSk7CisJfQorCisJ ZXMtPmluZGVudC0tOworfQorCisvKgorICogQWRkIGFkdmljZSBmZWVkYmFjayB0byB0aGUgRVhQ TEFJTiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX2Zl ZWRiYWNrKEV4cGxhaW5TdGF0ZSAqZXMsIExpc3QgKmZlZWRiYWNrKQoreworCVN0cmluZ0luZm9E YXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcmVhY2hfbm9kZShEZWZFbGVt LCBpdGVtLCBmZWVkYmFjaykKKwl7CisJCWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIoaXRlbSk7 CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMgLyogIiwgaXRlbS0+ZGVmbmFtZSk7CisJ CWlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDApCisJCXsKKwkJCUFzc2VydCgo ZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApOworCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAibWF0Y2hlZCIpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFBHUEFfVEVfTUFU Q0hfUEFSVElBTCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInBhcnRpYWxseSBt YXRjaGVkIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm5vdCBtYXRjaGVk Iik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQTElDQUJMRSkgIT0gMCkKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIiwgaW5hcHBsaWNhYmxlIik7CisJCWlmICgoZmxhZ3MgJiBQR1BB X1RFX0NPTkZMSUNUSU5HKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBjb25m bGljdGluZyIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlMRUQpICE9IDApCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICIsIGZhaWxlZCIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIgKi9cbiIpOworCX0KKworCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUo ZXMsICJTdXBwbGllZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJICBidWYuZGF0YSk7Cit9CisK Ky8qCisgKiBBZGQgcmVsZXZhbnQgZGV0YWlscywgaWYgYW55LCB0byB0aGUgRVhQTEFJTiBvdXRw dXQgZm9yIGEgc2luZ2xlIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9l eHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJ IEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFt cywKKwkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlib29sCSAgICpw bGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lk KTsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJTGlzdAkgICAqcGdwYV9saXN0OworCisJaWYg KHByZXZfZXhwbGFpbl9wZXJfcGxhbikKKwkJcHJldl9leHBsYWluX3Blcl9wbGFuKHBsYW5uZWRz dG10LCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52KTsK KworCS8qIEZpbmQgYW55IGRhdGEgcGdwYV9wbGFubmVyX3NodXRkb3duIHN0YXNoZWQgaW4gdGhl IFBsYW5uZWRTdG10LiAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBs YW5uZWRzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2aWNlIik7 CisJcGdwYV9saXN0ID0gcGdwYV9pdGVtID09IE5VTEwgPyBOVUxMIDogKExpc3QgKikgcGdwYV9p dGVtLT5hcmc7CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIGlmIHRoZXJlIGlzIGEgcmVjb3JkIG9m IGF0dGVtcHRpbmcgdG8gYXBwbHkgYWR2aWNlIGR1cmluZworCSAqIHF1ZXJ5IHBsYW5uaW5nLCB3 ZSBhbHdheXMgb3V0cHV0IHRoYXQgaW5mb3JtYXRpb24sIGJ1dCB0aGUgdXNlciBjYW4gc2V0CisJ ICogcGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlID0gZmFsc2Ug dG8gc3VwcHJlc3MgdGhhdAorCSAqIGJlaGF2aW9yLiBJZiB0aGV5IGRvLCB3ZSdsbCBvbmx5IGRp c3BsYXkgaXQgd2hlbiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uCisJICogd2FzIHNwZWNpZmllZCBh bmQgbm90IHNldCB0byBmYWxzZS4KKwkgKgorCSAqIE5COiBJZiB3ZSdyZSBleHBsYWluaW5nIGEg cXVlcnkgcGxhbm5lZCBiZWZvcmVoYW5kIC0tIGkuZS4gYSBwcmVwYXJlZAorCSAqIHN0YXRlbWVu dCAtLSB0aGUgYXBwbGljYXRpb24gb2YgcXVlcnkgYWR2aWNlIG1heSBub3QgaGF2ZSBiZWVuCisJ ICogcmVjb3JkZWQsIGFuZCB0aGVyZWZvcmUgdGhpcyB3b24ndCBiZSBhYmxlIHRvIHNob3cgYW55 dGhpbmcuCisJICovCisJaWYgKHBncGFfbGlzdCAhPSBOVUxMICYmIChwZ19wbGFuX2FkdmljZV9h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgfHwKKwkJCQkJCQkgIChwbGFuX2FkdmljZSAh PSBOVUxMICYmICpwbGFuX2FkdmljZSkpKQorCXsKKwkJRGVmRWxlbSAgICAqZmVlZGJhY2s7CisK KwkJZmVlZGJhY2sgPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJmZWVkYmFj ayIpOworCQlpZiAoZmVlZGJhY2sgIT0gTlVMTCkKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5f ZmVlZGJhY2soZXMsIChMaXN0ICopIGZlZWRiYWNrLT5hcmcpOworCX0KKworCS8qCisJICogSWYg dGhlIFBMQU5fQURWSUNFIG9wdGlvbiB3YXMgc3BlY2lmaWVkIC0tIGFuZCBub3Qgc2VudCB0byBG QUxTRSAtLQorCSAqIHNob3cgZ2VuZXJhdGVkIGFkdmljZS4KKwkgKi8KKwlpZiAocGxhbl9hZHZp Y2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2UpCisJeworCQlEZWZFbGVtICAgICphZHZpY2Vfc3Ry aW5nX2l0ZW07CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisKKwkJYWR2aWNlX3N0cmluZ19p dGVtID0KKwkJCWZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImFkdmljZV9zdHJp bmciKTsKKwkJaWYgKGFkdmljZV9zdHJpbmdfaXRlbSAhPSBOVUxMKQorCQl7CisJCQkvKiBBZHZp Y2UgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQ7IHdlIGNhbiByZXVzZSBpdC4gKi8KKwkJCWFk dmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5hcmcpOworCQl9CisJCWVs c2UKKwkJeworCQkJcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHdhbGtlcjsKKwkJCVN0cmluZ0lu Zm9EYXRhIGJ1ZjsKKwkJCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnM7CisKKwkJCS8q IEFkdmljZSBub3QgeWV0IGdlbmVyYXRlZDsgZG8gdGhhdCBub3cuICovCisJCQlwZ3BhX3BsYW5f d2Fsa2VyKCZ3YWxrZXIsIHBsYW5uZWRzdG10KTsKKwkJCXJ0X2lkZW50aWZpZXJzID0KKwkJCQlw Z3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBsYW5uZWRzdG10KTsKKwkJ CWluaXRTdHJpbmdJbmZvKCZidWYpOworCQkJcGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxr ZXIsIHJ0X2lkZW50aWZpZXJzKTsKKwkJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0YTsKKwkJfQor CisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ19wbGFuX2FkdmljZV9leHBs YWluX3RleHRfbXVsdGlsaW5lKGVzLCAiR2VuZXJhdGVkIFBsYW4gQWR2aWNlIiwKKwkJCQkJCQkJ CQkJCSAgYWR2aWNlX3N0cmluZyk7CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdf cGxhbl9hZHZpY2UuYWR2aWNlCisgKi8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZp Y2VfY2hlY2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3Vy Y2UpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29u dGV4dDsKKwljaGFyCSAgICplcnJvcjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVy biB0cnVlOworCisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBz YXZlIHRoZSBwYXJzZSB0cmVlIHRoYXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1 YWwgdXNlIHdoZW4gcGxhbm5pbmcgd2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25s eSBwb2ludAorCSAqIHRvIGEgc2luZ2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJz ZSB0cmVlIGludm9sdmVzIGFuCisJICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2Nh dGlvbnMuCisJICovCisJKHZvaWQpIHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlm IChlcnJvciAhPSBOVUxMKQorCXsKKwkJR1VDX2NoZWNrX2VycmRldGFpbCgiQ291bGQgbm90IHBh cnNlIGFkdmljZTogJXMiLCBlcnJvcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250 ZXh0KTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZF bGVtIG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgor ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sK Kwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAo aXRlbS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJl dHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5j b250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTZmZGM5ZTdi MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuY29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfcGxhbl9hZHZpY2UgZXh0ZW5zaW9uCitj b21tZW50ID0gJ2hlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJworZGVmYXVsdF92 ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX3BsYW5fYWR2aWNl JworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZWZiM2I2MTEzCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5o CkBAIC0wLDAgKzEsMzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3BsYW5fYWR2 aWNlLmgKKyAqCSAgbWFpbiBoZWFkZXIgZmlsZSBmb3IgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBt b2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1BMQU5f QURWSUNFX0gKKyNkZWZpbmUgUEdfUExBTl9BRFZJQ0VfSAorCisjaW5jbHVkZSAibm9kZXMvcGxh bm5vZGVzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9k c2EuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfc3RhdGUKK3sKKwlMV0xvY2sJCWxv Y2s7CisJaW50CQkJZHNhX3RyYW5jaGU7CisJZHNhX2hhbmRsZQlhcmVhOworCWRzYV9wb2ludGVy IHNoYXJlZF9jb2xsZWN0b3I7Cit9IHBncGFfc2hhcmVkX3N0YXRlOworCisvKiBHVUMgdmFyaWFi bGVzICovCitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7 CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0 ZXJuIGNoYXIgKnBnX3BsYW5fYWR2aWNlX2FkdmljZTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBl cyAqLworZXh0ZXJuIE1lbW9yeUNvbnRleHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7 CitleHRlcm4gcGdwYV9zaGFyZWRfc3RhdGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsK K2V4dGVybiBkc2FfYXJlYSAqcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi4wMmZmYmZhMzc2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9hc3QuYwpAQCAtMCwwICsxLDM5MiBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV9hc3QuYworICoJICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZSByZWxh dGVkIHRvIHBsYW4gYWR2aWNlIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1 ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisKK3N0YXRpYyBib29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0 KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICBib29sICpyaWRzX3VzZWQpOworCisvKgor ICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGFkdmlj ZSB0YWcuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2Vf dGFnX3R5cGUgYWR2aWNlX3RhZykKK3sKKwlzd2l0Y2ggKGFkdmljZV90YWcpCisJeworCQljYXNl IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4i OworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lO IjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2Ug UEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNl IFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2FzZSBQR1BB X1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNh c2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2Ug UEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNhc2UgUEdQ QV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRF UklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAi TUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RB R19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsK KwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xP T1BfUExBSU4iOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAiTk9fR0FU SEVSIjsKKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJ T05XSVNFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJu ICJTRU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6 CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46 CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJl dHVybiAiVElEX1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmlu ZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8g YSBwZ3BhX2FkdmljZV90YWdfdHlwZS4KKyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwg PSBmYWxzZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwg PSB0cnVlIGFuZCByZXVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3Rh Z190eXBlCitwZ3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWls KQoreworCSpmYWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2In OgorCQkJaWYgKHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJ CWlmIChzdHJjbXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfRk9SRUlHTl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0 YWcsICJnYXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAo c3RyY21wKHRhZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dB VEhFUl9NRVJHRTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAi aGFzaF9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJl YWs7CisJCWNhc2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5k ZXhfb25seV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FO OworCQkJYnJlYWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVy IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQlj YXNlICdtJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAo c3RyY21wKHRhZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RB R19NRVJHRV9KT0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNt cCh0YWcsICJuZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFf VEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRf bG9vcF9tZW1vaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVN T0laRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAi bm9fZ2F0aGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJl YWs7CisJCWNhc2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0g MCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNl ICdzJzoKKwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJ CQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRh ZywgInNlbWlqb2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lO X1VOSVFVRTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJj bXAodGFnLCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsK KwkJCWJyZWFrOworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsK KworCS8qIHJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNr ICovCisJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdw YV9hZHZpY2VfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5n SW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0 ciwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0g UEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hh cgkgICAqZGVsaW1zOworCisJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JE RVJFRF9MSVNUKQorCQkJZGVsaW1zID0gInt9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsK KworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7 CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0 ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGlt c1sxXSk7CisJfQorCWVsc2UKKwl7CisJCWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJ cnRfaWRlbnRpZmllciA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoK KyAqIEZvcm1hdCBhIHBncGFfaW5kZXhfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVz dWx0IHRvIGEgU3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0 KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRh cmdldC0+aXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVl OworCisJCWlmIChpdGFyZ2V0LT5pdHlwZSA9PSBQR1BBX0lOREVYX0FORCkKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoc3RyLCAiJiYoIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoc3RyLCAifHwoIik7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9pbmRleF90YXJnZXQsIGNo aWxkX3RhcmdldCwgaXRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlm aXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAn KTsKKwkJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0K KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnKScpOworCX0KKwllbHNlCisJeworCQlpZiAo aXRhcmdldC0+aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKHN0ciwg IiVzLiIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNwYWNlKSk7 CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQt PmluZG5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0d28gcGdwYV9p bmRleF90YXJnZXQgb2JqZWN0cyBhcmUgZXhhY3RseSBpZGVudGljYWwuCisgKi8KK2Jvb2wKK3Bn cGFfaW5kZXhfdGFyZ2V0c19lcXVhbChwZ3BhX2luZGV4X3RhcmdldCAqaTEsIHBncGFfaW5kZXhf dGFyZ2V0ICppMikKK3sKKwlpZiAoaTEtPml0eXBlICE9IGkyLT5pdHlwZSkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKGkxLT5pdHlwZSA9PSBQR1BBX0lOREVYX05BTUUpCisJeworCQkvKiBpbmRu YW1lc3BhY2UgY2FuIGJlIE5VTEwsIGFuZCB0d28gTlVMTCB2YWx1ZXMgYXJlIGVxdWFsICovCisJ CWlmICgoaTEtPmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVM TCkgJiYKKwkJCShpMS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSA9 PSBOVUxMIHx8CisJCQkgc3RyY21wKGkxLT5pbmRuYW1lc3BhY2UsIGkyLT5pbmRuYW1lc3BhY2Up ICE9IDApKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBpMi0+ aW5kbmFtZSkgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJ aTFfbGVuZ3RoID0gbGlzdF9sZW5ndGgoaTEtPmNoaWxkcmVuKTsKKworCQlpZiAoaTFfbGVuZ3Ro ICE9IGxpc3RfbGVuZ3RoKGkyLT5jaGlsZHJlbikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZvciAo aW50IG4gPSAwOyBuIDwgaTFfbGVuZ3RoOyArK24pCisJCXsKKwkJCXBncGFfaW5kZXhfdGFyZ2V0 ICpjMSA9IGxpc3RfbnRoKGkxLT5jaGlsZHJlbiwgbik7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAq YzIgPSBsaXN0X250aChpMi0+Y2hpbGRyZW4sIG4pOworCisJCQlpZiAoIXBncGFfaW5kZXhfdGFy Z2V0c19lcXVhbChjMSwgYzIpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIG1hdGNoZXMg YW4gYW55IHBhcnQgb2YgYW4gYWR2aWNlIHRhcmdldC4KKyAqLworYm9vbAorcGdwYV9pZGVudGlm aWVyX21hdGNoZXNfdGFyZ2V0KHBncGFfaWRlbnRpZmllciAqcmlkLCBwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCkKK3sKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBjaGVjayBhbGwgZGVzY2Vu ZGVudHMuICovCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikK Kwl7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJn ZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0 KHJpZCwgY2hpbGRfdGFyZ2V0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlkLmFsaWFz X25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlICE9IHRh cmdldC0+cmlkLm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGhlIGlk ZW50aWZpZXIgbXVzdCBzcGVjaWZ5IGEgc2NoZW1hLCBidXQgdGhlIHRhcmdldCBtYXkgbGVhdmUg dGhlCisJICogc2NoZW1hIE5VTEwgdG8gbWF0Y2ggYW55dGhpbmcuCisJICovCisJaWYgKHRhcmdl dC0+cmlkLnBhcnRuc3AgIT0gTlVMTCAmJgorCQlzdHJjbXAocmlkLT5wYXJ0bnNwLCB0YXJnZXQt PnJpZC5wYXJ0bnNwKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKworCS8qCisJICogVGhlc2Ug ZmllbGRzIGNhbiBiZSBOVUxMIG9uIGVpdGhlciBzaWRlLCBidXQgTlVMTCBvbmx5IG1hdGNoZXMg YW5vdGhlcgorCSAqIE5VTEwuCisJICovCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChyaWQtPnBhcnRyZWwsIHRhcmdldC0+cmlkLnBhcnRyZWwpKQorCQlyZXR1cm4gZmFsc2U7CisJ aWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBsYW5fbmFtZSwgdGFyZ2V0LT5y aWQucGxhbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBNYXRjaCBpZGVudGlmaWVycyB0byBhZHZpY2UgdGFyZ2V0cyBhbmQgcmV0dXJuIGFuIGVu dW0gdmFsdWUgaW5kaWNhdGluZworICogdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzZXQg b2Yga2V5cyBhbmQgdGhlIHNldCBvZiB0YXJnZXRzLgorICoKKyAqIFNlZSB0aGUgY29tbWVudHMg Zm9yIHBncGFfaXRtX3R5cGUuCisgKi8KK3BncGFfaXRtX3R5cGUKK3BncGFfaWRlbnRpZmllcnNf bWF0Y2hfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJYm9vbAkJYWxsX3JpZHNfdXNlZCA9IHRy dWU7CisJYm9vbAkJYW55X3JpZHNfdXNlZCA9IGZhbHNlOworCWJvb2wJCWFsbF90YXJnZXRzX3Vz ZWQ7CisJYm9vbAkgICAqcmlkc191c2VkID0gcGFsbG9jMF9hcnJheShib29sLCBucmlkcyk7CisK KwlhbGxfdGFyZ2V0c191c2VkID0KKwkJcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJp ZHMsIHJpZHMsIHRhcmdldCwgcmlkc191c2VkKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnJp ZHM7ICsraSkKKwl7CisJCWlmIChyaWRzX3VzZWRbaV0pCisJCQlhbnlfcmlkc191c2VkID0gdHJ1 ZTsKKwkJZWxzZQorCQkJYWxsX3JpZHNfdXNlZCA9IGZhbHNlOworCX0KKworCWlmIChhbGxfcmlk c191c2VkKQorCXsKKwkJaWYgKGFsbF90YXJnZXRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1f RVFVQUw7CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQ7CisJfQor CWVsc2UKKwl7CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX1RB UkdFVFNfQVJFX1NVQlNFVDsKKwkJZWxzZSBpZiAoYW55X3JpZHNfdXNlZCkKKwkJCXJldHVybiBQ R1BBX0lUTV9JTlRFUlNFQ1RJTkc7CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9ESVNKT0lO VDsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgdGFyZ2V0IG9yIHN1Yi10 YXJnZXQgaXMgbWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUKKyAqIGlkZW50aWZpZXIsIGFuZCBvdGhl cndpc2UgZmFsc2UuCisgKgorICogQWxzbyBzZXRzIHJpZHNfdXNlZFtpXSA9IHRydWUgZm9yIGVh Y2ggaWRlbmlmaWVyIHRoYXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUKKyAqIHRhcmdldC4KKyAqLwor c3RhdGljIGJvb2wKK3BncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdw YV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQs IGJvb2wgKnJpZHNfdXNlZCkKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCWlmICh0YXJn ZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlyZXN1bHQgPSB0cnVl OworCisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJn ZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAoIXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0 KG5yaWRzLCByaWRzLCBjaGlsZF90YXJnZXQsCisJCQkJCQkJCQkJCSAgIHJpZHNfdXNlZCkpCisJ CQkJcmVzdWx0ID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBucmlkczsgKytpKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFy Z2V0KCZyaWRzW2ldLCB0YXJnZXQpKQorCQkJeworCQkJCXJpZHNfdXNlZFtpXSA9IHRydWU7CisJ CQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmY2ZmU3MzBhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2FzdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX2FzdC5oCisgKgkgIGFic3RyYWN0IHN5bnRheCB0cmVlcyBmb3IgcGxhbiBhZHZp Y2UsIHBsdXMgcGFyc2VyL3NjYW5uZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpZm5kZWYgUEdQQV9BU1RfSAorI2RlZmluZSBQR1BBX0FTVF9ICisKKyNpbmNsdWRlICJw Z3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKworLyoKKyAq IEFkdmljZSBpdGVtcyBnZW5lcmFsbHkgdGFrZSB0aGUgZm9ybSBTT01FX1RBRyhpdGVtIFsuLi5d KSwgd2hlcmUgYW4gaXRlbQorICogY2FuIHRha2UgdmFyaW91cyBmb3Jtcy4gVGhlIHNpbXBsZXN0 IGNhc2UgaXMgYSByZWxhdGlvbiBpZGVudGlmaWVyLCBidXQKKyAqIHNvbWUgdGFncyBhbGxvdyBz dWJsaXN0cywgYW5kIEpPSU5fT1JERVIoKSBhbGxvd3MgYm90aCBvcmRlcmVkIGFuZCB1bm9yZGVy ZWQKKyAqIHN1Ymxpc3RzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1RBUkdFVF9JREVO VElGSUVSLAkJLyogcmVsYXRpb24gaWRlbnRpZmllciAqLworCVBHUEFfVEFSR0VUX09SREVSRURf TElTVCwJLyogKGl0ZW0gLi4uKSAqLworCVBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUCS8qIHtp dGVtIC4uLn0gKi8KK30gcGdwYV90YXJnZXRfdHlwZTsKKworLyoKKyAqIFdoZW4gYW4gYWR2aWNl IGl0ZW0gZGVzY3JpYmVzIGEgYml0bWFwIGluZGV4IHNjYW4sIGl0IG1heSBuZWVkIHRvIGRlc2Ny aWJlCisgKiB0aGUgdXNlIG9mIG11bHRpcGxlIGluZGV4ZXMuCisgKi8KK3R5cGVkZWYgZW51bQor eworCVBHUEFfSU5ERVhfTkFNRSwJCQkvKiBpbmRleCBzY2hlbWEgKyBuYW1lICovCisJUEdQQV9J TkRFWF9BTkQsCQkJCS8qICYmKGl0ZW0gLi4uKSAqLworCVBHUEFfSU5ERVhfT1IJCQkJLyogfHwo aXRlbSAuLi4pICovCit9IHBncGFfaW5kZXhfdHlwZTsKKworLyoKKyAqIEFuIGluZGV4IHNwZWNp ZmljYXRpb24uIFdlIHVzZSB0aGlzIGZvciBJTkRFWF9TQ0FOLCBJTkRFWF9PTkxZX1NDQU4sCisg KiBhbmQgQklUTUFQX0hFQVBfU0NBTiBhZHZpY2UsIGJ1dCBpbiB0aGUgZm9ybWVyIHR3byBjYXNl cywgdGhlIHRhcmdldCBtdXN0CisgKiBiZSBvZiB0eXBlIFBHUEFfSU5ERVhfTkFNRS4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgcGdwYV9pbmRleF90YXJnZXQKK3sKKwlwZ3BhX2luZGV4X3R5cGUgaXR5 cGU7CisKKwkvKiBJbmRleCBzY2hlbSBhbmQgbmFtZSwgd2hlbiBpdHlwZSA9PSBQR1BBX0lOREVY X05BTUUgKi8KKwljaGFyCSAgICppbmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKKwor CS8qIExpc3Qgb2YgcGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cywgd2hlbiBpdHlwZSAhPSBQR1BB X0lOREVYX05BTUUgKi8KKwlMaXN0CSAgICpjaGlsZHJlbjsKK30gcGdwYV9pbmRleF90YXJnZXQ7 CisKKy8qCisgKiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBnaXZl biwgd2hpY2ggY291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhhdCB3 ZSB3YW50IHRvIGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBvciBh IHN1Ymxpc3Qgb2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV90 YXJnZXQKK3sKKwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZpZWxk IGlzIG1lYW5pbmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgorCSAq CisJICogQWxsIGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBvY2N1 cnJlbmNlIG51bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4gTm90 ZSB0aGF0IGl0J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUgd2l0 aG91dCBhIHBhcnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJcGdw YV9pZGVudGlmaWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0dHlw ZSBpcyBQUEdBX1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlzIFBH UEFfVEFHX0lOREVYX1NDQU4sIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwgb3IKKwkgKiBQR1BB X1RBR19CSVRNQVBfSEVBUF9TQ0FOLgorCSAqLworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0 OworCisJLyoKKwkgKiBXaGVuIHRoZSB0dHlwZSBpcyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJ U1QsIHRoaXMgZmllbGQgY29udGFpbnMgYQorCSAqIGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2Fk dmljZV90YXJnZXQgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlz dAkgICAqY2hpbGRyZW47Cit9IHBncGFfYWR2aWNlX3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFy ZSBhbGwgdGhlIGtpbmRzIG9mIGFkdmljZSB0aGF0IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBh IGtleXdvcmQKKyAqIGlzIGZvdW5kIGF0IHRoZSB0b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhp cyBsaXN0LgorICoKKyAqIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUg cGdwYV9wYXJzZV9hZHZpY2VfdGFnIGFuZAorICogcGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisg Ki8KK3R5cGVkZWYgZW51bSBwZ3BhX2FkdmljZV90YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1B UF9IRUFQX1NDQU4sCisJUEdQQV9UQUdfRk9SRUlHTl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwK KwlQR1BBX1RBR19HQVRIRVJfTUVSR0UsCisJUEdQQV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFH X0lOREVYX09OTFlfU0NBTiwKKwlQR1BBX1RBR19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5f T1JERVIsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJH RV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFf VEFHX05FU1RFRF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJ UEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFfVEFHX1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdf U0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9U QUdfU0VRX1NDQU4sCisJUEdQQV9UQUdfVElEX1NDQU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7 CisKKy8qCisgKiBBbiBpdGVtIG9mIGFkdmljZSwgbWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qg b2YgYWxsIHRhcmdldHMgdG8gd2hpY2gKKyAqIGl0IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICog InRhcmdldHMiIGlzIGEgbGlzdCBvZiBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisg KiBUaGUgTGlzdCByZXR1cm5lZCBmcm9tIHBncGFfeXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2 aWNlX2l0ZW0gb2JqZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQor eworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3Bh X2FkdmljZV9pdGVtOworCisvKgorICogUmVzdWx0IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBw Z3BhX3JlbGF0aW9uX2lkZW50aWZpZXIgb2JqZWN0cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJn ZXQuCisgKgorICogUEdQQV9JVE1fRVFVQUwgbWVhbnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQg Ynkgc29tZSBpZGVudGlmaWVyLCBhbmQKKyAqIGFsbCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQg dG8gYSB0YXJnZXQuCisgKgorICogUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQg YWxsIGlkZW50aWZpZXJzIG1hdGNoZWQgdG8gYSB0YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBs ZWZ0b3ZlciB0YXJnZXRzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlz CisgKiBsb29raW5nIHRvIGFwcGx5IHRvIGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29t ZSBhZGRpdGlvbmFsIG9uZXMgdGhhdAorICogd2UgZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lU TV9UQVJHRVRTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBi eSBhbgorICogaWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJz LiBHZW5lcmFsbHksIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGFkdmljZSBpcyBsb29raW5nIHRv IGFwcGx5IHRvIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQ R1BBX0lUTV9JTlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBzb21lIGlkZW50aWZlaXJzIGFuZCB0YXJn ZXRzIHdlcmUgbWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVyIGFsbCBpZGVudGlmaWVycyBub3IgYWxs IHRhcmdldHMgY291bGQgYmUgbWF0Y2hlZCB0byBpdGVtcyBpbgorICogdGhlIG90aGVyIHNldC4K KyAqCisgKiBQR1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBp ZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBmb3VuZC4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJUEdQQV9JVE1fRVFVQUwsCisJUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULAorCVBHUEFf SVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9J VE1fRElTSk9JTlQKK30gcGdwYV9pdG1fdHlwZTsKKworLyogZm9yIHBncGFfc2Nhbm5lci5sIGFu ZCBwZ3BhX3BhcnNlci55ICovCit1bmlvbiBZWVNUWVBFOworI2lmbmRlZiBZWV9UWVBFREVGX1lZ X1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lk ICp5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBpbiBwZ3BhX3NjYW5uZXIubCAqLworZXh0ZXJuIGlu dAlwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwK KwkJCQkJICAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwor ZXh0ZXJuIHZvaWQgcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkJCQkgY29uc3QgY2hhciAq bWVzc2FnZSk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIs IHl5c2Nhbl90ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9maW5pc2go eXlzY2FuX3QgeXlzY2FubmVyKTsKKworLyogaW4gcGdwYV9wYXJzZXIueSAqLworZXh0ZXJuIGlu dAlwZ3BhX3l5cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAor CQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gTGlzdCAqcGdwYV9wYXJzZShjb25z dCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCk7CisKKy8qIGluIHBncGFfYXN0 LmMgKi8KK2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90 YWdfdHlwZSBhZHZpY2VfdGFnKTsKK2V4dGVybiBib29sIHBncGFfaWRlbnRpZmllcl9tYXRjaGVz X3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCk7CitleHRlcm4gcGdwYV9pdG1fdHlwZSBwZ3BhX2lkZW50aWZpZXJzX21h dGNoX3RhcmdldChpbnQgbnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJp ZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4g Ym9vbCBwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLAorCQkJ CQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppMik7CitleHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5 cGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCk7Citl eHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJ CQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zv cm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90 YXJnZXQgKml0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xs ZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTIwODVkOWQ3 NWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVj dG9yLmMKQEAgLTAsMCArMSw2MzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf Y29sbGVjdG9yLmMKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNo YXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9jb2xsZWN0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJw Z3BhX2NvbGxlY3Rvci5oIgorCisjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVz L3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCitQR19GVU5DVElPTl9JTkZP X1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1Yx KHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdf Z2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0la RQkJMTAyNAorI2RlZmluZSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBH X0dFVF9BRFZJQ0VfQ09MVU1OUwk3CisKKy8qCisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25l IHF1ZXJ5IHBsYW4sIHRvZ2V0aGVyIHdpdGggdGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlv dXMgb3RoZXIgaWRlbnRpZnlpbmcgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9j b2xsZWN0ZWRfYWR2aWNlCit7CisJT2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lk CQkJZGJpZDsJCQkvKiBkYXRhYmFzZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVy eSBpZGVudGlmaWVyICovCisJVGltZXN0YW1wVHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0 YW1wICovCisJaW50CQkJYWR2aWNlX29mZnNldDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1 YWwgZGF0YSAqLworCWNoYXIJCXRleHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwor fSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2U7CisKKy8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRv IHBncGFfY29sbGVjdGVkX2FkdmljZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9j YWwgbWVtb3J5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuawor eworCXBncGFfY29sbGVjdGVkX2FkdmljZSAqZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9 IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rOworCisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxs IG9mIHRoZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9y aW5nIGluIGxvY2FsIG1lbW9yeS4KKyAqCisgKiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBz dGFydGluZyBmcm9tIDAsIHRvIGVhY2ggcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3Qg dGhhdCB3ZSBzdG9yZS4gVGhlIGFjdHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywg d2hpY2gKKyAqIGhlbHBzIGtlZXAgbWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQg ZGlzY2FyZGluZyBvbGRlciBkYXRhLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2Fk dmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJ CWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJcGdwYV9sb2Nh bF9hZHZpY2VfY2h1bmsgKipjaHVua3M7Cit9IHBncGFfbG9jYWxfYWR2aWNlOworCisvKgorICog SnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1p YyBzaGFyZWQgYXJlYSwKKyAqIHNvIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2Yg bmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2Vf Y2h1bmsKK3sKKwlkc2FfcG9pbnRlciBlbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdw YV9zaGFyZWRfYWR2aWNlX2NodW5rOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2 aWNlLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3Qg dXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVm IHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0 CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplOworCWRzYV9wb2ludGVyIGNodW5rczsKK30gcGdwYV9zaGFyZWRfYWR2aWNlOwor CisvKiBQb2ludGVycyB0byBsb2NhbCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBw Z3BhX2xvY2FsX2FkdmljZSAqbG9jYWxfY29sbGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ3BhX3No YXJlZF9hZHZpY2UgKnNoYXJlZF9jb2xsZWN0b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rp b25zICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpwZ3BhX21ha2VfY29sbGVjdGVk X2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCQkgT2lkIGRiaWQsCisJCQkJCQkJCQkJ CQkJCSB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCQkJCQkJCQkJIFRpbWVzdGFtcFR6IHRpbWVzdGFt cCwKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBkc2FfYXJlYSAq YXJlYSwKKwkJCQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQg cGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSk7CitzdGF0 aWMgdm9pZCBwZ3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBw Z3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMg dm9pZCBwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsK KworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBn cGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5 X3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVh bF9kYXRhOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0 cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBj aGFyICoKK2FkdmljZV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1 cm4gY2EtPnRleHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3Rv cmUgY29sbGVjdGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNl IGNvbGxlY3RvciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2b2lkCitwZ3BhX2NvbGxlY3Rf YWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCWNv bnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7 CisJT2lkCQkJZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisKKwlpZiAocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9s aW1pdCA+IDApCisJeworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhw Z19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKwkJY2EgPSBwZ3BhX21ha2VfY29sbGVjdGVkX2Fk dmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcs IGFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisJCXBncGFfc3RvcmVfbG9j YWxfYWR2aWNlKGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0K KworCWlmIChwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJewor CQlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3Bv aW50ZXIgY2FfcG9pbnRlcjsKKworCQlwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQs IGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3Ry aW5nLCBhcmVhLAorCQkJCQkJCQkgICAmY2FfcG9pbnRlcik7CisJCXBncGFfc3RvcmVfc2hhcmVk X2FkdmljZShjYV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZmlsbCBh IG5ldyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElmIGFyZWEgIT0gTlVM TCwgaXQgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZSByZXN1bHRp bmcKKyAqIGRzYV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0LgorICoKKyAqIElmIGFy ZWEgPT0gTlVMTCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50IG1l bW9yeSBjb250ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQgb3IgbW9kaWZpZWQu CisgKi8KK3N0YXRpYyBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKgorcGdwYV9tYWtlX2NvbGxlY3Rl ZF9hZHZpY2UoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJICAg VGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LAorCQkJCQkJICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCSAgIGRzYV9hcmVh ICphcmVhLCBkc2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVlcnlfc3RyaW5nX2xl bmd0aCA9IHN0cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFkdmljZV9zdHJpbmdf bGVuZ3RoID0gc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCXRvdGFsX2xlbmd0 aDsKKwlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVuZ3RoID0gb2Zmc2V0 b2YocGdwYV9jb2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsgcXVlcnlfc3RyaW5n X2xlbmd0aCArIGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEgPT0gTlVMTCkKKwkJ Y2EgPSBwYWxsb2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVzdWx0ID0gZHNhX2Fs bG9jYXRlKGFyZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEs ICpyZXN1bHQpOworCX0KKworCWNhLT51c2VyaWQgPSBHZXRVc2VySWQoKTsKKwljYS0+ZGJpZCA9 IE15RGF0YWJhc2VJZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5SWQ7CisJY2EtPnRpbWVzdGFtcCA9 IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1ZXJ5X3N0cmluZ19sZW5ndGg7CisK KwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3RyaW5nLCBxdWVyeV9zdHJpbmdfbGVu Z3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2EtPmFkdmljZV9vZmZzZXRdLAorCQkg ICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0aCk7CisKKwlyZXR1cm4gY2E7Cit9 CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byBvdXIgYmFja2Vu ZC1sb2NhbCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUg Zm9yIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRleHQ7CisgKiB0aGUg cHJvdmlkZWQgb2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRoYXQgc2FtZSBj b250ZXh0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdwYV9j b2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1aW50NjQJ CWNodW5rX29mZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7 CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBpc24ndCBpbml0aWFsaXplZCB5 ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQorCXsKKwkJbGEgPSBwYWxsb2Mw KHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVk X3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHBhbGxvYzBf YXJyYXkocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJICAgbGEtPmNodW5rX2Fy cmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9yID0gbGE7CisJfQorCisJLyog Q29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAq LworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9D SFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAl IEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5rIGFycmF5LCBpZiBuZWVkZWQu ICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUp CisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9IGxhLT5jaHVua19hcnJheV9h bGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0g cmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkgcGdwYV9sb2NhbF9hZHZpY2Vf Y2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUsCisJCQkJ CQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdf c2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlmIG5lZWRlZC4gKi8KKwlpZiAo bGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxhLT5jaHVua3NbY2h1bmtfbnVt YmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBncGFfbG9jYWxfYWR2aWNlX2NodW5rKTsKKworCS8qIFNh dmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0KGxhLT5jaHVu a3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IE5VTEwpOworCWxhLT5j aHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2E7CisJKytsYS0+ bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNj YXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UocGdfcGxhbl9hZHZpY2Vf bG9jYWxfY29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRf YWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAqICdj YV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBwZ19wbGFuX2Fk dmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0byBhbiBvYmplY3Qgb2YgdHlwZSBw Z3BhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3N0b3JlX3NoYXJl ZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNodW5rX251bWJl cjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBw Z19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZp Y2VfZHNhX2FyZWEoKTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5r ICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJl KCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0 dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdy4K KwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBuZWVkIHRvIGNy ZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJc3RhdGUtPnNoYXJl ZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVk 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 W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFy ZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtf YXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IElu dmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2FfcG9p bnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3Jh Z2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZpY2Uo YXJlYSwgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQpOworCisJLyogUmVs ZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9j ayk7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIGJhY2tl bmQtbG9jYWwgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0KQoreworCXBn cGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRf Y291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7 CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2Nv dW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mg bm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5leHRfaWQgLSBsYS0+b2xk ZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBG cmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLwor CXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQg PiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0 OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURW SUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJh c2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtf bnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOworCQlwZnJlZShsYS0+Y2h1 bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWxhLT5jaHVua3Nb Y2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVMTDsKKwkJKytsYS0+b2xk ZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRoYXQg YXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChsYS0+b2xk ZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50NjQg biA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVlKGxhLT5jaHVua3Nbbl0p OworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBi YXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChsYS0+bmV4dF9pZCAt IGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0 cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1t b3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5rX2NvdW50XSwKKwkJCQlz aXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5pbmdfY2h1bmtfY291bnQp OworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgm bGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkgICBzaXplb2YocGdwYV9s b2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291bnQgLSByZW1haW5p bmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVlIGFjY29yZGluZ2x5 LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktfU0la RTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gc2hhcmVk IG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0 KQoreworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCXVpbnQ2 NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9j aHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5p bmdfY2h1bmtfY291bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCisJLyogSWYgd2Ug aGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8K KwljdXJyZW50X2NvdW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lkOworCWlmIChjdXJy ZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRo ZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBz YS0+Y2h1bmtzKTsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93 biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsK Kwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJ dWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7 CisKKwkJY2h1bmtfbnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJ Q0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFz ZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhh cmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNodW5rLT5lbnRyaWVz W2NodW5rX29mZnNldF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2FfZnJlZShhcmVhLCBj aHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSA9IEludmFsaWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7CisJCS0tdHJpbV9j b3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5IHVu dXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9p ZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1fY2h1 bmtfY291bnQ7ICsrbikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlbbl0pOworCisJLyog U2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9mIHRo ZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNl X2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0cmltX2NodW5r X2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZjaHVu a19hcnJheVswXSwgJmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihk c2FfcG9pbnRlcikgKiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUg c3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJyYXlbcmVtYWluaW5n X2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAq KQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVua19jb3VudCkpOwor CisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJc2EtPmJhc2VfaWQg Kz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisvKgorICogU1FM LWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5k LWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2NhbF9jb2xsZWN0b3IgIT0gTlVMTCkKKwkJ cGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8q CisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGlu IGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfc2hh cmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0 ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFu X2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VY Q0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVk IGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xs ZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkg KiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yID09IE5VTEwpCisJ eworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJ CXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7 CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+ c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJlYWwgd29yayAqLworCXBncGFf dHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxv Y2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYg dG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLwor RGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1 bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwlPaWQJ CQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAw KTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERhdHVtKSAwOworCisJLyogTG9vcCBv dmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlkID0gbGEtPm9sZGVzdF9pZDsgaWQg PCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50 NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJRGF0dW0J CXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19HRVRfQURW SUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIGxhLT5iYXNlX2lk KSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBsYS0+YmFzZV9p ZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxhLT5jaHVua3NbY2h1bmtfbnVtYmVy XS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJCWlmICghbWVtYmVyX2Nhbl9zZXRfcm9sZSh1 c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBdID0gVUludDY0 R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNhLT51c2VyaWQp OworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJdmFsdWVzWzNd ID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBUaW1lc3RhbXBH ZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1 bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHREYXR1bShh ZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRS ZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJ cmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0dXJu IGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0dXJuU2V0SW5m byAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCXBncGFf c2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVh ICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCWRzYV9wb2ludGVyICpjaHVu a19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwor CUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBz dGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsKKworCS8q CisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2 ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2Uu CisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0 b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5s b2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNh ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisK KwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9 IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIExvb3Agb3ZlciBhbGwg ZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IHNhLT5vbGRlc3RfaWQ7IGlkIDwgc2EtPm5l eHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVu a19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisJCXBncGFfY29s bGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xVTU5T XTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQljaHVu a19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1 bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJ Y2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7 CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNl dF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFdID0g T2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXRE YXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVyeWlk KTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZh bHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVl c1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxl c3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJ CQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJuIChEYXR1bSkg MDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3Iu aCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZlNzQ2YTA2ZDcKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKQEAgLTAsMCArMSwxOCBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3IuaAorICoJICBjb2xs ZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9yeQorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9DT0xMRUNUT1JfSAorI2RlZmlu ZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2b2lkIHBncGFfY29sbGVjdF9hZHZpY2UodWlu dDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJY29uc3QgY2hh ciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9p ZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE1ZmE3 N2UwODNjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lk ZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog cGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZv ciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMg dG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZpZXJzIGZvciByYW5nZQorICogdGFibGUgZW50 cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3RhbmRhYmxlIHRvIGh1bWFuIGJlaW5ncywgYW5k CisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZyBjeWNs ZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRvIG5vdCBjYXJlIGFib3V0LCBvciB3YW50IHRv IHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICogUlRFX0pPSU4gZW50cmllcy4gVGhpcyBpcyBi ZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHRvbiBvZgorICogUlRFcyB3aXRoIHVu aGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9pbl8xNzsgKDIpIG5vdCBhbGwgam9pbnMgaGF2 ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQgdG8gcmVmZXIgdG8gam9pbnMgYnkgdGhlaXIg Y29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVyIHRoYW4gYnkgcmVmZXJlbmNlIHRvIHRoZSBq b2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3ZSBjb25zdHJ1Y3QgaWRlbnRpZmllcnMgb2Yg dGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIv Y2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1lCisgKgorICogSG93ZXZlciwgb2NjdXJyZW5j ZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvY2N1cnJlbmNlCisgKiB3 aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxkX3RhYmxlX25hbWUgaXMgb21pdHRlZCBmb3Ig cmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hpbGQgdGFibGVzLCBhbmQgc3VicXVlcnlfbmFt ZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAorICogcXVlcnkgbGV2ZWwuIFdoZW5ldmVyIGFu IGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGluZyBwdW5jdHVhdGlvbiBtYXJrCisgKiBpcyBh bHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gYWxp YXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUuICBXaGVuZXZlciB3ZSBpbmNsdWRlIGNoaWxk X3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2NoZW1hLXF1YWxpZmllZCBuYW1lLCBidXQgd3Jp dGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJlIG5vdCByZXF1aXJlZAorICogdG8gZG8gc28u ICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gdGhlIHNjaGVtYSBhbmQg dG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBhcmF0ZWx5LgorICoKKyAqIFRoZSB1cHNob3Qg b2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4gc2ltcGxlIGNhc2VzLCB0aGUgcmVsYXRp b24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0aGUgYWxpYXMgbmFt ZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNlcnMuIEhvd2V2ZXIsIGV2ZW4gaW4gY29t cGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRpZmllcgorICogZm9yIGEgZ2l2ZW4gcXVl cnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdlIGhvcGUgc286IGlmIG5vdCwgdGhpcwor ICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZpZXIgZm9ybWF0IG1pZ2h0IG5lZWQgdG8g YmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2FsIG9mIHRoaXMgc3lzdGVtIGlzIHRoYXQg d2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IHRoZQorICogc2FtZSBpZGVudGlmaWVy cyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUgZm9yIHRoZSBzYW1lIHF1ZXJ5LCBzbwor ICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGZvciBhIGNlcnRhaW4g aWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBpZGVudGlmeSB0aGUgUlRJIGZvciB3aGlj aCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBvcmRlcgorICogZm9yIHRoaXMgdG8gd29y aywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5kIGtub3duIGJlZm9yZSB0aGUKKyAq IHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBpZGVudGlmaWVy IG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQgb2YgdGhlIHF1ZXJ5IG91dHNpZGUgb2Yg dGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisgKiBwYXJ0aWN1bGFyLCBvY2N1cnJlbmNl X251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIHJhbmdlCisgKiB0YWJs ZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3QgdGhlIGZpbmFsIGZsYXR0ZW5lZCByYW5n ZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyBJbmRleCAqcGdwYV9jcmVhdGVfdG9wX3J0 aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLAorCQkJCQkJCQkJICBMaXN0 ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFfb2NjdXJyZW5jZV9udW1iZXIoTGlzdCAqcnRh YmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0aW5m bywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0ZSBhIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIg ZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBjYWxsZXIgdG8g ZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBpdCdzCisgKiBnZW5lcmFsbHkgYmV0dGVyIHRv IHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBpbnN0ZWFkLgorICoKKyAqIFNlZSB0aGUg ZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIGFu CisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBjaGFyICoKK3BncGFfaWRlbnRpZmllcl9zdHJp bmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJY29uc3QgY2hhciAqcmVzdWx0Owor CisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBOVUxMKTsKKwlyZXN1bHQgPSBxdW90ZV9pZGVu dGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlBc3NlcnQocmlkLT5vY2N1cnJlbmNlID49IDAp OworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMjJWQi LCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisKKwlpZiAocmlkLT5wYXJ0cmVsICE9IE5VTEwp CisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5VTEwpCisJCQlyZXN1bHQgPSBwc3ByaW50Zigi JXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJlbCkp OworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMuJXMiLCByZXN1bHQsCisJCQkJ CQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCksCisJCQkJCQkJICBxdW90ZV9pZGVu dGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKworCWlmIChyaWQtPnBsYW5fbmFtZSAhPSBOVUxM KQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMiLCByZXN1bHQsIHF1b3RlX2lkZW50aWZpZXIo cmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb21wdXRl IGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIFJUSS4KKyAqCisgKiBUaGUg Y2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwgYW5kIGdldHMgdGhlIG5lY2Vzc2FyeSBkZXRh aWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQKK3Bn cGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRp LAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQl0b3BfcnRpID0g cnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwlSYW5n ZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOworCWNoYXIJICAg KnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgUlRFLCBmaW5k IHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKwkgKiBSVEVfUkVMQVRJ T04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVudGlmeSBjaGlsZHJlbiBvZiBwYXJ0aXRpb25l ZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0aGUgY2hpbGQgdGFibGUsIGJ1dCBzdWJxdWVy aWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCByZWxzIGFuZCB3ZSBkb24ndCBjYXJlIGFib3V0 IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFwcGlu Zm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJLyogYXBwZW5kX3JlbF9hcnJh eSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gKi8KKwkJaWYgKHJvb3QtPmFw cGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRfcmVs X2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcGFyZW50X3J0ZSA9IHBs YW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJaWYgKHBhcmVu dF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJYnJlYWs7CisKKwkJdG9wX3J0aSA9 IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisKKwkvKiBHZXQgdGhlIHJhbmdlIHRhYmxlIGVu dHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEkuICovCisJcnRlID0gcGxhbm5lcl9ydF9mZXRj aChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHRvcF9ydGksIHJvb3Qp OworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pOworCUFzc2VydCh0b3BfcnRlLT5y dGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdvcmsgb3V0IHRoZSBjb3JyZWN0IG9jY3VycmVu Y2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gMTsgcHJpb3JfcnRpIDwgdG9w X3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlvcl9ydGU7CisJCUFw cGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJl bCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1 Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRo ZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhl bSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICoK KwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGNo aWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSAhPSBOVUxMICYmCisJ CQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbcHJpb3JfcnRpXSkgIT0gTlVMTCkK KwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKKworCQkJcGFyZW50X3J0ZSA9IHBs YW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJCWlmIChwYXJl bnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCQljb250aW51ZTsKKwkJfQorCisJ CS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcGxhbm5l cl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOworCQlpZiAocHJpb3JfcnRlID09IE5VTEwgfHwg cHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJLyogU2tp cCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21wKHByaW9yX3J0ZS0+ ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVl OworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJKytvY2N1cnJlbmNl OworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0YWJsZSwgZ2V0IHRoZSBzY2hlbWEgYW5k IHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0gdG9wX3J0aSkKKwl7CisJCXBhcnRuc3Ag PSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlk KSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJfQorCisJLyogT0ss IHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQuIFJldHVybiB0aGVtIHRvIHRoZSBjYWxs ZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCXJp ZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwly aWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1l OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgc2V0IG9m IFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisgKiBSVElzIHRoYXQgbWF5IGJlIHByZXNl bnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGNh bm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2aWNlLgorICoKKyAqIFRoZSBjYWxsZXIg aXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRrZXlzIGFycmF5IGlzIGxh cmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkLgorICovCitpbnQKK3Bn cGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsIEJpdG1h cHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpCit7CisJaW50 CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4 dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0g cGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRF X0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJv b3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0KKworCUFzc2VydChjb3VudCA+IDApOworCXJl dHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhcnJheSBvZiByYW5nZSB0YWJsZSBp ZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVMTCwKKyAqIG5vbi1SVEVfSk9JTiBlbnRyaWVz IGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRhYmxlLgorICovCitwZ3BhX2lkZW50aWZpZXIg KgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQbGFubmVkU3RtdCAq cHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChwc3RtdC0+cnRh YmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3VsdCA9IHBhbGxvYzBfYXJyYXkocGdwYV9pZGVu dGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRleAkgICAqdG9wX3J0aV9tYXA7CisJaW50CQkJ cnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVEluZm8gKnJ0aW5mbyA9IE5VTEw7CisJU3ViUGxh blJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisKKwkvKgorCSAqIEFjY291bnQgZm9yIHJlbGF0 aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhwYW5zaW9uIG9mIHBhcnRpdGlvbmVkCisJICog dGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0gcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAocnRh YmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJCQkJCQkJCQkgIHBzdG10LT5hcHBlbmRSZWxh dGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJlZ2luIGl0ZXJhdGluZywgd2UncmUgcHJvY2Vz c2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UKKwkgKiB0YWJsZSB0aGF0IG9yaWdpbmF0ZWQg ZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLCBzbyBzdWJydGluZm8gaXMKKwkgKiBOVUxM LiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhlIFN1YlBsYW5SVEluZm8gZm9yIHRoZSBzdWJx dWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlIHdlIGFyZSBwcm9jZXNz aW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUKKwkgKiBTdWJQbGFuUlRJbmZvIHRoYXQgZm9s bG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwgc28gd2hlbiB3ZSdyZQorCSAqIHByb2Nlc3Np bmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlLCB0aGUg bmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhlIHZlcnkgZmlyc3Qgb25lLgorCSAqLworCWlm IChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQorCQluZXh0cnRpbmZvID0gbGluaXRpYWwocHN0 bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBsb29wIG92ZXIgdGhlIHJhbmdlIHRhYmxlLiAq LworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7IHJ0aSsrKQorCXsK KwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJbmRleAkJdG9wX3J0aTsKKwkJUmFuZ2VUYmxF bnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCQljaGFyCSAgICpwYXJ0bnNw ID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisJCWludAkJCW9jY3VycmVuY2U7 CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJCS8qCisJCSAqIEFkdmFuY2UgdG8gdGhlIG5l eHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1lIHRvIGRvIHRoYXQuCisJCSAqCisJCSAqIFRo aXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZlciBpdGVyYXRlIG1vcmUgdGhhbiBvbmNlLCBi ZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkgdGhhdCBhIHN1YnF1ZXJ5IHdhcyBwbGFubmVk IGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRoZSByYW5nZSB0YWJsZTsgYnV0IGxldCdzIGJl IGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBoYXBwZW4uCisJCSAqLworCQl3aGlsZSAobmV4 dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRydGluZm8tPnJ0b2Zmc2V0KQorCQl7CisJCQly dGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsrcnRpbmZvaW5kZXggPj0gbGlzdF9sZW5ndGgo cHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRydGluZm8gPSBOVUxMOworCQkJZWxzZQorCQkJ CW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+c3VicnRpbmZvcywgcnRpbmZvaW5kZXgpOwor CQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRhYmxlIGVudHJ5LCBpZiBhbnkuICovCisJCXJ0 ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJsZSk7CisKKwkJLyoKKwkJICogV2UgY2FuJ3Qg YW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVsbCBlbnRyaWVzLCBhbmQgd2UgZG9uJ3Qgd2Fu dAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJpZXMuCisJCSAqLworCQlpZiAocnRlID09IE5V TEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBhZGRlZCBieSBwYXJ0aXRpb25lZCB0YWJsZSBl eHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBSVEkvUlRFIGFyZSBqdXN0IHRoZSBzYW1lIGFz IHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkgKiB3ZSBuZWVkIHRoZSBpbmZvcm1hdGlvbiBm b3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBhbHNvIGZldGNoCisJCSAqIHRoZSBwYXJ0aXRp b24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJdG9wX3J0aSA9IHRvcF9ydGlfbWFwW3J0aSAt IDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJCQl0b3BfcnRlID0gcnRlOworCQllbHNlCisJ CXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCBwc3RtdC0+cnRhYmxlKTsKKwkJCXBh cnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNl KHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJ CX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCQlv Y2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251bWJlcihwc3RtdC0+cnRhYmxlLCB0b3BfcnRp X21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3BfcnRpKTsKKworCQkvKiBHZXQgdGhlIG5hbWUg b2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3IgdG9wbGV2ZWwgcXVlcnkpLiAqLworCQlwbGFu X25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwgOiBydGluZm8tPnBsYW5fbmFtZTsKKworCQkv KiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBkZXJpdmVkLiAqLworCQlyaWQgPSAmcmVzdWx0 W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7 CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJCXJpZC0+cGFydG5zcCA9IHBhcnRu c3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7CisJCXJpZC0+cGxhbl9uYW1lID0gcGxhbl9u YW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGEgcGdw YV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBpZGVudGlmaWVycyBjb21wdXRlZCBmb3IgdGhl CisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBvbmUgbWF0Y2ggaXMgZm91bmQsIHJldHVybiB0 aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1cm4gMC4KKyAqLworSW5kZXgKK3BncGFfY29t cHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkgcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAq cmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOworCisJZm9yIChJbmRleCBydGkgPSAxOyBydGkg PD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgKnJ0aV9yaWQg PSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisKKwkJLyogSWYgdGhlcmUncyBubyBpZGVudGlm aWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8KKwkJaWYgKHJ0aV9yaWQtPmFsaWFzX25hbWUg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIGl0IG1hdGNoZXMsIHJldHVy biB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0ZWQgcGFydGl0aW9uCisJCSAqIHNjaGVtYSBt YXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9uIGFuZCBwbGFuIG5hbWVzIG11c3QgZWl0aGVy CisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21pdHRlZCBvbiBib3RoIHNpZGVzLgorCQkgKi8K KwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHJ0aV9yaWQtPmFsaWFzX25hbWUpID09IDAg JiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlfcmlkLT5vY2N1cnJlbmNlICYmCisJCQkocmlk LT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+cGFydG5zcCA9PSBOVUxMIHx8CisJCQkgc3Ry Y21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFydG5zcCkgPT0gMCkgJiYKKwkJCXN0cmluZ3Nf ZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgcnRpX3JpZC0+cGFydHJlbCkgJiYKKwkJ CXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxhbl9uYW1lLCBydGlfcmlkLT5wbGFu X25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9IDApCisJCQl7CisJCQkJLyogTXVsdGlwbGUg bWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmVzdWx0ID0g cnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEJ1aWxkIGEgbWFw cGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkgd2hvc2UgYWxpYXNfbmFtZSB3aWxsIGJlIHVz ZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllci4KKyAqCisgKiBG b3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0 aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4gRm9yIG90aGVyIHJlbGF0aW9ucywgaXQncyBq dXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICogU2luY2Ugd2UncmUgZXZlbnR1YWxseSBnb2lu ZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5IFJUSSBpbgorICogdGhlIHJhbmdl IHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBhbGwgdGhlIGFuc3dlcnMgaW4gYSBzaW5nbGUg cGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0LiBPdGhlcndpc2UsIHdlIG1pZ2h0 IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0CisgKiBsaXN0IHJlcGVhdGVkbHkgZm9yIGVu dHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBhcnJheSBp cyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdoaWxlIFJUSXMgdXNlCisgKiAxLWJhc2VkIGlu ZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIFJUSSBiZWZvcmUgbG9va2luZyBpdCB1cCBp biB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgSW5kZXggKgorcGdwYV9jcmVhdGVfdG9wX3J0 aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLCBMaXN0ICphcHBpbmZvcykK K3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBwYWxsb2MwX2FycmF5KEluZGV4LCBydGFibGVf bGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFrZSBldmVyeSBSVEkgcG9pbnQgdG8gaXRzZWxm LiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQor CQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsKKworCS8qIFVwZGF0ZSB0aGUgbWFwIGZvciBl YWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLworCWZvcmVhY2hfbm9kZShBcHBlbmRSZWxJbmZv LCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUluZGV4CQlwYXJlbnRfcnRpID0gYXBwaW5mby0+ cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlID0gcnRfZmV0Y2gocGFy ZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBSVEVfUkVMQVRJ T04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYXAgdGhlIGNoaWxkIHRv IHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50LiBQYXJlbnRzIGFsd2F5cworCQkgKiBwcmVj ZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBlbmRSZWxJbmZvIGxpc3QsIHNvIHRoaXMgc2hv dWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJdG9wX3J0aV9tYXBbYXBwaW5mby0+Y2hpbGRf cmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVudF9ydGkgLSAxXTsKKwl9CisKKwlyZXR1cm4g dG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBvY2N1cmVuY2UgbnVtYmVyIG9mIGEg Y2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0YWluIHN1YnF1ZXJ5LgorICoKKyAqIFRoZSBz YW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIHdpdGhpbiBhIHN1YnF1ZXJ5 LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1YXRlIGJ5IGdpdmluZyBkaWZmZXJlbnQgb2Nj dXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5kZXhlcy4KKyAqIEhvd2V2ZXIsIGNoaWxkIHRh YmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNsdWRpbmcgdGhlIHRhYmxlIG5hbWUgcmF0aGVy CisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUgb2NjdXJyZW5jZSBudW1iZXI7IGFuZCBqb2lu cyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hvdWxkbid0IGluY3JlbWVudCB0aGUgb2NjdXJl bmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQKK3BncGFfb2NjdXJyZW5jZV9udW1i ZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCSAgIFN1YlBsYW5SVElu Zm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQlydG9mZnNldCA9IChydGluZm8gPT0g TlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJCQlvY2N1cnJlbmNlID0gMTsKKwlS YW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwlmb3IgKEluZGV4 IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRpIDwgcnRpOyArK3ByaW9yX3J0aSkK Kwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlz IGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJ ICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1l bnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBj b3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRh YmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9yX3J0aSAtIDFdICE9IHByaW9yX3J0 aSkKKwkJCWJyZWFrOworCisJCS8qIFNraXAgam9pbnMuICovCisJCXByaW9yX3J0ZSA9IHJ0X2Zl dGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVf Sk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVy cy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVm LT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1 ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwlyZXR1cm4gb2NjdXJyZW5j ZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVy LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDAwZDJiNzA4MQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1 MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlmaWVyLmgKKyAqCSAg Y3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmll ci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBQR1BBX0lERU5USUZJ RVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5v ZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBn cGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7CisJaW50CQkJb2NjdXJy ZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNvbnN0IGNoYXIgKnBhcnRyZWw7CisJY29u c3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50aWZpZXI7CisKKy8qIENvbnZlbmllbmNl IGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHktTlVMTCBzdHJpbmdzLiAqLworc3RhdGlj IGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChjb25zdCBjaGFyICphLCBj b25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiB0cnVlOworCWVsc2UgaWYg KGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVy biBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBncGFfaWRlbnRp Zmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0ZXJuIHZvaWQgcGdw YV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGks CisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0ZXJuIGludAlwZ3BhX2Nv bXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJ CQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpy aWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zv cl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KTsKKworZXh0ZXJuIEluZGV4IHBncGFf Y29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJ CQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgcGdwYV9p ZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGY1MzI3ODg2ZgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKQEAgLTAsMCAr MSw2MTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5jCisgKgkgIGFu YWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2lu Y2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRl ICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmludC5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRlbXBvcmFyeSBvYmplY3QgdXNlZCB3aGVu IHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3RydWN0IHBncGFfam9pbl91bnJvbGxlcgor eworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7CisJUGxhbgkgICAqb3V0 ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9lbGlkZWRfbm9kZTsKKwlib29sCQlvdXRl cl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKwlQ bGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWROb2RlICoqaW5uZXJfZWxpZGVkX25vZGVz OworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vucm9sbGVyczsKKwlib29sCSAgICppbm5l cl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0aWMgcGdwYV9qb2luX3N0cmF0ZWd5IHBn cGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbG91dGVyLAorCQkJ CQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAgRWxpZGVkTm9kZSAqKmVs aWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVhbGlubmVy LAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCQkJ CSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdw YV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbik7CitzdGF0aWMg RWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0bXQgKnBzdG10LCBQ bGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpmb3VuZF9hbnlfZ2F0aGVyKTsKK3N0YXRp YyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAq KnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpOworCitzdGF0aWMgYm9v bCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pOworc3RhdGljIGJvb2wgaXNf c29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgorICogQ3JlYXRlIGFuIGluaXRpYWxseS1l bXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNy ZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxhdGVyIGJlIHVzZWQgdG8gY3JlYXRlIGEK KyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmlyc3QgY2FsbGluZyBwZ3BhX3Vucm9sbF9q b2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3BhX2pvaW5fdW5yb2xsZXIgKgorcGdwYV9j cmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBncGFfam9pbl91bnJvbGxlciAqam9pbl91 bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxsb2MwX29iamVjdChwZ3BhX2pvaW5fdW5y b2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgPSA0OworCWpvaW5fdW5yb2xsZXIt PnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJv bGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMgPQorCQlw YWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlwYWxsb2NfYXJyYXkoRWxpZGVkTm9kZSAq LCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJv bGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3Vucm9sbGVyICosIGpvaW5fdW5yb2xs ZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhl ciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwor CXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgorICogVW5yb2xsIG9uZSBsZXZlbCBvZiBh biB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBPdXIgYmFzaWMgZ29hbCBoZXJlIGlzIHRv IHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIgaW4gdGhlIFBsYW4KKyAqIHRyZWUgaW50 byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1Y3R1cmUgdGhhdCB3ZSBjYW4gbW9yZSBl YXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBVbnJvbGxpbmcgaXMgb3V0ZXIt ZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFzIEpvaW4xKEpvaW4yKEEsQiksSm9pbjMo QyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2JqZWN0IHNob3VsZCBiZQorICogdXNlZCBm b3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJlbnQgb25lIHdpbGwgYmUgbmVlZGVkIGZv ciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMgYSBqb2luIHdpdGhpbiB0aGUgKmlubmVy KiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBwZ3BhX3BsYW5fd2Fsa2VyIGNyZWF0ZXMg YSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVjdCB3aGVuIGl0CisgKiBlbmNvdW50ZXJz IGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSBpbiB3aGljaCBubyBqb2luIHVu cm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJvbSB0aGVyZSwgdGhpcyBmdW5jdGlvbiBp cyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0byB3aGF0IHBvcnRpb24gb2YgdGhlIHBs YW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGllcywgYW5kIGZvcgorICogY3JlYXRpbmcg YW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2JqZWN0cyB0aGF0IGFyZSBuZWVkZWQgYXMg YSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpvaW4gdHJlZXMuIFdlIGRvIHRoaXMgYnkg cmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIHVz ZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBvdXRlciBhbmQgaW5uZXIKKyAqIHN1YnRy ZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEgKm91dGVyX2pvaW5fdW5yb2xsZXIgYW5k CisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVjdGl2ZWx5LgorICovCit2b2lkCitwZ3Bh X3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFu LAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkgcGdwYV9qb2luX3Vucm9sbGVy ICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vu cm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKQor eworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlQbGFuCSAgICpyZWFsaW5uZXIsCisJ CQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlubmVyLAorCQkJICAgKmVsaWRl ZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRfYW55X291dGVyX2dhdGhlciA9IGZhbHNl OworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCUFzc2VydChqb2lu X3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIGpvaW5f dW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0YWluIHR5cGVzIG9mCisJICogcGxhbiBu b2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0 ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhhdCBjYW4gb2NjdXIgaW4gYSBqb2luIHRy ZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBvciBqb2lucy4KKwkgKgorCSAqIFRoaXMg aW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxpemUsIE1lbW9pemUsIGFuZCBIYXNoIG5v ZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LAorCSAqCisJICog KDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgYXQgYW55 IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVyZSB0aGUgcGxhbm5lciBkZWNpZGVkIHRv IGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICogKDMpIFNvcnQgYW5kIEluY3JlbWVudGFs U29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVhdGggTWVyZ2VKb2luCisJICogb3IgR2F0 aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBVbmlxdWUgbm9kZXMsIHdoaWNoIGNhbiBv Y2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQorCSAqIG51bGxhYmxlIHNpZGUgb2YgYSBz ZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUgcmVzdWx0LCBhbmQKKwkgKgorCSAqICg1 KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hpY2ggY2FuIGJlIGFkZGVkIGVpdGhlciB0 byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10aW1lIGZpbHRlciAoYnV0IFJlc3VsdCBu b2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRlZ2VuZXJhdGUgc2NhbnMgb3Igam9pbnMp LgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwpIHx8IElzQShwbGFuLCBNZW1vaXplKSB8 fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4sIEdhdGhlcikgfHwgSXNBKHBsYW4sIEdh dGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4ocGxhbikgfHwgSXNBKHBsYW4sIEFnZykg fHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChwbGFu KSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwkJcmV0dXJu OworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIG5vZGVzIHRoYXQg cmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAorCSAqIHRoaXMgc2hvdWxkIGJlIGFuIHVu cm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9IHBncGFfZGVjb21wb3NlX2pvaW4od2Fs a2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVyLCAmcmVhbGlubmVyLAorCQkJCQkJCQkg ICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJCQkJCQkJICAgJmZvdW5kX2FueV9vdXRl cl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKworCS8qIElm IG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0LiAqLworCWlmIChqb2luX3Vucm9sbGVy LT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKQorCXsKKwkJam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCQlyZXBh bGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSwKKwkJCQkJCSAgIHBncGFfam9pbl9z dHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vu cm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVy LT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4gKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xs ZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQor CQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzLAorCQkJ CQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCQlyZXBhbGxv Y19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkg ICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5y b2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVy LT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3BhX2pvaW5fdW5yb2xsZXIgKiwKKwkJCQkJ CSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCX0KKworCS8qCisJICogU2luY2Ugd2Un cmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJlZXMsIGl0IGZvbGxvd3MgdGhhdCBpZiB0 aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVucm9sbGFibGUgam9pbiwgaXQgc2hvdWxk IGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUgb2JqZWN0LiBPdGhlcndpc2UsIHdlJ3Zl IHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2FuIHVucm9sbAorCSAqIGludG8gdGhpcyBv YmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVyIHNpZGUgYXMgdGhlIGZpbmFsIG91dGVy CisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBwZ3BhX2lz X2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVy OworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW4gPSByZWFsb3V0ZXI7 CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlID0gZWxpZGVkb3V0ZXI7CisJCWpv aW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCQliZW5lYXRoX2FueV9n YXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRo ZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9sbGFibGUgam9pbiwgaXQgbmVlZHMgdG8g YmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGludG8gYSBuZXcgdW5yb2xsZXIgb2JqZWN0 LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5fdW5yb2xsZXItPm51c2VkKys7CisJam9p bl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVneTsKKwlqb2luX3Vucm9sbGVyLT5pbm5l cl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRf bm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2Fu eV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X2lubmVyX2dh dGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVhbGlubmVy KSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7 CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJam9pbl91bnJvbGxlci0+ aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5fdW5yb2xsZXI7Cit9CisKKy8qCisgKiBV c2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4gYSBwZ3BhX2pvaW5fdW5yb2xsZXIgb2Jq ZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKi8KK3BncGFfdW5y b2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVy KQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisJaW50CQkJaTsKKworCS8qCisJICog V2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZhciBhcyB0byBjcmVhdGUgYSBqb2luIHVu cm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxlYXN0IG9uZSB1bnJvbGxhYmxlIGpvaW4u CisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51c2VkID4gMCk7CisKKwkvKiBBbGxvY2F0 ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9IHBhbGxvYzBfb2JqZWN0KHBncGFfdW5y b2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpvaW5fdW5yb2xsZXItPm51c2VkOworCXVq b2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vu cm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0gcGFsbG9jMF9hcnJheShwZ3BhX2pvaW5f bWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisKKwkvKiBIYW5kbGUgdGhlIG91dGVybW9z dCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0gam9pbl91bnJvbGxlci0+b3V0ZXJfc3Vi cGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9l bGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9CisJCXBncGFfYnVpbGRfc2Nhbih3YWxr ZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpvaW4tPm91dGVyLmVsaWRlZF9ub2RlLAor CQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJdHJ1 ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5zIGZyb20gdGhlIGRlZXBlc3QgcGFydCBv ZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZpcnN0IGluIHRoZSByZXN1bHQgb2JqZWN0 LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVtIGluIGV4YWN0bHkKKwkgKiB0aGUgcmV2 ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIG9yZGVyIG9mIHRoZSBh cnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcmVzdWx0LgorCSAqLworCWZv ciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNlZDsgKytpKQorCXsKKwkJaW50CQkJayA9 IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisKKwkJLyogQ29weSBzdHJhdGVneSwgUGxh biwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5zdHJhdGVneVtpXSA9IGpvaW5fdW5yb2xs ZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJbaV0ucGxhbiA9IGpvaW5fdW5yb2xsZXIt PmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUgPSBqb2lu X3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107CisKKwkJLyoKKwkJICogRmlsbCBpbiBy ZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRoZSBuZXN0ZWQgam9pbiB1bnJvbGxlciwK KwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRoZSBwbGFuIGFuZCBlbGlkZWQgbm9kZXMu CisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW2tdICE9IE5VTEwp CisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9pbiA9CisJCQkJcGdwYV9idWlsZF91bnJv bGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVyW2ldLnNjYW4gPQorCQkJCXBncGFfYnVp bGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5wbGFuLAorCQkJCQkJCQl1am9pbi0+aW5u ZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhf YW55X2dhdGhlcltpXSwKKwkJCQkJCQkJdHJ1ZSk7CisJfQorCisJcmV0dXJuIHVqb2luOworfQor CisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBwZ3BhX2pvaW5fdW5yb2xsZXIuCisg Ki8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAq am9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSk7CisJcGZy ZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMpOworCXBmcmVlKGpvaW5fdW5yb2xsZXIt PmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsKK30KKworLyoKKyAqIElkZW50aWZ5IHRoZSBq b2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFuZCB0aGUgInJlYWwiIGlubmVyIGFuZCBvdXRl cgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1wbGUsIGEgSGFzaCBKb2luIGFsd2F5cyBoYXMg YSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUsIGJ1dAorICogZm9yIGFsbCBpbnRlbnRzIGFu ZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1dCBpcyB0aGUgSGFzaCBub2RlJ3MgY2hpbGQs CisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYuCisgKgorICogTGlrZXdpc2UsIGEgTWVyZ2Ug Sm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhlIGlubmVyIG9yIG91dGVyIHNpZGU7IGlmCisg KiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0aGUgam9pbiBpcyB0aGUgU29ydCBub2RlJ3Mg Y2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBpdHNlbGYuCisgKgorICogSW4gYWRkaXRpb24s IHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVkIExvb3AsIHRoZSBqb2luIHBsYW5uaW5nIGNv ZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2RlcyBzdWNoIGFzIE1hdGVyaWFsaXplIG9yIE1l bW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMgYW4gYXNwZWN0IG9mIHRoZSBqb2luIHN0cmF0 ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMsIHRoZSB0cnVlIGlucHV0CisgKiB0byB0aGUg am9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgorICoKKyAqIEhvd2V2ZXIsIGlmIGFueSBpbnZv bHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFkIGEgbm93LWVsaWRlZCBub2RlIHN0YWNrZWQK KyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9vayB0aHJvdWdoIiB0aGF0IG5vZGUgLS0gaW5k ZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJlbGV2YW50IGZvciBvdXIgcHVycG9zZXMgaXMg dGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQgcGxhbiBub2RlLCByYXRoZXIKKyAqIHRoYW4g dGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIGVsaWRl ZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVlbgorICogdXBwZXJt b3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8gc2V0cmVmcyBwcm9jZXNzaW5nOyB3ZSBleHBl Y3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBpbiB0aGUgbGlzdCBvZiBlbGlkZWQgbm9kZXMu CisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIgYW5kICpyZWFsaW5uZXIgd2lsbCBoYXZlIGJl ZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBhbmQgcmVhbCBvdXRlciBwbGFucyB0aGF0IHdl IGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91dGVyIGFuZAorICogKmVsaWRlZHJlYWxpbm5l ciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9kaW5nIGVsaWRlZCBub2Rlcy4KKyAqIEFkZGl0 aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgYW5kICpmb3VuZF9hbnlfaW5uZXJfZ2F0 aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdlIGxvb2tlZCB0aHJvdWdoIGEgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4sIGFuZCBm YWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kKK3BncGFfZGVj b21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4s CisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCUVsaWRlZE5v ZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJ CWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJvb2wgKmZvdW5kX2FueV9pbm5lcl9nYXRo ZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fsa2VyLT5wc3RtdDsKKwlKb2luVHlwZQlq b2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5cGU7CisJUGxhbgkgICAqb3V0ZXJwbGFu ID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5uZXJwbGFuID0gcGxhbi0+cmlnaHR0cmVl OworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlubmVyOwor CXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlib29sCQl1bmlxdWVvdXRlcjsKKwlib29s CQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBz dG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBz dG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJKmZv dW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkK Kwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkg aGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBub2RlIG9uIHRoZQorCQkJICogaW5uZXIg c2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlIHJlY29yZCBpdAor CQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRl ZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVs aWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0 cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQl9CisJCQllbHNlCisJ CQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjsKKworCQkJLyoKKwkJCSAqIEZv ciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBvciB0aGUgaW5uZXIgc3VicGxhbiwgb3IK KwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBiZSBzb3J0ZWQ7IHdlIG11c3QgZGlzcmVn YXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSB0byBmaW5kIHRoZSBy ZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFuLgorCQkJICovCisJCQlpZiAoZWxpZGVk b3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4ob3V0ZXJwbGFuKSkKKwkJCQllbGlkZWRv dXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwkJCWlmIChlbGlk ZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihpbm5lcnBsYW4pKQorCQkJCWVsaWRl ZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhh dmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3IgTWVtb2l6ZSBub2RlCisJCQkgKiBvbiB0 aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UKKwkJ CSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlp ZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7 CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7 CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU7CisJCQl9CisJ CQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5lcnBsYW4sIE1lbW9pemUp KQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5l cnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkU7CisJCQl9 CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU47CisJCQli cmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJCS8qCisJCQkgKiBUaGUgaW5uZXIgc3Vi cGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhhc2ggbm9kZTsgdGhlIHJlYWwKKwkJCSAq IGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLgorCQkJICovCisJCQlBc3Nl cnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNzZXJ0KGVsaWRlZGlubmVyID09IE5VTEwp OworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7 CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9k ZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBkZWNpZGVk IHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0IG1ha2luZworCSAqIHRoZSBudWxsYWJs ZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRoZW4gcGVyZm9ybWluZyBhIG5vcm1hbCBq b2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVyZWZvcmUsIHdlIG1pZ2h0IG5lZWQgdG8g ZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9kZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUg cGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10 LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVuaXF1ZWlubmVyID0gcGdwYV9kZXNjZW5k X2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcik7CisKKwkvKgorCSAq IFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gcGFyYWxsZWxpemUgcGFydCBvZiB0aGUg am9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHByZXNlbnQsIHRoaXMgd2lsbCBhcHBlYXIg YmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBqb2luCisJICogc3RyYXRl Z3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5pcXVlbmVzcy1lbmZvcmNpbmcgbm9kZSBi ZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLCBpZiBwcmVzZW50LgorCSAqLwor CWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2Nl bmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwKKwkJCQkJCQkJCQkJICBmb3VuZF9hbnlf b3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9vdXRlcl9nYXRoZXIgJiYKKwkJCXBncGFf ZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpKQorCQkJ dW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCkKKwl7CisJ CWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQsICZpbm5lcnBsYW4s CisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisJCWlmIChmb3VuZF9hbnlf aW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJmlubmVy cGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlubmVyID0gdHJ1ZTsKKwl9CisKKwkvKgor CSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQgbm9kZSBoYXMgYmVlbiBpbnNlcnRlZCBlaXRo ZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxpc3Qgb3IgdG8gaW1wbGVtZW50IGEgb25lLXRp bWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2NlbmQKKwkgKiB0aHJvdWdodCBpdC4gTm90ZSB0 aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxkIHdvdWxkIGJlIGEKKwkgKiBkZWdlbmVy YXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhpbmcgd2UgY291bGQgZGVzY2VuZCB0aHJv dWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3QgaXQncyBwb3NzaWJsZSBmb3IgdGhpcyB0byBo YXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAqIEdhdGhlciBNZXJnZSBub2RlLCB0b28sIGJ1 dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlIGZvciB0aGF0CisJICogc2NlbmFyaW8u CisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9j aGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10 LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9k ZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgc2VtaWpvaW4g dGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpvaW4gYnkgbWFraW5nIG9uZQorCSAqIHNp ZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5vdGUgdGhhdCB0aGUgaW5uZXIgb3Igb3V0 ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBx dWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgorCSAqIHRyZWUgdHJhdmVyc2FsIHJlYWNo ZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0aGUgcGxhbm5lciBjb3VsZCBoYXZlIG1h ZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJICogYW5kIHRoZXJlYnkgY29udmVydGVk IGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBub3QgdG8gZG8gc28sIHRoYXQKKwkgKiBp cyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIFhYWDogV2UgYWRtaXQgdG9vIG11Y2ggbm9u LXVuaXF1ZSBhZHZpY2UsIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZQorCSAqIGZyb20gdGhl IHJlZ3Jlc3Npb24gdGVzdHM6IEVYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpIERFTEVU RSBGUk9NCisJICogcHJ0MV9sIFdIRVJFIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBpbnQ0X3RibCwg TEFURVJBTCAoU0VMRUNUCisJICogaW50NF90YmwuZjEgRlJPTSBpbnQ4X3RibCBMSU1JVCAyKSBz cyBXSEVSRSBwcnQxX2wuYyBJUyBOVUxMKS4gV2UgZW1pdAorCSAqIFNFTUlKT0lOX05PTl9VTklR VUUoKGludDRfdGJsIHNzKSkgYnV0IGNyZWF0ZV91bmlxdWVfcGF0aCgpIGZhaWxzIGluCisJICog dGhpcyBjYXNlLCBzbyB0aGVyZSdzIG5vIHNqLXVuaXF1ZSB2ZXJzaW9uIHBvc3NpYmxlLgorCSAq CisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBlYXIgc2xpZ2h0bHkgaGlnaGVyIHVwIGluIGlu IHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUgb2YgdGhlIG5vZGVzIHRocm91Z2ggd2hpY2gg d2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGhhdmUKKwkgKiBhc3NvY2lhdGVkIFJUSXMuCisJICoK KwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEgc29tZXdoYXQgaGFja3kgd2F5IG9mIHBhc3Npbmcg aW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUgbWFpbiB0cmVlIHdhbGssIGJ1dCBJIGRvbid0IGN1 cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEuCisJICovCisJaWYgKHVuaXF1ZW91dGVyKQorCQlw Z3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUsIG91 dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKQorCQlwZ3Bh X2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLCBv dXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5lcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBpbm5lcnBsYW4pOworCWVsc2UgaWYgKGpv aW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQ R1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgaW5uZXJwbGFuKTsKKworCS8qIFNldCBvdXRwdXQg cGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVyID0gb3V0ZXJwbGFuOworCSpyZWFsaW5uZXIgPSBp bm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRlciA9IGVsaWRlZG91dGVyOworCSplbGlkZWRyZWFs aW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1cm4gc3RyYXRlZ3k7Cit9CisKKy8qCisgKiBEZXNj ZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4gYSBqb2luIHRyZWUgdGhhdCB0aGUgY2FsbGVyIGhh cyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJlbGV2YW50LgorICoKKyAqIFVwZGF0ZXMgKnBsYW4s IGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0 aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFfZGVz Y2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pCit7CisJKnBsYW4gPSAo KnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCAq cGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBhbnkgU29ydAorICogb3IgSW5jcmVtZW50YWxTb3J0 IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0aGVyIE1lcmdlLgorICoKKyAqIENhbGxlciBzaG91 bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJlIGlzIG5vIEVsaWRlZE5vZGUgcGVydGFpbmluZyB0 bworICogdGhlIGluaXRpYWwgdmFsdWUgb2YgKnBsYW4uCisgKgorICogVXBkYXRlcyAqcGxhbiwg YW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5nIHRvIHRo ZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAqZm91bmRfYW55X2dhdGhlciA9IHRydWUgaWYgZWl0 aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIHdhcyBmb3VuZCwgYW5kIG90aGVyd2lzZSBs ZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2Nl bmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJYm9v bCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlpZiAoSXNBKCpwbGFuLCBHYXRoZXIpKQorCXsKKwkJ KmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gcGdwYV9kZXNjZW5kX25vZGUocHN0 bXQsIHBsYW4pOworCX0KKworCWlmIChJc0EoKnBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCUVs aWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlp ZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCWVsaWRlZCA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQkqZm91bmRfYW55X2dhdGhlciA9 IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisg KiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5pcXVlIG5vZGUsIHdlIHdhbnQgdG8gZGVzY2VuZCB0 aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhhcyBhIGNvcnJlc3BvbmRpbmcgZWxpZGVkIG5vZGUu IElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMgYSBTb3J0IG9yCisgKiBJbmNyZW1lbnRhbFNvcnQs IHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRocm91Z2ggdGhhdCwgdW5sZXNzIGl0IGhhcyBhCisg KiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLgorICoKKyAqIE9uIGVudHJ5LCAqZWxpZGVkX25v ZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGNvcnJlc3BvbmRpbmcKKyAq IHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdpbGwgc3RpbGwgYmUgdHJ1ZSwgYnV0ICpwbGFuIG1h eSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVhc29uIHdlIGRvbid0IHdhbnQgdG8g ZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2RlcyBpcyB0aGF0IGEgc2luZ2xlCisgKiBqb2luIHRy ZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkgc29ydCBvZiBlbGlkZWQgbm9kZTogc3VicXVlcmll cyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVseSwgYW5kIHBsYW5uaW5nIGluc2lkZSBhbiBBcHBl bmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNlcGFyYXRlIGZyb20gcGxhbm5pbmcgb3V0c2lkZSBv ZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgd2UgZGVzY2VuZCB0aHJv dWdoIGF0IGxlYXN0IG9uZSBub2RlLCBhbmQKKyAqIG90aGVyd2lzZSBmYWxzZS4KKyAqLworc3Rh dGljIGJvb2wKK3BncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxh biAqKnBsYW4sCisJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpCit7CisJaWYgKCplbGlk ZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKCpwbGFuLCBBZ2cp IHx8IElzQSgqcGxhbiwgVW5pcXVlKSkKKwl7CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2Vu ZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlpZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNf c29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2Rl KHBzdG10LCBwbGFuKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5vZGUgdGhhdCBoYXMgYSBjaGlsZD8KKyAqLwor c3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoUGxhbiAqcGxhbikKK3sKKwly ZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxhbi0+bGVmdHRyZWUgIT0gTlVMTDsKK30KKwor LyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hvc2UgcHVycG9zZSBpcyBwdXQgdGhlIGRhdGEg aW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0aWMgYm9vbAoraXNfc29ydGluZ19wbGFuKFBs YW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBTb3J0KSB8fCBJc0EocGxhbiwgSW5jcmVt ZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9q b2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGM3Mjk4NmE3MAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5oCisgKgkgIGFuYWx5c2lzIG9mIGpv aW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQ R1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5v ZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIgcGdw YV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luIHBncGFf dW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhvdWdoIHRoZXJlIGFyZSB0aHJlZSBtYWluIGpv aW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNzaWZ5IHRoaW5ncworICogbW9yZSBwcmVjaXNl bHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIG1hdGVyaWFsaXph dGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFuZCBuZXN0ZWQgbG9vcHMgY2FuIHVzZSBlaXRo ZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1vaXphdGlvbi4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4gPSAwLAorCUpTVFJBVF9NRVJHRV9KT0lOX01B VEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwlKU1RSQVRfTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJSlNUUkFUX0hB U0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55 dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFf Sk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9IQVNIX0pPSU4gKyAxKQorCisvKgorICogSW4g YW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5IG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2lu IHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4gdHJlZXMgd2l0aCBvdGhlciBzaGFwZXMgY2Fu IGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgorICogVGhlIHBsYW4gbm9kZSB3ZSBzdG9yZSBo ZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVyIGNoaWxkIG9mIHRoZSBqb2luCisgKiBub2Rl LCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQgd2UgbG9vayB0aHJvdWdoIHN1Ym5vZGVzIHRo YXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRoZSBqb2luIG1ldGhvZCBpdHNlbGYuIEZvciBp bnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhhdAorICogbWF0ZXJpYWxpemVzIHRoZSBpbm5l ciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxkIG9mIHRoZSBNYXRlcmlhbGl6ZSBub2RlLAor ICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0c2VsZi4KKyAqCisgKiBJZiBzZXRyZWZzIHBy b2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5vZGVzIGZyb20gdGhlIHBsYW4gdHJlZSwgdGhl bgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91dCB0aGUgdG9wbW9zdCBvZiB0aG9zZSBpbiBl bGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQgd2lsbCBiZSBOVUxMLgorICoKKyAqIEV4YWN0 bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pvaW4gd2lsbCBiZSBub24tTlVMTC4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpwbGFuOworCUVsaWRlZE5vZGUgKmVsaWRlZF9u b2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47CisJcGdwYV91bnJvbGxlZF9qb2luICp1bnJv bGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVyOworCisvKgorICogV2UgY29udmVydCBvdXRl ci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0cnVjdHVyZTsgdGhhdCBpcywgKChBIEpPSU4g QikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29udmVydGVkIHRvIG91dGVyID0gQSwgaW5uZXIg PSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJlbid0IG91dGVyLWRlZXAsIHN1YnN0cnVjdHVy ZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIpIEpPSU4gKEMgSk9JTiBEKQorICogaXMgcmVw cmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9IDxCIFg+LCB3aGVyZSBYIGlzIGEgcGdwYV91 bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQuCisgKi8KK3N0cnVjdCBwZ3BhX3Vucm9sbGVk X2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVyOyBtdXN0IG5vdCBpdHNlbGYgYmUgYW4gdW5y b2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyIG91dGVyOworCisJLyogTnVtYmVyIG9m IGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUgc3RyYXRlZ3kgYW5kIGlubmVyIGFycmF5cy4g Ki8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBBcnJheSBvZiBzdHJhdGVnaWVzLCBvbmUgcGVy IG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7 CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNsdWRpbmcgdGhlIG91dGVybW9zdC4gRGVlcGVz dCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyICppbm5lcjsKK307CisKKy8qCisgKiBEb2Vz IHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBKb2luPworICovCitzdGF0aWMgaW5saW5lIGJv b2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxhbiwgTmVzdExv b3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8IElzQShwbGFuLCBIYXNoSm9pbik7Cit9CisK K2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9p ZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFuLCBib29sIGJlbmVhdGhfYW55X2dhdGhlciwK KwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3Bh X2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5f dW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKTsKK2V4dGVybiBwZ3BhX3Vucm9sbGVkX2pv aW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpOwor ZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVy ICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg5YTY3NWZmOTNlCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCkBA IC0wLDAgKzEsNjI4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5j CisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4g dHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9zY2Fu LmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3Bh cnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBmb3IgdGV4dHVhbCBhZHZpY2Ug Z2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlmaWVycyBpcyB0aGUgY2FsbGVyLXByb3ZpZGVk IGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzLgorICogU2VlIHRoZSBjb21tZW50cyBh dCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5jIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog YnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiB3cmFwX2Nv bHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIG91dHB1dCB0 aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFfbWF5YmVfbGluZWJyZWFrKCkgYW5kIGNvbW1l bnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9vdXRw dXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipyaWRfc3RyaW5nczsKKwlTdHJpbmdJbmZvCWJ1 ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdwYV9vdXRwdXRfY29udGV4dDsKKworc3RhdGlj IHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250 ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pOworc3RhdGljIHZvaWQg cGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJ CQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1 dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkg IHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgTGlzdCAqc2NhbnMpOwor c3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMocGdwYV9vdXRwdXRf Y29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQkJIFBsYW4gKnBsYW4pOworc3RhdGljIHZvaWQg cGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBP aWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291 dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJ CQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRf c2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJ Y2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJTGlzdCAqcmVsaWRfc2V0cyk7CitzdGF0aWMgdm9p ZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJ CQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxh dGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJ CQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworCitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX2pv aW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpw Z3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOwor c3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBl IHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3BhX21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1 ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoKKyAqIEFwcGVuZCBxdWVyeSBhZHZpY2UgdG8gdGhl IHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCAn d2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZQorICogbWFpbiBwbGFuIHRy ZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRoZSBQbGFubmVkU3RtdC4KKyAqCisgKiAncnRfaWRl bnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBvbmUgZm9yIGVhY2gg UlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoKS4K KyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJ2J1ZicuCisgKi8KK3ZvaWQKK3Bn cGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycykKK3sKKwlJ bmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9vdXRwdXRfY29udGV4dCBjb250ZXh0OworCisJLyog QmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YocGdw YV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRleHQuYnVmID0gYnVmOworCisJLyoKKwkgKiBDb252 ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBmb3JtLiBOb3RlIHRoYXQgdGhlIGxvb3AgdmFyaWFi bGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEksIGJlY2F1c2UgUlRJcyBhcmUgMS1iYXNlZC4gU29t ZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlkZW50aWZpZXIsIGVpdGhlciBiZWNhdXNlIHRoZSBy ZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJlY2F1c2UgdGhhdAorCSAqIHBvcnRpb24gb2YgdGhl IHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8gdGhlIGZpbmFsIHBsYW4uCisJICovCisJY29udGV4 dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJyYXkoY29uc3QgY2hhciAqLCBydGFibGVfbGVuZ3Ro KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0YWJsZV9sZW5ndGg7ICsraSkKKwkJaWYgKHJ0X2lk ZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0gTlVMTCkKKwkJCWNvbnRleHQucmlkX3N0cmluZ3Nb aV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tpXSk7CisKKwkvKgor CSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gdXNlIEVYUExBSU4gKFBMQU5fQURWSUNFKSBpbiBh biA4MC1jb2x1bW4gd2luZG93CisJICogZnJvbSBhIHBzcWwgY2xpZW50IHdpdGggZGVmYXVsdCBz ZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUgc3BhY2UgdG8KKwkgKiB0aGUgbGVmdCBvZiB0aGUg b3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRkIHR3byBtb3JlIHRvIHRoZSBsZWZ0IG9mIHRoZQor CSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2YgbW9yZSB0aGFuIDc3IGNoYXJhY3RlcnMgd2lsbCB3 cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBsaW1pdCB0byA3NiBoZXJlIHNvIHRoYXQgdGhlIG91 dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdheSB0byB0aGUKKwkgKiB2ZXJ5IGxhc3QgY29sdW1u IG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAqIE9mIGNvdXJzZSwgdGhpcyBpcyBmYWlybHkgYXJi aXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywgYW5kIG9uZSBjb3VsZAorCSAqIHdlbGwgbWFrZSBh biBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQgd3JhcCBsaW1pdCwgb3IgZm9yIGEgY29uZmlndXJh YmxlCisJICogb25lLgorCSAqLworCWNvbnRleHQud3JhcF9jb2x1bW4gPSA3NjsKKworCS8qCisJ ICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVSKCkgYWR2aWNlIGZ1bGx5IGRlc2NyaWJlcyB0aGUg am9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2luZ2xlIHVucm9sbGVkIGpvaW4uIE1lcmdpbmcgaXMg bm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0IHdvdWxkCisJICogY2hhbmdlIHRoZSBtZWFuaW5n LCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1lYW5zIHNpbXBseSB0aGF0IHNlcXVlbnRpYWwKKwkg KiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG9mIHRob3NlIHJlbGF0aW9ucywgYW5kIGlz IHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNFUV9TQ0FOKGEgYikgU0VRX1NDQU4oYyBkKSwgYnV0 IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMgdGhhdCAiYSIKKwkgKiBpcyB0aGUgZHJpdmluZyB0 YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0byAiYiIgdGhlbiAiYyIgdGhlbiAiZCIsCisJICog d2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSBKT0lOX09SREVSKGEgYikgYW5kIEpPSU5f T1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNoKGxjLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVk X2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbiA9IGxmaXJzdChsYyk7CisK KwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7 CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC5idWYsICJKT0lOX09SREVSKCIpOworCQlwZ3Bh X291dHB1dF91bnJvbGxlZF9qb2luKCZjb250ZXh0LCB1am9pbik7CisJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOworCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0 LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7CisJfQorCisJLyogRW1pdCBqb2luIHN0cmF0ZWd5 IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0gMDsgcyA8IE5VTV9QR1BBX0pPSU5fU1RSQVRFR1k7 ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0ZWd5ID0gcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRl Z3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KCZjb250ZXh0LAorCQkJCQkJ CQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzXSk7CisJfQor CisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRlZ3kgYWR2aWNlIChidXQgbm90IGZvciBvcmRpbmFy eSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVmaW5pdGlvbmFsbHkgdW5pbnRlcmVzdGluZykuCisJ ICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZOyArK2MpCisJ CWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFSWSkKKwkJCXBncGFfb3V0cHV0X3NjYW5fc3RyYXRl Z3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2NhbnNbY10pOworCisJLyogRW1pdCBxdWVyeSBmZWF0 dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0ID0gMDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyAr K3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUoJmNvbnRleHQsIHQsIHdhbGtlci0+cXVl cnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1pdCBOT19HQVRIRVIgYWR2aWNlLiAqLworCXBncGFf b3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQor CisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJzIG9mIGFuIHVucm9sbGVkIGpvaW4sIGZpcnN0IHRo ZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAqIHRoZW4gdGhlIGlubmVyIG1lbWJlcnMgb25lIGJ5 IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAor CQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pCit7CisJcGdwYV9vdXRwdXRfam9pbl9t ZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVyKTsKKworCWZvciAoaW50IGsgPSAwOyBrIDwgam9p bi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIgPSAmam9pbi0+ aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0 LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAn KTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgbWVtYmVyKTsKKwl9Cit9CisK Ky8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gYXMgcGFy dCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRf am9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXBncGFfam9p bl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCXBncGFf b3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4dCwgbWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCX0KKwllbHNlCisJewor CQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVyLT5zY2FuOworCisJCUFzc2VydChzY2FuICE9IE5V TEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9O KQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+ cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVm LCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn fScpOworCQl9CisJfQorfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBn cGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFsbCB0aGUgc2NhbnMgbXVzdCB1c2UgdGhlIHN0cmF0 ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0ZWd5IiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZv aWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4 dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBMaXN0ICpz Y2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAoc2NhbnMgPT0gTklMKQorCQly ZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVm LCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHN0cmF0ZWd5KSk7CisK Kwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJUGxhbgkgICAqcGxh biA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxz ZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndy YXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsK KwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVsYXRpb24gaWRlbnRpZmllcnMuICovCisJCWlmIChi bXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291 dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQll bHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJ CXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlk cyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwor CQkvKiBGb3Igc2NhbnMgaW52b2x2aW5nIGluZGV4ZXMsIG91dHB1dCBpbmRleCBpbmZvcm1hdGlv bi4gKi8KKwkJaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRFWCkKKwkJeworCQkJQXNzZXJ0 KElzQShwbGFuLCBJbmRleFNjYW4pKTsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQt PmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LCAo KEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyYXRlZ3kg PT0gUEdQQV9TQ0FOX0lOREVYX09OTFkpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhP bmx5U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0 LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcg Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsCisJCQkJCQkJCQkgICgo SW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyYXRl Z3kgPT0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQKQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVh ayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X2JpdG1hcF9pbmRleF9k ZXRhaWxzKGNvbnRleHQsIHBsYW4tPmxlZnR0cmVlKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250 ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBpbmZv cm1hdGlvbiBhYm91dCB3aGljaCBpbmRleCBvciBpbmRleGVzIHBvd2VyIGEgQml0bWFwSGVhcFNj YW4uCisgKgorICogV2UgZW1pdCAmJihpMSBpMiBpMykgZm9yIGEgQml0bWFwQW5kIGJldHdlZW4g aW5kZXhlcyBpMSwgaTIsIGFuZCBpMzsKKyAqIGFuZCBsaWtld2lzZSB8fChpMSBpMiBpMykgZm9y IGEgc2ltaWxhciBCaXRtYXBPciBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291 dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBQ bGFuICpwbGFuKQoreworCWNoYXIJICAgKm9wZXJhdG9yOworCUxpc3QJICAgKmJpdG1hcHBsYW5z OworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChJc0EocGxhbiwgQml0bWFwSW5kZXhTY2Fu KSkKKwl7CisJCUJpdG1hcEluZGV4U2NhbiAqYml0bWFwaW5kZXhzY2FuID0gKEJpdG1hcEluZGV4 U2NhbiAqKSBwbGFuOworCisJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgYml0 bWFwaW5kZXhzY2FuLT5pbmRleGlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChJc0EocGxhbiwg Qml0bWFwT3IpKQorCXsKKwkJb3BlcmF0b3IgPSAifHwiOworCQliaXRtYXBwbGFucyA9ICgoQml0 bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCX0KKwllbHNlIGlmIChJc0EocGxhbiwgQml0 bWFwQW5kKSkKKwl7CisJCW9wZXJhdG9yID0gIiYmIjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1h cEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCisJYXBwZW5k U3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLCBvcGVyYXRvcik7CisJZm9yZWFjaF9wdHIo UGxhbiwgY2hpbGRfcGxhbiwgYml0bWFwcGxhbnMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJz dCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQt PmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnICcpOworCQl9CisJCXBncGFfb3V0cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxz KGNvbnRleHQsIGNoaWxkX3BsYW4pOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzY2hlbWEtcXVhbGlmaWVkIHJlbGF0 aW9uIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCByZWxpZCkKK3sKKwlPaWQJCQluc3BvaWQg PSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7CisJY2hhcgkgICAqcmVsbmFtZXNwYWNlID0gZ2V0 X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKwljaGFyCSAgICpyZWxuYW1lID0gZ2V0 X3JlbF9uYW1lKHJlbGlkKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVm LCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWVzcGFjZSkpOworCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJy4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lKSk7Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNl IGZvciBhIExpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMuCisgKgorICogQWxsIGZl YXR1cmVzIG11c3QgYmUgb2YgdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IHRoZSAidHlwZSIgYXJndW1l bnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJICBMaXN0ICpx dWVyeV9mZWF0dXJlcykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAocXVlcnlfZmVh dHVyZXMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmlu Z0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19xdWVyeV9mZWF0 dXJlX3R5cGUodHlwZSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwg cXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQll bHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+ d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcp OworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHFmLT5yZWxpZHMpID09IEJNU19TSU5HTEVU T04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBxZi0+ cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVm LCBxZi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJykn KTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsK KwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1u KTsKK30KKworLyoKKyAqIE91dHB1dCAic2ltcGxlIiBhZHZpY2UgZm9yIGEgTGlzdCBvZiBCaXRt YXBzZXQgb2JqZWN0cyBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlucyBvbmUgb3IgbW9yZSBSVElz LgorICoKKyAqIEJ5IHNpbXBsZSwgd2UganVzdCBtZWFuIHRoYXQgdGhlIGFkdmljZSBlbWl0dGVk IGZvbGxvd3MgdGhlIG1vc3QKKyAqIHN0cmFpZ2h0Zm9yd2FyZCBwYXR0ZXJuOiB0aGUgc3RyYXRl Z3kgbmFtZSwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGl0ZW1zCisgKiBzZXBhcmF0ZWQgYnkgc3Bh Y2VzIGFuZCBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzLiBJbmRpdmlkdWFsIGl0ZW1zIGluCisg KiB0aGUgbGlzdCBhcmUgYSBzaW5nbGUgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBCaXRtYXBz ZXQgdGhhdCBjb250YWlucworICoganVzdCBvbmUgbWVtYmVyLCBvciBhIHN1Yi1saXN0IGFnYWlu IHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1cnJvdW5kZWQKKyAqIGJ5IHBhcmVudGhlc2VzIGZv ciBhIEJpdG1hcHNldCB3aXRoIG11bHRpcGxlIG1lbWJlcnMuIEJpdG1hcHNldHMgd2l0aAorICog bm8gbWVtYmVycyBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgaGVyZSwgYnV0IGlmIHRoZXkgZG8g dGhleSdsbCBiZQorICogcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3ViLWxpc3QuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAq Y29udGV4dCwgY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJTGlzdCAqcmVsaWRfc2V0cykKK3sKKwli b29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAocmVsaWRfc2V0cyA9PSBOSUwpCisJCXJldHVybjsK KworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygi LCBzdHJhdGVneSk7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCByZWxpZHMsIHJlbGlkX3Nl dHMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJ CXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4p OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJ aWYgKGJtc19tZW1iZXJzaGlwKHJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0 cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlkcyk7CisJCWVsc2UKKwkJ eworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9v dXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhj b250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBO T19HQVRIRVIgYWR2aWNlIGZvciBhbGwgcmVsYXRpb25zIG5vdCBhcHBlYXJpbmcgYmVuZWF0aCBh bnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK3Bn cGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBCaXRtYXBz ZXQgKnJlbGlkcykKK3sKKwlpZiAocmVsaWRzID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoY29u dGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICdcbicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCAiTk9fR0FUSEVS KCIpOworCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlk cyk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgor ICogT3V0cHV0IHRoZSBpZGVudGlmaWVycyBmb3IgZWFjaCBSVEkgaW4gdGhlIHByb3ZpZGVkIHNl dC4KKyAqCisgKiBJZGVudGlmaWVycyBhcmUgc2VwYXJhdGVkIGJ5IHNwYWNlcywgYW5kIGEgbGlu ZSBicmVhayBpcyBwb3NzaWJsZSBhZnRlcgorICogZWFjaCBvbmUuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaW50CQkJcnRpID0g LTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1i ZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJY29uc3QgY2hhciAqcmlkX3N0cmluZyA9IGNv bnRleHQtPnJpZF9zdHJpbmdzW3J0aSAtIDFdOworCisJCWlmIChyaWRfc3RyaW5nID09IE5VTEwp CisJCQllbG9nKEVSUk9SLCAibm8gaWRlbnRpZmllciBmb3IgUlRJICVkIiwgcnRpKTsKKworCQlp ZiAoZmlyc3QpCisJCXsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgcmlkX3N0cmluZyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xp bmVicmVhayhidWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiICVzIiwgcmlkX3N0cmluZyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0 cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgam9pbiBzdHJhdGVneS4KKyAq Lworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0 cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kpCisJeworCQljYXNlIEpTVFJB VF9NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX1BMQUlOIjsKKwkJY2Fz ZSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9N QVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJu ICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFM SVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NQVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFU X05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOwor CQljYXNlIEpTVFJBVF9IQVNIX0pPSU46CisJCQlyZXR1cm4gIkhBU0hfSk9JTiI7CisJfQorCisJ cGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCBhIEMgc3Ry aW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBzY2FuIHN0cmF0ZWd5LgorICov CitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5fc3Ry YXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2UgUEdQQV9T Q0FOX09SRElOQVJZOgorCQkJcmV0dXJuICJPUkRJTkFSWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1ND QU5fU0VROgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0JJVE1BUF9I RUFQOgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fRk9S RUlHTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2FzZSBQR1BBX1NDQU5fSU5ERVg6 CisJCQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9JTkRFWF9PTkxZOgor CQkJcmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9QQVJUSVRJT05X SVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BBX1NDQU5fVElEOgor CQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4g TlVMTDsKK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhl IHNwZWNpZmllZCBzY2FuIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJp bmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlw ZSkKKwl7CisJCWNhc2UgUEdQQVFGX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2Fz ZSBQR1BBUUZfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNl IFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5J UVVFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9J Tl9VTklRVUUiOworCX0KKworCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30K KworLyoKKyAqIEluc2VydCBhIGxpbmUgYnJlYWsgaW50byB0aGUgU3RyaW5nSW5mb0RhdGEsIGlm IG5lZWRlZC4KKyAqCisgKiBJZiB3cmFwX2NvbHVtbiBpcyB6ZXJvIG9yIG5lZ2F0aXZlLCB0aGlz IGRvZXMgbm90aGluZy4gT3RoZXJ3aXNlLCB3ZQorICogY29uc2lkZXIgaW5zZXJ0aW5nIGEgbmV3 bGluZS4gV2Ugb25seSBpbnNlcnQgYSBuZXdsaW5lIGlmIHRoZSBsZW5ndGggb2YKKyAqIHRoZSBs YXN0IGxpbmUgaW4gdGhlIGJ1ZmZlciBleGNlZWRzIHdyYXBfY29sdW1uLCBhbmQgbm90IGlmIHdl J2QgYmUKKyAqIGluc2VydGluZyBhIG5ld2xpbmUgYXQgb3IgYmVmb3JlIHRoZSBiZWdpbm5pbmcg b2YgdGhlIGN1cnJlbnQgbGluZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gYXQgd2hpY2ggdGhlIG5l d2xpbmUgaXMgaW5zZXJ0ZWQgaXMgc2ltcGx5IHdoZXJldmVyIHRoZQorICogYnVmZmVyIGVuZGVk IHRoZSBsYXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLiBJbiBvdGhlciB3b3JkcywK KyAqIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IHRp bWUgd2UgcmVhY2ggYSBnb29kCisgKiBwbGFjZSBmb3IgYSBsaW5lIGJyZWFrLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2Nv bHVtbikKK3sKKwljaGFyCSAgICp0cmFpbGluZ19ubDsKKwlpbnQJCQlsaW5lX3N0YXJ0OworCWlu dAkJCXNhdmVfY3Vyc29yOworCisJLyogSWYgbGluZSB3cmFwcGluZyBpcyBkaXNhYmxlZCwgZXhp dCBxdWlja2x5LiAqLworCWlmICh3cmFwX2NvbHVtbiA8PSAwKQorCQlyZXR1cm47CisKKwkvKgor CSAqIFNldCBsaW5lX3N0YXJ0IHRvIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gYnVmLT5kYXRhIG9m IHRoZSBmaXJzdAorCSAqIGNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBsaW5lLCB3aGVyZSB0aGUg Y3VycmVudCBsaW5lIG1lYW5zIHRoZSBsYXN0CisJICogb25lIGluIHRoZSBidWZmZXIuIE5vdGUg dGhhdCBsaW5lX3N0YXJ0IGNvdWxkIGJlIHRoZSBvZmZzZXQgb2YgdGhlCisJICogdHJhaWxpbmcg J1wwJyBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciBpcyBhIGxpbmUgYnJlYWsu CisJICovCisJdHJhaWxpbmdfbmwgPSBzdHJyY2hyKGJ1Zi0+ZGF0YSwgJ1xuJyk7CisJaWYgKHRy YWlsaW5nX25sID09IE5VTEwpCisJCWxpbmVfc3RhcnQgPSAwOworCWVsc2UKKwkJbGluZV9zdGFy dCA9ICh0cmFpbGluZ19ubCAtIGJ1Zi0+ZGF0YSkgKyAxOworCisJLyoKKwkgKiBSZW1lbWJlciB0 aGF0IHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgYnVmZmVyIGlzIGEgcG90ZW50aWFsIGxvY2F0aW9u IHRvCisJICogaW5zZXJ0IGEgbGluZSBicmVhayBvbiBhIGZ1dHVyZSBjYWxsIHRvIHRoaXMgZnVu Y3Rpb24uCisJICovCisJc2F2ZV9jdXJzb3IgPSBidWYtPmN1cnNvcjsKKwlidWYtPmN1cnNvciA9 IGJ1Zi0+bGVuOworCisJLyogSWYgd2UgaGF2ZW4ndCBwYXNzZWQgdGhlIHdyYXAgY29sdW1uLCB3 ZSBkb24ndCBuZWVkIGEgbmV3bGluZS4gKi8KKwlpZiAoYnVmLT5sZW4gLSBsaW5lX3N0YXJ0IDw9 IHdyYXBfY29sdW1uKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IG9ubHkgbWFrZXMgc2Vuc2Ug dG8gaW5zZXJ0IGEgbmV3bGluZSBhdCBhIHBvc2l0aW9uIGxhdGVyIHRoYW4gdGhlCisJICogYmVn aW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisJICovCisJaWYgKGJ1Zi0+Y3Vyc29yIDw9IGxp bmVfc3RhcnQpCisJCXJldHVybjsKKworCS8qIEluc2VydCBhIG5ld2xpbmUgYXQgdGhlIHByZXZp b3VzIGN1cnNvciBsb2NhdGlvbi4gKi8KKwllbmxhcmdlU3RyaW5nSW5mbyhidWYsIDEpOworCW1l bW1vdmUoJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gKyAxLCAmYnVmLT5kYXRhW3NhdmVfY3Vyc29y XSwKKwkJCWJ1Zi0+bGVuIC0gc2F2ZV9jdXJzb3IpOworCSsrYnVmLT5jdXJzb3I7CisJYnVmLT5k YXRhWysrYnVmLT5sZW5dID0gJ1wwJzsKKwlidWYtPmRhdGFbc2F2ZV9jdXJzb3JdID0gJ1xuJzsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaCBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNDc0OTZkNzZmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKQEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuaAorICoJICBwcm9kdWNlIHRleHR1YWwgb3V0 cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9PVVRQVVRfSAorI2RlZmluZSBQR1BBX09VVFBV VF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtl ci5oIgorCitleHRlcm4gdm9pZCBwZ3BhX291dHB1dF9hZHZpY2UoU3RyaW5nSW5mbyBidWYsCisJ CQkJCQkJICAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJICAgcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55IGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40 NjE3ZTdmMmY2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueQpAQCAtMCwwICsxLDMzNyBAQAorJXsKKy8qCisgKiBQYXJzZXIgZm9yIHBsYW4g YWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Bh cnNlci55CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxmbG9hdC5o PgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rl cy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL2Zsb2F0LmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFy c2VyLmgiCisKKy8qCisgKiBCaXNvbiBkb2Vzbid0IGFsbG9jYXRlIGFueXRoaW5nIHRoYXQgbmVl ZHMgdG8gbGl2ZSBhY3Jvc3MgcGFyc2VyIGNhbGxzLAorICogc28gd2UgY2FuIGVhc2lseSBoYXZl IGl0IHVzZSBwYWxsb2MgaW5zdGVhZCBvZiBtYWxsb2MuICBUaGlzIHByZXZlbnRzCisgKiBtZW1v cnkgbGVha3MgaWYgd2UgZXJyb3Igb3V0IGR1cmluZyBwYXJzaW5nLgorICovCisjZGVmaW5lIFlZ TUFMTE9DIHBhbGxvYworI2RlZmluZSBZWUZSRUUgICBwZnJlZQorJX0KKworLyogQklTT04gRGVj bGFyYXRpb25zICovCislcGFyc2UtcGFyYW0ge0xpc3QgKipyZXN1bHR9CislcGFyc2UtcGFyYW0g e2NoYXIgKipwYXJzZV9lcnJvcl9tc2dfcH0KKyVwYXJzZS1wYXJhbSB7eXlzY2FuX3QgeXlzY2Fu bmVyfQorJWxleC1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVsZXgtcGFyYW0ge2NoYXIgKipwYXJz ZV9lcnJvcl9tc2dfcH0KKyVsZXgtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVwdXJlLXBh cnNlcgorJWV4cGVjdCAwCislbmFtZS1wcmVmaXg9InBncGFfeXkiCisKKyV1bmlvbgoreworCWNo YXIJICAgKnN0cjsKKwlpbnQJCQlpbnRlZ2VyOworCUxpc3QJICAgKmxpc3Q7CisJcGdwYV9hZHZp Y2VfaXRlbSAqaXRlbTsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKwlwZ3BhX2luZGV4 X3RhcmdldCAqaXRhcmdldDsKK30KKyV0b2tlbiA8c3RyPiBUT0tfSURFTlQgVE9LX1RBR19KT0lO X09SREVSIFRPS19UQUdfQklUTUFQIFRPS19UQUdfSU5ERVgKKyV0b2tlbiA8c3RyPiBUT0tfVEFH X1NJTVBMRSBUT0tfVEFHX0dFTkVSSUMKKyV0b2tlbiA8aW50ZWdlcj4gVE9LX0lOVEVHRVIKKyV0 b2tlbiBUT0tfT1IgVE9LX0FORAorCisldHlwZSA8aW50ZWdlcj4gb3B0X3JpX29jY3VycmVuY2UK KyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5cGUgPGxpc3Q+IGFkdmljZV9pdGVtX2xpc3Qg Yml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9saXN0IGdlbmVyaWNfdGFyZ2V0X2xpc3QKKyV0 eXBlIDxsaXN0PiBpbmRleF90YXJnZXRfbGlzdCBqb2luX29yZGVyX3RhcmdldF9saXN0CisldHlw ZSA8bGlzdD4gb3B0X3BhcnRpdGlvbiBzaW1wbGVfdGFyZ2V0X2xpc3QKKyV0eXBlIDxzdHI+IGlk ZW50aWZpZXIgb3B0X3BsYW5fbmFtZQorJXR5cGUgPHRhcmdldD4gZ2VuZXJpY19zdWJsaXN0IGpv aW5fb3JkZXJfc3VibGlzdAorJXR5cGUgPHRhcmdldD4gcmVsYXRpb25faWRlbnRpZmllcgorJXR5 cGUgPGl0YXJnZXQ+IGJpdG1hcF90YXJnZXRfaXRlbSBpbmRleF9uYW1lCisKKyVzdGFydCBwYXJz ZV90b3BsZXZlbAorCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCisKK3BhcnNlX3RvcGxldmVs OiBhZHZpY2VfaXRlbV9saXN0CisJCXsKKwkJCSh2b2lkKSB5eW5lcnJzOwkJCQkvKiBzdXBwcmVz cyBjb21waWxlciB3YXJuaW5nICovCisJCQkqcmVzdWx0ID0gJDE7CisJCX0KKwk7CisKK2Fkdmlj ZV9pdGVtX2xpc3Q6IGFkdmljZV9pdGVtX2xpc3QgYWR2aWNlX2l0ZW0KKwkJeyAkJCA9IGxhcHBl bmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworYWR2aWNlX2l0ZW06IFRP S19UQUdfSk9JTl9PUkRFUiAnKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJ JCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBQR1BB X1RBR19KT0lOX09SREVSOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19J TkRFWCAnKCcgaW5kZXhfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlpZiAoc3RyY21wKCQxLCAiaW5kZXhfb25seV9zY2Fu IikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJZWxz ZSBpZiAoc3RyY21wKCQxLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFf VEFHX0lOREVYX1NDQU47CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZh aWxlZDogJXMiLCAkMSk7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0JJ VE1BUCAnKCcgYml0bWFwX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0JJVE1BUF9IRUFQ X1NDQU47CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX1NJTVBMRSAnKCcg c2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJ JCQtPnRhZyA9IFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNl cV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNl IGlmIChzdHJjbXAoJDEsICJ0aWRfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFH X1RJRF9TQ0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6 ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklD ICcoJyBnZW5lcmljX3RhcmdldF9saXN0ICcpJworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQk ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9w YXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFpbCk7CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3Bh X3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAi dW5yZWNvZ25pemVkIGFkdmljZSB0YWciKTsKKwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQ QV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJeworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3Rh cmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7CisJCQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFf VEFSR0VUX0lERU5USUZJRVIgfHwKKwkJCQkJCWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4p ID09IDEpCisJCQkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5 c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBt b3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQk LT50YXJnZXRzID0gJDM7CisJCX0KKwk7CisKK3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZp ZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0X3BhcnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJ CSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9 IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7CisJCQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJ CSQkLT5yaWQub2NjdXJyZW5jZSA9ICQyOworCQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQor CQkJeworCQkJCSQkLT5yaWQucGFydG5zcCA9IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBh cnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkk JC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlhbCgkMyk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0 OworCQl9CisJOworCitpbmRleF9uYW1lOiBpZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9j MF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9O QU1FOworCQkJJCQtPmluZG5hbWUgPSAkMTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRp ZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJ CSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQkLT5pbmRuYW1lc3BhY2UgPSAkMTsK KwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0KKwk7CisKK29wdF9yaV9vY2N1cnJlbmNlOgorCScj JyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAoJDIgPD0gMCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVz dWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAib25seSBwb3NpdGl2 ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBlcm1pdHRlZCIpOworCQkJJCQgPSAkMjsKKwkJfQor CXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQgb2NjdXJyZW5jZSBudW1iZXIgaXMgMS4gKi8KKwkJ CSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRpZmllcjogVE9LX0lERU5UCisJfCBUT0tfVEFHX0pP SU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgKKwl8IFRPS19UQUdfQklUTUFQCisJfCBUT0tfVEFH X1NJTVBMRQorCXwgVE9LX1RBR19HRU5FUklDCisJOworCisvKgorICogV2hlbiBnZW5lcmF0aW5n IGFkdmljZSwgd2UgYWx3YXlzIHNjaGVtYS1xdWFsaWZ5IHRoZSBwYXJ0aXRpb24gbmFtZSwgYnV0 CisgKiB3aGVuIHBhcnNpbmcgYWR2aWNlLCB3ZSBhY2NlcHQgYSBzcGVjaWZpY2F0aW9uIHRoYXQg bGFja3Mgb25lLgorICovCitvcHRfcGFydGl0aW9uOgorCScvJyBUT0tfSURFTlQgJy4nIFRPS19J REVOVAorCQl7ICQkID0gbGlzdF9tYWtlMigkMiwgJDQpOyB9CisJfCAnLycgVE9LX0lERU5UCisJ CXsgJCQgPSBsaXN0X21ha2UxKCQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworb3B0 X3BsYW5fbmFtZToKKwknQCcgVE9LX0lERU5UCisJCXsgJCQgPSAkMjsgfQorCXwKKwkJeyAkJCA9 IE5VTEw7IH0KKwk7CisKK2JpdG1hcF90YXJnZXRfbGlzdDogYml0bWFwX3RhcmdldF9saXN0IHJl bGF0aW9uX2lkZW50aWZpZXIgYml0bWFwX3RhcmdldF9pdGVtCisJCXsKKwkJCSQyLT5pdGFyZ2V0 ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsg fQorCTsKKworYml0bWFwX3RhcmdldF9pdGVtOiBpbmRleF9uYW1lCisJCXsgJCQgPSAkMTsgfQor CXwgVE9LX09SICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29i amVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX09SOwor CQkJJCQtPmNoaWxkcmVuID0gJDM7CisJCX0KKwl8IFRPS19BTkQgJygnIGJpdG1hcF9zdWJsaXN0 ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJ CSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfQU5EOworCQkJJCQtPmNoaWxkcmVuID0gJDM7CisJCX0K Kwk7CisKK2JpdG1hcF9zdWJsaXN0OiBiaXRtYXBfc3VibGlzdCBiaXRtYXBfdGFyZ2V0X2l0ZW0K KwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgYml0bWFwX3RhcmdldF9pdGVtCisJCXsg JCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCTsKKworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJp Y190YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAk Mik7IH0KKwl8IGdlbmVyaWNfdGFyZ2V0X2xpc3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBs YXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3Vi bGlzdDogJygnIGdlbmVyaWNfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9v YmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09S REVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJOworCitpbmRleF90YXJn ZXRfbGlzdDoKKwkgIGluZGV4X3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIgaW5kZXhf bmFtZQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7 CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJfdGFyZ2V0X2xpc3Q6 IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFw cGVuZCgkMSwgJDIpOyB9CisJfCBqb2luX29yZGVyX3RhcmdldF9saXN0IGpvaW5fb3JkZXJfc3Vi bGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJ OworCitqb2luX29yZGVyX3N1Ymxpc3Q6CisJJygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJykn CisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQk LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQy OworCQl9CisJfCAneycgc2ltcGxlX3RhcmdldF9saXN0ICd9JworCQl7CisJCQkkJCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdF VF9VTk9SREVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJOworCitzaW1w bGVfdGFyZ2V0X2xpc3Q6IHNpbXBsZV90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJ CXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKKyUl CisKKy8qCisgKiBQYXJzZSBhbiBhZHZpY2Vfc3RyaW5nIGFuZCByZXR1cm4gdGhlIHJlc3VsdGlu ZyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0KKyAqIG9iamVjdHMuIElmIGEgcGFyc2UgZXJyb3Ig b2NjdXJzLCBpbnN0ZWFkIHJldHVybiBOVUxMLgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWUg aXMgTlVMTCwgKmVycm9yX3Agd2lsbCBiZSBzZXQgdG8gdGhlIGVycm9yIG1lc3NhZ2U7CisgKiBv dGhlcndpc2UsICplcnJvcl9wIHdpbGwgYmUgc2V0IHRvIE5VTEwuCisgKi8KK0xpc3QgKgorcGdw YV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCkKK3sKKwl5 eXNjYW5fdAlzY2FubmVyOworCUxpc3QJICAgKnJlc3VsdDsKKwljaGFyCSAgICplcnJvciA9IE5V TEw7CisKKwlwZ3BhX3NjYW5uZXJfaW5pdChhZHZpY2Vfc3RyaW5nLCAmc2Nhbm5lcik7CisJcGdw YV95eXBhcnNlKCZyZXN1bHQsICZlcnJvciwgc2Nhbm5lcik7CisJcGdwYV9zY2FubmVyX2Zpbmlz aChzY2FubmVyKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQorCXsKKwkJKmVycm9yX3AgPSBlcnJv cjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmVycm9yX3AgPSBOVUxMOworCXJldHVybiByZXN1 bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5j IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTFjODA2NWQxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCkBAIC0wLDAgKzEsMTcwNyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9wbGFubmVyLmMKKyAqCSAgcGxhbm5lciBo b29rcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Bs YW5uZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0 b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1 dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIK KyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0 YWJsZS5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci9leHRlbmRwbGFuLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUu aCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKworLyoKKyAqIFdoZW4gYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdlbmVy YXRpbmcgcmVsYXRpb24gaWRlbnRpZmllcnMgZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5nIHRo ZW0gaW4gYSBoYXNoIHRhYmxlLCBhbmQgdGhlbiBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWluc3QK KyAqIHRoZSBvbmVzIGdlbmVyYXRlZCBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyX2tleQoreworCWNoYXIJICAgKnBsYW5fbmFt ZTsKKwlJbmRleAkJcnRpOworfSBwZ3BhX3JpX2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3JpX2NoZWNrZXIKK3sKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50MzIJ CXN0YXR1czsKKwljb25zdCBjaGFyICpyaWRfc3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7CisK K3N0YXRpYyB1aW50MzIgcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9r ZXkga2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9r ZXkocGdwYV9yaV9jaGVja2VyX2tleSBhLCBwZ3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJaWYg KGEucnRpICE9IGIucnRpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09IE5V TEwpCisJCXJldHVybiAoYi5wbGFuX25hbWUgPT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1lID09 IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBiLnBs YW5fbmFtZSkgPT0gMDsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNrCisj ZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdwYV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tFWV9U WVBFCQkJcGdwYV9yaV9jaGVja2VyX2tleQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5l IFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisjZGVm aW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwgYikK KyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNk ZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlmCisK K3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9zdGF0ZQoreworCUV4cGxhaW5TdGF0ZSAqZXhw bGFpbl9zdGF0ZTsKKwlwZ3BhX3Ryb3ZlICp0cm92ZTsKKwlNZW1vcnlDb250ZXh0IHRyb3ZlX2N4 dDsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrX2hhc2ggKnJp X2NoZWNrX2hhc2g7CisjZW5kaWYKK30gcGdwYV9wbGFubmVyX3N0YXRlOworCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX2pvaW5fc3RhdGUKK3sKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgb3V0 ZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKm91dGVycmVsOworCisJLyogTW9zdC1yZWNlbnRseS1j b25zaWRlcmVkIGlubmVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICppbm5lcnJlbDsKKworCS8qCisJ ICogQXJyYXkgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMg am9pbnJlbCwgd2l0aAorCSAqIG91dGVycmVsIGlkZW5pZmllcnMgYmVmb3JlIGlubmVycmVsIGlk ZW50aWZpZXJzLgorCSAqLworCXBncGFfaWRlbnRpZmllciAqcmlkczsKKworCS8qIE51bWJlciBv ZiBvdXRlciByZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJb3V0ZXJfY291bnQ7CisKKwkvKiBO dW1iZXIgb2YgaW5uZXIgcmVsIGlkZW50aWZpZXJzLiAqLworCWludAkJCWlubmVyX2NvdW50Owor CisJLyoKKwkgKiBUcm92ZSBsb29rdXAgcmVzdWx0cy4KKwkgKgorCSAqIGpvaW5fZW50cmllcyBh bmQgcmVsX2VudHJpZXMgYXJlIGFycmF5cyBvZiBlbnRyaWVzLCBhbmQgam9pbl9pbmRleGVzCisJ ICogYW5kIHJlbF9pbmRleGVzIGFyZSB0aGUgaW50ZWdlciBvZmZzZXRzIHdpdGhpbiB0aG9zZSBh cnJheXMgb2YgZW50cmllcworCSAqIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHVzLiBUaGUgImpv aW4iIGZpZWxkcyBjb3JyZXNwb25kIHRvIGEgbG9va3VwCisJICogdXNpbmcgUEdQQV9UUk9WRV9M T09LVVBfSk9JTiBhbmQgdGhlICJyZWwiIGZpZWxkcyB0byBhIGxvb2t1cCB1c2luZworCSAqIFBH UEFfVFJPVkVfTE9PS1VQX1JFTC4KKwkgKi8KKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpqb2luX2VudHJp ZXM7CisJQml0bWFwc2V0ICAqam9pbl9pbmRleGVzOworCXBncGFfdHJvdmVfZW50cnkgKnJlbF9l bnRyaWVzOworCUJpdG1hcHNldCAgKnJlbF9pbmRleGVzOworfSBwZ3BhX2pvaW5fc3RhdGU7CisK Ky8qIFNhdmVkIGhvb2sgdmFsdWVzICovCitzdGF0aWMgZ2V0X3JlbGF0aW9uX2luZm9faG9va190 eXBlIHByZXZfZ2V0X3JlbGF0aW9uX2luZm8gPSBOVUxMOworc3RhdGljIGpvaW5fcGF0aF9zZXR1 cF9ob29rX3R5cGUgcHJldl9qb2luX3BhdGhfc2V0dXAgPSBOVUxMOworc3RhdGljIGpvaW5yZWxf c2V0dXBfaG9va190eXBlIHByZXZfam9pbnJlbF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5l cl9zZXR1cF9ob29rX3R5cGUgcHJldl9wbGFubmVyX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFu bmVyX3NodXRkb3duX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBOVUxMOworCisv KiBPdGhlciBnbG9iYWwgdmFyaWFiZXMgKi8KK3N0YXRpYyBpbnQJcGxhbm5lcl9leHRlbnNpb25f aWQgPSAtMTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KK3N0YXRpYyB2b2lkIHBncGFf Z2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIE9pZCByZWxh dGlvbk9iamVjdElkLAorCQkJCQkJCQkgICBib29sIGluaHBhcmVudCwKKwkJCQkJCQkJICAgUmVs T3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCSAgIFJlbE9w dEluZm8gKm91dGVycmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJ CSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlz dCk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRl cnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkgSm9pblR5cGUg am9pbnR5cGUsCisJCQkJCQkJCSBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIHZv aWQgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwK KwkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJICAgZG91YmxlICp0 dXBsZV9mcmFjdGlvbiwKKwkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lk IHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2Us CisJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQp Oworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAq cGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJICBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAg cGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pv aW5fcGF0aF9hZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBn c19tYXNrX3AsCisJCQkJCQkJCQkJCQljaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3Bh X2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9h ZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNj YW5fZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJ CQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRt YXBzZXQgKnJlbF9pbmRleGVzKTsKK3N0YXRpYyB1aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21h c2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZyk7CitzdGF0aWMgYm9v bCBwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVy X2NvdW50LAorCQkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9tZXRob2RfcGVy bWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50 cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdw YV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291 bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7 CisKK3N0YXRpYyBMaXN0ICpwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3Qs IHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0 eXBlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ CQkJCQkgIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKTsKKworc3RhdGljIGlubGlu ZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJ CQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7Citz dGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpw cHMsCisJCQkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKKworLyoKKyAqIEluc3RhbGwgcGxh bm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2b2lkCitwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29r cyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gR2V0UGxhbm5lckV4dGVuc2lvbklk KCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZfZ2V0X3JlbGF0aW9uX2luZm8gPSBnZXRfcmVsYXRp b25faW5mb19ob29rOworCWdldF9yZWxhdGlvbl9pbmZvX2hvb2sgPSBwZ3BhX2dldF9yZWxhdGlv bl9pbmZvOworCXByZXZfam9pbnJlbF9zZXR1cCA9IGpvaW5yZWxfc2V0dXBfaG9vazsKKwlqb2lu cmVsX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5yZWxfc2V0dXA7CisJcHJldl9qb2luX3BhdGhfc2V0 dXAgPSBqb2luX3BhdGhfc2V0dXBfaG9vazsKKwlqb2luX3BhdGhfc2V0dXBfaG9vayA9IHBncGFf am9pbl9wYXRoX3NldHVwOworCXByZXZfcGxhbm5lcl9zZXR1cCA9IHBsYW5uZXJfc2V0dXBfaG9v azsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2V0dXA7CisJcHJldl9wbGFu bmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25f aG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsKK30KKworLyoKKyAqIEhvb2sgZnVuY3Rpb24g Zm9yIGdldF9yZWxhdGlvbl9pbmZvKCkuCisgKgorICogV2UgY2FuIGFwcGx5IHNjYW4gYWR2aWNl IGF0IHRoaXMgb3BpbnQsIGFuZCB3ZSBhbHNvIHVzZWUgdGhpcyBhcyBhbgorICogb3Bwb3J0dW5p dHkgdG8gZG8gcmFuZ2UtdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZyBpbiBhc3NlcnQt ZW5hYmxlZAorICogYnVpbGRzLgorICoKKyAqIFhYWDogV2UgY3VycmVudGx5IGVtaXQgdXNlbGVz cyBhZHZpY2UgbGlrZSBOT19HQVRIRVIoIipSRVNVTFQqIikgZm9yIHRyaXZpYWwKKyAqIHF1ZXJp ZXMuIFRoZSBhZHZpY2UgaXMgdXNlbGVzcyBiZWNhdXNlIGdldF9yZWxhdGlvbl9pbmZvIGlzbid0 IGNhbGxlZCBmb3IKKyAqIG5vbi1yZWxhdGlvbiBSVEVzLiBXZSBzaG91bGQgZWl0aGVyIHN1cHBy ZXNzIHRoZSBhZHZpY2UgaW4gc3VjaCBjYXNlcywgb3IKKyAqIGFkZCBhIGhvb2sgdGhhdCBjYW4g YXBwbHkgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5u ZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJCQkJICAgYm9vbCBpbmhwYXJl bnQsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKworCS8q IEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCku ICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBs YW5uZXJfZXh0ZW5zaW9uX2lkKTsKKworCS8qIFNhdmUgZGV0YWlscyBuZWVkZWQgZm9yIHJhbmdl IHRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcuICovCisJaWYgKHBwcyAhPSBOVUxMKQor CQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwcHMsIHJvb3QsIHJlbCk7CisKKwkvKiBJZiBxdWVyeSBh ZHZpY2Ugd2FzIHByb3ZpZGVkLCBzZWFyY2ggZm9yIHJlbGV2YW50IGVudHJpZXMuICovCisJaWYg KHBwcyAhPSBOVUxMICYmIHBwcy0+dHJvdmUgIT0gTlVMTCkKKwl7CisJCXBncGFfaWRlbnRpZmll ciByaWQ7CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfc2NhbjsKKwkJcGdwYV90cm92ZV9y ZXN1bHQgdHJlc3VsdF9yZWw7CisKKwkJLyogU2VhcmNoIGZvciBzY2FuIGFkdmljZSBhbmQgZ2Vu ZXJhbCByZWwgYWR2aWNlLiAqLworCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9v dCwgcmVsLT5yZWxpZCwgJnJpZCk7CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBH UEFfVFJPVkVfTE9PS1VQX1NDQU4sIDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3NjYW4pOwor CQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEs ICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3JlbCk7CisKKwkJLyogSWYgcmVsZXZhbnQgZW50cmll cyB3ZXJlIGZvdW5kLCBhcHBseSB0aGVtLiAqLworCQlpZiAodHJlc3VsdF9zY2FuLmluZGV4ZXMg IT0gTlVMTCB8fCB0cmVzdWx0X3JlbC5pbmRleGVzICE9IE5VTEwpCisJCQlwZ3BhX3BsYW5uZXJf YXBwbHlfc2Nhbl9hZHZpY2UocmVsLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5lbnRyaWVz LAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5pbmRleGVzLAorCQkJCQkJCQkJCSAgIHRyZXN1 bHRfcmVsLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuaW5kZXhlcyk7CisJfQor CisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfZ2V0X3JlbGF0 aW9uX2luZm8pCisJCSgqcHJldl9nZXRfcmVsYXRpb25faW5mbykgKHJvb3QsIHJlbGF0aW9uT2Jq ZWN0SWQsIGluaHBhcmVudCwgcmVsKTsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYWR2aWNlIHBl cnRhaW5pbmcgdG8gYSBwcm9wb3NlZCBqb2luLgorICovCitzdGF0aWMgcGdwYV9qb2luX3N0YXRl ICoKK3BncGFfZ2V0X2pvaW5fc3RhdGUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwsCisJCQkJCVJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCkK K3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsKKwli b29sCQluZXdfcGpzID0gZmFsc2U7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0 IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxF eHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBw cyA9PSBOVUxMIHx8IHBwcy0+dHJvdmUgPT0gTlVMTCkKKwl7CisJCS8qIE5vIGFkdmljZSBhcHBs aWVzIHRvIHRoaXMgcXVlcnksIGhlbmNlIG5vbmUgdG8gdGhpcyBqb2lucmVsLiAqLworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFNlZSB3aGV0aGVyIHdlJ3ZlIHByZXZpb3VzbHkgYXNz b2NpYXRlZCBhIHBncGFfam9pbl9zdGF0ZSB3aXRoIHRoaXMKKwkgKiBqb2lucmVsLiBJZiB3ZSBo YXZlIG5vdCwgd2UgbmVlZCB0byB0cnkgdG8gY29uc3RydWN0IG9uZS4gSWYgd2UgaGF2ZSwKKwkg KiB0aGVuIHRoZXJlIGFyZSB0d28gY2FzZXM6IChhKSBpZiBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwg YXJlIHVuY2hhbmdlZCwKKwkgKiB3ZSBjYW4gc2ltcGx5IHVzZSBpdCwgYW5kIChiKSBpZiB0aGV5 IGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0byByZWppZ2dlcgorCSAqIHRoZSBhcnJheSBvZiBpZGVu dGlmaWVycyBidXQgY2FuIHN0aWxsIHNraXAgdGhlIHRyb3ZlIGxvb2t1cC4KKwkgKi8KKwlwanMg PSBHZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3RhdGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNpb25f aWQpOworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCWlmIChwanMtPmpvaW5faW5kZXhlcyA9PSBO VUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRo ZXJlJ3Mgbm8gcG90ZW50aWFsbHkgcmVsZXZhbnQgYWR2aWNlLCB0aGVuIHRoZSBwcmVzZW5jZSBv ZgorCQkJICogdGhpcyBwZ3BhX2pvaW5fc3RhdGUgYWN0cyBsaWtlIGEgbmVnYXRpdmUgY2FjaGUg ZW50cnk6IGl0IHRlbGxzCisJCQkgKiB1cyBub3QgdG8gYm90aGVyIHNlYXJjaGluZyB0aGUgdHJv dmUgZm9yIGFkdmljZSwgYmVjYXVzZSB3ZQorCQkJICogd2lsbCBub3QgZmluZCBhbnkuCisJCQkg Ki8KKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKHBqcy0+b3V0ZXJyZWwgPT0gb3V0ZXJy ZWwgJiYgcGpzLT5pbm5lcnJlbCA9PSBpbm5lcnJlbCkKKwkJeworCQkJLyogTm8gdXBkYXRlcyBy ZXF1aXJlZCwgc28ganVzdCByZXR1cm4uICovCisJCQkvKiBYWFguIERvZXMgdGhpcyBuZWVkIHRv IGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdW5kZXIgR0VRTz8gKi8KKwkJCXJldHVybiBwanM7CisJ CX0KKwl9CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gcGdwYV9qb2luX3N0YXRlIHlldCwgd2Ug bmVlZCB0byBhbGxvY2F0ZSBvbmUuIFRyb3ZlIGtleXMKKwkgKiB3aWxsIG5vdCBnZXQgYnVpbHQg Zm9yIFJURV9KT0lOIFJURXMsIHNvIHRoZSBhcnJheSBtYXkgZW5kIHVwIGJlaW5nCisJICogbGFy Z2VyIHRoYW4gbmVlZGVkLiBJdCdzIG5vdCB3b3J0aCB0cnlpbmcgdG8gY29tcHV0ZSBhIHBlcmZl Y3RseQorCSAqIGFjY3VyYXRlIGNvdW50IGhlcmUuCisJICovCisJaWYgKHBqcyA9PSBOVUxMKQor CXsKKwkJaW50CQkJcGVzc2ltaXN0aWNfY291bnQgPSBibXNfbnVtX21lbWJlcnMoam9pbnJlbC0+ cmVsaWRzKTsKKworCQlwanMgPSBwYWxsb2MwX29iamVjdChwZ3BhX2pvaW5fc3RhdGUpOworCQlw anMtPnJpZHMgPSBwYWxsb2NfYXJyYXkocGdwYV9pZGVudGlmaWVyLCBwZXNzaW1pc3RpY19jb3Vu dCk7CisJCW5ld19wanMgPSB0cnVlOworCX0KKworCS8qCisJICogRWl0aGVyIHdlIGp1c3QgYWxs b2NhdGVkIGEgbmV3IHBncGFfam9pbl9zdGF0ZSwgb3IgdGhlIGV4aXN0aW5nIG9uZQorCSAqIG5l ZWRzIHJlY29uZmlndXJpbmcgZm9yIGEgbmV3IGlubmVycmVsIGFuZCBvdXRlcnJlbC4gVGhlIHJl cXVpcmVkIGFycmF5CisJICogc2l6ZSBjYW4ndCBjaGFuZ2UsIHNvIHdlIGNhbiBvdmVyd3JpdGUg dGhlIGV4aXN0aW5nIG9uZS4KKwkgKi8KKwlwanMtPm91dGVycmVsID0gb3V0ZXJyZWw7CisJcGpz LT5pbm5lcnJlbCA9IGlubmVycmVsOworCXBqcy0+b3V0ZXJfY291bnQgPQorCQlwZ3BhX2NvbXB1 dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIG91dGVycmVsLT5yZWxpZHMsIHBqcy0+cmlk cyk7CisJcGpzLT5pbm5lcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9y ZWxpZHMocm9vdCwgaW5uZXJyZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkgICBwanMtPnJpZHMgKyBw anMtPm91dGVyX2NvdW50KTsKKworCS8qCisJICogSWYgd2UgYWxsb2NhdGVkIGEgbmV3IHBncGFf am9pbl9zdGF0ZSwgc2VhcmNoIG91ciB0cm92ZSBvZiBhZHZpY2UgZm9yCisJICogcmVsZXZhbnQg ZW50cmllcy4gVGhlIHRyb3ZlIGxvb2t1cCB3aWxsIHJldHVybiB0aGUgc2FtZSByZXN1bHRzIGZv cgorCSAqIGV2ZXJ5IG91dGVycmVsL2lubmVycmVsIGNvbWJpbmF0aW9uLCBzbyB3ZSBkb24ndCBu ZWVkIHRvIHJlcGVhdCB0aGF0CisJICogd29yayBldmVyeSB0aW1lLgorCSAqLworCWlmIChuZXdf cGpzKQorCXsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdDsKKworCQkvKiBGaW5kIGpvaW4g ZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9M T09LVVBfSk9JTiwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQs CisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPmpvaW5fZW50cmllcyA9IHRy ZXN1bHQuZW50cmllczsKKwkJcGpzLT5qb2luX2luZGV4ZXMgPSB0cmVzdWx0LmluZGV4ZXM7CisK KwkJLyogRmluZCByZWwgZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92 ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCQkJCQkJICBwanMtPm91dGVyX2NvdW50ICsgcGpz LT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3VsdCk7CisJCXBqcy0+cmVs X2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+cmVsX2luZGV4ZXMgPSB0cmVzdWx0 LmluZGV4ZXM7CisKKwkJLyogTm93IHRoYXQgdGhlIG5ldyBwZ3BhX2pvaW5fc3RhdGUgaXMgZnVs bHkgdmFsaWQsIHNhdmUgYSBwb2ludGVyLiAqLworCQlTZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3Rh dGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBqcyk7CisKKwkJLyoKKwkJICogSWYg dGhlcmUgd2FzIG5vIHJlbGV2YW50IGFkdmljZSBmb3VuZCwganVzdCByZXR1cm4gTlVMTC4gVGhp cworCQkgKiBwZ3BhX2pvaW5fc3RhdGUgd2lsbCBzdGljayBhcm91bmQgYXMgYSBzb3J0IG9mIG5l Z2F0aXZlIGNhY2hlCisJCSAqIGVudHJ5LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyBmb3IgdGhpcyBz YW1lIGpvaW5yZWwgcXVpY2tseSByZXR1cm4KKwkJICogTlVMTC4KKwkJICovCisJCWlmIChwanMt PmpvaW5faW5kZXhlcyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkKKwkJCXJl dHVybiBOVUxMOworCX0KKworCXJldHVybiBwanM7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBw cm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byBhbnkgbWV0aG9kIG9mIGltcGxlbWVu dGluZworICogdGhpcyBqb2luLgorICoKKyAqIEFsdGhvdWdoIHdlJ3JlIHBhc3NlZCB0aGUgb3V0 ZXJyZWwgYW5kIGlubmVycmVsIGhlcmUsIHRob3NlIGFyZSBqdXN0CisgKiB3aGF0ZXZlciB2YWx1 ZXMgaGFwcGVuZWQgdG8gcHJvbXB0IHRoZSBjcmVhdGlvbiBvZiB0aGlzIGpvaW5yZWw7IHRoZXkK KyAqIHNob3VsZG4ndCByZWFsbHkgaW5mbHVlbmNlIG91ciBjaG9pY2Ugb2Ygd2hhdCBhZHZpY2Ug dG8gYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3Nl cnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJ LyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJ cGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJy ZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1 bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwkJcGdwYV9wbGFubmVy X2FwcGx5X2pvaW5yZWxfYWR2aWNlKCZqb2lucmVsLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkgIHJv b3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgIHBqcyk7CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJl dmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2lucmVsX3NldHVwKQorCQkoKnByZXZfam9pbnJl bF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgICBz amluZm8sIHJlc3RyaWN0bGlzdCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBh ZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgbWV0aG9kIG9mCisgKiBp bXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGpvaW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwK KwkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJ IEpvaW5UeXBlIGpvaW50eXBlLCBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCit7CisJcGdwYV9q b2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRz KSA9PSBCTVNfTVVMVElQTEUpOworCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0 aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBq b2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQg YWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMg IT0gTlVMTCkKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2Uoam9pbnR5cGUs CisJCQkJCQkJCQkJCSZleHRyYS0+cGdzX21hc2ssCisJCQkJCQkJCQkJCXJvb3QtPnBsYW5fbmFt ZSwKKwkJCQkJCQkJCQkJcGpzKTsKKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAq LworCWlmIChwcmV2X2pvaW5fcGF0aF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkg KHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBl eHRyYSk7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFkdmljZSBmb3IgdXNlIGJ5IGEgcXVlcnkuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwg UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJICAgZG91YmxlICp0 dXBsZV9mcmFjdGlvbiwgRXhwbGFpblN0YXRlICplcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9 IE5VTEw7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJYm9vbAkJbmVlZHNfcHBzID0gZmFs c2U7CisKKwkvKgorCSAqIElmIGFueSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3Zl IG9mIGFkdmljZSBmb3IgdXNlIGR1cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19w bGFuX2FkdmljZV9hZHZpY2UgIT0gTlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0g J1wwJykKKwl7CisJCUxpc3QJICAgKmFkdmljZV9pdGVtczsKKwkJY2hhcgkgICAqZXJyb3I7CisK KwkJLyoKKwkJICogUGFyc2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3Qg aGF2ZSBwcmV2aW91c2x5IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZp Y2VfYWR2aWNlX2NoZWNrX2hvb2ssIGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2Fybmlu Zy4KKwkJICovCisJCWFkdmljZV9pdGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2 aWNlLCAmZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiAlcyIsIGVycm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRo YXQgdGhlIGFkdmljZSBzdHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAq IGFjdHVhbCBhZHZpY2UsIGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYg KGFkdmljZV9pdGVtcyAhPSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShh ZHZpY2VfaXRlbXMpOworCQkJbmVlZHNfcHBzID0gdHJ1ZTsKKwkJfQorCX0KKworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKworCS8qCisJICogSWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYWx3 YXlzIGJ1aWxkIGEgcHJpdmF0ZSBzdGF0ZSBvYmplY3QgZm9yCisJICogY3Jvc3MtY2hlY2tzLgor CSAqLworCW5lZWRzX3BwcyA9IHRydWU7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgYW5kIHN0 b3JlIHByaXZhdGUgc3RhdGUsIGlmIHJlcXVpcmVkLiAqLworCWlmIChuZWVkc19wcHMpCisJewor CQlwcHMgPSBwYWxsb2MwX29iamVjdChwZ3BhX3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxh aW5fc3RhdGUgPSBlczsKKwkJcHBzLT50cm92ZSA9IHRyb3ZlOworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwkJcHBzLT5yaV9jaGVja19oYXNoID0KKwkJCXBncGFfcmlfY2hlY2tfY3JlYXRl KEN1cnJlbnRNZW1vcnlDb250ZXh0LCAxMDI0LCBOVUxMKTsKKyNlbmRpZgorCQlTZXRQbGFubmVy R2xvYmFsRXh0ZW5zaW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBwcyk7CisJ fQorfQorCisvKgorICogQ2Fycnkgb3V0IHdoYXRldmVyIHdvcmsgd2Ugd2FudCB0byBkbyBhZnRl ciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9z aHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCSAgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJcGdwYV9wbGFubmVy X3N0YXRlICpwcHM7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCUV4cGxhaW5TdGF0ZSAq ZXMgPSBOVUxMOworCXBncGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXIgPSB7MH07CS8qIHBs YWNhdGUgY29tcGlsZXIgKi8KKwlib29sCQlkb19hZHZpY2VfZmVlZGJhY2s7CisJYm9vbAkJZG9f Y29sbGVjdF9hZHZpY2U7CisJTGlzdAkgICAqcGdwYV9pdGVtcyA9IE5JTDsKKwlwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzID0gTlVMTDsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0 YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5l ckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAo cHBzICE9IE5VTEwpCisJeworCQl0cm92ZSA9IHBwcy0+dHJvdmU7CisJCWVzID0gcHBzLT5leHBs YWluX3N0YXRlOworCX0KKworCS8qIElmIGF0IGxlYXN0IG9uZSBjb2xsZWN0b3IgaXMgZW5hYmxl ZCwgZ2VuZXJhdGUgYWR2aWNlLiAqLworCWRvX2NvbGxlY3RfYWR2aWNlID0gKHBnX3BsYW5fYWR2 aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwIHx8CisJCQkJCQkgcGdfcGxhbl9hZHZpY2Vf c2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPiAwKTsKKworCS8qIElmIHdlIGFwcGxpZWQgYWR2aWNl LCBnZW5lcmF0ZSBmZWVkYmFjay4gKi8KKwlkb19hZHZpY2VfZmVlZGJhY2sgPSAodHJvdmUgIT0g TlVMTCAmJiBlcyAhPSBOVUxMKTsKKworCS8qIElmIGVpdGhlciBvZiB0aGUgYWJvdmUgYXBwbHks IGFuYWx5emUgdGhlIHJlc3VsdGluZyBQbGFubmVkU3RtdC4gKi8KKwlpZiAoZG9fY29sbGVjdF9h ZHZpY2UgfHwgZG9fYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJcGdwYV9wbGFuX3dhbGtlcigmd2Fs a2VyLCBwc3RtdCk7CisJCXJ0X2lkZW50aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNf Zm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7CisJfQorCisJLyoKKwkgKiBJZiBhZHZpY2UgY29sbGVj dGlvbiBpcyBlbmFibGVkLCBwdXQgdGhlIGFkdmljZSBpbiBzdHJpbmcgZm9ybSBhbmQgc2VuZAor CSAqIGl0IHRvIHRoZSBjb2xsZWN0b3IuCisJICovCisJaWYgKGRvX2NvbGxlY3RfYWR2aWNlKQor CXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ CS8qIEdlbmVyYXRlIGEgdGV4dHVhbCBhZHZpY2Ugc3RyaW5nLiAqLworCQlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwkJcGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxrZXIsIHJ0X2lkZW50aWZp ZXJzKTsKKwkJYWR2aWNlX3N0cmluZyA9IGJ1Zi5kYXRhOworCisJCS8qIElmIHRoZSBhZHZpY2Ug c3RyaW5nIGlzIGVtcHR5LCBkb24ndCBib3RoZXIgY29sbGVjdGluZyBpdC4gKi8KKwkJaWYgKGFk dmljZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJCXBncGFfY29sbGVjdF9hZHZpY2UocHN0bXQtPnF1 ZXJ5SWQsIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZyk7CisKKwkJLyoKKwkJICogSWYgd2Un dmUgZ29uZSB0byB0aGUgdHJvdWJsZSBvZiBnZW5lcmF0aW5nIGFuIGFkdmljZSBzdHJpbmcsIGFu ZCBpZgorCQkgKiB3ZSdyZSBpbnNpZGUgRVhQTEFJTiwgc2F2ZSB0aGUgc3RyaW5nIHNvIHdlIGRv bid0IG5lZWQgdG8KKwkJICogcmVnZW5lcmF0ZSBpdC4KKwkJICovCisJCWlmIChlcyAhPSBOVUxM KQorCQkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywKKwkJCQkJCQkJIG1ha2VEZWZF bGVtKCJhZHZpY2Vfc3RyaW5nIiwKKwkJCQkJCQkJCQkJIChOb2RlICopIG1ha2VTdHJpbmcoYWR2 aWNlX3N0cmluZyksCisJCQkJCQkJCQkJCSAtMSkpOworCX0KKworCS8qCisJICogSWYgd2UgYXJl IHBsYW5uaW5nIHdpdGhpbiBFWFBMQUlOLCBtYWtlIGFycmFuZ2VtZW50cyB0byBhbGxvdyBFWFBM QUlOCisJICogdG8gdGVsbCB0aGUgdXNlciB3aGF0IGhhcyBoYXBwZW5lZCB3aXRoIHRoZSBwcm92 aWRlZCBhZHZpY2UuCisJICoKKwkgKiBOQjogSWYgRVhQTEFJTiBpcyB1c2VkIG9uIGEgcHJlcGFy ZWQgaXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQsIHBsYW5uaW5nCisJICogd2lsbCBoYXZlIGFscmVh ZHkgaGFwcGVuZWQgaGFwcGVuZWQgd2l0aG91dCByZWNvcmRpbmcgdGhlc2UgZGV0YWlscy4gV2UK KwkgKiBjb3VsZCBjb25zaWRlciBhZGRpbmcgYSBHVUMgdG8gY2F0ZXIgdG8gdGhhdCBzY2VuYXJp bzsgb3Igd2UgY291bGQgZG8KKwkgKiB0aGlzIHdvcmsgYWxsIHRoZSB0aW1lLCBidXQgdGhhdCBz ZWVtcyBsaWtlIHRvbyBtdWNoIG92ZXJoZWFkLgorCSAqLworCWlmIChkb19hZHZpY2VfZmVlZGJh Y2spCisJeworCQlMaXN0CSAgICpmZWVkYmFjayA9IE5JTDsKKworCQkvKgorCQkgKiBJbmplY3Qg YSBOb2RlLXRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWxsIHRoZSB0cm92ZS1lbnRyeSBmbGFncyBp bnRvCisJCSAqIHRoZSBQbGFubmVkU3RtdC4KKwkJICovCisJCWZlZWRiYWNrID0gcGdwYV9wbGFu bmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJ CQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJz LCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZl ZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tV UF9KT0lOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFj ayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0 cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCQkJCQkJCXJ0 X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0 ZW1zLCBtYWtlRGVmRWxlbSgiZmVlZGJhY2siLAorCQkJCQkJCQkJCQkJCSAoTm9kZSAqKSBmZWVk YmFjaywKKwkJCQkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKiBQdXNoIHdoYXRldmVyIGRhdGEg d2UncmUgc2F2aW5nIGludG8gdGhlIFBsYW5uZWRTdG10LiAqLworCWlmIChwZ3BhX2l0ZW1zICE9 IE5JTCkKKwkJcHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSA9CisJCQlsYXBwZW5kKHBzdG10LT5leHRl bnNpb25fc3RhdGUsCisJCQkJCW1ha2VEZWZFbGVtKCJwZ19wbGFuX2FkdmljZSIsIChOb2RlICop IHBncGFfaXRlbXMsIC0xKSk7CisKKwkvKgorCSAqIElmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQs IGNyb3NzLWNoZWNrIHRoZSBnZW5lcmF0ZWQgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4K KwkgKi8KKwlpZiAocHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwcHMs IHBzdG10KTsKK30KKworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBq b2luIHJlbGF0aW9uIHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBj aG9pY2Ugb2YgaW5uZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxh bm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5f bmFtZSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7 CisJaW50CQkJZmxhZ3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0 CQlnYXRoZXJfbWFzayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBO VUxMOworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0 aXRpb253aXNlX2NvbmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21l ID0gMDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOwor CUJpdG1hcHNldCAgKnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVy YXRlIG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBi bXNfbmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBl IGl0bTsKKwkJYm9vbAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9t YXNrID0gMDsKKwkJaW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVz LCA8MCBubyAqLworCisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYg dGhlIHNwZWNpZmllZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWws IGRvIHdoYXRldmVyIHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxv dyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRo ZXJlCisJCSAqIG11c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUg aW5jbHVkZWQgaW4gdGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVu dHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9 IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMt Pm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmll cnNfbWF0Y2hfdGFyZ2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRy eS0+dGFyZ2V0KTsKKwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlp ZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOwor CQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BB X1RBR19HQVRIRVIpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNl IGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVy X21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElP TldJU0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJ bXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxz ZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRyeS0+dGFn ID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15X3BhcnRpdGlvbndpc2Vf b3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJU SUFMOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmlj ZSB0YWc6ICVkIiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJfQorCisJCS8q CisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFr ZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhl IG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1 bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQor CQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJf bWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9n YXRoZXJfbWFzazsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0g Ym1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhl cl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkp OworCQl9CisKKwkJLyoKKwkJICogTGlrZXdpc2UsIGlmIHdlIHNldCBteV9wYXJ0aXRpb253aXNl X291dGNvbWUgdXAgYWJvdmUsIHRoZW4gd2UgKDEpCisJCSAqIG1ha2UgYSBub3RlIGlmIHRoZSBh ZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHdoYXQgdGhlIGRlc2lyZWQKKwkJICogb3V0 Y29tZSB3YXMsIGFuZCAoMykgcmVtZW1iZXIgd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFy dGlhbAorCQkgKiBtYXRjaC4KKwkJICovCisJCWlmIChteV9wYXJ0aXRpb253aXNlX291dGNvbWUg IT0gMCkKKwkJeworCQkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmCisJCQkJcGFy dGl0aW9ud2lzZV9vdXRjb21lICE9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSkKKwkJCQlwYXJ0 aXRpb253aXNlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IG15 X3BhcnRpdGlvbndpc2Vfb3V0Y29tZTsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCXBhcnRpdGlv bndpc2VfZnVsbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfZnVs bF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0K KwkJCQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJ fQorCX0KKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZp Y2UgYXMgcGFydGlhbGx5IG1hdGNoZWQsIGFuZCBpZgorCSAqIHRoZSBzZXQgb2YgdGFyZ2V0cyBl eGFjdGx5IG1hdGNoZWQgdGhpcyByZWxhdGlvbiwgZnVsbHkgbWF0Y2hlZC4gSWYKKwkgKiB0aGVy ZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlm bGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlm bGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+ cmVsX2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQ QV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMs IGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBMaWtld2lzZSBmb3IgcGFydGl0aW9u d2lzZSBhZHZpY2UuICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKHBh cnRpdGlvbndpc2VfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJ cGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9wYXJ0 aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFf dHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfZnVsbF9tYXRj aCwgZmxhZ3MpOworCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNw ZWNpZmljYXRpb24sIGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdh dGhlcl9jb25mbGljdCkKKwl7CisJCSpwZ3NfbWFza19wICY9CisJCQl+KFBHU19HQVRIRVIgfCBQ R1NfR0FUSEVSX01FUkdFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOworCQkqcGdzX21hc2tf cCB8PSBnYXRoZXJfbWFzazsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZs aWN0aW5nIHBhcnRpdGlvbndpc2Ugc3BlY2lmaWNhdGlvbiwgZW5mb3JjZS4KKwkgKgorCSAqIFRv IGZvcmNlIGEgcGFydGl0aW9ud2lzZSBqb2luLCB3ZSBkaXNhYmxlIGFsbCB0aGUgb3JkaW5hcnkg bWVhbnMgb2YKKwkgKiBwZXJmb3JtaW5nIGEgam9pbiwgYW5kIGluc3RlYWQgb25seSBBcHBlbmQg YW5kIE1lcmdlQXBwZW5kIHBhdGhzIGhlcmUuCisJICogVG8gcHJldmVudCBvbmUsIHdlIGp1c3Qg ZGlzYWJsZSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kLiAgTm90ZSB0aGF0IHdlCisJICogbXVzdCBu b3QgdW5zZXQgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgZXZlbiB3aGVuIHdlIGRvbid0IHdh bnQgYQorCSAqIHBhcnRpdGlvbndpc2Ugam9pbiBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQg b25lIGF0IGEgaGlnaGVyIGxldmVsCisJICogdGhhdCBpcyBjb25zdHJ1Y3RpbmcgdXNpbmcgcGF0 aHMgZnJvbSB0aGlzIGxldmVsLgorCSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0g MCAmJiAhcGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNlX291 dGNvbWUgPiAwKQorCQkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5Z KSB8CisJCQkJUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfCBQR1NfQ09OU0lERVJfUEFS VElUSU9OV0lTRTsKKwkJZWxzZQorCQkJKnBnc19tYXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdT X01FUkdFX0FQUEVORCk7CisJfQorfQorCisvKgorICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24g dGhlIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2QuCisgKgorICogTm90ZSB0aGF0LCBhbHRob3Vn aCBpdCBpcyBwb3NzaWJsZSB0byB2aWV3IFBBUlRJVElPTldJU0UgYWR2aWNlIGFzCisgKiBjb250 cm9sbGluZyB0aGUgam9pbiBtZXRob2QsIHdlIGNhbid0IGVuZm9yY2UgaXQgaGVyZSwgYmVjYXVz ZSB0aGUgY29kZQorICogcGF0aCB3aGVyZSB0aGlzIGV4ZWN1dGVzIG9ubHkgZGVhbHMgd2l0aCBq b2luIHBhdGhzIHRoYXQgYXJlIGJ1aWx0IGRpcmVjdGx5CisgKiBmcm9tIGEgc2luZ2xlIG91dGVy IHBhdGggYW5kIGEgc2luZ2xlIGlubmVyIHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Bs YW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpw Z3NfbWFza19wLAorCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2lu X3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9p bmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJp dG1hcHNldCAgKmptX2luZGV4ZXMgPSBOVUxMOworCWJvb2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7 CisJdWludDMyCQlqb2luX21hc2sgPSAwOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJs eS1yZWxldmFudCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+ am9pbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0g JnBqcy0+am9pbl9lbnRyaWVzW2ldOworCQl1aW50MzIJCW15X2pvaW5fbWFzazsKKworCQkvKiBI YW5kbGUgam9pbiBvcmRlciBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFH X0pPSU5fT1JERVIpCisJCXsKKwkJCWlmIChwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKHBq cy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJ CQkgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkgZW50cnkpKQorCQkJCWpvX3Blcm1pdF9pbmRleGVz ID0gYm1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJZWxzZQorCQkJCWpv X2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQlj b250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwkJ bXlfam9pbl9tYXNrID0gcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKGVu dHJ5LT50YWcpOworCQlpZiAobXlfam9pbl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJCXBlcm1p dDsKKwkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJCXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5fcGVybWl0 c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3Vu dCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJ CQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVybWl0ID0g cGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJ CQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJ CQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsK KwkJCWlmICghcGVybWl0KQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpv X2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJ CQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywg aSk7CisJCQkJam1faW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBp KTsKKwkJCQlpZiAoam9pbl9tYXNrICE9IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFzaykK KwkJCQkJam1fY29uZmxpY3QgPSB0cnVlOworCQkJCWpvaW5fbWFzayA9IG15X2pvaW5fbWFzazsK KwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNlbWlqb2luIHVuaXF1ZW5l c3MgYWR2aWNlLiAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklR VUUgfHwKKwkJCWVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSkKKwkJ eworCQkJYm9vbAkJYWR2aWNlX3VuaXF1ZTsKKwkJCWJvb2wJCWp0X3VuaXF1ZTsKKwkJCWJvb2wJ CWp0X25vbl91bmlxdWU7CisJCQlib29sCQlyZXN0cmljdF9tZXRob2Q7CisKKwkJCS8qIEFkdmlj ZSB3YW50cyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlhZHZp Y2VfdW5pcXVlID0gKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFKTsKKwor CQkJLyogUGxhbm5lciBpcyB0cnlpbmcgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVndWxhciBq b2luPyAqLworCQkJanRfdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVSIHx8 CisJCQkJCQkgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIpOworCisJCQkvKiBQbGFubmVy IGlzIHRyeWluZyBhIHNlbWktam9pbiwgd2l0aG91dCB1bmlxdWUtaWZ5aW5nPyAqLworCQkJanRf bm9uX3VuaXF1ZSA9IChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKKwkJCQkJCQkgam9pbnR5cGUg PT0gSk9JTl9SSUdIVF9TRU1JKTsKKworCQkJLyoKKwkJCSAqIFRoZXNlIGFkdmljZSB0YWdzIGJl aGF2ZSB2ZXJ5IG11Y2ggbGlrZSBqb2luIG1ldGhvZCBhZHZpY2UsIGluCisJCQkgKiB0aGF0IHRo ZXkgd2FudCB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgc2VtaWpvaW4gdG8gbWF0Y2ggdGhlCisJCQkg KiByZWxhdGlvbnMgbGlzdGVkIGluIHRoZSBhZHZpY2UuIEhlbmNlLCB3ZSB0ZXN0IHdoZXRoZXIg am9pbgorCQkJICogbWV0aG9kIGFkdmljZSB3b3VsZCBlbmZvcmNlIGEgam9pbiBvcmRlciByZXN0 cmljdGlvbiBoZXJlLCBhbmQKKwkJCSAqIGRpc2FsbG93IHRoZSBqb2luIGlmIG5vdC4KKwkJCSAq CisJCQkgKiBYWFguIFRoaW5rIGhhcmRlciBhYm91dCByaWdodCBzZW1pam9pbnMuCisJCQkgKi8K KwkJCWlmICghcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwK KwkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICAgcGpzLT5yaWRz LAorCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCkp CisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBp KTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlpZiAoIWp0X3VuaXF1 ZSAmJiAhanRfbm9uX3VuaXF1ZSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgZG9lc24n dCBzZWVtIHRvIGJlIGEgc2VtaWpvaW4gdG8gd2hpY2ggU0pfVU5JUVVFCisJCQkJCSAqIG9yIFNK X05PTl9VTklRVUUgY2FuIGJlIGFwcGxpZWQuCisJCQkJCSAqLworCQkJCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9JTkFQUExJQ0FCTEU7CisJCQkJfQorCQkJCWVsc2UgaWYgKGFkdmljZV91bmlx dWUgIT0ganRfdW5pcXVlKQorCQkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihq b19kZW55X2luZGV4ZXMsIGkpOworCQkJCWVsc2UKKwkJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQl9CisJCQljb250aW51ZTsK KwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGFkdmljZSBpbmRpY2F0ZXMgYm90aCB0aGF0IHRo aXMgam9pbiBvcmRlciBpcyBwZXJtaXNzaWJsZSBhbmQKKwkgKiBhbHNvIHRoYXQgaXQgaXNuJ3Qs IHRoZW4gbWFyayBhZHZpY2UgcmVsYXRlZCB0byB0aGUgam9pbiBvcmRlciBhcworCSAqIGNvbmZs aWN0aW5nLgorCSAqLworCWlmIChqb19wZXJtaXRfaW5kZXhlcyAhPSBOVUxMICYmIGpvX2Rlbnlf aW5kZXhlcyAhPSBOVUxMKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2Vu dHJpZXMsIGpvX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsK KwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpvX2RlbnlfaW5kZXhl cywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBJZiBtb3Jl IHRoYW4gb25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZSBhbmQg dGhleQorCSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlp ZiAoam1fY29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVz LCBqbV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKworCS8qCisJICog SWYgd2Ugd2VyZSBhZHZpc2VkIHRvIGRlbnkgdGhpcyBqb2luIG9yZGVyLCB0aGVuIGRvIHNvLiBI b3dldmVyLCBpZiB3ZQorCSAqIHdlcmUgYWxzbyBhZHZpc2VkIHRvIHBlcm1pdCBpdCwgdGhlbiBk byBub3RoaW5nLCBzaW5jZSB0aGUgYWR2aWNlCisJICogY29uZmxpY3RzLgorCSAqLworCWlmIChq b19kZW55X2luZGV4ZXMgIT0gTlVMTCAmJiBqb19wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkq cGdzX21hc2tfcCA9IDA7CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byByZXN0cmlj dCB0aGUgam9pbiBtZXRob2QsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmCisJICogd2UgZ290IGNv bmZsaWN0aW5nIGpvaW4gbWV0aG9kIGFkdmljZSBvciB3ZXJlIGFsc28gYWR2aXNlZCB0byByZWpl Y3QKKwkgKiB0aGlzIGpvaW4gb3JkZXIgY29tcGxldGVseSwgdGhlbiBpbnN0ZWFkIGRvIG5vdGhp bmcuCisJICovCisJaWYgKGpvaW5fbWFzayAhPSAwICYmICFqbV9jb25mbGljdCAmJiBqb19kZW55 X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pP SU5fQU5ZKSB8IGpvaW5fbWFzazsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZHZpY2UgdGFn IGludG8gYSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCB0YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQgam9p bgorICogc3RyYXRlZ2llcy4gSW4gc3VjaCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hpY2gg Y2FuJ3QgYmUgY29uZnVzZWQgd2l0aAorICogYSB2YWxpZCBtYXNrLgorICovCitzdGF0aWMgdWlu dDY0CitwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2Vf dGFnX3R5cGUgdGFnKQoreworCXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19GT1JF SUdOX0pPSU46CisJCQlyZXR1cm4gUEdTX0ZPUkVJR05KT0lOOworCQljYXNlIFBHUEFfVEFHX01F UkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJY2FzZSBQ R1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1 cm4gUEdTX05FU1RMT09QX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVS SUFMSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BB X1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NRU1PSVpF OworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47CisJ CWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBp dGVtIG9mIGpvaW4gb3JkZXIgYWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqLworc3Rh dGljIGJvb2wKK3BncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBp bnQgaW5uZXJfY291bnQsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkg cGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJYm9vbAkJbG9vcCA9IHRydWU7CisJYm9vbAkJ c3VibGlzdCA9IGZhbHNlOworCWludAkJCWxlbmd0aDsKKwlpbnQJCQlvdXRlcl9sZW5ndGg7CisJ cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfYWR2aWNl X3RhcmdldCAqcHJlZml4X3RhcmdldDsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFz dCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdz IHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICogRmluZCB0aGUgaW5uZXJtb3N0 IHN1Ymxpc3QgdGhhdCBjb250YWlucyBhbGwga2V5czsgaWYgbm8gc3VibGlzdCBkb2VzLAorCSAq IHRoZW4gY29udGludWUgcHJvY2Vzc2luZyB3aXRoIHRoZSB0b3BsZXZlbCBsaXN0LgorCSAqCisJ ICogRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyICh0MyB0 NCB0NSkpLCB0aGVuIHdlCisJICogc2hvdWxkIGV2YWx1YXRlIGpvaW5zIHRoYXQgb25seSBpbnZv bHZlIHQzLCB0NCwgYW5kL29yIHQ1IGFnYWluc3QgdGhlCisJICogKHQzIHQ0IHQ1KSBzdWJsaXN0 LCBhbmQgb3RoZXJzIGFnYWluc3QgdGhlIGZ1bGwgbGlzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCAo MSkgb3V0ZXJtb3N0IHN1Ymxpc3QgaXMgYWx3YXlzIG9yZGVyZWQgYW5kICgyKSB3aGVuZXZlciB3 ZQorCSAqIHpvb20gaW50byBhbiB1bm9yZGVyZWQgc3VibGlzdCwgd2UgaW5zdGFudGx5IGFjY2Vw dCB0aGUgcHJvcG9zZWQgam9pbi4KKwkgKiBJZiB0aGUgYWR2aWNlIHNheXMgSk9JTl9PUkRFUih0 MSB0MiB7dDMgdDQgdDV9KSwgYW55IGFwcHJvYWNoIHRvCisJICogam9pbmluZyB0MywgdDQsIGFu ZC9vciB0NSBpcyBhY2NlcHRhYmxlLgorCSAqLworCXdoaWxlIChsb29wKQorCXsKKwkJQXNzZXJ0 KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCQlsb29wID0g ZmFsc2U7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0 YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkJaWYgKGNo aWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwkJCQljb250aW51 ZTsKKworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQg KyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCXJpZHMsIGNoaWxkX3RhcmdldCk7CisJCQlpZiAo aXRtID09IFBHUEFfSVRNX0VRVUFMIHx8IGl0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQp CisJCQl7CisJCQkJaWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJF RF9MSVNUKQorCQkJCXsKKwkJCQkJdGFyZ2V0ID0gY2hpbGRfdGFyZ2V0OworCQkJCQlzdWJsaXN0 ID0gdHJ1ZTsKKwkJCQkJbG9vcCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9V Tk9SREVSRURfTElTVCk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0K KworCS8qCisJICogVHJ5IHRvIGZpbmQgYSBwcmVmaXggb2YgdGhlIHNlbGVjdGVkIGpvaW4gb3Jk ZXIgbGlzdCB0aGF0IGlzIGV4YWN0bHkKKwkgKiBlcXVhbCB0byB0aGUgb3V0ZXIgc2lkZSBvZiB0 aGUgcHJvcG9zZWQgam9pbi4KKwkgKi8KKwlsZW5ndGggPSBsaXN0X2xlbmd0aCh0YXJnZXQtPmNo aWxkcmVuKTsKKwlwcmVmaXhfdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFy Z2V0KTsKKwlwcmVmaXhfdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsK Kwlmb3IgKG91dGVyX2xlbmd0aCA9IDE7IG91dGVyX2xlbmd0aCA8PSBsZW5ndGg7ICsrb3V0ZXJf bGVuZ3RoKQorCXsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJLyogQXZvaWQgbGVha2luZyBt ZW1vcnkgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICovCisJCWlmIChwcmVmaXhfdGFyZ2V0LT5j aGlsZHJlbiAhPSBOVUxMKQorCQkJbGlzdF9mcmVlKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuKTsK KwkJcHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gPSBsaXN0X2NvcHlfaGVhZCh0YXJnZXQtPmNoaWxk cmVuLAorCQkJCQkJCQkJCQkJIG91dGVyX2xlbmd0aCk7CisKKwkJLyogU2VhcmNoLCBob3Bpbmcg dG8gZmluZCBhbiBleGFjdCBtYXRjaC4gKi8KKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRj aF90YXJnZXQob3V0ZXJfY291bnQsIHJpZHMsIHByZWZpeF90YXJnZXQpOworCQlpZiAoaXRtID09 IFBHUEFfSVRNX0VRVUFMKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZWZpeCBv ZiB0aGUgam9pbiBvcmRlciBsaXN0IHRoYXQgd2UncmUgY29uc2lkZXJpbmcKKwkJICogaW5jbHVk ZXMgc29tZSBidXQgbm90IGFsbCBvZiB0aGUgb3V0ZXIgcmVscywgd2UgY2FuIG1ha2UgdGhlIHBy ZWZpeAorCQkgKiBsb25nZXIgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4gQnV0IHRoZSBhZHZpY2Ug aGFzbid0IG1lbnRpb25lZAorCQkgKiBldmVyeXRoaW5nIHRoYXQncyBwYXJ0IG9mIG91ciBvdXRl ciByZWwgeWV0LCBidXQgaGFzIG1lbnRpb25lZAorCQkgKiB0aGluZ3MgdGhhdCBhcmUgbm90LCB0 aGVuIHRoaXMgam9pbiBkb2Vzbid0IG1hdGNoIHRoZSBqb2luIG9yZGVyCisJCSAqIGxpc3QuCisJ CSAqLworCQlpZiAoaXRtICE9IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCXJldHVy biBmYWxzZTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsb29wZWQgc3RvcHBlZCBi ZWZvcmUgdGhlIHByZWZpeF90YXJnZXQgaW5jbHVkZWQgdGhlCisJICogZW50aXJlIGpvaW4gb3Jk ZXIgbGlzdCwgdGhlbiB0aGUgbmV4dCBtZW1iZXIgb2YgdGhlIGpvaW4gb3JkZXIgbGlzdAorCSAq IG11c3QgZXhhY3RseSBtYXRjaCB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbi4KKwkgKgorCSAq IEV4YW1wbGU6IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIGlmIHRoZSBvdXRl ciBzaWRlIG9mIHRoZQorCSAqIGN1cnJlbnQgam9pbiBpbmNsdWRlcyBvbmx5IHQxLCB0aGVuIHRo ZSBpbm5lciBzaWRlIG11c3QgYmUgZXhhY3RseSB0MjsKKwkgKiBpZiB0aGUgb3V0ZXIgc2lkZSBp bmNsdWRlcyBib3RoIHQxIGFuZCB0MiwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0CisJICogaW5j bHVkZSBleGFjdGx5IHQzLCB0NCwgYW5kIHQ1LgorCSAqLworCWlmIChvdXRlcl9sZW5ndGggPCBs ZW5ndGgpCisJeworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmlubmVyX3RhcmdldDsKKwkJcGdwYV9p dG1fdHlwZSBpdG07CisKKwkJaW5uZXJfdGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0LT5jaGlsZHJl biwgb3V0ZXJfbGVuZ3RoKTsKKworCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChpbm5lcl9jb3VudCwgcmlkcyArIG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQlpbm5lcl90YXJn ZXQpOworCisJCS8qCisJCSAqIEJlZm9yZSByZXR1cm5pbmcsIGNvbnNpZGVyIHdoZXRoZXIgd2Ug bmVlZCB0byBtYXJrIHRoaXMgZW50cnkgYXMKKwkJICogZnVsbHkgbWF0Y2hlZC4gSWYgd2UgZm91 bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRoZSBsZWZ0aGFuZCBzaWRlCisJCSAqIG9mIHRoZSBq b2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSByaWdodGhhbmQgc2lkZSBvZiB0aGUgam9pbiwK KwkJICogdGhlbiB0aGUgYW5zd2VyIGlzIHllcy4KKwkJICovCisJCWlmIChvdXRlcl9sZW5ndGgg KyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQllbnRyeS0+ZmxhZ3Mg fD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJldHVybiAoaXRtID09IFBHUEFfSVRNX0VRVUFM KTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJlLCB0aGVuIHRoZSBvdXRlciBzaWRlIG9m IHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0eQorCSAqIG9mIHRoZSBqb2luIG9yZGVyIGxp c3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZworCSAqIG9u IHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUgdG9wLWxldmVsIGpvaW4gb3JkZXIgbGlzdCBv ciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2ZWwsIHdlIHRyZWF0IHRoZSBzcGVjaWZpZWQg bGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkgKiBhY3R1YWwgam9pbiBvcmRlciBoYXMgdGhl IGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBhIHN1Ymxpc3QKKwkgKiByZXF1aXJlcyBhbiBl eGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4bWFwbGU6IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQz IHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9pbmluZworCSAqIGFsbCBmaXZlIG9mIHRob3Nl IHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5jZSwgYnV0IG9uY2UgdGhhdCBpcworCSAqIGRv bmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIgcmVscyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBq b2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgdGhlIGRyaXZp bmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0CisJICogZmV3IHRoaW5ncyB0byB3aGljaCBp dCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlCisJICogam9p biBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBz dXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3BlY2lmaWNhdGlvbiwgaWYgdGhlIHVzZXIgY291 bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJICogc3ViLWpvaW4sIHNvIHdlIGRvbid0IGFs bG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IGl0LCB0aGUgbG9naWMKKwkgKiBlYXJs aWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVxdWlyZSBzdWJzdGFudGlhbCBhZGp1c3RtZW50 OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10NC10NS10NiBqb2luIHRvIGJlIGJ1aWx0IGhl cmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICogam9pbmluZyB0MS10MiB0byB0aGUgcmVzdWx0 IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAqLworCXJldHVybiAhc3VibGlzdDsKK30KKwor LyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBtZXRob2QgYWR2aWNlIHBlcm1pdCBh IGNlcnRhaW4gam9pbj8KKyAqCisgKiBBZHZpY2Ugc3VjaCBhcyBIQVNIX0pPSU4oKHggeSkpIG1l YW5zIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGgKKyAqIGV4YWN0bHkgeCBh bmQgeSBvbiB0aGUgaW5uZXIgc2lkZS4gT2J2aW91c2x5LCB0aGlzIG1lYW5zIHRoYXQgaWYgd2Ug YXJlCisgKiBjb25zaWRlcmluZyBhIGpvaW4gd2l0aCBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlu bmVyIHNpZGUsIHdlIHNob3VsZCBlbmZvcmNlCisgKiB0aGUgdXNlIG9mIGEgaGFzaCBqb2luLiBI b3dldmVyLCBpdCBhbHNvIG1lYW5zIHRoYXQgd2UgbXVzdCByZWplY3Qgc29tZQorICogaW5jb21w YXRpYmxlIGpvaW4gb3JkZXJzIGVudGlyZWx5LiAgRm9yIGV4YW1wbGUsIGEgam9pbiB3aXRoIGV4 YWN0bHkgeAorICogYW5kIHkgb24gdGhlIG91dGVyIHNpZGUgc2hvdWxkbid0IGJlIGFsbG93ZWQs IGJlY2F1c2Ugc3VjaCBwYXRocyBtaWdodCB3aW4KKyAqIG92ZXIgdGhlIGFkdmljZS1kcml2ZW4g cGF0aCBvbiBjb3N0LgorICoKKyAqIFRvIGFjY29tbW9kYXRlIHRoZXNlIHJlcXVpcmVtZW50cywg dGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGpvaW4KKyAqIHNob3VsZCBiZSBhbGxv d2VkIGFuZCBmYWxzZSBpZiBpdCBzaG91bGQgbm90LiBGdXJ0aGVybW9yZSwgKnJlc3RyaWN0X21l dGhvZAorICogaXMgc2V0IHRvIHRydWUgaWYgdGhlIGpvaW4gbWV0aG9kIHNob3VsZCBiZSBlbmZv cmNlZCBhbmQgZmFsc2UgaWYgbm90LgorICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX21ldGhv ZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJ ICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy eSwKKwkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJ cGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisJcGdwYV9pdG1fdHlwZSBqb2luX2l0bTsKKworCS8q IFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJv dmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwor CSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qCisJICogSWYgb3VyIGlubmVyIHJlbCBt ZW50aW9ucyBleGFjdGx5IHRoZSBzYW1lIHJlbGF0aW9ucyBhcyB0aGUgYWR2aWNlCisJICogdGFy Z2V0LCBhbGxvdyB0aGUgam9pbiBhbmQgZW5mb3JjZSB0aGUgam9pbiBtZXRob2QgcmVzdHJpY3Rp b24uCisJICoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGEgc3VwZXJzZXQgb2YgdGhl IHRhcmdldCByZWxhdGlvbnMsIGFsbG93IHRoZQorCSAqIGpvaW4uIFRoZSBqb2luIHdlIGNhcmUg YWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UsIGFuZCB0aGlzIGFkdmljZQorCSAqIGltcG9z ZXMgbm8gZnVydGhlciByZXN0cmljdGlvbnMuCisJICovCisJaW5uZXJfaXRtID0gcGdwYV9pZGVu dGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcyArIG91 dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHRhcmdldCk7CisJaWYgKGlubmVyX2l0bSA9PSBQR1BB X0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJ CSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZSBpZiAo aW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7 CisKKwkvKgorCSAqIElmIG91ciBvdXRlciByZWwgbWVudGlvbnMgYSBzdXBzZXJzZXQgb2YgdGhl IHJlbGF0aW9ucyBpbiB0aGUgYWR2aWNlCisJICogdGFyZ2V0LCBubyByZXN0cmljdGlvbnMgYXBw bHkuIFRoZSBqb2luIHdlIGNhcmUgaGFzIGFscmVhZHkgdGFrZW4KKwkgKiBwbGFjZSwgYW5kIHRo aXMgYWR2aWNlIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlvbnMuCisJICoKKwkgKiBPbiB0 aGUgb3RoZXIgaGFuZCwgaWYgb3VyIG91dGVyIHJlbCBtZW50aW9ucyBleGFjdGx5IHRoZSByZWxh dGlvbnMKKwkgKiBtZW50aW9uZWQgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHRoZSBwbGFubmVyIGlz IHRyeWluZyB0byByZXZlcnNlIHRoZQorCSAqIHNpZGVzIG9mIHRoZSBqb2luIGFzIGNvbXBhcmVk IHdpdGggb3VyIGRlc2lyZWQgb3V0Y29tZS4gUmVqZWN0IHRoYXQuCisJICovCisJb3V0ZXJfaXRt ID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQsCisJCQkJCQkJCQkJ CSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRN X0VRVUFMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSBhZHZpY2UgdGFyZ2V0 IG1lbnRpb25zIG9ubHkgYSBzaW5nbGUgcmVsYXRpb24sIHRoZSB0ZXN0IGJlbG93CisJICogY2Fu bm90IGV2ZXIgcGFzcywgc28gc2F2ZSBzb21lIHdvcmsgYnkgZXhpdGluZyBub3cuCisJICovCisJ aWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVsIGlzIGFwcGVhcnMg aW4gdGhlIGFkdmljZSB0YXJnZXQsIHdlJ3JlCisJICogYmVsb3cgdGhlIGxldmVsIG9mIHRoZSBq b2luIHdlIHdhbnQgdG8gY29udHJvbC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBIQVNIX0pPSU4o KHggeSkpIGRvZXNuJ3QgcmVzdHJpY3QgaG93IHggYW5kIHkgY2FuIGJlCisJICogam9pbmVkLgor CSAqCisJICogVGhpcyBsb29rdXAgc2hvdWxkbid0IHJldHVybiBQR1BBX0lUTV9ESVNKT0lOVCwg YmVjYXVzZSBhbnkgc3VjaCBhZHZpY2UKKwkgKiBzaG91bGQgbm90IGhhdmUgYmVlbiByZXR1cm5l ZCBmcm9tIHRoZSB0cm92ZSBpbiB0aGUgZmlyc3QgcGxhY2UuCisJICovCisJam9pbl9pdG0gPSBw Z3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAor CQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlBc3NlcnQoam9pbl9pdG0gIT0gUEdQQV9JVE1f RElTSk9JTlQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgfHwK KwkJam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkg KiBXZSd2ZSBhbHJlYWR5IHBlcm1pdHRlZCBhbGwgYWxsb3dhYmxlIGNhc2VzLCBzbyByZWplY3Qg dGhpcy4KKwkgKgorCSAqIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHRoZW4gdGhlIGFkdmljZSBv dmVybGFwcyB3aXRoIHRoaXMgam9pbiBidXQKKwkgKiBpc24ndCBlbnRpcmVseSBjb250YWluZWQg d2l0aGluIGVpdGhlciBzaWRlLCBhbmQgdGhlcmUncyBhbHNvIGF0IGxlYXN0CisJICogb25lIHJl bGF0aW9uIHByZXNlbnQgaW4gdGhlIGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFk dmljZS4KKwkgKgorCSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIEhBU0hfSk9JTigoeCB5KSkgZXhh bXBsZSwgd2Ugd291bGQgcmVhY2ggaGVyZSBpZiB4CisJICogd2VyZSBvbiBvbmUgc2lkZSBvZiB0 aGUgam9pbiwgeSBvbiB0aGUgb3RoZXIsIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICogdHdv IHNpZGVzIGFsc28gaW5jbHVkZWQgc29tZSBvdGhlciByZWxhdGlvbiwgc2F5IHQuIEluIHRoYXQg Y2FzZSwKKwkgKiBhY2NlcHRpbmcgdGhpcyBqb2luIHdvdWxkIGFsbG93IHRoZSAoeCB5IHQpIGpv aW5yZWwgdG8gY29udGFpbgorCSAqIG5vbi1kaXNhYmxlZCBwYXRocyB0aGF0IGRvIG5vdCBwdXQg KHggeSkgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoCisJICogam9pbjsgd2UgY291bGQgaW5z dGVhZCBlbmQgdXAgd2l0aCBzb21ldGhpbmcgbGlrZSAoeCBKT0lOIHQpIEpPSU4geS4KKwkgKi8K KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIGFkdmljZSBjb25jZXJuaW5nIGFuIG9w YXF1ZSBqb2luIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBCeSBhbiBvcGFxdWUgam9p biwgd2UgbWVhbiBvbmUgd2hlcmUgdGhlIGV4YWN0IG1lY2hhbmlzbSBieSB3aGljaCB0aGUKKyAq IGpvaW4gaXMgcGVyZm9ybWVkIGlzIG5vdCB2aXNpYmxlIHRvIFBvc3RncmVTUUwuIEN1cnJlbnRs eSB0aGlzIGlzIHRoZQorICogY2FzZSBvbmx5IGZvciBmb3JlaWduIGpvaW5zOiBGT1JFSUdOX0pP SU4oKHggeSB6KSkgbWVhbnMgdGhhdCB4LCB5LCBhbmQKKyAqIHogYXJlIGpvaW5lZCBvbiB0aGUg cmVtb3RlIHNpZGUsIGJ1dCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlIGpvaW4gb3JkZXIKKyAq IG9yIGpvaW4gbWV0aG9kcyB1c2VkIG92ZXIgdGhlcmUuCisgKi8KK3N0YXRpYyBib29sCitwZ3Bh X29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3Vu dCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVf ZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGpv aW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRj aCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRD SF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJam9pbl9pdG0gPSBw Z3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAor CQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFV QUwpCisJeworCQkvKgorCQkgKiBXZSBoYXZlIGFuIGV4YWN0IG1hdGNoLCBhbmQgc2hvdWxkIHRo ZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBhbmQKKwkJICogZW5mb3JjZSB0aGUgdXNlIG9mIHRoZSBy ZWxldmFudCBvcGFxdWUgam9pbiBtZXRob2QuCisJCSAqLworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQ QV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0dXJuIHRy dWU7CisJfQorCisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAor CQlqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJeworCQkvKgorCQkg KiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsIHRoZW4gdGhlIGpv aW4gd2UgY2FyZQorCQkgKiBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBhbmQgbm8gZnVy dGhlciByZXN0cmljdGlvbnMgYXBwbHkuCisJCSAqCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVCwgd2UncmUgc3RpbGwgYnVpbGRpbmcgdXAgdG8KKwkJICogdGhl IGpvaW4gd2UgY2FyZSBhYm91dCBhbmQgaGF2ZSBub3QgaW50cm9kdWNlZCBhbnkgZXh0cmFuZW91 cworCQkgKiByZWxhdGlvbnMgbm90IG5hbWVkIGluIHRoZSBhZHZpY2UuIE5vdGUgdGhhdCBGb3Jl aWduU2NhbiBwYXRocyBmb3IKKwkJICogam9pbnMgYXJlIGJ1aWx0IHVwIGZyb20gRm9yZWlnblNj YW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5nIGpvaW5zIGFuZAorCQkgKiBzY2Fucywgc28gd2UgbXVz dCBub3QgZGlzYWJsZSB0aGlzIGpvaW4gd2hlbiBjb25zaWRlcmluZyBhIHN1YnNldAorCQkgKiBv ZiB0aGUgcmVsYXRpb25zIHdlIHVsdGltYXRlbHkgd2FudC4KKwkJICovCisJCXJldHVybiB0cnVl OworCX0KKworCS8qCisJICogVGhlIGFkdmljZSBvdmVybGFwcyB0aGUgam9pbiwgYnV0IGF0IGxl YXN0IG9uZSByZWxhdGlvbiBpcyBwcmVzZW50IGluCisJICogdGhlIGpvaW4gdGhhdCBpc24ndCBt ZW50aW9uZWQgYnkgdGhlIGFkdmljZS4gV2Ugd2FudCB0byBkaXNhYmxlIHN1Y2gKKwkgKiBwYXRo cyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1c2ggZG93biB0aGUgam9pbiBhcyBpbnRlbmRlZC4KKwkg Ki8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBBcHBseSBzY2FuIGFkdmljZSB0byBhIFJl bE9wdEluZm8uCisgKgorICogWFhYLiBGb3IgYml0bWFwIGhlYXAgc2NhbnMsIHdlJ3JlIGp1c3Qg aWdub3JpbmcgdGhlIGluZGV4IGluZm9ybWF0aW9uIGZyb20KKyAqIHRoZSBhZHZpY2UuIFRoYXQn cyBub3QgY29vbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9zY2FuX2Fk dmljZShSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9l bnRyaWVzLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRleGVzLAorCQkJCQkJCSAgIHBn cGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsX2lu ZGV4ZXMpCit7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJQml0bWFwc2V0ICAq Z2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21h dGNoID0gTlVMTDsKKwlpbnQJCQlpID0gLTE7CisJcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRy eSA9IE5VTEw7CisJaW50CQkJZmxhZ3M7CisJYm9vbAkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gZmFs c2U7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAg KnNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJdWludDY0CQlnYXRoZXJfbWFzayA9IDA7 CisJdWludDY0CQlzY2FuX3R5cGUgPSAwOworCisJLyogU2NydXRpbml6ZSBhdmFpbGFibGUgc2Nh biBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHNjYW5faW5kZXhlcywg aSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZzY2FuX2VudHJp ZXNbaV07CisJCXVpbnQ2NAkJbXlfc2Nhbl90eXBlID0gMDsKKworCQkvKiBUcmFuc2xhdGUgb3Vy IGFkdmljZSB0YWdzIHRvIGEgc2NhbiBzdHJhdGVneSBhZHZpY2UgdmFsdWUuICovCisJCWlmICht eV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4pCisJCQlteV9zY2FuX3R5 cGUgPSBQR1NfQklUTUFQU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19JTkRFWF9PTkxZX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhPTkxZU0NBTiB8 IFBHU19DT05TSURFUl9JTkRFWE9OTFk7CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfSU5ERVhfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19JTkRFWFNDQU47CisJCWVs c2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4pCisJCQlteV9zY2FuX3R5 cGUgPSBQR1NfU0VRU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19U SURfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19USURTQ0FOOworCisJCS8qCisJCSAqIElm IHRoaXMgaXMgdW5kZXJzdGFuZGFibGUgc2NhbiBhZHZpY2UsIGhhbmcgb24gdG8gdGhlIGVudHJ5 LCB0aGUKKwkJICogaW5mZXJyZWQgc2NhbiB0eXBlIHR5cGUsIGFuZCB0aGUgaW5kZXggYXQgd2hp Y2ggd2UgZm91bmQgaXQuCisJCSAqCisJCSAqIEFsc28gbWFrZSBhIG5vdGUgaWYgd2Ugc2VlIGNv bmZsaWN0aW5nIHNjYW4gdHlwZSBhZHZpY2UuIE5vdGUgdGhhdAorCQkgKiB3ZSByZWdhcmQgdHdv IGluZGV4IHNwZWNpZmljYXRpb25zIGFzIGNvbmZsaWN0aW5nIHVubGVzcyB0aGV5IG1hdGNoCisJ CSAqIGV4YWN0bHkuIEluIHRoZW9yeSwgcGVyaGFwcyB3ZSBjb3VsZCByZWdhcmQgSU5ERVhfU0NB TihhIGMpIGFuZAorCQkgKiBJTkRFWF9TQ0FOKGEgYi5jKSBhcyBub24tY29uZmxpY3RpbmcgaWYg aXQgaGFwcGVucyB0aGF0IHRoZSBvbmx5CisJCSAqIGluZGV4IG5hbWVkIGMgaXMgaW4gc2NoZW1h IGIsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIGNvZGUuCisJCSAqLworCQlpZiAobXlf c2Nhbl90eXBlICE9IDApCisJCXsKKwkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUg IT0gbXlfc2Nhbl90eXBlKQorCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQlpZiAo IXNjYW5fdHlwZV9jb25mbGljdCAmJiBzY2FuX2VudHJ5ICE9IE5VTEwgJiYKKwkJCQlteV9lbnRy eS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQlzY2FuX2VudHJ5LT50YXJnZXQtPml0 YXJnZXQgIT0gTlVMTCAmJgorCQkJCSFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoc2Nhbl9lbnRy eS0+dGFyZ2V0LT5pdGFyZ2V0LAorCQkJCQkJCQkJCSAgbXlfZW50cnktPnRhcmdldC0+aXRhcmdl dCkpCisJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXNjYW5fZW50cnkgPSBteV9l bnRyeTsKKwkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJCXNjYW5fdHlwZV9pbmRleGVz ID0gYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX2luZGV4ZXMsIGkpOworCQl9CisJfQorCisJLyog U2NydXRpbml6ZSBhdmFpbGFibGUgZ2F0aGVyLXJlbGF0ZWQgYW5kIHBhcnRpdGlvbndpc2UgYWR2 aWNlLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVsX2luZGV4 ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmcmVsX2Vu dHJpZXNbaV07CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOworCQlib29sCQlqdXN0X29u ZV9yZWw7CisKKwkJanVzdF9vbmVfcmVsID0gbXlfZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQ QV9UQVJHRVRfSURFTlRJRklFUgorCQkJfHwgbGlzdF9sZW5ndGgobXlfZW50cnktPnRhcmdldC0+ Y2hpbGRyZW4pID09IDE7CisKKwkJLyoKKwkJICogUEFSVElUSU9OV0lTRSBiZWhhdmVzIGxpa2Ug YSBzY2FuIHR5cGUsIGV4Y2VwdCB0aGF0IGlmIHRoZXJlJ3MgbW9yZQorCQkgKiB0aGFuIG9uZSBy ZWxhdGlvbiB0YXJnZXRlZCwgaXQgaGFzIG5vIGVmZmVjdCBhdCB0aGlzIGxldmVsLgorCQkgKi8K KwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJeworCQkJ aWYgKGp1c3Rfb25lX3JlbCkKKwkJCXsKKwkJCQljb25zdCB1aW50NjQgbXlfc2Nhbl90eXBlID0g UEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQ7CisKKwkJCQlpZiAoc2Nhbl90eXBlICE9IDAg JiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CisJCQkJc2Nhbl90eXBlID0gbXlfc2Nh bl90eXBlOworCQkJCXNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9CisJCQkJCWJtc19hZGRfbWVtYmVy KHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgaSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qCisJCSAqIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFIGFwcGxpZWQgdG8gYSBzaW5nbGUgcmVs IG1lYW4gdGhhdCB3ZSBzaG91bGQKKwkJICogdXNlIHRoZSBjb3JyZXNwb25kaW5ncyBzdHJhdGVn eSBoZXJlLCB3aGlsZSBhcHBseWluZyBlaXRoZXIgdG8gbW9yZQorCQkgKiB0aGFuIG9uZSByZWwg bWVhbnMgd2Ugc2hvdWxkIG5vdCB1c2UgdGhvc2Ugc3RyYXRlZ2llcyBoZXJlLCBidXQKKwkJICog cmF0aGVyIGF0IHRoZSBsZXZlbCBvZiB0aGUgam9pbnJlbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHdo YXQgd2FzCisJCSAqIHNwZWNpZmllZC4gTk9fR0FUSEVSIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8g c2luZ2xlIHJlbHMuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBzZXR0aW5nIFBHU19DT05TSURFUl9O T05QQVJUSUFMIGluIG15X2dhdGhlcl9tYXNrIGlzCisJCSAqIGVxdWl2YWxlbnQgdG8gYWxsb3dp bmcgdGhlIG5vbi11c2Ugb2YgZWl0aGVyIGZvcm0gb2YgR2F0aGVyIGhlcmUuCisJCSAqLworCQlp ZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCW15X2VudHJ5LT50YWcg PT0gUEdQQV9UQUdfR0FUSEVSX01FUkdFKQorCQl7CisJCQlpZiAoIWp1c3Rfb25lX3JlbCkKKwkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJZWxzZSBpZiAo bXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQ R1NfR0FUSEVSOworCQkJZWxzZQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJH RTsKKwkJfQorCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX05PX0dBVEhFUikK KwkJeworCQkJQXNzZXJ0KGp1c3Rfb25lX3JlbCk7CisJCQlteV9nYXRoZXJfbWFzayA9IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dhdGhl cl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICogYWR2 aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSByZW1l bWJlcgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgorCQkg Ki8KKwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFzayAh PSAwICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25mbGlj dCA9IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGp1c3Rf b25lX3JlbCkKKwkJCQlnYXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9m dWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19h ZGRfbWVtYmVyKGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8qIEVuZm9y Y2UgY2hvaWNlIG9mIGluZGV4LiAqLworCWlmIChzY2FuX2VudHJ5ICE9IE5VTEwgJiYgIXNjYW5f dHlwZV9jb25mbGljdCAmJgorCQkoc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1ND QU4gfHwKKwkJIHNjYW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pKQor CXsKKwkJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQgPSBzY2FuX2VudHJ5LT50YXJnZXQtPml0 YXJnZXQ7CisJCUluZGV4T3B0SW5mbyAqbWF0Y2hlZF9pbmRleCA9IE5VTEw7CisKKwkJQXNzZXJ0 KGl0YXJnZXQtPml0eXBlID09IFBHUEFfSU5ERVhfTkFNRSk7CisKKwkJZm9yZWFjaF9ub2RlKElu ZGV4T3B0SW5mbywgaW5kZXgsIHJlbC0+aW5kZXhsaXN0KQorCQl7CisJCQljaGFyCSAgICpyZWxu YW1lID0gZ2V0X3JlbF9uYW1lKGluZGV4LT5pbmRleG9pZCk7CisJCQlPaWQJCQluc3BvaWQgPSBn ZXRfcmVsX25hbWVzcGFjZShpbmRleC0+aW5kZXhvaWQpOworCQkJY2hhcgkgICAqcmVsbmFtZXNw YWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcG9pZCk7CisKKwkJCWlmIChzdHJjbXAoaXRhcmdl dC0+aW5kbmFtZSwgcmVsbmFtZSkgPT0gMCAmJgorCQkJCShpdGFyZ2V0LT5pbmRuYW1lc3BhY2Ug PT0gTlVMTCB8fAorCQkJCSBzdHJjbXAoaXRhcmdldC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3Bh Y2UpID09IDApKQorCQkJeworCQkJCW1hdGNoZWRfaW5kZXggPSBpbmRleDsKKwkJCQlicmVhazsK KwkJCX0KKwkJfQorCisJCWlmIChtYXRjaGVkX2luZGV4ID09IE5VTEwpCisJCXsKKwkJCS8qIERv bid0IGZvcmNlIHRoZSBzY2FuIHR5cGUgaWYgdGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCisJ CQlzY2FuX3R5cGUgPSAwOworCisJCQkvKiBNYXJrIGFkdmljZSBhcyBpbmFwcGxpY2FibGUuICov CisJCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVz LAorCQkJCQkJCQkgUEdQQV9URV9JTkFQUExJQ0FCTEUpOworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogUmV0YWluIHRoaXMgaW5kZXggYW5kIGRpc2NhcmQgdGhlIHJlc3QuICovCisJCQlyZWwtPmlu ZGV4bGlzdCA9IGxpc3RfbWFrZTEobWF0Y2hlZF9pbmRleCk7CisJCX0KKwl9CisKKwkvKgorCSAq IE1hcmsgYWxsIHRoZSBzY2FuIG1ldGhvZCBlbnRyaWVzIGFzIGZ1bGx5IG1hdGNoZWQ7IGFuZCBp ZiB0aGV5IHNwZWNpZnkKKwkgKiBkaWZmZXJlbnQgdGhpbmdzLCBtYXJrIHRoZW0gYWxsIGFzIGNv bmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMIHwgUEdQQV9U RV9NQVRDSF9GVUxMOworCWlmIChzY2FuX3R5cGVfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFf VEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2Fu X3R5cGVfaW5kZXhlcywgZmxhZ3MpOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVz LCBzY2FuX3R5cGVfcmVsX2luZGV4ZXMsIGZsYWdzKTsKKworCS8qCisJICogTWFyayBldmVyeSBH YXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQuIE1hcmsK KwkgKiB0aGUgb25lcyB0aGF0IGluY2x1ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJnZXQgYnkg aXRzZWxmIGFzIGZ1bGx5CisJICogbWF0Y2hlZC4gSWYgdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1h cmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENI X1BBUlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05G TElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX3BhcnRp YWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90 cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisK KwkvKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBzY2FuIHNwZWNpZmljYXRpb24sIGVu Zm9yY2UgaXQuICovCisJaWYgKHNjYW5fdHlwZSAhPSAwICYmICFzY2FuX3R5cGVfY29uZmxpY3Qp CisJeworCQlyZWwtPnBnc19tYXNrICY9CisJCQl+KFBHU19TQ0FOX0FOWSB8IFBHU19BUFBFTkQg fCBQR1NfTUVSR0VfQVBQRU5EIHwKKwkJCSAgUEdTX0NPTlNJREVSX0lOREVYT05MWSk7CisJCXJl bC0+cGdzX21hc2sgfD0gc2Nhbl90eXBlOworCX0KKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNv bmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0LiAqLworCWlmIChnYXRo ZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQlyZWwtPnBnc19tYXNrICY9 CisJCQl+KFBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01FUkdFIHwgUEdTX0NPTlNJREVSX05PTlBB UlRJQUwpOworCQlyZWwtPnBnc19tYXNrIHw9IGdhdGhlcl9tYXNrOworCX0KK30KKworLyoKKyAq IEFkZCBmZWVkYmFjayBlbnRyaWVzIHRvIGZvciBvbmUgdHJvdmUgc2xpY2UgdG8gdGhlIHByb3Zp ZGVkIGxpc3QgYW5kCisgKiByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0LgorICoKKyAqIEZlZWRi YWNrIGVudHJpZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSB0cm92ZSBlbnRyeSdzIGZsYWdzLiBJ dCdzIGFzc3VtZWQKKyAqIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBzZXQgYWxsIHJlbGV2 YW50IGZsYWdzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICogUEdQQV9URV9GQUlMRUQuIFdlIHNl dCB0aGF0IGZsYWcgaGVyZSBpZiBhcHByb3ByaWF0ZS4KKyAqLworc3RhdGljIExpc3QgKgorcGdw YV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwK KwkJCQkJCQkgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSBwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlcikKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCWludAkJCW5lbnRyaWVz OworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBncGFf dHJvdmVfbG9va3VwX2FsbCh0cm92ZSwgdHlwZSwgJmVudHJpZXMsICZuZW50cmllcyk7CisJZm9y IChpbnQgaSA9IDA7IGkgPCBuZW50cmllczsgKytpKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAq ZW50cnkgPSAmZW50cmllc1tpXTsKKwkJRGVmRWxlbSAgICAqaXRlbTsKKworCQkvKgorCQkgKiBJ ZiB0aGlzIGVudHJ5IHdhcyBmdWxseSBtYXRjaGVkLCBjaGVjayB3aGV0aGVyIGdlbmVyYXRpbmcg YWR2aWNlCisJCSAqIGZyb20gdGhpcyBwbGFuIHdvdWxkIHByb2R1Y2Ugc3VjaCBhbiBlbnRyeS4g SWYgbm90LCBsYWJlbCB0aGUgZW50cnkKKwkJICogYXMgZmFpbGVkLgorCQkgKi8KKwkJaWYgKChl bnRyeS0+ZmxhZ3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDAgJiYKKwkJCSFwZ3BhX3dhbGtl cl93b3VsZF9hZHZpc2Uod2Fsa2VyLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCSAgZW50cnkt PnRhZywgZW50cnktPnRhcmdldCkpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9GQUlMRUQ7 CisKKwkJaXRlbSA9IG1ha2VEZWZFbGVtKHBncGFfY3N0cmluZ190cm92ZV9lbnRyeShlbnRyeSks CisJCQkJCQkgICAoTm9kZSAqKSBtYWtlSW50ZWdlcihlbnRyeS0+ZmxhZ3MpLCAtMSk7CisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIGl0ZW0pOworCX0KKworCXJldHVybiBsaXN0OworfQorCisjaWZk ZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBh IGtleSBjb25zaXN0aW5nIG9mIGFuIFJUSSBhbmQgcGxhbiBuYW1lLgorICovCitzdGF0aWMgdWlu dDMyCitwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpCit7 CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgm aHMsIDApOworCisJaHMuYWNjdW0gPSBrZXkucnRpOworCWZhc3RoYXNoX2NvbWJpbmUoJmhzKTsK KworCS8qIHBsYW5fbmFtZSBjYW4gYmUgTlVMTCAqLworCWlmIChrZXkucGxhbl9uYW1lID09IE5V TEwpCisJCXNwX2xlbiA9IDA7CisJZWxzZQorCQlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3Ry aW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1l bmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmlu YWwzMigmaHMsIHNwX2xlbik7Cit9CisKKyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgcmFuZ2Ug dGFibGUgaWRlbnRpZmllciBmb3Igb25lIHJlbGF0aW9uIGZvciBmdXR1cmUgY3Jvc3MtY2hlY2tp bmcuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwcywgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSBSZWxPcHRJbmZvICpyZWwpCit7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5Owor CXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwljb25zdCBj aGFyICpyaWRfc3RyaW5nOworCWJvb2wJCWZvdW5kOworCisJa2V5LnJ0aSA9IGJtc19zaW5nbGV0 b25fbWVtYmVyKHJlbC0+cmVsaWRzKTsKKwlrZXkucGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1l OworCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBrZXkucnRpLCAmcmlkKTsK KwlyaWRfc3RyaW5nID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmcmlkKTsKKwljaGVjayA9IHBn cGFfcmlfY2hlY2tfaW5zZXJ0KHBwcy0+cmlfY2hlY2tfaGFzaCwga2V5LCAmZm91bmQpOworCUFz c2VydCghZm91bmQgfHwgc3RyY21wKGNoZWNrLT5yaWRfc3RyaW5nLCByaWRfc3RyaW5nKSA9PSAw KTsKKwljaGVjay0+cmlkX3N0cmluZyA9IHJpZF9zdHJpbmc7CisjZW5kaWYKK30KKworLyoKKyAq IFZhbGlkYXRlIHRoYXQgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIHdlIHdlcmUgYWJsZSB0 byBnZW5lcmF0ZSBkdXJpbmcKKyAqIHBsYW5uaW5nIG1hdGNoIHRoZSBvbmVzIHdlIGdlbmVyYXRl ZCBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2Vy X3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnM7CisJcGdwYV9yaV9jaGVja19pdGVyYXRvciBpdDsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNo ZWNrOworCisJLyogQ3JlYXRlIGlkZW50aWZpZXJzIGZyb20gdGhlIHBsYW5uZWQgc3RhdGVtZW50 LiAqLworCXJ0X2lkZW50aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5u ZWRfc3RtdChwc3RtdCk7CisKKwkvKiBJdGVyYXRlIG92ZXIgaWRlbnRpZmllcnMgY3JlYXRlZCBk dXJpbmcgcGxhbm5pbmcsIHNvIHdlIGNhbiBjb21wYXJlLiAqLworCXBncGFfcmlfY2hlY2tfc3Rh cnRfaXRlcmF0ZShwcHMtPnJpX2NoZWNrX2hhc2gsICZpdCk7CisJd2hpbGUgKChjaGVjayA9IHBn cGFfcmlfY2hlY2tfaXRlcmF0ZShwcHMtPnJpX2NoZWNrX2hhc2gsICZpdCkpICE9IE5VTEwpCisJ eworCQlpbnQJCQlydG9mZnNldCA9IDA7CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJCUlu ZGV4CQlmbGF0X3J0aTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3Nv Y2lhdGVkIHdpdGggdGhpcyBlbnRyeSwgdGhlbiB0aGUKKwkJICogcnRvZmZzZXQgaXMgMC4gT3Ro ZXJ3aXNlLCB3ZSBjYW4gc2VhcmNoIHRoZSBTdWJQbGFuUlRJbmZvIGxpc3QgdG8KKwkJICogZmlu ZCB0aGUgcnRvZmZzZXQuCisJCSAqLworCQlpZiAoY2hlY2stPmtleS5wbGFuX25hbWUgIT0gTlVM TCkKKwkJeworCQkJZm9yZWFjaF9ub2RlKFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1 YnJ0aW5mb3MpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiBydGluZm8tPmR1bW15IGlzIHNldCwg dGhlbiB0aGUgc3VicXVlcnkncyByYW5nZSB0YWJsZQorCQkJCSAqIHdpbGwgb25seSBoYXZlIGJl ZW4gcGFydGlhbGx5IGNvcGllZCB0byB0aGUgZmluYWwgcmFuZ2UKKwkJCQkgKiB0YWJsZS4gU3Bl Y2lmaWNhbGx5LCBvbmx5IFJURV9SRUxBVElPTiBlbnRyaWVzIGFuZAorCQkJCSAqIFJURV9TVUJR VUVSWSBlbnRyaWVzIHRoYXQgd2VyZSBvbmNlIFJURV9SRUxBVElPTiBlbnRyaWVzCisJCQkJICog d2lsbCBiZSBjb3BpZWQsIGFzIHBlciBhZGRfcnRlc190b19mbGF0X3J0YWJsZS4gVGhlcmVmb3Jl LAorCQkJCSAqIHRoZXJlJ3Mgbm8gZml4ZWQgcnRvZmZzZXQgdGhhdCB3ZSBjYW4gYXBwbHkgdG8g dGhlIFJUSXMKKwkJCQkgKiB1c2VkIGR1cmluZyBwbGFubmluZyB0byBsb2NhdGUgdGhlIGNvcnJl c3BvbmRpbmcgcmVsYXRpb25zCisJCQkJICogaW4gdGhlIGZpbmFsIHJ0YWJsZS4KKwkJCQkgKgor CQkJCSAqIFdpdGggbW9yZSBjb21wbGV4IGxvZ2ljLCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0 IHByb2JsZW0KKwkJCQkgKiBieSByZW1lbWJlcmluZyB0aGUgd2hvbGUgY29udGVudHMgb2YgdGhl IHN1YnF1ZXJ5J3MgcnRhYmxlCisJCQkJICogZHVyaW5nIHBsYW5uaW5nLCBkZXRlcm1pbmluZyB3 aGljaCBvZiB0aG9zZSB3b3VsZCBoYXZlIGJlZW4KKwkJCQkgKiBjb3BpZWQgdG8gdGhlIGZpbmFs IHJ0YWJsZSwgYW5kIG1hdGNoaW5nIHRoZW0gdXAuIEJ1dCBpdAorCQkJCSAqIGRvZXNuJ3Qgc2Vl bSBsaWtlIGEgd29ydGh3aGlsZSBlbmRlYXZvciBmb3IgcmlnaHQgbm93LAorCQkJCSAqIGJlY2F1 c2UgUlRJcyBmcm9tIHN1Y2ggc3VicXVlcmllcyB3b24ndCBhcHBlYXIgaW4gdGhlIHBsYW4KKwkJ CQkgKiB0cmVlIGl0c2VsZiwganVzdCBpbiB0aGUgcmFuZ2UgdGFibGUuIEhlbmNlLCB3ZSBjYW4g bmVpdGhlcgorCQkJCSAqIGdlbmVyYXRlIG5vciBhY2NlcHQgYWR2aWNlIGZvciB0aGVtLgorCQkJ CSAqLworCQkJCWlmIChzdHJjbXAoY2hlY2stPmtleS5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9u YW1lKSA9PSAwCisJCQkJCSYmICFydGluZm8tPmR1bW15KQorCQkJCXsKKwkJCQkJcnRvZmZzZXQg PSBydGluZm8tPnJ0b2Zmc2V0OworCQkJCQlBc3NlcnQocnRvZmZzZXQgPiAwKTsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJfQorCisJCQkvKgorCQkJICogSXQncyBub3QgYW4gZXJyb3IgaWYgd2Ug ZG9uJ3QgZmluZCB0aGUgcGxhbiBuYW1lOiB0aGF0IGp1c3QKKwkJCSAqIG1lYW5zIHRoYXQgd2Ug cGxhbm5lZCBhIHN1YnBsYW4gYnkgdGhpcyBuYW1lIGJ1dCBpdCBlbmRlZCB1cAorCQkJICogYmVp bmcgYSBkdW1teSBzdWJwbGFuIGFuZCBzbyB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBs YW4KKwkJCSAqIHRyZWUuCisJCQkgKi8KKwkJCWlmIChydG9mZnNldCA9PSAwKQorCQkJCWNvbnRp bnVlOworCQl9CisKKwkJLyoKKwkJICogY2hlY2stPmtleS5ydGkgaXMgdGhlIFJUSSB0aGF0IHdl IHNhdyBwcmlvciB0byByYW5nZS10YWJsZQorCQkgKiBmbGF0dGVuaW5nLCBzbyB3ZSBtdXN0IGFk ZCB0aGUgYXBwcm9wcmlhdGUgUlQgb2Zmc2V0IHRvIGdldCB0aGUKKwkJICogZmluYWwgUlRJLgor CQkgKi8KKwkJZmxhdF9ydGkgPSBjaGVjay0+a2V5LnJ0aSArIHJ0b2Zmc2V0OworCQlBc3NlcnQo ZmxhdF9ydGkgPD0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSkpOworCisJCS8qIEFzc2VydCB0 aGF0IHRoZSBzdHJpbmcgd2UgY29tcHV0ZSBub3cgbWF0Y2hlcyB0aGUgcHJldmlvdXMgb25lLiAq LworCQlyaWRfc3RyaW5nID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNb ZmxhdF9ydGkgLSAxXSk7CisJCUFzc2VydChzdHJjbXAocmlkX3N0cmluZywgY2hlY2stPnJpZF9z dHJpbmcpID09IDApOworCX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFu bmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDBiOTEwYjAw Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu aApAQCAtMCwwICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3BsYW5u ZXIuaAorICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKworZXh0ZXJu IHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmU2ZGMxOWMyZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDI4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoK KyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJu b2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0 aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwK KwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgYm9vbCBuZWVkc19ub19nYXRo ZXIpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0 ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2NhbiBvYmpl Y3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0 IGFzIGFwcG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBzY2Fu LCBhbHNvCisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUgY29uc29s aWRhdGVkIGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgor ICoKKyAqIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlzIHBsYW4g bm9kZSwgcGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVsc2UgcGFz cyBOVUxMLgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBpZiB3ZSBh cmUgdW5kZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICog U2V0IHRoZSAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBq b2luIHByb2JsZW0gYW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdw YV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFu LAorCQkJCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0 aGVyLCBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7 CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJbmVlZHNfbm9fZ2F0aGVyID0gIWJlbmVhdGhfYW55 X2dhdGhlcjsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlm IChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlk ZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5n IGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5 IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIHRoZW4gdGhpcyBpcyBhIHBhcnRpdGlvbndpc2UgInNjYW4i IC0tCisJCSAqIHdoaWNoIG1heSByZWFsbHkgYmUgYSBwYXJ0aXRpb253aXNlIGpvaW4sIGJ1dCB0 aGVyZSdzIG5vIG5lZWQgdG8KKwkJICogZGlzdGluZ3Vpc2guCisJCSAqCisJCSAqIElmIGl0J3Mg YSB0cml2aWFsIFN1YnF1ZXJ5U2NhbiB0aGF0IHdhcyBlbGlkZWQsIHRoZW4gdGhpcyBpcyBhbgor CQkgKiAib3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJh dGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFu aW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJ CWlmIChlbGlkZWRfdHlwZSA9PSBUX0FwcGVuZCB8fCBlbGlkZWRfdHlwZSA9PSBUX01lcmdlQXBw ZW5kKQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJZWxzZQorCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBh biBlbGlkZWQgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUsIHdlIGRvbid0IG5lZWQgdG8KKwkJ ICogZW1pdCBOT19HQVRIRVIoKSBiZWNhdXNlIHdlJ2xsIGFsc28gZW1pdCBpdCBmb3IgdGhlIHVu ZGVybHlpbmcgc2NhbiwKKwkJICogd2hpY2ggaXMgZ29vZCBlbm91Z2guCisJCSAqCisJCSAqIElm IGl0J3MgYW4gZWxpZGVkIFN1YnF1ZXJ5U2NhbiwgdGhlIHNhbWUgYXJndW1lbnQgaXMgbGlrZWx5 IHRvCisJCSAqIGFwcGx5LCBiZWNhdXNlIHRoZSBzdWJxdWVyeSBwcm9iYWJseSBjb250YWlucyBy ZWZlcmVuY2VzIHRvIHRhYmxlcywKKwkJICogYW5kIGlmIGl0IGRvZXNuJ3QsIHRoZW4gcGxhbm5l ciBpc24ndCBsaWtlbHkgdG8gd2FudCB0byBkbyBpdCBpbgorCQkgKiBwYXJhbGxlbCBhbnl3YXku IEJ1dCBhbHNvLCB3ZSBjYW4ndCBpbXBsZW1lbnQgTk9fR0FUSEVSKCkgYWR2aWNlIGZvcgorCQkg KiBhIG5vbi1yZWxhdGlvbiBSVEVLaW5kLCBiZWNhdXNlIGdldF9yZWxhdGlvbl9pbmZvKCkgaXNu J3QgY2FsbGVkCisJCSAqIGluIHN1Y2ggY2FzZXMuIFRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIGZp eGVkIGF0IHNvbWUgcG9pbnQsIGJ1dAorCQkgKiB1bnRpbCB0aGVuIHdlIHNob3VsZG4ndCBlbWl0 IGl0LgorCQkgKi8KKwkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJLyogSm9pbiBSVElz IGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQly ZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10 LT5ydGFibGUpOworCX0KKwllbHNlIGlmICgocnRpID0gcGdwYV9zY2FucmVsaWQocGxhbikpICE9 IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2lu Z2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCQl7CisJCQljYXNlIFRf U2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9TRVE7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fQklUTUFQX0hF QVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4T25seVNjYW46CisJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05MWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9U aWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NB Tl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNh c2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJnZXRpbmcgYSBzaW5nbGUKKwkJCQkgKiByZWxh dGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9zc2libGUgaW4gdGhhdCBjYXNlLCBidXQKKwkJ CQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBhcmUgZGlmZmVyZW50IGluIG11bHRpLXJlbGF0 aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JE SU5BUlk7CisKKwkJCQlydGUgPSBydF9mZXRjaChydGksIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCW5lZWRzX25vX2dh dGhlciA9IGZhbHNlOworCisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAoKHJlbGlkcyA9 IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4p KQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkvKgorCQkJCSAqIElmIG11bHRp cGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBzaW5nbGUKKwkJCQkgKiBmb3Jl aWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVlbiBwdXNoZWQgdG8gdGhlCisJ CQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgcmVmbGVjdGVkIGluIHRo ZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9BcHBlbmQ6CisKKwkJCQkvKgor CQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRpdGlvbndpc2Ugc2NhbnMgb2Yg YSBhCisJCQkJICogcmVsYXRpb24sIGJ1dCB3aGVuIHRoZXkgaW1wbGVtZW50IGEgc2V0IG9wZXJh dGlvbiwgdGhleSBhcmUKKwkJCQkgKiBqdXN0IG9yZGluYXJ5IHNjYW5zLgorCQkJCSAqLworCQkJ CWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxl KQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJ VElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsK KworCQkJCS8qIE5PX0dBVEhFUigpIHNob3VsZCBiZSBlbWl0dGVkIGZvciB1bmRlcmx5aW5nIHJl bHMgb25seS4gKi8KKwkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKworCQkJCS8qIEJlIHN1 cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAqLworCQkJCWNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9z ZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCS8qIFNvbWUgbG9n aWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJCQlpZiAodW5pcXVlX25vbmpvaW5f cnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJPT0gUlRFX1JFTEFU SU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQkJCWVsc2UK KwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJCQkvKiBOT19HQVRIRVIo KSBzaG91bGQgYmUgZW1pdHRlZCBmb3IgdW5kZXJseWluZyByZWxzIG9ubHkuICovCisJCQkJbmVl ZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1 bGxlZC11cCBzY2Fucy4gKi8KKwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgo TWVyZ2VBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwkJCQli cmVhazsKKwkJfQorCisKKwkJLyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNl IG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJICog SWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9y ZGluYXRlIEFwcGVuZAorCSAqIG9yIE1lcmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNo IG9mIHRob3NlIG1lcmdlZCBwYXRocyBpcworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBm b3Igd2hpY2ggd2UgbmVlZCB0byBhY2NvdW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBz ZXQsIGNoaWxkX3JlbGlkcywgY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBz ZXQgICpjaGlsZF9ub25qb2luX3JlbGlkczsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9CisJ CQlwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCXdh bGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJCSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBs YW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAgY2hpbGRfbm9uam9pbl9yZWxpZHMsIGZhbHNlKTsKKwl9 CisKKwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBubyBhc3NvY2lhdGVkIFJUSXMsIGl0 J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBp cyBzZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBhbgorCSAqIGVycm9yLCBlbHNlIHJl dHVybiBxdWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3aXRo aW5fam9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJczog JWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJu IHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksIHJlbGlkcywgbmVlZHNfbm9f Z2F0aGVyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0IGFu ZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBncGFf c2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwg UGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFwc2V0 ICpyZWxpZHMsCisJCQkgICBib29sIG5lZWRzX25vX2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4gICpz Y2FuOworCisJLyogQ3JlYXRlIHRoZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNp emVvZihwZ3BhX3NjYW4pKTsKKwlzY2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9 IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlkcyA9IHJlbGlkczsKKworCS8qIEFkZCBpdCB0byB0aGUg YXBwcm9wcmlhdGUgbGlzdC4gKi8KKwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxh cHBlbmQod2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOwor CisJLyogQ2FsbGVyIHRlbGxzIHVzIHdoZXRoZXIgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0aGlz IHNjYW4gaXMgbmVlZGVkLiAqLworCWlmIChuZWVkc19ub19nYXRoZXIpCisJCXdhbGtlci0+bm9f Z2F0aGVyX3NjYW5zID0gYm1zX2FkZF9tZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLAor CQkJCQkJCQkJCQkJICBzY2FuLT5yZWxpZHMpOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8qCisg KiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4KKyAqLwor c3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMs IExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7 CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisKKwl3aGls ZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5n ZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRl a2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJeworCQkJ cnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJZWxzZSBp ZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRla2luZCBtaXNt YXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9CisKKwlp ZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3VuZCIpOwor CisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JiODcyNmZmMWUKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0wLDAgKzEsODUg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5oCisgKgkgIGFuYWx5c2lz IG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBGb3IgcHVycG9zZXMgb2YgdGhpcyBtb2R1 bGUsIGEgInNjYW4iIGluY2x1ZGVzICgxKSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0CisgKiBzY2Fu IG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMgYSBkZWdlbmVyYXRlIFJlc3VsdCBub2RlIHRoYXQgcmVw bGFjZXMgd2hhdAorICogd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4sIGFuZCAoMikg QXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2RlcworICogaW1wbGVtZW50aW5nIGEgcGFydGl0aW9u d2lzZSBzY2FuIG9yIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTYWlkCisgKiBkaWZmZXJlbnRseSwg c2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2YgdGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5nbGUgam9pbgor ICogcHJvYmxlbS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1ND QU5fSAorI2RlZmluZSBQR1BBX1NDQU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgi CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQ7CisKKy8qCisgKiBTY2FuIHN0cmF0ZWdpZXMuCisgKgorICogUEdQQV9TQ0FO X09SRElOQVJZIGlzIGFueSBzY2FuIHN0cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJlc3RpbmcgdG8g dXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRlY2lzaW9uIGlu dm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBvbmx5IHdheSB0byBzY2FuIGEgc3VicXVlcnkg aXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0aGUgb25seSB3YXkgdG8KKyAqIHNjYW4gYSBWQUxVRVMg Y29uc3RydWN0IGlzIGEgVmFsdWVzU2Nhbi4gV2UgbmVlZCBub3QgY2FyZSBleGFjdGx5IHdoaWNo CisgKiB0eXBlIG9mIHBsYW5uZXIgbm9kZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2VzLCBiZWNhdXNl IHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAqIGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcuCisgKgorICog UEdQQV9TQ0FOX09SRElOQVJZIGFsc28gaW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRoYXQgY29ycmVz cG9uZCB0byBzY2FucworICogb3IgZXZlbiBqb2lucyB0aGF0IGFyZSBwcm92ZWQgZW1wdHkuIFdl IGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4gd2lsbCBzdGls bCBiZSBwcm92YWJseSBlbXB0eSBhdCByZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBpdCBpcywKKyAq IHRoZW4gbm8gc2Nhbi10eXBlIGFkdmljZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdzIG5vdCwgd2Ug Y2FuJ3QgcmVjb21tZW5kCisgKiBhIHNjYW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGFu LgorICoKKyAqIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFIGFsc28gbHVtcHMgdG9nZXRoZXIgc2Nh bnMgYW5kIGpvaW5zOiB0aGlzIGNhbgorICogYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lzZSBzY2Fu IG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYSBwYXJ0aXRpb253aXNlCisgKiBqb2luIGJldHdl ZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVjaXNpb25zIGFi b3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgcGFydGl0aW9ud2lzZSBqb2luIGFyZSBtZWFu aW5nZnVsOiBubyBtYXR0ZXIgd2hhdAorICogd2UgZGVjaWRlZCB0aGlzIHRpbWUsIHdlIGNvdWxk IGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdzIHBhcnRpdGlvbndpc2UgdGhlCisgKiBuZXh0IHRpbWUu CisgKgorICogUEdQQV9TQ0FOX0ZPUkVJR04gaXMgb25seSB1c2VkIHdoZW4gdGhlcmUncyBtb3Jl IHRoYW4gb25lIHJlbGF0aW9uIGludm9sdmVkOworICogYSBzaW5nbGUtdGFibGUgZm9yZWlnbiBz Y2FuIGlzIGNsYXNzaWZpZWQgYXMgb3JkaW5hcnksIHNpbmNlIHRoZXJlIGlzIG5vCisgKiBkZWNp c2lvbiB0byBtYWtlIGluIHRoYXQgY2FzZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0cmF0ZWdpZXMg bWFwIG9uZS10by1vbmUgdG8gcGxhbiBub2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQ QV9TQ0FOX09SRElOQVJZID0gMCwKKwlQR1BBX1NDQU5fU0VRLAorCVBHUEFfU0NBTl9CSVRNQVBf SEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlHTiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJUEdQQV9TQ0FO X0lOREVYX09OTFksCisJUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJUEdQQV9TQ0FOX1RJRAor CS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVy ZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfU0NBTl9TVFJB VEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJRCArIDEpCisKKy8qCisgKiBBbGwgb2YgdGhlIGRldGFp bHMgd2UgbmVlZCByZWdhcmRpbmcgYSBzY2FuLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Nj YW4KK3sKKwlQbGFuCSAgICpwbGFuOworCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneTsKKwlC aXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfc2NhbjsKKworZXh0ZXJuIHBncGFfc2NhbiAqcGdw YV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFu LAorCQkJCQkJCQkgIEVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCQkJCQkgIGJvb2wgYmVu ZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIu bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlN2Q3YmExM2E2Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApAQCAtMCwwICsxLDI5OSBAQAor JXRvcHsKKy8qCisgKiBTY2FubmVyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAo YykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAibm9kZXMv bWlzY25vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKKworI2luY2x1ZGUgInBn cGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEV4dHJhIGRhdGEg dGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVuIGR1cmluZyBzY2FubmluZy4KKyAqCisgKiAnbGl0YnVm JyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPHhkPiBleGNsdXNpdmUgc3RhdGUsIHdoaWNoIGhh bmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfeXlfZXh0cmFfdHlwZQoreworCVN0cmluZ0luZm9EYXRhCWxpdGJ1ZjsKK30gcGdwYV95 eV9leHRyYV90eXBlOworCit9CisKKyV7CisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8KKworI2RlZmlu ZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50IHBncGFfeXlsZXgodW5pb24gWVlTVFlQRSAqeXlsdmFs X3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBcCisJCQkJCQkgIGNoYXIgKipwYXJzZV9lcnJvcl9tc2df cCwgeXlzY2FuX3QgeXlzY2FubmVyKQorCisvKiBObyByZWFzb24gdG8gY29uc3RyYWluIGFtb3Vu dCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjc3NzIxNgor CisvKiBBdm9pZCBleGl0KCkgb24gZmF0YWwgc2Nhbm5lciBlcnJvcnMgKGEgYml0IHVnbHkgLS0g c2VlIHl5X2ZhdGFsX2Vycm9yKSAqLworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnByaW50Zihm aWxlLCBmbXQsIG1zZykgIGZwcmludGZfdG9fZXJlcG9ydChmbXQsIG1zZykKKworc3RhdGljIHZv aWQKK2ZwcmludGZfdG9fZXJlcG9ydChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKm1zZykK K3sKKwllcmVwb3J0KEVSUk9SLCAoZXJybXNnX2ludGVybmFsKCIlcyIsIG1zZykpKTsKK30KKyV9 CisKKyVvcHRpb24gcmVlbnRyYW50Cislb3B0aW9uIGJpc29uLWJyaWRnZQorJW9wdGlvbiA4Yml0 Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIG5vZGVmYXVsdAorJW9wdGlvbiBu b2lucHV0Cislb3B0aW9uIG5vdW5wdXQKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24gbm95eWFs bG9jCislb3B0aW9uIG5veXlyZWFsbG9jCislb3B0aW9uIG5veXlmcmVlCislb3B0aW9uIHdhcm4K KyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5IgorJW9wdGlvbiBleHRyYS10eXBlPSJwZ3BhX3l5X2V4 dHJhX3R5cGUgKiIKKworLyoKKyAqIFdoYXQgZm9sbG93cyBpcyBhIHNldmVyZWx5IHN0cmlwcGVk LWRvd24gdmVyc2lvbiBvZiB0aGUgY29yZSBzY2FubmVyLiBXZQorICogb25seSBjYXJlIGFib3V0 IHJlY29nbml6aW5nIGlkZW50aWZpZXJzIHdpdGggb3Igd2l0aG91dCBpZGVudGlmaWVyIHF1b3Rp bmcKKyAqIChpLmUuIGRvdWJsZS1xdW90aW5nKSwgZGVjaW1hbCBpbnRlZ2VycywgYW5kIGEgc21h bGwgaGFuZGZ1bCBvZiBvdGhlcgorICogdGhpbmdzLiBLZWVwIHRoZXNlIHJ1bGVzIGluIHN5bmMg d2l0aCBzcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sLiBBcyBpbiB0aGF0CisgKiBmaWxlLCB3ZSB1 c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGMnIGZvciBDLXN0eWxlIGNvbW1lbnRzLCBh bmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hkJyBmb3IgZG91YmxlLXF1b3RlZCBp ZGVudGlmaWVycy4KKyAqLworJXggeGMKKyV4IHhkCisKK2lkZW50X3N0YXJ0CQlbQS1aYS16XDIw MC1cMzc3X10KK2lkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwzNzdfMC05XCRdCisKK2lkZW50aWZp ZXIJCXtpZGVudF9zdGFydH17aWRlbnRfY29udH0qCisKK2RlY2RpZ2l0CQlbMC05XQorZGVjaW50 ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNkaWdpdH0pKgorCitzcGFjZQkJCVsgXHRcblxyXGZcdl0K K3doaXRlc3BhY2UJCXtzcGFjZX0rCisKK2RxdW90ZQkJCVwiCit4ZHN0YXJ0CQkJe2RxdW90ZX0K K3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRvdWJsZQkJe2RxdW90ZX17ZHF1b3RlfQoreGRpbnNpZGUJ CVteIl0rCisKK3hjc3RhcnQJCQlcL1wqCit4Y3N0b3AJCQlcKitcLworeGNpbnNpZGUJCVteKi9d KworCislJQorCit7d2hpdGVzcGFjZX0JeyAvKiBpZ25vcmUgKi8gfQorCit7aWRlbnRpZmllcn0J eworCQkJCQljaGFyICAgKnN0cjsKKwkJCQkJYm9vbAlmYWlsOworCQkJCQlwZ3BhX2FkdmljZV90 YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoKKwkJCQkJICogVW5saWtlIHRoZSBjb3JlIHNjYW5uZXIs IHdlIGRvbid0IHRydW5jYXRlIGlkZW50aWZpZXJzCisJCQkJCSAqIGhlcmUuIFRoZXJlIGlzIG5v IG9idmlvdXMgcmVhc29uIHRvIGRvIHNvLgorCQkJCQkgKi8KKwkJCQkJc3RyID0gZG93bmNhc2Vf aWRlbnRpZmllcih5eXRleHQsIHl5bGVuZywgZmFsc2UsIGZhbHNlKTsKKwkJCQkJeXlsdmFsLT5z dHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJCQkJICogSWYgaXQncyBub3QgYSB0YWcsIGp1c3QgcmV0 dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0dXJuCisJCQkJCSAqIGEgdG9rZW4gdHlwZSBiYXNlZCBv biBob3cgZnVydGhlciBwYXJzaW5nIHNob3VsZAorCQkJCQkgKiBwcm9jZWVkLgorCQkJCQkgKi8K KwkJCQkJdGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKHN0ciwgJmZhaWwpOworCQkJCQlpZiAo ZmFpbCkKKwkJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BB X1RBR19KT0lOX09SREVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSk9JTl9PUkRFUjsKKwkJCQkJ ZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBH UEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0lOREVYOworCQkJ CQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKKwkJCQkJCXJldHVy biBUT0tfVEFHX0JJVE1BUDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX1NFUV9TQ0FO IHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19USURfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0g UEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfU0lNUExFOworCQkJCQll bHNlCisJCQkJCQlyZXR1cm4gVE9LX1RBR19HRU5FUklDOworCQkJCX0KKwore2RlY2ludGVnZXJ9 CXsKKwkJCQkJY2hhciAgICplbmRwdHI7CisKKwkJCQkJZXJybm8gPSAwOworCQkJCQl5eWx2YWwt PmludGVnZXIgPSBzdHJ0b2ludCh5eXRleHQsICZlbmRwdHIsIDEwKTsKKwkJCQkJaWYgKCplbmRw dHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0UpCisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0 LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJpbnRlZ2VyIG91dCBv ZiByYW5nZSIpOworCQkJCQlyZXR1cm4gVE9LX0lOVEVHRVI7CisJCQkJfQorCit7eGNzdGFydH0J CXsKKwkJCQkJQkVHSU4oeGMpOworCQkJCX0KKwore3hkc3RhcnR9CQl7CisJCQkJCUJFR0lOKHhk KTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYpOworCQkJCX0KKworInx8 IgkJCXsgcmV0dXJuIFRPS19PUjsgfQorCisiJiYiCQkJeyByZXR1cm4gVE9LX0FORDsgfQorCisu CQkJCXsgcmV0dXJuIHl5dGV4dFswXTsgfQorCis8eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJTihJ TklUSUFMKTsKKwkJCQl9CisKKzx4Yz57eGNpbnNpZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBtdWx0 aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQgc2xhc2ggb3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisKKzx4 Yz4uCQkJeworCQkJCQkvKgorCQkJCQkgKiBEaXNjYXJkIGFueSBzaW5nbGUgY2hhcmFjdGVyLiBm bGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJCSAqIG1hdGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxsIG5l dmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNvdWxkCisJCQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0b3Au CisJCQkJCSAqCisJCQkJCSAqIE5COiBBdCBwcmVzZW50LCB3ZSBkb24ndCBib3RoZXIgdG8gc3Vw cG9ydCBuZXN0ZWQKKwkJCQkJICogQy1zdHlsZSBjb21tZW50cyBoZXJlLCBidXQgdGhpcyBsb2dp YyBjb3VsZCBiZSBleHRlbmRlZAorCQkJCQkgKiBpZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2VzIGEg cHJvYmxlbS4KKwkJCQkJICovCisJCQkJfQorCis8eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJ TklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5 c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgY29tbWVudCIpOworCQkJCX0KKworPHhk Pnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXl5bHZhbC0+c3RyID0gcHN0 cmR1cCh5eWV4dHJhLT5saXRidWYuZGF0YSk7CisJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJ fQorCis8eGQ+e3hkZG91YmxlfQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZ5eWV4dHJh LT5saXRidWYsICciJyk7CisJCQkJfQorCis8eGQ+e3hkaW5zaWRlfQl7CisJCQkJCWFwcGVuZEJp bmFyeVN0cmluZ0luZm8oJnl5ZXh0cmEtPmxpdGJ1ZiwgeXl0ZXh0LCB5eWxlbmcpOworCQkJCX0K KworPHhkPjw8RU9GPj4JCXsKKwkJCQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJv cihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJt aW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIik7CisJCQkJfQorCislJQorCisvKiBMQ09WX0VYQ0xf U1RPUCAqLworCisvKgorICogSGFuZGxlciBmb3IgZXJyb3JzIHdoaWxlIHNjYW5uaW5nIG9yIHBh cnNpbmcgYWR2aWNlLgorICoKKyAqIGJpc29uIHBhc3NlcyB0aGUgZXJyb3IgbWVzc2FnZSB0byB1 cyB2aWEgJ21lc3NhZ2UnLCBhbmQgdGhlIGNvbnRleHQgaXMKKyAqIGF2YWlsYWJsZSB2aWEgdGhl ICd5eXRleHQnIG1hY3JvLiBXZSBhc3NlbWJsZSB0aG9zZSB2YWx1ZXMgaW50byBhIGZpbmFsCisg KiBlcnJvciB0ZXh0IGFuZCB0aGVuIGFycmFuZ2UgdG8gcGFzcyBpdCBiYWNrIHRvIHRoZSBjYWxs ZXIgb2YgcGdwYV95eXBhcnNlKCkKKyAqIGJ5IHN0b3JpbmcgaXQgaW50byAqcGFyc2VfZXJyb3Jf bXNnX3AuCisgKi8KK3ZvaWQKK3BncGFfeXllcnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFy c2VfZXJyb3JfbXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lciwKKwkJCSBjb25zdCBjaGFyICptZXNz YWdlKQoreworCXN0cnVjdCB5eWd1dHNfdCAqeXlnID0gKHN0cnVjdCB5eWd1dHNfdCAqKSB5eXNj YW5uZXI7CS8qIG5lZWRlZCBmb3IgeXl0ZXh0CisJCQkJCQkJCQkJCQkJCQkgKiBtYWNybyAqLwor CisKKwkvKiByZXBvcnQgb25seSB0aGUgZmlyc3QgZXJyb3IgaW4gYSBwYXJzZSBvcGVyYXRpb24g Ki8KKwlpZiAoKnBhcnNlX2Vycm9yX21zZ19wKQorCQlyZXR1cm47CisKKwlpZiAoeXl0ZXh0WzBd KQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgb3IgbmVhciBcIiVzXCIi LCBtZXNzYWdlLCB5eXRleHQpOworCWVsc2UKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmlu dGYoIiVzIGF0IGVuZCBvZiBpbnB1dCIsIG1lc3NhZ2UpOworfQorCisvKgorICogSW5pdGlhbGl6 ZSB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9y ZSBwYXJzaW5nIGJlZ2lucy4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hh ciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVycCkKK3sKKwl5eXNjYW5fdAl5eXNjYW5uZXI7CisJ cGdwYV95eV9leHRyYV90eXBlCSp5eWV4dCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfeXlfZXh0cmFf dHlwZSk7CisKKwlpZiAoeXlsZXhfaW5pdCh5eXNjYW5uZXJwKSAhPSAwKQorCQllbG9nKEVSUk9S LCAieXlsZXhfaW5pdCgpIGZhaWxlZDogJW0iKTsKKworCXl5c2Nhbm5lciA9ICp5eXNjYW5uZXJw OworCisJaW5pdFN0cmluZ0luZm8oJnl5ZXh0LT5saXRidWYpOworCXBncGFfeXlzZXRfZXh0cmEo eXlleHQsIHl5c2Nhbm5lcik7CisKKwl5eV9zY2FuX3N0cmluZyhzdHIsIHl5c2Nhbm5lcik7Cit9 CisKKworLyoKKyAqIFNodXQgZG93biB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBz aG91bGQgYmUgY2FsbGVkIGFmdGVyIHBhcnNpbmcgaXMgY29tcGxldGUuCisgKi8KK3ZvaWQKK3Bn cGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5bGV4X2Rlc3Ryb3ko eXlzY2FubmVyKTsKK30KKworLyoKKyAqIEludGVyZmFjZSBmdW5jdGlvbnMgdG8gbWFrZSBmbGV4 IHVzZSBwYWxsb2MoKSBpbnN0ZWFkIG9mIG1hbGxvYygpLgorICogSXQnZCBiZSBiZXR0ZXIgdG8g bWFrZSB0aGVzZSBzdGF0aWMsIGJ1dCBmbGV4IGluc2lzdHMgb3RoZXJ3aXNlLgorICovCisKK3Zv aWQgKgoreXlhbGxvYyh5eV9zaXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJl dHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgKgoreXlyZWFsbG9jKHZvaWQgKnB0ciwgeXlf c2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlyZXR1cm4g cmVwYWxsb2MocHRyLCBzaXplKTsKKwllbHNlCisJCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisK K3ZvaWQKK3l5ZnJlZSh2b2lkICpwdHIsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRy KQorCQlwZnJlZShwdHIpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3Ryb3ZlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTkyMTIxZmViMWQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpAQCAtMCwwICsxLDQ5 MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV90cm92ZS5jCisgKgkgIEFsbCBv ZiB0aGUgYWR2aWNlIGdpdmVuIGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkK KyAqICAgIG9yZ2FuaXplZCBmb3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgorICogVGhpcyBuYW1l IGNvbWVzIGZyb20gdGhlIEVuZ2xpc2ggZXhwcmVzc2lvbiAidHJvdmUgb2YgYWR2aWNlIiwgd2hp Y2gKKyAqIG1lYW5zIGEgY29sbGVjdGlvbiBvZiB3aXNkb20uIFRoaXMgc2xpZ2h0bHkgdW51c3Vh bCB0ZXJtIGlzIGNob3NlbiB0bworICogYXZvaWQgbmFtaW5nIGNvbmZ1c2lvbjsgZm9yIGV4YW1w bGUsICJjb2xsZWN0aW9uIG9mIGFkdmljZSIgd291bGQKKyAqIGludml0ZSBjb25mdXNpb24gd2l0 aCBwZ3BhX2NvbGxlY3Rvci5jLiBOb3RlIHRoYXQsIHdoaWxlIHdlIGRvbid0IGtub3cKKyAqIHdo ZXRoZXIgdGhlIHByb3ZpZGVkIGFkdmljZSBpcyBhY3R1YWxseSB3aXNlLCBpdCdzIG5vdCBvdXIg am9iIHRvCisgKiBxdWVzdGlvbiB0aGUgdXNlcidzIGNob2ljZXMuCisgKgorICogVGhlIGdvYWwg b2YgdGhpcyBtb2R1bGUgaXMgdG8gbWFrZSBpdCBlYXN5IHRvIGxvY2F0ZSB0aGUgc3BlY2lmaWMK KyAqIGJpdHMgb2YgYWR2aWNlIHRoYXQgcGVydGFpbiB0byBhbnkgZ2l2ZW4gcGFydCBvZiBhIHF1 ZXJ5LCBvciB0bworICogZGV0ZXJtaW5lIHRoYXQgdGhlcmUgYXJlIG5vbmUuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBn cGFfdHJvdmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKworLyoK KyAqIEFuIGFkdmljZSB0cm92ZSBpcyBvcmdhbml6ZWQgaW50byBhIHNlcmllcyBvZiAic2xpY2Vz IiwgZWFjaCBvZiB3aGljaAorICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgb25lIHRvcGlj IGUuZy4gc2NhbiBtZXRob2RzLiBFYWNoIHNsaWNlIGNvbnNpc3RzCisgKiBvZiBhbiBhcnJheSBv ZiB0cm92ZSBlbnRyaWVzIHBsdXMgYSBoYXNoIHRhYmxlIHRoYXQgd2UgY2FuIHVzZSB0byBkZXRl cm1pbmUKKyAqIHdoaWNoIG9uZXMgYXJlIHJlbGV2YW50IHRvIGEgcGFydGljdWxhciBwYXJ0IG9m IHRoZSBxdWVyeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9zbGljZQoreworCXVu c2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7CisJcGdwYV90cm92ZV9lbnRyeSAq ZW50cmllczsKKwlzdHJ1Y3QgcGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoOworfSBwZ3BhX3Ry b3ZlX3NsaWNlOworCisvKgorICogU2NhbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ3NjYW4nOyBq b2luIGFkdmljZSBpcyBzdG9yZWQgaW50byAnam9pbic7IGFuZAorICogYWR2aWNlIHRoYXQgY2Fu IGFwcGx5IHRvIGJvdGggY2FzZXMgaXMgc3RvcmVkIGludG8gJ3JlbCcuIFRoaXMgbGV0cyBjYWxs ZXJzCisgKiBhc2sganVzdCBmb3Igd2hhdCdzIHJlbGV2YW50LiBUaGVzZSBzbGljZXMgY29ycmVz cG9uZCB0byB0aGUgcG9zc2libGUgdmFsdWVzCisgKiBvZiBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl LgorICovCitzdHJ1Y3QgcGdwYV90cm92ZQoreworCXBncGFfdHJvdmVfc2xpY2Ugam9pbjsKKwlw Z3BhX3Ryb3ZlX3NsaWNlIHJlbDsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHNjYW47Cit9OworCisvKgor ICogV2UncmUgZ29pbmcgdG8gYnVpbGQgYSBoYXNoIHRhYmxlIHRvIGFsbG93IGNsaWVudHMgb2Yg dGhpcyBtb2R1bGUgdG8gZmluZAorICogcmVsZXZhbnQgYWR2aWNlIGZvciBhIGdpdmVuIHBhcnQg b2YgdGhlIHF1ZXJ5IHF1aWNrbHkuIEhvd2V2ZXIsIHdlJ3JlIGdvaW5nCisgKiB0byB1c2Ugb25s eSB0aHJlZSBvZiB0aGUgZml2ZSBrZXkgZmllbGRzIGFzIGhhc2gga2V5cy4gVGhlcmUgYXJlIHR3 byByZWFzb25zCisgKiBmb3IgdGhpcy4KKyAqCisgKiBGaXJzdCwgaXQncyBhbGxvd2FibGUgdG8g c2V0IHBhcnRpdGlvbl9zY2hlbWEgdG8gTlVMTCB0byBtYXRjaCBhIHBhcnRpdGlvbgorICogd2l0 aCB0aGUgY29ycmVjdCBuYW1lIGluIGFueSBzY2hlbWEuCisgKgorICogU2Vjb25kLCB3ZSBleHBl Y3QgdGhlICJvY2N1cnJlbmNlIiBhbmQgInBhcnRpdGlvbl9zY2hlbWEiIHBvcnRpb25zIG9mIHRo ZQorICogcmVsYXRpb24gaWRlbnRpZmllcnMgdG8gYmUgbW9zdGx5IHVuaW50ZXJlc3RpbmcuIE1v c3Qgb2YgdGhlIHRpbWUsIHRoZQorICogb2NjdXJyZW5jZSBmaWVsZCB3aWxsIGJlIDEgYW5kIHRo ZSBwYXJ0aXRpb25fc2NoZW1hIHZhbHVlcyB3aWxsIGFsbCBiZSB0aGUKKyAqIHNhbWUuIEV2ZW4g d2hlbiB0aGVyZSBpcyBzb21lIHZhcmlhdGlvbiwgdGhlIGFic29sdXRlIG51bWJlciBvZiBlbnRy aWVzCisgKiB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWVzIGZvciBhbGwgdGhyZWUgb2YgdGhlc2Ug a2V5IGZpZWxkcyBzaG91bGQgYmUKKyAqIHF1aXRlIHNtYWxsLgorICovCit0eXBlZGVmIHN0cnVj dAoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7CisJY29uc3QgY2hhciAqcGFydGl0aW9uX25h bWU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2tleTsKKwor dHlwZWRlZiBzdHJ1Y3QKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJaW50CQkJc3Rh dHVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBncGFfdHJvdmVfZW50cnlfZWxlbWVudDsK Kworc3RhdGljIHVpbnQzMiBwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50 cnlfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV90cm92ZV9lbnRyeV9jb21w YXJlX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBhLCBwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBiKQor eworCWlmIChzdHJjbXAoYS5hbGlhc19uYW1lLCBiLmFsaWFzX25hbWUpICE9IDApCisJCXJldHVy biBmYWxzZTsKKworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwoYS5wYXJ0aXRpb25f bmFtZSwgYi5wYXJ0aXRpb25fbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3RyaW5n c19lcXVhbF9vcl9ib3RoX251bGwoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSkKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV90 cm92ZV9lbnRyeQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfdHJvdmVfZW50cnlfZWxl bWVudAorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfdHJvdmVfZW50cnlfa2V5CisjZGVmaW5l IFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV90cm92ZV9l bnRyeV9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3Ryb3Zl X2VudHJ5X2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGlu ZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9z aW1wbGVoYXNoLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ry b3ZlX3NsaWNlICp0c2xpY2UpOworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9fc2xpY2Uo cGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUg dGFnLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIHZvaWQg cGdwYV90cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsCisJCQkJ CQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkgICBpbnQgaW5kZXgp Oworc3RhdGljIEJpdG1hcHNldCAqcGdwYV90cm92ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9z bGljZSAqdHNsaWNlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisvKgor ICogQnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZnJvbSBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zLgor ICoKKyAqIENhbGxlciBjYW4gb2J0YWluIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMgdG8gcGFzcyB0 byB0aGlzIGZ1bmN0aW9uIGJ5CisgKiBjYWxsaW5nIHBncGFfcGFyc2UoKS4KKyAqLworcGdwYV90 cm92ZSAqCitwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcykKK3sKKwlwZ3BhX3Ry b3ZlICp0cm92ZSA9IHBhbGxvY19vYmplY3QocGdwYV90cm92ZSk7CisKKwlwZ3BhX2luaXRfdHJv dmVfc2xpY2UoJnRyb3ZlLT5qb2luKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5y ZWwpOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnNjYW4pOworCisJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfaXRlbSwgaXRlbSwgYWR2aWNlX2l0ZW1zKQorCXsKKwkJc3dpdGNoIChp dGVtLT50YWcpCisJCXsKKwkJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCQl7CisJCQkJ CXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCisJCQkJCS8qCisJCQkJCSAqIEZvciBtb3N0 IGFkdmljZSB0eXBlcywgZWFjaCBlbGVtZW50IGluIHRoZSB0b3AtbGV2ZWwKKwkJCQkJICogbGlz dCBpcyBhIHNlcGFyYXRlIHRhcmdldCwgYnV0IGl0J3MgbW9zdCBjb252ZW5pZW50IHRvCisJCQkJ CSAqIHJlZ2FyZCB0aGUgZW50aXJldHkgb2YgYSBKT0lOX09SREVSIHNwZWNpZmljYXRpb24gYXMg YQorCQkJCQkgKiBzaW5nbGUgdGFyZ2V0LiBTaW5jZSBpdCB3YXNuJ3QgcmVwcmVzZW50ZWQgdGhh dCB3YXkKKwkJCQkJICogZHVyaW5nIHBhcnNpbmcsIGJ1aWxkIGEgc3Vycm9nYXRlIG9iamVjdCBu b3cuCisJCQkJCSAqLworCQkJCQl0YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90 YXJnZXQpOworCQkJCQl0YXJnZXQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOwor CQkJCQl0YXJnZXQtPmNoaWxkcmVuID0gaXRlbS0+dGFyZ2V0czsKKworCQkJCQlwZ3BhX3Ryb3Zl X2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0 KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB TjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19J TkRFWF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdf VElEX1NDQU46CisKKwkJCQkvKgorCQkJCSAqIFNjYW4gYWR2aWNlLgorCQkJCSAqLworCQkJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogRm9yIG5vdywgYWxsIG9mIG91ciBzY2FuIHR5cGVzIHRhcmdl dCBzaW5nbGUgcmVsYXRpb25zLAorCQkJCQkgKiBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzIG1pZ2h0 IG5vdCBiZSB0cnVlLCBlLmcuIGEgY3VzdG9tCisJCQkJCSAqIHNjYW4gY291bGQgcmVwbGFjZSBh IGpvaW4uCisJCQkJCSAqLworCQkJCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdF VF9JREVOVElGSUVSKTsKKwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5zY2Fu LAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lO OgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BB X1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRF UklBTElaRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCWNhc2Ug UEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05P Tl9VTklRVUU6CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKworCQkJCS8qCisJ CQkJICogSm9pbiBzdHJhdGVneSBhZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdw YV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3Bh X3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywg dGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9O V0lTRToKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVJf TUVSR0U6CisJCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKworCQkJCS8qCisJCQkJICogQWR2 aWNlIGFib3V0IGEgUmVsT3B0SW5mbyByZWxldmFudCB0byBib3RoIHNjYW5zIGFuZCBqb2lucy4K KwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRl bS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+ cmVsLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOwor CQl9CisJfQorCisJcmV0dXJuIHRyb3ZlOworfQorCisvKgorICogU2VhcmNoIGEgdHJvdmUgb2Yg YWR2aWNlIGZvciByZWxldmFudCBlbnRyaWVzLgorICoKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBp bnB1dCBwYXJhbWV0ZXJzIGV4Y2VwdCBmb3IgKnJlc3VsdCwgd2hpY2ggaXMgYW4gb3V0cHV0Cisg KiBwYXJhbWV0ZXIgdXNlZCB0byByZXR1cm4gcmVzdWx0cyB0byB0aGUgY2FsbGVyLgorICovCit2 b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29r dXBfdHlwZSB0eXBlLAorCQkJCSAgaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsIHBn cGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNlOwor CUJpdG1hcHNldCAgKmluZGV4ZXM7CisKKwlBc3NlcnQobnJpZHMgPiAwKTsKKworCWlmICh0eXBl ID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwll bHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92 ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+cmVsOworCisJaW5kZXhlcyA9IHBn cGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNbMF0pOworCWZvciAoaW50IGkgPSAx OyBpIDwgbnJpZHM7ICsraSkKKwl7CisJCUJpdG1hcHNldCAgKm90aGVyX2luZGV4ZXM7CisKKwkJ LyoKKwkJICogSWYgdGhlIGNhbGxlciBpcyBhc2tpbmcgYWJvdXQgdHdvIHJlbGF0aW9ucyB0aGF0 IGFyZW4ndCBwYXJ0IG9mIHRoZQorCQkgKiBzYW1lIHN1YnF1ZXJ5LCB0aGV5J3ZlIG1lc3NlZCB1 cC4KKwkJICovCisJCUFzc2VydChzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWRzWzBdLnBs YW5fbmFtZSwKKwkJCQkJCQkJCQkgIHJpZHNbaV0ucGxhbl9uYW1lKSk7CisKKwkJb3RoZXJfaW5k ZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNbaV0pOworCQlpbmRl eGVzID0gYm1zX3VuaW9uKGluZGV4ZXMsIG90aGVyX2luZGV4ZXMpOworCX0KKworCXJlc3VsdC0+ ZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwlyZXN1bHQtPmluZGV4ZXMgPSBpbmRleGVzOwor fQorCisvKgorICogUmV0dXJuIGFsbCBlbnRyaWVzIGluIGEgdHJvdmUgc2xpY2UgdG8gdGhlIGNh bGxlci4KKyAqCisgKiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgaW5wdXQgYXJndW1lbnRz LCBhbmQgdGhlIHJlbWFpbmRlciBhcmUgb3V0cHV0CisgKiBhcmd1bWVudHMuCisgKi8KK3ZvaWQK K3BncGFfdHJvdmVfbG9va3VwX2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29r dXBfdHlwZSB0eXBlLAorCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLCBpbnQgKm5l bnRyaWVzKQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsKKworCWlmICh0eXBlID09IFBH UEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlm ICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9p bjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+cmVsOworCisJKmVudHJpZXMgPSB0c2xpY2Ut PmVudHJpZXM7CisJKm5lbnRyaWVzID0gdHNsaWNlLT5udXNlZDsKK30KKworLyoKKyAqIENvbnZl cnQgYSB0cm92ZSBlbnRyeSB0byBhbiBpdGVtIG9mIHBsYW4gYWR2aWNlIHRoYXQgd291bGQgcHJv ZHVjZSBpdC4KKyAqLworY2hhciAqCitwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92 ZV9lbnRyeSAqZW50cnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMiLCBwZ3BhX2NzdHJpbmdfYWR2 aWNlX3RhZyhlbnRyeS0+dGFnKSk7CisKKwkvKiBKT0lOX09SREVSIHRhZ3MgYXJlIHRyYW5zZm9y bWVkIGJ5IHBncGFfYnVpbGRfdHJvdmU7IHVuZG8gdGhhdCBoZXJlICovCisJaWYgKGVudHJ5LT50 YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JygnKTsKKwllbHNlCisJCUFzc2VydChlbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdF VF9PUkRFUkVEX0xJU1QpOworCisJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldCgmYnVmLCBlbnRy eS0+dGFyZ2V0KTsKKworCWlmIChlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnICcpOworCQlwZ3BhX2Zvcm1hdF9pbmRleF90 YXJnZXQoJmJ1ZiwgZW50cnktPnRhcmdldC0+aXRhcmdldCk7CisJfQorCisJaWYgKGVudHJ5LT50 YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyknKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKKyAqIFNldCBQR1BBX1RFXyogZmxh Z3Mgb24gYSBzZXQgb2YgdHJvdmUgZW50cmllcy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9zZXRf ZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywgQml0bWFwc2V0ICppbmRleGVzLCBpbnQg ZmxhZ3MpCit7CisJaW50CQkJaSA9IC0xOworCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KGluZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmZW50 cmllc1tpXTsKKworCQllbnRyeS0+ZmxhZ3MgfD0gZmxhZ3M7CisJfQorfQorCisvKgorICogQWRk IGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgcGdwYV90cm92ZV9zbGljZSBvYmpl Y3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3Zl X3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQlw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeTsK KworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFsbG9jYXRlZCkKKwl7CisJCWludAkJ CW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9IHRzbGljZS0+bmFsbG9jYXRlZCAq IDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2FycmF5KHRzbGljZS0+ZW50cmllcywg cGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2FsbG9jYXRlZCk7CisJCXRzbGljZS0+ bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJZW50cnkgPSAmdHNsaWNlLT5lbnRy aWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0YWc7CisJZW50cnktPnRhcmdldCA9 IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdwYV90cm92ZV9hZGRfdG9faGFzaCh0 c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7CisKKwl0c2xpY2UtPm51c2VkKys7 Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUgZm9yIGEgbmV3bHktYWRkZWQgYWR2 aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdw YV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJ CQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ry b3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBGb3Igbm9u LWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0 YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0 cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJ eworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBjaGlsZF90YXJnZXQsIGluZGV4KTsK KwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwlBc3NlcnQodGFy Z2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0YXJnZXQtPnJpZC5hbGlhc19uYW1l ICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0aGlzIHJlbGF0aW9uIGlkZW50aWZp ZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJpZC5hbGlhc19uYW1lOworCWtleS5w YXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7CisJa2V5LnBsYW5fbmFtZSA9IHRh cmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdwYV90cm92ZV9lbnRyeV9pbnNlcnQo aGFzaCwga2V5LCAmZm91bmQpOworCWVsZW1lbnQtPmluZGV4ZXMgPSBibXNfYWRkX21lbWJlcihl bGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRpYWxp emUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKQoreworCS8qCisJICog SW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNlLT5uYWxsb2NhdGVkIGJpZyBlbm91 Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJsZSB3aWxsIGJlIGxhcmdlIGVub3Vn aCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZpY2UgaXRlbXMgaW4gdGhpcyB0cm92 ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKwkgKiBnb29kIGZv ciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJvdmVfc2xpY2UoKSBoYXMgdG8gemVy byBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIHRzbGljZS0+bmFsbG9j YXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRpbmcgdmFsdWUgcXVpdGUgc21hbGws IG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3aWxsCisJICogb2Z0ZW4gYmUgcmVs YXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxvY2F0ZWQgPSAxNjsKKwl0c2xpY2Ut Pm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxsb2NfYXJyYXkocGdwYV90cm92ZV9l bnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2UtPmhhc2ggPSBwZ3BhX3Ryb3ZlX2Vu dHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICB0c2xpY2UtPm5h bGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtl eSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlvbl9uYW1lLAorICogYW5kIHBsYW5f bmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3Bh X3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3Bf bGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJLyogYWxpYXNfbmFtZSBtYXkgbm90 IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LmFs aWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5kIHBsYW5fbmFtZSwgaG93ZXZlciwg Y2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9uYW1lICE9IE5VTEwpCisJCXNwX2xl biArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBhcnRpdGlvbl9uYW1lKTsKKwlp ZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0 cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkgKiBoYXNoZm5fdW5zdGFibGUuaCBy ZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsuIEl0J3Mgbm90CisJICogY2xl YXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RyaW5ncywgc28gZm9y IG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBvZiBhbGwgb2YgdGhlIGxlbmd0aHMu CisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisvKgor ICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitw Z3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsIHBncGFfaWRl bnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3Zl X2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKwor CUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlrZXkuYWxpYXNfbmFtZSA9IHJpZC0+ YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSByaWQtPnBhcnRyZWw7CisJa2V5LnBs YW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlf bG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChlbGVtZW50ICE9IE5VTEwpCisJewor CQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGVsZW1lbnQt PmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZ0 c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoYXQgdGhpcyB0YXJn ZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVzIHRoZQorCQkJICogaWRlbnRpZmll ciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0IHdlIGRvbid0IGtub3cKKwkJCSAq IHdoaWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2NjdXJlbmNlIGFuZCBzY2hlbWEgYWxz bworCQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190 YXJnZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihy ZXN1bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3 OWMzZjc1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3Ryb3ZlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBn cGFfdHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFy IHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNj ZXNzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ry b3ZlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1RST1ZFX0gK KyNkZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVk ZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmUgcGdwYV90 cm92ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNldCBvbiBhIHBncGFfdHJvdmVfZW50 cnkgdG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisgKiB0cnlpbmcgdG8gcGxhbiB1c2lu ZyBhZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJUSUFMIG1lYW5zIHRoYXQgd2UgZm91 bmQgc29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0CisgKiBsZWFzdCBwYXJ0aWFsbHkgbWF0 Y2hlZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZAor ICogYmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVsIGluY2x1ZGluZyBlaXRoZXIgImEi IG9yICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBh biBleGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgorICogZ2l2ZW4gSk9JTl9PUkRFUihh IGIpLCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBqb2lucmVsIGNvbnRhaW5pbmcKKyAq IGV4YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxzZS4KKyAqCisgKiBQR1BBX1RFX0lO QVBQTElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9lc24ndCBwcm9wZXJseSBhcHBseSB0 byB0aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZvbyBiYXJfaWR4KSB3b3VsZCBiZSBz byBtYXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhpc3Qgb24gZm9vLiBUaGUgZmFjdCB0 aGF0IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlCisgKiBhZHZp Y2UgaGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NPTkZMSUNUSU5HIG1lYW5zIHRoYXQg YSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0IHRoaXMKKyAqIGFkdmljZSB3YW50 cyBhbmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdhbnRzOyBlLmcuIEpPSU5fT1JERVIo YSBiKQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pPSU4oYSksIGJlY2F1c2UgdGhlIGZv cm1lciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRlciB0YWJsZSB3aGlsZSB0aGUgbGF0 dGVyIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJsZS4KKyAqCisgKiBQR1BBX1RFX0ZB SUxFRCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBkaWQgbm90IGNvbmZvcm0gdG8gdGhl IGFkdmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENIX1BBUlRJQUwJCTB4MDAwMQorI2Rl ZmluZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNkZWZpbmUgUEdQQV9URV9JTkFQUExJ Q0FCTEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZMSUNUSU5HCQkJMHgwMDA4CisjZGVm aW5lIFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgorICogRWFjaCBlbnRyeSBpbiBhIHRy b3ZlIG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNhdGlvbiBvZiBhIHRhZyB0bworICog YSBzaW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7 CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 OworCWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5OworCisvKgorICogV2hhdCBraW5k IG9mIGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50IHRvIGZpbmQgaW4gYSB0cm92ZT8K KyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIHNj YW4gYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gbWVhbnMgd2UncmUgbG9v a2luZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRoaXMgaW5jbHVkZXMgam9pbiBvcmRl ciBhZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNlbWlqb2luLXVuaXF1ZW5lc3MKKyAq IGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwgbWVhbnMgd2UncmUgbG9va2lu ZyBmb3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICogYSBSZWxPcHRJbmZvIHRoYXQgbWF5 IGNvcnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpvaW4uIFRoaXMgaW5jbHVkZXMKKyAq IGdhdGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuIE5vdGUgdGhh dCBwYXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2VlbSBsaWtlIGpvaW4gYWR2aWNlLCBi dXQgdGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdpbmcKKyAqIHRoZSBtYXR0ZXIgYmVj YXVzZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxzbyByZWxldmFudCBhdCB0aGUgc2Nh bgorICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBqb2luIGFkdmljZSBhZmZlY3Qgb25s eSB3aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1cF9ob29rLCBidXQgcGFydGl0aW9u d2lzZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisgKiBqb2lucmVsX3NldHVwX2hvb2su CisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCit7CisJUEdQQV9UUk9W RV9MT09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJUEdQQV9UUk9WRV9MT09L VVBfU0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOworCisvKgorICogVGhpcyBzdHJ1Y3Qg aXMgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJvdmUgbG9va3VwLiBGb3IgZWFjaCBt ZW1iZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0IHRoZSBjb3JyZXNwb25kaW5nIG9m ZnNldCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2YgdGhlIHJlc3VsdHMuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50 cmllczsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX3Jlc3VsdDsKKworZXh0 ZXJuIHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKTsKK2V4 dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSAg cGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSAgaW50IG5yaWRzLAorCQkJCQkJ CSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9yZXN1bHQgKnJl c3VsdCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJv dmUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkgIGludCAqbmVudHJpZXMpOworZXh0 ZXJuIGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy eSk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyaWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGVkMjIyOTEwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAsMCArMSw4OTAgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fsa2VyLmMKKyAqCSAgUGxhbiB0cmVlIGl0ZXJhdGlv bgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtl ci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVk ZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworc3RhdGljIHZvaWQgcGdwYV93YWxrX3JlY3Vyc2l2 ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJ CQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fdW5yb2xs ZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBCaXRtYXBzZXQg KnBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJCQkJCQkgcGdwYV91bnJvbGxlZF9qb2luICp1am9pbik7CisKK3N0YXRpYyBw Z3BhX3F1ZXJ5X2ZlYXR1cmUgKnBncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCXBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCQlQ bGFuICpwbGFuKTsKKworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9x dWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aXMo TGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMg dm9pZCBwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQ bGFuICpwbGFuLAorCQkJCQkJCQkgIExpc3QgKnJ0YWJsZSk7CisKK3N0YXRpYyBib29sIHBncGFf d2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJ CQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCwKKwkJCQkJCQkJCQkgICBib29sIHRvcGxldmVsKTsKK3N0YXRpYyBib29sIHBncGFfd2Fs a2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAor CQkJCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29s IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSBCaXRtYXBz ZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29s IHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgSW5kZXgg cGdwYV93YWxrZXJfZ2V0X3J0aShJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkgcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlk KTsKKworLyoKKyAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0cmVlIHdhbGsu CisgKgorICogUG9wdWxhdGVzIHdhbGtlciBiYXNlZCBvbiBhIHRyYXZlcnNhbCBvZiB0aGUgUGxh biB0cmVlcyBpbiBwc3RtdC4KKyAqLwordm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUxpc3RDZWxs ICAgKmxjOworCisJLyogSW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KHdhbGtlciwgMCwgc2l6 ZW9mKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCkpOworCXdhbGtlci0+cHN0bXQgPSBwc3RtdDsK KworCS8qIFdhbGsgdGhlIG1haW4gcGxhbiB0cmVlLiAqLworCXBncGFfd2Fsa19yZWN1cnNpdmVs eSh3YWxrZXIsIHBzdG10LT5wbGFuVHJlZSwgMCwgTlVMTCwgTklMLCBmYWxzZSk7CisKKwkvKiBN YWluIHBsYW4gdHJlZSB3YWxrIHdvbid0IHJlYWNoIHN1YnBsYW5zLCBzbyB3YWxrIHRob3NlLiAq LworCWZvcmVhY2gobGMsIHBzdG10LT5zdWJwbGFucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBs Zmlyc3QobGMpOworCisJCWlmIChwbGFuICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZl bHkod2Fsa2VyLCBwbGFuLCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwl9Cit9CisKKy8qCisgKiBN YWluIHdvcmtob3JzZSBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9q b2luX3Byb2JsZW0gaXMgdHJ1ZSwgd2UgZW5jb3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVy IGxldmVsCisgKiBvZiB0aGUgdHJlZSB3YWxrIGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0 IG9mIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0 IHNhbWUgam9pbiBwcm9ibGVtLiBXZSdyZSBubyBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4g cHJvYmxlbSBpZiAoMSkgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikg d2UgZGVzY2VuZAorICogdGhyb3VnaCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVs b3cgd2hpY2ggYW55IGZ1cnRoZXIgam9pbnMgd291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9p bnMgcGxhbm5lZCBzZXBhcmF0ZWx5IGZyb20gdGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisg KiBJZiBqb2luX3Vucm9sbGVyICE9IE5VTEwsIHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0 cyB1cyB0byBmaW5kIGEgam9pbgorICogdGhhdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0 IG9iamVjdC4gVGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxl bSwgYnV0IHRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwg dGhlCisgKiBqb2lucyBidXQgYXJlIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMg dGhlIGxlYWYgb2YgdGhlIGpvaW4gdHJlZSwKKyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxM IGJ1dCB3aXRoaW5fam9pbl9wcm9ibGVtIHdpbGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1l bnQgb2YgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBh ZHZpY2UKKyAqIHRoYXQgbmVlZHMgdG8gZW51bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFm ZmVjdHMuIFdlIGFkZCBSVElzIHdlIGZpbmQKKyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBl YWNoIG9mIHRoZXNlIHF1ZXJ5IGZlYXR1cmVzLgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhl ciA9PSB0cnVlLCBzb21lIGhpZ2hlciBsZXZlbCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQK KyAqIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdw YV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFu ICpwbGFuLAorCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pv aW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLAorCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91 bnJvbGxlciAqb3V0ZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVy ICppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxl dmVsID0gZmFsc2U7CisJTGlzdAkgICAqcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisJ TGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAgICpl bGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3NlcnQod2l0aGluX2pvaW5fcHJvYmxlbSB8fCBqb2lu X3Vucm9sbGVyID09IE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdh dGhlciBNZXJnZSBub2RlLCBkaXJlY3RseSBhZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJy ZW50bHktYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzLgorCSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0 aGUgZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGxpc3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkg KiBwcmV2aW91c2x5IGlkZW50aWZpZWQgYXMgYSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0 cmVhdGVkIGFzIGEKKwkgKiBxdWVyeSBmZWF0dXJlLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBj YWxsZXIgYWxzbyBoYXMgYSBjb3B5IHRvIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkg KiBjYW4ndCBkZXN0cnVjdGl2ZWx5IG1vZGlmeSBpdCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJ ICovCisJaWYgKElzQShwbGFuLCBHYXRoZXIpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBn cGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSLCBwbGFuKSk7CisJCWJlbmVhdGhf YW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UgaWYgKElzQShwbGFuLCBHYXRoZXJNZXJnZSkp CisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFR Rl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9 CisJZWxzZQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2Vy LT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMpCisJCXsKKwkJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQor CQkJeworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxpc3RfY29weShhY3RpdmVfcXVlcnlf ZmVhdHVyZXMpOworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQkJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQor CQkJCQlsaXN0X2RlbGV0ZV9wdHIod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4p OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBGaW5kIGFsbCBlbGlkZWQg bm9kZXMgZm9yIHRoaXMgUGxhbiBub2RlLgorCSAqLworCWZvcmVhY2hfbm9kZShFbGlkZWROb2Rl LCBuLCB3YWxrZXItPnBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVf aWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGVzID0gbGFwcGVuZChlbGlk ZWRfbm9kZXMsIG4pOworCX0KKworCS8qIElmIHdlIGZvdW5kIGFueSBlbGlkZWRfbm9kZXMsIGhh bmRsZSB0aGVtLiAqLworCWlmIChlbGlkZWRfbm9kZXMgIT0gTklMKQorCXsKKwkJaW50CQkJbnVt X2VsaWRlZF9ub2RlcyA9IGxpc3RfbGVuZ3RoKGVsaWRlZF9ub2Rlcyk7CisJCUVsaWRlZE5vZGUg Kmxhc3RfZWxpZGVkX25vZGU7CisKKwkJLyoKKwkJICogUlRJcyBmb3IgdGhlIGZpbmFsIC0tIGFu ZCB0aHVzIGxvZ2ljYWxseSB1cHBlcm1vc3QgLS0gZWxpZGVkIG5vZGUKKwkJICogc2hvdWxkIGJl IGNvbGxlY3RlZCBmb3IgcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gYnkgdGhlIGNhbGxlci4K KwkJICogSG93ZXZlciwgZWxpZGVkIG5vZGVzIGFjdCBhcyBiYXJyaWVycyB0byBxdWVyeSBmZWF0 dXJlcywgd2hpY2gKKwkJICogbWVhbnMgdGhhdCAoMSkgdGhlIHJlbWFpbmluZyBlbGlkZWQgbm9k ZXMsIGlmIGFueSwgc2hvdWxkIGJlCisJCSAqIGlnbm9yZWQgZm9yIHB1cnBvc2VzIG9mIHF1ZXJ5 IGZlYXR1cmVzIGFuZCAoMikgdGhlIGxpc3Qgb2YgYWN0aXZlCisJCSAqIHF1ZXJ5IGZlYXR1cmVz IHNob3VsZCBiZSByZXNldCB0byBlbXB0eSBzbyB0aGF0IHdlIGRvIG5vdCBhZGQgUlRJcworCQkg KiBmcm9tIHRoZSBwbGFuIG5vZGUgdGhhdCBpcyBsb2dpY2FsbHkgYmVuZWF0aCB0aGUgZWxpZGVk IG5vZGUgdG8gdGhlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGZyb20gdGhlIGNh bGxlci4KKwkJICovCisJCWxhc3RfZWxpZGVkX25vZGUgPSBsaXN0X250aChlbGlkZWRfbm9kZXMs IG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlf ZmVhdHVyZXMsCisJCQkJCQkgcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGxhc3RfZWxpZGVk X25vZGUtPnJlbGlkcywKKwkJCQkJCQkJCQkJCQkgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKSk7CisJ CWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IE5JTDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSB3aXRo aW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luX3Vucm9sbGVyIGlzIHJlc3BvbnNpYmxlCisJCSAq IGZvciBidWlsZGluZyB0aGUgc2NhbiBmb3IgdGhlIGZpbmFsIGVsaWRlZCBub2RlLCBzbyB0aHJv dyBpdCBvdXQuCisJCSAqLworCQlpZiAod2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsaWRlZF9u b2RlcyA9IGxpc3RfdHJ1bmNhdGUoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7 CisKKwkJLyogQnVpbGQgc2NhbnMgZm9yIGFsbCAob3IgdGhlIHJlbWFpbmluZykgZWxpZGVkIG5v ZGVzLiAqLworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgZWxpZGVkX25vZGUsIGVsaWRlZF9u b2RlcykKKwkJeworCQkJKHZvaWQpIHBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4sIGVsaWRl ZF9ub2RlLAorCQkJCQkJCQkgICBiZW5lYXRoX2FueV9nYXRoZXIsIHdpdGhpbl9qb2luX3Byb2Js ZW0pOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlcmUgd2VyZSBhbnkgZWxpZGVkIG5vZGVzLCB0 aGVuIGV2ZXJ5dGhpbmcgYmVuZWF0aCB0aG9zZSBub2RlcworCQkgKiBpcyBub3QgcGFydCBvZiB0 aGUgc2FtZSBqb2luIHByb2JsZW0uCisJCSAqCisJCSAqIEluIG1vcmUgZGV0YWlsLCBpZiBhbiBB cHBlbmQgb3IgTWVyZ2VBcHBlbmQgd2FzIGVsaWRlZCwgdGhlbiBhCisJCSAqIHBhcnRpdGlvbndp c2Ugam9pbiB3YXMgY2hvc2VuIGFuZCBvbmx5IGEgc2luZ2xlIGNoaWxkIHN1cnZpdmVkOyBpZgor CQkgKiBhIFN1YnF1ZXJ5U2NhbiB3YXMgZWxpZGVkLCB0aGUgc3VicXVlcnkgd2FzIHBsYW5uZWQg d2l0aG91dAorCQkgKiBmbGF0dGVuaW5nIGl0IGludG8gdGhlIHBhcmVudC4KKwkJICovCisJCXdp dGhpbl9qb2luX3Byb2JsZW0gPSBmYWxzZTsKKwkJam9pbl91bnJvbGxlciA9IE5VTEw7CisJfQor CisJLyoKKwkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luIHVucm9s bGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAqIGJ1aWxkaW5nIGFueSByZXF1aXJlZCBzY2FuIGZv ciB0aGlzIG5vZGUuIElmIG5vdCwgd2UgZG8gaXQgaGVyZS4KKwkgKi8KKwlpZiAoIXdpdGhpbl9q b2luX3Byb2JsZW0pCisJCSh2b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBOVUxM LCBiZW5lYXRoX2FueV9nYXRoZXIsIGZhbHNlKTsKKworCS8qCisJICogSWYgdGhpcyBqb2luIG5l ZWRzIHRvIHVucm9sbGVkIGJ1dCB0aGVyZSdzIG5vIGpvaW4gdW5yb2xsZXIgYWxyZWFkeQorCSAq IGF2YWlsYWJsZSwgY3JlYXRlIG9uZS4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciA9PSBOVUxM ICYmIHBncGFfaXNfam9pbihwbGFuKSkKKwl7CisJCWpvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0 ZV9qb2luX3Vucm9sbGVyKCk7CisJCWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSB0cnVlOworCQl3 aXRoaW5fam9pbl9wcm9ibGVtID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBp cyB0byBiZSB1bnJvbGxlZCwgcGdwYV91bnJvbGxfam9pbigpIHdpbGwgcmV0dXJuIHRoZSBqb2lu CisJICogdW5yb2xsZXIgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBkb3duIHdoZW4gd2Ug cmVjdXJzZSBpbnRvIHRoZQorCSAqIG91dGVyIGFuZCBpbm5lciBzaWRlcyBvZiB0aGUgcGxhbi4K KwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciAhPSBOVUxMKQorCQlwZ3BhX3Vucm9sbF9qb2luKHdh bGtlciwgcGxhbiwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBqb2luX3Vucm9sbGVyLAorCQkJCQkJICZv dXRlcl9qb2luX3Vucm9sbGVyLCAmaW5uZXJfam9pbl91bnJvbGxlcik7CisKKwkvKiBBZGQgUlRJ cyBmcm9tIHRoZSBwbGFuIG5vZGUgdG8gYWxsIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4gKi8KKwlw Z3BhX3FmX2FkZF9wbGFuX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuLCB3YWxrZXIt PnBzdG10LT5ydGFibGUpOworCisJLyoKKwkgKiBSZWN1cnNlIGludG8gdGhlIG91dGVyIGFuZCBp bm5lciBzdWJ0cmVlcy4KKwkgKgorCSAqIEFzIGFuIGV4Y2VwdGlvbiwgaWYgdGhpcyBpcyBhIEZv cmVpZ25TY2FuLCBkb24ndCByZWN1cnNlLiBwb3N0Z3Jlc19mZHcKKwkgKiBzb21ldGltZXMgc3Rv cmVzIGFuIEVQUSByZWNoZWNrIHBsYW4gaW4gcGxhbi0+bGVmdHJlZSwgYnV0IHRoYXQncyBnb2lu ZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUgc2V0IG9mIHJlbGF0aW9ucyBhcyB0aGUgRm9yZWln blNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHdheSB0byBlbWl0IGFkdmljZSB0YXJn ZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUgbm9uLUVQUSBjYXNlLgorCSAqIE1vcmVvdmVyLCBp dCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0IG90aGVyIEZEV3MgbWlnaHQgZG8gd2l0aCB0aGUK KwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlcy4gTWF5YmUgc29tZSBiZXR0ZXIgaGFuZGxpbmcg aXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZvciBub3csIHdlIGp1c3QgcHVudC4KKwkgKi8KKwlp ZiAoIUlzQShwbGFuLCBGb3JlaWduU2NhbikpCisJeworCQlpZiAocGxhbi0+bGVmdHRyZWUgIT0g TlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPmxlZnR0cmVlLCB3 aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIG91dGVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCQlpZiAo cGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2Vy LCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgaW5uZXJf am9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhf YW55X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBjcmVhdGVkIGEgam9pbiB1bnJvbGxl ciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28gb3VyIGpvaW4gdG8gdXNlCisJICogaXQgdG8gYnVp bGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRfam9pbiwgYW5kIHRvIGRlc3Ryb3kgdGhlIG9iamVj dC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlcl90b3BsZXZlbCkKKwl7CisJCXBncGFfdW5yb2xs ZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4gPSBwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fs a2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucyA9 CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMsIHVqb2luKTsKKwkJ cGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIoam9pbl91bnJvbGxlcik7CisJCSh2b2lkKSBwZ3Bh X3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsIHVqb2luKTsKKwl9CisKKwkvKgorCSAqIFNv bWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNoaWxkcmVuLiBOb2RlcyBsaWtlIEFw cGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55IG51bWJlciBvZiBjaGlsZHJlbiBzdG9yZSB0aGVt IGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4KKwkgKiBqdXN0IGhhcyBhIGZpZWxkIGZvciBhIHNp bmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICovCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsK KwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJCQlBcHBlbmQJICAgKmFwbGFuID0gKEFwcGVuZCAq KSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IGFwbGFuLT5hcHBlbmRwbGFuczsKKwkJCQlpZiAo Ym1zX2lzX2VtcHR5KGFwbGFuLT5hcHByZWxpZHMpKQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0 dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRf TWVyZ2VBcHBlbmQ6CisJCQl7CisJCQkJTWVyZ2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVu ZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCQlp ZiAoYm1zX2lzX2VtcHR5KG1hcGxhbi0+YXBwcmVsaWRzKSkKKwkJCQkJcHVzaGRvd25fcXVlcnlf ZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX0JpdG1hcEFuZDoKKwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0 bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcE9yOgorCQkJZXh0cmFwbGFucyA9 ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9T dWJxdWVyeVNjYW46CisKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBwYXNzIGRvd24gYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzIGFjcm9zcyBoZXJlLCBiZWNhdXNlCisJCQkgKiB0aG9zZSBhcmUgc3BlY2lm aWMgdG8gYSBzdWJxdWVyeSBsZXZlbC4KKwkJCSAqLworCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5 KHdhbGtlciwgKChTdWJxdWVyeVNjYW4gKikgcGxhbiktPnN1YnBsYW4sCisJCQkJCQkJCSAgMCwg TlVMTCwgTklMLCBiZW5lYXRoX2FueV9nYXRoZXIpOworCQkJYnJlYWs7CisJCWNhc2UgVF9DdXN0 b21TY2FuOgorCQkJZXh0cmFwbGFucyA9ICgoQ3VzdG9tU2NhbiAqKSBwbGFuKS0+Y3VzdG9tX3Bs YW5zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwkvKiBJZiB3ZSBm b3VuZCBhIGxpc3Qgb2YgZXh0cmEgY2hpbGRyZW4sIGl0ZXJhdGUgb3ZlciBpdC4gKi8KKwlmb3Jl YWNoKGxjLCBleHRyYXBsYW5zKQorCXsKKwkJUGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7 CisKKwkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgc3VicGxhbiwgMCwgTlVMTCwgcHVz aGRvd25fcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0K K30KKworLyoKKyAqIFBlcmZvcm0gZmluYWwgcHJvY2Vzc2luZyBvZiBhIG5ld2x5LWNvbnN0cnVj dGVkIHBncGFfdW5yb2xsZWRfam9pbi4gVGhpcworICogb25seSBuZWVkcyB0byBiZSBjYWxsZWQg Zm9yIHRvcGxldmVsIHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzLCBzaW5jZSBpdAorICogcmVj dXJzZXMgdG8gc3ViLWpvaW5zIGFzIG5lZWRlZC4KKyAqCisgKiBPdXIgZ29hbCBpcyB0byBhZGQg dGhlIHNldCBvZiBpbm5lciByZWxpZHMgdG8gdGhlIHJlbGV2YW50IGpvaW5fc3RyYXRlZ2llcwor ICogbGlzdCwgYW5kIHRvIGRvIHRoZSBzYW1lIGZvciBhbnkgc3ViLWpvaW5zLiBUbyB0aGF0IGVu ZCwgdGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhlIHNldCBvZiByZWxpZHMgZm91bmQgYmVuZWF0 aCB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0IGlzCisgKiBleHBlY3RlZCB0aGF0 IHRoZSB0b3BsZXZlbCBjYWxsZXIgd2lsbCBpZ25vcmUgdGhpcy4KKyAqLworc3RhdGljIEJpdG1h cHNldCAqCitwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCSAgIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pCit7CisJQml0 bWFwc2V0ICAqYWxsX3JlbGlkcyA9IE5VTEw7CisKKwlmb3IgKGludCBrID0gMDsgayA8IHVqb2lu LT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZ1am9pbi0+ aW5uZXJba107CisJCUJpdG1hcHNldCAgKnJlbGlkczsKKworCQlpZiAobWVtYmVyLT51bnJvbGxl ZF9qb2luICE9IE5VTEwpCisJCQlyZWxpZHMgPSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3 YWxrZXIsCisJCQkJCQkJCQkJCQltZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQllbHNlCisJCXsK KwkJCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJCQlyZWxpZHMgPSBtZW1iZXItPnNj YW4tPnJlbGlkczsKKwkJfQorCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3RyYXRl Z3lba11dID0KKwkJCWxhcHBlbmQod2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0 ZWd5W2tdXSwgcmVsaWRzKTsKKwkJYWxsX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhhbGxfcmVs aWRzLCByZWxpZHMpOworCX0KKworCXJldHVybiBhbGxfcmVsaWRzOworfQorCisvKgorICogQXJy YW5nZSBmb3IgdGhlIGdpdmVuIHBsYW4gbm9kZSB0byBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgZmVh dHVyZSB3aGVuIHRoZQorICogdHJlZSB3YWxrIHJlYWNoZXMgaXQuCisgKgorICogTWFrZSBzdXJl IHRvIG9ubHkgdXNlIHRoaXMgZm9yIG5vZGVzIHRoYXQgdGhlIHRyZWUgd2FsayBjYW4ndCBoYXZl IHJlYWNoZWQKKyAqIHlldCEKKyAqLwordm9pZAorcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwg UGxhbiAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGdwYV9hZGRfZmVhdHVy ZSh3YWxrZXIsIHR5cGUsIHBsYW4pOworCisJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMg PQorCQlsYXBwZW5kKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7Cit9CisKKy8q CisgKiBSZXR1cm4gdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBhc3NvY2lhdGVkIHdpdGgg dGhpcyBwbGFuIG5vZGUgSUQuCisgKgorICogVGhlIGxhc3QgZWxpZGVkIG5vZGUgaXMgdGhlIG9u ZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4KKyAqIHRyZWUgaGFk IGl0IG5vdCBiZWVuIHJlbW92ZWQgZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2lnLgorICovCitFbGlk ZWROb2RlICoKK3BncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4g KnBsYW4pCit7CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUgPSBOVUxMOworCisJZm9yZWFjaF9u b2RlKEVsaWRlZE5vZGUsIG4sIHBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFu X25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGUgPSBuOworCX0K KworCXJldHVybiBlbGlkZWRfbm9kZTsKK30KKworLyoKKyAqIENlcnRhaW4gcGxhbiBub2RlcyBj YW4gcmVmZXIgdG8gYSBzZXQgb2YgUlRJcy4gRXh0cmFjdCBhbmQgcmV0dXJuIHRoZSBzZXQuCisg Ki8KK0JpdG1hcHNldCAqCitwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKQoreworCWlmIChJc0EocGxh biwgUmVzdWx0KSkKKwkJcmV0dXJuICgoUmVzdWx0ICopIHBsYW4pLT5yZWxpZHM7CisJZWxzZSBp ZiAoSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwkJcmV0dXJuICgoRm9yZWlnblNjYW4gKikgcGxh biktPmZzX3JlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgQXBwZW5kKSkKKwkJcmV0dXJuICgo QXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIE1lcmdlQXBw ZW5kKSkKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKworCXJl dHVybiBOVUxMOworfQorCisvKgorICogRXh0cmFjdCB0aGUgc2Nhbm5lZCBSVEkgZnJvbSBhIHBs YW4gbm9kZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlcmUgaXNuJ3Qgb25lLgorICovCitJbmRl eAorcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbikKK3sKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikp CisJeworCQljYXNlIFRfU2VxU2NhbjoKKwkJY2FzZSBUX1NhbXBsZVNjYW46CisJCWNhc2UgVF9C aXRtYXBIZWFwU2NhbjoKKwkJY2FzZSBUX1RpZFNjYW46CisJCWNhc2UgVF9UaWRSYW5nZVNjYW46 CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCWNhc2UgVF9GdW5jdGlvblNjYW46CisJCWNhc2Ug VF9UYWJsZUZ1bmNTY2FuOgorCQljYXNlIFRfVmFsdWVzU2NhbjoKKwkJY2FzZSBUX0N0ZVNjYW46 CisJCWNhc2UgVF9OYW1lZFR1cGxlc3RvcmVTY2FuOgorCQljYXNlIFRfV29ya1RhYmxlU2NhbjoK KwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJY2FzZSBUX0lu ZGV4U2NhbjoKKwkJY2FzZSBUX0luZGV4T25seVNjYW46CisJCQlyZXR1cm4gKChTY2FuICopIHBs YW4pLT5zY2FucmVsaWQ7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisg KiBDb25zdHJ1Y3QgYSBuZXcgQml0bWFwc2V0IGNvbnRhaW5pbmcgbm9uLVJURV9KT0lOIG1lbWJl cnMgb2YgJ3JlbGlkcycuCisgKi8KK0JpdG1hcHNldCAqCitwZ3BhX2ZpbHRlcl9vdXRfam9pbl9y ZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAt MTsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4 dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0g cnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4p CisJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHJ0aSk7CisJfQorCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIENyZWF0ZSBhIHBncGFfcXVlcnlfZmVhdHVyZSBhbmQgYWRk IGl0IHRvIHRoZSBsaXN0IG9mIGFsbCBxdWVyeSBmZWF0dXJlcworICogZm9yIHRoaXMgcGxhbi4K KyAqLworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqCitwZ3BhX2FkZF9mZWF0dXJlKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwgUGxh biAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGFsbG9jMF9vYmplY3QocGdw YV9xdWVyeV9mZWF0dXJlKTsKKworCXFmLT50eXBlID0gdHlwZTsKKwlxZi0+cGxhbiA9IHBsYW47 CisKKwl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSA9CisJCWxhcHBlbmQod2Fsa2Vy LT5xdWVyeV9mZWF0dXJlc1txZi0+dHlwZV0sIHFmKTsKKworCXJldHVybiBxZjsKK30KKworLyoK KyAqIEFkZCBhIHNpbmdsZSBSVEkgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMs IEluZGV4IHJ0aSkKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3Rp dmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocWYt PnJlbGlkcywgcnRpKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBzZXQgb2YgUlRJcyB0byBlYWNo IGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRp cyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWZv cmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykK Kwl7CisJCXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMocWYtPnJlbGlkcywgcmVsaWRzKTsK Kwl9Cit9CisKKy8qCisgKiBBZGQgUlRJcyBkaXJlY3RseSBjb250YWluZWQgaW4gYSBwbGFuIG5v ZGUgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZSwKKyAqIGJ1dCBmaWx0ZXIgb3V0IGFueSBq b2luIFJUSXMsIHNpbmNlIGFkdmljZSBkb2Vzbid0IG1lbnRpb24gdGhvc2UuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LCBQbGFuICpwbGFuLCBMaXN0ICpydGFibGUpCit7CisJQml0bWFwc2V0ICAqcmVsaWRzOworCUlu ZGV4CQlydGk7CisKKwlpZiAoKHJlbGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQor CXsKKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgcnRhYmxl KTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHJlbGlkcyk7CisJ fQorCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwkJcGdwYV9x Zl9hZGRfcnRpKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcnRpKTsKK30KKworLyoKKyAqIElmIHdl IGdlbmVyYXRlZCBwbGFuIGFkdmljZSB1c2luZyB0aGUgcHJvdmlkZWQgd2Fsa2VyIG9iamVjdCBh bmQgYXJyYXkKKyAqIG9mIGlkZW50aWZpZXJzLCB3b3VsZCB3ZSBnZW5lcmF0ZSB0aGUgc3BlY2lm aWVkIHRhZy90YXJnZXQgY29tYmluYXRpb24/CisgKgorICogSWYgeWVzLCB0aGUgcGxhbiBjb25m b3JtcyB0byB0aGUgYWR2aWNlOyBpZiBubywgaXQgZG9lcyBub3QuIE5vdGUgdGhhdAorICogd2Ug aGF2ZSBrbm93IHdheSBvZiBrbm93aW5nIHdoZXRoZXIgdGhlIHBsYW5uZXIgd2FzIGZvcmNlZCB0 byBlbWl0IGEgcGxhbgorICogdGhhdCBjb25mb3JtZWQgdG8gdGhlIGFkdmljZSBvciBqdXN0IGhh cHBlbmVkIHRvIGRvIHNvLgorICovCitib29sCitwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpy dF9pZGVudGlmaWVycywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBs aXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUJpdG1hcHNldCAgKnJlbGlkcyA9 IE5VTEw7CisKKwlpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJeworCQlmb3JlYWNo X3B0cihwZ3BhX3Vucm9sbGVkX2pvaW4sIHVqb2luLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVk X2pvaW5zKQorCQl7CisJCQlpZiAocGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHVqb2lu LCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywgdGFyZ2V0LCB0 cnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlp ZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJSW5kZXgJ CXJ0aTsKKworCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0YWJsZV9sZW5ndGgsIHJ0X2lk ZW50aWZpZXJzLCAmdGFyZ2V0LT5yaWQpOworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24o cnRpKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfT1JERVJFRF9MSVNUKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGls ZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCUluZGV4CQlydGk7CisKKwkJCUFz c2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJ cnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJ CQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgJmNoaWxkX3Rhcmdl dC0+cmlkKTsKKwkJCWlmIChydGkgPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAiY2Fubm90IGRldGVy bWluZSBSVEkgZm9yIGFkdmljZSB0YXJnZXQiKTsKKwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVy KHJlbGlkcywgcnRpKTsKKwkJfQorCX0KKworCXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BB X1RBR19KT0lOX09SREVSOgorCQkJLyogc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICov CisJCQlwZ191bnJlYWNoYWJsZSgpOworCQkJYnJlYWs7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQ X0hFQVBfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwK KwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7 CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0ZPUkVJR04sCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCXJl dHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFf U0NBTl9JTkRFWF9PTkxZLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19J TkRFWF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAor CQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2Fz ZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5z X3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX1NF USwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BB X1NDQU5fVElELAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJ CQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RB R19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3 YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSX01FUkdFLAorCQkJCQkJCQkJCQkJcmVs aWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NF TUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFH X1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJl KHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUsCisJCQkJCQkJCQkJ CQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9IQVNIX0pPSU4s CisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJ QUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlk cyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lO X1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9P UF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtl ciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwkJCQkJCQkJ CQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJl dHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJB VF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BB X1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19q b2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwkJCQkJ CQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxrZXIsIHJlbGlkcyk7CisJfQorCisJLyog c2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMg YW4gdW5yb2xsZWQgam9pbiBtYXRjaCB0aGUgam9pbiBvcmRlciBzcGVjaWZpZWQgYnkgYW4gYWR2 aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0 Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ CQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkgICBib29sIHRvcGxldmVs KQoreworCWludAkJbmNoaWxkcmVuID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisK KwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJ LyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJlZml4IG1hdGNoLiAqLworCWlmICh0b3BsZXZl bCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBm YWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5jaGlsZHJlbiAhPSB1am9pbi0+bmlubmVyICsg MSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPdXRlcm1vc3QgcmVsIG11c3QgbWF0Y2gu ICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+ b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5pdGlhbCh0YXJnZXQtPmNoaWxkcmVuKSkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5uZXIgcmVsIG11c3QgbWF0Y2guICovCisJZm9y IChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAxOyArK24pCisJeworCQlwZ3BhX2FkdmljZV90 YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hpbGRyZW4sIG4gKyAxKTsK KworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIoJnVqb2luLT5p bm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBy dF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgIGNoaWxkX3RhcmdldCkpCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEb2VzIG9uZSBtZW1iZXIg b2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMg Ym9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVt YmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkg IHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAo bWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlpZiAodGFyZ2V0LT50dHlwZSAh PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBw Z3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMobWVtYmVyLT51bnJvbGxlZF9qb2luLAorCQkJ CQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJCQkgIGZhbHNlKTsKKwl9CisKKwlBc3NlcnQo bWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRjaCAodGFyZ2V0LT50dHlwZSkKKwl7CisJCWNh c2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgorCQkJLyogQ291bGQgb25seSBtYXRjaCBhbiB1 bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9V Tk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJCQl7CisJCQkJCUluZGV4CQlydGk7 CisKKwkJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFibGVfbGVuZ3RoLCBydF9pZGVu dGlmaWVycywKKwkJCQkJCQkJCQkJICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJCQlyZWxpZHMg PSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQor CisJCWNhc2UgUEdQQV9UQVJHRVRfSURFTlRJRklFUjoKKwkJCXsKKwkJCQlJbmRleAkJcnRpOwor CisJCQkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFibGVfbGVuZ3RoLCBydF9pZGVudGlm aWVycywKKwkJCQkJCQkJCQkgICZ0YXJnZXQtPnJpZCk7CisJCQkJcmVsaWRzID0gYm1zX21ha2Vf c2luZ2xldG9uKHJ0aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJcmV0dXJuIGJtc19lcXVh bChtZW1iZXItPnNjYW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKworLyoKKyAqIERvZXMgdGhpcyB3 YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9y IHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJf Y29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAg cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykK K3sKKwlMaXN0CSAgICpzY2FucyA9IHdhbGtlci0+c2NhbnNbc3RyYXRlZ3ldOworCisJZm9yZWFj aF9wdHIocGdwYV9zY2FuLCBzY2FuLCBzY2FucykKKwl7CisJCS8qCisJCSAqIFhYWC4gSWYgdGhp cyBpcyBpbmRleC1yZWxhdGVkIGFkdmljZSwgd2Ugc2hvdWxkIGFsc28gdmFsaWRhdGUgdGhhdAor CQkgKiB0aGUgYWR2aWNlIHRhcmdldCdzIGluZGV4IHRhcmdldCBtYXRjaGVzIHRoZSBQbGFuIHRy ZWUuCisJCSAqLworCQlpZiAoYm1zX2VxdWFsKHNjYW4tPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJl dHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhpcyB3 YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUgYXBwbGllcyB0byB0aGUgZ2l2 ZW4KKyAqIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5z X2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIHBncGFf cWZfdHlwZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpx dWVyeV9mZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdHlwZV07CisKKwlmb3JlYWNo X3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJlcykKKwl7CisJCWlmIChi bXNfZXF1YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2 ZW4gam9pbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBz ZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRlZ3kgc3Ry YXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKmpvaW5fc3Ry YXRlZ2llcyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0ZWd5XTsKKworCWZvcmVhY2hf cHRyKEJpdG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2llcykKKwl7CisJCWlmIChibXNf ZXF1YWwoanNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g ZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHJl bGlkcyBzaG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAqLworc3RhdGljIGJvb2wKK3Bn cGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlyZXR1cm4gYm1zX2lzX3N1 YnNldChyZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIENvbnZl bmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSByZWxhdGlvbiBpZGVudGlmaWVyIHRvIGFuIFJU SS4KKyAqCisgKiBXZSB0aHJvdyBhbiBlcnJvciBoZXJlIGJlY2F1c2Ugd2UgZXhwZWN0IHRoaXMg dG8gYmUgdXNlZCBvbiBzeXN0ZW0tZ2VuZXJhdGVkCisgKiBhZHZpY2UuIEhlbmNlLCBmYWlsdXJl IGhlcmUgaW5kaWNhdGVzIGFuIGFkdmljZSBnZW5lcmF0aW9uIGJ1Zy4KKyAqLworc3RhdGljIElu ZGV4CitwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCXBncGFf aWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCXBncGFfaWRlbnRpZmllciAqcmlkKQor eworCUluZGV4CQlydGk7CisKKwlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmll cihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ CSAgIHJpZCk7CisJaWYgKHJ0aSA9PSAwKQorCQllbG9nKEVSUk9SLCAiY2Fubm90IGRldGVybWlu ZSBSVEkgZm9yIGFkdmljZSB0YXJnZXQiKTsKKwlyZXR1cm4gcnRpOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5mMjQ0ZjQ0MjhhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDEyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV93YWxrZXIuaAorICoJICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBHUEFfV0FM S0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisj aW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXZSB1c2UgdGhlIHRlcm0gInF1ZXJ5IGZl YXR1cmUiIHRvIHJlZmVyIHRvIHBsYW4gbm9kZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcKKyAqIGlu IHRoZSBmb2xsb3dpbmcgd2F5OiB0byBnZW5lcmF0ZSBhZHZpY2UsIHdlJ2xsIG5lZWQgdG8ga25v dyB0aGUgc2V0IG9mCisgKiBzYW1lLXN1YnF1ZXJ5LCBub24tam9pbiBSVElzIG9jY3VyaW5nIGF0 IG9yIGJlbG93IHRoYXQgcGxhbiBub2RlLCB3aXRob3V0CisgKiBhZG1peHR1cmUgb2YgcGFyZW50 IGFuZCBjaGlsZCBSVElzLgorICoKKyAqIEZvciBleGFtcGxlLCBHYXRoZXIgbm9kZXMsIGRlc2ln aW5hdGVkIGJ5IFBHUEFRRl9HQVRIRVIsIGFuZCBHYXRoZXIgTWVyZ2UKKyAqIG5vZGVzLCBkZXNp Z25hdGVkIGJ5IFBHUEFRRl9HQVRIRVJfTUVSR0UsIGFyZSBxdWVyeSBmZWF0dXJlcywgYmVjYXVz ZSB3ZSdsbAorICogd2FudCB0byBhZG1pdCBzb21lIGtpbmQgb2YgYWR2aWNlIHRoYXQgZGVzY3Jp YmVzIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgYXBwZWFycyBiZW5lYXRo IHRob3NlIG5vZGVzLgorICoKKyAqIEVhY2ggc2VtaWpvaW4gY2FuIGJlIGltcGxlbWVudGVkIGVp dGhlciBieSBkaXJlY3RseSBwZXJmb3JtaW5nIGEgc2VtaWpvaW4sCisgKiBvciBieSBtYWtpbmcg b25lIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbi4gRWl0aGVy IHdheSwKKyAqIHdlIHVzZSBhIHF1ZXJ5IGZlYXR1cmUgdG8gbm90aWNlIHdoYXQgZGVjaXNpb24g d2FzIG1hZGUsIHNvIHRoYXQgd2UgY2FuCisgKiBkZXNjcmliZSBpdCBieSBlbnVtZXJhdGluZyB0 aGUgUlRJcyBvbiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4uCisgKgorICogVG8gZWxhYm9yYXRlIG9u IHRoZSAibm8gYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcyIgcnVsZSwgaW4gYWxs IG9mCisgKiB0aGVzZSBjYXNlcywgaWYgdGhlIGVudGlyZXR5IG9mIGFuIGluaGVyaXRhbmNlIGhp ZXJhcmNoeSBhcHBlYXJzIGJlbmVhdGgKKyAqIHRoZSBxdWVyeSBmZWF0dXJlLCB3ZSBvbmx5IHdh bnQgdG8gbmFtZSB0aGUgcGFyZW50IHRhYmxlLiBCdXQgaXQncyBhbHNvCisgKiBwb3NzaWJsZSB0 byBoYXZlIGNhc2VzIHdoZXJlIHdlIG11c3QgbmFtZSBjaGlsZCB0YWJsZXMuIFRoaXMgaXMgcGFy dGljdWxhcmx5CisgKiBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGFydGl0aW9ud2lzZSBqb2luIGlz IGluIHVzZSwgYnV0IGNvdWxkIGhhcHBlbiBmb3IKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug ZXZlbiB3aXRob3V0IHRoYXQsIGlmIG9uZSBvZiB0aG9zZSBhcHBlYXJzIGJlbG93CisgKiBhbiBB cHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBmb3IgYSBzaW5nbGUgdGFibGUuCisgKi8KK3R5cGVk ZWYgZW51bSBwZ3BhX3FmX3R5cGUKK3sKKwlQR1BBUUZfR0FUSEVSLAorCVBHUEFRRl9HQVRIRVJf TUVSR0UsCisJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJUEdQQVFGX1NFTUlKT0lOX1VO SVFVRQorCS8qIHVwZGF0ZSBOVU1fUEdQQV9RRl9UWVBFUyBpZiB5b3UgYWRkIGFueXRoaW5nIGhl cmUgKi8KK30gcGdwYV9xZl90eXBlOworCisjZGVmaW5lIE5VTV9QR1BBX1FGX1RZUEVTICgoaW50 KSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFICsgMSkKKworLyoKKyAqIEZvciBlYWNoIHF1ZXJ5IGZl YXR1cmUsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGZlYXR1cmUgdHlwZSBhbmQgdGhlIHNldCBvZgor ICogcmVsaWRzIHRoYXQgd2UgZm91bmQgdW5kZXJuZWF0aCB0aGUgcmVsZXZhbnQgcGxhbiBub2Rl LiBTZWUgdGhlIGNvbW1lbnRzCisgKiBvbiBwZ3BhX3FmX3R5cGUsIGFib3ZlLCBmb3IgYWRkaXRp b25hbCBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKK3sK KwlwZ3BhX3FmX3R5cGUgdHlwZTsKKwlQbGFuCSAgICpwbGFuOworCUJpdG1hcHNldCAgKnJlbGlk czsKK30gcGdwYV9xdWVyeV9mZWF0dXJlOworCisvKgorICogQ29udGV4dCBvYmplY3QgZm9yIHBs YW4gdHJlZSB3YWxrLgorICoKKyAqIHBzdG10IGlzIHRoZSBQbGFubmVkU3RtdCB3ZSdyZSBzdHVk eWluZy4KKyAqCisgKiBzY2FucyBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBwZ3BhX3NjYW4gb2Jq ZWN0cy4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHRoZSBzY2FuJ3MgcGdwYV9zY2FuX3N0 cmF0ZWd5LgorICoKKyAqIG5vX2dhdGhlcl9zY2FucyBpcyB0aGUgc2V0IG9mIHNjYW4gUlRJcyB0 aGF0IGRvIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug bm9kZS4KKyAqCisgKiB0b3BsZXZlbF91bnJvbGxlZF9qb2lucyBpcyBhIGxpc3Qgb2YgYWxsIHBn cGFfdW5yb2xsZWRfam9pbiBvYmplY3RzIHRoYXQKKyAqIGFyZSBub3QgYSBjaGlsZCBvZiBzb21l IG90aGVyIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqCisgKiBqb2luX3N0cmF0ZWd5IGlzIGFuIGFy cmF5IG9mIGxpc3RzIG9mIEJpdG1hcHNldCBvYmplY3RzLiBFYWNoIEJpdG1hcHNldAorICogaXMg dGhlIHNldCBvZiByZWxpZHMgdGhhdCBhcHBlYXJzIG9uIHRoZSBpbm5lciBzaWRlIG9mIHNvbWUg am9pbiAoZXhjbHVkaW5nCisgKiBSVElzIGZyb20gcGFydGl0aW9uIGNoaWxkcmVuIGFuZCBzdWJx dWVyaWVzKS4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHBncGFfam9pbl9zdHJhdGVneS4K KyAqCisgKiBxdWVyeV9mZWF0dXJlcyBpcyBhbiBhcnJheSBsaXN0cyBvZiBwZ3BhX3F1ZXJ5X2Zl YXR1cmUgb2JqZWN0cywgaW5kZXhlZAorICogYnkgcGdwYV9xZl90eXBlLgorICoKKyAqIGZ1dHVy ZV9xdWVyeV9mZWF0dXJlcyBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSBwbGFuIHRyZWUgd2FsayBh bmQgc2hvdWxkCisgKiBiZSBlbXB0eSB3aGVuIHRoZSB0cmVlIHdhbGsgY29uY2x1ZGVzLiBJdCBp cyBhIGxpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlCisgKiBvYmplY3RzIGZvciBQbGFuIG5vZGVz IHRoYXQgdGhlIHBsYW4gdHJlZSB3YWxrIGhhcyBub3QgeWV0IGVuY291bnRlcmVkOworICogd2hl biBlbmNvdW50ZXJlZCwgdGhleSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBx dWVyeSBmZWF0dXJlcworICogdGhhdCBpcyBwcm9wYWdhdGVkIHZpYSB0aGUgY2FsbCBzdGFjay4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0Cit7CisJUGxhbm5l ZFN0bXQgKnBzdG10OworCUxpc3QJICAgKnNjYW5zW05VTV9QR1BBX1NDQU5fU1RSQVRFR1ldOwor CUJpdG1hcHNldCAgKm5vX2dhdGhlcl9zY2FuczsKKwlMaXN0CSAgICp0b3BsZXZlbF91bnJvbGxl ZF9qb2luczsKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXNbTlVNX1BHUEFfSk9JTl9TVFJBVEVH WV07CisJTGlzdAkgICAqcXVlcnlfZmVhdHVyZXNbTlVNX1BHUEFfUUZfVFlQRVNdOworCUxpc3QJ ICAgKmZ1dHVyZV9xdWVyeV9mZWF0dXJlczsKK30gcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0Owor CitleHRlcm4gdm9pZCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLAorCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQpOworCitleHRlcm4gdm9pZCBwZ3Bh X2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCQkJCXBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK2V4dGVy biBFbGlkZWROb2RlICpwZ3BhX2xhc3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQ bGFuICpwbGFuKTsKK2V4dGVybiBCaXRtYXBzZXQgKnBncGFfcmVsaWRzKFBsYW4gKnBsYW4pOwor ZXh0ZXJuIEluZGV4IHBncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNl dCAqcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpy dGFibGUpOworCitleHRlcm4gYm9vbCBwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9p ZGVudGlmaWVycywKKwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJ CQkgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9nYXRoZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41ODI4MDA0MzkxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2dhdGhlci5zcWwKQEAgLTAsMCArMSw3NiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOwor U0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3Nl dHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJh bGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2Zm OworCitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0 KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2Rp bSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CisKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlp ZCBpbnQgbm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9k aW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBndF9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworCistLSBCeSBkZWZhdWx0LCB3ZSBleHBl Y3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBoYXNoIGpvaW4uCitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisKKy0tIEZvcmNlIEdhdGhlciBv ciBHYXRoZXIgTWVyZ2Ugb2YgYm90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBh IHNlcGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0 aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9t ZXJnZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlU OworCistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1 dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9y Y2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gQ2Fu J3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1 c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNWFhMmZjNjJkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbApAQCAtMCwwICsxLDk2IEBACitMT0FEICdw Z19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7 CisKK0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRl eHQsIHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIg dGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikK KwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKKwor Q1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGlu dGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsx LCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5B TFlaRSBqb19mYWN0OworCistLSBXZSBleHBlY3QgdG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhl biBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYK KwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBq b19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhl c2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRo ZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGlt MV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQK KwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEg T04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg PSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBmIGQyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVG VCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK K0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBp bnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRo ZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0 ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJl ZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Rp bTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFf aWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFu bmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBub3QgYSB2YWxp ZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIK Ky0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitCRUdJTjsKKy0t IFhYWDogVGhlIGFkdmljZSBmZWVkYmFjayBzYXlzICdwYXJ0aWFsbHkgbWF0Y2hlZCcgaGVyZSB3 aGljaCBpc24ndCBleGFjdGx5CistLSB3cm9uZyBnaXZlbiB0aGUgd2F5IHRoYXQgZmxhZyBpcyBo YW5kbGVkIGluIHRoZSBjb2RlLCBidXQgaXQncyBhdCB0aGUgdmVyeQorLS0gbGVhc3QgY29uZnVz aW5nLiBTb21ldGhpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGltcHJvdmVkIGhlcmUuCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlO TkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAw ID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxM OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDIgZDEp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Rp bTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFf aWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CitDT01NSVQ7CisKKy0tIFhYWDogYWRkIHRlc3RzIGZvciBq b2luIG9yZGVyIHByZWZpeCBtYXRjaGluZworLS0gWFhYOiBqb2luX29yZGVyKGp1c3RvbmVyZWwp IHNob3VsZG4ndCByZXBvcnQgcGFydGlhbGx5IG1hdGNoZWQKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjhlYjgyM2YxYzBlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKQEAgLTAsMCArMSw3NiBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwor CitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9k aW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw KSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CisKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3Qg KAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVu Y2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2lu X2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7CisKKy0tIFdlIGV4cGVj dCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRo IGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29y ayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwg YmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBh bmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBK T0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0la RShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIE5vdyB0cnkg Zm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlu bmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVS R0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBXZSBjYW4ndCBmb3JjZSBh IGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywgYmVjYXVzZSB0aGV5CistLSBhcmVu J3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9sb2Nh bF9jb2xsZWN0b3Iuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m YzgzOGIyMjA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L2xvY2FsX2NvbGxlY3Rvci5zcWwKQEAgLTAsMCArMSw0MSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBw Z19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKworLS0gVHJ5 IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBj b2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2 aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworCistLSBTZXQgdXAgYSBkdW1teSB0YWJs ZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDAp OworCistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15 X3RhYmxlIGI7CitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworCistLSBTaG91bGQgcmV0dXJu IHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRUxFQ1QgYWR2aWNlIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlU IDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGlt aXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1bmtzLgorU0VUIHBnX3Bs YW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOworCistLSBQdXNoIGEgYnVu Y2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1Ig eCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7 CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29y a2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9l c24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50 cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDJjMDYxMTc2MAotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCkBAIC0wLDAgKzEsNzgg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsKKworQ1JF QVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGlu dCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFhIFBBUlRJVElP TiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04gT0YgcHQxIEZP UiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVT IEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZp bGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRFIFRBQkxFIHB0MiAoaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBG Uk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitD UkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkg dG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRB QkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MiAo aWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBnLCAoZyAl IDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0z IHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJ VElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0Yg cHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxF Q1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQzOworCitDUkVBVEUg VEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxt IGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNo YSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1 MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0 bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgx NTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90 aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwz MDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQg PSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0g MSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8g aXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBw dDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBB TkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElP TldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0 Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7 CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lzZSBqb2luIHdpdGggYSBt aXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21hdGNoIFdIRVJFIHB0MS5p ZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNTQxNmE3NWY0NgotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCkBAIC0w LDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5k b21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5k ZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChhIGludCBwcmlt YXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8IGcgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5fdGFibGVfYiBP TiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nhbl90YWJsZTsK KworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0tIEJpdG1hcCBoZWFwIHNj YW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBUSUQgc2NhbgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0 aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwx KScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0 IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3 YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAn KDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBmdWxsIHNjYW4gb2YgdGhlIHRh YmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCistLSBvZiB0aGVzZSB3aWxsIGZh aWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBjb3VsZCBwb3RlbnRpYWxseQor LS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhlIHBsYW5uZXIgZG9lcyBub3Qg ZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBkdWUgdG8gdGhlIGxhY2sgb2Yg YSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitDT01N SVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBz dWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0 aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkg ZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hF QVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworQ09N TUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAgdG8gdXNlIGEgc2Vx dWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleC1v bmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJRCBzY2FuIChkdWUg dG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor Q09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2Nh biB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4g aW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlU OworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiBpbiBwbGFj ZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBpbmRleCBzY2FuIG9uIGEg QlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21l IHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0g V2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBU SUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAn KDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09N TUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRleCBzY2Fucy4K K0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUgc2NoZW1hLgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IG5vdCBpZiB3 ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUgc2FtZSBhZHZpY2UuCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK Ky0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBldmVuIG5vdGlv bmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVibGljLnNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBUZXN0IGFzc29ydGVk IGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZ X1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBU ZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2Ft ZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMg T04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nlcmllcygx LDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9J TiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NB TihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBz LmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitDT01NSVQ7CisK Ky0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnku CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47CistLSBTaG91bGQgbm90IG1h dGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5 IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQg cXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o c0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZG U0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQ09N TUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiYzFiNzFiZWJlCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApAQCAtMCwwICsxLDQyIEBACitMT0FE ICdwZ19wbGFuX2FkdmljZSc7CisKKy0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLCBhbmQg c28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworCistLSBUZXN0 IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3BhY2UsIGFuZCB3 aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGluY2x1ZGVkLiBU aGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKKworLS0gU3ludGF4IGVycm9y cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgpJzsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIyc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnMTIzJzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oXykvKioq Lyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lO KC8qeCoveSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhB U0hfSk9JTih5Ly8qeCoveiknOworCistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Sk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90 IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNl Y29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKKworLS0gRm9yZWlnbiBq b2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJzLgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3Jl Z3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjczNWY1NGQ1 N2VjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdy ZXNzLnBsCkBAIC0wLDAgKzEsMTQ3IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUgY29yZSByZWdyZXNz aW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBwcm9ibGVtcy4KK3Vz ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBDd2QgICAgICAg ICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGlybmFtZSk7CisKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmlu aXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KKyMKKyMgV2UgcnVu IHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgc2V0IHRvIGVuc3Vy ZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVucyBhZ2FpbnN0IGV2ZXJ5IHF1 ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdyZSB1bmFibGUgdG8gcHJvcGVy bHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVlcywgdGhpcyB0ZXN0IHNob3VsZCBmYWls LgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRvIGFuIGFkdmljZSBzdHJpbmcg dGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8gYmUgcG9wdWxhdGVkIHdpdGgg YSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hpY2ggd2UgZG8KKyMgbm90IGV4 cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMuIFRo aXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJlIGNhbGxlZCwgaW1wcm92aW5nIGNv ZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMgYWN0dWFsbHkgY2hhbmdlLgorIwor IyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UgaXMg bmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzIHRoYXQg dXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdCBzZWVtcyBsaWtlCisjIHVzZXJzIHdp bGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBsaWVkIGFkdmljZSBzbyB0aGF0IGl0 J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5lciBiZWhhdmlvciBoYXMgYmVlbiBhbHRl cmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUuCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9u X2xpbWl0PTEwMDAwMDAKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz1wZ19wbGFuX2FkdmljZQor cGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdTRVFfU0NBTihlbnRpcmVseV9maWN0aXRpb3VzKSBIQVNI X0pPSU4odG90YWxfZmFicmljYXRpb24pIEdBVEhFUihjb21wbGV0ZWx5X2ltYWdpbmFyeSknCitw Z19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UKK0VPTQor JG5vZGUtPnN0YXJ0OworCitteSAkc3JjZGlyID0gYWJzX3BhdGgoIi4uLy4uIik7CisKKyMgLS1k bHBhdGggaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgcmVncmVz cy5zbworIyBhbmQgYW55IGxpYnJhcmllcyB0aGUgcmVncmVzc2lvbiB0ZXN0cyByZXF1aXJlLgor bXkgJGRscGF0aCA9IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7CisKKyMgLS1vdXRwdXRk aXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBsYWNlIHRoZSBvdXRwdXQgZmlsZXMuCitt eSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyMg LS1pbnB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggb2YgdGhlIGlucHV0IGZpbGVzLgorbXkgJGlu cHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcyI7CisKKyMgUnVuIHRoZSB0ZXN0cy4K K215ICRyYyA9CisgIHN5c3RlbSgkRU5We1BHX1JFR1JFU1N9IC4gIiAiCisJICAuICItLWJpbmRp cj0gIgorCSAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorCSAgLiAiLS1ob3N0PSIgLiAkbm9k ZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAkbm9kZS0+cG9ydCAuICIgIgorCSAgLiAi LS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgIgor CSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAiCisJICAuICItLWlucHV0ZGlyPVwiJGlu cHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0ZGlyXCIiKTsKKworIyBEdW1w IG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBpZiB0aGVyZSBpcyBvbmUKK2lmICgkcmMg IT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRpci9yZWdyZXNzaW9uLmRpZmZzIjsKKwlp ZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7CisJ CXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJpbnQgIj09PSBFT0YgPT09XG4iOworCX0K K30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAwLCAncmVncmVzc2lvbiB0ZXN0cyBwYXNz Jyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28gd2UgY2FuIGFjY2VzcyB0aGUgY29sbGVj dG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHBnX3Bs YW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBsYXJnZSBhbW91bnQgb2YgYWR2aWNlIHdh cyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hh cmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9xdWVyeV9jb3VudCwgJz4nLCAzNTAwMCwg ImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisjIFZlcmlmeSB0aGF0IGxvdHMgb2YgZGlm ZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVjdGVkCitteSAkZGlzdGluY3RfcXVlcnlf Y291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VO VCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygkZGlzdGluY3RfcXVlcnlfY291bnQsICc+ JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3RlZCIpOworCisjIFdlIHdhbnQgdG8gdGVz dCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0YWdzIGluIHRoZSBjb2xsZWN0ZWQgYWR2 aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFzaCB0aGF0IGZvbGxvd3M7IG1hcCBhbnkg dGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB0 byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21hcCA9ICgKKwlCSVRNQVBfSEVBUF9TQ0FO ID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FUSEVSID0+IDEsCisJR0FUSEVSX01FUkdF ID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhfT05MWV9TQ0FOID0+IDEsCisJSU5ERVhf U0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlNRVJHRV9KT0lOX01BVEVSSUFMSVpFID0+ IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5FU1RFRF9MT09QX01BVEVSSUFMSVpFID0+ IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAorCU5FU1RFRF9MT09QX1BMQUlOID0+IDEs CisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lTRSA9PiAxLAorCVNFTUlKT0lOX05PTl9V TklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4gMSwKKwlTRVFfU0NBTiA9PiAxLAorCVRJ RF9TQ0FOID0+IDEsCispOworZm9yIG15ICR0YWcgKHNvcnQga2V5cyAldGFnX21hcCkKK3sKKwlt eSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0YWd9OworCisJIyBTZWFyY2ggZm9yIHRoZSBnaXZlbiB0 YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJvYnVzdDogaXQgY291bGQgZ2V0IHRocm93bgorCSMg b2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3VjaCBhcyAiRk9SRUlHTl9KT0lOKCIsIGJ1dCB0aGF0IHBy b2JhYmx5IHdvbid0CisJIyBoYXBwZW4gaW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cy4KKwlt eSAkdGFnX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxF Q1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorCVdIRVJF IGFkdmljZSBMSUtFICclJHRhZyglJworRU9NCisKKwkjIENoZWNrIHRoYXQgdGhlIHRhZyBnb3Qg YSBub24tdHJpdmlhbCBhbW91bnQgb2YgdXNlLCB1bmxlc3MgdG9sZCBvdGhlcndpc2UuCisJY21w X29rKCR0YWdfY291bnQsICc+JywgMTAsICJtdWx0aXBsZSB1c2VzIG9mICR0YWciKSBpZiAkY2hl Y2tpdDsKKworCSMgUmVnYXJkbGVzcywgbm90ZSB0aGUgZXhhY3QgY291bnQgaW4gdGhlIGxvZywg Zm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCW5vdGUoImZvdW5kICR0YWdfY291bnQgYWR2aWNlIHN0 cmluZ3MgY29udGFpbmluZyAkdGFnIik7Cit9CisKKyMgVHJpZ2dlciBhIHBhcnRpYWwgY2xlYW51 cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsIGFuZCB0aGVuIGEgZnVsbAorIyBjbGVh bnVwLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRVQgcGdfcGxhbl9h ZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9NTAwOworU0VMRUNUICogRlJPTSBwZ19jbGVh cl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCisKK2RvbmVfdGVzdGluZygpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4YjMwMGFlODIzMy4uYThkMTg4OWNiMTAgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTQ2LDYgKzM5NDYsNDMgQEAgcGdfd2NfcHJvYmVm dW5jCiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdw YV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitwZ3BhX2FkdmljZV90YWdfdHlw ZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIKK3BncGFfaW5kZXhfdGFyZ2V0 CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFfam9pbl9jbGFzcworcGdwYV9q b2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3BhX2pvaW5fc3RyYXRlZ3kKK3BncGFfam9p bl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3BncGFfbG9jYWxfYWR2aWNlX2NodW5rCitw Z3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQKK3BncGFfcGxhbm5l cl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5X2ZlYXR1cmUKK3BncGFfcmlfY2hlY2tl cgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2FuCitwZ3BhX3NjYW5fc3RyYXRlZ3kKK3Bn cGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCitwZ3BhX3NoYXJlZF9z dGF0ZQorcGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90cm92ZV9lbnRyeQorcGdw YV90cm92ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gKK3BncGFfdHJvdmVf ZW50cnlfa2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ryb3ZlX3Jlc3VsdAorcGdw YV90cm92ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tldAogcGdzcWxfdGhpbmdf dAogcGdzc0VudHJ5Ci0tIAoyLjUxLjAKCg== --000000000000eaf7e10645ae89c3--