From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16981 invoked by alias); 24 Jan 2013 15:16:05 -0000 Received: (qmail 16968 invoked by uid 22791); 24 Jan 2013 15:16:04 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-ee0-f47.google.com (HELO mail-ee0-f47.google.com) (74.125.83.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 24 Jan 2013 15:15:01 +0000 Received: by mail-ee0-f47.google.com with SMTP id e52so4590293eek.6 for ; Thu, 24 Jan 2013 07:14:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type:x-gm-message-state; bh=s69vTLWN5cMFOT7sWwVpWdgpaGDQBsb8BVtWTVA1ETI=; b=Y0ZaMKcjS9T6uENz/+iF5tQan/neaWFN1pVScoGwLc2QxwiWiwC+xsIGUq/t+81Zo4 jK6dI8ROneonyhnga0LHvR2PHC18CpFOh7aq3qEwLwWrFdEGoyHU5RQEmz9snDw/kUze jQji+AY56RURm0TJsHCiOVPLOwBpG+HqQJs9T+RN9Cqhwj0TU2EdGdwTB8m65gvz1Ve4 bzJCZ8RvRhKN1OQH55oLGW059o9oEm50jJNi09ifSUOcy2GBwn+SOpGaQgY3tgPzwb4o kb5C6DB9EMe14yUDiBqw4yD1pAlaijs1ew/KJFZweCrnhhStYARYHQxXTtj5LlhsDGZf oNag== MIME-Version: 1.0 X-Received: by 10.14.174.73 with SMTP id w49mr7258967eel.17.1359040499099; Thu, 24 Jan 2013 07:14:59 -0800 (PST) Received: by 10.223.173.199 with HTTP; Thu, 24 Jan 2013 07:14:58 -0800 (PST) In-Reply-To: <20130123143258.GH7269@tucnak.redhat.com> References: <20130122143307.GA3824@google.com> <50FFAB3C.6060202@arm.com> <72a04a5e-7da6-4809-a9a8-b5ecffd01351@email.android.com> <20130123143258.GH7269@tucnak.redhat.com> Date: Thu, 24 Jan 2013 15:16:00 -0000 Message-ID: Subject: Re: RFA - Remove GC zone allocator From: Diego Novillo To: Jakub Jelinek Cc: Richard Biener , Richard Earnshaw , "gcc-patches@gcc.gnu.org" , Ian Lance Taylor , Lawrence Crowl , Laurynas Biveinis Content-Type: multipart/mixed; boundary=047d7b6042f02f294a04d40a46d2 X-Gm-Message-State: ALoCoQmbDmdk73zsu2LiIVfvTpyo/+7NCWyyr8eE17hX9F1cDkENCWBagyc9P7seaToylOdwy5Kd/AEaKT7yLF6bmVwnMuCKZSimzEOZbytS7V14HB6Qql+OrMIvxmkYADgCdTCqxSxEqwtevbjj25KVjLSmuHBQ9qW0iWvQ2mg9Hw9jxUTIfTYwUi7RvZ5NxLuYOZ6JjiYQ X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-01/txt/msg01196.txt.bz2 --047d7b6042f02f294a04d40a46d2 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 595 On Wed, Jan 23, 2013 at 9:32 AM, Jakub Jelinek wrote: > > On Wed, Jan 23, 2013 at 03:31:16PM +0100, Richard Biener wrote: > > >That's true. Perhaps a warning message stating that --with-gc is now > > >ignored? Or would you prefer a straight out error? > > > > I don't think we ever cared for this. > > > > Thus, the patch is ok if no other rm objects within a day. > > I'm fine with it as is too. > > Jakub Thanks. Emitting an error explaining that it disappeared was just as easy. I modified the patch to do just that and committed it trunk (attached). Diego. --047d7b6042f02f294a04d40a46d2 Content-Type: application/octet-stream; name="0001-Remove-zone-allocator.patch" Content-Disposition: attachment; filename="0001-Remove-zone-allocator.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hcc1m6ym0 Content-length: 150032 RnJvbSAyY2YxNzUwN2I5MGZlOWIzMGJhNjVmNTRjYWM4ZjM3YjVmZmUxYmNl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEaWVnbyBOb3ZpbGxv IDxkbm92aWxsb0Bnb29nbGUuY29tPgpEYXRlOiBNb24sIDIxIEphbiAyMDEz IDE0OjUyOjA2IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIHpvbmUg YWxsb2NhdG9yLgoKVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBHQyB6b25lIGFs bG9jYXRvci4gIEl0IGlzIG5vdCB1c2VkIGFuZCBpdApwcm9kdWNlcyBzZXZl cmFsIHJlZ3Jlc3Npb25zIGluIHRoZSB0ZXN0c3VpdGUuICBGdXJ0aGVybW9y ZSwgaXQKY29tcGxpY2F0ZXMgdGhpbmdzIGZvciB0aGUgcGxhbiB0byBpbXBs ZW1lbnQgbWFudWFsIEdDIG1hcmtlcnMKKGh0dHA6Ly9nY2MuZ251Lm9yZy93 aWtpL2N4eC1jb252ZXJzaW9uL2djLWFsdGVybmF0aXZlcyNEb19HQ19tYXJr aW5nX21hbnVhbGx5KS4KClRlc3RlZCBvbiB4ODZfNjQgd2l0aCBzdGFuZGFy ZCBjaGVja2luZywgLS1lbmFibGUtY2hlY2tpbmc9Z2MgYW5kCi0tZW5hYmxl LWNoZWNraW5nPXJlbGVhc2UuCi0tLQogZ2NjL0NoYW5nZUxvZyAgICAgICAg fCAgIDQ5ICsKIGdjYy9NYWtlZmlsZS5pbiAgICAgIHwgICAgOSArLQogZ2Nj L2NvbmZpZ3VyZSAgICAgICAgfCAgIDI2ICstCiBnY2MvY29uZmlndXJlLmFj ICAgICB8ICAgMjQgKy0KIGdjYy9kb2MvaW5zdGFsbC50ZXhpIHwgICAgNiAt CiBnY2MvZ2VuZ3R5cGUuYyAgICAgICB8ICAxNDEgKy0tCiBnY2MvZ2djLWNv bW1vbi5jICAgICB8ICAgMTQgKy0KIGdjYy9nZ2MtaW50ZXJuYWwuaCAgIHwg ICAgNiArLQogZ2NjL2dnYy1ub25lLmMgICAgICAgfCAgIDM1IC0KIGdjYy9n Z2MtcGFnZS5jICAgICAgIHwgICAyNCArLQogZ2NjL2dnYy16b25lLmMgICAg ICAgfCAyNTI2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiBnY2MvZ2djLmggICAgICAgICAgICB8ICAxMDIg Ky0KIGdjYy9ydGwuYyAgICAgICAgICAgIHwgICAgNSArLQogZ2NjL3N0cmlu Z3Bvb2wuYyAgICAgfCAgICAyICstCiBnY2MvdHJlZS1waGlub2Rlcy5jICB8 ICAgIDQgLQogZ2NjL3RyZWUtc3NhbmFtZXMuYyAgfCAgICA1ICstCiBnY2Mv dHJlZS5jICAgICAgICAgICB8ICAgMTkgKy0KIGdjYy92YXJhc20uYyAgICAg ICAgIHwgICAgMiArLQogMTggZmlsZXMgY2hhbmdlZCwgMTEwIGluc2VydGlv bnMoKyksIDI4ODkgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg Z2NjL2dnYy16b25lLmMKCmRpZmYgLS1naXQgYS9nY2MvQ2hhbmdlTG9nIGIv Z2NjL0NoYW5nZUxvZwppbmRleCBiZjBhNDdiLi4yMGY0NGU4IDEwMDY0NAot LS0gYS9nY2MvQ2hhbmdlTG9nCisrKyBiL2djYy9DaGFuZ2VMb2cKQEAgLTEs MyArMSw1MiBAQAorMjAxMy0wMS0yNCAgRGllZ28gTm92aWxsbyAgPGRub3Zp bGxvQGdvb2dsZS5jb20+CisKKwkqIE1ha2VmaWxlLmluIChHR0MpOiBSZW1v dmUuICBSZXBsYWNlIGFsbCBpbnN0YW5jZXMgd2l0aAorCWdnYy1wYWdlLm8u CisJKGdnYy16b25lLm8pOiBSZW1vdmUuCisJKiBjb25maWd1cmUuYWM6IFJl bW92ZSBvcHRpb24gLS13aXRoLWdjLgorCSogY29uZmlndXJlOiBSZS1nZW5l cmF0ZS4KKwkqIGRvYy9pbnN0YWxsLnRleGk6IFJlbW92ZSBkb2N1bWVudGF0 aW9uIGZvciAtLXdpdGgtZ2MuCisJKiBnZW5ndHlwZS5jICh3cml0ZV9lbnVt X2RlZm4pOiBSZW1vdmUuICBVcGRhdGUgYWxsIHVzZXJzLgorCSh3cml0ZV9U eXBlc19wcm9jZXNzX2ZpZWxkKTogUmVtb3ZlIGdlbmVyYXRpb24gb2YgZ3Rf ZV8qIGFyZ3VtZW50LgorCShvdXRwdXRfdHlwZV9lbnVtKTogUmVtb3ZlLiAg VXBkYXRlIGFsbCB1c2Vycy4KKwkod3JpdGVfZW51bV9kZWZuKTogUmVtb3Zl LiAgVXBkYXRlIGFsbCB1c2Vycy4KKwkoZW51bSBhbGxvY196b25lKTogUmVt b3ZlLiAgVXBkYXRlIGFsbCB1c2Vycy4KKwkod3JpdGVfc3BsYXlfdHJlZV9h bGxvY2F0b3JfZGVmKTogUmVtb3ZlIGdlbmVyYXRpb24gb2YgZ3RfZV8qCisJ YXJndW1lbnQuCisJKiBnZ2MtY29tbW9uLmMgKGdnY19zcGxheV9hbGxvYyk6 IFJlbW92ZSBmaXJzdCBhcmd1bWVudC4KKwlVcGRhdGUgYWxsIGNhbGxlcnMu CisJKHN0cnVjdCBwdHJfZGF0YSk6IFJlbW92ZSBmaWVsZCBUWVBFLiAgVXBk YXRlIGFsbCB1c2Vycy4KKwkoZ3RfcGNoX25vdGVfb2JqZWN0KTogUmVtb3Zl IGFyZ3VtZW50IFRZUEUuICBVcGRhdGUgYWxsCisJdXNlcnMuCisJKiBnZ2Mt aW50ZXJuYWwuaCAoZ2djX3BjaF9hbGxvY19vYmplY3QpOiBSZW1vdmUgbGFz dCBhcmd1bWVudC4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCSogZ2NjL2dnYy1u b25lLmMgKGdnY19hbGxvY190eXBlZF9zdGF0KTogUmVtb3ZlLgorCShzdHJ1 Y3QgYWxsb2Nfem9uZSk6IFJlbW92ZS4KKwkoZ2djX2ludGVybmFsX2FsbG9j X3pvbmVfc3RhdCk6IFJlbW92ZS4KKwkoZ2djX2ludGVybmFsX2NsZWFyZWRf YWxsb2Nfem9uZV9zdGF0KTogUmVtb3ZlLgorCSogZ2djLXBhZ2UuYyAoZ2dj X2FsbG9jX3R5cGVkX3N0YXQpOiBSZW1vdmUuCisJKGdnY19wY2hfY291bnRf b2JqZWN0KTogUmVtb3ZlIGxhc3QgYXJndW1lbnQuICBVcGRhdGUgYWxsCisJ dXNlcnMuCisJKGdnY19wY2hfYWxsb2Nfb2JqZWN0KTogUmVtb3ZlIGxhc3Qg YXJndW1lbnQuICBVcGRhdGUgYWxsCisJdXNlcnMuCisJKHN0cnVjdCBhbGxv Y196b25lKTogUmVtb3ZlLgorCSogZ2djLXpvbmUuYzogUmVtb3ZlLgorCSog Z2djLmggKGd0X3BjaF9ub3RlX29iamVjdCk6IFJlbW92ZSBsYXN0IGFyZ3Vt ZW50LiAgVXBkYXRlCisJYWxsIHVzZXJzLgorCShzdHJ1Y3QgYWxsb2Nfem9u ZSk6IFJlbW92ZS4KKwkoZ2djX2FsbG9jX3R5cGVkX3N0YXQpOiBSZW1vdmUu CisJKGdnY19hbGxvY190eXBlZCk6IFJlbW92ZS4KKwkoZ2djX3NwbGF5X2Fs bG9jKTogUmVtb3ZlIGZpcnN0IGFyZ3VtZW50LgorCShydGxfem9uZSk6IFJl bW92ZS4gIFVwZGF0ZSBhbGwgdXNlcnMuCisJKHRyZWVfem9uZSk6IFJlbW92 ZS4gIFVwZGF0ZSBhbGwgdXNlcnMuCisJKHRyZWVfaWRfem9uZSk6IFJlbW92 ZS4gIFVwZGF0ZSBhbGwgdXNlcnMuCisJKGdnY19pbnRlcm5hbF96b25lX2Fs bG9jX3N0YXQpOiBSZW1vdmUuICBVcGRhdGUgYWxsIHVzZXJzLgorCShnZ2Nf aW50ZXJuYWxfem9uZV9jbGVhcmVkX2FsbG9jX3N0YXQpOiBSZW1vdmUuICBV cGRhdGUgYWxsCisJdXNlcnMuCisJKGdnY19pbnRlcm5hbF96b25lX3ZlY19h bGxvY19zdGF0KTogUmVtb3ZlLiAgVXBkYXRlIGFsbCB1c2Vycy4KKwkqIHRy ZWUtc3NhbmFtZXMuYzogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gem9uZSBhbGxv Y2F0b3IgaW4KKwljb21tZW50cy4KKwogMjAxMy0wMS0yNCAgR2VvcmctSm9o YW5uIExheSAgPGF2ckBnamxheS5kZT4KIAogCSogY29uZmlnL2F2ci9hdnIu YyAoYXZyX291dF9mcmFjdCk6IE1ha2UgcmVnaXN0ZXIgbnVtYmVycyB0aGF0 CmRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUu aW4KaW5kZXggNTViNGQyZC4uNmZlNjM0NSAxMDA2NDQKLS0tIGEvZ2NjL01h a2VmaWxlLmluCisrKyBiL2djYy9NYWtlZmlsZS5pbgpAQCAtNjYxLDkgKzY2 MSw2IEBAIExJQklOVExfREVQID0gQExJQklOVExfREVQQAogTElCSUNPTlYg PSBATElCSUNPTlZACiBMSUJJQ09OVl9ERVAgPSBATElCSUNPTlZfREVQQAog Ci0jIFRoZSBHQyBtZXRob2QgdG8gYmUgdXNlZCBvbiB0aGlzIHN5c3RlbS4K LUdHQz1AR0dDQC5vCi0KICMgSWYgYSBzdXBwbGVtZW50YXJ5IGxpYnJhcnkg aXMgYmVpbmcgdXNlZCBmb3IgdGhlIEdDLgogR0dDX0xJQj0KIApAQCAtMTE1 Nyw3ICsxMTU0LDcgQEAgT0JKUyA9IFwKIAlpbnNuLXByZWRzLm8gXAogCWlu c24tcmVjb2cubyBcCiAJaW5zbi1lbnVtcy5vIFwKLQkkKEdHQykgXAorCWdn Yy1wYWdlLm8gXAogCWFsaWFzLm8gXAogCWFsbG9jLXBvb2wubyBcCiAJYXV0 by1pbmMtZGVjLm8gXApAQCAtMjEyMCwxMCArMjExNyw2IEBAIGdnYy1wYWdl Lm86IGdnYy1wYWdlLmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5 cGVzLmggJChUTV9IKSAkKFJUTF9IKSAkKFRSCiAJJChGTEFHU19IKSAkKERJ QUdOT1NUSUNfQ09SRV9IKSAkKEdHQ19IKSAkKFRJTUVWQVJfSCkgJChUTV9Q X0gpICQoUEFSQU1TX0gpIFwKIAkkKFRSRUVfRkxPV19IKSAkKFBMVUdJTl9I KSAkKEdHQ19JTlRFUk5BTF9IKQogCi1nZ2Mtem9uZS5vOiBnZ2Mtem9uZS5j ICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkg JChSVExfSCkgXAotCSQoVFJFRV9IKSAkKEZMQUdTX0gpICQoRElBR05PU1RJ Q19DT1JFX0gpICQoR0dDX0gpICQoVElNRVZBUl9IKSAkKFRNX1BfSCkgXAot CSQoUEFSQU1TX0gpICQoQklUTUFQX0gpICQoUExVR0lOX0gpICQoR0dDX0lO VEVSTkFMX0gpCi0KIGdnYy1ub25lLm86IGdnYy1ub25lLmMgJChDT05GSUdf SCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChHR0NfSCkgXAogCSQoQkNP TkZJR19IKQogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2Nv bmZpZ3VyZQppbmRleCAxMGZmNWFlLi5hNGE3NzNhIDEwMDc1NQotLS0gYS9n Y2MvY29uZmlndXJlCisrKyBiL2djYy9jb25maWd1cmUKQEAgLTY3NCw3ICs2 NzQsNiBAQCBNQUlOVAogemxpYmluYwogemxpYmRpcgogSE9TVF9MSUJTCi1H R0MKIGxpYmdjY192aXNpYmlsaXR5CiBnY2NfY3ZfcmVhZGVsZgogZ2NjX2N2 X29iamR1bXAKQEAgLTE2NzAsNyArMTY2OSw4IEBAIE9wdGlvbmFsIFBhY2th Z2VzOgogICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMg Y29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCiAgIC0td2l0aC1w bHVnaW4tbGQ9W0FSR10gIHNwZWNpZnkgdGhlIHBsdWdpbiBsaW5rZXIKICAg LS13aXRoLWxvbmctZG91YmxlLTEyOCAgdXNlIDEyOC1iaXQgbG9uZyBkb3Vi bGUgYnkgZGVmYXVsdAotICAtLXdpdGgtZ2M9e3BhZ2Usem9uZX0gICBjaG9v c2UgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20gdG8gdXNlIHdp dGgKKyAgLS13aXRoLWdjPXtwYWdlLHpvbmV9ICAgdGhpcyBvcHRpb24gaXMg bm90IHN1cHBvcnRlZCBhbnltb3JlLiBJdCB1c2VkIHRvCisgICAgICAgICAg ICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9u IG1lY2hhbmlzbSB0byB1c2Ugd2l0aAogICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgY29tcGlsZXIKICAgLS13aXRoLXN5c3RlbS16bGliICAgICAg dXNlIGluc3RhbGxlZCBsaWJ6CiAgIC0td2l0aC1saW5rZXItaGFzaC1zdHls ZT17c3lzdixnbnUsYm90aH0KQEAgLTI2ODA3LDMxICsyNjgwNywxNSBAQCBm aQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGVfcGhkciIgPiY1CiAk YXNfZWNobyAiJGdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZV9waGRyIiA+JjY7 IH0KIAotIyBGaW5kIG91dCB3aGF0IEdDIGltcGxlbWVudGF0aW9uIHdlIHdh bnQsIG9yIG1heSwgdXNlLgorIyBXZSBubyBsb25nZXIgc3VwcG9ydCBkaWZm ZXJlbnQgR0MgbWVjaGFuaXNtcy4gIEVtaXQgYW4gZXJyb3IgaWYKKyMgdGhl IHVzZXIgY29uZmlndXJlcyB3aXRoIC0td2l0aC1nYy4KIAogIyBDaGVjayB3 aGV0aGVyIC0td2l0aC1nYyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhf Z2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2djOyBj YXNlICIkd2l0aHZhbCIgaW4KLSAgcGFnZSkKLSAgICBHR0M9Z2djLSR3aXRo dmFsCi0gICAgOzsKLSAgem9uZSkKLSAgICBHR0M9Z2djLSR3aXRodmFsCi0K LSRhc19lY2hvICIjZGVmaW5lIEdHQ19aT05FIDEiID4+Y29uZmRlZnMuaAot Ci0gICAgOzsKLSAgKikKLSAgICBhc19mbl9lcnJvciAiJHdpdGh2YWwgaXMg YW4gaW52YWxpZCBvcHRpb24gdG8gLS13aXRoLWdjIiAiJExJTkVOTyIgNQot ICAgIDs7Ci1lc2FjCi1lbHNlCi0gIEdHQz1nZ2MtcGFnZQorICB3aXRodmFs PSR3aXRoX2djOyBhc19mbl9lcnJvciAiQ29uZmlndXJlIG9wdGlvbiAtLXdp dGgtZ2MgaXMgb25seSBzdXBwb3J0ZWQgdXAgdG8gR0NDIDQuNy54IiAiJExJ TkVOTyIgNQogZmkKIAogCi1lY2hvICJVc2luZyAkR0dDIGZvciBnYXJiYWdl IGNvbGxlY3Rpb24uIgotCiAjIExpYnJhcmllcyB0byB1c2Ugb24gdGhlIGhv c3QuICBUaGlzIHdpbGwgbm9ybWFsbHkgYmUgc2V0IGJ5IHRoZSB0b3AKICMg bGV2ZWwgTWFrZWZpbGUuICBIZXJlIHdlIHNpbXBseSBjYXB0dXJlIHRoZSB2 YWx1ZSBmb3Igb3VyIE1ha2VmaWxlLgogaWYgdGVzdCAteiAiJHtIT1NUX0xJ QlMrc2V0fSI7IHRoZW4KZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMg Yi9nY2MvY29uZmlndXJlLmFjCmluZGV4IDM3MDNhMjAuLjI0NTY4ZjEgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrIGIvZ2NjL2NvbmZpZ3Vy ZS5hYwpAQCAtNDc5NywyNiArNDc5NywxNCBAQCBpZiB0ZXN0IHgkZ2NjX2N2 X3RhcmdldF9kbF9pdGVyYXRlX3BoZHIgPSB4eWVzOyB0aGVuCiBmaQogQUNf TVNHX1JFU1VMVCgkZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlX3BoZHIpCiAK LSMgRmluZCBvdXQgd2hhdCBHQyBpbXBsZW1lbnRhdGlvbiB3ZSB3YW50LCBv ciBtYXksIHVzZS4KKyMgV2Ugbm8gbG9uZ2VyIHN1cHBvcnQgZGlmZmVyZW50 IEdDIG1lY2hhbmlzbXMuICBFbWl0IGFuIGVycm9yIGlmCisjIHRoZSB1c2Vy IGNvbmZpZ3VyZXMgd2l0aCAtLXdpdGgtZ2MuCiBBQ19BUkdfV0lUSChnYywK IFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdjPXtwYWdlLHpvbmV9XSwKLQkJ W2Nob29zZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSB0byB1 c2UKLSAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY29tcGlsZXJdKV0sCi1b Y2FzZSAiJHdpdGh2YWwiIGluCi0gIHBhZ2UpCi0gICAgR0dDPWdnYy0kd2l0 aHZhbAotICAgIDs7Ci0gIHpvbmUpCi0gICAgR0dDPWdnYy0kd2l0aHZhbAot ICAgIEFDX0RFRklORShHR0NfWk9ORSwgMSwgW0RlZmluZSBpZiB0aGUgem9u ZSBjb2xsZWN0b3IgaXMgaW4gdXNlXSkKLSAgICA7OwotICAqKQotICAgIEFD X01TR19FUlJPUihbJHdpdGh2YWwgaXMgYW4gaW52YWxpZCBvcHRpb24gdG8g LS13aXRoLWdjXSkKLSAgICA7OwotZXNhY10sCi1bR0dDPWdnYy1wYWdlXSkK LUFDX1NVQlNUKEdHQykKLWVjaG8gIlVzaW5nICRHR0MgZm9yIGdhcmJhZ2Ug Y29sbGVjdGlvbi4iCisJCVt0aGlzIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVk IGFueW1vcmUuICBJdCB1c2VkIHRvIGNob29zZQorCQkgdGhlIGdhcmJhZ2Ug Y29sbGVjdGlvbiBtZWNoYW5pc20gdG8gdXNlIHdpdGggdGhlIGNvbXBpbGVy XSldLAorW0FDX01TR19FUlJPUihbQ29uZmlndXJlIG9wdGlvbiAtLXdpdGgt Z2MgaXMgb25seSBzdXBwb3J0ZWQgdXAgdG8gR0NDIDQuNy54XSldLAorW10p CiAKICMgTGlicmFyaWVzIHRvIHVzZSBvbiB0aGUgaG9zdC4gIFRoaXMgd2ls bCBub3JtYWxseSBiZSBzZXQgYnkgdGhlIHRvcAogIyBsZXZlbCBNYWtlZmls ZS4gIEhlcmUgd2Ugc2ltcGx5IGNhcHR1cmUgdGhlIHZhbHVlIGZvciBvdXIg TWFrZWZpbGUuCmRpZmYgLS1naXQgYS9nY2MvZG9jL2luc3RhbGwudGV4aSBi L2djYy9kb2MvaW5zdGFsbC50ZXhpCmluZGV4IDg0MTljYTIuLjkyYmZjOGIg MTAwNjQ0Ci0tLSBhL2djYy9kb2MvaW5zdGFsbC50ZXhpCisrKyBiL2djYy9k b2MvaW5zdGFsbC50ZXhpCkBAIC0xNTIzLDEyICsxNTIzLDYgQEAgV2hlbiB0 aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1h dGlvbiBvbiBtZW1vcnkKIGFsbG9jYXRpb24gaXMgZ2F0aGVyZWQuICBUaGlz IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB1c2luZwogQG9wdGlvbnst Zm1lbS1yZXBvcnR9LgogCi1AaXRlbSAtLXdpdGgtZ2MKLUBpdGVteCAtLXdp dGgtZ2M9QHZhcntjaG9pY2V9Ci1XaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4g c3BlY2lmeSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaW1wbGVtZW50YXRpb24K LXVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiAgQHZhcntj aG9pY2V9IGNhbiBiZSBvbmUgb2YKLUBzYW1we3BhZ2V9IGFuZCBAc2FtcHt6 b25lfSwgd2hlcmUgQHNhbXB7cGFnZX0gaXMgdGhlIGRlZmF1bHQuCi0KIEBp dGVtIC0tZW5hYmxlLW5scwogQGl0ZW14IC0tZGlzYWJsZS1ubHMKIFRoZSBA b3B0aW9uey0tZW5hYmxlLW5sc30gb3B0aW9uIGVuYWJsZXMgTmF0aXZlIExh bmd1YWdlIFN1cHBvcnQgKE5MUyksCmRpZmYgLS1naXQgYS9nY2MvZ2VuZ3R5 cGUuYyBiL2djYy9nZW5ndHlwZS5jCmluZGV4IDJhMTU4ZTkuLmEyZWViZjIg MTAwNjQ0Ci0tLSBhL2djYy9nZW5ndHlwZS5jCisrKyBiL2djYy9nZW5ndHlw ZS5jCkBAIC0yNDE0LDcgKzI0MTQsNiBAQCBzdGF0aWMgdm9pZCB3cml0ZV9s b2NhbF9mdW5jX2Zvcl9zdHJ1Y3R1cmUKICAgKGNvbnN0X3R5cGVfcCBvcmln X3MsIHR5cGVfcCBzLCB0eXBlX3AgKnBhcmFtKTsKIHN0YXRpYyB2b2lkIHdy aXRlX2xvY2FsIChvdXRmX3Agb3V0cHV0X2hlYWRlciwKIAkJCSB0eXBlX3Ag c3RydWN0dXJlcywgdHlwZV9wIHBhcmFtX3N0cnVjdHMpOwotc3RhdGljIHZv aWQgd3JpdGVfZW51bV9kZWZuICh0eXBlX3Agc3RydWN0dXJlcywgdHlwZV9w IHBhcmFtX3N0cnVjdHMpOwogc3RhdGljIGludCBjb250YWluc19zY2FsYXJf cCAodHlwZV9wIHQpOwogc3RhdGljIHZvaWQgcHV0X21hbmdsZWRfZmlsZW5h bWUgKG91dGZfcCwgY29uc3QgaW5wdXRfZmlsZSAqKTsKIHN0YXRpYyB2b2lk IGZpbmlzaF9yb290X3RhYmxlIChzdHJ1Y3QgZmxpc3QgKmZscCwgY29uc3Qg Y2hhciAqcGZ4LApAQCAtMzE2OSwyMCArMzE2OCw2IEBAIHdyaXRlX3R5cGVz X3Byb2Nlc3NfZmllbGQgKHR5cGVfcCBmLCBjb25zdCBzdHJ1Y3Qgd2Fsa190 eXBlX2RhdGEgKmQpCiAJICAgIH0KIAkgIGVsc2UKIAkgICAgb3ByaW50ZiAo ZC0+b2YsICIsIGd0XyVzYV8lcyIsIHd0ZC0+cGFyYW1fcHJlZml4LCBkLT5w cmV2X3ZhbFswXSk7Ci0KLQkgIGlmIChmLT51LnAtPmtpbmQgPT0gVFlQRV9Q QVJBTV9TVFJVQ1QKLQkgICAgICAmJiBmLT51LnAtPnUucy5saW5lLmZpbGUg IT0gTlVMTCkKLQkgICAgewotCSAgICAgIG9wcmludGYgKGQtPm9mLCAiLCBn dF9lXyIpOwotCSAgICAgIG91dHB1dF9tYW5nbGVkX3R5cGVuYW1lIChkLT5v ZiwgZik7Ci0JICAgIH0KLQkgIGVsc2UgaWYgKHVuaW9uX29yX3N0cnVjdF9w IChmKSAmJiBmLT51LnAtPnUucy5saW5lLmZpbGUgIT0gTlVMTCkKLQkgICAg ewotCSAgICAgIG9wcmludGYgKGQtPm9mLCAiLCBndF9nZ2NfZV8iKTsKLQkg ICAgICBvdXRwdXRfbWFuZ2xlZF90eXBlbmFtZSAoZC0+b2YsIGYpOwotCSAg ICB9Ci0JICBlbHNlCi0JICAgIG9wcmludGYgKGQtPm9mLCAiLCBndF90eXBl c19lbnVtX2xhc3QiKTsKIAl9CiAgICAgICBvcHJpbnRmIChkLT5vZiwgIik7 XG4iKTsKICAgICAgIGlmIChkLT5yZW9yZGVyX2ZuICYmIHd0ZC0+cmVvcmRl cl9ub3RlX3JvdXRpbmUpCkBAIC0zMjI3LDI1ICszMjEyLDYgQEAgd3JpdGVf dHlwZXNfcHJvY2Vzc19maWVsZCAodHlwZV9wIGYsIGNvbnN0IHN0cnVjdCB3 YWxrX3R5cGVfZGF0YSAqZCkKICAgICB9CiB9CiAKLS8qIEEgc3Vicm91dGlu ZSBvZiB3cml0ZV9mdW5jX2Zvcl9zdHJ1Y3R1cmUuICBXcml0ZSB0aGUgZW51 bSB0YWcgZm9yIFMuICAqLwotCi1zdGF0aWMgdm9pZAotb3V0cHV0X3R5cGVf ZW51bSAob3V0Zl9wIG9mLCB0eXBlX3AgcykKLXsKLSAgaWYgKHMtPmtpbmQg PT0gVFlQRV9QQVJBTV9TVFJVQ1QgJiYgcy0+dS5wYXJhbV9zdHJ1Y3QubGlu ZS5maWxlICE9IE5VTEwpCi0gICAgewotICAgICAgb3ByaW50ZiAob2YsICIs IGd0X2VfIik7Ci0gICAgICBvdXRwdXRfbWFuZ2xlZF90eXBlbmFtZSAob2Ys IHMpOwotICAgIH0KLSAgZWxzZSBpZiAodW5pb25fb3Jfc3RydWN0X3AgKHMp ICYmIHMtPnUucy5saW5lLmZpbGUgIT0gTlVMTCkKLSAgICB7Ci0gICAgICBv cHJpbnRmIChvZiwgIiwgZ3RfZ2djX2VfIik7Ci0gICAgICBvdXRwdXRfbWFu Z2xlZF90eXBlbmFtZSAob2YsIHMpOwotICAgIH0KLSAgZWxzZQotICAgIG9w cmludGYgKG9mLCAiLCBndF90eXBlc19lbnVtX2xhc3QiKTsKLX0KLQogLyog UmV0dXJuIGFuIG91dHB1dCBmaWxlIHRoYXQgaXMgc3VpdGFibGUgZm9yIGRl ZmluaXRpb25zIHdoaWNoIGNhbgogICAgcmVmZXJlbmNlIHN0cnVjdCBTICov CiAKQEAgLTM1MjAsNyArMzQ4Niw2IEBAIHdyaXRlX2Z1bmNfZm9yX3N0cnVj dHVyZSAodHlwZV9wIG9yaWdfcywgdHlwZV9wIHMsIHR5cGVfcCAqcGFyYW0s CiAJewogCSAgb3ByaW50ZiAoZC5vZiwgIiwgeCwgZ3RfJXNfIiwgd3RkLT5w YXJhbV9wcmVmaXgpOwogCSAgb3V0cHV0X21hbmdsZWRfdHlwZW5hbWUgKGQu b2YsIG9yaWdfcyk7Ci0JICBvdXRwdXRfdHlwZV9lbnVtIChkLm9mLCBvcmln X3MpOwogCX0KICAgICAgIG9wcmludGYgKGQub2YsICIpKVxuIik7CiAgICAg fQpAQCAtMzUzNCw3ICszNDk5LDYgQEAgd3JpdGVfZnVuY19mb3Jfc3RydWN0 dXJlICh0eXBlX3Agb3JpZ19zLCB0eXBlX3AgcywgdHlwZV9wICpwYXJhbSwK IAl7CiAJICBvcHJpbnRmIChkLm9mLCAiLCB4bGltaXQsIGd0XyVzXyIsIHd0 ZC0+cGFyYW1fcHJlZml4KTsKIAkgIG91dHB1dF9tYW5nbGVkX3R5cGVuYW1l IChkLm9mLCBvcmlnX3MpOwotCSAgb3V0cHV0X3R5cGVfZW51bSAoZC5vZiwg b3JpZ19zKTsKIAl9CiAgICAgICBvcHJpbnRmIChkLm9mLCAiKSlcbiIpOwog ICAgICAgaWYgKGNoYWluX2NpcmN1bGFyICE9IE5VTEwpCkBAIC0zNTY4LDcg KzM1MzIsNiBAQCB3cml0ZV9mdW5jX2Zvcl9zdHJ1Y3R1cmUgKHR5cGVfcCBv cmlnX3MsIHR5cGVfcCBzLCB0eXBlX3AgKnBhcmFtLAogCSAgICB7CiAJICAg ICAgb3ByaW50ZiAoZC5vZiwgIiwgeHByZXYsIGd0XyVzXyIsIHd0ZC0+cGFy YW1fcHJlZml4KTsKIAkgICAgICBvdXRwdXRfbWFuZ2xlZF90eXBlbmFtZSAo ZC5vZiwgb3JpZ19zKTsKLQkgICAgICBvdXRwdXRfdHlwZV9lbnVtIChkLm9m LCBvcmlnX3MpOwogCSAgICB9CiAJICBvcHJpbnRmIChkLm9mLCAiKTtcbiIp OwogCSAgb3ByaW50ZiAoZC5vZiwgIiAgICAgIH1cbiIpOwpAQCAtMzU4MCw3 ICszNTQzLDYgQEAgd3JpdGVfZnVuY19mb3Jfc3RydWN0dXJlICh0eXBlX3Ag b3JpZ19zLCB0eXBlX3AgcywgdHlwZV9wICpwYXJhbSwKIAkgICAgewogCSAg ICAgIG9wcmludGYgKGQub2YsICIsIHhsaW1pdCwgZ3RfJXNfIiwgd3RkLT5w YXJhbV9wcmVmaXgpOwogCSAgICAgIG91dHB1dF9tYW5nbGVkX3R5cGVuYW1l IChkLm9mLCBvcmlnX3MpOwotCSAgICAgIG91dHB1dF90eXBlX2VudW0gKGQu b2YsIG9yaWdfcyk7CiAJICAgIH0KIAkgIG9wcmludGYgKGQub2YsICIpKTtc biIpOwogCSAgaWYgKG1hcmtfaG9va19uYW1lICYmICF3dGQtPnNraXBfaG9v a3MpCkBAIC00MDkxLDUwICs0MDUzLDYgQEAgd3JpdGVfbG9jYWwgKG91dGZf cCBvdXRwdXRfaGVhZGVyLCB0eXBlX3Agc3RydWN0dXJlcywgdHlwZV9wIHBh cmFtX3N0cnVjdHMpCiAJICAgICAgICYmIHN0cm5jbXAgKHMtPnUucy50YWcs ICJhbm9ueW1vdXMiLCBzdHJsZW4gKCJhbm9ueW1vdXMiKSkpKSkpCiAKIAot LyogV3JpdGUgb3V0IHRoZSAnZW51bScgZGVmaW5pdGlvbiBmb3IgZ3RfdHlw ZXNfZW51bS4gICovCi0KLXN0YXRpYyB2b2lkCi13cml0ZV9lbnVtX2RlZm4g KHR5cGVfcCBzdHJ1Y3R1cmVzLCB0eXBlX3AgcGFyYW1fc3RydWN0cykKLXsK LSAgdHlwZV9wIHM7Ci0gIGludCBuYnN0cnVjdCA9IDA7Ci0gIGludCBuYnBh cmFtc3RydWN0ID0gMDsKLQotICBpZiAoIWhlYWRlcl9maWxlKQotICAgIHJl dHVybjsKLSAgb3ByaW50ZiAoaGVhZGVyX2ZpbGUsICJcbi8qIEVudW1lcmF0 aW9uIG9mIHR5cGVzIGtub3duLiAgKi9cbiIpOwotICBvcHJpbnRmIChoZWFk ZXJfZmlsZSwgImVudW0gZ3RfdHlwZXNfZW51bSB7XG4iKTsKLSAgZm9yIChz ID0gc3RydWN0dXJlczsgczsgcyA9IHMtPm5leHQpCi0gICAgaWYgKFVTRURf QllfVFlQRURfR0NfUCAocykpCi0gICAgICB7Ci0JbmJzdHJ1Y3QrKzsKLQlE QkdQUklOVEYgKCJ3cml0ZV9lbnVtX2RlZm4gcyBAICVwIG5ic3RydWN0ICVk IiwKLQkJICAgKHZvaWQqKSBzLCBuYnN0cnVjdCk7Ci0JaWYgKHVuaW9uX29y X3N0cnVjdF9wIChzKSkKLQkgIERCR1BSSU5URiAoIndyaXRlX2VudW1fZGVm biBzICVwICMlZCBpcyB1bmlvbm9yc3RydWN0IHRhZ2dlZCAlcyIsCi0JCSAg ICAgKHZvaWQqKSBzLCBuYnN0cnVjdCwgcy0+dS5zLnRhZyk7Ci0Jb3ByaW50 ZiAoaGVhZGVyX2ZpbGUsICIgZ3RfZ2djX2VfIik7Ci0Jb3V0cHV0X21hbmds ZWRfdHlwZW5hbWUgKGhlYWRlcl9maWxlLCBzKTsKLQlvcHJpbnRmIChoZWFk ZXJfZmlsZSwgIixcbiIpOwotICAgICAgfQotICBmb3IgKHMgPSBwYXJhbV9z dHJ1Y3RzOyBzOyBzID0gcy0+bmV4dCkKLSAgICBpZiAocy0+Z2NfdXNlZCA9 PSBHQ19QT0lOVEVEX1RPKQotICAgICAgewotCW5icGFyYW1zdHJ1Y3QrKzsK LQlEQkdQUklOVEYgKCJ3cml0ZV9lbnVtX2RlZm4gcyAlcCBuYnBhcmFtc3Ry dWN0ICVkIiwKLQkJICAgKHZvaWQqKSBzLCBuYnBhcmFtc3RydWN0KTsKLQlv cHJpbnRmIChoZWFkZXJfZmlsZSwgIiBndF9lXyIpOwotCW91dHB1dF9tYW5n bGVkX3R5cGVuYW1lIChoZWFkZXJfZmlsZSwgcyk7Ci0Jb3ByaW50ZiAoaGVh ZGVyX2ZpbGUsICIsXG4iKTsKLSAgICAgIH0KLSAgb3ByaW50ZiAoaGVhZGVy X2ZpbGUsICIgZ3RfdHlwZXNfZW51bV9sYXN0XG4iKTsKLSAgb3ByaW50ZiAo aGVhZGVyX2ZpbGUsICJ9O1xuIik7Ci0gIGlmICh2ZXJib3NpdHlfbGV2ZWwg Pj0gMikKLSAgICBwcmludGYgKCIlcyBoYW5kbGVkICVkIEdUWS1lZCBzdHJ1 Y3R1cmVzICYgJWQgcGFyYW1ldGVyaXplZCBzdHJ1Y3R1cmVzLlxuIiwKLQkg ICAgcHJvZ25hbWUsIG5ic3RydWN0LCBuYnBhcmFtc3RydWN0KTsKLQotfQot CiAvKiBNaWdodCBUIGNvbnRhaW4gYW55IG5vbi1wb2ludGVyIGVsZW1lbnRz PyAgKi8KIAogc3RhdGljIGludApAQCAtNDgwNCwzOCArNDcyMiwzMCBAQCB2 YXJpYWJsZV9zaXplX3AgKGNvbnN0IHR5cGVfcCBzKQogCiBlbnVtIGFsbG9j X3F1YW50aXR5CiB7IHNpbmdsZSwgdmVjdG9yIH07Ci1lbnVtIGFsbG9jX3pv bmUKLXsgYW55X3pvbmUsIHNwZWNpZmljX3pvbmUgfTsKIAogLyogV3JpdGVz IG9uZSB0eXBlZCBhbGxvY2F0b3IgZGVmaW5pdGlvbiBpbnRvIG91dHB1dCBG IGZvciB0eXBlCiAgICBpZGVudGlmaWVyIFRZUEVfTkFNRSB3aXRoIG9wdGlv bmFsIHR5cGUgc3BlY2lmaWVyIFRZUEVfU1BFQ0lGSUVSLgogICAgVGhlIGFs bG9jYXRvciBuYW1lIHdpbGwgY29udGFpbiBBTExPQ0FUT1JfVFlQRS4gIElm IFZBUklBQkxFX1NJWkUKICAgIGlzIHRydWUsIHRoZSBhbGxvY2F0b3Igd2ls bCBoYXZlIGFuIGV4dHJhIHBhcmFtZXRlciBzcGVjaWZ5aW5nCiAgICBudW1i ZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuICBJZiBRVUFOVElUWSBpcyBzZXQg dG8gVkVDVE9SLCBhCi0gICB2ZWN0b3IgYWxsb2NhdG9yIHdpbGwgYmUgb3V0 cHV0LCBpZiBaT05FIGlzIHNldCB0byBTUEVDSUZJQ19aT05FLAotICAgdGhl IGFsbG9jYXRvciB3aWxsIGJlIHpvbmUtc3BlY2lmaWMuICAqLworICAgdmVj dG9yIGFsbG9jYXRvciB3aWxsIGJlIG91dHB1dC4gICovCiAKIHN0YXRpYyB2 b2lkCiB3cml0ZV90eXBlZF9hbGxvY19kZWYgKG91dGZfcCBmLCAKICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCB2YXJpYWJsZV9zaXplLCBjb25zdCBj aGFyICp0eXBlX3NwZWNpZmllciwKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqdHlwZV9uYW1lLCBjb25zdCBjaGFyICphbGxvY2F0b3Jf dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbGxvY19xdWFu dGl0eSBxdWFudGl0eSwgZW51bSBhbGxvY196b25lIHpvbmUpCisgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gYWxsb2NfcXVhbnRpdHkgcXVhbnRpdHkp CiB7CiAgIGJvb2wgdHdvX2FyZ3MgPSB2YXJpYWJsZV9zaXplICYmIChxdWFu dGl0eSA9PSB2ZWN0b3IpOwotICBib29sIHRoaXJkX2FyZyA9ICgoem9uZSA9 PSBzcGVjaWZpY196b25lKQotCQkgICAgJiYgKHZhcmlhYmxlX3NpemUgfHwg KHF1YW50aXR5ID09IHZlY3RvcikpKTsKICAgZ2NjX2Fzc2VydCAoZiAhPSBO VUxMKTsKICAgY29uc3QgY2hhciAqdHlwZV9uYW1lX2FzX2lkID0gZmlsdGVy X3R5cGVfbmFtZSAodHlwZV9uYW1lKTsKICAgb3ByaW50ZiAoZiwgIiNkZWZp bmUgZ2djX2FsbG9jXyVzJXMiLCBhbGxvY2F0b3JfdHlwZSwgdHlwZV9uYW1l X2FzX2lkKTsKLSAgb3ByaW50ZiAoZiwgIiglcyVzJXMlcyVzKSAiLAorICBv cHJpbnRmIChmLCAiKCVzJXMlcykgIiwKIAkgICAodmFyaWFibGVfc2l6ZSA/ ICJTSVpFIiA6ICIiKSwKIAkgICAodHdvX2FyZ3MgPyAiLCAiIDogIiIpLAot CSAgIChxdWFudGl0eSA9PSB2ZWN0b3IpID8gIm4iIDogIiIsCi0JICAgKHRo aXJkX2FyZyA/ICIsICIgOiAiIiksICh6b25lID09IHNwZWNpZmljX3pvbmUp ID8gInoiIDogIiIpOworCSAgIChxdWFudGl0eSA9PSB2ZWN0b3IpID8gIm4i IDogIiIpOwogICBvcHJpbnRmIChmLCAiKCglcyVzICopIiwgdHlwZV9zcGVj aWZpZXIsIHR5cGVfbmFtZSk7CiAgIG9wcmludGYgKGYsICIoZ2djX2ludGVy bmFsXyVzYWxsb2Nfc3RhdCAoIiwgYWxsb2NhdG9yX3R5cGUpOwotICBpZiAo em9uZSA9PSBzcGVjaWZpY196b25lKQotICAgIG9wcmludGYgKGYsICJ6LCAi KTsKICAgaWYgKHZhcmlhYmxlX3NpemUpCiAgICAgb3ByaW50ZiAoZiwgIlNJ WkUiKTsKICAgZWxzZQpAQCAtNDg1MywxMiArNDc2MywxMSBAQCB3cml0ZV90 eXBlZF9hbGxvY19kZWYgKG91dGZfcCBmLAogc3RhdGljIHZvaWQKIHdyaXRl X3R5cGVkX3N0cnVjdF9hbGxvY19kZWYgKG91dGZfcCBmLAogCQkJICAgICAg Y29uc3QgdHlwZV9wIHMsIGNvbnN0IGNoYXIgKmFsbG9jYXRvcl90eXBlLAot CQkJICAgICAgZW51bSBhbGxvY19xdWFudGl0eSBxdWFudGl0eSwKLQkJCSAg ICAgIGVudW0gYWxsb2Nfem9uZSB6b25lKQorCQkJICAgICAgZW51bSBhbGxv Y19xdWFudGl0eSBxdWFudGl0eSkKIHsKICAgZ2NjX2Fzc2VydCAodW5pb25f b3Jfc3RydWN0X3AgKHMpKTsKICAgd3JpdGVfdHlwZWRfYWxsb2NfZGVmIChm LCB2YXJpYWJsZV9zaXplX3AgKHMpLCBnZXRfdHlwZV9zcGVjaWZpZXIgKHMp LAotICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnUucy50YWcsIGFsbG9j YXRvcl90eXBlLCBxdWFudGl0eSwgem9uZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+dS5zLnRhZywgYWxsb2NhdG9yX3R5cGUsIHF1YW50aXR5 KTsKIH0KIAogLyogV3JpdGVzIGEgdHlwZWQgYWxsb2NhdG9yIGRlZmluaXRp b24gaW50byBvdXRwdXQgRiBmb3IgYSB0eXBlZGVmIFAsCkBAIC00ODY3LDEx ICs0Nzc2LDEwIEBAIHdyaXRlX3R5cGVkX3N0cnVjdF9hbGxvY19kZWYgKG91 dGZfcCBmLAogc3RhdGljIHZvaWQKIHdyaXRlX3R5cGVkX3R5cGVkZWZfYWxs b2NfZGVmIChvdXRmX3AgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBwYWlyX3AgcCwgY29uc3QgY2hhciAqYWxsb2NhdG9yX3R5 cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbGxv Y19xdWFudGl0eSBxdWFudGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIGFsbG9jX3pvbmUgem9uZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIGFsbG9jX3F1YW50aXR5IHF1YW50aXR5 KQogewogICB3cml0ZV90eXBlZF9hbGxvY19kZWYgKGYsIHZhcmlhYmxlX3Np emVfcCAocC0+dHlwZSksICIiLCBwLT5uYW1lLAotICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbG9jYXRvcl90eXBlLCBxdWFudGl0eSwgem9uZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGUsIHF1YW50 aXR5KTsKIH0KIAogLyogV3JpdGVzIHR5cGVkIGFsbG9jYXRvciBkZWZpbml0 aW9ucyBpbnRvIG91dHB1dCBGIGZvciB0aGUgdHlwZXMgaW4KQEAgLTQ4OTcs MTYgKzQ4MDUsMTAgQEAgd3JpdGVfdHlwZWRfYWxsb2NfZGVmbnMgKG91dGZf cCBmLAogICAgICAgaWYgKG5iX3BsdWdpbl9maWxlcyA+IDAgCiAJICAmJiAo KHMtPnUucy5saW5lLmZpbGUgPT0gTlVMTCkgfHwgIXMtPnUucy5saW5lLmZp bGUtPmlucGlzcGx1Z2luKSkKIAljb250aW51ZTsKLSAgICAgIHdyaXRlX3R5 cGVkX3N0cnVjdF9hbGxvY19kZWYgKGYsIHMsICIiLCBzaW5nbGUsIGFueV96 b25lKTsKLSAgICAgIHdyaXRlX3R5cGVkX3N0cnVjdF9hbGxvY19kZWYgKGYs IHMsICJjbGVhcmVkXyIsIHNpbmdsZSwgYW55X3pvbmUpOwotICAgICAgd3Jp dGVfdHlwZWRfc3RydWN0X2FsbG9jX2RlZiAoZiwgcywgInZlY18iLCB2ZWN0 b3IsIGFueV96b25lKTsKLSAgICAgIHdyaXRlX3R5cGVkX3N0cnVjdF9hbGxv Y19kZWYgKGYsIHMsICJjbGVhcmVkX3ZlY18iLCB2ZWN0b3IsIGFueV96b25l KTsKLSAgICAgIHdyaXRlX3R5cGVkX3N0cnVjdF9hbGxvY19kZWYgKGYsIHMs ICJ6b25lXyIsIHNpbmdsZSwgc3BlY2lmaWNfem9uZSk7Ci0gICAgICB3cml0 ZV90eXBlZF9zdHJ1Y3RfYWxsb2NfZGVmIChmLCBzLCAiem9uZV9jbGVhcmVk XyIsIHNpbmdsZSwKLQkJCQkgICAgc3BlY2lmaWNfem9uZSk7Ci0gICAgICB3 cml0ZV90eXBlZF9zdHJ1Y3RfYWxsb2NfZGVmIChmLCBzLCAiem9uZV92ZWNf IiwgdmVjdG9yLCBzcGVjaWZpY196b25lKTsKLSAgICAgIHdyaXRlX3R5cGVk X3N0cnVjdF9hbGxvY19kZWYgKGYsIHMsICJ6b25lX2NsZWFyZWRfdmVjXyIs IHZlY3RvciwKLQkJCQkgICAgc3BlY2lmaWNfem9uZSk7CisgICAgICB3cml0 ZV90eXBlZF9zdHJ1Y3RfYWxsb2NfZGVmIChmLCBzLCAiIiwgc2luZ2xlKTsK KyAgICAgIHdyaXRlX3R5cGVkX3N0cnVjdF9hbGxvY19kZWYgKGYsIHMsICJj bGVhcmVkXyIsIHNpbmdsZSk7CisgICAgICB3cml0ZV90eXBlZF9zdHJ1Y3Rf YWxsb2NfZGVmIChmLCBzLCAidmVjXyIsIHZlY3Rvcik7CisgICAgICB3cml0 ZV90eXBlZF9zdHJ1Y3RfYWxsb2NfZGVmIChmLCBzLCAiY2xlYXJlZF92ZWNf IiwgdmVjdG9yKTsKICAgICB9CiAKICAgb3ByaW50ZiAoZiwgIlxuLyogQWxs b2NhdG9ycyBmb3Iga25vd24gdHlwZWRlZnMuICAqL1xuIik7CkBAIC00OTIz LDE1ICs0ODI1LDEwIEBAIHdyaXRlX3R5cGVkX2FsbG9jX2RlZm5zIChvdXRm X3AgZiwKIAkgIGlmICghZmlsb2MgfHwgIWZpbG9jLT5maWxlLT5pbnBpc3Bs dWdpbikKIAkgICAgY29udGludWU7CiAJfTsKLSAgICAgIHdyaXRlX3R5cGVk X3R5cGVkZWZfYWxsb2NfZGVmIChmLCBwLCAiIiwgc2luZ2xlLCBhbnlfem9u ZSk7Ci0gICAgICB3cml0ZV90eXBlZF90eXBlZGVmX2FsbG9jX2RlZiAoZiwg cCwgImNsZWFyZWRfIiwgc2luZ2xlLCBhbnlfem9uZSk7Ci0gICAgICB3cml0 ZV90eXBlZF90eXBlZGVmX2FsbG9jX2RlZiAoZiwgcCwgInZlY18iLCB2ZWN0 b3IsIGFueV96b25lKTsKLSAgICAgIHdyaXRlX3R5cGVkX3R5cGVkZWZfYWxs b2NfZGVmIChmLCBwLCAiY2xlYXJlZF92ZWNfIiwgdmVjdG9yLCBhbnlfem9u ZSk7Ci0gICAgICB3cml0ZV90eXBlZF90eXBlZGVmX2FsbG9jX2RlZiAoZiwg cCwgInpvbmVfIiwgc2luZ2xlLCBzcGVjaWZpY196b25lKTsKLSAgICAgIHdy aXRlX3R5cGVkX3R5cGVkZWZfYWxsb2NfZGVmIChmLCBwLCAiem9uZV9jbGVh cmVkXyIsIHNpbmdsZSwKLQkJCQkgICAgIHNwZWNpZmljX3pvbmUpOwotICAg ICAgd3JpdGVfdHlwZWRfdHlwZWRlZl9hbGxvY19kZWYgKGYsIHAsICJ6b25l X2NsZWFyZWRfdmVjXyIsIHZlY3RvciwKLQkJCQkgICAgIHNwZWNpZmljX3pv bmUpOworICAgICAgd3JpdGVfdHlwZWRfdHlwZWRlZl9hbGxvY19kZWYgKGYs IHAsICIiLCBzaW5nbGUpOworICAgICAgd3JpdGVfdHlwZWRfdHlwZWRlZl9h bGxvY19kZWYgKGYsIHAsICJjbGVhcmVkXyIsIHNpbmdsZSk7CisgICAgICB3 cml0ZV90eXBlZF90eXBlZGVmX2FsbG9jX2RlZiAoZiwgcCwgInZlY18iLCB2 ZWN0b3IpOworICAgICAgd3JpdGVfdHlwZWRfdHlwZWRlZl9hbGxvY19kZWYg KGYsIHAsICJjbGVhcmVkX3ZlY18iLCB2ZWN0b3IpOwogICAgIH0KIH0KIApA QCAtNDk5MCwxMCArNDg4Nyw3IEBAIHdyaXRlX3NwbGF5X3RyZWVfYWxsb2Nh dG9yX2RlZiAoY29uc3RfdHlwZV9wIHMpCiAgIG91dHB1dF90eXBlbmFtZSAo b2YsIHMpOwogICBvcHJpbnRmIChvZiwgIiAoaW50IHN6LCB2b2lkICogbmwp XG4iKTsKICAgb3ByaW50ZiAob2YsICJ7XG4iKTsKLSAgb3ByaW50ZiAob2Ys ICIgIHJldHVybiBnZ2Nfc3BsYXlfYWxsb2MgKCIpOwotICBvcHJpbnRmIChv ZiwgImd0X2VfIik7Ci0gIG91dHB1dF9tYW5nbGVkX3R5cGVuYW1lIChvZiwg cyk7Ci0gIG9wcmludGYgKG9mLCAiLCBzeiwgbmwpO1xuIik7CisgIG9wcmlu dGYgKG9mLCAiICByZXR1cm4gZ2djX3NwbGF5X2FsbG9jIChzeiwgbmwpO1xu Iik7CiAgIG9wcmludGYgKG9mLCAifVxuXG4iKTsKIH0KIApAQCAtNTY0Nyw3 ICs1NTQxLDYgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAg IG9wZW5fYmFzZV9maWxlcyAoKTsKIAotICB3cml0ZV9lbnVtX2RlZm4gKHN0 cnVjdHVyZXMsIHBhcmFtX3N0cnVjdHMpOwogICBvdXRwdXRfaGVhZGVyID0g cGx1Z2luX291dHB1dCA/IHBsdWdpbl9vdXRwdXQgOiBoZWFkZXJfZmlsZTsK ICAgd3JpdGVfdHlwZWRfYWxsb2NfZGVmbnMgKG91dHB1dF9oZWFkZXIsIHN0 cnVjdHVyZXMsIHR5cGVkZWZzKTsKICAgREJHUFJJTlRfQ09VTlRfVFlQRSAo InN0cnVjdHVyZXMgYmVmb3JlIHdyaXRlX3R5cGVzIG91dHB1dGhlYWRlciIs CmRpZmYgLS1naXQgYS9nY2MvZ2djLWNvbW1vbi5jIGIvZ2NjL2dnYy1jb21t b24uYwppbmRleCA3MDkzMGEzLi5mMDIyMjRhIDEwMDY0NAotLS0gYS9nY2Mv Z2djLWNvbW1vbi5jCisrKyBiL2djYy9nZ2MtY29tbW9uLmMKQEAgLTI1MCw4 ICsyNTAsNyBAQCBnZ2NfY2xlYXJlZF9hbGxvY19wdHJfYXJyYXlfdHdvX2Fy Z3MgKHNpemVfdCBjLCBzaXplX3QgbikKIAogLyogVGhlc2UgYXJlIGZvciBz cGxheV90cmVlX25ld19nZ2MuICAqLwogdm9pZCAqCi1nZ2Nfc3BsYXlfYWxs b2MgKGVudW0gZ3RfdHlwZXNfZW51bSBvYmpfdHlwZSBBVFRSSUJVVEVfVU5V U0VELCBpbnQgc3osCi0JCSB2b2lkICpubCkKK2dnY19zcGxheV9hbGxvYyAo aW50IHN6LCB2b2lkICpubCkKIHsKICAgZ2NjX2Fzc2VydCAoIW5sKTsKICAg cmV0dXJuIGdnY19pbnRlcm5hbF9hbGxvYyAoc3opOwpAQCAtMzAwLDcgKzI5 OSw2IEBAIHN0cnVjdCBwdHJfZGF0YQogICBndF9oYW5kbGVfcmVvcmRlciBy ZW9yZGVyX2ZuOwogICBzaXplX3Qgc2l6ZTsKICAgdm9pZCAqbmV3X2FkZHI7 Ci0gIGVudW0gZ3RfdHlwZXNfZW51bSB0eXBlOwogfTsKIAogI2RlZmluZSBQ T0lOVEVSX0hBU0goeCkgKGhhc2h2YWxfdCkoKGludHB0cl90KXggPj4gMykK QEAgLTMwOSw4ICszMDcsNyBAQCBzdHJ1Y3QgcHRyX2RhdGEKIAogaW50CiBn dF9wY2hfbm90ZV9vYmplY3QgKHZvaWQgKm9iaiwgdm9pZCAqbm90ZV9wdHJf Y29va2llLAotCQkgICAgZ3Rfbm90ZV9wb2ludGVycyBub3RlX3B0cl9mbiwK LQkJICAgIGVudW0gZ3RfdHlwZXNfZW51bSB0eXBlKQorCQkgICAgZ3Rfbm90 ZV9wb2ludGVycyBub3RlX3B0cl9mbikKIHsKICAgc3RydWN0IHB0cl9kYXRh ICoqc2xvdDsKIApAQCAtMzM1LDcgKzMzMiw2IEBAIGd0X3BjaF9ub3RlX29i amVjdCAodm9pZCAqb2JqLCB2b2lkICpub3RlX3B0cl9jb29raWUsCiAgICAg KCpzbG90KS0+c2l6ZSA9IHN0cmxlbiAoKGNvbnN0IGNoYXIgKilvYmopICsg MTsKICAgZWxzZQogICAgICgqc2xvdCktPnNpemUgPSBnZ2NfZ2V0X3NpemUg KG9iaik7Ci0gICgqc2xvdCktPnR5cGUgPSB0eXBlOwogICByZXR1cm4gMTsK IH0KIApAQCAtMzkxLDggKzM4Nyw3IEBAIGNhbGxfY291bnQgKHZvaWQgKipz bG90LCB2b2lkICpzdGF0ZV9wKQogICBzdHJ1Y3QgdHJhdmVyc2FsX3N0YXRl ICpzdGF0ZSA9IChzdHJ1Y3QgdHJhdmVyc2FsX3N0YXRlICopc3RhdGVfcDsK IAogICBnZ2NfcGNoX2NvdW50X29iamVjdCAoc3RhdGUtPmQsIGQtPm9iaiwg ZC0+c2l6ZSwKLQkJCWQtPm5vdGVfcHRyX2ZuID09IGd0X3BjaF9wX1MsCi0J CQlkLT50eXBlKTsKKwkJCWQtPm5vdGVfcHRyX2ZuID09IGd0X3BjaF9wX1Mp OwogICBzdGF0ZS0+Y291bnQrKzsKICAgcmV0dXJuIDE7CiB9CkBAIC00MDQs OCArMzk5LDcgQEAgY2FsbF9hbGxvYyAodm9pZCAqKnNsb3QsIHZvaWQgKnN0 YXRlX3ApCiAgIHN0cnVjdCB0cmF2ZXJzYWxfc3RhdGUgKnN0YXRlID0gKHN0 cnVjdCB0cmF2ZXJzYWxfc3RhdGUgKilzdGF0ZV9wOwogCiAgIGQtPm5ld19h ZGRyID0gZ2djX3BjaF9hbGxvY19vYmplY3QgKHN0YXRlLT5kLCBkLT5vYmos IGQtPnNpemUsCi0JCQkJICAgICAgZC0+bm90ZV9wdHJfZm4gPT0gZ3RfcGNo X3BfUywKLQkJCQkgICAgICBkLT50eXBlKTsKKwkJCQkgICAgICBkLT5ub3Rl X3B0cl9mbiA9PSBndF9wY2hfcF9TKTsKICAgc3RhdGUtPnB0cnNbc3RhdGUt PnB0cnNfaSsrXSA9IGQ7CiAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEv Z2NjL2dnYy1pbnRlcm5hbC5oIGIvZ2NjL2dnYy1pbnRlcm5hbC5oCmluZGV4 IDE1NTk4ODMuLjAyMTk2MTUgMTAwNjQ0Ci0tLSBhL2djYy9nZ2MtaW50ZXJu YWwuaAorKysgYi9nY2MvZ2djLWludGVybmFsLmgKQEAgLTU1LDggKzU1LDcg QEAgZXh0ZXJuIHN0cnVjdCBnZ2NfcGNoX2RhdGEgKmluaXRfZ2djX3BjaCAo dm9pZCk7CiAgICBvZiBhbiBvYmplY3QuICBVcGRhdGUgdGhlIGdnY19wY2hf ZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhcyBtdWNoIG9mCiAgICB0aGF0IGluZm9y bWF0aW9uIGFzIGlzIG5lY2Vzc2FyeS4gVGhlIGJvb2wgYXJndW1lbnQgc2hv dWxkIGJlIHRydWUKICAgIGlmIHRoZSBvYmplY3QgaXMgYSBzdHJpbmcuICAq LwotZXh0ZXJuIHZvaWQgZ2djX3BjaF9jb3VudF9vYmplY3QgKHN0cnVjdCBn Z2NfcGNoX2RhdGEgKiwgdm9pZCAqLCBzaXplX3QsIGJvb2wsCi0JCQkJICBl bnVtIGd0X3R5cGVzX2VudW0pOworZXh0ZXJuIHZvaWQgZ2djX3BjaF9jb3Vu dF9vYmplY3QgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKiwgdm9pZCAqLCBzaXpl X3QsIGJvb2wpOwogCiAvKiBSZXR1cm4gdGhlIHRvdGFsIHNpemUgb2YgdGhl IGRhdGEgdG8gYmUgd3JpdHRlbiB0byBob2xkIGFsbAogICAgdGhlIG9iamVj dHMgcHJldmlvdXNseSBwYXNzZWQgdG8gZ2djX3BjaF9jb3VudF9vYmplY3Qu ICAqLwpAQCAtNjksOCArNjgsNyBAQCBleHRlcm4gdm9pZCBnZ2NfcGNoX3Ro aXNfYmFzZSAoc3RydWN0IGdnY19wY2hfZGF0YSAqLCB2b2lkICopOwogLyog QXNzdW1pbmcgdGhhdCB0aGUgb2JqZWN0cyByZWFsbHkgZG8gZW5kIHVwIGF0 IHRoZSBhZGRyZXNzCiAgICBwYXNzZWQgdG8gZ2djX3BjaF90aGlzX2Jhc2Us IHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGlzIG9iamVjdC4KICAgIFRoZSBi b29sIGFyZ3VtZW50IHNob3VsZCBiZSB0cnVlIGlmIHRoZSBvYmplY3QgaXMg YSBzdHJpbmcuICAqLwotZXh0ZXJuIGNoYXIgKmdnY19wY2hfYWxsb2Nfb2Jq ZWN0IChzdHJ1Y3QgZ2djX3BjaF9kYXRhICosIHZvaWQgKiwgc2l6ZV90LCBi b29sLAotCQkJCSAgIGVudW0gZ3RfdHlwZXNfZW51bSk7CitleHRlcm4gY2hh ciAqZ2djX3BjaF9hbGxvY19vYmplY3QgKHN0cnVjdCBnZ2NfcGNoX2RhdGEg Kiwgdm9pZCAqLCBzaXplX3QsIGJvb2wpOwogCiAvKiBXcml0ZSBvdXQgYW55 IGluaXRpYWwgaW5mb3JtYXRpb24gcmVxdWlyZWQuICAqLwogZXh0ZXJuIHZv aWQgZ2djX3BjaF9wcmVwYXJlX3dyaXRlIChzdHJ1Y3QgZ2djX3BjaF9kYXRh ICosIEZJTEUgKik7CmRpZmYgLS1naXQgYS9nY2MvZ2djLW5vbmUuYyBiL2dj Yy9nZ2Mtbm9uZS5jCmluZGV4IDRkMmMwYTguLjlhOWE0ZTMgMTAwNjQ0Ci0t LSBhL2djYy9nZ2Mtbm9uZS5jCisrKyBiL2djYy9nZ2Mtbm9uZS5jCkBAIC0z MSwxMyArMzEsNiBAQAogI2luY2x1ZGUgImNvcmV0eXBlcy5oIgogI2luY2x1 ZGUgImdnYy5oIgogCi12b2lkICoKLWdnY19hbGxvY190eXBlZF9zdGF0IChl bnVtIGd0X3R5cGVzX2VudW0gQVJHX1VOVVNFRCAoZ3RlKSwgc2l6ZV90IHNp emUKLQkJICAgICAgTUVNX1NUQVRfREVDTCkKLXsKLSAgcmV0dXJuIHhtYWxs b2MgKHNpemUpOwotfQotCiAvKiBGb3IgYSBnaXZlbiBzaXplIG9mIG1lbW9y eSByZXF1ZXN0ZWQgZm9yIGFsbG9jYXRpb24sIHJldHVybiB0aGUKICAgIGFj dHVhbCBzaXplIHRoYXQgaXMgZ29pbmcgdG8gYmUgYWxsb2NhdGVkLiAgKi8K IApAQCAtNzAsMzEgKzYzLDMgQEAgZ2djX2ZyZWUgKHZvaWQgKnApCiB7CiAg IGZyZWUgKHApOwogfQotCi1zdHJ1Y3QgYWxsb2Nfem9uZQotewotICBpbnQg ZHVtbXk7Ci19OwotCi1zdHJ1Y3QgYWxsb2Nfem9uZSBydGxfem9uZTsKLXN0 cnVjdCBhbGxvY196b25lIHRyZWVfem9uZTsKLXN0cnVjdCBhbGxvY196b25l IHRyZWVfaWRfem9uZTsKLQotI2lmIGRlZmluZWQgKEdHQ19aT05FKSAmJiAh ZGVmaW5lZCAoR0VORVJBVE9SX0ZJTEUpCi0KLXZvaWQgKgotZ2djX2ludGVy bmFsX2FsbG9jX3pvbmVfc3RhdCAoc2l6ZV90IHNpemUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWxsb2Nfem9uZSAqIEFSR19V TlVTRUQoeikgTUVNX1NUQVRfREVDTCkKLXsKLSAgICByZXR1cm4geG1hbGxv YyAoc2l6ZSk7Ci19Ci0KLXZvaWQgKgotZ2djX2ludGVybmFsX2NsZWFyZWRf YWxsb2Nfem9uZV9zdGF0IChzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsbG9jX3pvbmUgKiBB UkdfVU5VU0VEKHopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1FTV9TVEFUX0RFQ0wpCi17Ci0gICAgcmV0dXJuIHhjYWxsb2Mg KHNpemUsIDEpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2djYy9nZ2Mt cGFnZS5jIGIvZ2NjL2dnYy1wYWdlLmMKaW5kZXggNjkzNzUzYy4uMzI3Njhi MiAxMDA2NDQKLS0tIGEvZ2NjL2dnYy1wYWdlLmMKKysrIGIvZ2NjL2dnYy1w YWdlLmMKQEAgLTExOTksMTUgKzExOTksNiBAQCBnZ2Nfcm91bmRfYWxsb2Nf c2l6ZSAoc2l6ZV90IHJlcXVlc3RlZF9zaXplKQogICByZXR1cm4gc2l6ZTsK IH0KIAotLyogVHlwZWQgYWxsb2NhdGlvbiBmdW5jdGlvbi4gIERvZXMgbm90 aGluZyBzcGVjaWFsIGluIHRoaXMgY29sbGVjdG9yLiAgKi8KLQotdm9pZCAq Ci1nZ2NfYWxsb2NfdHlwZWRfc3RhdCAoZW51bSBndF90eXBlc19lbnVtIHR5 cGUgQVRUUklCVVRFX1VOVVNFRCwgc2l6ZV90IHNpemUKLQkJICAgICAgTUVN X1NUQVRfREVDTCkKLXsKLSAgcmV0dXJuIGdnY19pbnRlcm5hbF9hbGxvY19z dGF0IChzaXplIFBBU1NfTUVNX1NUQVQpOwotfQotCiAvKiBBbGxvY2F0ZSBh IGNodW5rIG9mIG1lbW9yeSBvZiBTSVpFIGJ5dGVzLiAgSXRzIGNvbnRlbnRz IGFyZSB1bmRlZmluZWQuICAqLwogCiB2b2lkICoKQEAgLTIyMzAsOCArMjIy MSw3IEBAIGluaXRfZ2djX3BjaCAodm9pZCkKIAogdm9pZAogZ2djX3BjaF9j b3VudF9vYmplY3QgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKmQsIHZvaWQgKngg QVRUUklCVVRFX1VOVVNFRCwKLQkJICAgICAgc2l6ZV90IHNpemUsIGJvb2wg aXNfc3RyaW5nIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgIGVudW0gZ3Rf dHlwZXNfZW51bSB0eXBlIEFUVFJJQlVURV9VTlVTRUQpCisJCSAgICAgIHNp emVfdCBzaXplLCBib29sIGlzX3N0cmluZyBBVFRSSUJVVEVfVU5VU0VEKQog ewogICB1bnNpZ25lZCBvcmRlcjsKIApAQCAtMjI3NCw4ICsyMjY0LDcgQEAg Z2djX3BjaF90aGlzX2Jhc2UgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKmQsIHZv aWQgKmJhc2UpCiAKIGNoYXIgKgogZ2djX3BjaF9hbGxvY19vYmplY3QgKHN0 cnVjdCBnZ2NfcGNoX2RhdGEgKmQsIHZvaWQgKnggQVRUUklCVVRFX1VOVVNF RCwKLQkJICAgICAgc2l6ZV90IHNpemUsIGJvb2wgaXNfc3RyaW5nIEFUVFJJ QlVURV9VTlVTRUQsCi0JCSAgICAgIGVudW0gZ3RfdHlwZXNfZW51bSB0eXBl IEFUVFJJQlVURV9VTlVTRUQpCisJCSAgICAgIHNpemVfdCBzaXplLCBib29s IGlzX3N0cmluZyBBVFRSSUJVVEVfVU5VU0VEKQogewogICB1bnNpZ25lZCBv cmRlcjsKICAgY2hhciAqcmVzdWx0OwpAQCAtMjUwNywxMiArMjQ5NiwzIEBA IGdnY19wY2hfcmVhZCAoRklMRSAqZiwgdm9pZCAqYWRkcikKICAgLyogVXBk YXRlIHRoZSBzdGF0aXN0aWNzLiAgKi8KICAgRy5hbGxvY2F0ZWQgPSBHLmFs bG9jYXRlZF9sYXN0X2djID0gb2ZmcyAtIChjaGFyICopYWRkcjsKIH0KLQot c3RydWN0IGFsbG9jX3pvbmUKLXsKLSAgaW50IGR1bW15OwotfTsKLQotc3Ry dWN0IGFsbG9jX3pvbmUgcnRsX3pvbmU7Ci1zdHJ1Y3QgYWxsb2Nfem9uZSB0 cmVlX3pvbmU7Ci1zdHJ1Y3QgYWxsb2Nfem9uZSB0cmVlX2lkX3pvbmU7CmRp ZmYgLS1naXQgYS9nY2MvZ2djLXpvbmUuYyBiL2djYy9nZ2Mtem9uZS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzg5NmFmLi4wMDAwMDAw Ci0tLSBhL2djYy9nZ2Mtem9uZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUy NiArMCwwIEBACi0vKiAiQmFnLW9mLXBhZ2VzIiB6b25lIGdhcmJhZ2UgY29s bGVjdG9yIGZvciB0aGUgR05VIGNvbXBpbGVyLgotICAgQ29weXJpZ2h0IChD KSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0K LSAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAcmVk aGF0LmNvbSkgYW5kIERhbmllbCBCZXJsaW4KLSAgIChkYmVybGluQGRiZXJs aW4ub3JnKS4gIFJld3JpdHRlbiBieSBEYW5pZWwgSmFjb2Jvd2l0egotICAg PGRhbkBjb2Rlc291cmNlcnkuY29tPi4KLQotVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgotCi1HQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgotdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCi12ZXJz aW9uLgotCi1HQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCi1XQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1mb3IgbW9y ZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0 aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLTxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0KLSNpbmNsdWRl ICJjb25maWcuaCIKLSNpbmNsdWRlICJzeXN0ZW0uaCIKLSNpbmNsdWRlICJj b3JldHlwZXMuaCIKLSNpbmNsdWRlICJ0bS5oIgotI2luY2x1ZGUgInRyZWUu aCIKLSNpbmNsdWRlICJydGwuaCIKLSNpbmNsdWRlICJ0bV9wLmgiCi0jaW5j bHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCi0jaW5jbHVkZSAiZmxhZ3MuaCIK LSNpbmNsdWRlICJnZ2MuaCIKLSNpbmNsdWRlICJnZ2MtaW50ZXJuYWwuaCIK LSNpbmNsdWRlICJ0aW1ldmFyLmgiCi0jaW5jbHVkZSAicGFyYW1zLmgiCi0j aW5jbHVkZSAiYml0bWFwLmgiCi0jaW5jbHVkZSAicGx1Z2luLmgiCi0KLS8q IFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3 ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQotICAgZmlsZSBvcGVuLiAgUHJlZmVy IGVpdGhlciB0byB2YWxsb2MuICAqLwotI2lmZGVmIEhBVkVfTU1BUF9BTk9O Ci0jIHVuZGVmIEhBVkVfTU1BUF9ERVZfWkVSTwotIyBkZWZpbmUgVVNJTkdf TU1BUAotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KLSMg ZGVmaW5lIFVTSU5HX01NQVAKLSNlbmRpZgotCi0jaWZuZGVmIFVTSU5HX01N QVAKLSNlcnJvciBab25lIGNvbGxlY3RvciByZXF1aXJlcyBtbWFwCi0jZW5k aWYKLQotI2lmIChHQ0NfVkVSU0lPTiA8IDMwMDEpCi0jZGVmaW5lIHByZWZl dGNoKFgpICgodm9pZCkgWCkKLSNkZWZpbmUgcHJlZmV0Y2h3KFgpICgodm9p ZCkgWCkKLSNlbHNlCi0jZGVmaW5lIHByZWZldGNoKFgpIF9fYnVpbHRpbl9w cmVmZXRjaCAoWCkKLSNkZWZpbmUgcHJlZmV0Y2h3KFgpIF9fYnVpbHRpbl9w cmVmZXRjaCAoWCwgMSwgMykKLSNlbmRpZgotCi0vKiBGVVRVUkUgTk9URVM6 Ci0KLSAgIElmIHdlIHRyYWNrIGludGVyLXpvbmUgcG9pbnRlcnMsIHdlIGNh biBtYXJrIHNpbmdsZSB6b25lcyBhdCBhCi0gICB0aW1lLgotCi0gICBJZiB3 ZSBoYXZlIGEgem9uZSB3aGVyZSB3ZSBndWFyYW50ZWUgbm8gaW50ZXItem9u ZSBwb2ludGVycywgd2UKLSAgIGNvdWxkIG1hcmsgdGhhdCB6b25lIHNlcGFy YXRlbHkuCi0KLSAgIFRoZSBnYXJiYWdlIHpvbmUgc2hvdWxkIG5vdCBiZSBt YXJrZWQsIGFuZCB3ZSBzaG91bGQgcmV0dXJuIDEgaW4KLSAgIGdnY19zZXRf bWFyayBmb3IgYW55IG9iamVjdCBpbiB0aGUgZ2FyYmFnZSB6b25lLCB3aGlj aCBjdXRzIG9mZgotICAgbWFya2luZyBxdWlja2x5LiAgKi8KLQotLyogU3Ry YXRlZ3k6Ci0KLSAgIFRoaXMgZ2FyYmFnZS1jb2xsZWN0aW5nIGFsbG9jYXRv ciBzZWdyZWdhdGVzIG9iamVjdHMgaW50byB6b25lcy4KLSAgIEl0IGFsc28g c2VncmVnYXRlcyBvYmplY3RzIGludG8gImxhcmdlIiBhbmQgInNtYWxsIiBi aW5zLiAgTGFyZ2UKLSAgIG9iamVjdHMgYXJlIGdyZWF0ZXIgdGhhbiBwYWdl IHNpemUuCi0KLSAgIFBhZ2VzIGZvciBzbWFsbCBvYmplY3RzIGFyZSBicm9r ZW4gdXAgaW50byBjaHVua3MuICBUaGUgcGFnZSBoYXMKLSAgIGEgYml0bWFw IHdoaWNoIG1hcmtzIHRoZSBzdGFydCBwb3NpdGlvbiBvZiBlYWNoIGNodW5r ICh3aGV0aGVyCi0gICBhbGxvY2F0ZWQgb3IgZnJlZSkuICBGcmVlIGNodW5r cyBhcmUgb24gb25lIG9mIHRoZSB6b25lJ3MgZnJlZQotICAgbGlzdHMgYW5k IGNvbnRhaW4gYSBwb2ludGVyIHRvIHRoZSBuZXh0IGZyZWUgY2h1bmsuICBD aHVua3MgaW4KLSAgIG1vc3Qgb2YgdGhlIGZyZWUgbGlzdHMgaGF2ZSBhIGZp eGVkIHNpemUgZGV0ZXJtaW5lZCBieSB0aGUKLSAgIGZyZWUgbGlzdC4gIENo dW5rcyBpbiB0aGUgIm90aGVyIiBzaXplZCBmcmVlIGxpc3QgaGF2ZSB0aGVp ciBzaXplCi0gICBzdG9yZWQgcmlnaHQgYWZ0ZXIgdGhlaXIgY2hhaW4gcG9p bnRlci4KLQotICAgRW1wdHkgcGFnZXMgKG9mIGFsbCBzaXplcykgYXJlIGtl cHQgb24gYSBzaW5nbGUgcGFnZSBjYWNoZSBsaXN0LAotICAgYW5kIGFyZSBj b25zaWRlcmVkIGZpcnN0IHdoZW4gbmV3IHBhZ2VzIGFyZSByZXF1aXJlZDsg dGhleSBhcmUKLSAgIGRlYWxsb2NhdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUg bmV4dCBjb2xsZWN0aW9uIGlmIHRoZXkgaGF2ZW4ndAotICAgYmVlbiByZWN5 Y2xlZCBieSB0aGVuLiAgVGhlIGZyZWUgcGFnZSBsaXN0IGlzIGN1cnJlbnRs eSBwZXItem9uZS4gICovCi0KLS8qIERlZmluZSBHR0NfREVCVUdfTEVWRUwg dG8gcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgotICAgICAwOiBObyBk ZWJ1Z2dpbmcgb3V0cHV0LgotICAgICAxOiBHQyBzdGF0aXN0aWNzIG9ubHku Ci0gICAgIDI6IFBhZ2UtZW50cnkgYWxsb2NhdGlvbnMvZGVhbGxvY2F0aW9u cyBhcyB3ZWxsLgotICAgICAzOiBPYmplY3QgYWxsb2NhdGlvbnMgYXMgd2Vs bC4KLSAgICAgNDogT2JqZWN0IG1hcmtzIGFzIHdlbGwuICAqLwotI2RlZmlu ZSBHR0NfREVCVUdfTEVWRUwgKDApCi0KLSNpZm5kZWYgSE9TVF9CSVRTX1BF Ul9QVFIKLSNkZWZpbmUgSE9TVF9CSVRTX1BFUl9QVFIgIEhPU1RfQklUU19Q RVJfTE9ORwotI2VuZGlmCi0KLS8qIFRoaXMgc3RydWN0dXJlIG1hbmFnZXMg c21hbGwgZnJlZSBjaHVua3MuICBUaGUgU0laRSBmaWVsZCBpcyBvbmx5Ci0g ICBpbml0aWFsaXplZCBpZiB0aGUgY2h1bmsgaXMgaW4gdGhlICJvdGhlciIg c2l6ZWQgZnJlZSBsaXN0LiAgTGFyZ2UKLSAgIGNodW5rcyBhcmUgYWxsb2Nh dGVkIG9uZSBhdCBhIHRpbWUgdG8gdGhlaXIgb3duIHBhZ2UsIGFuZCBzbyBk b24ndAotICAgY29tZSBpbiBoZXJlLiAgKi8KLQotc3RydWN0IGFsbG9jX2No dW5rIHsKLSAgc3RydWN0IGFsbG9jX2NodW5rICpuZXh0X2ZyZWU7Ci0gIHVu c2lnbmVkIGludCBzaXplOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIGZp eGVkLXNpemUgcG9ydGlvbiBvZiBhIHNtYWxsIHBhZ2UgZGVzY3JpcHRvci4g ICovCi0jZGVmaW5lIFBBR0VfT1ZFUkhFQUQgICAob2Zmc2V0b2YgKHN0cnVj dCBzbWFsbF9wYWdlX2VudHJ5LCBhbGxvY19iaXRzKSkKLQotLyogVGhlIGNv bGxlY3RvcidzIGlkZWEgb2YgdGhlIHBhZ2Ugc2l6ZS4gIFRoaXMgbXVzdCBi ZSBhIHBvd2VyIG9mIHR3bwotICAgbm8gbGFyZ2VyIHRoYW4gdGhlIHN5c3Rl bSBwYWdlIHNpemUsIGJlY2F1c2UgcGFnZXMgbXVzdCBiZSBhbGlnbmVkCi0g ICB0byB0aGlzIGFtb3VudCBhbmQgYXJlIHRyYWNrZWQgYXQgdGhpcyBncmFu dWxhcml0eSBpbiB0aGUgcGFnZQotICAgdGFibGUuICBXZSBjaG9vc2UgYSBz aXplIGF0IGNvbXBpbGUgdGltZSBmb3IgZWZmaWNpZW5jeS4KLQotICAgV2Ug Y291bGQgbWFrZSBhIGJldHRlciBndWVzcyBhdCBjb21waWxlIHRpbWUgaWYg UEFHRV9TSVpFIGlzIGEKLSAgIGNvbnN0YW50IGluIHN5c3RlbSBoZWFkZXJz LCBhbmQgUEFHRV9TSElGVCBpcyBkZWZpbmVkLi4uICAqLwotI2RlZmluZSBH R0NfUEFHRV9TSVpFCTQwOTYKLSNkZWZpbmUgR0dDX1BBR0VfTUFTSwkoR0dD X1BBR0VfU0laRSAtIDEpCi0jZGVmaW5lIEdHQ19QQUdFX1NISUZUCTEyCi0K LSNpZiAwCi0vKiBBbHRlcm5hdGl2ZSBkZWZpbml0aW9ucyB3aGljaCB1c2Ug dGhlIHJ1bnRpbWUgcGFnZSBzaXplLiAgKi8KLSNkZWZpbmUgR0dDX1BBR0Vf U0laRQlHLnBhZ2VzaXplCi0jZGVmaW5lIEdHQ19QQUdFX01BU0sJRy5wYWdl X21hc2sKLSNkZWZpbmUgR0dDX1BBR0VfU0hJRlQJRy5sZ19wYWdlc2l6ZQot I2VuZGlmCi0KLS8qIFRoZSBzaXplIG9mIGEgc21hbGwgcGFnZSBtYW5hZ2Vk IGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMKLSAgIG11c3QgY3Vy cmVudGx5IGJlIEdHQ19QQUdFX1NJWkUsIGJ1dCB3aXRoIGEgZmV3IGNoYW5n ZXMgY291bGQKLSAgIGJlIGFueSBtdWx0aXBsZSBvZiBpdCB0byByZWR1Y2Ug Y2VydGFpbiBraW5kcyBvZiBvdmVyaGVhZC4gICovCi0jZGVmaW5lIFNNQUxM X1BBR0VfU0laRSBHR0NfUEFHRV9TSVpFCi0KLS8qIEZyZWUgYmluIGluZm9y bWF0aW9uLiAgVGhlc2UgbnVtYmVycyBtYXkgYmUgaW4gbmVlZCBvZiByZS10 dW5pbmcuCi0gICBJbiBnZW5lcmFsLCBkZWNyZWFzaW5nIHRoZSBudW1iZXIg b2YgZnJlZSBiaW5zIHdvdWxkIHNlZW0gdG8KLSAgIGluY3JlYXNlIHRoZSB0 aW1lIGl0IHRha2VzIHRvIGFsbG9jYXRlLi4uICovCi0KLS8qIEZJWE1FOiBX ZSBjYW4ndCB1c2UgYW55dGhpbmcgYnV0IE1BWF9BTElHTk1FTlQgZm9yIHRo ZSBiaW4gc2l6ZQotICAgdG9kYXkuICAqLwotCi0jZGVmaW5lIE5VTV9GUkVF X0JJTlMJCTY0Ci0jZGVmaW5lIEZSRUVfQklOX0RFTFRBCQlNQVhfQUxJR05N RU5UCi0jZGVmaW5lIFNJWkVfQklOX0RPV04oU0laRSkJKChTSVpFKSAvIEZS RUVfQklOX0RFTFRBKQotCi0vKiBBbGxvY2F0aW9uIGFuZCBtYXJraW5nIHBh cmFtZXRlcnMuICAqLwotCi0vKiBUaGUgc21hbGxlc3QgYWxsb2NhdGFibGUg dW5pdCB0byBrZWVwIHRyYWNrIG9mLiAgKi8KLSNkZWZpbmUgQllURVNfUEVS X0FMTE9DX0JJVAlNQVhfQUxJR05NRU5UCi0KLS8qIFRoZSBzbWFsbGVzdCBt YXJrYWJsZSB1bml0LiAgSWYgd2UgcmVxdWlyZSBlYWNoIGFsbG9jYXRlZCBv YmplY3QKLSAgIHRvIGNvbnRhaW4gYXQgbGVhc3QgdHdvIGFsbG9jYXRhYmxl IHVuaXRzLCB3ZSBjYW4gdXNlIGhhbGYgYXMgbWFueQotICAgYml0cyBmb3Ig dGhlIG1hcmsgYml0bWFwLiAgQnV0IHRoaXMgYWRkcyBjb25zaWRlcmFibGUg Y29tcGxleGl0eQotICAgdG8gc3dlZXBpbmcuICAqLwotI2RlZmluZSBCWVRF U19QRVJfTUFSS19CSVQJQllURVNfUEVSX0FMTE9DX0JJVAotCi0jZGVmaW5l IEJZVEVTX1BFUl9NQVJLX1dPUkQJKDggKiBCWVRFU19QRVJfTUFSS19CSVQg KiBzaXplb2YgKG1hcmtfdHlwZSkpCi0KLS8qIFdlIHVzZSB0aGlzIHN0cnVj dHVyZSB0byBkZXRlcm1pbmUgdGhlIGFsaWdubWVudCByZXF1aXJlZCBmb3IK LSAgIGFsbG9jYXRpb25zLgotCi0gICBUaGVyZSBhcmUgc2V2ZXJhbCB0aGlu Z3Mgd3Jvbmcgd2l0aCB0aGlzIGVzdGltYXRpb24gb2YgYWxpZ25tZW50Lgot Ci0gICBUaGUgbWF4aW11bSBhbGlnbm1lbnQgZm9yIGEgc3RydWN0dXJlIGlz IG9mdGVuIGxlc3MgdGhhbiB0aGUKLSAgIG1heGltdW0gYWxpZ25tZW50IGZv ciBhIGJhc2ljIGRhdGEgdHlwZTsgZm9yIGluc3RhbmNlLCBvbiBzb21lCi0g ICB0YXJnZXRzIGxvbmcgbG9uZyBtdXN0IGJlIGFsaWduZWQgdG8gc2l6ZW9m IChpbnQpIGluIGEgc3RydWN0dXJlCi0gICBhbmQgc2l6ZW9mIChsb25nIGxv bmcpIGluIGEgdmFyaWFibGUuICBpMzg2LWxpbnV4IGlzIG9uZSBleGFtcGxl OwotICAgRGFyd2luIGlzIGFub3RoZXIgKHNvbWV0aW1lcywgZGVwZW5kaW5n IG9uIHRoZSBjb21waWxlciBpbiB1c2UpLgotCi0gICBBbHNvLCBsb25nIGRv dWJsZSBpcyBub3QgaW5jbHVkZWQuICBOb3RoaW5nIGluIEdDQyB1c2VzIGxv bmcKLSAgIGRvdWJsZSwgc28gd2UgYXNzdW1lIHRoYXQgdGhpcyBpcyBPSy4g IE9uIHBvd2VycGMtZGFyd2luLCBhZGRpbmcKLSAgIGxvbmcgZG91YmxlIHdv dWxkIGJyaW5nIHRoZSBtYXhpbXVtIGFsaWdubWVudCB1cCB0byAxNiBieXRl cywKLSAgIGFuZCB1bnRpbCB3ZSBuZWVkIGxvbmcgZG91YmxlIChvciB0byB2 ZWN0b3JpemUgY29tcGlsZXIgb3BlcmF0aW9ucykKLSAgIHRoYXQncyBwYWlu ZnVsbHkgd2FzdGVmdWwuICBUaGlzIHdpbGwgbmVlZCB0byBjaGFuZ2UsIHNv bWUgZGF5LiAgKi8KLQotc3RydWN0IG1heF9hbGlnbm1lbnQgewotICBjaGFy IGM7Ci0gIHVuaW9uIHsKLSAgICBIT1NUX1dJREVTVF9JTlQgaTsKLSAgICBk b3VibGUgZDsKLSAgfSB1OwotfTsKLQotLyogVGhlIGJpZ2dlc3QgYWxpZ25t ZW50IHJlcXVpcmVkLiAgKi8KLQotI2RlZmluZSBNQVhfQUxJR05NRU5UIChv ZmZzZXRvZiAoc3RydWN0IG1heF9hbGlnbm1lbnQsIHUpKQotCi0vKiBDb21w dXRlIHRoZSBzbWFsbGVzdCBtdWx0aXBsZSBvZiBGIHRoYXQgaXMgPj0gWC4g ICovCi0KLSNkZWZpbmUgUk9VTkRfVVAoeCwgZikgKENFSUwgKHgsIGYpICog KGYpKQotCi0vKiBUeXBlcyB0byB1c2UgZm9yIHRoZSBhbGxvY2F0aW9uIGFu ZCBtYXJrIGJpdG1hcHMuICBJdCBtaWdodCBiZQotICAgYSBnb29kIGlkZWEg dG8gYWRkIGZmc2wgdG8gbGliaWJlcnR5IGFuZCB1c2UgdW5zaWduZWQgbG9u ZwotICAgaW5zdGVhZDsgdGhhdCBjb3VsZCBzcGVlZCB1cyB1cCB3aGVyZSBs b25nIGlzIHdpZGVyIHRoYW4gaW50LiAgKi8KLQotdHlwZWRlZiB1bnNpZ25l ZCBpbnQgYWxsb2NfdHlwZTsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG1hcmtf dHlwZTsKLSNkZWZpbmUgYWxsb2NfZmZzKHgpIGZmcyh4KQotCi0vKiBBIHBh Z2VfZW50cnkgcmVjb3JkcyB0aGUgc3RhdHVzIG9mIGFuIGFsbG9jYXRpb24g cGFnZS4gIFRoaXMgaXMgdGhlCi0gICBjb21tb24gZGF0YSBiZXR3ZWVuIGFs bCB0aHJlZSBraW5kcyBvZiBwYWdlcyAtIHNtYWxsLCBsYXJnZSwgYW5kCi0g ICBQQ0guICAqLwotdHlwZWRlZiBzdHJ1Y3QgcGFnZV9lbnRyeQotewotICAv KiBUaGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgbWVtb3J5IGlzIGFsbG9jYXRl ZC4gICovCi0gIGNoYXIgKnBhZ2U7Ci0KLSAgLyogVGhlIHpvbmUgdGhhdCB0 aGlzIHBhZ2UgZW50cnkgYmVsb25ncyB0by4gICovCi0gIHN0cnVjdCBhbGxv Y196b25lICp6b25lOwotCi0gIC8qIEhvdyBtYW55IGNvbGxlY3Rpb25zIHdl J3ZlIHN1cnZpdmVkLiAgKi8KLSAgc2l6ZV90IHN1cnZpdmVkOwotCi0gIC8q IERvZXMgdGhpcyBwYWdlIGNvbnRhaW4gc21hbGwgb2JqZWN0cywgb3Igb25l IGxhcmdlIG9iamVjdD8gICovCi0gIGJvb2wgbGFyZ2VfcDsKLQotICAvKiBJ cyB0aGlzIHBhZ2UgcGFydCBvZiB0aGUgbG9hZGVkIFBDSD8gICovCi0gIGJv b2wgcGNoX3A7Ci19IHBhZ2VfZW50cnk7Ci0KLS8qIEFkZGl0aW9uYWwgZGF0 YSBuZWVkZWQgZm9yIHNtYWxsIHBhZ2VzLiAgKi8KLXN0cnVjdCBzbWFsbF9w YWdlX2VudHJ5Ci17Ci0gIHN0cnVjdCBwYWdlX2VudHJ5IGNvbW1vbjsKLQot ICAvKiBUaGUgbmV4dCBzbWFsbCBwYWdlIGVudHJ5LCBvciBOVUxMIGlmIHRo aXMgaXMgdGhlIGxhc3QuICAqLwotICBzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRy eSAqbmV4dDsKLQotICAvKiBJZiBjdXJyZW50bHkgbWFya2luZyB0aGlzIHpv bmUsIGEgcG9pbnRlciB0byB0aGUgbWFyayBiaXRzCi0gICAgIGZvciB0aGlz IHBhZ2UuICBJZiB3ZSBhcmVuJ3QgY3VycmVudGx5IG1hcmtpbmcgdGhpcyB6 b25lLAotICAgICB0aGlzIHBvaW50ZXIgbWF5IGJlIHN0YWxlIChwb2ludGlu ZyB0byBmcmVlZCBtZW1vcnkpLiAgKi8KLSAgbWFya190eXBlICptYXJrX2Jp dHM7Ci0KLSAgLyogVGhlIGFsbG9jYXRpb24gYml0bWFwLiAgVGhpcyBhcnJh eSBleHRlbmRzIGZhciBlbm91Z2ggdG8gaGF2ZQotICAgICBvbmUgYml0IGZv ciBldmVyeSBCWVRFU19QRVJfQUxMT0NfQklUIGJ5dGVzIGluIHRoZSBwYWdl LiAgKi8KLSAgYWxsb2NfdHlwZSBhbGxvY19iaXRzWzFdOwotfTsKLQotLyog QWRkaXRpb25hbCBkYXRhIG5lZWRlZCBmb3IgbGFyZ2UgcGFnZXMuICAqLwot c3RydWN0IGxhcmdlX3BhZ2VfZW50cnkKLXsKLSAgc3RydWN0IHBhZ2VfZW50 cnkgY29tbW9uOwotCi0gIC8qIFRoZSBuZXh0IGxhcmdlIHBhZ2UgZW50cnks IG9yIE5VTEwgaWYgdGhpcyBpcyB0aGUgbGFzdC4gICovCi0gIHN0cnVjdCBs YXJnZV9wYWdlX2VudHJ5ICpuZXh0OwotCi0gIC8qIFRoZSBudW1iZXIgb2Yg Ynl0ZXMgYWxsb2NhdGVkLCBub3QgaW5jbHVkaW5nIHRoZSBwYWdlIGVudHJ5 LiAgKi8KLSAgc2l6ZV90IGJ5dGVzOwotCi0gIC8qIFRoZSBwcmV2aW91cyBw YWdlIGluIHRoZSBsaXN0LCBzbyB0aGF0IHdlIGNhbiB1bmxpbmsgdGhpcyBv bmUuICAqLwotICBzdHJ1Y3QgbGFyZ2VfcGFnZV9lbnRyeSAqcHJldjsKLQot ICAvKiBEdXJpbmcgbWFya2luZywgaXMgdGhpcyBvYmplY3QgbWFya2VkPyAg Ki8KLSAgYm9vbCBtYXJrX3A7Ci19OwotCi0vKiBBIHR3by1sZXZlbCB0cmVl IGlzIHVzZWQgdG8gbG9vayB1cCB0aGUgcGFnZS1lbnRyeSBmb3IgYSBnaXZl bgotICAgcG9pbnRlci4gIFR3byBjaHVua3Mgb2YgdGhlIHBvaW50ZXIncyBi aXRzIGFyZSBleHRyYWN0ZWQgdG8gaW5kZXgKLSAgIHRoZSBmaXJzdCBhbmQg c2Vjb25kIGxldmVscyBvZiB0aGUgdHJlZSwgYXMgZm9sbG93czoKLQotCQkJ CSAgIEhPU1RfUEFHRV9TSVpFX0JJVFMKLQkJCSAgIDMyCQl8ICAgICAgfAot ICAgICAgIG1zYiArLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLSstLS0t LS0rIGxzYgotCQkJICAgIHwgICAgfCAgICAgIHwKLQkJCSBQQUdFX0wxX0JJ VFMgICB8Ci0JCQkJIHwgICAgICB8Ci0JCQkgICAgICAgUEFHRV9MMl9CSVRT Ci0KLSAgIFRoZSBib3R0b21tb3N0IEhPU1RfUEFHRV9TSVpFX0JJVFMgYXJl IGlnbm9yZWQsIHNpbmNlIHBhZ2UtZW50cnkKLSAgIHBhZ2VzIGFyZSBhbGln bmVkIG9uIHN5c3RlbSBwYWdlIGJvdW5kYXJpZXMuICBUaGUgbmV4dCBtb3N0 Ci0gICBzaWduaWZpY2FudCBQQUdFX0wyX0JJVFMgYW5kIFBBR0VfTDFfQklU UyBhcmUgdGhlIHNlY29uZCBhbmQgZmlyc3QKLSAgIGluZGV4IHZhbHVlcyBp biB0aGUgbG9va3VwIHRhYmxlLCByZXNwZWN0aXZlbHkuCi0KLSAgIEZvciAz Mi1iaXQgYXJjaGl0ZWN0dXJlcyBhbmQgdGhlIHNldHRpbmdzIGJlbG93LCB0 aGVyZSBhcmUgbm8KLSAgIGxlZnRvdmVyIGJpdHMuICBGb3IgYXJjaGl0ZWN0 dXJlcyB3aXRoIHdpZGVyIHBvaW50ZXJzLCB0aGUgbG9va3VwCi0gICB0cmVl IHBvaW50cyB0byBhIGxpc3Qgb2YgcGFnZXMsIHdoaWNoIG11c3QgYmUgc2Nh bm5lZCB0byBmaW5kIHRoZQotICAgY29ycmVjdCBvbmUuICAqLwotCi0jZGVm aW5lIFBBR0VfTDFfQklUUwkoOCkKLSNkZWZpbmUgUEFHRV9MMl9CSVRTCSgz MiAtIFBBR0VfTDFfQklUUyAtIEdHQ19QQUdFX1NISUZUKQotI2RlZmluZSBQ QUdFX0wxX1NJWkUJKChzaXplX3QpIDEgPDwgUEFHRV9MMV9CSVRTKQotI2Rl ZmluZSBQQUdFX0wyX1NJWkUJKChzaXplX3QpIDEgPDwgUEFHRV9MMl9CSVRT KQotCi0jZGVmaW5lIExPT0tVUF9MMShwKSBcCi0gICgoKHNpemVfdCkgKHAp ID4+ICgzMiAtIFBBR0VfTDFfQklUUykpICYgKCgxIDw8IFBBR0VfTDFfQklU UykgLSAxKSkKLQotI2RlZmluZSBMT09LVVBfTDIocCkgXAotICAoKChzaXpl X3QpIChwKSA+PiBHR0NfUEFHRV9TSElGVCkgJiAoKDEgPDwgUEFHRV9MMl9C SVRTKSAtIDEpKQotCi0jaWYgSE9TVF9CSVRTX1BFUl9QVFIgPD0gMzIKLQot LyogT24gMzItYml0IGhvc3RzLCB3ZSB1c2UgYSB0d28gbGV2ZWwgcGFnZSB0 YWJsZSwgYXMgcGljdHVyZWQgYWJvdmUuICAqLwotdHlwZWRlZiBwYWdlX2Vu dHJ5ICoqcGFnZV90YWJsZVtQQUdFX0wxX1NJWkVdOwotCi0jZWxzZQotCi0v KiBPbiA2NC1iaXQgaG9zdHMsIHdlIHVzZSB0aGUgc2FtZSB0d28gbGV2ZWwg cGFnZSB0YWJsZXMgcGx1cyBhIGxpbmtlZAotICAgbGlzdCB0aGF0IGRpc2Ft YmlndWF0ZXMgdGhlIHRvcCAzMi1iaXRzLiAgVGhlcmUgd2lsbCBhbG1vc3Qg YWx3YXlzIGJlCi0gICBleGFjdGx5IG9uZSBlbnRyeSBpbiB0aGUgbGlzdC4g ICovCi10eXBlZGVmIHN0cnVjdCBwYWdlX3RhYmxlX2NoYWluCi17Ci0gIHN0 cnVjdCBwYWdlX3RhYmxlX2NoYWluICpuZXh0OwotICBzaXplX3QgaGlnaF9i aXRzOwotICBwYWdlX2VudHJ5ICoqdGFibGVbUEFHRV9MMV9TSVpFXTsKLX0g KnBhZ2VfdGFibGU7Ci0KLSNlbmRpZgotCi0vKiBUaGUgZ2xvYmFsIHZhcmlh Ymxlcy4gICovCi1zdGF0aWMgc3RydWN0IGdsb2JhbHMKLXsKLSAgLyogVGhl IGxpbmtlZCBsaXN0IG9mIHpvbmVzLiAgKi8KLSAgc3RydWN0IGFsbG9jX3pv bmUgKnpvbmVzOwotCi0gIC8qIExvb2t1cCB0YWJsZSBmb3IgYXNzb2NpYXRp bmcgYWxsb2NhdGlvbiBwYWdlcyB3aXRoIG9iamVjdCBhZGRyZXNzZXMuICAq LwotICBwYWdlX3RhYmxlIGxvb2t1cDsKLQotICAvKiBUaGUgc3lzdGVtJ3Mg cGFnZSBzaXplLCBhbmQgcmVsYXRlZCBjb25zdGFudHMuICAqLwotICBzaXpl X3QgcGFnZXNpemU7Ci0gIHNpemVfdCBsZ19wYWdlc2l6ZTsKLSAgc2l6ZV90 IHBhZ2VfbWFzazsKLQotICAvKiBUaGUgc2l6ZSB0byBhbGxvY2F0ZSBmb3Ig YSBzbWFsbCBwYWdlIGVudHJ5LiAgVGhpcyBpbmNsdWRlcwotICAgICB0aGUg c2l6ZSBvZiB0aGUgc3RydWN0dXJlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgYWxs b2NhdGlvbgotICAgICBiaXRtYXAuICAqLwotICBzaXplX3Qgc21hbGxfcGFn ZV9vdmVyaGVhZDsKLQotI2lmIGRlZmluZWQgKEhBVkVfTU1BUF9ERVZfWkVS TykKLSAgLyogQSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byAvZGV2L3plcm8g Zm9yIHJlYWRpbmcuICAqLwotICBpbnQgZGV2X3plcm9fZmQ7Ci0jZW5kaWYK LQotICAvKiBBbGxvY2F0ZSBwYWdlcyBpbiBjaHVua3Mgb2YgdGhpcyBzaXpl LCB0byB0aHJvdHRsZSBjYWxscyB0byBtZW1vcnkKLSAgICAgYWxsb2NhdGlv biByb3V0aW5lcy4gIFRoZSBmaXJzdCBwYWdlIGlzIHVzZWQsIHRoZSByZXN0 IGdvIG9udG8gdGhlCi0gICAgIGZyZWUgbGlzdC4gICovCi0gIHNpemVfdCBx dWlyZV9zaXplOwotCi0gIC8qIFRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIGRl YnVnZ2luZyBvdXRwdXQuICAqLwotICBGSUxFICpkZWJ1Z19maWxlOwotfSBH OwotCi0vKiBBIHpvbmUgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUuICBUaGVyZSBp cyBvbmUgb2YgdGhlc2UgZm9yIGV2ZXJ5Ci0gICBkaXN0aW5jdCBhbGxvY2F0 aW9uIHpvbmUuICAqLwotc3RydWN0IGFsbG9jX3pvbmUKLXsKLSAgLyogVGhl IG1vc3QgcmVjZW50IGZyZWUgY2h1bmsgaXMgc2F2ZWQgaGVyZSwgaW5zdGVh ZCBvZiBpbiB0aGUgbGlua2VkCi0gICAgIGZyZWUgbGlzdCwgdG8gZGVjcmVh c2UgbGlzdCBtYW5pcHVsYXRpb24uICBJdCBpcyBtb3N0IGxpa2VseSB0aGF0 IHdlCi0gICAgIHdpbGwgd2FudCB0aGlzIG9uZS4gICovCi0gIGNoYXIgKmNh Y2hlZF9mcmVlOwotICBzaXplX3QgY2FjaGVkX2ZyZWVfc2l6ZTsKLQotICAv KiBMaW5rZWQgbGlzdHMgb2YgZnJlZSBzdG9yYWdlLiAgU2xvdHMgMSAuLi4g TlVNX0ZSRUVfQklOUyBoYXZlIGNodW5rcyBvZiBzaXplCi0gICAgIEZSRUVf QklOX0RFTFRBLiAgQWxsIG90aGVyIGNodW5rcyBhcmUgaW4gc2xvdCAwLiAg Ki8KLSAgc3RydWN0IGFsbG9jX2NodW5rICpmcmVlX2NodW5rc1tOVU1fRlJF RV9CSU5TICsgMV07Ci0KLSAgLyogVGhlIGhpZ2hlc3QgYmluIGluZGV4IHdo aWNoIG1pZ2h0IGJlIG5vbi1lbXB0eS4gIEl0IG1heSB0dXJuIG91dAotICAg ICB0byBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIHRvIHNlYXJj aCBkb3dud2FyZHMuICAqLwotICBzaXplX3QgaGlnaF9mcmVlX2JpbjsKLQot ICAvKiBCeXRlcyBjdXJyZW50bHkgYWxsb2NhdGVkIGluIHRoaXMgem9uZS4g ICovCi0gIHNpemVfdCBhbGxvY2F0ZWQ7Ci0KLSAgLyogTGlua2VkIGxpc3Qg b2YgdGhlIHNtYWxsIHBhZ2VzIGluIHRoaXMgem9uZS4gICovCi0gIHN0cnVj dCBzbWFsbF9wYWdlX2VudHJ5ICpwYWdlczsKLQotICAvKiBEb3VibHkgbGlu a2VkIGxpc3Qgb2YgbGFyZ2UgcGFnZXMgaW4gdGhpcyB6b25lLiAgKi8KLSAg c3RydWN0IGxhcmdlX3BhZ2VfZW50cnkgKmxhcmdlX3BhZ2VzOwotCi0gIC8q IElmIHdlIGFyZSBjdXJyZW50bHkgbWFya2luZyB0aGlzIHpvbmUsIGEgcG9p bnRlciB0byB0aGUgbWFyayBiaXRzLiAgKi8KLSAgbWFya190eXBlICptYXJr X2JpdHM7Ci0KLSAgLyogTmFtZSBvZiB0aGUgem9uZS4gICovCi0gIGNvbnN0 IGNoYXIgKm5hbWU7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBzbWFsbCBwYWdl cyBjdXJyZW50bHkgYWxsb2NhdGVkIGluIHRoaXMgem9uZS4gICovCi0gIHNp emVfdCBuX3NtYWxsX3BhZ2VzOwotCi0gIC8qIEJ5dGVzIGFsbG9jYXRlZCBh dCB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxlY3Rpb24uICAqLwotICBzaXpl X3QgYWxsb2NhdGVkX2xhc3RfZ2M7Ci0KLSAgLyogVG90YWwgYW1vdW50IG9m IG1lbW9yeSBtYXBwZWQuICAqLwotICBzaXplX3QgYnl0ZXNfbWFwcGVkOwot Ci0gIC8qIEEgY2FjaGUgb2YgZnJlZSBzeXN0ZW0gcGFnZXMuICAqLwotICBz dHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqZnJlZV9wYWdlczsKLQotICAvKiBO ZXh0IHpvbmUgaW4gdGhlIGxpbmtlZCBsaXN0IG9mIHpvbmVzLiAgKi8KLSAg c3RydWN0IGFsbG9jX3pvbmUgKm5leHRfem9uZTsKLQotICAvKiBUcnVlIGlm IHRoaXMgem9uZSB3YXMgY29sbGVjdGVkIGR1cmluZyB0aGlzIGNvbGxlY3Rp b24uICAqLwotICBib29sIHdhc19jb2xsZWN0ZWQ7Ci0KLSAgLyogVHJ1ZSBp ZiB0aGlzIHpvbmUgc2hvdWxkIGJlIGRlc3Ryb3llZCBhZnRlciB0aGUgbmV4 dCBjb2xsZWN0aW9uLiAgKi8KLSAgYm9vbCBkZWFkOwotCi0gIHN0cnVjdAot ICB7Ci0gICAgLyogVG90YWwgR0MtYWxsb2NhdGVkIG1lbW9yeS4gICovCi0g ICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX2FsbG9jYXRlZDsKLSAgICAv KiBUb3RhbCBvdmVyaGVhZCBmb3IgR0MtYWxsb2NhdGVkIG1lbW9yeS4gICov Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX292ZXJoZWFkOwotCi0g ICAgLyogVG90YWwgYWxsb2NhdGlvbnMgYW5kIG92ZXJoZWFkIGZvciBzaXpl cyBsZXNzIHRoYW4gMzIsIDY0IGFuZCAxMjguCi0gICAgICAgVGhlc2Ugc2l6 ZXMgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgdHlwaWNhbCBj YWNoZSBsaW5lCi0gICAgICAgc2l6ZXMuICAqLwotCi0gICAgdW5zaWduZWQg bG9uZyBsb25nIHRvdGFsX2FsbG9jYXRlZF91bmRlcjMyOwotICAgIHVuc2ln bmVkIGxvbmcgbG9uZyB0b3RhbF9vdmVyaGVhZF91bmRlcjMyOwotCi0gICAg dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX2FsbG9jYXRlZF91bmRlcjY0Owot ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9vdmVyaGVhZF91bmRlcjY0 OwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX2FsbG9jYXRlZF91 bmRlcjEyODsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfb3Zlcmhl YWRfdW5kZXIxMjg7Ci0gIH0gc3RhdHM7Ci19IG1haW5fem9uZTsKLQotLyog U29tZSBkZWZhdWx0IHpvbmVzLiAgKi8KLXN0cnVjdCBhbGxvY196b25lIHJ0 bF96b25lOwotc3RydWN0IGFsbG9jX3pvbmUgdHJlZV96b25lOwotc3RydWN0 IGFsbG9jX3pvbmUgdHJlZV9pZF96b25lOwotCi0vKiBUaGUgUENIIHpvbmUg ZG9lcyBub3QgbmVlZCBhIG5vcm1hbCB6b25lIHN0cnVjdHVyZSwgYW5kIGl0 IGRvZXMKLSAgIG5vdCBsaXZlIG9uIHRoZSBsaW5rZWQgbGlzdCBvZiB6b25l cy4gICovCi1zdHJ1Y3QgcGNoX3pvbmUKLXsKLSAgLyogVGhlIHN0YXJ0IG9m IHRoZSBQQ0ggem9uZS4gIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gICovCi0g IGNoYXIgKnBhZ2U7Ci0KLSAgLyogVGhlIGVuZCBvZiB0aGUgUENIIHpvbmUu ICBOVUxMIGlmIHRoZXJlIGlzIG5vbmUuICAqLwotICBjaGFyICplbmQ7Ci0K LSAgLyogVGhlIHNpemUgb2YgdGhlIFBDSCB6b25lLiAgMCBpZiB0aGVyZSBp cyBub25lLiAgKi8KLSAgc2l6ZV90IGJ5dGVzOwotCi0gIC8qIFRoZSBhbGxv Y2F0aW9uIGJpdG1hcCBmb3IgdGhlIFBDSCB6b25lLiAgKi8KLSAgYWxsb2Nf dHlwZSAqYWxsb2NfYml0czsKLQotICAvKiBJZiB3ZSBhcmUgY3VycmVudGx5 IG1hcmtpbmcsIHRoZSBtYXJrIGJpdG1hcCBmb3IgdGhlIFBDSCB6b25lLgot ICAgICBXaGVuIGl0IGlzIGZpcnN0IHJlYWQgaW4sIHdlIGNvdWxkIGF2b2lk IG1hcmtpbmcgdGhlIFBDSCwKLSAgICAgYmVjYXVzZSBpdCB3aWxsIG5vdCBj b250YWluIGFueSBwb2ludGVycyB0byBHQyBtZW1vcnkgb3V0c2lkZQotICAg ICBvZiB0aGUgUENIOyBob3dldmVyLCB0aGUgUENIIGlzIGN1cnJlbnRseSBt YXBwZWQgYXMgd3JpdGFibGUsCi0gICAgIHNvIHdlIG11c3QgbWFyayBpdCBp biBjYXNlIG5ldyBwb2ludGVycyBhcmUgYWRkZWQuICAqLwotICBtYXJrX3R5 cGUgKm1hcmtfYml0czsKLX0gcGNoX3pvbmU7Ci0KLSNpZmRlZiBVU0lOR19N TUFQCi1zdGF0aWMgY2hhciAqYWxsb2NfYW5vbiAoY2hhciAqLCBzaXplX3Qs IHN0cnVjdCBhbGxvY196b25lICopOwotI2VuZGlmCi1zdGF0aWMgc3RydWN0 IHNtYWxsX3BhZ2VfZW50cnkgKiBhbGxvY19zbWFsbF9wYWdlIChzdHJ1Y3Qg YWxsb2Nfem9uZSAqKTsKLXN0YXRpYyBzdHJ1Y3QgbGFyZ2VfcGFnZV9lbnRy eSAqIGFsbG9jX2xhcmdlX3BhZ2UgKHNpemVfdCwgc3RydWN0IGFsbG9jX3pv bmUgKik7Ci1zdGF0aWMgdm9pZCBmcmVlX2NodW5rIChjaGFyICosIHNpemVf dCwgc3RydWN0IGFsbG9jX3pvbmUgKik7Ci1zdGF0aWMgdm9pZCBmcmVlX3Nt YWxsX3BhZ2UgKHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5ICopOwotc3RhdGlj IHZvaWQgZnJlZV9sYXJnZV9wYWdlIChzdHJ1Y3QgbGFyZ2VfcGFnZV9lbnRy eSAqKTsKLXN0YXRpYyB2b2lkIHJlbGVhc2VfcGFnZXMgKHN0cnVjdCBhbGxv Y196b25lICopOwotc3RhdGljIHZvaWQgc3dlZXBfcGFnZXMgKHN0cnVjdCBh bGxvY196b25lICopOwotc3RhdGljIGJvb2wgZ2djX2NvbGxlY3RfMSAoc3Ry dWN0IGFsbG9jX3pvbmUgKiwgYm9vbCk7Ci1zdGF0aWMgdm9pZCBuZXdfZ2dj X3pvbmVfMSAoc3RydWN0IGFsbG9jX3pvbmUgKiwgY29uc3QgY2hhciAqKTsK LQotLyogVHJhdmVyc2UgdGhlIHBhZ2UgdGFibGUgYW5kIGZpbmQgdGhlIGVu dHJ5IGZvciBhIHBhZ2UuCi0gICBEaWUgKHByb2JhYmx5KSBpZiB0aGUgb2Jq ZWN0IHdhc24ndCBhbGxvY2F0ZWQgdmlhIEdDLiAgKi8KLQotc3RhdGljIGlu bGluZSBwYWdlX2VudHJ5ICoKLWxvb2t1cF9wYWdlX3RhYmxlX2VudHJ5IChj b25zdCB2b2lkICpwKQotewotICBwYWdlX2VudHJ5ICoqKmJhc2U7Ci0gIHNp emVfdCBMMSwgTDI7Ci0KLSNpZiBIT1NUX0JJVFNfUEVSX1BUUiA8PSAzMgot ICBiYXNlID0gJkcubG9va3VwWzBdOwotI2Vsc2UKLSAgcGFnZV90YWJsZSB0 YWJsZSA9IEcubG9va3VwOwotICBzaXplX3QgaGlnaF9iaXRzID0gKHNpemVf dCkgcCAmIH4gKHNpemVfdCkgMHhmZmZmZmZmZjsKLSAgd2hpbGUgKHRhYmxl LT5oaWdoX2JpdHMgIT0gaGlnaF9iaXRzKQotICAgIHRhYmxlID0gdGFibGUt Pm5leHQ7Ci0gIGJhc2UgPSAmdGFibGUtPnRhYmxlWzBdOwotI2VuZGlmCi0K LSAgLyogRXh0cmFjdCB0aGUgbGV2ZWwgMSBhbmQgMiBpbmRpY2VzLiAgKi8K LSAgTDEgPSBMT09LVVBfTDEgKHApOwotICBMMiA9IExPT0tVUF9MMiAocCk7 Ci0KLSAgcmV0dXJuIGJhc2VbTDFdW0wyXTsKLX0KLQotLyogVHJhdmVyc2Ug dGhlIHBhZ2UgdGFibGUgYW5kIGZpbmQgdGhlIGVudHJ5IGZvciBhIHBhZ2Uu Ci0gICBSZXR1cm4gTlVMTCBpZiB0aGUgb2JqZWN0IHdhc24ndCBhbGxvY2F0 ZWQgdmlhIHRoZSBHQy4gICovCi0KLXN0YXRpYyBpbmxpbmUgcGFnZV9lbnRy eSAqCi1sb29rdXBfcGFnZV90YWJsZV9pZl9hbGxvY2F0ZWQgKGNvbnN0IHZv aWQgKnApCi17Ci0gIHBhZ2VfZW50cnkgKioqYmFzZTsKLSAgc2l6ZV90IEwx LCBMMjsKLQotI2lmIEhPU1RfQklUU19QRVJfUFRSIDw9IDMyCi0gIGJhc2Ug PSAmRy5sb29rdXBbMF07Ci0jZWxzZQotICBwYWdlX3RhYmxlIHRhYmxlID0g Ry5sb29rdXA7Ci0gIHNpemVfdCBoaWdoX2JpdHMgPSAoc2l6ZV90KSBwICYg fiAoc2l6ZV90KSAweGZmZmZmZmZmOwotICB3aGlsZSAoMSkKLSAgICB7Ci0g ICAgICBpZiAodGFibGUgPT0gTlVMTCkKLQlyZXR1cm4gTlVMTDsKLSAgICAg IGlmICh0YWJsZS0+aGlnaF9iaXRzID09IGhpZ2hfYml0cykKLQlicmVhazsK LSAgICAgIHRhYmxlID0gdGFibGUtPm5leHQ7Ci0gICAgfQotICBiYXNlID0g JnRhYmxlLT50YWJsZVswXTsKLSNlbmRpZgotCi0gIC8qIEV4dHJhY3QgdGhl IGxldmVsIDEgYW5kIDIgaW5kaWNlcy4gICovCi0gIEwxID0gTE9PS1VQX0wx IChwKTsKLSAgaWYgKCEgYmFzZVtMMV0pCi0gICAgcmV0dXJuIE5VTEw7Ci0K LSAgTDIgPSBMT09LVVBfTDIgKHApOwotICBpZiAoTDIgPj0gUEFHRV9MMl9T SVpFKQotICAgIHJldHVybiBOVUxMOwotICAvKiBXZSBtaWdodCBoYXZlIGEg cGFnZSBlbnRyeSB3aGljaCBkb2VzIG5vdCBjb3JyZXNwb25kIGV4YWN0bHkg dG8gYQotICAgICBzeXN0ZW0gcGFnZS4gICovCi0gIGlmIChiYXNlW0wxXVtM Ml0gJiYgKGNvbnN0IGNoYXIgKikgcCA8IGJhc2VbTDFdW0wyXS0+cGFnZSkK LSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gYmFzZVtMMV1bTDJdOwot fQotCi0vKiBTZXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgZm9yIHRoZSBwYWdl IHRoYXQgc3RhcnRzIGF0IFAuICBJZiBFTlRSWQotICAgaXMgTlVMTCwgY2xl YXIgdGhlIGVudHJ5LiAgKi8KLQotc3RhdGljIHZvaWQKLXNldF9wYWdlX3Rh YmxlX2VudHJ5ICh2b2lkICpwLCBwYWdlX2VudHJ5ICplbnRyeSkKLXsKLSAg cGFnZV9lbnRyeSAqKipiYXNlOwotICBzaXplX3QgTDEsIEwyOwotCi0jaWYg SE9TVF9CSVRTX1BFUl9QVFIgPD0gMzIKLSAgYmFzZSA9ICZHLmxvb2t1cFsw XTsKLSNlbHNlCi0gIHBhZ2VfdGFibGUgdGFibGU7Ci0gIHNpemVfdCBoaWdo X2JpdHMgPSAoc2l6ZV90KSBwICYgfiAoc2l6ZV90KSAweGZmZmZmZmZmOwot ICBmb3IgKHRhYmxlID0gRy5sb29rdXA7IHRhYmxlOyB0YWJsZSA9IHRhYmxl LT5uZXh0KQotICAgIGlmICh0YWJsZS0+aGlnaF9iaXRzID09IGhpZ2hfYml0 cykKLSAgICAgIGdvdG8gZm91bmQ7Ci0KLSAgLyogTm90IGZvdW5kIC0tIGFs bG9jYXRlIGEgbmV3IHRhYmxlLiAgKi8KLSAgdGFibGUgPSBYQ05FVyAoc3Ry dWN0IHBhZ2VfdGFibGVfY2hhaW4pOwotICB0YWJsZS0+bmV4dCA9IEcubG9v a3VwOwotICB0YWJsZS0+aGlnaF9iaXRzID0gaGlnaF9iaXRzOwotICBHLmxv b2t1cCA9IHRhYmxlOwotZm91bmQ6Ci0gIGJhc2UgPSAmdGFibGUtPnRhYmxl WzBdOwotI2VuZGlmCi0KLSAgLyogRXh0cmFjdCB0aGUgbGV2ZWwgMSBhbmQg MiBpbmRpY2VzLiAgKi8KLSAgTDEgPSBMT09LVVBfTDEgKHApOwotICBMMiA9 IExPT0tVUF9MMiAocCk7Ci0KLSAgaWYgKGJhc2VbTDFdID09IE5VTEwpCi0g ICAgYmFzZVtMMV0gPSBYQ05FV1ZFQyAocGFnZV9lbnRyeSAqLCBQQUdFX0wy X1NJWkUpOwotCi0gIGJhc2VbTDFdW0wyXSA9IGVudHJ5OwotfQotCi0vKiBG aW5kIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCBPQkpF Q1QuICAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2VudHJ5ICoK LXpvbmVfZ2V0X29iamVjdF9wYWdlIChjb25zdCB2b2lkICpvYmplY3QpCi17 Ci0gIHJldHVybiBsb29rdXBfcGFnZV90YWJsZV9lbnRyeSAob2JqZWN0KTsK LX0KLQotLyogRmluZCB3aGljaCBlbGVtZW50IG9mIHRoZSBhbGxvY19iaXRz IGFycmF5IE9CSkVDVCBzaG91bGQgYmUKLSAgIHJlY29yZGVkIGluLiAgKi8K LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci16b25lX2dldF9vYmplY3Rf YWxsb2Nfd29yZCAoY29uc3Qgdm9pZCAqb2JqZWN0KQotewotICByZXR1cm4g KCgoc2l6ZV90KSBvYmplY3QgJiAoR0dDX1BBR0VfU0laRSAtIDEpKQotCSAg LyAoOCAqIHNpemVvZiAoYWxsb2NfdHlwZSkgKiBCWVRFU19QRVJfQUxMT0Nf QklUKSk7Ci19Ci0KLS8qIEZpbmQgd2hpY2ggYml0IG9mIHRoZSBhcHByb3By aWF0ZSB3b3JkIGluIHRoZSBhbGxvY19iaXRzIGFycmF5Ci0gICBPQkpFQ1Qg c2hvdWxkIGJlIHJlY29yZGVkIGluLiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50Ci16b25lX2dldF9vYmplY3RfYWxsb2NfYml0IChjb25zdCB2 b2lkICpvYmplY3QpCi17Ci0gIHJldHVybiAoKChzaXplX3QpIG9iamVjdCAv IEJZVEVTX1BFUl9BTExPQ19CSVQpCi0JICAlICg4ICogc2l6ZW9mIChhbGxv Y190eXBlKSkpOwotfQotCi0vKiBGaW5kIHdoaWNoIGVsZW1lbnQgb2YgdGhl IG1hcmtfYml0cyBhcnJheSBPQkpFQ1Qgc2hvdWxkIGJlIHJlY29yZGVkCi0g ICBpbi4gICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotem9uZV9n ZXRfb2JqZWN0X21hcmtfd29yZCAoY29uc3Qgdm9pZCAqb2JqZWN0KQotewot ICByZXR1cm4gKCgoc2l6ZV90KSBvYmplY3QgJiAoR0dDX1BBR0VfU0laRSAt IDEpKQotCSAgLyAoOCAqIHNpemVvZiAobWFya190eXBlKSAqIEJZVEVTX1BF Ul9NQVJLX0JJVCkpOwotfQotCi0vKiBGaW5kIHdoaWNoIGJpdCBvZiB0aGUg YXBwcm9wcmlhdGUgd29yZCBpbiB0aGUgbWFya19iaXRzIGFycmF5Ci0gICBP QkpFQ1Qgc2hvdWxkIGJlIHJlY29yZGVkIGluLiAgKi8KLXN0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50Ci16b25lX2dldF9vYmplY3RfbWFya19iaXQgKGNv bnN0IHZvaWQgKm9iamVjdCkKLXsKLSAgcmV0dXJuICgoKHNpemVfdCkgb2Jq ZWN0IC8gQllURVNfUEVSX01BUktfQklUKQotCSAgJSAoOCAqIHNpemVvZiAo bWFya190eXBlKSkpOwotfQotCi0vKiBTZXQgdGhlIGFsbG9jYXRpb24gYml0 IGNvcnJlc3BvbmRpbmcgdG8gT0JKRUNUIGluIGl0cyBwYWdlJ3MKLSAgIGJp dG1hcC4gIFVzZWQgdG8gc3BsaXQgdGhpcyBvYmplY3QgZnJvbSB0aGUgcHJl Y2VkaW5nIG9uZS4gICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXpvbmVfc2V0 X29iamVjdF9hbGxvY19iaXQgKGNvbnN0IHZvaWQgKm9iamVjdCkKLXsKLSAg c3RydWN0IHNtYWxsX3BhZ2VfZW50cnkgKnBhZ2UKLSAgICA9IChzdHJ1Y3Qg c21hbGxfcGFnZV9lbnRyeSAqKSB6b25lX2dldF9vYmplY3RfcGFnZSAob2Jq ZWN0KTsKLSAgdW5zaWduZWQgaW50IHN0YXJ0X3dvcmQgPSB6b25lX2dldF9v YmplY3RfYWxsb2Nfd29yZCAob2JqZWN0KTsKLSAgdW5zaWduZWQgaW50IHN0 YXJ0X2JpdCA9IHpvbmVfZ2V0X29iamVjdF9hbGxvY19iaXQgKG9iamVjdCk7 Ci0KLSAgcGFnZS0+YWxsb2NfYml0c1tzdGFydF93b3JkXSB8PSAxTCA8PCBz dGFydF9iaXQ7Ci19Ci0KLS8qIENsZWFyIHRoZSBhbGxvY2F0aW9uIGJpdCBj b3JyZXNwb25kaW5nIHRvIE9CSkVDVCBpbiBQQUdFJ3MKLSAgIGJpdG1hcC4g IFVzZWQgdG8gY29hbGVzY2UgdGhpcyBvYmplY3Qgd2l0aCB0aGUgcHJlY2Vk aW5nCi0gICBvbmUuICAqLwotc3RhdGljIGlubGluZSB2b2lkCi16b25lX2Ns ZWFyX29iamVjdF9hbGxvY19iaXQgKHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5 ICpwYWdlLAotCQkJICAgICBjb25zdCB2b2lkICpvYmplY3QpCi17Ci0gIHVu c2lnbmVkIGludCBzdGFydF93b3JkID0gem9uZV9nZXRfb2JqZWN0X2FsbG9j X3dvcmQgKG9iamVjdCk7Ci0gIHVuc2lnbmVkIGludCBzdGFydF9iaXQgPSB6 b25lX2dldF9vYmplY3RfYWxsb2NfYml0IChvYmplY3QpOwotCi0gIC8qIFdv dWxkIHhvciBiZSBxdWlja2VyPyAgKi8KLSAgcGFnZS0+YWxsb2NfYml0c1tz dGFydF93b3JkXSAmPSB+KDFMIDw8IHN0YXJ0X2JpdCk7Ci19Ci0KLS8qIEZp bmQgdGhlIHNpemUgb2YgdGhlIG9iamVjdCB3aGljaCBzdGFydHMgYXQgU1RB UlRfV09SRCBhbmQKLSAgIFNUQVJUX0JJVCBpbiBBTExPQ19CSVRTLCB3aGlj aCBpcyBhdCBtb3N0IE1BWF9TSVpFIGJ5dGVzLgotICAgSGVscGVyIGZ1bmN0 aW9uIGZvciBnZ2NfZ2V0X3NpemUgYW5kIHpvbmVfZmluZF9vYmplY3Rfc2l6 ZS4gICovCi0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci16b25lX29iamVjdF9z aXplXzEgKGFsbG9jX3R5cGUgKmFsbG9jX2JpdHMsCi0JCSAgICBzaXplX3Qg c3RhcnRfd29yZCwgc2l6ZV90IHN0YXJ0X2JpdCwKLQkJICAgIHNpemVfdCBt YXhfc2l6ZSkKLXsKLSAgc2l6ZV90IHNpemU7Ci0gIGFsbG9jX3R5cGUgYWxs b2Nfd29yZDsKLSAgaW50IGluZHg7Ci0KLSAgLyogTG9hZCB0aGUgZmlyc3Qg d29yZC4gICovCi0gIGFsbG9jX3dvcmQgPSBhbGxvY19iaXRzW3N0YXJ0X3dv cmQrK107Ci0KLSAgLyogSWYgdGhhdCB3YXMgdGhlIGxhc3QgYml0IGluIHRo aXMgd29yZCwgd2UnbGwgd2FudCB0byBjb250aW51ZQotICAgICB3aXRoIHRo ZSBuZXh0IHdvcmQuICBPdGhlcndpc2UsIGhhbmRsZSB0aGUgcmVzdCBvZiB0 aGlzIHdvcmQuICAqLwotICBpZiAoc3RhcnRfYml0KQotICAgIHsKLSAgICAg IGluZHggPSBhbGxvY19mZnMgKGFsbG9jX3dvcmQgPj4gc3RhcnRfYml0KTsK LSAgICAgIGlmIChpbmR4KQotCS8qIGluZHggaXMgMS1iYXNlZC4gIFdlIHN0 YXJ0ZWQgYXQgdGhlIGJpdCBhZnRlciB0aGUgb2JqZWN0J3MKLQkgICBzdGFy dCwgYnV0IHdlIGFsc28gZW5kZWQgYXQgdGhlIGJpdCBhZnRlciB0aGUgb2Jq ZWN0J3MgZW5kLgotCSAgIEl0IGNhbmNlbHMgb3V0LiAgKi8KLQlyZXR1cm4g aW5keCAqIEJZVEVTX1BFUl9BTExPQ19CSVQ7Ci0KLSAgICAgIC8qIFRoZSBl eHRyYSAxIGFjY291bnRzIGZvciB0aGUgc3RhcnRpbmcgdW5pdCwgYmVmb3Jl IHN0YXJ0X2JpdC4gICovCi0gICAgICBzaXplID0gKHNpemVvZiAoYWxsb2Nf dHlwZSkgKiA4IC0gc3RhcnRfYml0ICsgMSkgKiBCWVRFU19QRVJfQUxMT0Nf QklUOwotCi0gICAgICBpZiAoc2l6ZSA+PSBtYXhfc2l6ZSkKLQlyZXR1cm4g bWF4X3NpemU7Ci0KLSAgICAgIGFsbG9jX3dvcmQgPSBhbGxvY19iaXRzW3N0 YXJ0X3dvcmQrK107Ci0gICAgfQotICBlbHNlCi0gICAgc2l6ZSA9IEJZVEVT X1BFUl9BTExPQ19CSVQ7Ci0KLSAgd2hpbGUgKGFsbG9jX3dvcmQgPT0gMCkK LSAgICB7Ci0gICAgICBzaXplICs9IHNpemVvZiAoYWxsb2NfdHlwZSkgKiA4 ICogQllURVNfUEVSX0FMTE9DX0JJVDsKLSAgICAgIGlmIChzaXplID49IG1h eF9zaXplKQotCXJldHVybiBtYXhfc2l6ZTsKLSAgICAgIGFsbG9jX3dvcmQg PSBhbGxvY19iaXRzW3N0YXJ0X3dvcmQrK107Ci0gICAgfQotCi0gIGluZHgg PSBhbGxvY19mZnMgKGFsbG9jX3dvcmQpOwotICByZXR1cm4gc2l6ZSArIChp bmR4IC0gMSkgKiBCWVRFU19QRVJfQUxMT0NfQklUOwotfQotCi0vKiBGaW5k IHRoZSBzaXplIG9mIE9CSkVDVCBvbiBzbWFsbCBwYWdlIFBBR0UuICAqLwot Ci1zdGF0aWMgaW5saW5lIHNpemVfdAotem9uZV9maW5kX29iamVjdF9zaXpl IChzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqcGFnZSwKLQkJICAgICAgIGNv bnN0IHZvaWQgKm9iamVjdCkKLXsKLSAgY29uc3QgY2hhciAqb2JqZWN0X21p ZHB0ciA9IChjb25zdCBjaGFyICopIG9iamVjdCArIEJZVEVTX1BFUl9BTExP Q19CSVQ7Ci0gIHVuc2lnbmVkIGludCBzdGFydF93b3JkID0gem9uZV9nZXRf b2JqZWN0X2FsbG9jX3dvcmQgKG9iamVjdF9taWRwdHIpOwotICB1bnNpZ25l ZCBpbnQgc3RhcnRfYml0ID0gem9uZV9nZXRfb2JqZWN0X2FsbG9jX2JpdCAo b2JqZWN0X21pZHB0cik7Ci0gIHNpemVfdCBtYXhfc2l6ZSA9IChwYWdlLT5j b21tb24ucGFnZSArIFNNQUxMX1BBR0VfU0laRQotCQkgICAgIC0gKGNvbnN0 IGNoYXIgKikgb2JqZWN0KTsKLQotICByZXR1cm4gem9uZV9vYmplY3Rfc2l6 ZV8xIChwYWdlLT5hbGxvY19iaXRzLCBzdGFydF93b3JkLCBzdGFydF9iaXQs Ci0JCQkgICAgIG1heF9zaXplKTsKLX0KLQotLyogaGlnaGVzdF9iaXQgYXNz dW1lcyB0aGF0IGFsbG9jX3R5cGUgaXMgMzIgYml0cy4gICovCi1leHRlcm4g Y2hhciBjaGVja19hbGxvY190eXBlX3NpemVbKHNpemVvZiAoYWxsb2NfdHlw ZSkgPT0gNCkgPyAxIDogLTFdOwotCi0vKiBGaW5kIHRoZSBoaWdoZXN0IHNl dCBiaXQgaW4gVkFMVUUuICBSZXR1cm5zIHRoZSBiaXQgbnVtYmVyIG9mIHRo YXQKLSAgIGJpdCwgdXNpbmcgdGhlIHNhbWUgdmFsdWVzIGFzIGZmcy4gICov Ci1zdGF0aWMgaW5saW5lIGFsbG9jX3R5cGUKLWhpZ2hlc3RfYml0IChhbGxv Y190eXBlIHZhbHVlKQotewotICAvKiBUaGlzIGFsc28gYXNzdW1lcyB0aGF0 IGFsbG9jX3R5cGUgaXMgdW5zaWduZWQuICAqLwotICB2YWx1ZSB8PSB2YWx1 ZSA+PiAxOwotICB2YWx1ZSB8PSB2YWx1ZSA+PiAyOwotICB2YWx1ZSB8PSB2 YWx1ZSA+PiA0OwotICB2YWx1ZSB8PSB2YWx1ZSA+PiA4OwotICB2YWx1ZSB8 PSB2YWx1ZSA+PiAxNjsKLSAgdmFsdWUgPSB2YWx1ZSBeICh2YWx1ZSA+PiAx KTsKLSAgcmV0dXJuIGFsbG9jX2ZmcyAodmFsdWUpOwotfQotCi0vKiBGaW5k IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgYW4gb2JqZWN0IHRvIFAs IHdoaWNoIG1heSBwb2ludAotICAgaW50byB0aGUgaW50ZXJpb3Igb2YgdGhl IG9iamVjdC4gICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi16b25lX2Zp bmRfb2JqZWN0X29mZnNldCAoYWxsb2NfdHlwZSAqYWxsb2NfYml0cywgc2l6 ZV90IHN0YXJ0X3dvcmQsCi0JCQkgc2l6ZV90IHN0YXJ0X2JpdCkKLXsKLSAg dW5zaWduZWQgaW50IG9mZnNldF9pbl9iaXRzOwotICBhbGxvY190eXBlIGFs bG9jX3dvcmQgPSBhbGxvY19iaXRzW3N0YXJ0X3dvcmRdOwotCi0gIC8qIE1h c2sgb2ZmIGFueSBiaXRzIGFmdGVyIHRoZSBpbml0aWFsIGJpdCwgYnV0IG1h a2Ugc3VyZSB0byBpbmNsdWRlCi0gICAgIHRoZSBpbml0aWFsIGJpdCBpbiB0 aGUgcmVzdWx0LiAgTm90ZSB0aGF0IFNUQVJUX0JJVCBpcwotICAgICAwLWJh c2VkLiAgKi8KLSAgaWYgKHN0YXJ0X2JpdCA8IDggKiBzaXplb2YgKGFsbG9j X3R5cGUpIC0gMSkKLSAgICBhbGxvY193b3JkICY9ICgxIDw8IChzdGFydF9i aXQgKyAxKSkgLSAxOwotICBvZmZzZXRfaW5fYml0cyA9IHN0YXJ0X2JpdDsK LQotICAvKiBTZWFyY2ggZm9yIHRoZSBzdGFydCBvZiB0aGUgb2JqZWN0LiAg Ki8KLSAgd2hpbGUgKGFsbG9jX3dvcmQgPT0gMCAmJiBzdGFydF93b3JkID4g MCkKLSAgICB7Ci0gICAgICBhbGxvY193b3JkID0gYWxsb2NfYml0c1stLXN0 YXJ0X3dvcmRdOwotICAgICAgb2Zmc2V0X2luX2JpdHMgKz0gOCAqIHNpemVv ZiAoYWxsb2NfdHlwZSk7Ci0gICAgfQotICAvKiBXZSBtdXN0IGFsd2F5cyBm aW5kIGEgc2V0IGJpdC4gICovCi0gIGdjY19hc3NlcnQgKGFsbG9jX3dvcmQg IT0gMCk7Ci0gIC8qIE5vdGUgdGhhdCB0aGUgcmVzdWx0IG9mIGhpZ2hlc3Rf Yml0IGlzIDEtYmFzZWQuICAqLwotICBvZmZzZXRfaW5fYml0cyAtPSBoaWdo ZXN0X2JpdCAoYWxsb2Nfd29yZCkgLSAxOwotCi0gIHJldHVybiBCWVRFU19Q RVJfQUxMT0NfQklUICogb2Zmc2V0X2luX2JpdHM7Ci19Ci0KLS8qIEFsbG9j YXRlIHRoZSBtYXJrIGJpdHMgZm9yIGV2ZXJ5IHpvbmUsIGFuZCBzZXQgdGhl IHBvaW50ZXJzIG9uIGVhY2gKLSAgIHBhZ2UuICAqLwotc3RhdGljIHZvaWQK LXpvbmVfYWxsb2NhdGVfbWFya3MgKHZvaWQpCi17Ci0gIHN0cnVjdCBhbGxv Y196b25lICp6b25lOwotCi0gIGZvciAoem9uZSA9IEcuem9uZXM7IHpvbmU7 IHpvbmUgPSB6b25lLT5uZXh0X3pvbmUpCi0gICAgewotICAgICAgc3RydWN0 IHNtYWxsX3BhZ2VfZW50cnkgKnBhZ2U7Ci0gICAgICBtYXJrX3R5cGUgKmN1 cl9tYXJrczsKLSAgICAgIHNpemVfdCBtYXJrX3dvcmRzLCBtYXJrX3dvcmRz X3Blcl9wYWdlOwotI2lmZGVmIEVOQUJMRV9DSEVDS0lORwotICAgICAgc2l6 ZV90IG4gPSAwOwotI2VuZGlmCi0KLSAgICAgIG1hcmtfd29yZHNfcGVyX3Bh Z2UKLQk9IChHR0NfUEFHRV9TSVpFICsgQllURVNfUEVSX01BUktfV09SRCAt IDEpIC8gQllURVNfUEVSX01BUktfV09SRDsKLSAgICAgIG1hcmtfd29yZHMg PSB6b25lLT5uX3NtYWxsX3BhZ2VzICogbWFya193b3Jkc19wZXJfcGFnZTsK LSAgICAgIHpvbmUtPm1hcmtfYml0cyA9IChtYXJrX3R5cGUgKikgeGNhbGxv YyAoc2l6ZW9mIChtYXJrX3R5cGUpLAotCQkJCQkJICAgbWFya193b3Jkcyk7 Ci0gICAgICBjdXJfbWFya3MgPSB6b25lLT5tYXJrX2JpdHM7Ci0gICAgICBm b3IgKHBhZ2UgPSB6b25lLT5wYWdlczsgcGFnZTsgcGFnZSA9IHBhZ2UtPm5l eHQpCi0JewotCSAgcGFnZS0+bWFya19iaXRzID0gY3VyX21hcmtzOwotCSAg Y3VyX21hcmtzICs9IG1hcmtfd29yZHNfcGVyX3BhZ2U7Ci0jaWZkZWYgRU5B QkxFX0NIRUNLSU5HCi0JICBuKys7Ci0jZW5kaWYKLQl9Ci0gICAgICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0IChuID09IHpvbmUtPm5fc21hbGxfcGFnZXMpOwot ICAgIH0KLQotICAvKiBXZSBkb24ndCBjb2xsZWN0IHRoZSBQQ0ggem9uZSwg YnV0IHdlIGRvIGhhdmUgdG8gbWFyayBpdAotICAgICAoZm9yIG5vdykuICAq LwotICBpZiAocGNoX3pvbmUuYnl0ZXMpCi0gICAgcGNoX3pvbmUubWFya19i aXRzCi0gICAgICA9IChtYXJrX3R5cGUgKikgeGNhbGxvYyAoc2l6ZW9mICht YXJrX3R5cGUpLAotCQkJICAgICAgIENFSUwgKHBjaF96b25lLmJ5dGVzLCBC WVRFU19QRVJfTUFSS19XT1JEKSk7Ci19Ci0KLS8qIEFmdGVyIG1hcmtpbmcg YW5kIHN3ZWVwaW5nLCByZWxlYXNlIHRoZSBtZW1vcnkgdXNlZCBmb3IgbWFy ayBiaXRzLiAgKi8KLXN0YXRpYyB2b2lkCi16b25lX2ZyZWVfbWFya3MgKHZv aWQpCi17Ci0gIHN0cnVjdCBhbGxvY196b25lICp6b25lOwotCi0gIGZvciAo em9uZSA9IEcuem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0X3pvbmUp Ci0gICAgaWYgKHpvbmUtPm1hcmtfYml0cykKLSAgICAgIHsKLQlmcmVlICh6 b25lLT5tYXJrX2JpdHMpOwotCXpvbmUtPm1hcmtfYml0cyA9IE5VTEw7Ci0g ICAgICB9Ci0KLSAgaWYgKHBjaF96b25lLmJ5dGVzKQotICAgIHsKLSAgICAg IGZyZWUgKHBjaF96b25lLm1hcmtfYml0cyk7Ci0gICAgICBwY2hfem9uZS5t YXJrX2JpdHMgPSBOVUxMOwotICAgIH0KLX0KLQotI2lmZGVmIFVTSU5HX01N QVAKLS8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgb2YgYW5vbnltb3VzIG1lbW9y eSwgcHJlZmVyYWJseSBuZWFyIFBSRUYsCi0gICAoaWYgbm9uLW51bGwpLiAg VGhlIGlmZGVmIHN0cnVjdHVyZSBoZXJlIGlzIGludGVuZGVkIHRvIGNhdXNl IGEKLSAgIGNvbXBpbGUgZXJyb3IgdW5sZXNzIGV4YWN0bHkgb25lIG9mIHRo ZSBIQVZFXyogaXMgZGVmaW5lZC4gICovCi0KLXN0YXRpYyBpbmxpbmUgY2hh ciAqCi1hbGxvY19hbm9uIChjaGFyICpwcmVmIEFUVFJJQlVURV9VTlVTRUQs IHNpemVfdCBzaXplLCBzdHJ1Y3QgYWxsb2Nfem9uZSAqem9uZSkKLXsKLSNp ZmRlZiBIQVZFX01NQVBfQU5PTgotICBjaGFyICpwYWdlID0gKGNoYXIgKikg bW1hcCAocHJlZiwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJ CSAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwot I2VuZGlmCi0jaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCi0gIGNoYXIgKnBh Z2UgPSAoY2hhciAqKSBtbWFwIChwcmVmLCBzaXplLCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFLAotCQkJICAgICAgTUFQX1BSSVZBVEUsIEcuZGV2X3plcm9f ZmQsIDApOwotI2VuZGlmCi0KLSAgaWYgKHBhZ2UgPT0gKGNoYXIgKikgTUFQ X0ZBSUxFRCkKLSAgICB7Ci0gICAgICBwZXJyb3IgKCJ2aXJ0dWFsIG1lbW9y eSBleGhhdXN0ZWQiKTsKLSAgICAgIGV4aXQgKEZBVEFMX0VYSVRfQ09ERSk7 Ci0gICAgfQotCi0gIC8qIFJlbWVtYmVyIHRoYXQgd2UgYWxsb2NhdGVkIHRo aXMgbWVtb3J5LiAgKi8KLSAgem9uZS0+Ynl0ZXNfbWFwcGVkICs9IHNpemU7 Ci0KLSAgLyogUHJldGVuZCB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUg YWxsb2NhdGVkIHBhZ2VzLiAgV2UnbGwgZW5hYmxlCi0gICAgIGFjY2VzcyB0 byBzbWFsbGVyIHBpZWNlcyBvZiB0aGUgYXJlYSBpbiBnZ2NfaW50ZXJuYWxf YWxsb2MuICBEaXNjYXJkIHRoZQotICAgICBoYW5kbGUgdG8gYXZvaWQgaGFu ZGxlIGxlYWsuICAqLwotICBWQUxHUklORF9ESVNDQVJEIChWQUxHUklORF9N QUtFX01FTV9OT0FDQ0VTUyAocGFnZSwgc2l6ZSkpOwotCi0gIHJldHVybiBw YWdlOwotfQotI2VuZGlmCi0KLS8qIEFsbG9jYXRlIGEgbmV3IHBhZ2UgZm9y IGFsbG9jYXRpbmcgc21hbGwgb2JqZWN0cyBpbiBaT05FLCBhbmQKLSAgIHJl dHVybiBhbiBlbnRyeSBmb3IgaXQuICAqLwotCi1zdGF0aWMgc3RydWN0IHNt YWxsX3BhZ2VfZW50cnkgKgotYWxsb2Nfc21hbGxfcGFnZSAoc3RydWN0IGFs bG9jX3pvbmUgKnpvbmUpCi17Ci0gIHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5 ICplbnRyeTsKLQotICAvKiBDaGVjayB0aGUgbGlzdCBvZiBmcmVlIHBhZ2Vz IGZvciBvbmUgd2UgY2FuIHVzZS4gICovCi0gIGVudHJ5ID0gem9uZS0+ZnJl ZV9wYWdlczsKLSAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgewotICAgICAg LyogUmVjeWNsZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmcm9tIHRoaXMgcGFn ZSAuLi4gICovCi0gICAgICB6b25lLT5mcmVlX3BhZ2VzID0gZW50cnktPm5l eHQ7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgLyogV2Ugd2FudCBq dXN0IG9uZSBwYWdlLiAgQWxsb2NhdGUgYSBidW5jaCBvZiB0aGVtIGFuZCBw dXQgdGhlCi0JIGV4dHJhcyBvbiB0aGUgZnJlZWxpc3QuICAoQ2FuIG9ubHkg ZG8gdGhpcyBvcHRpbWl6YXRpb24gd2l0aAotCSBtbWFwIGZvciBiYWNraW5n IHN0b3JlLikgICovCi0gICAgICBzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAq ZSwgKmYgPSB6b25lLT5mcmVlX3BhZ2VzOwotICAgICAgaW50IGk7Ci0gICAg ICBjaGFyICpwYWdlOwotCi0gICAgICBwYWdlID0gYWxsb2NfYW5vbiAoTlVM TCwgR0dDX1BBR0VfU0laRSAqIEcucXVpcmVfc2l6ZSwgem9uZSk7Ci0KLSAg ICAgIC8qIFRoaXMgbG9vcCBjb3VudHMgZG93biBzbyB0aGF0IHRoZSBjaGFp biB3aWxsIGJlIGluIGFzY2VuZGluZwotCSBtZW1vcnkgb3JkZXIuICAqLwot ICAgICAgZm9yIChpID0gRy5xdWlyZV9zaXplIC0gMTsgaSA+PSAxOyBpLS0p Ci0JewotCSAgZSA9IFhDTkVXVkFSIChzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRy eSwgRy5zbWFsbF9wYWdlX292ZXJoZWFkKTsKLQkgIGUtPmNvbW1vbi5wYWdl ID0gcGFnZSArIChpIDw8IEdHQ19QQUdFX1NISUZUKTsKLQkgIGUtPmNvbW1v bi56b25lID0gem9uZTsKLQkgIGUtPm5leHQgPSBmOwotCSAgZiA9IGU7Ci0J ICBzZXRfcGFnZV90YWJsZV9lbnRyeSAoZS0+Y29tbW9uLnBhZ2UsICZlLT5j b21tb24pOwotCX0KLQotICAgICAgem9uZS0+ZnJlZV9wYWdlcyA9IGY7Ci0K LSAgICAgIGVudHJ5ID0gWENORVdWQVIgKHN0cnVjdCBzbWFsbF9wYWdlX2Vu dHJ5LCBHLnNtYWxsX3BhZ2Vfb3ZlcmhlYWQpOwotICAgICAgZW50cnktPmNv bW1vbi5wYWdlID0gcGFnZTsKLSAgICAgIGVudHJ5LT5jb21tb24uem9uZSA9 IHpvbmU7Ci0gICAgICBzZXRfcGFnZV90YWJsZV9lbnRyeSAocGFnZSwgJmVu dHJ5LT5jb21tb24pOwotICAgIH0KLQotICB6b25lLT5uX3NtYWxsX3BhZ2Vz Kys7Ci0KLSAgaWYgKEdHQ19ERUJVR19MRVZFTCA+PSAyKQotICAgIGZwcmlu dGYgKEcuZGVidWdfZmlsZSwKLQkgICAgICJBbGxvY2F0aW5nICVzIHBhZ2Ug YXQgJXAsIGRhdGEgJXAtJXBcbiIsCi0JICAgICBlbnRyeS0+Y29tbW9uLnpv bmUtPm5hbWUsIChQVFIpIGVudHJ5LCBlbnRyeS0+Y29tbW9uLnBhZ2UsCi0J ICAgICBlbnRyeS0+Y29tbW9uLnBhZ2UgKyBTTUFMTF9QQUdFX1NJWkUgLSAx KTsKLQotICByZXR1cm4gZW50cnk7Ci19Ci0KLS8qIEFsbG9jYXRlIGEgbGFy Z2UgcGFnZSBvZiBzaXplIFNJWkUgaW4gWk9ORS4gICovCi0KLXN0YXRpYyBz dHJ1Y3QgbGFyZ2VfcGFnZV9lbnRyeSAqCi1hbGxvY19sYXJnZV9wYWdlIChz aXplX3Qgc2l6ZSwgc3RydWN0IGFsbG9jX3pvbmUgKnpvbmUpCi17Ci0gIHN0 cnVjdCBsYXJnZV9wYWdlX2VudHJ5ICplbnRyeTsKLSAgY2hhciAqcGFnZTsK LSAgc2l6ZV90IG5lZWRlZF9zaXplOwotCi0gIG5lZWRlZF9zaXplID0gc2l6 ZSArIHNpemVvZiAoc3RydWN0IGxhcmdlX3BhZ2VfZW50cnkpOwotICBwYWdl ID0gWE5FV1ZBUiAoY2hhciwgbmVlZGVkX3NpemUpOwotCi0gIGVudHJ5ID0g KHN0cnVjdCBsYXJnZV9wYWdlX2VudHJ5ICopIHBhZ2U7Ci0KLSAgZW50cnkt Pm5leHQgPSBOVUxMOwotICBlbnRyeS0+Y29tbW9uLnBhZ2UgPSBwYWdlICsg c2l6ZW9mIChzdHJ1Y3QgbGFyZ2VfcGFnZV9lbnRyeSk7Ci0gIGVudHJ5LT5j b21tb24ubGFyZ2VfcCA9IHRydWU7Ci0gIGVudHJ5LT5jb21tb24ucGNoX3Ag PSBmYWxzZTsKLSAgZW50cnktPmNvbW1vbi56b25lID0gem9uZTsKLSAgZW50 cnktPmNvbW1vbi5zdXJ2aXZlZCA9IDA7Ci0gIGVudHJ5LT5tYXJrX3AgPSBm YWxzZTsKLSAgZW50cnktPmJ5dGVzID0gc2l6ZTsKLSAgZW50cnktPnByZXYg PSBOVUxMOwotCi0gIHNldF9wYWdlX3RhYmxlX2VudHJ5IChlbnRyeS0+Y29t bW9uLnBhZ2UsICZlbnRyeS0+Y29tbW9uKTsKLQotICBpZiAoR0dDX0RFQlVH X0xFVkVMID49IDIpCi0gICAgZnByaW50ZiAoRy5kZWJ1Z19maWxlLAotCSAg ICAgIkFsbG9jYXRpbmcgJXMgbGFyZ2UgcGFnZSBhdCAlcCwgZGF0YSAlcC0l cFxuIiwKLQkgICAgIGVudHJ5LT5jb21tb24uem9uZS0+bmFtZSwgKFBUUikg ZW50cnksIGVudHJ5LT5jb21tb24ucGFnZSwKLQkgICAgIGVudHJ5LT5jb21t b24ucGFnZSArIFNNQUxMX1BBR0VfU0laRSAtIDEpOwotCi0gIHJldHVybiBl bnRyeTsKLX0KLQotCi0vKiBGb3IgYSBwYWdlIHRoYXQgaXMgbm8gbG9uZ2Vy IG5lZWRlZCwgcHV0IGl0IG9uIHRoZSBmcmVlIHBhZ2UgbGlzdC4gICovCi0K LXN0YXRpYyBpbmxpbmUgdm9pZAotZnJlZV9zbWFsbF9wYWdlIChzdHJ1Y3Qg c21hbGxfcGFnZV9lbnRyeSAqZW50cnkpCi17Ci0gIGlmIChHR0NfREVCVUdf TEVWRUwgPj0gMikKLSAgICBmcHJpbnRmIChHLmRlYnVnX2ZpbGUsCi0JICAg ICAiRGVhbGxvY2F0aW5nICVzIHBhZ2UgYXQgJXAsIGRhdGEgJXAtJXBcbiIs Ci0JICAgICBlbnRyeS0+Y29tbW9uLnpvbmUtPm5hbWUsIChQVFIpIGVudHJ5 LAotCSAgICAgZW50cnktPmNvbW1vbi5wYWdlLCBlbnRyeS0+Y29tbW9uLnBh Z2UgKyBTTUFMTF9QQUdFX1NJWkUgLSAxKTsKLQotICBnY2NfYXNzZXJ0ICgh ZW50cnktPmNvbW1vbi5sYXJnZV9wKTsKLQotICAvKiBNYXJrIHRoZSBwYWdl IGFzIGluYWNjZXNzaWJsZS4gIERpc2NhcmQgdGhlIGhhbmRsZSB0bwotICAg ICBhdm9pZCBoYW5kbGUgbGVhay4gICovCi0gIFZBTEdSSU5EX0RJU0NBUkQg KFZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTIChlbnRyeS0+Y29tbW9uLnBh Z2UsCi0JCQkJCQlTTUFMTF9QQUdFX1NJWkUpKTsKLQotICBlbnRyeS0+bmV4 dCA9IGVudHJ5LT5jb21tb24uem9uZS0+ZnJlZV9wYWdlczsKLSAgZW50cnkt PmNvbW1vbi56b25lLT5mcmVlX3BhZ2VzID0gZW50cnk7Ci0gIGVudHJ5LT5j b21tb24uem9uZS0+bl9zbWFsbF9wYWdlcy0tOwotfQotCi0vKiBSZWxlYXNl IGEgbGFyZ2UgcGFnZSB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQuICAqLwot Ci1zdGF0aWMgaW5saW5lIHZvaWQKLWZyZWVfbGFyZ2VfcGFnZSAoc3RydWN0 IGxhcmdlX3BhZ2VfZW50cnkgKmVudHJ5KQotewotICBpZiAoR0dDX0RFQlVH X0xFVkVMID49IDIpCi0gICAgZnByaW50ZiAoRy5kZWJ1Z19maWxlLAotCSAg ICAgIkRlYWxsb2NhdGluZyAlcyBwYWdlIGF0ICVwLCBkYXRhICVwLSVwXG4i LAotCSAgICAgZW50cnktPmNvbW1vbi56b25lLT5uYW1lLCAoUFRSKSBlbnRy eSwKLQkgICAgIGVudHJ5LT5jb21tb24ucGFnZSwgZW50cnktPmNvbW1vbi5w YWdlICsgU01BTExfUEFHRV9TSVpFIC0gMSk7Ci0KLSAgZ2NjX2Fzc2VydCAo ZW50cnktPmNvbW1vbi5sYXJnZV9wKTsKLQotICBzZXRfcGFnZV90YWJsZV9l bnRyeSAoZW50cnktPmNvbW1vbi5wYWdlLCBOVUxMKTsKLSAgZnJlZSAoZW50 cnkpOwotfQotCi0vKiBSZWxlYXNlIHRoZSBmcmVlIHBhZ2UgY2FjaGUgdG8g dGhlIHN5c3RlbS4gICovCi0KLXN0YXRpYyB2b2lkCi1yZWxlYXNlX3BhZ2Vz IChzdHJ1Y3QgYWxsb2Nfem9uZSAqem9uZSkKLXsKLSNpZmRlZiBVU0lOR19N TUFQCi0gIHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5ICpwLCAqbmV4dDsKLSAg Y2hhciAqc3RhcnQ7Ci0gIHNpemVfdCBsZW47Ci0KLSAgLyogR2F0aGVyIHVw IGFkamFjZW50IHBhZ2VzIHNvIHRoZXkgYXJlIHVubWFwcGVkIHRvZ2V0aGVy LiAgKi8KLSAgcCA9IHpvbmUtPmZyZWVfcGFnZXM7Ci0KLSAgd2hpbGUgKHAp Ci0gICAgewotICAgICAgc3RhcnQgPSBwLT5jb21tb24ucGFnZTsKLSAgICAg IG5leHQgPSBwLT5uZXh0OwotICAgICAgbGVuID0gU01BTExfUEFHRV9TSVpF OwotICAgICAgc2V0X3BhZ2VfdGFibGVfZW50cnkgKHAtPmNvbW1vbi5wYWdl LCBOVUxMKTsKLSAgICAgIHAgPSBuZXh0OwotCi0gICAgICB3aGlsZSAocCAm JiBwLT5jb21tb24ucGFnZSA9PSBzdGFydCArIGxlbikKLQl7Ci0JICBuZXh0 ID0gcC0+bmV4dDsKLQkgIGxlbiArPSBTTUFMTF9QQUdFX1NJWkU7Ci0JICBz ZXRfcGFnZV90YWJsZV9lbnRyeSAocC0+Y29tbW9uLnBhZ2UsIE5VTEwpOwot CSAgcCA9IG5leHQ7Ci0JfQotCi0gICAgICBtdW5tYXAgKHN0YXJ0LCBsZW4p OwotICAgICAgem9uZS0+Ynl0ZXNfbWFwcGVkIC09IGxlbjsKLSAgICB9Ci0K LSAgem9uZS0+ZnJlZV9wYWdlcyA9IE5VTEw7Ci0jZW5kaWYKLX0KLQotLyog UGxhY2UgdGhlIGJsb2NrIGF0IFBUUiBvZiBzaXplIFNJWkUgb24gdGhlIGZy ZWUgbGlzdCBmb3IgWk9ORS4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAot ZnJlZV9jaHVuayAoY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwgc3RydWN0IGFs bG9jX3pvbmUgKnpvbmUpCi17Ci0gIHN0cnVjdCBhbGxvY19jaHVuayAqY2h1 bmsgPSAoc3RydWN0IGFsbG9jX2NodW5rICopIHB0cjsKLSAgc2l6ZV90IGJp biA9IDA7Ci0KLSAgYmluID0gU0laRV9CSU5fRE9XTiAoc2l6ZSk7Ci0gIGdj Y19hc3NlcnQgKGJpbiAhPSAwKTsKLSAgaWYgKGJpbiA+IE5VTV9GUkVFX0JJ TlMpCi0gICAgewotICAgICAgYmluID0gMDsKLSAgICAgIFZBTEdSSU5EX0RJ U0NBUkQgKFZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRCAoY2h1bmssCi0J CQkJCQkgICAgIHNpemVvZiAoc3RydWN0Ci0JCQkJCQkJICAgICBhbGxvY19j aHVuaykpKTsKLSAgICAgIGNodW5rLT5zaXplID0gc2l6ZTsKLSAgICAgIGNo dW5rLT5uZXh0X2ZyZWUgPSB6b25lLT5mcmVlX2NodW5rc1tiaW5dOwotICAg ICAgVkFMR1JJTkRfRElTQ0FSRCAoVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NF U1MgKHB0cgotCQkJCQkJICAgICsgc2l6ZW9mIChzdHJ1Y3QKLQkJCQkJCQkg ICAgICBhbGxvY19jaHVuayksCi0JCQkJCQkgICAgc2l6ZQotCQkJCQkJICAg IC0gc2l6ZW9mIChzdHJ1Y3QKLQkJCQkJCQkgICAgICBhbGxvY19jaHVuaykp KTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBWQUxHUklORF9ESVND QVJEIChWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQgKGNodW5rLAotCQkJ CQkJICAgICBzaXplb2YgKHN0cnVjdAotCQkJCQkJCSAgICAgYWxsb2NfY2h1 bmsgKikpKTsKLSAgICAgIGNodW5rLT5uZXh0X2ZyZWUgPSB6b25lLT5mcmVl X2NodW5rc1tiaW5dOwotICAgICAgVkFMR1JJTkRfRElTQ0FSRCAoVkFMR1JJ TkRfTUFLRV9NRU1fTk9BQ0NFU1MgKHB0cgotCQkJCQkJICAgICsgc2l6ZW9m IChzdHJ1Y3QKLQkJCQkJCQkgICAgICBhbGxvY19jaHVuayAqKSwKLQkJCQkJ CSAgICBzaXplCi0JCQkJCQkgICAgLSBzaXplb2YgKHN0cnVjdAotCQkJCQkJ CSAgICAgIGFsbG9jX2NodW5rICopKSk7Ci0gICAgfQotCi0gIHpvbmUtPmZy ZWVfY2h1bmtzW2Jpbl0gPSBjaHVuazsKLSAgaWYgKGJpbiA+IHpvbmUtPmhp Z2hfZnJlZV9iaW4pCi0gICAgem9uZS0+aGlnaF9mcmVlX2JpbiA9IGJpbjsK LSAgaWYgKEdHQ19ERUJVR19MRVZFTCA+PSAzKQotICAgIGZwcmludGYgKEcu ZGVidWdfZmlsZSwgIkRlYWxsb2NhdGluZyBvYmplY3QsIGNodW5rPSVwXG4i LCAodm9pZCAqKWNodW5rKTsKLX0KLQotLyogRm9yIGEgZ2l2ZW4gc2l6ZSBv ZiBtZW1vcnkgcmVxdWVzdGVkIGZvciBhbGxvY2F0aW9uLCByZXR1cm4gdGhl Ci0gICBhY3R1YWwgc2l6ZSB0aGF0IGlzIGdvaW5nIHRvIGJlIGFsbG9jYXRl ZC4gICovCi0KLXNpemVfdAotZ2djX3JvdW5kX2FsbG9jX3NpemUgKHNpemVf dCByZXF1ZXN0ZWRfc2l6ZSkKLXsKLSAgc2l6ZV90IHNpemU7Ci0KLSAgLyog TWFrZSBzdXJlIHRoYXQgemVyby1zaXplZCBhbGxvY2F0aW9ucyBnZXQgYSB1 bmlxdWUgYW5kIGZyZWVhYmxlCi0gICAgIHBvaW50ZXIuICAqLwotICBpZiAo cmVxdWVzdGVkX3NpemUgPT0gMCkKLSAgICBzaXplID0gTUFYX0FMSUdOTUVO VDsKLSAgZWxzZQotICAgIHNpemUgPSAocmVxdWVzdGVkX3NpemUgKyBNQVhf QUxJR05NRU5UIC0gMSkgJiAtTUFYX0FMSUdOTUVOVDsKLQotICByZXR1cm4g c2l6ZTsKLX0KLQotLyogQWxsb2NhdGUgYSBjaHVuayBvZiBtZW1vcnkgb2Yg YXQgbGVhc3QgT1JJR19TSVpFIGJ5dGVzLCBpbiBaT05FLiAgKi8KLQotdm9p ZCAqCi1nZ2NfaW50ZXJuYWxfYWxsb2Nfem9uZV9zdGF0IChzaXplX3Qgb3Jp Z19zaXplLCBzdHJ1Y3QgYWxsb2Nfem9uZSAqem9uZQotCQkJICAgICAgTUVN X1NUQVRfREVDTCkKLXsKLSAgc2l6ZV90IGJpbjsKLSAgc2l6ZV90IGNzaXpl OwotICBzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqZW50cnk7Ci0gIHN0cnVj dCBhbGxvY19jaHVuayAqY2h1bmssICoqcHA7Ci0gIHZvaWQgKnJlc3VsdDsK LSAgc2l6ZV90IHNpemUgPSBnZ2Nfcm91bmRfYWxsb2Nfc2l6ZSAob3JpZ19z aXplKTsKLQotICAvKiBUcnkgdG8gYWxsb2NhdGUgdGhlIG9iamVjdCBmcm9t IHNldmVyYWwgZGlmZmVyZW50IHNvdXJjZXMuICBFYWNoCi0gICAgIG9mIHRo ZXNlIGNhc2VzIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIFJFU1VMVCBh bmQgU0laRSB0bwotICAgICBkZXNjcmliZSB0aGUgYWxsb2NhdGVkIGJsb2Nr LCBiZWZvcmUganVtcGluZyB0byBGT1VORC4gIElmIGEKLSAgICAgY2h1bmsg aXMgc3BsaXQsIHRoZSBhbGxvY2F0ZSBiaXQgZm9yIHRoZSBuZXcgY2h1bmsg c2hvdWxkIGFsc28gYmUKLSAgICAgc2V0LgotCi0gICAgIExhcmdlIG9iamVj dHMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5LiAgSG93ZXZlciwgdGhleSdsbCBq dXN0IGZhaWwKLSAgICAgdGhlIG5leHQgY291cGxlIG9mIGNvbmRpdGlvbnMs IHNvIHdlIGNhbiB3YWl0IHRvIGNoZWNrIGZvciB0aGVtCi0gICAgIGJlbG93 LiAgVGhlIGxhcmdlIG9iamVjdCBjYXNlIGlzIHJlbGF0aXZlbHkgcmFyZSAo PCAxJSksIHNvIHRoaXMKLSAgICAgaXMgYSB3aW4uICAqLwotCi0gIC8qIEZp cnN0IHRyeSB0byBzcGxpdCB0aGUgbGFzdCBjaHVuayB3ZSBhbGxvY2F0ZWQu ICBGb3IgYmVzdAotICAgICBmcmFnbWVudGF0aW9uIGJlaGF2aW9yIGl0IHdv dWxkIGJlIGJldHRlciB0byBsb29rIGZvciBhCi0gICAgIGZyZWUgYmluIG9m IHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciBhIHNtYWxsIG9iamVjdC4gIEhv d2V2ZXIsCi0gICAgIHdlJ3JlIHVubGlrZWx5ICgxJSAtIDclKSB0byBmaW5k IG9uZSwgYW5kIHRoaXMgZ2l2ZXMgYmV0dGVyCi0gICAgIGxvY2FsaXR5IGJl aGF2aW9yIGFueXdheS4gIFRoaXMgY2FzZSBoYW5kbGVzIHRoZSBsaW9uJ3Mg c2hhcmUKLSAgICAgb2YgYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uICAq LwotICBpZiAoc2l6ZSA8PSB6b25lLT5jYWNoZWRfZnJlZV9zaXplKQotICAg IHsKLSAgICAgIHJlc3VsdCA9IHpvbmUtPmNhY2hlZF9mcmVlOwotCi0gICAg ICB6b25lLT5jYWNoZWRfZnJlZV9zaXplIC09IHNpemU7Ci0gICAgICBpZiAo em9uZS0+Y2FjaGVkX2ZyZWVfc2l6ZSkKLQl7Ci0JICB6b25lLT5jYWNoZWRf ZnJlZSArPSBzaXplOwotCSAgem9uZV9zZXRfb2JqZWN0X2FsbG9jX2JpdCAo em9uZS0+Y2FjaGVkX2ZyZWUpOwotCX0KLQotICAgICAgZ290byBmb3VuZDsK LSAgICB9Ci0KLSAgLyogTmV4dCwgdHJ5IHRvIGZpbmQgYSBmcmVlIGJpbiBv ZiB0aGUgZXhhY3RseSBjb3JyZWN0IHNpemUuICAqLwotCi0gIC8qIFdlIHdh bnQgdG8gcm91bmQgU0laRSB1cCwgcmF0aGVyIHRoYW4gZG93biwgYnV0IHdl IGtub3cgaXQncwotICAgICBhbHJlYWR5IGFsaWduZWQgdG8gYXQgbGVhc3Qg RlJFRV9CSU5fREVMVEEsIHNvIHdlIGNhbiBqdXN0Ci0gICAgIHNoaWZ0LiAg Ki8KLSAgYmluID0gU0laRV9CSU5fRE9XTiAoc2l6ZSk7Ci0KLSAgaWYgKGJp biA8PSBOVU1fRlJFRV9CSU5TCi0gICAgICAmJiAoY2h1bmsgPSB6b25lLT5m cmVlX2NodW5rc1tiaW5dKSAhPSBOVUxMKQotICAgIHsKLSAgICAgIC8qIFdl IGhhdmUgYSBjaHVuayBvZiB0aGUgcmlnaHQgc2l6ZS4gIFB1bGwgaXQgb2Zm IHRoZSBmcmVlIGxpc3QKLQkgYW5kIHVzZSBpdC4gICovCi0KLSAgICAgIHpv bmUtPmZyZWVfY2h1bmtzW2Jpbl0gPSBjaHVuay0+bmV4dF9mcmVlOwotCi0g ICAgICAvKiBOT1RFOiBTSVpFIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSBy aWdodCBpZiBNQVhfQUxJR05NRU5UCi0JID09IEZSRUVfQklOX0RFTFRBLiAg Ki8KLSAgICAgIHJlc3VsdCA9IGNodW5rOwotCi0gICAgICAvKiBUaGUgYWxs b2NhdGlvbiBiaXRzIGFyZSBhbHJlYWR5IHNldCBjb3JyZWN0bHkuICBISUdI X0ZSRUVfQklOCi0JIG1heSBub3cgYmUgd3JvbmcsIGlmIHRoaXMgd2FzIHRo ZSBsYXN0IGNodW5rIGluIHRoZSBoaWdoIGJpbi4KLQkgUmF0aGVyIHRoYW4g Zml4aW5nIGl0IHVwIG5vdywgd2FpdCB1bnRpbCB3ZSBuZWVkIHRvIHNlYXJj aAotCSB0aGUgZnJlZSBiaW5zLiAgKi8KLQotICAgICAgZ290byBmb3VuZDsK LSAgICB9Ci0KLSAgLyogTmV4dCwgaWYgdGhlcmUgd2Fzbid0IGEgY2h1bmsg b2YgdGhlIGlkZWFsIHNpemUsIGxvb2sgZm9yIGEgY2h1bmsKLSAgICAgdG8g c3BsaXQuICBXZSBjYW4gZmluZCBvbmUgaW4gdGhlIHRvby1iaWcgYmluLCBv ciBpbiB0aGUgbGFyZ2VzdAotICAgICBzaXplZCBiaW4gd2l0aCBhIGNodW5r IGluIGl0LiAgVHJ5IHRoZSBsYXJnZXN0IG5vcm1hbC1zaXplZCBiaW4KLSAg ICAgZmlyc3QuICAqLwotCi0gIGlmICh6b25lLT5oaWdoX2ZyZWVfYmluID4g YmluKQotICAgIHsKLSAgICAgIC8qIEZpbmQgdGhlIGhpZ2hlc3QgbnVtYmVy ZWQgZnJlZSBiaW4uICBJdCB3aWxsIGJlIGF0IG9yIGJlbG93Ci0JIHRoZSB3 YXRlcm1hcmsuICAqLwotICAgICAgd2hpbGUgKHpvbmUtPmhpZ2hfZnJlZV9i aW4gPiBiaW4KLQkgICAgICYmIHpvbmUtPmZyZWVfY2h1bmtzW3pvbmUtPmhp Z2hfZnJlZV9iaW5dID09IE5VTEwpCi0Jem9uZS0+aGlnaF9mcmVlX2Jpbi0t OwotCi0gICAgICBpZiAoem9uZS0+aGlnaF9mcmVlX2JpbiA+IGJpbikKLQl7 Ci0JICBzaXplX3QgdGJpbiA9IHpvbmUtPmhpZ2hfZnJlZV9iaW47Ci0JICBj aHVuayA9IHpvbmUtPmZyZWVfY2h1bmtzW3RiaW5dOwotCi0JICAvKiBSZW1v dmUgdGhlIGNodW5rIGZyb20gaXRzIHByZXZpb3VzIGJpbi4gICovCi0JICB6 b25lLT5mcmVlX2NodW5rc1t0YmluXSA9IGNodW5rLT5uZXh0X2ZyZWU7Ci0K LQkgIHJlc3VsdCA9IChjaGFyICopIGNodW5rOwotCi0JICAvKiBTYXZlIHRo ZSByZXN0IG9mIHRoZSBjaHVuayBmb3IgZnV0dXJlIGFsbG9jYXRpb24uICAq LwotCSAgaWYgKHpvbmUtPmNhY2hlZF9mcmVlX3NpemUpCi0JICAgIGZyZWVf Y2h1bmsgKHpvbmUtPmNhY2hlZF9mcmVlLCB6b25lLT5jYWNoZWRfZnJlZV9z aXplLCB6b25lKTsKLQotCSAgY2h1bmsgPSAoc3RydWN0IGFsbG9jX2NodW5r ICopICgoY2hhciAqKSByZXN1bHQgKyBzaXplKTsKLQkgIHpvbmUtPmNhY2hl ZF9mcmVlID0gKGNoYXIgKikgY2h1bms7Ci0JICB6b25lLT5jYWNoZWRfZnJl ZV9zaXplID0gKHRiaW4gLSBiaW4pICogRlJFRV9CSU5fREVMVEE7Ci0KLQkg IC8qIE1hcmsgdGhlIG5ldyBmcmVlIGNodW5rIGFzIGFuIG9iamVjdCwgc28g dGhhdCB3ZSBjYW4KLQkgICAgIGZpbmQgdGhlIHNpemUgb2YgdGhlIG5ld2x5 IGFsbG9jYXRlZCBvYmplY3QuICAqLwotCSAgem9uZV9zZXRfb2JqZWN0X2Fs bG9jX2JpdCAoY2h1bmspOwotCi0JICAvKiBISUdIX0ZSRUVfQklOIG1heSBu b3cgYmUgd3JvbmcsIGlmIHRoaXMgd2FzIHRoZSBsYXN0Ci0JICAgICBjaHVu ayBpbiB0aGUgaGlnaCBiaW4uICBSYXRoZXIgdGhhbiBmaXhpbmcgaXQgdXAg bm93LAotCSAgICAgd2FpdCB1bnRpbCB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUg ZnJlZSBiaW5zLiAgKi8KLQotCSAgZ290byBmb3VuZDsKLQl9Ci0gICAgfQot Ci0gIC8qIEZhaWxpbmcgdGhhdCwgbG9vayB0aHJvdWdoIHRoZSAib3RoZXIi IGJ1Y2tldCBmb3IgYSBjaHVuawotICAgICB0aGF0IGlzIGxhcmdlIGVub3Vn aC4gICovCi0gIHBwID0gJih6b25lLT5mcmVlX2NodW5rc1swXSk7Ci0gIGNo dW5rID0gKnBwOwotICB3aGlsZSAoY2h1bmsgJiYgY2h1bmstPnNpemUgPCBz aXplKQotICAgIHsKLSAgICAgIHBwID0gJmNodW5rLT5uZXh0X2ZyZWU7Ci0g ICAgICBjaHVuayA9ICpwcDsKLSAgICB9Ci0KLSAgaWYgKGNodW5rKQotICAg IHsKLSAgICAgIC8qIFJlbW92ZSB0aGUgY2h1bmsgZnJvbSBpdHMgcHJldmlv dXMgYmluLiAgKi8KLSAgICAgICpwcCA9IGNodW5rLT5uZXh0X2ZyZWU7Ci0K LSAgICAgIHJlc3VsdCA9IChjaGFyICopIGNodW5rOwotCi0gICAgICAvKiBT YXZlIHRoZSByZXN0IG9mIHRoZSBjaHVuayBmb3IgZnV0dXJlIGFsbG9jYXRp b24sIGlmIHRoZXJlJ3MgYW55Ci0JIGxlZnQgb3Zlci4gICovCi0gICAgICBj c2l6ZSA9IGNodW5rLT5zaXplOwotICAgICAgaWYgKGNzaXplID4gc2l6ZSkK LQl7Ci0JICBpZiAoem9uZS0+Y2FjaGVkX2ZyZWVfc2l6ZSkKLQkgICAgZnJl ZV9jaHVuayAoem9uZS0+Y2FjaGVkX2ZyZWUsIHpvbmUtPmNhY2hlZF9mcmVl X3NpemUsIHpvbmUpOwotCi0JICBjaHVuayA9IChzdHJ1Y3QgYWxsb2NfY2h1 bmsgKikgKChjaGFyICopIHJlc3VsdCArIHNpemUpOwotCSAgem9uZS0+Y2Fj aGVkX2ZyZWUgPSAoY2hhciAqKSBjaHVuazsKLQkgIHpvbmUtPmNhY2hlZF9m cmVlX3NpemUgPSBjc2l6ZSAtIHNpemU7Ci0KLQkgIC8qIE1hcmsgdGhlIG5l dyBmcmVlIGNodW5rIGFzIGFuIG9iamVjdC4gICovCi0JICB6b25lX3NldF9v YmplY3RfYWxsb2NfYml0IChjaHVuayk7Ci0JfQotCi0gICAgICBnb3RvIGZv dW5kOwotICAgIH0KLQotICAvKiBIYW5kbGUgbGFyZ2UgYWxsb2NhdGlvbnMu ICBXZSBjb3VsZCBjaG9vc2UgYW55IHRocmVzaG9sZCBiZXR3ZWVuCi0gICAg IEdHQ19QQUdFX1NJWkUgLSBzaXplb2YgKHN0cnVjdCBsYXJnZV9wYWdlX2Vu dHJ5KSBhbmQKLSAgICAgR0dDX1BBR0VfU0laRS4gIEl0IGNhbid0IGJlIHNt YWxsZXIsIGJlY2F1c2UgdGhlbiBpdCB3b3VsZG4ndAotICAgICBiZSBndWFy YW50ZWVkIHRvIGhhdmUgYSB1bmlxdWUgZW50cnkgaW4gdGhlIGxvb2t1cCB0 YWJsZS4gIExhcmdlCi0gICAgIGFsbG9jYXRpb25zIHdpbGwgYWx3YXlzIGZh bGwgdGhyb3VnaCB0byBoZXJlLiAgKi8KLSAgaWYgKHNpemUgPiBHR0NfUEFH RV9TSVpFKQotICAgIHsKLSAgICAgIHN0cnVjdCBsYXJnZV9wYWdlX2VudHJ5 ICplbnRyeSA9IGFsbG9jX2xhcmdlX3BhZ2UgKHNpemUsIHpvbmUpOwotCi0g ICAgICBlbnRyeS0+Y29tbW9uLnN1cnZpdmVkID0gMDsKLQotICAgICAgZW50 cnktPm5leHQgPSB6b25lLT5sYXJnZV9wYWdlczsKLSAgICAgIGlmICh6b25l LT5sYXJnZV9wYWdlcykKLQl6b25lLT5sYXJnZV9wYWdlcy0+cHJldiA9IGVu dHJ5OwotICAgICAgem9uZS0+bGFyZ2VfcGFnZXMgPSBlbnRyeTsKLQotICAg ICAgcmVzdWx0ID0gZW50cnktPmNvbW1vbi5wYWdlOwotCi0gICAgICBnb3Rv IGZvdW5kOwotICAgIH0KLQotICAvKiBGYWlsaW5nIGV2ZXJ5dGhpbmcgYWJv dmUsIGFsbG9jYXRlIGEgbmV3IHNtYWxsIHBhZ2UuICAqLwotCi0gIGVudHJ5 ID0gYWxsb2Nfc21hbGxfcGFnZSAoem9uZSk7Ci0gIGVudHJ5LT5uZXh0ID0g em9uZS0+cGFnZXM7Ci0gIHpvbmUtPnBhZ2VzID0gZW50cnk7Ci0KLSAgLyog TWFyayB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIG5ldyBwYWdlLiAgKi8KLSAg ZW50cnktPmFsbG9jX2JpdHNbMF0gPSAxOwotCi0gIHJlc3VsdCA9IGVudHJ5 LT5jb21tb24ucGFnZTsKLSAgaWYgKHNpemUgPCBTTUFMTF9QQUdFX1NJWkUp Ci0gICAgewotICAgICAgaWYgKHpvbmUtPmNhY2hlZF9mcmVlX3NpemUpCi0J ZnJlZV9jaHVuayAoem9uZS0+Y2FjaGVkX2ZyZWUsIHpvbmUtPmNhY2hlZF9m cmVlX3NpemUsIHpvbmUpOwotCi0gICAgICB6b25lLT5jYWNoZWRfZnJlZSA9 IChjaGFyICopIHJlc3VsdCArIHNpemU7Ci0gICAgICB6b25lLT5jYWNoZWRf ZnJlZV9zaXplID0gU01BTExfUEFHRV9TSVpFIC0gc2l6ZTsKLQotICAgICAg LyogTWFyayB0aGUgbmV3IGZyZWUgY2h1bmsgYXMgYW4gb2JqZWN0LiAgKi8K LSAgICAgIHpvbmVfc2V0X29iamVjdF9hbGxvY19iaXQgKHpvbmUtPmNhY2hl ZF9mcmVlKTsKLSAgICB9Ci0KLSBmb3VuZDoKLQotICAvKiBXZSBjb3VsZCBz YXZlIFRZUEUgaW4gdGhlIGNodW5rLCBidXQgd2UgZG9uJ3QgdXNlIHRoYXQg Zm9yCi0gICAgIGFueXRoaW5nIHlldC4gIElmIHdlIHdhbnRlZCB0bywgd2Ug Y291bGQgZG8gaXQgYnkgYWRkaW5nIGl0Ci0gICAgIGVpdGhlciBiZWZvcmUg dGhlIGJlZ2lubmluZyBvZiB0aGUgY2h1bmsgb3IgYWZ0ZXIgaXRzIGVuZCwK LSAgICAgYW5kIGFkanVzdGluZyB0aGUgc2l6ZSBhbmQgcG9pbnRlciBhcHBy b3ByaWF0ZWx5LiAgKi8KLQotICAvKiBXZSdsbCBwcm9iYWJseSB3cml0ZSB0 byB0aGlzIGFmdGVyIHdlIHJldHVybi4gICovCi0gIHByZWZldGNodyAocmVz dWx0KTsKLQotI2lmZGVmIEVOQUJMRV9HQ19DSEVDS0lORwotICAvKiBgUG9p c29uJyB0aGUgZW50aXJlIGFsbG9jYXRlZCBvYmplY3QuICAqLwotICBWQUxH UklORF9ESVNDQVJEIChWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQgKHJl c3VsdCwgc2l6ZSkpOwotICBtZW1zZXQgKHJlc3VsdCwgMHhhZiwgc2l6ZSk7 Ci0gIFZBTEdSSU5EX0RJU0NBUkQgKFZBTEdSSU5EX01BS0VfTUVNX05PQUND RVNTIChyZXN1bHQgKyBvcmlnX3NpemUsCi0JCQkJCQlzaXplIC0gb3JpZ19z aXplKSk7Ci0jZW5kaWYKLQotICAvKiBUZWxsIFZhbGdyaW5kIHRoYXQgdGhl IG1lbW9yeSBpcyB0aGVyZSwgYnV0IGl0cyBjb250ZW50IGlzbid0Ci0gICAg IGRlZmluZWQuICBUaGUgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgb2JqZWN0 IGFyZSBzdGlsbCBtYXJrZWQKLSAgICAgdW5hY2Nlc3NpYmxlLiAgKi8KLSAg VkFMR1JJTkRfRElTQ0FSRCAoVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVE IChyZXN1bHQsIG9yaWdfc2l6ZSkpOwotCi0gIC8qIEtlZXAgdHJhY2sgb2Yg aG93IG1hbnkgYnl0ZXMgYXJlIGJlaW5nIGFsbG9jYXRlZC4gIFRoaXMKLSAg ICAgaW5mb3JtYXRpb24gaXMgdXNlZCBpbiBkZWNpZGluZyB3aGVuIHRvIGNv bGxlY3QuICAqLwotICB6b25lLT5hbGxvY2F0ZWQgKz0gc2l6ZTsKLQotICB0 aW1ldmFyX2dnY19tZW1fdG90YWwgKz0gc2l6ZTsKLQotICBpZiAoR0FUSEVS X1NUQVRJU1RJQ1MpCi0gICAgZ2djX3JlY29yZF9vdmVyaGVhZCAob3JpZ19z aXplLCBzaXplIC0gb3JpZ19zaXplLCByZXN1bHQgRklOQUxfUEFTU19NRU1f U1RBVCk7Ci0KLSAgewotICAgIHNpemVfdCBvYmplY3Rfc2l6ZSA9IHNpemU7 Ci0gICAgc2l6ZV90IG92ZXJoZWFkID0gb2JqZWN0X3NpemUgLSBvcmlnX3Np emU7Ci0KLSAgICB6b25lLT5zdGF0cy50b3RhbF9vdmVyaGVhZCArPSBvdmVy aGVhZDsKLSAgICB6b25lLT5zdGF0cy50b3RhbF9hbGxvY2F0ZWQgKz0gb2Jq ZWN0X3NpemU7Ci0KLSAgICBpZiAob3JpZ19zaXplIDw9IDMyKQotICAgICAg ewotCXpvbmUtPnN0YXRzLnRvdGFsX292ZXJoZWFkX3VuZGVyMzIgKz0gb3Zl cmhlYWQ7Ci0Jem9uZS0+c3RhdHMudG90YWxfYWxsb2NhdGVkX3VuZGVyMzIg Kz0gb2JqZWN0X3NpemU7Ci0gICAgICB9Ci0gICAgaWYgKG9yaWdfc2l6ZSA8 PSA2NCkKLSAgICAgIHsKLQl6b25lLT5zdGF0cy50b3RhbF9vdmVyaGVhZF91 bmRlcjY0ICs9IG92ZXJoZWFkOwotCXpvbmUtPnN0YXRzLnRvdGFsX2FsbG9j YXRlZF91bmRlcjY0ICs9IG9iamVjdF9zaXplOwotICAgICAgfQotICAgIGlm IChvcmlnX3NpemUgPD0gMTI4KQotICAgICAgewotCXpvbmUtPnN0YXRzLnRv dGFsX292ZXJoZWFkX3VuZGVyMTI4ICs9IG92ZXJoZWFkOwotCXpvbmUtPnN0 YXRzLnRvdGFsX2FsbG9jYXRlZF91bmRlcjEyOCArPSBvYmplY3Rfc2l6ZTsK LSAgICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgaWYgKEdHQ19ERUJVR19MRVZF TCA+PSAzKQotICAgIGZwcmludGYgKEcuZGVidWdfZmlsZSwgIkFsbG9jYXRp bmcgb2JqZWN0LCBzaXplPSVsdSBhdCAlcFxuIiwKLQkgICAgICh1bnNpZ25l ZCBsb25nKSBzaXplLCByZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19 Ci0KLSNkZWZpbmUgZ2djX2ludGVybmFsX2FsbG9jX3pvbmVfcGFzc19zdGF0 KHMseikgICAgICAgICAgXAotICAgIGdnY19pbnRlcm5hbF9hbGxvY196b25l X3N0YXQgKHMseiBQQVNTX01FTV9TVEFUKQotCi12b2lkICoKLWdnY19pbnRl cm5hbF9jbGVhcmVkX2FsbG9jX3pvbmVfc3RhdCAoc2l6ZV90IG9yaWdfc2l6 ZSwKLQkJCQkgICAgICBzdHJ1Y3QgYWxsb2Nfem9uZSAqem9uZSBNRU1fU1RB VF9ERUNMKQotewotICB2b2lkICogcmVzdWx0ID0gZ2djX2ludGVybmFsX2Fs bG9jX3pvbmVfcGFzc19zdGF0IChvcmlnX3NpemUsIHpvbmUpOwotICBtZW1z ZXQgKHJlc3VsdCwgMCwgb3JpZ19zaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsK LX0KLQotCi0vKiBBbGxvY2F0ZSBhIFNJWkUgb2YgY2h1bmsgbWVtb3J5IG9m IEdURSB0eXBlLCBpbnRvIGFuIGFwcHJvcHJpYXRlIHpvbmUKLSAgIGZvciB0 aGF0IHR5cGUuICAqLwotCi12b2lkICoKLWdnY19hbGxvY190eXBlZF9zdGF0 IChlbnVtIGd0X3R5cGVzX2VudW0gZ3RlLCBzaXplX3Qgc2l6ZQotCQkgICAg ICBNRU1fU1RBVF9ERUNMKQotewotICBzd2l0Y2ggKGd0ZSkKLSAgICB7Ci0g ICAgY2FzZSBndF9nZ2NfZV8xNGxhbmdfdHJlZV9ub2RlOgotICAgICAgcmV0 dXJuIGdnY19pbnRlcm5hbF9hbGxvY196b25lX3Bhc3Nfc3RhdCAoc2l6ZSwg JnRyZWVfem9uZSk7Ci0KLSAgICBjYXNlIGd0X2dnY19lXzdydHhfZGVmOgot ICAgICAgcmV0dXJuIGdnY19pbnRlcm5hbF9hbGxvY196b25lX3Bhc3Nfc3Rh dCAoc2l6ZSwgJnJ0bF96b25lKTsKLQotICAgIGNhc2UgZ3RfZ2djX2VfOXJ0 dmVjX2RlZjoKLSAgICAgIHJldHVybiBnZ2NfaW50ZXJuYWxfYWxsb2Nfem9u ZV9wYXNzX3N0YXQgKHNpemUsICZydGxfem9uZSk7Ci0KLSAgICBkZWZhdWx0 OgotICAgICAgcmV0dXJuIGdnY19pbnRlcm5hbF9hbGxvY196b25lX3Bhc3Nf c3RhdCAoc2l6ZSwgJm1haW5fem9uZSk7Ci0gICAgfQotfQotCi0vKiBOb3Jt YWwgR0MgYWxsb2NhdGlvbiBzaW1wbHkgYWxsb2NhdGVzIGludG8gdGhlIG1h aW4gem9uZS4gICovCi0KLXZvaWQgKgotZ2djX2ludGVybmFsX2FsbG9jX3N0 YXQgKHNpemVfdCBzaXplIE1FTV9TVEFUX0RFQ0wpCi17Ci0gIHJldHVybiBn Z2NfaW50ZXJuYWxfYWxsb2Nfem9uZV9wYXNzX3N0YXQgKHNpemUsICZtYWlu X3pvbmUpOwotfQotCi0vKiBQb2lzb24gdGhlIGNodW5rLiAgKi8KLSNpZmRl ZiBFTkFCTEVfR0NfQ0hFQ0tJTkcKLSNkZWZpbmUgcG9pc29uX3JlZ2lvbihQ VFIsIFNJWkUpCQkJCSAgICAgIFwKLSAgZG8gewkJCQkJCQkJICAgICAgXAot ICAgIFZBTEdSSU5EX0RJU0NBUkQgKFZBTEdSSU5EX01BS0VfTUVNX1VOREVG SU5FRCAoKFBUUiksIChTSVpFKSkpOyAgIFwKLSAgICBtZW1zZXQgKChQVFIp LCAweGE1LCAoU0laRSkpOwkJCQkgICAgICBcCi0gICAgVkFMR1JJTkRfRElT Q0FSRCAoVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MgKChQVFIpLCAoU0la RSkpKTsgICAgXAotICB9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgcG9p c29uX3JlZ2lvbihQVFIsIFNJWkUpCi0jZW5kaWYKLQotLyogRnJlZSB0aGUg b2JqZWN0IGF0IFAuICAqLwotCi12b2lkCi1nZ2NfZnJlZSAodm9pZCAqcCkK LXsKLSAgc3RydWN0IHBhZ2VfZW50cnkgKnBhZ2U7Ci0KLSAgaWYgKEdBVEhF Ul9TVEFUSVNUSUNTKQotICAgIGdnY19mcmVlX292ZXJoZWFkIChwKTsKLQot ICBwb2lzb25fcmVnaW9uIChwLCBnZ2NfZ2V0X3NpemUgKHApKTsKLQotICBw YWdlID0gem9uZV9nZXRfb2JqZWN0X3BhZ2UgKHApOwotCi0gIGlmIChwYWdl LT5sYXJnZV9wKQotICAgIHsKLSAgICAgIHN0cnVjdCBsYXJnZV9wYWdlX2Vu dHJ5ICpsYXJnZV9wYWdlCi0JPSAoc3RydWN0IGxhcmdlX3BhZ2VfZW50cnkg KikgcGFnZTsKLQotICAgICAgLyogUmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhl IGxpbmtlZCBsaXN0LiAgKi8KLSAgICAgIGlmIChsYXJnZV9wYWdlLT5wcmV2 KQotCWxhcmdlX3BhZ2UtPnByZXYtPm5leHQgPSBsYXJnZV9wYWdlLT5uZXh0 OwotICAgICAgZWxzZQotCXsKLQkgIGdjY19hc3NlcnQgKGxhcmdlX3BhZ2Ut PmNvbW1vbi56b25lLT5sYXJnZV9wYWdlcyA9PSBsYXJnZV9wYWdlKTsKLQkg IGxhcmdlX3BhZ2UtPmNvbW1vbi56b25lLT5sYXJnZV9wYWdlcyA9IGxhcmdl X3BhZ2UtPm5leHQ7Ci0JfQotICAgICAgaWYgKGxhcmdlX3BhZ2UtPm5leHQp Ci0JbGFyZ2VfcGFnZS0+bmV4dC0+cHJldiA9IGxhcmdlX3BhZ2UtPnByZXY7 Ci0KLSAgICAgIGxhcmdlX3BhZ2UtPmNvbW1vbi56b25lLT5hbGxvY2F0ZWQg LT0gbGFyZ2VfcGFnZS0+Ynl0ZXM7Ci0KLSAgICAgIC8qIFJlbGVhc2UgdGhl IG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuICAqLwotICAg ICAgZnJlZV9sYXJnZV9wYWdlIChsYXJnZV9wYWdlKTsKLSAgICB9Ci0gIGVs c2UgaWYgKHBhZ2UtPnBjaF9wKQotICAgIC8qIERvbid0IGRvIGFueXRoaW5n LiAgV2Ugd29uJ3QgYWxsb2NhdGUgYSBuZXcgb2JqZWN0IGZyb20gdGhlCi0g ICAgICAgUENIIHpvbmUgc28gdGhlcmUncyBubyBwb2ludCBpbiByZWxlYXNp bmcgYW55dGhpbmcuICAqLwotICAgIDsKLSAgZWxzZQotICAgIHsKLSAgICAg IHNpemVfdCBzaXplID0gZ2djX2dldF9zaXplIChwKTsKLQotICAgICAgcGFn ZS0+em9uZS0+YWxsb2NhdGVkIC09IHNpemU7Ci0KLSAgICAgIC8qIEFkZCB0 aGUgY2h1bmsgdG8gdGhlIGZyZWUgbGlzdC4gIFdlIGRvbid0IGJvdGhlciB3 aXRoIGNvYWxlc2NpbmcsCi0JIHNpbmNlIHdlIGFyZSBsaWtlbHkgdG8gd2Fu dCBhIGNodW5rIG9mIHRoaXMgc2l6ZSBhZ2Fpbi4gICovCi0gICAgICBmcmVl X2NodW5rICgoY2hhciAqKXAsIHNpemUsIHBhZ2UtPnpvbmUpOwotICAgIH0K LX0KLQotLyogTWFyayBmdW5jdGlvbiBmb3Igc3RyaW5ncy4gICovCi0KLXZv aWQKLWd0X2dnY19tX1MgKGNvbnN0IHZvaWQgKnApCi17Ci0gIHBhZ2VfZW50 cnkgKmVudHJ5OwotICB1bnNpZ25lZCBsb25nIG9mZnNldDsKLQotICBpZiAo IXApCi0gICAgcmV0dXJuOwotCi0gIC8qIExvb2sgdXAgdGhlIHBhZ2Ugb24g d2hpY2ggdGhlIG9iamVjdCBpcyBhbGxvY2VkLiAgLiAgKi8KLSAgZW50cnkg PSBsb29rdXBfcGFnZV90YWJsZV9pZl9hbGxvY2F0ZWQgKHApOwotICBpZiAo ISBlbnRyeSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGVudHJ5LT5wY2hfcCkK LSAgICB7Ci0gICAgICBzaXplX3QgYWxsb2Nfd29yZCwgYWxsb2NfYml0LCB0 OwotICAgICAgdCA9ICgoY29uc3QgY2hhciAqKSBwIC0gcGNoX3pvbmUucGFn ZSkgLyBCWVRFU19QRVJfQUxMT0NfQklUOwotICAgICAgYWxsb2Nfd29yZCA9 IHQgLyAoOCAqIHNpemVvZiAoYWxsb2NfdHlwZSkpOwotICAgICAgYWxsb2Nf Yml0ID0gdCAlICg4ICogc2l6ZW9mIChhbGxvY190eXBlKSk7Ci0gICAgICBv ZmZzZXQgPSB6b25lX2ZpbmRfb2JqZWN0X29mZnNldCAocGNoX3pvbmUuYWxs b2NfYml0cywgYWxsb2Nfd29yZCwKLQkJCQkJYWxsb2NfYml0KTsKLSAgICB9 Ci0gIGVsc2UgaWYgKGVudHJ5LT5sYXJnZV9wKQotICAgIHsKLSAgICAgIHN0 cnVjdCBsYXJnZV9wYWdlX2VudHJ5ICpsZSA9IChzdHJ1Y3QgbGFyZ2VfcGFn ZV9lbnRyeSAqKSBlbnRyeTsKLSAgICAgIG9mZnNldCA9ICgoY29uc3QgY2hh ciAqKSBwKSAtIGVudHJ5LT5wYWdlOwotICAgICAgZ2NjX2Fzc2VydCAob2Zm c2V0IDwgbGUtPmJ5dGVzKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAg ICBzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqc2UgPSAoc3RydWN0IHNtYWxs X3BhZ2VfZW50cnkgKikgZW50cnk7Ci0gICAgICB1bnNpZ25lZCBpbnQgc3Rh cnRfd29yZCA9IHpvbmVfZ2V0X29iamVjdF9hbGxvY193b3JkIChwKTsKLSAg ICAgIHVuc2lnbmVkIGludCBzdGFydF9iaXQgPSB6b25lX2dldF9vYmplY3Rf YWxsb2NfYml0IChwKTsKLSAgICAgIG9mZnNldCA9IHpvbmVfZmluZF9vYmpl Y3Rfb2Zmc2V0IChzZS0+YWxsb2NfYml0cywgc3RhcnRfd29yZCwgc3RhcnRf Yml0KTsKLQotICAgICAgLyogT24gc29tZSBwbGF0Zm9ybXMgYSBjaGFyKiB3 aWxsIG5vdCBuZWNlc3NhcmlseSBsaW5lIHVwIG9uIGFuCi0JIGFsbG9jYXRp b24gYm91bmRhcnksIHNvIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBvZmZzZXQg dG8KLQkgYWNjb3VudCBmb3IgdGhlIGxlZnRvdmVyIGJ5dGVzLiAgKi8KLSAg ICAgIG9mZnNldCArPSAoc2l6ZV90KSBwICUgQllURVNfUEVSX0FMTE9DX0JJ VDsKLSAgICB9Ci0KLSAgaWYgKG9mZnNldCkKLSAgICB7Ci0gICAgICAvKiBI ZXJlIHdlJ3ZlIHNlZW4gYSBjaGFyKiB3aGljaCBkb2VzIG5vdCBwb2ludCB0 byB0aGUgYmVnaW5uaW5nCi0JIG9mIGFuIGFsbG9jYXRlZCBvYmplY3QuICBX ZSBhc3N1bWUgaXQgcG9pbnRzIHRvIHRoZSBtaWRkbGUgb2YKLQkgYSBTVFJJ TkdfQ1NULiAgKi8KLSAgICAgIGdjY19hc3NlcnQgKG9mZnNldCA9PSBvZmZz ZXRvZiAoc3RydWN0IHRyZWVfc3RyaW5nLCBzdHIpKTsKLSAgICAgIHAgPSAo KGNvbnN0IGNoYXIgKikgcCkgLSBvZmZzZXQ7Ci0gICAgICBndF9nZ2NfbXhf bGFuZ190cmVlX25vZGUgKENPTlNUX0NBU1Qodm9pZCAqLCBwKSk7Ci0gICAg ICByZXR1cm47Ci0gICAgfQotCi0gIC8qIEluZWZmaWNpZW50LCBidXQgYWxz byB1bmxpa2VseSB0byBtYXR0ZXIuICAqLwotICBnZ2Nfc2V0X21hcmsgKHAp OwotfQotCi0KLS8qIFVzZXItY2FsbGFibGUgZW50cnkgcG9pbnRzIGZvciBt YXJraW5nIHN0cmluZyBYLiAgKi8KLQotdm9pZAotZ3RfZ2djX214IChjb25z dCBjaGFyIComIHgpCi17Ci0gIGd0X2dnY19tX1MgKHgpOwotfQotCi12b2lk Ci1ndF9nZ2NfbXggKHVuc2lnbmVkIGNoYXIgKiYgeCkKLXsKLSAgZ3RfZ2dj X21fUyAoeCk7Ci19Ci0KLXZvaWQKLWd0X2dnY19teCAodW5zaWduZWQgY2hh ciYgeCBBVFRSSUJVVEVfVU5VU0VEKQotewotfQotCi0vKiBJZiBQIGlzIG5v dCBtYXJrZWQsIG1hcmsgaXQgYW5kIHJldHVybiBmYWxzZS4gIE90aGVyd2lz ZSByZXR1cm4gdHJ1ZS4KLSAgIFAgbXVzdCBoYXZlIGJlZW4gYWxsb2NhdGVk IGJ5IHRoZSBHQyBhbGxvY2F0b3I7IGl0IG11c3RuJ3QgcG9pbnQgdG8KLSAg IHN0YXRpYyBvYmplY3RzLCBzdGFjayB2YXJpYWJsZXMsIG9yIG1lbW9yeSBh bGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLwotCi1pbnQKLWdnY19zZXRfbWFy ayAoY29uc3Qgdm9pZCAqcCkKLXsKLSAgc3RydWN0IHBhZ2VfZW50cnkgKnBh Z2U7Ci0gIGNvbnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyICopIHA7Ci0K LSAgcGFnZSA9IHpvbmVfZ2V0X29iamVjdF9wYWdlIChwKTsKLQotICBpZiAo cGFnZS0+cGNoX3ApCi0gICAgewotICAgICAgc2l6ZV90IG1hcmtfd29yZCwg bWFya19iaXQsIG9mZnNldDsKLSAgICAgIG9mZnNldCA9IChwdHIgLSBwY2hf em9uZS5wYWdlKSAvIEJZVEVTX1BFUl9NQVJLX0JJVDsKLSAgICAgIG1hcmtf d29yZCA9IG9mZnNldCAvICg4ICogc2l6ZW9mIChtYXJrX3R5cGUpKTsKLSAg ICAgIG1hcmtfYml0ID0gb2Zmc2V0ICUgKDggKiBzaXplb2YgKG1hcmtfdHlw ZSkpOwotCi0gICAgICBpZiAocGNoX3pvbmUubWFya19iaXRzW21hcmtfd29y ZF0gJiAoMSA8PCBtYXJrX2JpdCkpCi0JcmV0dXJuIDE7Ci0gICAgICBwY2hf em9uZS5tYXJrX2JpdHNbbWFya193b3JkXSB8PSAoMSA8PCBtYXJrX2JpdCk7 Ci0gICAgfQotICBlbHNlIGlmIChwYWdlLT5sYXJnZV9wKQotICAgIHsKLSAg ICAgIHN0cnVjdCBsYXJnZV9wYWdlX2VudHJ5ICpsYXJnZV9wYWdlCi0JPSAo c3RydWN0IGxhcmdlX3BhZ2VfZW50cnkgKikgcGFnZTsKLQotICAgICAgaWYg KGxhcmdlX3BhZ2UtPm1hcmtfcCkKLQlyZXR1cm4gMTsKLSAgICAgIGxhcmdl X3BhZ2UtPm1hcmtfcCA9IHRydWU7Ci0gICAgfQotICBlbHNlCi0gICAgewot ICAgICAgc3RydWN0IHNtYWxsX3BhZ2VfZW50cnkgKnNtYWxsX3BhZ2UKLQk9 IChzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqKSBwYWdlOwotCi0gICAgICBp ZiAoc21hbGxfcGFnZS0+bWFya19iaXRzW3pvbmVfZ2V0X29iamVjdF9tYXJr X3dvcmQgKHApXQotCSAgJiAoMSA8PCB6b25lX2dldF9vYmplY3RfbWFya19i aXQgKHApKSkKLQlyZXR1cm4gMTsKLSAgICAgIHNtYWxsX3BhZ2UtPm1hcmtf Yml0c1t6b25lX2dldF9vYmplY3RfbWFya193b3JkIChwKV0KLQl8PSAoMSA8 PCB6b25lX2dldF9vYmplY3RfbWFya19iaXQgKHApKTsKLSAgICB9Ci0KLSAg aWYgKEdHQ19ERUJVR19MRVZFTCA+PSA0KQotICAgIGZwcmludGYgKEcuZGVi dWdfZmlsZSwgIk1hcmtpbmcgJXBcbiIsIHApOwotCi0gIHJldHVybiAwOwot fQotCi0vKiBSZXR1cm4gMSBpZiBQIGhhcyBiZWVuIG1hcmtlZCwgemVybyBv dGhlcndpc2UuCi0gICBQIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSB0 aGUgR0MgYWxsb2NhdG9yOyBpdCBtdXN0bid0IHBvaW50IHRvCi0gICBzdGF0 aWMgb2JqZWN0cywgc3RhY2sgdmFyaWFibGVzLCBvciBtZW1vcnkgYWxsb2Nh dGVkIHdpdGggbWFsbG9jLiAgKi8KLQotaW50Ci1nZ2NfbWFya2VkX3AgKGNv bnN0IHZvaWQgKnApCi17Ci0gIHN0cnVjdCBwYWdlX2VudHJ5ICpwYWdlOwot ICBjb25zdCBjaGFyICpwdHIgPSAoY29uc3QgY2hhciAqKSBwOwotCi0gIHBh Z2UgPSB6b25lX2dldF9vYmplY3RfcGFnZSAocCk7Ci0KLSAgaWYgKHBhZ2Ut PnBjaF9wKQotICAgIHsKLSAgICAgIHNpemVfdCBtYXJrX3dvcmQsIG1hcmtf Yml0LCBvZmZzZXQ7Ci0gICAgICBvZmZzZXQgPSAocHRyIC0gcGNoX3pvbmUu cGFnZSkgLyBCWVRFU19QRVJfTUFSS19CSVQ7Ci0gICAgICBtYXJrX3dvcmQg PSBvZmZzZXQgLyAoOCAqIHNpemVvZiAobWFya190eXBlKSk7Ci0gICAgICBt YXJrX2JpdCA9IG9mZnNldCAlICg4ICogc2l6ZW9mIChtYXJrX3R5cGUpKTsK LQotICAgICAgcmV0dXJuIChwY2hfem9uZS5tYXJrX2JpdHNbbWFya193b3Jk XSAmICgxIDw8IG1hcmtfYml0KSkgIT0gMDsKLSAgICB9Ci0KLSAgaWYgKHBh Z2UtPmxhcmdlX3ApCi0gICAgewotICAgICAgc3RydWN0IGxhcmdlX3BhZ2Vf ZW50cnkgKmxhcmdlX3BhZ2UKLQk9IChzdHJ1Y3QgbGFyZ2VfcGFnZV9lbnRy eSAqKSBwYWdlOwotCi0gICAgICByZXR1cm4gbGFyZ2VfcGFnZS0+bWFya19w OwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHN0cnVjdCBzbWFsbF9w YWdlX2VudHJ5ICpzbWFsbF9wYWdlCi0JPSAoc3RydWN0IHNtYWxsX3BhZ2Vf ZW50cnkgKikgcGFnZTsKLQotICAgICAgcmV0dXJuIDAgIT0gKHNtYWxsX3Bh Z2UtPm1hcmtfYml0c1t6b25lX2dldF9vYmplY3RfbWFya193b3JkIChwKV0K LQkJICAgJiAoMSA8PCB6b25lX2dldF9vYmplY3RfbWFya19iaXQgKHApKSk7 Ci0gICAgfQotfQotCi0vKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGdjLWFi bGUgb2JqZWN0IFAuICAqLwotCi1zaXplX3QKLWdnY19nZXRfc2l6ZSAoY29u c3Qgdm9pZCAqcCkKLXsKLSAgc3RydWN0IHBhZ2VfZW50cnkgKnBhZ2U7Ci0g IGNvbnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyICopIHA7Ci0KLSAgcGFn ZSA9IHpvbmVfZ2V0X29iamVjdF9wYWdlIChwKTsKLQotICBpZiAocGFnZS0+ cGNoX3ApCi0gICAgewotICAgICAgc2l6ZV90IGFsbG9jX3dvcmQsIGFsbG9j X2JpdCwgb2Zmc2V0LCBtYXhfc2l6ZTsKLSAgICAgIG9mZnNldCA9IChwdHIg LSBwY2hfem9uZS5wYWdlKSAvIEJZVEVTX1BFUl9BTExPQ19CSVQgKyAxOwot ICAgICAgYWxsb2Nfd29yZCA9IG9mZnNldCAvICg4ICogc2l6ZW9mIChhbGxv Y190eXBlKSk7Ci0gICAgICBhbGxvY19iaXQgPSBvZmZzZXQgJSAoOCAqIHNp emVvZiAoYWxsb2NfdHlwZSkpOwotICAgICAgbWF4X3NpemUgPSBwY2hfem9u ZS5ieXRlcyAtIChwdHIgLSBwY2hfem9uZS5wYWdlKTsKLSAgICAgIHJldHVy biB6b25lX29iamVjdF9zaXplXzEgKHBjaF96b25lLmFsbG9jX2JpdHMsIGFs bG9jX3dvcmQsIGFsbG9jX2JpdCwKLQkJCQkgbWF4X3NpemUpOwotICAgIH0K LQotICBpZiAocGFnZS0+bGFyZ2VfcCkKLSAgICByZXR1cm4gKChzdHJ1Y3Qg bGFyZ2VfcGFnZV9lbnRyeSAqKXBhZ2UpLT5ieXRlczsKLSAgZWxzZQotICAg IHJldHVybiB6b25lX2ZpbmRfb2JqZWN0X3NpemUgKChzdHJ1Y3Qgc21hbGxf cGFnZV9lbnRyeSAqKSBwYWdlLCBwKTsKLX0KLQotLyogSW5pdGlhbGl6ZSB0 aGUgZ2djLXpvbmUtbW1hcCBhbGxvY2F0b3IuICAqLwotdm9pZAotaW5pdF9n Z2MgKHZvaWQpCi17Ci0gIC8qIFRoZSBhbGxvY2F0aW9uIHNpemUgbXVzdCBi ZSBncmVhdGVyIHRoYW4gQllURVNfUEVSX01BUktfQklULCBhbmQKLSAgICAg YSBtdWx0aXBsZSBvZiBib3RoIEJZVEVTX1BFUl9BTExPQ19CSVQgYW5kIEZS RUVfQklOX0RFTFRBLCBmb3IKLSAgICAgdGhlIGN1cnJlbnQgYXNzdW1wdGlv bnMgdG8gaG9sZC4gICovCi0KLSAgZ2NjX2Fzc2VydCAoRlJFRV9CSU5fREVM VEEgPT0gTUFYX0FMSUdOTUVOVCk7Ci0KLSAgLyogU2V0IHVwIHRoZSBtYWlu IHpvbmUgYnkgaGFuZC4gICovCi0gIG1haW5fem9uZS5uYW1lID0gIk1haW4g em9uZSI7Ci0gIEcuem9uZXMgPSAmbWFpbl96b25lOwotCi0gIC8qIEFsbG9j YXRlIHRoZSBkZWZhdWx0IHpvbmVzLiAgKi8KLSAgbmV3X2dnY196b25lXzEg KCZydGxfem9uZSwgIlJUTCB6b25lIik7Ci0gIG5ld19nZ2Nfem9uZV8xICgm dHJlZV96b25lLCAiVHJlZSB6b25lIik7Ci0gIG5ld19nZ2Nfem9uZV8xICgm dHJlZV9pZF96b25lLCAiVHJlZSBpZGVudGlmaWVyIHpvbmUiKTsKLQotICBH LnBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLSAgRy5sZ19wYWdlc2l6ZSA9 IGV4YWN0X2xvZzIgKEcucGFnZXNpemUpOwotICBHLnBhZ2VfbWFzayA9IH4o Ry5wYWdlc2l6ZSAtIDEpOwotCi0gIC8qIFJlcXVpcmUgdGhlIHN5c3RlbSBw YWdlIHNpemUgdG8gYmUgYSBtdWx0aXBsZSBvZiBHR0NfUEFHRV9TSVpFLiAg Ki8KLSAgZ2NjX2Fzc2VydCAoKEcucGFnZXNpemUgJiAoR0dDX1BBR0VfU0la RSAtIDEpKSA9PSAwKTsKLQotICAvKiBBbGxvY2F0ZSAxNiBzeXN0ZW0gcGFn ZXMgYXQgYSB0aW1lLiAgKi8KLSAgRy5xdWlyZV9zaXplID0gMTYgKiBHLnBh Z2VzaXplIC8gR0dDX1BBR0VfU0laRTsKLQotICAvKiBDYWxjdWxhdGUgdGhl IHNpemUgb2YgdGhlIGFsbG9jYXRpb24gYml0bWFwIGFuZCBvdGhlciBvdmVy aGVhZC4gICovCi0gIC8qIFJpZ2h0IG5vdyB3ZSBhbGxvY2F0ZSBiaXRzIGZv ciB0aGUgcGFnZSBoZWFkZXIgYW5kIGJpdG1hcC4gIFRoZXNlCi0gICAgIGFy ZSB3YXN0ZWQsIGJ1dCBhIGxpdHRsZSB0cmlja3kgdG8gZWxpbWluYXRlLiAg Ki8KLSAgRy5zbWFsbF9wYWdlX292ZXJoZWFkCi0gICAgPSBQQUdFX09WRVJI RUFEICsgKEdHQ19QQUdFX1NJWkUgLyBCWVRFU19QRVJfQUxMT0NfQklUIC8g OCk7Ci0gIC8qIEcuc21hbGxfcGFnZV9vdmVyaGVhZCA9IFJPVU5EX1VQIChH LnNtYWxsX3BhZ2Vfb3ZlcmhlYWQsIE1BWF9BTElHTk1FTlQpOyAqLwotCi0j aWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCi0gIEcuZGV2X3plcm9fZmQgPSBv cGVuICgiL2Rldi96ZXJvIiwgT19SRE9OTFkpOwotICBnY2NfYXNzZXJ0IChH LmRldl96ZXJvX2ZkICE9IC0xKTsKLSNlbmRpZgotCi0jaWYgMAotICBHLmRl YnVnX2ZpbGUgPSBmb3BlbiAoImdnYy1tbWFwLmRlYnVnIiwgInciKTsKLSAg c2V0bGluZWJ1ZiAoRy5kZWJ1Z19maWxlKTsKLSNlbHNlCi0gIEcuZGVidWdf ZmlsZSA9IHN0ZG91dDsKLSNlbmRpZgotCi0jaWZkZWYgVVNJTkdfTU1BUAot ICAvKiBTdHVuT1MgaGFzIGFuIGFtYXppbmcgb2ZmLWJ5LW9uZSBlcnJvciBm b3IgdGhlIGZpcnN0IG1tYXAgYWxsb2NhdGlvbgotICAgICBhZnRlciBmaWRk bGluZyB3aXRoIFJMSU1JVF9TVEFDSy4gIFRoZSByZXN1bHQsIGFzIGhhcmQg YXMgaXQgaXMgdG8KLSAgICAgYmVsaWV2ZSwgaXMgYW4gdW5hbGlnbmVkIHBh Z2UgYWxsb2NhdGlvbiwgd2hpY2ggd291bGQgY2F1c2UgdXMgdG8KLSAgICAg aG9yayBiYWRseSBpZiB3ZSB0cmllZCB0byB1c2UgaXQuICAqLwotICB7Ci0g ICAgY2hhciAqcCA9IGFsbG9jX2Fub24gKE5VTEwsIEcucGFnZXNpemUsICZt YWluX3pvbmUpOwotICAgIHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5ICplOwot ICAgIGlmICgoc2l6ZV90KXAgJiAoRy5wYWdlc2l6ZSAtIDEpKQotICAgICAg ewotCS8qIEhvdyBsb3NpbmcuICBEaXNjYXJkIHRoaXMgb25lIGFuZCB0cnkg YW5vdGhlci4gIElmIHdlIHN0aWxsCi0JICAgY2FuJ3QgZ2V0IHNvbWV0aGlu ZyB1c2VmdWwsIGdpdmUgdXAuICAqLwotCi0JcCA9IGFsbG9jX2Fub24gKE5V TEwsIEcucGFnZXNpemUsICZtYWluX3pvbmUpOwotCWdjY19hc3NlcnQgKCEo KHNpemVfdClwICYgKEcucGFnZXNpemUgLSAxKSkpOwotICAgICAgfQotCi0g ICAgaWYgKEdHQ19QQUdFX1NJWkUgPT0gRy5wYWdlc2l6ZSkKLSAgICAgIHsK LQkvKiBXZSBoYXZlIGEgZ29vZCBwYWdlLCBtaWdodCBhcyB3ZWxsIGhvbGQg b250byBpdC4uLiAgKi8KLQllID0gWENORVdWQVIgKHN0cnVjdCBzbWFsbF9w YWdlX2VudHJ5LCBHLnNtYWxsX3BhZ2Vfb3ZlcmhlYWQpOwotCWUtPmNvbW1v bi5wYWdlID0gcDsKLQllLT5jb21tb24uem9uZSA9ICZtYWluX3pvbmU7Ci0J ZS0+bmV4dCA9IG1haW5fem9uZS5mcmVlX3BhZ2VzOwotCXNldF9wYWdlX3Rh YmxlX2VudHJ5IChlLT5jb21tb24ucGFnZSwgJmUtPmNvbW1vbik7Ci0JbWFp bl96b25lLmZyZWVfcGFnZXMgPSBlOwotICAgICAgfQotICAgIGVsc2UKLSAg ICAgIHsKLQltdW5tYXAgKHAsIEcucGFnZXNpemUpOwotICAgICAgfQotICB9 Ci0jZW5kaWYKLX0KLQotLyogU3RhcnQgYSBuZXcgR0dDIHpvbmUuICAqLwot Ci1zdGF0aWMgdm9pZAotbmV3X2dnY196b25lXzEgKHN0cnVjdCBhbGxvY196 b25lICpuZXdfem9uZSwgY29uc3QgY2hhciAqIG5hbWUpCi17Ci0gIG5ld196 b25lLT5uYW1lID0gbmFtZTsKLSAgbmV3X3pvbmUtPm5leHRfem9uZSA9IEcu em9uZXMtPm5leHRfem9uZTsKLSAgRy56b25lcy0+bmV4dF96b25lID0gbmV3 X3pvbmU7Ci19Ci0KLS8qIEZyZWUgYWxsIGVtcHR5IHBhZ2VzIGFuZCBvYmpl Y3RzIHdpdGhpbiBhIHBhZ2UgZm9yIGEgZ2l2ZW4gem9uZSAgKi8KLQotc3Rh dGljIHZvaWQKLXN3ZWVwX3BhZ2VzIChzdHJ1Y3QgYWxsb2Nfem9uZSAqem9u ZSkKLXsKLSAgc3RydWN0IGxhcmdlX3BhZ2VfZW50cnkgKipscHAsICpscCwg KmxuZXh0OwotICBzdHJ1Y3Qgc21hbGxfcGFnZV9lbnRyeSAqKnNwcCwgKnNw LCAqc25leHQ7Ci0gIGNoYXIgKmxhc3RfZnJlZTsKLSAgc2l6ZV90IGFsbG9j YXRlZCA9IDA7Ci0gIGJvb2wgbm9tYXJrc2lucGFnZTsKLQotICAvKiBGaXJz dCwgcmVzZXQgdGhlIGZyZWVfY2h1bmtzIGxpc3RzLCBzaW5jZSB3ZSBhcmUg Z29pbmcgdG8KLSAgICAgcmUtZnJlZSBmcmVlIGNodW5rcyBpbiBob3BlcyBv ZiBjb2FsZXNjaW5nIHRoZW0gaW50byBsYXJnZSBjaHVua3MuICAqLwotICBt ZW1zZXQgKHpvbmUtPmZyZWVfY2h1bmtzLCAwLCBzaXplb2YgKHpvbmUtPmZy ZWVfY2h1bmtzKSk7Ci0gIHpvbmUtPmhpZ2hfZnJlZV9iaW4gPSAwOwotICB6 b25lLT5jYWNoZWRfZnJlZSA9IE5VTEw7Ci0gIHpvbmUtPmNhY2hlZF9mcmVl X3NpemUgPSAwOwotCi0gIC8qIExhcmdlIHBhZ2VzIGFyZSBhbGwgb3Igbm9u ZSBhZmZhaXJzLiBFaXRoZXIgdGhleSBhcmUgY29tcGxldGVseQotICAgICBl bXB0eSwgb3IgdGhleSBhcmUgY29tcGxldGVseSBmdWxsLiAgKi8KLSAgbHBw ID0gJnpvbmUtPmxhcmdlX3BhZ2VzOwotICBmb3IgKGxwID0gem9uZS0+bGFy Z2VfcGFnZXM7IGxwICE9IE5VTEw7IGxwID0gbG5leHQpCi0gICAgewotICAg ICAgZ2NjX2Fzc2VydCAobHAtPmNvbW1vbi5sYXJnZV9wKTsKLQotICAgICAg bG5leHQgPSBscC0+bmV4dDsKLQotICAgICAgLyogVGhpcyBwYWdlIGhhcyBu b3cgc3Vydml2ZWQgYW5vdGhlciBjb2xsZWN0aW9uLiAgKi8KLSAgICAgIGxw LT5jb21tb24uc3Vydml2ZWQrKzsKLQotICAgICAgaWYgKGxwLT5tYXJrX3Ap Ci0JewotCSAgbHAtPm1hcmtfcCA9IGZhbHNlOwotCSAgYWxsb2NhdGVkICs9 IGxwLT5ieXRlczsKLQkgIGxwcCA9ICZscC0+bmV4dDsKLQl9Ci0gICAgICBl bHNlCi0JewotCSAgKmxwcCA9IGxuZXh0OwotI2lmZGVmIEVOQUJMRV9HQ19D SEVDS0lORwotCSAgLyogUG9pc29uIHRoZSBwYWdlLiAgKi8KLQkgIG1lbXNl dCAobHAtPmNvbW1vbi5wYWdlLCAweGI1LCBTTUFMTF9QQUdFX1NJWkUpOwot I2VuZGlmCi0JICBpZiAobHAtPnByZXYpCi0JICAgIGxwLT5wcmV2LT5uZXh0 ID0gbHAtPm5leHQ7Ci0JICBpZiAobHAtPm5leHQpCi0JICAgIGxwLT5uZXh0 LT5wcmV2ID0gbHAtPnByZXY7Ci0JICBmcmVlX2xhcmdlX3BhZ2UgKGxwKTsK LQl9Ci0gICAgfQotCi0gIHNwcCA9ICZ6b25lLT5wYWdlczsKLSAgZm9yIChz cCA9IHpvbmUtPnBhZ2VzOyBzcCAhPSBOVUxMOyBzcCA9IHNuZXh0KQotICAg IHsKLSAgICAgIGNoYXIgKm9iamVjdCwgKmxhc3Rfb2JqZWN0OwotICAgICAg Y2hhciAqZW5kOwotICAgICAgYWxsb2NfdHlwZSAqYWxsb2Nfd29yZF9wOwot ICAgICAgbWFya190eXBlICptYXJrX3dvcmRfcDsKLQotICAgICAgZ2NjX2Fz c2VydCAoIXNwLT5jb21tb24ubGFyZ2VfcCk7Ci0KLSAgICAgIHNuZXh0ID0g c3AtPm5leHQ7Ci0KLSAgICAgIC8qIFRoaXMgcGFnZSBoYXMgbm93IHN1cnZp dmVkIGFub3RoZXIgY29sbGVjdGlvbi4gICovCi0gICAgICBzcC0+Y29tbW9u LnN1cnZpdmVkKys7Ci0KLSAgICAgIC8qIFN0ZXAgdGhyb3VnaCBhbGwgY2h1 bmtzLCBjb25zb2xpZGF0ZSB0aG9zZSB0aGF0IGFyZSBmcmVlIGFuZAotCSBp bnNlcnQgdGhlbSBpbnRvIHRoZSBmcmVlIGxpc3RzLiAgTm90ZSB0aGF0IGNv bnNvbGlkYXRpb24KLQkgc2xvd3MgZG93biBjb2xsZWN0aW9uIHNsaWdodGx5 LiAgKi8KLQotICAgICAgbGFzdF9vYmplY3QgPSBvYmplY3QgPSBzcC0+Y29t bW9uLnBhZ2U7Ci0gICAgICBlbmQgPSBzcC0+Y29tbW9uLnBhZ2UgKyBTTUFM TF9QQUdFX1NJWkU7Ci0gICAgICBsYXN0X2ZyZWUgPSBOVUxMOwotICAgICAg bm9tYXJrc2lucGFnZSA9IHRydWU7Ci0gICAgICBtYXJrX3dvcmRfcCA9IHNw LT5tYXJrX2JpdHM7Ci0gICAgICBhbGxvY193b3JkX3AgPSBzcC0+YWxsb2Nf Yml0czsKLQotICAgICAgZ2NjX2Fzc2VydCAoQllURVNfUEVSX0FMTE9DX0JJ VCA9PSBCWVRFU19QRVJfTUFSS19CSVQpOwotCi0gICAgICBvYmplY3QgPSBz cC0+Y29tbW9uLnBhZ2U7Ci0gICAgICBkbwotCXsKLQkgIHVuc2lnbmVkIGlu dCBpLCBuOwotCSAgYWxsb2NfdHlwZSBhbGxvY193b3JkOwotCSAgbWFya190 eXBlIG1hcmtfd29yZDsKLQotCSAgYWxsb2Nfd29yZCA9ICphbGxvY193b3Jk X3ArKzsKLQkgIG1hcmtfd29yZCA9ICptYXJrX3dvcmRfcCsrOwotCi0JICBp ZiAobWFya193b3JkKQotCSAgICBub21hcmtzaW5wYWdlID0gZmFsc2U7Ci0K LQkgIC8qIFRoZXJlIG91Z2h0IHRvIGJlIHNvbWUgd2F5IHRvIGRvIHRoaXMg d2l0aG91dCBsb29waW5nLi4uICAqLwotCSAgaSA9IDA7Ci0JICB3aGlsZSAo KG4gPSBhbGxvY19mZnMgKGFsbG9jX3dvcmQpKSAhPSAwKQotCSAgICB7Ci0J ICAgICAgLyogRXh0ZW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBuIC0gMSBi aXRzLiAgV2UgY2FuJ3QKLQkJIHNoaWZ0IGFsbG9jX3dvcmQgYnkgbiwgZXZl biB0aG91Z2ggaXQgaXNuJ3QgdXNlZCBpbiB0aGUKLQkJIGxvb3AsIGluIGNh c2Ugb25seSB0aGUgaGlnaGVzdCBiaXQgd2FzIHNldC4gICovCi0JICAgICAg YWxsb2Nfd29yZCA+Pj0gbiAtIDE7Ci0JICAgICAgbWFya193b3JkID4+PSBu IC0gMTsKLQkgICAgICBvYmplY3QgKz0gQllURVNfUEVSX01BUktfQklUICog KG4gLSAxKTsKLQotCSAgICAgIGlmIChtYXJrX3dvcmQgJiAxKQotCQl7Ci0J CSAgaWYgKGxhc3RfZnJlZSkKLQkJICAgIHsKLQkJICAgICAgVkFMR1JJTkRf RElTQ0FSRCAoVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEIChsYXN0X2Zy ZWUsCi0JCQkJCQkJCSAgICAgb2JqZWN0Ci0JCQkJCQkJCSAgICAgLSBsYXN0 X2ZyZWUpKTsKLQkJICAgICAgcG9pc29uX3JlZ2lvbiAobGFzdF9mcmVlLCBv YmplY3QgLSBsYXN0X2ZyZWUpOwotCQkgICAgICBmcmVlX2NodW5rIChsYXN0 X2ZyZWUsIG9iamVjdCAtIGxhc3RfZnJlZSwgem9uZSk7Ci0JCSAgICAgIGxh c3RfZnJlZSA9IE5VTEw7Ci0JCSAgICB9Ci0JCSAgZWxzZQotCQkgICAgYWxs b2NhdGVkICs9IG9iamVjdCAtIGxhc3Rfb2JqZWN0OwotCQkgIGxhc3Rfb2Jq ZWN0ID0gb2JqZWN0OwotCQl9Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgaWYg KGxhc3RfZnJlZSA9PSBOVUxMKQotCQkgICAgewotCQkgICAgICBsYXN0X2Zy ZWUgPSBvYmplY3Q7Ci0JCSAgICAgIGFsbG9jYXRlZCArPSBvYmplY3QgLSBs YXN0X29iamVjdDsKLQkJICAgIH0KLQkJICBlbHNlCi0JCSAgICB6b25lX2Ns ZWFyX29iamVjdF9hbGxvY19iaXQgKHNwLCBvYmplY3QpOwotCQl9Ci0KLQkg ICAgICAvKiBTaGlmdCB0byBqdXN0IGFmdGVyIHRoZSBhbGxvYyBiaXQgd2Ug aGFuZGxlZC4gICovCi0JICAgICAgYWxsb2Nfd29yZCA+Pj0gMTsKLQkgICAg ICBtYXJrX3dvcmQgPj49IDE7Ci0JICAgICAgb2JqZWN0ICs9IEJZVEVTX1BF Ul9NQVJLX0JJVDsKLQotCSAgICAgIGkgKz0gbjsKLQkgICAgfQotCi0JICBv YmplY3QgKz0gQllURVNfUEVSX01BUktfQklUICogKDggKiBzaXplb2YgKGFs bG9jX3R5cGUpIC0gaSk7Ci0JfQotICAgICAgd2hpbGUgKG9iamVjdCA8IGVu ZCk7Ci0KLSAgICAgIGlmIChub21hcmtzaW5wYWdlKQotCXsKLQkgICpzcHAg PSBzbmV4dDsKLSNpZmRlZiBFTkFCTEVfR0NfQ0hFQ0tJTkcKLQkgIFZBTEdS SU5EX0RJU0NBUkQgKFZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRCAoc3At PmNvbW1vbi5wYWdlLAotCQkJCQkJCSBTTUFMTF9QQUdFX1NJWkUpKTsKLQkg IC8qIFBvaXNvbiB0aGUgcGFnZS4gICovCi0JICBtZW1zZXQgKHNwLT5jb21t b24ucGFnZSwgMHhiNSwgU01BTExfUEFHRV9TSVpFKTsKLSNlbmRpZgotCSAg ZnJlZV9zbWFsbF9wYWdlIChzcCk7Ci0JICBjb250aW51ZTsKLQl9Ci0gICAg ICBlbHNlIGlmIChsYXN0X2ZyZWUpCi0JewotCSAgVkFMR1JJTkRfRElTQ0FS RCAoVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEIChsYXN0X2ZyZWUsCi0J CQkJCQkJIG9iamVjdCAtIGxhc3RfZnJlZSkpOwotCSAgcG9pc29uX3JlZ2lv biAobGFzdF9mcmVlLCBvYmplY3QgLSBsYXN0X2ZyZWUpOwotCSAgZnJlZV9j aHVuayAobGFzdF9mcmVlLCBvYmplY3QgLSBsYXN0X2ZyZWUsIHpvbmUpOwot CX0KLSAgICAgIGVsc2UKLQlhbGxvY2F0ZWQgKz0gb2JqZWN0IC0gbGFzdF9v YmplY3Q7Ci0KLSAgICAgIHNwcCA9ICZzcC0+bmV4dDsKLSAgICB9Ci0KLSAg em9uZS0+YWxsb2NhdGVkID0gYWxsb2NhdGVkOwotfQotCi0vKiBtYXJrLWFu ZC1zd2VlcCByb3V0aW5lIGZvciBjb2xsZWN0aW5nIGEgc2luZ2xlIHpvbmUu ICBORUVEX01BUktJTkcKLSAgIGlzIHRydWUgaWYgd2UgbmVlZCB0byBtYXJr IGJlZm9yZSBzd2VlcGluZywgZmFsc2UgaWYgc29tZSBvdGhlcgotICAgem9u ZSBjb2xsZWN0aW9uIGhhcyBhbHJlYWR5IHBlcmZvcm1lZCBtYXJraW5nIGZv ciB1cy4gIFJldHVybnMgdHJ1ZQotICAgaWYgd2UgY29sbGVjdGVkLCBmYWxz ZSBvdGhlcndpc2UuICAqLwotCi1zdGF0aWMgYm9vbAotZ2djX2NvbGxlY3Rf MSAoc3RydWN0IGFsbG9jX3pvbmUgKnpvbmUsIGJvb2wgbmVlZF9tYXJraW5n KQotewotI2lmIDAKLSAgLyogKi8KLSAgewotICAgIGludCBpOwotICAgIGZv ciAoaSA9IDA7IGkgPCBOVU1fRlJFRV9CSU5TICsgMTsgaSsrKQotICAgICAg ewotCXN0cnVjdCBhbGxvY19jaHVuayAqY2h1bms7Ci0JaW50IG4sIHRvdDsK LQotCW4gPSAwOwotCXRvdCA9IDA7Ci0JY2h1bmsgPSB6b25lLT5mcmVlX2No dW5rc1tpXTsKLQl3aGlsZSAoY2h1bmspCi0JICB7Ci0JICAgIG4rKzsKLQkg ICAgdG90ICs9IGNodW5rLT5zaXplOwotCSAgICBjaHVuayA9IGNodW5rLT5u ZXh0X2ZyZWU7Ci0JICB9Ci0JZnByaW50ZiAoc3RkZXJyLCAiQmluICVkOiAl ZCBmcmVlIGNodW5rcyAoJWQgYnl0ZXMpXG4iLAotCQkgaSwgbiwgdG90KTsK LSAgICAgIH0KLSAgfQotICAvKiAqLwotI2VuZGlmCi0KLSAgaWYgKCFxdWll dF9mbGFnKQotICAgIGZwcmludGYgKHN0ZGVyciwgIiB7JXMgR0MgJWx1ayAt PiAiLAotCSAgICAgem9uZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpIHpvbmUt PmFsbG9jYXRlZCAvIDEwMjQpOwotCi0gIC8qIFplcm8gdGhlIHRvdGFsIGFs bG9jYXRlZCBieXRlcy4gIFRoaXMgd2lsbCBiZSByZWNhbGN1bGF0ZWQgaW4g dGhlCi0gICAgIHN3ZWVwIHBoYXNlLiAgKi8KLSAgem9uZS0+YWxsb2NhdGVk ID0gMDsKLQotICAvKiBSZWxlYXNlIHRoZSBwYWdlcyB3ZSBmcmVlZCB0aGUg bGFzdCB0aW1lIHdlIGNvbGxlY3RlZCwgYnV0IGRpZG4ndAotICAgICByZXVz ZSBpbiB0aGUgaW50ZXJpbS4gICovCi0gIHJlbGVhc2VfcGFnZXMgKHpvbmUp OwotCi0gIGlmIChuZWVkX21hcmtpbmcpCi0gICAgewotICAgICAgem9uZV9h bGxvY2F0ZV9tYXJrcyAoKTsKLSAgICAgIGdnY19tYXJrX3Jvb3RzICgpOwot ICAgICAgaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQotCWdnY19wcnVuZV9vdmVy aGVhZF9saXN0ICgpOwotICAgIH0KLQotICBzd2VlcF9wYWdlcyAoem9uZSk7 Ci0gIHpvbmUtPndhc19jb2xsZWN0ZWQgPSB0cnVlOwotICB6b25lLT5hbGxv Y2F0ZWRfbGFzdF9nYyA9IHpvbmUtPmFsbG9jYXRlZDsKLQotICBpZiAoIXF1 aWV0X2ZsYWcpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAiJWx1a30iLCAodW5z aWduZWQgbG9uZykgem9uZS0+YWxsb2NhdGVkIC8gMTAyNCk7Ci0gIHJldHVy biB0cnVlOwotfQotCi0vKiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgcGFnZSBz dXJ2aXZhbCByYXRlIGluIHRlcm1zIG9mIG51bWJlciBvZgotICAgY29sbGVj dGlvbnMuICAqLwotCi1zdGF0aWMgZmxvYXQKLWNhbGN1bGF0ZV9hdmVyYWdl X3BhZ2Vfc3Vydml2YWwgKHN0cnVjdCBhbGxvY196b25lICp6b25lKQotewot ICBmbG9hdCBjb3VudCA9IDAuMDsKLSAgZmxvYXQgc3Vydml2YWwgPSAwLjA7 Ci0gIHN0cnVjdCBzbWFsbF9wYWdlX2VudHJ5ICpwOwotICBzdHJ1Y3QgbGFy Z2VfcGFnZV9lbnRyeSAqbHA7Ci0gIGZvciAocCA9IHpvbmUtPnBhZ2VzOyBw OyBwID0gcC0+bmV4dCkKLSAgICB7Ci0gICAgICBjb3VudCArPSAxLjA7Ci0g ICAgICBzdXJ2aXZhbCArPSBwLT5jb21tb24uc3Vydml2ZWQ7Ci0gICAgfQot ICBmb3IgKGxwID0gem9uZS0+bGFyZ2VfcGFnZXM7IGxwOyBscCA9IGxwLT5u ZXh0KQotICAgIHsKLSAgICAgIGNvdW50ICs9IDEuMDsKLSAgICAgIHN1cnZp dmFsICs9IGxwLT5jb21tb24uc3Vydml2ZWQ7Ci0gICAgfQotICByZXR1cm4g c3Vydml2YWwvY291bnQ7Ci19Ci0KLS8qIFRvcCBsZXZlbCBjb2xsZWN0aW9u IHJvdXRpbmUuICAqLwotCi12b2lkCi1nZ2NfY29sbGVjdCAodm9pZCkKLXsK LSAgc3RydWN0IGFsbG9jX3pvbmUgKnpvbmU7Ci0gIGJvb2wgbWFya2VkID0g ZmFsc2U7Ci0KLSAgdGltZXZhcl9wdXNoIChUVl9HQyk7Ci0KLSAgaWYgKCFn Z2NfZm9yY2VfY29sbGVjdCkKLSAgICB7Ci0gICAgICBmbG9hdCBhbGxvY2F0 ZWRfbGFzdF9nYyA9IDAsIGFsbG9jYXRlZCA9IDAsIG1pbl9leHBhbmQ7Ci0K LSAgICAgIGZvciAoem9uZSA9IEcuem9uZXM7IHpvbmU7IHpvbmUgPSB6b25l LT5uZXh0X3pvbmUpCi0JewotCSAgYWxsb2NhdGVkX2xhc3RfZ2MgKz0gem9u ZS0+YWxsb2NhdGVkX2xhc3RfZ2M7Ci0JICBhbGxvY2F0ZWQgKz0gem9uZS0+ YWxsb2NhdGVkOwotCX0KLQotICAgICAgYWxsb2NhdGVkX2xhc3RfZ2MgPQot CU1BWCAoYWxsb2NhdGVkX2xhc3RfZ2MsCi0JICAgICAoc2l6ZV90KSBQQVJB TV9WQUxVRSAoR0dDX01JTl9IRUFQU0laRSkgKiAxMDI0KTsKLSAgICAgIG1p bl9leHBhbmQgPSBhbGxvY2F0ZWRfbGFzdF9nYyAqIFBBUkFNX1ZBTFVFIChH R0NfTUlOX0VYUEFORCkgLyAxMDA7Ci0KLSAgICAgIGlmIChhbGxvY2F0ZWQg PCBhbGxvY2F0ZWRfbGFzdF9nYyArIG1pbl9leHBhbmQpCi0JewotCSAgdGlt ZXZhcl9wb3AgKFRWX0dDKTsKLQkgIHJldHVybjsKLQl9Ci0gICAgfQotCi0g IGludm9rZV9wbHVnaW5fY2FsbGJhY2tzIChQTFVHSU5fR0dDX1NUQVJULCBO VUxMKTsKLQotICAvKiBTdGFydCBieSBwb3NzaWJseSBjb2xsZWN0aW5nIHRo ZSBtYWluIHpvbmUuICAqLwotICBtYWluX3pvbmUud2FzX2NvbGxlY3RlZCA9 IGZhbHNlOwotICBtYXJrZWQgfD0gZ2djX2NvbGxlY3RfMSAoJm1haW5fem9u ZSwgdHJ1ZSk7Ci0KLSAgLyogSW4gb3JkZXIgdG8ga2VlcCB0aGUgbnVtYmVy IG9mIGNvbGxlY3Rpb25zIGRvd24sIHdlIGRvbid0Ci0gICAgIGNvbGxlY3Qg b3RoZXIgem9uZXMgdW5sZXNzIHdlIGFyZSBjb2xsZWN0aW5nIHRoZSBtYWlu IHpvbmUuICBUaGlzCi0gICAgIGdpdmVzIHVzIHJvdWdobHkgdGhlIHNhbWUg bnVtYmVyIG9mIGNvbGxlY3Rpb25zIGFzIHdlIHVzZWQgdG8KLSAgICAgaGF2 ZSB3aXRoIHRoZSBvbGQgZ2MuICBUaGUgbnVtYmVyIG9mIGNvbGxlY3Rpb24g aXMgaW1wb3J0YW50Ci0gICAgIGJlY2F1c2Ugb3VyIG1haW4gc2xvd2Rvd24g KGFjY29yZGluZyB0byBwcm9maWxpbmcpIGlzIG5vdyBpbgotICAgICBtYXJr aW5nLiAgU28gaWYgd2UgbWFyayB0d2ljZSBhcyBvZnRlbiBhcyB3ZSB1c2Vk IHRvLCB3ZSdsbCBiZQotICAgICB0d2ljZSBhcyBzbG93LiAgSG9wZWZ1bGx5 IHdlJ2xsIGF2b2lkIHRoaXMgY29zdCB3aGVuIHdlIG1hcmsKLSAgICAgem9u ZS1hdC1hLXRpbWUuICAqLwotICAvKiBOT1RFIGRyb3cvMjAwNC0wNy0yODog V2Ugbm93IGFsd2F5cyBjb2xsZWN0IHRoZSBtYWluIHpvbmUsIGJ1dAotICAg ICBrZWVwIHRoaXMgY29kZSBpbiBjYXNlIHRoZSBoZXVyaXN0aWNzIGFyZSBm dXJ0aGVyIHJlZmluZWQuICAqLwotCi0gIGlmIChtYWluX3pvbmUud2FzX2Nv bGxlY3RlZCkKLSAgICB7Ci0gICAgICBzdHJ1Y3QgYWxsb2Nfem9uZSAqem9u ZTsKLQotICAgICAgZm9yICh6b25lID0gbWFpbl96b25lLm5leHRfem9uZTsg em9uZTsgem9uZSA9IHpvbmUtPm5leHRfem9uZSkKLQl7Ci0JICB6b25lLT53 YXNfY29sbGVjdGVkID0gZmFsc2U7Ci0JICBtYXJrZWQgfD0gZ2djX2NvbGxl Y3RfMSAoem9uZSwgIW1hcmtlZCk7Ci0JfQotICAgIH0KLQotICAvKiBQcmlu dCBwYWdlIHN1cnZpdmFsIHN0YXRzLCBpZiBzb21lb25lIHdhbnRzIHRoZW0u ICAqLwotICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MgJiYgR0dDX0RFQlVHX0xF VkVMID49IDIpCi0gICAgewotICAgICAgZm9yICh6b25lID0gRy56b25lczsg em9uZTsgem9uZSA9IHpvbmUtPm5leHRfem9uZSkKLQl7Ci0JICBpZiAoem9u ZS0+d2FzX2NvbGxlY3RlZCkKLQkgICAgewotCSAgICAgIGZsb2F0IGYgPSBj YWxjdWxhdGVfYXZlcmFnZV9wYWdlX3N1cnZpdmFsICh6b25lKTsKLQkgICAg ICBwcmludGYgKCJBdmVyYWdlIHBhZ2Ugc3Vydml2YWwgaW4gem9uZSBgJXMn IGlzICVmXG4iLAotCQkgICAgICB6b25lLT5uYW1lLCBmKTsKLQkgICAgfQot CX0KLSAgICB9Ci0KLSAgaWYgKG1hcmtlZCkKLSAgICB6b25lX2ZyZWVfbWFy a3MgKCk7Ci0KLSAgLyogRnJlZSBkZWFkIHpvbmVzLiAgKi8KLSAgZm9yICh6 b25lID0gRy56b25lczsgem9uZSAmJiB6b25lLT5uZXh0X3pvbmU7IHpvbmUg PSB6b25lLT5uZXh0X3pvbmUpCi0gICAgewotICAgICAgaWYgKHpvbmUtPm5l eHRfem9uZS0+ZGVhZCkKLQl7Ci0JICBzdHJ1Y3QgYWxsb2Nfem9uZSAqZGVh ZF96b25lID0gem9uZS0+bmV4dF96b25lOwotCi0JICBwcmludGYgKCJab25l IGAlcycgaXMgZGVhZCBhbmQgd2lsbCBiZSBmcmVlZC5cbiIsIGRlYWRfem9u ZS0+bmFtZSk7Ci0KLQkgIC8qIFRoZSB6b25lIG11c3QgYmUgZW1wdHkuICAq LwotCSAgZ2NjX2Fzc2VydCAoIWRlYWRfem9uZS0+YWxsb2NhdGVkKTsKLQot CSAgLyogVW5jaGFpbiB0aGUgZGVhZCB6b25lLCByZWxlYXNlIGFsbCBpdHMg cGFnZXMgYW5kIGZyZWUgaXQuICAqLwotCSAgem9uZS0+bmV4dF96b25lID0g em9uZS0+bmV4dF96b25lLT5uZXh0X3pvbmU7Ci0JICByZWxlYXNlX3BhZ2Vz IChkZWFkX3pvbmUpOwotCSAgZnJlZSAoZGVhZF96b25lKTsKLQl9Ci0gICAg fQotCi0gIGludm9rZV9wbHVnaW5fY2FsbGJhY2tzIChQTFVHSU5fR0dDX0VO RCwgTlVMTCk7Ci0KLSAgdGltZXZhcl9wb3AgKFRWX0dDKTsKLX0KLQotLyog UHJpbnQgYWxsb2NhdGlvbiBzdGF0aXN0aWNzLiAgKi8KLSNkZWZpbmUgU0NB TEUoeCkgKCh1bnNpZ25lZCBsb25nKSAoKHgpIDwgMTAyNCoxMCBcCi0JCSAg PyAoeCkgXAotCQkgIDogKCh4KSA8IDEwMjQqMTAyNCoxMCBcCi0JCSAgICAg PyAoeCkgLyAxMDI0IFwKLQkJICAgICA6ICh4KSAvICgxMDI0KjEwMjQpKSkp Ci0jZGVmaW5lIExBQkVMKHgpICgoeCkgPCAxMDI0KjEwID8gJyAnIDogKCh4 KSA8IDEwMjQqMTAyNCoxMCA/ICdrJyA6ICdNJykpCi0KLXZvaWQKLWdnY19w cmludF9zdGF0aXN0aWNzICh2b2lkKQotewotICBzdHJ1Y3QgYWxsb2Nfem9u ZSAqem9uZTsKLSAgc3RydWN0IGdnY19zdGF0aXN0aWNzIHN0YXRzOwotICBz aXplX3QgdG90YWxfb3ZlcmhlYWQgPSAwLCB0b3RhbF9hbGxvY2F0ZWQgPSAw LCB0b3RhbF9ieXRlc19tYXBwZWQgPSAwOwotICBzaXplX3QgcHRlX292ZXJo ZWFkLCBpOwotCi0gIC8qIENsZWFyIHRoZSBzdGF0aXN0aWNzLiAgKi8KLSAg bWVtc2V0ICgmc3RhdHMsIDAsIHNpemVvZiAoc3RhdHMpKTsKLQotICAvKiBN YWtlIHN1cmUgY29sbGVjdGlvbiB3aWxsIHJlYWxseSBvY2N1ci4gICovCi0g IGdnY19mb3JjZV9jb2xsZWN0ID0gdHJ1ZTsKLQotICAvKiBDb2xsZWN0IGFu ZCBwcmludCB0aGUgc3RhdGlzdGljcyBjb21tb24gYWNyb3NzIGNvbGxlY3Rv cnMuICAqLwotICBnZ2NfcHJpbnRfY29tbW9uX3N0YXRpc3RpY3MgKHN0ZGVy ciwgJnN0YXRzKTsKLQotICBnZ2NfZm9yY2VfY29sbGVjdCA9IGZhbHNlOwot Ci0gIC8qIFJlbGVhc2UgZnJlZSBwYWdlcyBzbyB0aGF0IHdlIHdpbGwgbm90 IGNvdW50IHRoZSBieXRlcyBhbGxvY2F0ZWQKLSAgICAgdGhlcmUgYXMgcGFy dCBvZiB0aGUgdG90YWwgYWxsb2NhdGVkIG1lbW9yeS4gICovCi0gIGZvciAo em9uZSA9IEcuem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0X3pvbmUp Ci0gICAgcmVsZWFzZV9wYWdlcyAoem9uZSk7Ci0KLSAgLyogQ29sbGVjdCBz b21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpb3VzIHNpemVzIG9mCi0g ICAgIGFsbG9jYXRpb24uICAqLwotICBmcHJpbnRmIChzdGRlcnIsCi0gICAg ICAgICAgICJNZW1vcnkgc3RpbGwgYWxsb2NhdGVkIGF0IHRoZSBlbmQgb2Yg dGhlIGNvbXBpbGF0aW9uIHByb2Nlc3NcbiIpOwotCi0gIGZwcmludGYgKHN0 ZGVyciwgIiUyMHMgJTEwcyAgJTEwcyAgJTEwc1xuIiwKLQkgICAiWm9uZSIs ICJBbGxvY2F0ZWQiLCAiVXNlZCIsICJPdmVyaGVhZCIpOwotICBmb3IgKHpv bmUgPSBHLnpvbmVzOyB6b25lOyB6b25lID0gem9uZS0+bmV4dF96b25lKQot ICAgIHsKLSAgICAgIHN0cnVjdCBsYXJnZV9wYWdlX2VudHJ5ICpsYXJnZV9w YWdlOwotICAgICAgc2l6ZV90IG92ZXJoZWFkLCBhbGxvY2F0ZWQsIGluX3Vz ZTsKLQotICAgICAgLyogU2tpcCBlbXB0eSB6b25lcy4gICovCi0gICAgICBp ZiAoIXpvbmUtPnBhZ2VzICYmICF6b25lLT5sYXJnZV9wYWdlcykKLQljb250 aW51ZTsKLQotICAgICAgYWxsb2NhdGVkID0gaW5fdXNlID0gMDsKLQotICAg ICAgb3ZlcmhlYWQgPSBzaXplb2YgKHN0cnVjdCBhbGxvY196b25lKTsKLQot ICAgICAgZm9yIChsYXJnZV9wYWdlID0gem9uZS0+bGFyZ2VfcGFnZXM7IGxh cmdlX3BhZ2UgIT0gTlVMTDsKLQkgICBsYXJnZV9wYWdlID0gbGFyZ2VfcGFn ZS0+bmV4dCkKLQl7Ci0JICBhbGxvY2F0ZWQgKz0gbGFyZ2VfcGFnZS0+Ynl0 ZXM7Ci0JICBpbl91c2UgKz0gbGFyZ2VfcGFnZS0+Ynl0ZXM7Ci0JICBvdmVy aGVhZCArPSBzaXplb2YgKHN0cnVjdCBsYXJnZV9wYWdlX2VudHJ5KTsKLQl9 Ci0KLSAgICAgIC8qIFRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gd2FsayB0aHJv dWdoIHRoZSBzbWFsbCBwYWdlcyBmaW5kaW5nCi0JIHVzZWQgYW5kIHVudXNl ZCBvYmplY3RzLiAgSW5zdGVhZCwgYWRkIGFsbCB0aGUgcGFnZXMsIGFuZAot CSBzdWJ0cmFjdCBvdXQgdGhlIGZyZWUgbGlzdC4gICovCi0KLSAgICAgIGFs bG9jYXRlZCArPSBHR0NfUEFHRV9TSVpFICogem9uZS0+bl9zbWFsbF9wYWdl czsKLSAgICAgIGluX3VzZSArPSBHR0NfUEFHRV9TSVpFICogem9uZS0+bl9z bWFsbF9wYWdlczsKLSAgICAgIG92ZXJoZWFkICs9IEcuc21hbGxfcGFnZV9v dmVyaGVhZCAqIHpvbmUtPm5fc21hbGxfcGFnZXM7Ci0KLSAgICAgIGZvciAo aSA9IDA7IGkgPD0gTlVNX0ZSRUVfQklOUzsgaSsrKQotCXsKLQkgIHN0cnVj dCBhbGxvY19jaHVuayAqY2h1bmsgPSB6b25lLT5mcmVlX2NodW5rc1tpXTsK LQkgIHdoaWxlIChjaHVuaykKLQkgICAgewotCSAgICAgIGluX3VzZSAtPSBn Z2NfZ2V0X3NpemUgKGNodW5rKTsKLQkgICAgICBjaHVuayA9IGNodW5rLT5u ZXh0X2ZyZWU7Ci0JICAgIH0KLQl9Ci0KLSAgICAgIGZwcmludGYgKHN0ZGVy ciwgIiUyMHMgJTEwbHUlYyAlMTBsdSVjICUxMGx1JWNcbiIsCi0JICAgICAg IHpvbmUtPm5hbWUsCi0JICAgICAgIFNDQUxFIChhbGxvY2F0ZWQpLCBMQUJF TCAoYWxsb2NhdGVkKSwKLQkgICAgICAgU0NBTEUgKGluX3VzZSksIExBQkVM IChpbl91c2UpLAotCSAgICAgICBTQ0FMRSAob3ZlcmhlYWQpLCBMQUJFTCAo b3ZlcmhlYWQpKTsKLQotICAgICAgZ2NjX2Fzc2VydCAoaW5fdXNlID09IHpv bmUtPmFsbG9jYXRlZCk7Ci0KLSAgICAgIHRvdGFsX292ZXJoZWFkICs9IG92 ZXJoZWFkOwotICAgICAgdG90YWxfYWxsb2NhdGVkICs9IHpvbmUtPmFsbG9j YXRlZDsKLSAgICAgIHRvdGFsX2J5dGVzX21hcHBlZCArPSB6b25lLT5ieXRl c19tYXBwZWQ7Ci0gICAgfQotCi0gIC8qIENvdW50IHRoZSBzaXplIG9mIHRo ZSBwYWdlIHRhYmxlIGFzIGJlc3Qgd2UgY2FuLiAgKi8KLSNpZiBIT1NUX0JJ VFNfUEVSX1BUUiA8PSAzMgotICBwdGVfb3ZlcmhlYWQgPSBzaXplb2YgKEcu bG9va3VwKTsKLSAgZm9yIChpID0gMDsgaSA8IFBBR0VfTDFfU0laRTsgaSsr KQotICAgIGlmIChHLmxvb2t1cFtpXSkKLSAgICAgIHB0ZV9vdmVyaGVhZCAr PSBQQUdFX0wyX1NJWkUgKiBzaXplb2YgKHN0cnVjdCBwYWdlX2VudHJ5ICop OwotI2Vsc2UKLSAgewotICAgIHBhZ2VfdGFibGUgdGFibGUgPSBHLmxvb2t1 cDsKLSAgICBwdGVfb3ZlcmhlYWQgPSAwOwotICAgIHdoaWxlICh0YWJsZSkK LSAgICAgIHsKLQlwdGVfb3ZlcmhlYWQgKz0gc2l6ZW9mICgqdGFibGUpOwot CWZvciAoaSA9IDA7IGkgPCBQQUdFX0wxX1NJWkU7IGkrKykKLQkgIGlmICh0 YWJsZS0+dGFibGVbaV0pCi0JICAgIHB0ZV9vdmVyaGVhZCArPSBQQUdFX0wy X1NJWkUgKiBzaXplb2YgKHN0cnVjdCBwYWdlX2VudHJ5ICopOwotCXRhYmxl ID0gdGFibGUtPm5leHQ7Ci0gICAgICB9Ci0gIH0KLSNlbmRpZgotICBmcHJp bnRmIChzdGRlcnIsICIlMjBzICUxMXMgJTExcyAlMTBsdSVjXG4iLCAiUGFn ZSBUYWJsZSIsCi0JICAgIiIsICIiLCBTQ0FMRSAocHRlX292ZXJoZWFkKSwg TEFCRUwgKHB0ZV9vdmVyaGVhZCkpOwotICB0b3RhbF9vdmVyaGVhZCArPSBw dGVfb3ZlcmhlYWQ7Ci0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJTIwcyAlMTBs dSVjICUxMGx1JWMgJTEwbHUlY1xuIiwgIlRvdGFsIiwKLQkgICBTQ0FMRSAo dG90YWxfYnl0ZXNfbWFwcGVkKSwgTEFCRUwgKHRvdGFsX2J5dGVzX21hcHBl ZCksCi0JICAgU0NBTEUgKHRvdGFsX2FsbG9jYXRlZCksIExBQkVMKHRvdGFs X2FsbG9jYXRlZCksCi0JICAgU0NBTEUgKHRvdGFsX292ZXJoZWFkKSwgTEFC RUwgKHRvdGFsX292ZXJoZWFkKSk7Ci0KLSAgaWYgKEdBVEhFUl9TVEFUSVNU SUNTKQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBhbGxfb3Zl cmhlYWQgPSAwLCBhbGxfYWxsb2NhdGVkID0gMDsKLSAgICAgIHVuc2lnbmVk IGxvbmcgbG9uZyBhbGxfb3ZlcmhlYWRfdW5kZXIzMiA9IDAsIGFsbF9hbGxv Y2F0ZWRfdW5kZXIzMiA9IDA7Ci0gICAgICB1bnNpZ25lZCBsb25nIGxvbmcg YWxsX292ZXJoZWFkX3VuZGVyNjQgPSAwLCBhbGxfYWxsb2NhdGVkX3VuZGVy NjQgPSAwOwotICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGFsbF9vdmVyaGVh ZF91bmRlcjEyOCA9IDAsIGFsbF9hbGxvY2F0ZWRfdW5kZXIxMjggPSAwOwot Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcblRvdGFsIGFsbG9jYXRpb25z IGFuZCBvdmVyaGVhZHMgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNz XG4iKTsKLQotICAgICAgZm9yICh6b25lID0gRy56b25lczsgem9uZTsgem9u ZSA9IHpvbmUtPm5leHRfem9uZSkKLQl7Ci0JICBhbGxfb3ZlcmhlYWQgKz0g em9uZS0+c3RhdHMudG90YWxfb3ZlcmhlYWQ7Ci0JICBhbGxfYWxsb2NhdGVk ICs9IHpvbmUtPnN0YXRzLnRvdGFsX2FsbG9jYXRlZDsKLQotCSAgYWxsX2Fs bG9jYXRlZF91bmRlcjMyICs9IHpvbmUtPnN0YXRzLnRvdGFsX2FsbG9jYXRl ZF91bmRlcjMyOwotCSAgYWxsX292ZXJoZWFkX3VuZGVyMzIgKz0gem9uZS0+ c3RhdHMudG90YWxfb3ZlcmhlYWRfdW5kZXIzMjsKLQotCSAgYWxsX2FsbG9j YXRlZF91bmRlcjY0ICs9IHpvbmUtPnN0YXRzLnRvdGFsX2FsbG9jYXRlZF91 bmRlcjY0OwotCSAgYWxsX292ZXJoZWFkX3VuZGVyNjQgKz0gem9uZS0+c3Rh dHMudG90YWxfb3ZlcmhlYWRfdW5kZXI2NDsKLQotCSAgYWxsX2FsbG9jYXRl ZF91bmRlcjEyOCArPSB6b25lLT5zdGF0cy50b3RhbF9hbGxvY2F0ZWRfdW5k ZXIxMjg7Ci0JICBhbGxfb3ZlcmhlYWRfdW5kZXIxMjggKz0gem9uZS0+c3Rh dHMudG90YWxfb3ZlcmhlYWRfdW5kZXIxMjg7Ci0KLQkgIGZwcmludGYgKHN0 ZGVyciwgIiUyMHM6ICAgICAgICAgICAgICAgICAgJTEwbGxkXG4iLAotCQkg ICB6b25lLT5uYW1lLCB6b25lLT5zdGF0cy50b3RhbF9hbGxvY2F0ZWQpOwot CX0KLQotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLQotICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiVG90YWwgT3ZlcmhlYWQ6ICAgICAgICAgICAg ICAgICAgICAgICAgJTEwbGxkXG4iLAotCSAgICAgICBhbGxfb3ZlcmhlYWQp OwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVG90YWwgQWxsb2NhdGVkOiAg ICAgICAgICAgICAgICAgICAgICAgJTEwbGxkXG4iLAotCSAgICAgICBhbGxf YWxsb2NhdGVkKTsKLQotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVG90YWwg T3ZlcmhlYWQgIHVuZGVyICAzMkI6ICAgICAgICAgICAgJTEwbGxkXG4iLAot CSAgICAgICBhbGxfb3ZlcmhlYWRfdW5kZXIzMik7Ci0gICAgICBmcHJpbnRm IChzdGRlcnIsICJUb3RhbCBBbGxvY2F0ZWQgdW5kZXIgIDMyQjogICAgICAg ICAgICAlMTBsbGRcbiIsCi0JICAgICAgIGFsbF9hbGxvY2F0ZWRfdW5kZXIz Mik7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJUb3RhbCBPdmVyaGVhZCAg dW5kZXIgIDY0QjogICAgICAgICAgICAlMTBsbGRcbiIsCi0JICAgICAgIGFs bF9vdmVyaGVhZF91bmRlcjY0KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwg IlRvdGFsIEFsbG9jYXRlZCB1bmRlciAgNjRCOiAgICAgICAgICAgICUxMGxs ZFxuIiwKLQkgICAgICAgYWxsX2FsbG9jYXRlZF91bmRlcjY0KTsKLSAgICAg IGZwcmludGYgKHN0ZGVyciwgIlRvdGFsIE92ZXJoZWFkICB1bmRlciAxMjhC OiAgICAgICAgICAgICUxMGxsZFxuIiwKLQkgICAgICAgYWxsX292ZXJoZWFk X3VuZGVyMTI4KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlRvdGFsIEFs bG9jYXRlZCB1bmRlciAxMjhCOiAgICAgICAgICAgICUxMGxsZFxuIiwKLQkg ICAgICAgYWxsX2FsbG9jYXRlZF91bmRlcjEyOCk7Ci0gICAgfQotfQotCi0v KiBQcmVjb21waWxlZCBoZWFkZXIgc3VwcG9ydC4gICovCi0KLS8qIEZvciBw cmVjb21waWxlZCBoZWFkZXJzLCB3ZSBzb3J0IG9iamVjdHMgYmFzZWQgb24g dGhlaXIgdHlwZS4gIFdlCi0gICBhbHNvIHNvcnQgdmFyaW91cyBvYmplY3Rz IGludG8gdGhlaXIgb3duIGJ1Y2tldHM7IGN1cnJlbnRseSB0aGlzCi0gICBj b3ZlcnMgc3RyaW5ncyBhbmQgSURFTlRJRklFUl9OT0RFIHRyZWVzLiAgVGhl IGNob2ljZXMgb2YgaG93Ci0gICB0byBzb3J0IGJ1Y2tldHMgaGF2ZSBub3Qg eWV0IGJlZW4gdHVuZWQuICAqLwotCi0jZGVmaW5lIE5VTV9QQ0hfQlVDS0VU UwkJKGd0X3R5cGVzX2VudW1fbGFzdCArIDMpCi0KLSNkZWZpbmUgT1RIRVJf QlVDS0VUCQkoZ3RfdHlwZXNfZW51bV9sYXN0ICsgMCkKLSNkZWZpbmUgSURF TlRJRklFUl9CVUNLRVQJKGd0X3R5cGVzX2VudW1fbGFzdCArIDEpCi0jZGVm aW5lIFNUUklOR19CVUNLRVQJCShndF90eXBlc19lbnVtX2xhc3QgKyAyKQot Ci1zdHJ1Y3QgZ2djX3BjaF9vbmRpc2sKLXsKLSAgc2l6ZV90IHRvdGFsOwot ICBzaXplX3QgdHlwZV90b3RhbHNbTlVNX1BDSF9CVUNLRVRTXTsKLX07Ci0K LXN0cnVjdCBnZ2NfcGNoX2RhdGEKLXsKLSAgc3RydWN0IGdnY19wY2hfb25k aXNrIGQ7Ci0gIHNpemVfdCBiYXNlOwotICBzaXplX3Qgb3JpZ19iYXNlOwot ICBzaXplX3QgYWxsb2Nfc2l6ZTsKLSAgYWxsb2NfdHlwZSAqYWxsb2NfYml0 czsKLSAgc2l6ZV90IHR5cGVfYmFzZXNbTlVNX1BDSF9CVUNLRVRTXTsKLSAg c2l6ZV90IHN0YXJ0X29mZnNldDsKLX07Ci0KLS8qIEluaXRpYWxpemUgdGhl IFBDSCBkYXRhIHN0cnVjdHVyZS4gICovCi0KLXN0cnVjdCBnZ2NfcGNoX2Rh dGEgKgotaW5pdF9nZ2NfcGNoICh2b2lkKQotewotICByZXR1cm4gWENORVcg KHN0cnVjdCBnZ2NfcGNoX2RhdGEpOwotfQotCi0vKiBSZXR1cm4gd2hpY2gg b2YgdGhlIHBhZ2UtYWxpZ25lZCBidWNrZXRzIHRoZSBvYmplY3QgYXQgWCwg d2l0aCB0eXBlCi0gICBUWVBFLCBzaG91bGQgYmUgc29ydGVkIGludG8gaW4g dGhlIFBDSC4gIFN0cmluZ3Mgd2lsbCBoYXZlCi0gICBJU19TVFJJTkcgc2V0 IGFuZCBUWVBFIHdpbGwgYmUgZ3RfdHlwZXNfZW51bV9sYXN0LiAgT3RoZXIg b2JqZWN0cwotICAgb2YgdW5rbm93biB0eXBlIHdpbGwgYWxzbyBoYXZlIFRZ UEUgZXF1YWwgdG8gZ3RfdHlwZXNfZW51bV9sYXN0LiAgKi8KLQotc3RhdGlj IGludAotcGNoX2J1Y2tldCAodm9pZCAqeCwgZW51bSBndF90eXBlc19lbnVt IHR5cGUsCi0JICAgIGJvb2wgaXNfc3RyaW5nKQotewotICAvKiBTb3J0IGlk ZW50aWZpZXJzIGludG8gdGhlaXIgb3duIGJ1Y2tldCwgdG8gaW1wcm92ZSBs b2NhbGl0eQotICAgICB3aGVuIHNlYXJjaGluZyB0aGUgaWRlbnRpZmllciBo YXNoIHRhYmxlLiAgKi8KLSAgaWYgKHR5cGUgPT0gZ3RfZ2djX2VfMTRsYW5n X3RyZWVfbm9kZQotICAgICAgJiYgVFJFRV9DT0RFICgodHJlZSkgeCkgPT0g SURFTlRJRklFUl9OT0RFKQotICAgIHJldHVybiBJREVOVElGSUVSX0JVQ0tF VDsKLSAgZWxzZSBpZiAodHlwZSA9PSBndF90eXBlc19lbnVtX2xhc3QpCi0g ICAgewotICAgICAgaWYgKGlzX3N0cmluZykKLQlyZXR1cm4gU1RSSU5HX0JV Q0tFVDsKLSAgICAgIHJldHVybiBPVEhFUl9CVUNLRVQ7Ci0gICAgfQotICBy ZXR1cm4gdHlwZTsKLX0KLQotLyogQWRkIHRoZSBzaXplIG9mIG9iamVjdCBY IHRvIHRoZSBzaXplIG9mIHRoZSBQQ0ggZGF0YS4gICovCi0KLXZvaWQKLWdn Y19wY2hfY291bnRfb2JqZWN0IChzdHJ1Y3QgZ2djX3BjaF9kYXRhICpkLCB2 b2lkICp4IEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgIHNpemVfdCBzaXpl LCBib29sIGlzX3N0cmluZywgZW51bSBndF90eXBlc19lbnVtIHR5cGUpCi17 Ci0gIC8qIE5PVEU6IFJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIHRvIGFsaWdu IHVwIHRoZSBzaXplIG9mIGFueSBvYmplY3RzLgotICAgICBTdHJpbmdzIGNh biBiZSB1bmFsaWduZWQsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgYWxsb2Nh dGVkIHRvIGEKLSAgICAgTUFYX0FMSUdOTUVOVCBib3VuZGFyeSBhbHJlYWR5 LiAgKi8KLQotICBkLT5kLnR5cGVfdG90YWxzW3BjaF9idWNrZXQgKHgsIHR5 cGUsIGlzX3N0cmluZyldICs9IHNpemU7Ci19Ci0KLS8qIFJldHVybiB0aGUg dG90YWwgc2l6ZSBvZiB0aGUgUENIIGRhdGEuICAqLwotCi1zaXplX3QKLWdn Y19wY2hfdG90YWxfc2l6ZSAoc3RydWN0IGdnY19wY2hfZGF0YSAqZCkKLXsK LSAgaW50IGk7Ci0gIHNpemVfdCBhbGxvY19zaXplLCB0b3RhbF9zaXplOwot Ci0gIHRvdGFsX3NpemUgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BD SF9CVUNLRVRTOyBpKyspCi0gICAgewotICAgICAgZC0+ZC50eXBlX3RvdGFs c1tpXSA9IFJPVU5EX1VQIChkLT5kLnR5cGVfdG90YWxzW2ldLCBHR0NfUEFH RV9TSVpFKTsKLSAgICAgIHRvdGFsX3NpemUgKz0gZC0+ZC50eXBlX3RvdGFs c1tpXTsKLSAgICB9Ci0gIGQtPmQudG90YWwgPSB0b3RhbF9zaXplOwotCi0g IC8qIEluY2x1ZGUgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gYml0bWFw LiAgKi8KLSAgYWxsb2Nfc2l6ZSA9IENFSUwgKGQtPmQudG90YWwsIEJZVEVT X1BFUl9BTExPQ19CSVQgKiA4KTsKLSAgYWxsb2Nfc2l6ZSA9IFJPVU5EX1VQ IChhbGxvY19zaXplLCBNQVhfQUxJR05NRU5UKTsKLSAgZC0+YWxsb2Nfc2l6 ZSA9IGFsbG9jX3NpemU7Ci0KLSAgcmV0dXJuIGQtPmQudG90YWwgKyBhbGxv Y19zaXplOwotfQotCi0vKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhl IG9iamVjdHMgaW4gdGhlIFBDSCBmaWxlLiAgKi8KLQotdm9pZAotZ2djX3Bj aF90aGlzX2Jhc2UgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKmQsIHZvaWQgKmJh c2VfKQotewotICBpbnQgaTsKLSAgc2l6ZV90IGJhc2UgPSAoc2l6ZV90KSBi YXNlXzsKLQotICBkLT5iYXNlID0gZC0+b3JpZ19iYXNlID0gYmFzZTsKLSAg Zm9yIChpID0gMDsgaSA8IE5VTV9QQ0hfQlVDS0VUUzsgaSsrKQotICAgIHsK LSAgICAgIGQtPnR5cGVfYmFzZXNbaV0gPSBiYXNlOwotICAgICAgYmFzZSAr PSBkLT5kLnR5cGVfdG90YWxzW2ldOwotICAgIH0KLQotICBpZiAoZC0+YWxs b2NfYml0cyA9PSBOVUxMKQotICAgIGQtPmFsbG9jX2JpdHMgPSBYQ05FV1ZB UiAoYWxsb2NfdHlwZSwgZC0+YWxsb2Nfc2l6ZSk7Ci19Ci0KLS8qIEFsbG9j YXRlIGEgcGxhY2UgZm9yIG9iamVjdCBYIG9mIHNpemUgU0laRSBpbiB0aGUg UENIIGZpbGUuICAqLwotCi1jaGFyICoKLWdnY19wY2hfYWxsb2Nfb2JqZWN0 IChzdHJ1Y3QgZ2djX3BjaF9kYXRhICpkLCB2b2lkICp4LAotCQkgICAgICBz aXplX3Qgc2l6ZSwgYm9vbCBpc19zdHJpbmcsCi0JCSAgICAgIGVudW0gZ3Rf dHlwZXNfZW51bSB0eXBlKQotewotICBzaXplX3QgYWxsb2Nfd29yZCwgYWxs b2NfYml0OwotICBjaGFyICpyZXN1bHQ7Ci0gIGludCBidWNrZXQgPSBwY2hf YnVja2V0ICh4LCB0eXBlLCBpc19zdHJpbmcpOwotCi0gIC8qIFJlY29yZCB0 aGUgc3RhcnQgb2YgdGhlIG9iamVjdCBpbiB0aGUgYWxsb2NhdGlvbiBiaXRt YXAuICBXZQotICAgICBjYW4ndCBhc3NlcnQgdGhhdCB0aGUgYWxsb2NhdGlv biBiaXQgaXMgcHJldmlvdXNseSBjbGVhciwgYmVjYXVzZQotICAgICBzdHJp bmdzIG1heSB2aW9sYXRlIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGV5IGFyZSBh dCBsZWFzdAotICAgICBCWVRFU19QRVJfQUxMT0NfQklUIGxvbmcuICBUaGlz IGlzIGhhcm1sZXNzIC0gZ2djX2dldF9zaXplCi0gICAgIHNob3VsZCBub3Qg YmUgY2FsbGVkIGZvciBzdHJpbmdzLiAgKi8KLSAgYWxsb2Nfd29yZCA9ICgo ZC0+dHlwZV9iYXNlc1tidWNrZXRdIC0gZC0+b3JpZ19iYXNlKQotCQkvICg4 ICogc2l6ZW9mIChhbGxvY190eXBlKSAqIEJZVEVTX1BFUl9BTExPQ19CSVQp KTsKLSAgYWxsb2NfYml0ID0gKChkLT50eXBlX2Jhc2VzW2J1Y2tldF0gLSBk LT5vcmlnX2Jhc2UpCi0JICAgICAgIC8gQllURVNfUEVSX0FMTE9DX0JJVCkg JSAoOCAqIHNpemVvZiAoYWxsb2NfdHlwZSkpOwotICBkLT5hbGxvY19iaXRz W2FsbG9jX3dvcmRdIHw9IDFMIDw8IGFsbG9jX2JpdDsKLQotICAvKiBQbGFj ZSB0aGUgb2JqZWN0IGF0IHRoZSBjdXJyZW50IHBvaW50ZXIgZm9yIHRoaXMg YnVja2V0LiAgKi8KLSAgcmVzdWx0ID0gKGNoYXIgKikgZC0+dHlwZV9iYXNl c1tidWNrZXRdOwotICBkLT50eXBlX2Jhc2VzW2J1Y2tldF0gKz0gc2l6ZTsK LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogUHJlcGFyZSB0byB3cml0ZSBv dXQgdGhlIFBDSCBkYXRhIHRvIGZpbGUgRi4gICovCi0KLXZvaWQKLWdnY19w Y2hfcHJlcGFyZV93cml0ZSAoc3RydWN0IGdnY19wY2hfZGF0YSAqZCwKLQkJ ICAgICAgIEZJTEUgKmYpCi17Ci0gIC8qIFdlIHNlZWsgYXJvdW5kIGEgbG90 IHdoaWxlIHdyaXRpbmcuICBSZWNvcmQgd2hlcmUgdGhlIGVuZAotICAgICBv ZiB0aGUgcGFkZGluZyBpbiB0aGUgUENIIGZpbGUgaXMsIHNvIHRoYXQgd2Ug Y2FuCi0gICAgIGxvY2F0ZSBlYWNoIG9iamVjdCdzIG9mZnNldC4gICovCi0g IGQtPnN0YXJ0X29mZnNldCA9IGZ0ZWxsIChmKTsKLX0KLQotLyogV3JpdGUg b3V0IG9iamVjdCBYIG9mIFNJWkUgdG8gZmlsZSBGLiAgKi8KLQotdm9pZAot Z2djX3BjaF93cml0ZV9vYmplY3QgKHN0cnVjdCBnZ2NfcGNoX2RhdGEgKmQs Ci0JCSAgICAgIEZJTEUgKmYsIHZvaWQgKngsIHZvaWQgKm5ld3gsCi0JCSAg ICAgIHNpemVfdCBzaXplLCBib29sIGlzX3N0cmluZyBBVFRSSUJVVEVfVU5V U0VEKQotewotICBpZiAoZnNlZWsgKGYsIChzaXplX3QpIG5ld3ggLSBkLT5v cmlnX2Jhc2UgKyBkLT5zdGFydF9vZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQot ICAgIGZhdGFsX2Vycm9yICgiY2FuJSd0IHNlZWsgUENIIGZpbGU6ICVtIik7 Ci0KLSAgaWYgKGZ3cml0ZSAoeCwgc2l6ZSwgMSwgZikgIT0gMSkKLSAgICBm YXRhbF9lcnJvciAoImNhbiUndCB3cml0ZSBQQ0ggZmlsZTogJW0iKTsKLX0K LQotdm9pZAotZ2djX3BjaF9maW5pc2ggKHN0cnVjdCBnZ2NfcGNoX2RhdGEg KmQsIEZJTEUgKmYpCi17Ci0gIC8qIFdyaXRlIG91dCB0aGUgYWxsb2NhdGlv biBiaXRtYXAuICAqLwotICBpZiAoZnNlZWsgKGYsIGQtPnN0YXJ0X29mZnNl dCArIGQtPmQudG90YWwsIFNFRUtfU0VUKSAhPSAwKQotICAgIGZhdGFsX2Vy cm9yICgiY2FuJSd0IHNlZWsgUENIIGZpbGU6ICVtIik7Ci0KLSAgaWYgKGZ3 cml0ZSAoZC0+YWxsb2NfYml0cywgZC0+YWxsb2Nfc2l6ZSwgMSwgZikgIT0g MSkKLSAgICBmYXRhbF9lcnJvciAoImNhbiUndCB3cml0ZSBQQ0ggZmlsZTog JW0iKTsKLQotICAvKiBEb25lIHdpdGggdGhlIFBDSCwgc28gd3JpdGUgb3V0 IG91ciBmb290ZXIuICAqLwotICBpZiAoZndyaXRlICgmZC0+ZCwgc2l6ZW9m IChkLT5kKSwgMSwgZikgIT0gMSkKLSAgICBmYXRhbF9lcnJvciAoImNhbiUn dCB3cml0ZSBQQ0ggZmlsZTogJW0iKTsKLQotICBmcmVlIChkLT5hbGxvY19i aXRzKTsKLSAgZnJlZSAoZCk7Ci19Ci0KLS8qIFRoZSBQQ0ggZmlsZSBmcm9t IEYgaGFzIGJlZW4gbWFwcGVkIGF0IEFERFIuICBSZWFkIGluIGFueQotICAg YWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIGZpbGUgYW5kIHNldCB1cCB0aGUg R0Mgc3RhdGUuICAqLwotCi12b2lkCi1nZ2NfcGNoX3JlYWQgKEZJTEUgKmYs IHZvaWQgKmFkZHIpCi17Ci0gIHN0cnVjdCBnZ2NfcGNoX29uZGlzayBkOwot ICBzaXplX3QgYWxsb2Nfc2l6ZTsKLSAgc3RydWN0IGFsbG9jX3pvbmUgKnpv bmU7Ci0gIHN0cnVjdCBwYWdlX2VudHJ5ICpwY2hfcGFnZTsKLSAgY2hhciAq cDsKLQotICBpZiAoZnJlYWQgKCZkLCBzaXplb2YgKGQpLCAxLCBmKSAhPSAx KQotICAgIGZhdGFsX2Vycm9yICgiY2FuJSd0IHJlYWQgUENIIGZpbGU6ICVt Iik7Ci0KLSAgYWxsb2Nfc2l6ZSA9IENFSUwgKGQudG90YWwsIEJZVEVTX1BF Ul9BTExPQ19CSVQgKiA4KTsKLSAgYWxsb2Nfc2l6ZSA9IFJPVU5EX1VQIChh bGxvY19zaXplLCBNQVhfQUxJR05NRU5UKTsKLQotICBwY2hfem9uZS5ieXRl cyA9IGQudG90YWw7Ci0gIHBjaF96b25lLmFsbG9jX2JpdHMgPSAoYWxsb2Nf dHlwZSAqKSAoKGNoYXIgKikgYWRkciArIHBjaF96b25lLmJ5dGVzKTsKLSAg cGNoX3pvbmUucGFnZSA9IChjaGFyICopIGFkZHI7Ci0gIHBjaF96b25lLmVu ZCA9IChjaGFyICopIHBjaF96b25lLmFsbG9jX2JpdHM7Ci0KLSAgaWYgKEdB VEhFUl9TVEFUSVNUSUNTKQotICAgIHsKLSAgICAgIC8qIFdlJ3ZlIGp1c3Qg cmVhZCBpbiBhIFBDSCBmaWxlLiAgU28sIGV2ZXJ5IG9iamVjdCB0aGF0IHVz ZWQgdG8gYmUKLQkgYWxsb2NhdGVkIGlzIG5vdyBmcmVlLiAgKi8KLSAgICAg IHpvbmVfYWxsb2NhdGVfbWFya3MgKCk7Ci0gICAgICBnZ2NfcHJ1bmVfb3Zl cmhlYWRfbGlzdCAoKTsKLSAgICAgIHpvbmVfZnJlZV9tYXJrcyAoKTsKLSAg ICB9Ci0KLSAgZm9yICh6b25lID0gRy56b25lczsgem9uZTsgem9uZSA9IHpv bmUtPm5leHRfem9uZSkKLSAgICB7Ci0gICAgICBzdHJ1Y3Qgc21hbGxfcGFn ZV9lbnRyeSAqcGFnZSwgKm5leHRfcGFnZTsKLSAgICAgIHN0cnVjdCBsYXJn ZV9wYWdlX2VudHJ5ICpsYXJnZV9wYWdlLCAqbmV4dF9sYXJnZV9wYWdlOwot Ci0gICAgICB6b25lLT5hbGxvY2F0ZWQgPSAwOwotCi0gICAgICAvKiBDbGVh ciB0aGUgem9uZSdzIGZyZWUgY2h1bmsgbGlzdC4gICovCi0gICAgICBtZW1z ZXQgKHpvbmUtPmZyZWVfY2h1bmtzLCAwLCBzaXplb2YgKHpvbmUtPmZyZWVf Y2h1bmtzKSk7Ci0gICAgICB6b25lLT5oaWdoX2ZyZWVfYmluID0gMDsKLSAg ICAgIHpvbmUtPmNhY2hlZF9mcmVlID0gTlVMTDsKLSAgICAgIHpvbmUtPmNh Y2hlZF9mcmVlX3NpemUgPSAwOwotCi0gICAgICAvKiBNb3ZlIGFsbCB0aGUg c21hbGwgcGFnZXMgb250byB0aGUgZnJlZSBsaXN0LiAgKi8KLSAgICAgIGZv ciAocGFnZSA9IHpvbmUtPnBhZ2VzOyBwYWdlICE9IE5VTEw7IHBhZ2UgPSBu ZXh0X3BhZ2UpCi0JewotCSAgbmV4dF9wYWdlID0gcGFnZS0+bmV4dDsKLQkg IG1lbXNldCAocGFnZS0+YWxsb2NfYml0cywgMCwKLQkJICBHLnNtYWxsX3Bh Z2Vfb3ZlcmhlYWQgLSBQQUdFX09WRVJIRUFEKTsKLQkgIGZyZWVfc21hbGxf cGFnZSAocGFnZSk7Ci0JfQotCi0gICAgICAvKiBEaXNjYXJkIGFsbCB0aGUg bGFyZ2UgcGFnZXMuICAqLwotICAgICAgZm9yIChsYXJnZV9wYWdlID0gem9u ZS0+bGFyZ2VfcGFnZXM7IGxhcmdlX3BhZ2UgIT0gTlVMTDsKLQkgICBsYXJn ZV9wYWdlID0gbmV4dF9sYXJnZV9wYWdlKQotCXsKLQkgIG5leHRfbGFyZ2Vf cGFnZSA9IGxhcmdlX3BhZ2UtPm5leHQ7Ci0JICBmcmVlX2xhcmdlX3BhZ2Ug KGxhcmdlX3BhZ2UpOwotCX0KLQotICAgICAgem9uZS0+cGFnZXMgPSBOVUxM OwotICAgICAgem9uZS0+bGFyZ2VfcGFnZXMgPSBOVUxMOwotICAgIH0KLQot ICAvKiBBbGxvY2F0ZSB0aGUgZHVtbXkgcGFnZSBlbnRyeSBmb3IgdGhlIFBD SCwgYW5kIHNldCBhbGwgcGFnZXMKLSAgICAgbWFwcGVkIGludG8gdGhlIFBD SCB0byByZWZlcmVuY2UgaXQuICAqLwotICBwY2hfcGFnZSA9IFhDTkVXIChz dHJ1Y3QgcGFnZV9lbnRyeSk7Ci0gIHBjaF9wYWdlLT5wYWdlID0gcGNoX3pv bmUucGFnZTsKLSAgcGNoX3BhZ2UtPnBjaF9wID0gdHJ1ZTsKLQotICBmb3Ig KHAgPSBwY2hfem9uZS5wYWdlOyBwIDwgcGNoX3pvbmUuZW5kOyBwICs9IEdH Q19QQUdFX1NJWkUpCi0gICAgc2V0X3BhZ2VfdGFibGVfZW50cnkgKHAsIHBj aF9wYWdlKTsKLX0KZGlmZiAtLWdpdCBhL2djYy9nZ2MuaCBiL2djYy9nZ2Mu aAppbmRleCA0YzQyNGNhLi5iMzFiYzgwIDEwMDY0NAotLS0gYS9nY2MvZ2dj LmgKKysrIGIvZ2NjL2dnYy5oCkBAIC00OCw4ICs0OCw3IEBAIHR5cGVkZWYg dm9pZCAoKmd0X2hhbmRsZV9yZW9yZGVyKSAodm9pZCAqLCB2b2lkICosIGd0 X3BvaW50ZXJfb3BlcmF0b3IsCiAJCQkJICAgdm9pZCAqKTsKIAogLyogVXNl ZCBieSB0aGUgZ3RfcGNoX25fKiByb3V0aW5lcy4gIFJlZ2lzdGVyIGFuIG9i amVjdCBpbiB0aGUgaGFzaCB0YWJsZS4gICovCi1leHRlcm4gaW50IGd0X3Bj aF9ub3RlX29iamVjdCAodm9pZCAqLCB2b2lkICosIGd0X25vdGVfcG9pbnRl cnMsCi0JCQkgICAgICAgZW51bSBndF90eXBlc19lbnVtID0gZ3RfdHlwZXNf ZW51bV9sYXN0KTsKK2V4dGVybiBpbnQgZ3RfcGNoX25vdGVfb2JqZWN0ICh2 b2lkICosIHZvaWQgKiwgZ3Rfbm90ZV9wb2ludGVycyk7CiAKIC8qIFVzZWQg YnkgdGhlIGd0X3BjaF9uXyogcm91dGluZXMuICBSZWdpc3RlciB0aGF0IGFu IG9iamVjdCBoYXMgYSByZW9yZGVyCiAgICBmdW5jdGlvbi4gICovCkBAIC0x MTgsOCArMTE3LDYgQEAgZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUyAoY29uc3Qg dm9pZCAqKTsKIAogLyogRW5kIG9mIEdUWSBtYWNoaW5lcnkgQVBJLiAgKi8K IAotc3RydWN0IGFsbG9jX3pvbmU7Ci0KIC8qIEluaXRpYWxpemUgdGhlIHN0 cmluZyBwb29sLiAgKi8KIGV4dGVybiB2b2lkIGluaXRfc3RyaW5ncG9vbCAo dm9pZCk7CiAKQEAgLTE0NiwxMiArMTQzLDYgQEAgZXh0ZXJuIHNpemVfdCBn Z2Nfcm91bmRfYWxsb2Nfc2l6ZSAoc2l6ZV90IHJlcXVlc3RlZF9zaXplKTsK IAogI2RlZmluZSBnZ2NfaW50ZXJuYWxfYWxsb2MocykgZ2djX2ludGVybmFs X2FsbG9jX3N0YXQgKHMgTUVNX1NUQVRfSU5GTykKIAotLyogQWxsb2NhdGUg YW4gb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBhbmQgc2l6ZS4gICov Ci1leHRlcm4gdm9pZCAqZ2djX2FsbG9jX3R5cGVkX3N0YXQgKGVudW0gZ3Rf dHlwZXNfZW51bSwgc2l6ZV90IE1FTV9TVEFUX0RFQ0wpCi0gIEFUVFJJQlVU RV9NQUxMT0M7Ci0KLSNkZWZpbmUgZ2djX2FsbG9jX3R5cGVkKHMsIHopIGdn Y19hbGxvY190eXBlZF9zdGF0IChzLCB6IE1FTV9TVEFUX0lORk8pCi0KIC8q IEFsbG9jYXRlcyBjbGVhcmVkIG1lbW9yeS4gICovCiBleHRlcm4gdm9pZCAq Z2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZV90IE1FTV9T VEFUX0RFQ0wpCiAgIEFUVFJJQlVURV9NQUxMT0M7CkBAIC0yMTMsNyArMjA0 LDcgQEAgZXh0ZXJuIHZvaWQgKmdnY19jbGVhcmVkX2FsbG9jX3B0cl9hcnJh eV90d29fYXJncyAoc2l6ZV90LCBzaXplX3QpCiAgIHNwbGF5X3RyZWVfbmV3 X3R5cGVkX2FsbG9jIChDT01QQVJFLCBOVUxMLCBOVUxMLCAmQUxMT0NfVFJF RSwgJkFMTE9DX05PREUsIFwKIAkJCSAgICAgICZnZ2Nfc3BsYXlfZG9udF9m cmVlLCBOVUxMKQogCi1leHRlcm4gdm9pZCAqZ2djX3NwbGF5X2FsbG9jIChl bnVtIGd0X3R5cGVzX2VudW0sIGludCwgdm9pZCAqKQorZXh0ZXJuIHZvaWQg KmdnY19zcGxheV9hbGxvYyAoaW50LCB2b2lkICopCiAgIEFUVFJJQlVURV9N QUxMT0M7CiAKIGV4dGVybiB2b2lkIGdnY19zcGxheV9kb250X2ZyZWUgKHZv aWQgKiwgdm9pZCAqKTsKQEAgLTI1NCw5OSArMjQ1LDI4IEBAIGV4dGVybiB2 b2lkIHN0cmluZ3Bvb2xfc3RhdGlzdGljcyAodm9pZCk7CiAvKiBIZXVyaXN0 aWNzLiAgKi8KIGV4dGVybiB2b2lkIGluaXRfZ2djX2hldXJpc3RpY3MgKHZv aWQpOwogCi0vKiBab25lIGNvbGxlY3Rpb24uICAqLwotCi0vKiBGb3IgcmVn dWxhciBydGwgYWxsb2NhdGlvbnMuICAqLwotZXh0ZXJuIHN0cnVjdCBhbGxv Y196b25lIHJ0bF96b25lOwotCi0vKiBGb3IgcmVndWxhciB0cmVlIGFsbG9j YXRpb25zLiAgKi8KLWV4dGVybiBzdHJ1Y3QgYWxsb2Nfem9uZSB0cmVlX3pv bmU7Ci0KLS8qIEZvciBJREVOVElGSUVSX05PREUgYWxsb2NhdGlvbnMuICAq LwotZXh0ZXJuIHN0cnVjdCBhbGxvY196b25lIHRyZWVfaWRfem9uZTsKLQot I2RlZmluZSBnZ2NfYWxsb2NfcnR2ZWNfc2l6ZWQoTkVMVCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnZ2NfYWxsb2Nfem9u ZV9ydHZlY19kZWYgKHNpemVvZiAoc3RydWN0IHJ0dmVjX2RlZikJCQlcCi0J CQkgICAgKyAoKE5FTFQpIC0gMSkgKiBzaXplb2YgKHJ0eCksCQlcCi0JCQkg ICAgJnJ0bF96b25lKQotCi0jaWYgZGVmaW5lZCAoR0dDX1pPTkUpICYmICFk ZWZpbmVkIChHRU5FUkFUT1JfRklMRSkKLQotLyogQWxsb2NhdGUgYW4gb2Jq ZWN0IGludG8gdGhlIHNwZWNpZmllZCBhbGxvY2F0aW9uIHpvbmUuICAqLwot ZXh0ZXJuIHZvaWQgKmdnY19pbnRlcm5hbF9hbGxvY196b25lX3N0YXQgKHNp emVfdCwKLQkJCQkJICBzdHJ1Y3QgYWxsb2Nfem9uZSAqIE1FTV9TVEFUX0RF Q0wpCi0gIEFUVFJJQlVURV9NQUxMT0M7Ci0KLWV4dGVybiB2b2lkICpnZ2Nf aW50ZXJuYWxfY2xlYXJlZF9hbGxvY196b25lX3N0YXQgKHNpemVfdCwKLQkJ CQkJICBzdHJ1Y3QgYWxsb2Nfem9uZSAqIE1FTV9TVEFUX0RFQ0wpCi0gIEFU VFJJQlVURV9NQUxMT0M7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1nZ2Nf aW50ZXJuYWxfem9uZV9hbGxvY19zdGF0IChzdHJ1Y3QgYWxsb2Nfem9uZSAq IHosIHNpemVfdCBzIE1FTV9TVEFUX0RFQ0wpCi17Ci0gICAgcmV0dXJuIGdn Y19pbnRlcm5hbF9hbGxvY196b25lX3N0YXQgKHMsIHogUEFTU19NRU1fU1RB VCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1nZ2NfaW50ZXJuYWxf em9uZV9jbGVhcmVkX2FsbG9jX3N0YXQgKHN0cnVjdCBhbGxvY196b25lICog eiwgc2l6ZV90IHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTUVNX1NUQVRfREVDTCkKLXsKLSAgICByZXR1cm4gZ2djX2ludGVy bmFsX2NsZWFyZWRfYWxsb2Nfem9uZV9zdGF0IChzLCB6IFBBU1NfTUVNX1NU QVQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotZ2djX2ludGVybmFs X3pvbmVfdmVjX2FsbG9jX3N0YXQgKHN0cnVjdCBhbGxvY196b25lICogeiwg c2l6ZV90IHMsIHNpemVfdCBuCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTUVNX1NUQVRfREVDTCkKLXsKLSAgICByZXR1cm4gZ2djX2lu dGVybmFsX2FsbG9jX3pvbmVfc3RhdCAocyAqIG4sIHogUEFTU19NRU1fU1RB VCk7Ci19Ci0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkICoKLWdn Y19pbnRlcm5hbF96b25lX2FsbG9jX3N0YXQgKHN0cnVjdCBhbGxvY196b25l ICogeiBBVFRSSUJVVEVfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHMgTUVNX1NUQVRfREVDTCkKLXsKLSAgICByZXR1 cm4gZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHMgUEFTU19NRU1fU1RBVCk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1nZ2NfaW50ZXJuYWxfem9u ZV9jbGVhcmVkX2FsbG9jX3N0YXQgKHN0cnVjdCBhbGxvY196b25lICogeiBB VFRSSUJVVEVfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgcyBNRU1fU1RBVF9ERUNMKQotewotICAgIHJl dHVybiBnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzIFBBU1Nf TUVNX1NUQVQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotZ2djX2lu dGVybmFsX3pvbmVfdmVjX2FsbG9jX3N0YXQgKHN0cnVjdCBhbGxvY196b25l ICogeiBBVFRSSUJVVEVfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBzLCBzaXplX3QgbiBNRU1fU1RBVF9ERUNM KQotewotICAgIHJldHVybiBnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQg KHMsIG4gUEFTU19NRU1fU1RBVCk7Ci19Ci0KLSNlbmRpZgorI2RlZmluZSBn Z2NfYWxsb2NfcnR2ZWNfc2l6ZWQoTkVMVCkJCQkJXAorICBnZ2NfYWxsb2Nf cnR2ZWNfZGVmIChzaXplb2YgKHN0cnVjdCBydHZlY19kZWYpCQlcCisJCSAg ICAgICArICgoTkVMVCkgLSAxKSAqIHNpemVvZiAocnR4KSkJCVwKIAogLyog TWVtb3J5IHN0YXRpc3RpY3MgcGFzc2luZyB2ZXJzaW9ucyBvZiBzb21lIGFs bG9jYXRvcnMuICBUb28gZmV3IG9mIHRoZW0gdG8KICAgIG1ha2UgZ2VuZ3R5 cGUgcHJvZHVjZSB0aGVtLCBzbyBqdXN0IGRlZmluZSB0aGUgbmVlZGVkIG9u ZXMgaGVyZS4gICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydHhfZGVmICoK LWdnY19hbGxvY196b25lX3J0eF9kZWZfc3RhdCAoc3RydWN0IGFsbG9jX3pv bmUgKiB6LCBzaXplX3QgcyBNRU1fU1RBVF9ERUNMKQorZ2djX2FsbG9jX3J0 eF9kZWZfc3RhdCAoc2l6ZV90IHMgTUVNX1NUQVRfREVDTCkKIHsKLSAgcmV0 dXJuIChzdHJ1Y3QgcnR4X2RlZiAqKSBnZ2NfaW50ZXJuYWxfem9uZV9hbGxv Y19zdGF0ICh6LCBzIFBBU1NfTUVNX1NUQVQpOworICByZXR1cm4gKHN0cnVj dCBydHhfZGVmICopIGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzIFBBU1Nf TUVNX1NUQVQpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuaW9uIHRyZWVfbm9k ZSAqCi1nZ2NfYWxsb2Nfem9uZV90cmVlX25vZGVfc3RhdCAoc3RydWN0IGFs bG9jX3pvbmUgKiB6LCBzaXplX3QgcyBNRU1fU1RBVF9ERUNMKQorZ2djX2Fs bG9jX3RyZWVfbm9kZV9zdGF0IChzaXplX3QgcyBNRU1fU1RBVF9ERUNMKQog ewotICByZXR1cm4gKHVuaW9uIHRyZWVfbm9kZSAqKSBnZ2NfaW50ZXJuYWxf em9uZV9hbGxvY19zdGF0ICh6LCBzIFBBU1NfTUVNX1NUQVQpOworICByZXR1 cm4gKHVuaW9uIHRyZWVfbm9kZSAqKSBnZ2NfaW50ZXJuYWxfYWxsb2Nfc3Rh dCAocyBQQVNTX01FTV9TVEFUKTsKIH0KIAogc3RhdGljIGlubGluZSB1bmlv biB0cmVlX25vZGUgKgotZ2djX2FsbG9jX3pvbmVfY2xlYXJlZF90cmVlX25v ZGVfc3RhdCAoc3RydWN0IGFsbG9jX3pvbmUgKiB6LCBzaXplX3QgcwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1NUQVRf REVDTCkKK2dnY19hbGxvY19jbGVhcmVkX3RyZWVfbm9kZV9zdGF0IChzaXpl X3QgcyBNRU1fU1RBVF9ERUNMKQogewotICByZXR1cm4gKHVuaW9uIHRyZWVf bm9kZSAqKQotICAgIGdnY19pbnRlcm5hbF96b25lX2NsZWFyZWRfYWxsb2Nf c3RhdCAoeiwgcyBQQVNTX01FTV9TVEFUKTsKKyAgcmV0dXJuICh1bmlvbiB0 cmVlX25vZGUgKikgZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAo cyBQQVNTX01FTV9TVEFUKTsKIH0KIAogc3RhdGljIGlubGluZSB1bmlvbiBn aW1wbGVfc3RhdGVtZW50X2QgKgpkaWZmIC0tZ2l0IGEvZ2NjL3J0bC5jIGIv Z2NjL3J0bC5jCmluZGV4IDM4YzQ2ZmEuLmJjNDlmYzggMTAwNjQ0Ci0tLSBh L2djYy9ydGwuYworKysgYi9nY2MvcnRsLmMKQEAgLTE5Miw4ICsxOTIsNyBA QCBydHhfc2l6ZSAoY29uc3RfcnR4IHgpCiBydHgKIHJ0eF9hbGxvY19zdGF0 IChSVFhfQ09ERSBjb2RlIE1FTV9TVEFUX0RFQ0wpCiB7Ci0gIHJ0eCBydCA9 IGdnY19hbGxvY196b25lX3J0eF9kZWZfc3RhdCAoJnJ0bF96b25lLCBSVFhf Q09ERV9TSVpFIChjb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBBU1NfTUVNX1NUQVQpOworICBydHggcnQgPSBnZ2Nf YWxsb2NfcnR4X2RlZl9zdGF0IChSVFhfQ09ERV9TSVpFIChjb2RlKSBQQVNT X01FTV9TVEFUKTsKIAogICAvKiBXZSB3YW50IHRvIGNsZWFyIGV2ZXJ5dGhp bmcgdXAgdG8gdGhlIEZMRCBhcnJheS4gIE5vcm1hbGx5LCB0aGlzCiAgICAg IGlzIG9uZSBpbnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFzc3VtZSB0aGF0 IGFuZCBpdCBpc24ndCB2ZXJ5CkBAIC0zMjksNyArMzI4LDcgQEAgcnR4CiBz aGFsbG93X2NvcHlfcnR4X3N0YXQgKGNvbnN0X3J0eCBvcmlnIE1FTV9TVEFU X0RFQ0wpCiB7CiAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplID0gcnR4X3Np emUgKG9yaWcpOwotICBydHggY29uc3QgY29weSA9IGdnY19hbGxvY196b25l X3J0eF9kZWZfc3RhdCAoJnJ0bF96b25lLCBzaXplIFBBU1NfTUVNX1NUQVQp OworICBydHggY29uc3QgY29weSA9IGdnY19hbGxvY19ydHhfZGVmX3N0YXQg KHNpemUgUEFTU19NRU1fU1RBVCk7CiAgIHJldHVybiAocnR4KSBtZW1jcHkg KGNvcHksIG9yaWcsIHNpemUpOwogfQogDApkaWZmIC0tZ2l0IGEvZ2NjL3N0 cmluZ3Bvb2wuYyBiL2djYy9zdHJpbmdwb29sLmMKaW5kZXggNTkxNDFlOS4u ZjRkMGRhZSAxMDA2NDQKLS0tIGEvZ2NjL3N0cmluZ3Bvb2wuYworKysgYi9n Y2Mvc3RyaW5ncG9vbC5jCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZAogZ3Rf cGNoX25fUyAoY29uc3Qgdm9pZCAqeCkKIHsKICAgZ3RfcGNoX25vdGVfb2Jq ZWN0IChDT05TVF9DQVNUICh2b2lkICosIHgpLCBDT05TVF9DQVNUICh2b2lk ICosIHgpLAotCQkgICAgICAmZ3RfcGNoX3BfUywgZ3RfdHlwZXNfZW51bV9s YXN0KTsKKwkJICAgICAgJmd0X3BjaF9wX1MpOwogfQogCiAKZGlmZiAtLWdp dCBhL2djYy90cmVlLXBoaW5vZGVzLmMgYi9nY2MvdHJlZS1waGlub2Rlcy5j CmluZGV4IDAzYTIwZmEuLjQ0OTk3NTMgMTAwNjQ0Ci0tLSBhL2djYy90cmVl LXBoaW5vZGVzLmMKKysrIGIvZ2NjL3RyZWUtcGhpbm9kZXMuYwpAQCAtNDIs MTAgKzQyLDYgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKICAgIGdhcmJhZ2UgY29sbGVjdG9yLiAgU2lt aWxhciByZXN1bHRzIGhhdmUgYmVlbiBzZWVuIG9uIGEgd2lkZXIgdmFyaWV0 eQogICAgb2YgdGVzdHMgKHN1Y2ggYXMgdGhlIGNvbXBpbGVyIGl0c2VsZiku CiAKLSAgIFdlIGNvdWxkIGFsc28gdXNlIGEgem9uZSBhbGxvY2F0b3IgZm9y IHRoZXNlIG9iamVjdHMgc2luY2UgdGhleSBoYXZlCi0gICBhIHZlcnkgd2Vs bCBkZWZpbmVkIGxpZmV0aW1lLiAgSWYgc29tZW9uZSB3YW50cyB0byBleHBl cmltZW50IHdpdGggdGhhdAotICAgdGhpcyBpcyB0aGUgcGxhY2UgdG8gdHJ5 IGl0LgotCiAgICBQSEkgbm9kZXMgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIHNv IHdlIGNhbid0IGhhdmUgYSBzaW5nbGUgbGlzdCBvZiBhbGwKICAgIHRoZSBQ SEkgbm9kZXMgYXMgaXQgd291bGQgYmUgdG9vIGV4cGVuc2l2ZSB0byB3YWxr IGRvd24gdGhhdCBsaXN0IHRvCiAgICBmaW5kIGEgUEhJIG9mIGEgc3VpdGFi bGUgc2l6ZS4KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYW5hbWVzLmMgYi9n Y2MvdHJlZS1zc2FuYW1lcy5jCmluZGV4IDNmMzVlNWQuLmJlMDc4Y2UgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLXNzYW5hbWVzLmMKKysrIGIvZ2NjL3RyZWUt c3NhbmFtZXMuYwpAQCAtNTAsMTEgKzUwLDggQEAgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICAgIEV4dGVy bmFsIGNvZGUgc2hvdWxkIGFsc28gbm90IGFzc3VtZSB0aGUgdmVyc2lvbiBu dW1iZXIgb24gbm9kZXMgaXMKICAgIG1vbm90b25pY2FsbHkgaW5jcmVhc2lu Zy4gIFdlIHJldXNlIHRoZSB2ZXJzaW9uIG51bWJlciB3aGVuIHdlCiAgICBy ZXVzZSBhbiBTU0FfTkFNRSBleHByZXNzaW9uLiAgVGhpcyBoZWxwcyBrZWVw IGFycmF5cyBhbmQgYml0bWFwcwotICAgbW9yZSBjb21wYWN0LgorICAgbW9y ZSBjb21wYWN0LiAgKi8KIAotICAgV2UgY291bGQgYWxzbyB1c2UgYSB6b25l IGFsbG9jYXRvciBmb3IgdGhlc2Ugb2JqZWN0cyBzaW5jZSB0aGV5IGhhdmUK LSAgIGEgdmVyeSB3ZWxsIGRlZmluZWQgbGlmZXRpbWUuICBJZiBzb21lb25l IHdhbnRzIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGF0Ci0gICB0aGlzIGlzIHRo ZSBwbGFjZSB0byB0cnkgaXQuICAqLwogCiAvKiBWZXJzaW9uIG51bWJlcnMg d2l0aCBzcGVjaWFsIG1lYW5pbmdzLiAgV2Ugc3RhcnQgYWxsb2NhdGluZyBu ZXcgdmVyc2lvbgogICAgbnVtYmVycyBhZnRlciB0aGUgc3BlY2lhbCBvbmVz LiAgKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLmMgYi9nY2MvdHJlZS5jCmlu ZGV4IDI1ZWZkN2YuLjk4YWQ1ZDggMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmMK KysrIGIvZ2NjL3RyZWUuYwpAQCAtODU3LDkgKzg1Nyw3IEBAIG1ha2Vfbm9k ZV9zdGF0IChlbnVtIHRyZWVfY29kZSBjb2RlIE1FTV9TVEFUX0RFQ0wpCiAK ICAgcmVjb3JkX25vZGVfYWxsb2NhdGlvbl9zdGF0aXN0aWNzIChjb2RlLCBs ZW5ndGgpOwogCi0gIHQgPSBnZ2NfYWxsb2Nfem9uZV9jbGVhcmVkX3RyZWVf bm9kZV9zdGF0ICgKLSAgICAgICAgICAgICAgIChjb2RlID09IElERU5USUZJ RVJfTk9ERSkgPyAmdHJlZV9pZF96b25lIDogJnRyZWVfem9uZSwKLSAgICAg ICAgICAgICAgIGxlbmd0aCBQQVNTX01FTV9TVEFUKTsKKyAgdCA9IGdnY19h bGxvY19jbGVhcmVkX3RyZWVfbm9kZV9zdGF0IChsZW5ndGggUEFTU19NRU1f U1RBVCk7CiAgIFRSRUVfU0VUX0NPREUgKHQsIGNvZGUpOwogCiAgIHN3aXRj aCAodHlwZSkKQEAgLTk1Myw3ICs5NTEsNyBAQCBjb3B5X25vZGVfc3RhdCAo dHJlZSBub2RlIE1FTV9TVEFUX0RFQ0wpCiAKICAgbGVuZ3RoID0gdHJlZV9z aXplIChub2RlKTsKICAgcmVjb3JkX25vZGVfYWxsb2NhdGlvbl9zdGF0aXN0 aWNzIChjb2RlLCBsZW5ndGgpOwotICB0ID0gZ2djX2FsbG9jX3pvbmVfdHJl ZV9ub2RlX3N0YXQgKCZ0cmVlX3pvbmUsIGxlbmd0aCBQQVNTX01FTV9TVEFU KTsKKyAgdCA9IGdnY19hbGxvY190cmVlX25vZGVfc3RhdCAobGVuZ3RoIFBB U1NfTUVNX1NUQVQpOwogICBtZW1jcHkgKHQsIG5vZGUsIGxlbmd0aCk7CiAK ICAgaWYgKENPREVfQ09OVEFJTlNfU1RSVUNUIChjb2RlLCBUU19DT01NT04p KQpAQCAtMTMxMSw3ICsxMzA5LDcgQEAgbWFrZV92ZWN0b3Jfc3RhdCAodW5z aWduZWQgbGVuIE1FTV9TVEFUX0RFQ0wpCiAKICAgcmVjb3JkX25vZGVfYWxs b2NhdGlvbl9zdGF0aXN0aWNzIChWRUNUT1JfQ1NULCBsZW5ndGgpOwogCi0g IHQgPSBnZ2NfYWxsb2Nfem9uZV9jbGVhcmVkX3RyZWVfbm9kZV9zdGF0ICgm dHJlZV96b25lLCBsZW5ndGggUEFTU19NRU1fU1RBVCk7CisgIHQgPSBnZ2Nf YWxsb2NfY2xlYXJlZF90cmVlX25vZGVfc3RhdCAobGVuZ3RoIFBBU1NfTUVN X1NUQVQpOwogCiAgIFRSRUVfU0VUX0NPREUgKHQsIFZFQ1RPUl9DU1QpOwog ICBUUkVFX0NPTlNUQU5UICh0KSA9IDE7CkBAIC0xNjc0LDcgKzE2NzIsNyBA QCBtYWtlX3RyZWVfYmluZm9fc3RhdCAodW5zaWduZWQgYmFzZV9iaW5mb3Mg TUVNX1NUQVRfREVDTCkKIAogICByZWNvcmRfbm9kZV9hbGxvY2F0aW9uX3N0 YXRpc3RpY3MgKFRSRUVfQklORk8sIGxlbmd0aCk7CiAKLSAgdCA9IGdnY19h bGxvY196b25lX3RyZWVfbm9kZV9zdGF0ICgmdHJlZV96b25lLCBsZW5ndGgg UEFTU19NRU1fU1RBVCk7CisgIHQgPSBnZ2NfYWxsb2NfdHJlZV9ub2RlX3N0 YXQgKGxlbmd0aCBQQVNTX01FTV9TVEFUKTsKIAogICBtZW1zZXQgKHQsIDAs IG9mZnNldG9mIChzdHJ1Y3QgdHJlZV9iaW5mbywgYmFzZV9iaW5mb3MpKTsK IApAQCAtMTcxMyw3ICsxNzExLDcgQEAgbWFrZV90cmVlX3ZlY19zdGF0IChp bnQgbGVuIE1FTV9TVEFUX0RFQ0wpCiAKICAgcmVjb3JkX25vZGVfYWxsb2Nh dGlvbl9zdGF0aXN0aWNzIChUUkVFX1ZFQywgbGVuZ3RoKTsKIAotICB0ID0g Z2djX2FsbG9jX3pvbmVfY2xlYXJlZF90cmVlX25vZGVfc3RhdCAoJnRyZWVf em9uZSwgbGVuZ3RoIFBBU1NfTUVNX1NUQVQpOworICB0ID0gZ2djX2FsbG9j X2NsZWFyZWRfdHJlZV9ub2RlX3N0YXQgKGxlbmd0aCBQQVNTX01FTV9TVEFU KTsKIAogICBUUkVFX1NFVF9DT0RFICh0LCBUUkVFX1ZFQyk7CiAgIFRSRUVf VkVDX0xFTkdUSCAodCkgPSBsZW47CkBAIC0yMzMwLDggKzIzMjgsNyBAQCB0 cmVlX2NvbnNfc3RhdCAodHJlZSBwdXJwb3NlLCB0cmVlIHZhbHVlLCB0cmVl IGNoYWluIE1FTV9TVEFUX0RFQ0wpCiB7CiAgIHRyZWUgbm9kZTsKIAotICBu b2RlID0gZ2djX2FsbG9jX3pvbmVfdHJlZV9ub2RlX3N0YXQgKCZ0cmVlX3pv bmUsIHNpemVvZiAoc3RydWN0IHRyZWVfbGlzdCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTX01FTV9TVEFUKTsKKyAg bm9kZSA9IGdnY19hbGxvY190cmVlX25vZGVfc3RhdCAoc2l6ZW9mIChzdHJ1 Y3QgdHJlZV9saXN0KSBQQVNTX01FTV9TVEFUKTsKICAgbWVtc2V0IChub2Rl LCAwLCBzaXplb2YgKHN0cnVjdCB0cmVlX2NvbW1vbikpOwogCiAgIHJlY29y ZF9ub2RlX2FsbG9jYXRpb25fc3RhdGlzdGljcyAoVFJFRV9MSVNULCBzaXpl b2YgKHN0cnVjdCB0cmVlX2xpc3QpKTsKQEAgLTM4MDAsNyArMzc5Nyw3IEBA IGJ1aWxkMV9zdGF0IChlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUs IHRyZWUgbm9kZSBNRU1fU1RBVF9ERUNMKQogCiAgIGdjY19hc3NlcnQgKFRS RUVfQ09ERV9MRU5HVEggKGNvZGUpID09IDEpOwogCi0gIHQgPSBnZ2NfYWxs b2Nfem9uZV90cmVlX25vZGVfc3RhdCAoJnRyZWVfem9uZSwgbGVuZ3RoIFBB U1NfTUVNX1NUQVQpOworICB0ID0gZ2djX2FsbG9jX3RyZWVfbm9kZV9zdGF0 IChsZW5ndGggUEFTU19NRU1fU1RBVCk7CiAKICAgbWVtc2V0ICh0LCAwLCBz aXplb2YgKHN0cnVjdCB0cmVlX2NvbW1vbikpOwogCkBAIC0xMDA3Myw3ICsx MDA3MCw3IEBAIGJ1aWxkX3ZsX2V4cF9zdGF0IChlbnVtIHRyZWVfY29kZSBj b2RlLCBpbnQgbGVuIE1FTV9TVEFUX0RFQ0wpCiAKICAgcmVjb3JkX25vZGVf YWxsb2NhdGlvbl9zdGF0aXN0aWNzIChjb2RlLCBsZW5ndGgpOwogCi0gIHQg PSBnZ2NfYWxsb2Nfem9uZV9jbGVhcmVkX3RyZWVfbm9kZV9zdGF0ICgmdHJl ZV96b25lLCBsZW5ndGggUEFTU19NRU1fU1RBVCk7CisgIHQgPSBnZ2NfYWxs b2NfY2xlYXJlZF90cmVlX25vZGVfc3RhdCAobGVuZ3RoIFBBU1NfTUVNX1NU QVQpOwogCiAgIFRSRUVfU0VUX0NPREUgKHQsIGNvZGUpOwogCmRpZmYgLS1n aXQgYS9nY2MvdmFyYXNtLmMgYi9nY2MvdmFyYXNtLmMKaW5kZXggMGIxODk0 ZC4uNmI5NDFiYSAxMDA2NDQKLS0tIGEvZ2NjL3ZhcmFzbS5jCisrKyBiL2dj Yy92YXJhc20uYwpAQCAtMzc0LDcgKzM3NCw3IEBAIGNyZWF0ZV9ibG9ja19z eW1ib2wgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3Qgb2JqZWN0X2Jsb2Nr ICpibG9jaywKIAogICAvKiBDcmVhdGUgdGhlIGV4dGVuZGVkIFNZTUJPTF9S RUYuICAqLwogICBzaXplID0gUlRYX0hEUl9TSVpFICsgc2l6ZW9mIChzdHJ1 Y3QgYmxvY2tfc3ltYm9sKTsKLSAgc3ltYm9sID0gZ2djX2FsbG9jX3pvbmVf cnR4X2RlZiAoc2l6ZSwgJnJ0bF96b25lKTsKKyAgc3ltYm9sID0gZ2djX2Fs bG9jX3J0eF9kZWYgKHNpemUpOwogCiAgIC8qIEluaXRpYWxpemUgdGhlIG5v cm1hbCBTWU1CT0xfUkVGIGZpZWxkcy4gICovCiAgIG1lbXNldCAoc3ltYm9s LCAwLCBzaXplKTsKLS0gCjEuOC4xCgo= --047d7b6042f02f294a04d40a46d2--