From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=207.46.229.174 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793242027; b=eYRZqpSjTTIbMLxOqjJ415w8eVXJpL5aUfEDOpf4TE6GDkyIo+nwwlzHHSZtUsfparVS TcHZhsW0rTPWXwgyxhsr4B1oKzgDOIntcoQX5MkFGPDnmpQzQ4U8g2Hp2+TuYI2T+pQUs vcjdLReoG/caUV9sw5FHUc9Vbj8DyBKoy8nlKWwSNAzvSFkVPOpK0c8AgeJe9SjZHYO81 Q5TkqWNwAQAGP+mzs7xD97xhFaxXQLaDARE5t3Y+qUFxcK9pP8O0TMmQgP6ZqRvz9Qjib APYvol5kGAcuyI0enH9LMNHlqdha7Od12O8JS12Bp4eiTwiPPfOGq1dhGLQcIDzawDA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793242027; h=DMARC-Filter:Received:X-Originating-IP:Date:X-CM-HeaderCharset:From: To:Cc:Subject:X-Priority:X-Mailer:X-CM-CTRLMSGS:Content-Type: MIME-Version:Message-ID:X-Coremail-Locale:X-CM-TRANSID: X-CM-SenderInfo:X-Coremail-Antispam; bh=LpY1nXTCdUGTsm7PKp/MBnhjQB4ik8zz4BjFWadekSk=; b=NxCJWNjHfeDaO3y8fWV8q2S0+kEUgi7eEHGUx12QKgM2neyJxlu+gmBG7b3cM/rr6HI6 bjQ4mE39zS0fSCqbi8cwJSBTGNWaeonp2LP8S/ATPQfxTgDmhr6lLxoQ977rwY8GoQ9XI +g3tSp6txAOEF6e9kumj/ljqKzmudRHhZ9xMFwwEW0o25/gnmwY5yWDrWUEmTGAaTU3im C78hKhq9AORX9/qdUTzyO1WZ8hs4EO8Gc0hLoTL3npNdZo7+PaawoOIf4D6JckkqGwJyA aBiy2QvwcXffdLpC5nK3YMKJV4QYY7Us6ZyfDHOXesp4yenbFTTpt6qZtKfjyI4rFYA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.remote-ip=207.46.229.174 Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [207.46.229.174]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4FD08606A31A; Thu, 29 Oct 2026 02:47:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 4FD08606A31A Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from xuhx$hust.edu.cn ( [10.12.190.107] ) by ajax-webmail-app2 (Coremail) ; Thu, 29 Oct 2026 10:46:58 +0800 (GMT+08:00) Date: Thu, 29 Oct 2026 10:46:58 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5b6Q5pmX57+U?= To: davem@davemloft.net, edumazet@kernel.org, kuba@kernel.org, pabeni@redhat.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, netfilter-devel@vger.kernel.org Subject: net: flow_offload: flow_indr_dev_unregister() runs container cleanup callbacks after the container may already be freed (tc/nftables/flowtable use-after-free) X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2025.3-cmXT6 build 20260810(6c94e3b5) Copyright (c) 2002-2026 www.mailtech.cn hust X-CM-CTRLMSGS: =?B?fw1l4TiH6nJ5xwDR7hwMki1N8jM= Content-Type: multipart/mixed; boundary="----=_Part_346981_8732332.1793242018374" X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-ID: <500a15dd.195cb.1a1858db247.Coremail.xuhx@hust.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID:IQEQrMDmDniis+JqpChjAA--.2349W X-CM-SenderInfo: bgsqjkayqyjmo6kx23oohg3hdfq/1tbiAgQPB2riIG04uQABsL X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= ------=_Part_346981_8732332.1793242018374 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Zmxvd19pbmRyX2Rldl91bnJlZ2lzdGVyKCkgY29sbGVjdHMgdGhlIGRyaXZlcidzIGZsb3dfYmxv Y2tfY2Igb2JqZWN0cwp1bmRlciB0aGUgZnJhbWV3b3JrIG11dGV4LCB0aGVuIHJlbGVhc2VzIHRo ZSBtdXRleCBhbmQgb25seSBhZnRlcndhcmRzCm5vdGlmaWVzIHRoZSBjb250YWluZXJzIChmbG93 X29mZmxvYWQuYzo0ODMtNTExKSAtLSBhbmQgYmV0d2VlbiB0aG9zZQp0d28gcG9pbnRzIGEgY29u dGFpbmVyLXNpZGUgdGVhcmRvd24gZmluZHMgdGhlIGRyaXZlciBhbHJlYWR5IGFic2VudApmcm9t IHRoZSByZWdpc3RyYXRpb24gbGlzdCwgc28gaXRzIFVOQklORCBiZWNvbWVzIGEgbm8tb3AsIHRo ZQpibG9ja19jYiBzdGF5cyBvbiB0aGUgY29udGFpbmVyJ3MgbGlzdCwgdGhlIGNvbnRhaW5lciBp cyBkZXN0cm95ZWQsCmFuZCB0aGUgY2xlYW51cCBjYWxsYmFjayB0aGVuIGV4ZWN1dGVzIGRvd25f d3JpdGUoKSwgbGlzdCBvcGVyYXRpb25zCmFuZCB1cF93cml0ZSgpIG9uIHRoZSBmcmVlZCBjb250 YWluZXIsIHdoaWNoIGl0IGtub3dzIG9ubHkgYXMgdGhlIGJhcmUKaW5kci5kYXRhIHBvaW50ZXIg d2l0aCBubyByZWZlcmVuY2UgYW5kIG5vIFJDVSBwcm90ZWN0aW9uLiAgSSB2ZXJpZmllZAp0aGlz IGRldGVybWluaXN0aWNhbGx5IG9uIGEgcHJpc3RpbmUgTGludXggNy4zIEtBU0FOIGtlcm5lbDog OApzbGFiLXVzZS1hZnRlci1mcmVlIHJlcG9ydHMgaW4gb25lIGNvbnRyb2xsZWQgcnVuLCB0aHJl ZSBzdGFja3MKY2xvc2VkLCB3aXRoIHRoZSBpbi10cmVlIHdpbmRvdyBjb21wb25lbnQgdGNmX2Fj dGlvbl9yZW9mZmxvYWRfY2IoKQpwcmVzZW50IGluIHRoZSB1c2Ugc3RhY2suICBUaGUgc2FtZSBn YXAgZXhpc3RzIGluIGFsbCB0aHJlZSBjb250YWluZXIKdmFyaWFudHMgKHRjIGJsb2NrLCBuZnRh YmxlcyBiYXNlIGNoYWluLCBuZiBmbG93dGFibGUpOyB0aGUgbmZ0IGFuZApmbG93dGFibGUgdmFy aWFudHMgYWRkaXRpb25hbGx5IHJ1biBydWxlIHdhbGtzIGFuZCBnYy9mbHVzaCB3b3JrIG9uCnRo ZSBmcmVlZCBvYmplY3RzLiAgVGhlIHdpbmRvdyBpcyBhdHRhY2tlci1zdHJldGNoYWJsZTogYmV0 d2Vlbgp1bmxvY2sgYW5kIG5vdGlmeSB0aGUgdW5yZWdpc3RlciBwYXRoIHdhbGtzIGV2ZXJ5IG5l dG5zJ3MgZXZlcnkgdGMKYWN0aW9uIGNhbGxpbmcgdGhlIGRyaXZlcidzIHJlLW9mZmxvYWQgY2Fs bGJhY2ssIHNvIHByZS1jcmVhdGluZyBtYW55CnRjIGFjdGlvbnMgc3RyZXRjaGVzIGl0IGZhciBi ZXlvbmQgYW4gUkNVIGdyYWNlIHBlcmlvZCwgbWFraW5nIHRoZQp1c2UtYWZ0ZXItZnJlZWQtY29u dGFpbmVyIG91dGNvbWUgZXNzZW50aWFsbHkgZ3VhcmFudGVlZCBvbmNlIHRoZQp0ZWFyZG93biBs YW5kcyBpbnNpZGUuCgpUaGUgcm9vdCBhc3ltbWV0cnk6IHRoZSBkcml2ZXIncyBhYnNlbmNlIG1h a2VzIHRoZSBjb250YWluZXIKdGVhcmRvd24ncyBVTkJJTkQgcmV0dXJuIGVhcmx5IHdpdGggYW4g ZW1wdHkgY2JfbGlzdCAodGM6CnRjZl9ibG9ja19zZXR1cCBuby1vcHMsIGNsc19hcGkuYzoxNjkw LTE2OTQ7IG5mdDogcmV0dXJucwotRU9QTk9UU1VQUCwgbmZfdGFibGVzX29mZmxvYWQuYzo0Mzgt NDM5OyBmdDogc2FtZSB2aWEgZmxvd19vZmZsb2FkLmM6CjYyOCksIHNvIG5vdGhpbmcgcmVtb3Zl cyB0aGUgYmxvY2tfY2I7IHRoZSBjb250YWluZXIgaXMgdGhlbiBmcmVlZAp1bmRlciBpdHMgb3du IHByb3RvY29sICh0Yzoga2ZyZWVfcmN1KGJsb2NrKSwgY2xzX2FwaS5jOjU3OTsgbmZ0OgpkZXN0 cm95IHdvcmsgYWZ0ZXIgc3luY2hyb25pemVfcmN1LCBuZl90YWJsZXNfYXBpLmM6MTAyOTIgLT4g a2ZyZWU7CmZ0OiBrZnJlZShmbG93dGFibGUpIGluIGRlc3Ryb3kgd29yaykgd2hpbGUgdGhlIHBl bmRpbmcgY2xlYW51cCBzdGlsbApob2xkcyBkci5kYXRhIHBvaW50aW5nIGF0IGl0LiAgRml4IGRp cmVjdGlvbjogdGhlIGNvbGxlY3Rpb24gcGhhc2UKc2hvdWxkIHRha2UgYSByZWZlcmVuY2Ugb24g ZWFjaCBhZmZlY3RlZCBjb250YWluZXIgKG9yIG90aGVyd2lzZQpndWFyYW50ZWUgY29udGFpbmVy IGxpZmV0aW1lIHVudGlsIGl0cyBjbGVhbnVwIGZpbmlzaGVkKTsgcGx1cyB0aGUKbG9ja2VkZGV2 Y250IGFjY291bnRpbmcgYnVnIGluIHRoZSBzYW1lIGNhbGxiYWNrIGRvY3VtZW50ZWQgYXQgdGhl CmVuZC4KClRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbjoKCiogVGVzdCBlbnZpcm9ubWVudCAvIGFm ZmVjdGVkIHZlcnNpb24KICBMaW51eCB2ZXJzaW9uIDcuMy4wIChnY2MgMTMuMy4wLCBHTlUgbGQg Mi40MikgIzEgU01QIFBSRUVNUFRfRFlOQU1JQwogIC0tIHZhbmlsbGEgbWFpbmxpbmUgNy4zIHJl bGVhc2UgdGFyYmFsbCwgS0FTQU4gZW5hYmxlZCwgUUVNVS9LVk0KICB4ODZfNjQgKDggdkNQVSku ICBUaGUgdW5yZWdpc3RlciBwYXRoIGV4ZXJjaXNlZAogIChmbG93X2luZHJfZGV2X3VucmVnaXN0 ZXIsIHRoZSBjb2xsZWN0aW9uIHdhbGssIHRoZSB1bmxvY2tlZCBub3RpZnkKICBsb29wLCBhbmQg dGNmX2FjdGlvbl9yZW9mZmxvYWRfY2IgY2FsbGVkIGluIGJldHdlZW4pIGlzIHVubW9kaWZpZWQK ICBpbi10cmVlIGNvZGUuICBGaWRlbGl0eSBub3RlczogdGhlIGNvbnRhaW5lciBpcyBhIG1vZHVs ZS1idWlsdAogIHRjLXN0eWxlIGJsb2NrIHdob3NlIGJpbmQvdW5iaW5kL2NsZWFudXAgc2VxdWVu Y2VzIG1pcnJvcgogIG5ldC9zY2hlZC9jbHNfYXBpLmM6NzkxLTgwNy84MTItODMxLzE2ODUtMTY5 OSBsaW5lLWJ5LWxpbmUgKHRoZSBWTQogIGhhcyBubyBzd2l0Y2hkZXYgTklDKSwgYW5kIHRoZSBt aWQtbm90aWZ5IGNvbnRhaW5lciBmcmVlIG1vZGVscyB0aGUKICBwb3N0LWdyYWNlLXBlcmlvZCBz dGF0ZSBvZiB0aGUgcmVhbCBrZnJlZV9yY3UgcGF0aCAtLSBpLmUuIHRoZQogIG1haW4gc2NlbmFy aW8gb2YgdGhlIGFuYWx5c2lzLCB3aXRob3V0IGFueSBrcHJvYmUgb3IgdGltaW5nIHRyaWNrcy4K CiogVGhlIHdpbmRvdyAobmV0L2NvcmUvZmxvd19vZmZsb2FkLmM6NDgzLTUxMSkKICAgICAgbXV0 ZXhfbG9jaygmZmxvd19pbmRyX2Jsb2NrX2xvY2spOwogICAgICAvKiByZW1vdmUgaW5kcl9kZXY6 IGRyaXZlciBpbnZpc2libGUgdG8gc2V0dXBfb2ZmbG9hZCBub3cgKi8KICAgICAgX19mbG93X2Js b2NrX2luZHJfY2xlYW51cChyZWxlYXNlLCBjYl9wcml2LCAmY2xlYW51cF9saXN0KTsKICAgICAg bXV0ZXhfdW5sb2NrKCZmbG93X2luZHJfYmxvY2tfbG9jayk7ICAgICAgICAvKiB3aW5kb3cgb3Bl bnMgKi8KICAgICAgdGNmX2FjdGlvbl9yZW9mZmxvYWRfY2IoY2IsIGNiX3ByaXYsIGZhbHNlKTsg LyogOjUwOCAtLSB3YWxrcwogICAgICAgICAgQUxMIG5ldG5zIHggQUxMIGFjdGlvbiBJRFJzLCBj YWxsaW5nIHRoZSBkcml2ZXIncyBkZWxldGUKICAgICAgICAgIGNhbGxiYWNrIHBlciBhY3Rpb24g KGFjdF9hcGkuYzoxOTE3LTE5NjApOyBsaW5lYXIgaW4gdGhlCiAgICAgICAgICBzeXN0ZW0ncyB0 YyBhY3Rpb24gY291bnQgKi8KICAgICAgZmxvd19ibG9ja19pbmRyX25vdGlmeSgmY2xlYW51cF9s aXN0KTsgICAgICAgLyogOjUwOSAtLSBydW5zCiAgICAgICAgICB0aGUgcGVyLWNvbnRhaW5lciBj bGVhbnVwcyAqLwogIER1cmluZyB0aGF0IHN0cmV0Y2gsIG9uIGFub3RoZXIgQ1BVLCB0aGUgY29u dGFpbmVyJ3MgbGFzdCByZWZlcmVuY2UKICBjYW4gYmUgZHJvcHBlZCAodGM6IGxhc3QgcWRpc2Mg ZGVsZXRlZCB1bmRlciBydG5sOyBuZnQ6IGJhc2UgY2hhaW4KICBkZWxldGlvbiBiYXRjaDsgZnQ6 IGZsb3d0YWJsZSBkZWxldGlvbikuICBJdHMgVU5CSU5EIGZpbmRzIHRoZQogIGRyaXZlciBhYnNl bnQgKGVtcHR5IGJvLmNiX2xpc3QgLT4gZWFybHkgcmV0dXJuKSBhbmQgdGhlIGNvbnRhaW5lcgog IHByb2NlZWRzIHRvIGRlc3RydWN0aW9uOyB0aGUgY2xlYW51cCB0aGVuIHVzZXMgZnJlZWQgbWVt b3J5OgogICAgICB0YyAgY2xlYW51cCAoY2xzX2FwaS5jOjgxMi04MzEpOgogICAgICAgICAgYmxv Y2sgPSBibG9ja19jYi0+aW5kci5kYXRhOyAgICAgICAgICAvKiBmcmVlZCBibG9jayAqLwogICAg ICAgICAgcnRubF9sb2NrKCk7CiAgICAgICAgICBkb3duX3dyaXRlKCZibG9jay0+Y2JfbG9jayk7 ICAgICAgICAgIC8qIHdyaXRlIHRvIGZyZWVkIG1lbSAqLwogICAgICAgICAgbGlzdF9kZWwvbW92 ZTsgdGNmX2Jsb2NrX3VuYmluZChibG9jaywgJmJvKTsgIC8qIHdhbGtzIGZyZWVkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbnMg Ki8KICAgICAgbmZ0IGNsZWFudXAgKG5mX3RhYmxlc19vZmZsb2FkLmM6NDA0LTQyMik6CiAgICAg ICAgICBjb21taXRfbXV0ZXg7IGxpc3Qgb3BzIG9uIGZyZWVkIGJhc2VjaGFpbjsKICAgICAgICAg IG5mdF9mbG93X29mZmxvYWRfdW5iaW5kKCkgd2Fsa3MgdGhlIGZyZWVkIGNoYWluJ3MgcnVsZXMK ICAgICAgZnQgY2xlYW51cCAobmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTIyNi0xMjM2KToKICAg ICAgICAgIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldikgRklSU1QgLS0g d2Fsa3MgdGhlCiAgICAgICAgICBmcmVlZCBmbG93dGFibGUncyBlbnRyaWVzLCBmbHVzaGVzIGl0 cyBnYyBkZWxheWVkIHdvcmsgYW5kCiAgICAgICAgICB0aGUgb2ZmbG9hZCBmbHVzaCB3b3JrIC0t IHRoZW4gZG93bl93cml0ZSBvbiB0aGUgZnJlZWQKICAgICAgICAgIGVtYmVkZGVkIGZsb3dfYmxv Y2tfbG9jawoKKiBFdmlkZW5jZSAoZGV0ZXJtaW5pc3RpYzsgbW9kdWxlIGF0dGFjaGVkKQogIENv bnRyb2xsZWQgcnVuIChhY3Rpb249Y2FzZWI7IHRlYXJkb3duICsga2ZyZWUgb2YgY29udGFpbmVy ICMyCiAgcGVyZm9ybWVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmeSBsb29wLCBpLmUuIGV4 YWN0bHkgdGhlCiAgaW50ZXJsZWF2ZWQgc3RhdGUgYWJvdmU7IGVhcmx5X3JldD0xIGNvbmZpcm1z IHRoZSB0ZWFyZG93bi1zaWRlCiAgVU5CSU5EIHJldHVybmVkIGVhcmx5IGJlY2F1c2UgdGhlIGRy aXZlciB3YXMgYWJzZW50KToKICAgIEJVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgaW4g ZG93bl93cml0ZSsweDdjICAgICAgKHgzIHN0YWdlcykKICAgIFdyaXRlIG9mIHNpemUgOCAuLi4g YnkgdGFzayBpbnNtb2QKICAgICAgZG93bl93cml0ZQogICAgICBmcl90Y19jbGVhbnVwKzB4ZTcg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgbWlycm9yZWQgdGMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW51cCBjYWxsYmFjayAqLwog ICAgICB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYisweDJjMS8weDM4MCAgICAgICAgLyogaW4tdHJl ZSB3aW5kb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29tcG9uZW50ICovCiAgICAgIGZsb3dfaW5kcl9kZXZfdW5yZWdpc3RlcisweDMwNC8weDM4 MCAgICAgICAvKiBpbi10cmVlIG5vdGlmeSAqLwogICAgLi4uIHBsdXMgbGlzdC1vcGVyYXRpb24g VUFGcyAoZnJfdGNfY2xlYW51cCsweDE0ZC8weDE1OSkgYW5kCiAgICAgICAgdXBfd3JpdGUtb24t ZnJlZWQgKHgzKSAtLSA4IHJlcG9ydHMgdG90YWwKICAgIEFsbG9jYXRlZCBieSB0YXNrIDExMTog Zmxvd3JhY2VfaW5pdCAgICAgICAgLyogY29udGFpbmVyICMyICovCiAgICBGcmVlZCBieSB0YXNr IDExMToga2ZyZWUgPC0gZnJfdGNfY2xlYW51cCsweDMyNwogICAgICAgICAgICAgICAgICAgICAg IDwtIGZsb3dfaW5kcl9kZXZfdW5yZWdpc3RlcisweDMwNAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZWQgaW4gdGhlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cgKi8KICBU aGUgYmFzZWxpbmUgYWN0aW9uIChmbG93c2FuaXR5KSBydW5zIHRoZSBpZGVudGljYWwgc2VxdWVu Y2UKICB3aXRob3V0IHRoZSBtaWQtbm90aWZ5IHRlYXJkb3duOiB6ZXJvIHNwbGF0cyAtLSB0aGUg ZGFtYWdlIGlzCiAgZXhhY3RseSB0aGUgaW50ZXJsZWF2aW5nLCBub3QgdGhlIHNldHVwLgogIE1v ZHVsZSB1c2FnZSAoYXR0YWNoZWQgZmxvd3JhY2UuYywgZXh0ZXJuYWwgbW9kdWxlKToKICAgICAg aW5zbW9kIGZsb3dyYWNlLmtvIGFjdGlvbj1jYXNlYgoKKiBSZWFjaGFiaWxpdHkgYW5kIGFtcGxp ZmljYXRpb24KICBUaGUgdW5yZWdpc3RlciBzaWRlIGlzIGFuIGFkbWluIGFjdGlvbiAoZGV2bGlu ayBlc3dpdGNoIG1vZGUKICBzd2l0Y2gsIGRyaXZlciByZWxvYWQsIG1vZHVsZSB1bmxvYWQsIFBD SSBob3QtcmVtb3ZlKTsgdGhlCiAgY29udGFpbmVyIHRlYXJkb3duIHNpZGUgaXMgQ0FQX05FVF9B RE1JTi1pbi1uZXRucyByZWFjaGFibGUKICAocWRpc2MvY2hhaW4vZmxvd3RhYmxlIGRlbGV0aW9u KS4gIFRoZXkgc2hhcmUgbm8gbG9jayAoZGV2bF9sb2NrCiAgdnMgcnRubC9jb21taXRfbXV0ZXgp LiAgVGhlIGluLWJldHdlZW4gYWN0aW9uIHdhbGsgc2NhbGVzIHdpdGggdGhlCiAgbnVtYmVyIG9m IHRjIGFjdGlvbnMgaW4gYWxsIG5ldG5zIC0tIGFuIGF0dGFja2VyIHdobyBwcmUtY3JlYXRlcwog IHRlbnMgb2YgdGhvdXNhbmRzIG9mIGFjdGlvbnMgc3RyZXRjaGVzIHRoZSB3aW5kb3cgdG8gY29t Zm9ydGFibHkKICBleGNlZWQgYW4gUkNVIGdyYWNlIHBlcmlvZCBwbHVzIHRoZSB0ZWFyZG93biBw YXRoLCB3aGljaCBtYWtlcyB0aGUKICAiY29udGFpbmVyIGZyZWVkIGJlZm9yZSBub3RpZnkgcmVh Y2hlcyBpdCIgb3JkZXJpbmcgdGhlIGV4cGVjdGVkCiAgb3V0Y29tZSByYXRoZXIgdGhhbiBhIGx1 Y2t5IHJhY2UuCgoqIEFjY29tcGFueWluZyBhY2NvdW50aW5nIGJ1ZyBpbiB0aGUgc2FtZSBjYWxs YmFjayAobm90IGEgcmFjZSkKICB0Y19ibG9ja19pbmRyX2NsZWFudXAoKSBpbml0aWFsaXplcyBp dHMgYm8gdGhyb3VnaAogIHRjZl9ibG9ja19vZmZsb2FkX2luaXQoKSBidXQgbmV2ZXIgcmVzdG9y ZXMgdGhlCiAgdW5sb2NrZWRfZHJpdmVyX2NiIGZsYWcgdGhlIGJpbmQgaGFkIHNldDsgdGNmX2Js b2NrX3VuYmluZCgpIHRoZW4KICBkb2VzIGJsb2NrLT5sb2NrZWRkZXZjbnQtLSAoY2xzX2FwaS5j OjE2OTgpIGFsdGhvdWdoIHRoZQogIGNvcnJlc3BvbmRpbmcgYmluZCBuZXZlciBkaWQgKysgZm9y IHN1Y2ggZHJpdmVycyAoYmluZDoKICBjbHNfYXBpLmM6MTY1NzsgbWx4NWUgZGVjbGFyZXMgdW5s b2NrZWRfZHJpdmVyX2NiLCByZXAvdGMuYzo0OTcpLgogIGxvY2tlZGRldmNudCBpcyB1bnNpZ25l ZCAoc2NoX2dlbmVyaWMuaDo1MDUpOiBldmVyeSBjbGVhbnVwIG9mIHN1Y2gKICBhIGJsb2NrIHVu ZGVyZmxvd3MgaXQsIGZvcmNpbmcgYWxsIGxhdGVyIHRjX3NldHVwX2NiX2NhbGwoKSBvbiB0aGF0 CiAgYmxvY2sgdG8gdGFrZSBydG5sIChwZXJmb3JtYW5jZSArIGxvY2stb3JkZXJpbmcgY291cGxp bmcpLiAgV29ydGgKICBmaXhpbmcgdG9nZXRoZXI6IHRoZSBjbGVhbnVwIGJvIHNob3VsZCByZXN0 b3JlIHRoZSBmbGFnIHJlY29yZGVkIGF0CiAgYmluZCB0aW1lLgoKClJlZ2FyZHMsCkhhbnhpYW5n IFh1Cnh1aHhAaHVzdC5lZHUuY24KCgo= ------=_Part_346981_8732332.1793242018374 Content-Type: text/plain; name=flowrace.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="flowrace.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogZmxvd3JhY2UuYyAtIGR5 bmFtaWMgdmVyaWZpY2F0aW9uIGZvciB0aGUgbmV0L2NvcmUgYXVkaXQgcmVwb3J0CiAqIGRvY3Mv bWFudWFsLXJldmlldy1uZXQtY29yZS0yMDI2LTEwLTI4Lm1kICg0dGggcm91bmQsIHN1Ym1pc3Np b24gdmVyc2lvbikuCiAqCiAqIFZlcmlmaWVkIGNhc2VzIChrZXJuZWwgc291cmNlIHVudG91Y2hl ZDsgb25seSBFWFBPUlRfU1lNQk9MIEFQSXMpOgogKiAgIENhc2UgQTogZmxvd19pbmRyX2Rldl9y ZWdpc3RlcigpL2V4aXN0aW5nX3FkaXNjc19yZWdpc3RlcigpIHNwbGljZXMgbmV3CiAqICAgICAg ICAgICBibG9ja19jYnMgaW50byBhIGxpdmUgY29udGFpbmVyJ3MgY2JfbGlzdCB3aGlsZSBob2xk aW5nIG9ubHkKICogICAgICAgICAgIGZsb3dfaW5kcl9ibG9ja19sb2NrLCBieXBhc3NpbmcgdGhl IGNvbnRhaW5lciBsb2NrCiAqICAgICAgICAgICAoYWN0aW9uPWNhc2VhX2N0bCBkZXRlcm1pbmlz dGljIGxvY2stYnlwYXNzIHByb29mLCBjYXNlYV9uYXQKICogICAgICAgICAgIG5hdHVyYWwgY29y cnVwdGlvbiBoYW1tZXIgd2l0aCBjb25jdXJyZW50IGNiX2xpc3QgcmVhZGVycykuCiAqICAgQ2Fz ZSBCOiBmbG93X2luZHJfZGV2X3VucmVnaXN0ZXIoKSBjb2xsZWN0aW9uL25vdGlmeSB3aW5kb3cg LSBjb250YWluZXIKICogICAgICAgICAgIHRlYXJkb3duIGR1cmluZyB0aGUgd2luZG93IGxlYXZl cyB0aGUgYmxvY2tfY2IgYXR0YWNoZWQsIHRoZQogKiAgICAgICAgICAgY29udGFpbmVyIGlzIGZy ZWVkLCB0aGVuIHRoZSBub3RpZnkgY2xlYW51cCBjYWxsYmFjayB0b3VjaGVzIHRoZQogKiAgICAg ICAgICAgZnJlZWQgY29udGFpbmVyIChhY3Rpb249Y2FzZWIsIGRldGVybWluaXN0aWM6IGNsZWFu dXAgY2FsbGJhY2sgb2YKICogICAgICAgICAgIGNvbnRhaW5lciAjMSBwZXJmb3JtcyBjb250YWlu ZXIgIzIncyB0ZWFyZG93bitmcmVlIG1pZC1ub3RpZnkpLgogKiAgIENhc2UgQzogc2hhcmVkIHBl cmNwdSBtZXRhZGF0YV9kc3Qgc2NyYXRjaCAoeGZybV9icGZfbWRfZHN0IHBhdHRlcm4pIC0KICog ICAgICAgICAgIGJwZl9za2Jfc2V0X3hmcm1faW5mbygpL3hmcm1pX3htaXQyKCkgcmVwbGljYSBv biByZWFsIGluLXRyZWUKICogICAgICAgICAgIG9iamVjdHMgKG1ldGFkYXRhX2RzdF9hbGxvY19w ZXJjcHUgKyBkc3RfYWxsb2MgKyByZWFsIHNrYnMpOgogKiAgICAgICAgICAgbGVhayB2YXJpYW50 LCBkb3VibGUtY29uc3VtZSB2YXJpYW50IChkZXRlcm1pbmlzdGljIGFjY291bnRpbmcKICogICAg ICAgICAgIHByb29mICsgS0FTQU4gVUFGKSwgbmF0dXJhbCB0d28tdGhyZWFkIHNhbWUtQ1BVIGNo dXJuCiAqICAgICAgICAgICAoYWN0aW9uPWNhc2VjX2N0bCAvIGNhc2VjX25hdCkuCiAqCiAqIEZp ZGVsaXR5IG5vdGVzIChzZWUgcmVzdWx0cyBkb2MpOiB0aGUgZnJhbWV3b3JrIGNvZGUgcGF0aHMK ICogKGZsb3dfaW5kcl9kZXZfcmVnaXN0ZXIvdW5yZWdpc3Rlci9zZXR1cF9vZmZsb2FkLCBmbG93 X2luZHJfYmxvY2tfY2JfYWxsb2MsCiAqIGZsb3dfYmxvY2tfY2JfKiwgbWV0YWRhdGFfZHN0Xyos IGRzdF8qKSBhbGwgcnVuIHVubW9kaWZpZWQgZnJvbSBuZXQvY29yZTsKICogdGhlIG1vZHVsZSBv bmx5IHJlcGxpY2F0ZXMgdGhlIGluLXRyZWUgKmNhbGwgc2l0ZXMqICh0YyBjb250YWluZXIgc2lk ZSwKICogZHJpdmVyIGluZHIgY2FsbGJhY2sgc2lkZSwgYnBmIGtmdW5jIC8geGZybWkgeG1pdCBz ZXF1ZW5jZXMpIHRoYXQgbGl2ZSBpbgogKiBjbHNfYXBpLmMgLyBpY2VfbWFpbi5jIC8geGZybV9p bnRlcmZhY2VfYnBmLmMgLyB4ZnJtX2ludGVyZmFjZV9jb3JlLmMuCiAqLwojaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4K I2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KI2luY2x1 ZGUgPGxpbnV4L25ldGRldmljZS5oPgojaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgojaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KI2luY2x1ZGUgPGxpbnV4 L3JhbmRvbS5oPgojaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgojaW5jbHVkZSA8bmV0L25l dF9uYW1lc3BhY2UuaD4KI2luY2x1ZGUgPG5ldC9mbG93X29mZmxvYWQuaD4KI2luY2x1ZGUgPG5l dC9kc3QuaD4KI2luY2x1ZGUgPG5ldC9kc3RfbWV0YWRhdGEuaD4KCiNkZWZpbmUgRlJUQUcgIkZM T1dSQUNFIgoKc3RhdGljIGNoYXIgKmFjdGlvbiA9ICJzYW5pdHkiOwptb2R1bGVfcGFyYW0oYWN0 aW9uLCBjaGFycCwgMDQ0NCk7Ck1PRFVMRV9QQVJNX0RFU0MoYWN0aW9uLCAic2FuaXR5fGNhc2Vh X2N0bHxjYXNlYV9uYXR8Y2FzZWFfbmF0MnxjYXNlYnxjYXNlY19jdGx8Y2FzZWNfbmF0Iik7Cgpz dGF0aWMgaW50IGl0ZXJzID0gMjAwMDsKbW9kdWxlX3BhcmFtKGl0ZXJzLCBpbnQsIDA0NDQpOwpz dGF0aWMgaW50IG5yZWFkZXJzID0gNDsKbW9kdWxlX3BhcmFtKG5yZWFkZXJzLCBpbnQsIDA0NDQp OwpzdGF0aWMgaW50IGppdHRlcl91cyA9IDQwOwptb2R1bGVfcGFyYW0oaml0dGVyX3VzLCBpbnQs IDA0NDQpOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIHNoYXJlZCBzdGF0ZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnN0cnVjdCBmYWtlX2Js b2NrIHsgICAgICAgICAgICAgICAgIC8qIHJlcGxpY2Egb2YgdGNmX2Jsb2NrJ3Mgb2ZmbG9hZCBw YXJ0cyAqLwoJc3RydWN0IGZsb3dfYmxvY2sgZmI7ICAgICAgIC8qIGZiLmNiX2xpc3QgPT0gYmxv Y2stPmZsb3dfYmxvY2suY2JfbGlzdCAqLwoJc3RydWN0IHJ3X3NlbWFwaG9yZSBjYl9sb2NrOy8q IHJlcGxpY2Egb2YgdGNmX2Jsb2NrLmNiX2xvY2sgICAgICAgICAgICAqLwp9OwoKc3RhdGljIHN0 cnVjdCBuZXRfZGV2aWNlICpmcl9uZGV2OyAgLyogYW55IG5ldGRldjsgcGFzc2VkIHRocm91Z2gg YXMgaW5kci5kZXYgKi8Kc3RhdGljIGludCBmcl9kMSwgZnJfZDIsIGZyX2QzOyAgICAgICAvKiBy ZWdpc3RyYXRpb24gcHJpdnMgKGRyaXZlcnMgMS8yLzMpICAgICovCnN0YXRpYyBMSVNUX0hFQUQo ZnJfZDFfYmxvY2tfbGlzdCk7IC8qIGRyaXZlcl9saXN0IHJlcGxpY2FzICAgICAgICAgICAgICAg ICAgKi8KCnN0YXRpYyBhdG9taWNfdCBmcl9jYl9jYWxsczsgICAgICAgIC8qIHJlYWRlciBpbnZv Y2F0aW9ucyBvZiBibG9ja19jYi0+Y2IgICAgKi8Kc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGZy X2NjX2RvbmU7IC8qIGJvdW5kZWQgd29ya2VyIGNvbXBsZXRpb24gICAgICAgICAgICAgICovCnN0 YXRpYyBhdG9taWNfdCBmcl9jYXNlYl9lYXJseV9yZXQ7IC8qIHRlYXJkb3duIHVuYmluZCByZXR1 cm5lZCAtRU9QTk9UU1VQUCAgKi8Kc3RhdGljIGludCBmcl9jYXNlYl9waGFzZTsgICAgICAgICAg LyogY2FzZWI6IGNsZWFudXAoY2IxKSBwZXJmb3JtcyBmYjIgdGQgICAqLwpzdGF0aWMgc3RydWN0 IGZha2VfYmxvY2sgKmZyX2Nhc2ViX2ZiMSwgKmZyX2Nhc2ViX2ZiMjsKCi8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwovKiBDYXNlIEMgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCgpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmZyX2RzdF9jYWNo ZTsKc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZyX2RzdF9vcHMgPSB7IC5mYW1pbHkgPSBBRl9JTkVU IH07CnN0YXRpYyBzdHJ1Y3QgbWV0YWRhdGFfZHN0IF9fcGVyY3B1ICpmcl9zY3JhdGNoOyAgIC8q IHRoZSBzaGFyZWQgcGVyY3B1IG1kICovCnN0YXRpYyBhdG9taWNfdCBmcl9kc3RfY3JlYXRlZDsK c3RhdGljIGF0b21pY190IGZyX2RzdF9kZXN0cm95ZWQ7CgpzdGF0aWMgdm9pZCBmcl9kc3RfZGVz dHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCnsKCWF0b21pY19pbmMoJmZyX2RzdF9kZXN0cm95 ZWQpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogZHJpdmVyLXNpZGUgaW5kciBjYWxsYmFjazogcmVw bGljYSBvZiBpY2VfaW5kcl9zZXR1cF90Y19ibG9jaygpICAgICAqLwovKiAoaWNlX21haW4uYzo5 NTAyLTk1ODApIC8gbWx4NWVfcmVwX2luZHJfc2V0dXBfYmxvY2soKSAocmVwL3RjLmMpICAgICov CgpzdGF0aWMgaW50IGZyX2Jsb2NrX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0 eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpCnsKCWF0b21pY19pbmMoJmZyX2NiX2NhbGxzKTsKCXJl dHVybiAwOwp9CgpzdGF0aWMgdm9pZCBmcl9jYl9yZWxlYXNlKHZvaWQgKmNiX3ByaXYpIHsgfQoK c3RhdGljIGludCBmcl9pbmRyX2JpbmRfY2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0 IFFkaXNjICpzY2gsCgkJCSAgIHZvaWQgKmNiX3ByaXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBl LAoJCQkgICB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmRhdGEsCgkJCSAgIHZvaWQgKCpjbGVhbnVw KShzdHJ1Y3QgZmxvd19ibG9ja19jYiAqYmxvY2tfY2IpKQp7CglzdHJ1Y3QgZmxvd19ibG9ja19v ZmZsb2FkICpmID0gdHlwZV9kYXRhOwoJc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiOwoK CWlmICh0eXBlICE9IFRDX1NFVFVQX0JMT0NLIHx8ICFkYXRhKQoJCXJldHVybiAtRU9QTk9UU1VQ UDsKCglzd2l0Y2ggKGYtPmNvbW1hbmQpIHsKCWNhc2UgRkxPV19CTE9DS19CSU5EOgoJCWJsb2Nr X2NiID0gZmxvd19pbmRyX2Jsb2NrX2NiX2FsbG9jKGZyX2Jsb2NrX2NiLCBjYl9wcml2LAoJCQkJ CQkgICAgY2JfcHJpdiwgZnJfY2JfcmVsZWFzZSwKCQkJCQkJICAgIGYsIGRldiwgc2NoLCBkYXRh LAoJCQkJCQkgICAgY2JfcHJpdiwgY2xlYW51cCk7CgkJaWYgKElTX0VSUihibG9ja19jYikpCgkJ CXJldHVybiBQVFJfRVJSKGJsb2NrX2NiKTsKCQlmbG93X2Jsb2NrX2NiX2FkZChibG9ja19jYiwg Zik7CgkJbGlzdF9hZGRfdGFpbCgmYmxvY2tfY2ItPmRyaXZlcl9saXN0LCAmZnJfZDFfYmxvY2tf bGlzdCk7CgkJcmV0dXJuIDA7CgljYXNlIEZMT1dfQkxPQ0tfVU5CSU5EOgoJCWJsb2NrX2NiID0g Zmxvd19ibG9ja19jYl9sb29rdXAoZi0+YmxvY2ssIGZyX2Jsb2NrX2NiLCBjYl9wcml2KTsKCQlp ZiAoIWJsb2NrX2NiKQoJCQlyZXR1cm4gLUVOT0VOVDsKCQlmbG93X2luZHJfYmxvY2tfY2JfcmVt b3ZlKGJsb2NrX2NiLCBmKTsKCQlsaXN0X2RlbCgmYmxvY2tfY2ItPmRyaXZlcl9saXN0KTsKCQly ZXR1cm4gMDsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoJfQp9CgovKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KLyogY29udGFpbmVyLXNpZGUgcmVwbGljYXMgb2YgdGhlIHRjIHBhdGhzIChjbHNfYXBp LmMpICAgICAgICAgICAgICAgICAqLwoKLyogcmVwbGljYSBvZiB0Y2ZfYmxvY2tfb2ZmbG9hZF9p bml0KCkgKGNsc19hcGkuYzo3OTEtODA3KSAqLwpzdGF0aWMgdm9pZCBmcl9ib19pbml0KHN0cnVj dCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLCBzdHJ1Y3QgZmFrZV9ibG9jayAqZmIsCgkJICAgICAg IGVudW0gZmxvd19ibG9ja19jb21tYW5kIGNtZCkKewoJbWVtc2V0KGJvLCAwLCBzaXplb2YoKmJv KSk7Cgliby0+Y29tbWFuZCA9IGNtZDsKCWJvLT5iaW5kZXJfdHlwZSA9IEZMT1dfQkxPQ0tfQklO REVSX1RZUEVfQ0xTQUNUX0lOR1JFU1M7Cgliby0+YmxvY2sgPSAmZmItPmZiOwoJYm8tPmNiX2xp c3RfaGVhZCA9ICZmYi0+ZmIuY2JfbGlzdDsgICAvKiBpbmRpcl9kZXZfYWRkIHJlY29yZHMgdGhp cyAqLwoJSU5JVF9MSVNUX0hFQUQoJmJvLT5jYl9saXN0KTsKfQoKLyogcmVwbGljYSBvZiB0Y2Zf YmxvY2tfdW5iaW5kKCkgdGFpbCAoY2xzX2FwaS5jOjE2ODUtMTY5OSkgKi8Kc3RhdGljIHZvaWQg ZnJfdW5iaW5kX2xpc3Qoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pCnsKCXN0cnVjdCBm bG93X2Jsb2NrX2NiICpibG9ja19jYiwgKm47CgoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJs b2NrX2NiLCBuLCAmYm8tPmNiX2xpc3QsIGxpc3QpIHsKCQlsaXN0X2RlbCgmYmxvY2tfY2ItPmxp c3QpOwoJCWZsb3dfYmxvY2tfY2JfZnJlZShibG9ja19jYik7Cgl9Cn0KCi8qIHJlcGxpY2Egb2Yg dGNfYmxvY2tfaW5kcl9jbGVhbnVwKCkgKGNsc19hcGkuYzo4MTItODMxKSAqLwpzdGF0aWMgdm9p ZCBmcl90Y19jbGVhbnVwKHN0cnVjdCBmbG93X2Jsb2NrX2NiICpibG9ja19jYikKewoJc3RydWN0 IGZha2VfYmxvY2sgKmZiID0gYmxvY2tfY2ItPmluZHIuZGF0YTsKCXN0cnVjdCBmbG93X2Jsb2Nr X29mZmxvYWQgYm87CgoJZnJfYm9faW5pdCgmYm8sIGZiLCBGTE9XX0JMT0NLX1VOQklORCk7CgoJ LyogTk9URTogbm8gcmVmZXJlbmNlIHRvIGZiLCBubyBSQ1UgcmVhZCBzZWN0aW9uIC0gZXhhY3Rs eSBsaWtlIHRoZQoJICogaW4tdHJlZSBjYWxsYmFjazogaWYgZmIgd2FzIGZyZWVkIGR1cmluZyB0 aGUgdW5yZWdpc3RlciB3aW5kb3csCgkgKiBldmVyeSBhY2Nlc3MgYmVsb3cgaXMgdXNlLWFmdGVy LWZyZWUuICovCglkb3duX3dyaXRlKCZmYi0+Y2JfbG9jayk7CglsaXN0X2RlbCgmYmxvY2tfY2It PmRyaXZlcl9saXN0KTsKCWxpc3RfbW92ZSgmYmxvY2tfY2ItPmxpc3QsICZiby5jYl9saXN0KTsK CWZyX3VuYmluZF9saXN0KCZibyk7Cgl1cF93cml0ZSgmZmItPmNiX2xvY2spOwoKCS8qIGNhc2Vi IGNob3Jlb2dyYXBoeTogd2hpbGUgbm90aWZ5KCkgaXMgYmV0d2VlbiBjb250YWluZXIgIzEgYW5k CgkgKiBjb250YWluZXIgIzIsIHBlcmZvcm0gY29udGFpbmVyICMyJ3MgdGVhcmRvd24gZXhhY3Rs eSBsaWtlIGEKCSAqIGNvbmN1cnJlbnQgcWRpc2MgZGVzdHJveSB3b3VsZDogZHJpdmVyIGFic2Vu dCAtPiB1bmJpbmQgaXMgYQoJICogbm8tb3AgbGVhdmluZyB0aGUgY2IgYXR0YWNoZWQsIHRoZW4g dGhlIGNvbnRhaW5lciBpcyBmcmVlZAoJICogKG1vZGVscyB0Y2ZfYmxvY2tfZGVzdHJveSgpIGFm dGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kKS4gKi8KCWlmIChmcl9jYXNlYl9waGFzZSAmJiBmYiA9 PSBmcl9jYXNlYl9mYjEgJiYgZnJfY2FzZWJfZmIyKSB7CgkJc3RydWN0IGZha2VfYmxvY2sgKmZi MiA9IGZyX2Nhc2ViX2ZiMjsKCQlzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkIGJvMjsKCQlpbnQg ZXJyOwoKCQlmcl9ib19pbml0KCZibzIsIGZiMiwgRkxPV19CTE9DS19VTkJJTkQpOwoJCWVyciA9 IGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChmcl9uZGV2LCBOVUxMLAoJCQkJCQkgIFRDX1NF VFVQX0JMT0NLLCBmYjIsICZibzIsCgkJCQkJCSAgZnJfdGNfY2xlYW51cCk7CgkJaWYgKGVyciA9 PSAtRU9QTk9UU1VQUCAmJiBsaXN0X2VtcHR5KCZibzIuY2JfbGlzdCkpCgkJCWF0b21pY19zZXQo JmZyX2Nhc2ViX2Vhcmx5X3JldCwgMSk7CgkJa2ZyZWUoZmIyKTsgICAgICAgICAgICAgIC8qIGNv bnRhaW5lciBkZXN0cm95ZWQsIGNiIGF0dGFjaGVkICovCgkJZnJfY2FzZWJfZmIyID0gTlVMTDsK CQlwcl9pbmZvKEZSVEFHICIgY2FzZWI6IGZiMiB0ZWFyZG93bitmcmVlIGRvbmUgbWlkLW5vdGlm eSAoZWFybHlfcmV0PSVkKVxuIiwKCQkJYXRvbWljX3JlYWQoJmZyX2Nhc2ViX2Vhcmx5X3JldCkp OwoJfQp9CgovKiByZXBsaWNhIG9mIHRjZl9ibG9ja19vZmZsb2FkX2JpbmQoKSAoY2xzX2FwaS5j Ojg3MC05MDggaW5jbC4gY21kK3NwbGljZSkgKi8Kc3RhdGljIGludCBmcl9jb250YWluZXJfYmlu ZChzdHJ1Y3QgZmFrZV9ibG9jayAqZmIpCnsKCXN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgYm87 CglpbnQgZXJyOwoKCWZyX2JvX2luaXQoJmJvLCBmYiwgRkxPV19CTE9DS19CSU5EKTsKCWRvd25f d3JpdGUoJmZiLT5jYl9sb2NrKTsKCWVyciA9IGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChm cl9uZGV2LCBOVUxMLCBUQ19TRVRVUF9CTE9DSywgZmIsCgkJCQkJICAmYm8sIGZyX3RjX2NsZWFu dXApOwoJLyogaW4tdHJlZSBpbmRyIHBhdGggaWdub3JlcyBlcnIgaGVyZSBhbmQgc3BsaWNlcyB1 bmNvbmRpdGlvbmFsbHkgKi8KCWxpc3Rfc3BsaWNlKCZiby5jYl9saXN0LCAmZmItPmZiLmNiX2xp c3QpOwoJdXBfd3JpdGUoJmZiLT5jYl9sb2NrKTsKCXJldHVybiBlcnI7Cn0KCi8qIHJlcGxpY2Eg b2YgdGNmX2Jsb2NrX29mZmxvYWRfdW5iaW5kKCkgKGNsc19hcGkuYzo5MTAtOTI2KSAqLwpzdGF0 aWMgdm9pZCBmcl9jb250YWluZXJfdW5iaW5kKHN0cnVjdCBmYWtlX2Jsb2NrICpmYikKewoJc3Ry dWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCBibzsKCglmcl9ib19pbml0KCZibywgZmIsIEZMT1dfQkxP Q0tfVU5CSU5EKTsKCWRvd25fd3JpdGUoJmZiLT5jYl9sb2NrKTsKCWZsb3dfaW5kcl9kZXZfc2V0 dXBfb2ZmbG9hZChmcl9uZGV2LCBOVUxMLCBUQ19TRVRVUF9CTE9DSywgZmIsICZibywKCQkJCSAg ICBmcl90Y19jbGVhbnVwKTsKCWZyX3VuYmluZF9saXN0KCZibyk7Cgl1cF93cml0ZSgmZmItPmNi X2xvY2spOwp9CgovKiByZXBsaWNhIG9mIHRjX3NldHVwX2NiX2NhbGwoKS9fX3RjX3NldHVwX2Ni X2NhbGwoKSAoY2xzX2FwaS5jOjM2MzgtMzY4MikgKi8Kc3RhdGljIGludCBmcl9yZWFkZXJfcGFz cyhzdHJ1Y3QgZmFrZV9ibG9jayAqZmIpCnsKCXN0cnVjdCBmbG93X2Jsb2NrX2NiICpibG9ja19j YjsKCWludCBjbnQgPSAwOwoKCWRvd25fcmVhZCgmZmItPmNiX2xvY2spOwoJbGlzdF9mb3JfZWFj aF9lbnRyeShibG9ja19jYiwgJmZiLT5mYi5jYl9saXN0LCBsaXN0KSB7CgkJYmxvY2tfY2ItPmNi KFRDX1NFVFVQX0NMU0ZMT1dFUiwgTlVMTCwgYmxvY2tfY2ItPmNiX3ByaXYpOwoJCWNudCsrOwoJ fQoJdXBfcmVhZCgmZmItPmNiX2xvY2spOwoJcmV0dXJuIGNudDsKfQoKc3RhdGljIHN0cnVjdCBm YWtlX2Jsb2NrICpmcl9ibG9ja19hbGxvYyh2b2lkKQp7CglzdHJ1Y3QgZmFrZV9ibG9jayAqZmIg PSBremFsbG9jKHNpemVvZigqZmIpLCBHRlBfS0VSTkVMKTsKCglpZiAoIWZiKQoJCXJldHVybiBO VUxMOwoJSU5JVF9MSVNUX0hFQUQoJmZiLT5mYi5jYl9saXN0KTsKCWluaXRfcndzZW0oJmZiLT5j Yl9sb2NrKTsKCXJldHVybiBmYjsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGFjdGlvbjogc2FuaXR5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K CnN0YXRpYyBpbnQgZnJfZG9fc2FuaXR5KHZvaWQpCnsKCXN0cnVjdCBmYWtlX2Jsb2NrICpmYiA9 IGZyX2Jsb2NrX2FsbG9jKCk7CglpbnQgY250LCBlcnI7CgoJaWYgKCFmYikKCQlyZXR1cm4gLUVO T01FTTsKCWVyciA9IGZsb3dfaW5kcl9kZXZfcmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJf ZDEpOwoJcHJfaW5mbyhGUlRBRyAiIHNhbml0eTogcmVnaXN0ZXIgRDEgZXJyPSVkXG4iLCBlcnIp OwoJZXJyID0gZnJfY29udGFpbmVyX2JpbmQoZmIpOwoJY250ID0gZnJfcmVhZGVyX3Bhc3MoZmIp OwoJcHJfaW5mbyhGUlRBRyAiIHNhbml0eTogYmluZCBlcnI9JWQgcmVhZGVyIGVudHJpZXM9JWRc biIsIGVyciwgY250KTsKCWZyX2NvbnRhaW5lcl91bmJpbmQoZmIpOwoJY250ID0gZnJfcmVhZGVy X3Bhc3MoZmIpOwoJcHJfaW5mbyhGUlRBRyAiIHNhbml0eTogYWZ0ZXIgdW5iaW5kIGVudHJpZXM9 JWQgKGV4cGVjdCAwKVxuIiwgY250KTsKCWZsb3dfaW5kcl9kZXZfdW5yZWdpc3Rlcihmcl9pbmRy X2JpbmRfY2IsICZmcl9kMSwgZnJfY2JfcmVsZWFzZSk7Cglwcl9pbmZvKEZSVEFHICIgc2FuaXR5 OiB1bnJlZ2lzdGVyIEQxIGRvbmUsIGNiX2NhbGxzPSVkXG4iLAoJCWF0b21pY19yZWFkKCZmcl9j Yl9jYWxscykpOwoJa2ZyZWUoZmIpOwoJcmV0dXJuIDA7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBh Y3Rpb246IGNhc2VhX2N0bCAtIGRldGVybWluaXN0aWMgY29udGFpbmVyLWxvY2sgYnlwYXNzIHBy b29mICAgICAgICAqLwoKc3RhdGljIGF0b21pY190IGhvbGRlcl9pbiwgcmVnX2RvbmUsIGhvbGRl cl9mb3VuZDsKCnN0YXRpYyBpbnQgZnJfaG9sZGVyX2ZuKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCBm YWtlX2Jsb2NrICpmYiA9IGRhdGE7CglzdHJ1Y3QgZmxvd19ibG9ja19jYiAqYmxvY2tfY2I7Cglp bnQgZm91bmQgPSAwOwoKCWRvd25fd3JpdGUoJmZiLT5jYl9sb2NrKTsgICAgICAgICAgLyogZXhj bHVzaXZlOiBjb250YWluZXIgbG9ja2VkICovCglhdG9taWNfc2V0KCZob2xkZXJfaW4sIDEpOwoJ d2hpbGUgKCFhdG9taWNfcmVhZCgmcmVnX2RvbmUpKQoJCW1zbGVlcCg1KTsKCS8qIHdlIHN0aWxs IGhvbGQgdGhlIGV4Y2x1c2l2ZSBsb2NrOiBpZiBEMidzIGJsb2NrX2NiIGlzIG9uIHRoZSBsaXN0 CgkgKiBub3csIHRoZSByZWdpc3Rlci1wYXRoIHNwbGljZSBieXBhc3NlZCBjYl9sb2NrIGJ5IGNv bnN0cnVjdGlvbiAqLwoJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19jYiwgJmZiLT5mYi5jYl9s aXN0LCBsaXN0KQoJCWlmIChibG9ja19jYi0+Y2JfaWRlbnQgPT0gJmZyX2QyKQoJCQlmb3VuZCA9 IDE7CglhdG9taWNfc2V0KCZob2xkZXJfZm91bmQsIGZvdW5kKTsKCXVwX3dyaXRlKCZmYi0+Y2Jf bG9jayk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBmcl9kb19jYXNlYV9jdGwodm9pZCkKewoJ c3RydWN0IGZha2VfYmxvY2sgKmZiID0gZnJfYmxvY2tfYWxsb2MoKTsKCXN0cnVjdCB0YXNrX3N0 cnVjdCAqaG9sZGVyOwoJaW50IGVycjsKCglpZiAoIWZiKQoJCXJldHVybiAtRU5PTUVNOwoJZmxv d19pbmRyX2Rldl9yZWdpc3Rlcihmcl9pbmRyX2JpbmRfY2IsICZmcl9kMSk7Cglmcl9jb250YWlu ZXJfYmluZChmYik7CgoJaG9sZGVyID0ga3RocmVhZF9ydW4oZnJfaG9sZGVyX2ZuLCBmYiwgImZy X2hvbGRlciIpOwoJd2hpbGUgKCFhdG9taWNfcmVhZCgmaG9sZGVyX2luKSkKCQltc2xlZXAoNSk7 CgkvKiBEMiByZWdpc3RlcnMgd2hpbGUgdGhlIGNvbnRhaW5lciBsb2NrIGlzIGhlbGQgZXhjbHVz aXZlbHkgYnkgdGhlCgkgKiBob2xkZXIgdGhyZWFkOiBleGlzdGluZ19xZGlzY3NfcmVnaXN0ZXIo KSAtPiBsaXN0X3NwbGljZSgpIHJ1bnMKCSAqIHdpdGggbm8gY2JfbG9jayAoaWNlL21seDVlIHBy b2JlIGNvbnRleHQgaW4gdGhlIHJlYWwgc3lzdGVtKS4gKi8KCWVyciA9IGZsb3dfaW5kcl9kZXZf cmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDIpOwoJYXRvbWljX3NldCgmcmVnX2RvbmUs IDEpOwoJa3RocmVhZF9zdG9wKGhvbGRlcik7CgoJcHJfaW5mbyhGUlRBRyAiIENBU0VBLUNUTDog cmVnaXN0ZXJfRDIgZXJyPSVkIHNwbGljZV9sYW5kZWRfd2hpbGVfZXhjbHVzaXZlX2xvY2tfaGVs ZD0lZCBkMl9jYl9vbl9saXN0PSVkXG4iLAoJCWVyciwgYXRvbWljX3JlYWQoJmhvbGRlcl9mb3Vu ZCksIGF0b21pY19yZWFkKCZob2xkZXJfZm91bmQpKTsKCgkvKiBjbGVhbiB0ZWFyZG93bjogY29u dGFpbmVyIHN0aWxsIGFsaXZlLCBib3RoIGRyaXZlcnMnIGNicyByZW1vdmVkCgkgKiB0aHJvdWdo IHRoZWlyIHByb3BlciBwYXRoczsgemVybyBLQVNBTiBleHBlY3RlZCBmb3IgdGhpcyBwbGFuICov CglmbG93X2luZHJfZGV2X3VucmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDIsIGZyX2Ni X3JlbGVhc2UpOwoJZnJfY29udGFpbmVyX3VuYmluZChmYik7CglmbG93X2luZHJfZGV2X3VucmVn aXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDEsIGZyX2NiX3JlbGVhc2UpOwoJcHJfaW5mbyhG UlRBRyAiIENBU0VBLUNUTDogdGVhcmRvd24gZG9uZSwgbGlzdF9lbXB0eT0lZFxuIiwKCQlsaXN0 X2VtcHR5KCZmYi0+ZmIuY2JfbGlzdCkpOwoJa2ZyZWUoZmIpOwoJcmV0dXJuIDA7Cn0KCi8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLwovKiBhY3Rpb246IGNhc2VhX25hdCAtIG5hdHVyYWwgY29ycnVwdGlvbiBoYW1t ZXIgICAgICAgICAgICAgICAgICAgICAgICovCgpzdGF0aWMgYXRvbWljX3QgZnJfc3RvcDsKc3Rh dGljIGF0b21pY190IGZyX3Bhc3NlcywgZnJfZW50cmllcywgZnJfY3ljbGVzOwpzdGF0aWMgYXRv bWljX3QgZnJfcmVhZGVyc19hbGl2ZTsKCnN0YXRpYyBpbnQgZnJfcmVhZGVyX2ZuKHZvaWQgKmRh dGEpCnsKCXN0cnVjdCBmYWtlX2Jsb2NrICpmYiA9IGRhdGE7CgoJYXRvbWljX2luYygmZnJfcmVh ZGVyc19hbGl2ZSk7Cgl3aGlsZSAoIWF0b21pY19yZWFkKCZmcl9zdG9wKSkgewoJCWludCBuID0g ZnJfcmVhZGVyX3Bhc3MoZmIpOwoJCWF0b21pY19pbmMoJmZyX3Bhc3Nlcyk7CgkJYXRvbWljX2Fk ZChuLCAmZnJfZW50cmllcyk7CgkJY29uZF9yZXNjaGVkKCk7Cgl9CglhdG9taWNfZGVjKCZmcl9y ZWFkZXJzX2FsaXZlKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IGZyX2RvX2Nhc2VhX25hdCh2 b2lkKQp7CglzdHJ1Y3QgZmFrZV9ibG9jayAqZmIgPSBmcl9ibG9ja19hbGxvYygpOwoJc3RydWN0 IHRhc2tfc3RydWN0ICoqcmQ7CglpbnQgaSwgZXJyOwoKCWlmICghZmIpCgkJcmV0dXJuIC1FTk9N RU07CglhdG9taWNfc2V0KCZmcl9zdG9wLCAwKTsKCWZsb3dfaW5kcl9kZXZfcmVnaXN0ZXIoZnJf aW5kcl9iaW5kX2NiLCAmZnJfZDEpOwoJZnJfY29udGFpbmVyX2JpbmQoZmIpOwoKCXJkID0ga2Nh bGxvYyhucmVhZGVycywgc2l6ZW9mKCpyZCksIEdGUF9LRVJORUwpOwoJZm9yIChpID0gMDsgaSA8 IG5yZWFkZXJzOyBpKyspCgkJcmRbaV0gPSBrdGhyZWFkX3J1bihmcl9yZWFkZXJfZm4sIGZiLCAi ZnJfcmQlZCIsIGkpOwoKCS8qIGNodXJuOiBlYWNoIEQyIHJlZ2lzdGVyIHBlcmZvcm1zIG9uZSBs b2NrbGVzcyBzcGxpY2UgaW50byB0aGUgbGl2ZQoJICogY2JfbGlzdCAoZXhpc3RpbmdfcWRpc2Nz X3JlZ2lzdGVyKSwgcmFjaW5nIHRoZSBsb2NrZWQgcmVhZGVycyAqLwoJZm9yIChpID0gMDsgaSA8 IGl0ZXJzOyBpKyspIHsKCQllcnIgPSBmbG93X2luZHJfZGV2X3JlZ2lzdGVyKGZyX2luZHJfYmlu ZF9jYiwgJmZyX2QyKTsKCQlpZiAoIWVycikKCQkJZmxvd19pbmRyX2Rldl91bnJlZ2lzdGVyKGZy X2luZHJfYmluZF9jYiwgJmZyX2QyLAoJCQkJCQkgZnJfY2JfcmVsZWFzZSk7CgkJYXRvbWljX2lu YygmZnJfY3ljbGVzKTsKCQlpZiAoIShpICUgMjU2KSkKCQkJY29uZF9yZXNjaGVkKCk7Cgl9Cglh dG9taWNfc2V0KCZmcl9zdG9wLCAxKTsKCWZvciAoaSA9IDA7IGkgPCBucmVhZGVyczsgaSsrKQoJ CWlmIChyZFtpXSkKCQkJa3RocmVhZF9zdG9wKHJkW2ldKTsKCWtmcmVlKHJkKTsKCglmbG93X2lu ZHJfZGV2X3VucmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDEsIGZyX2NiX3JlbGVhc2Up OwoJcHJfaW5mbyhGUlRBRyAiIENBU0VBLU5BVDogY3ljbGVzPSVkIHJlYWRlcl9wYXNzZXM9JWQg ZW50cmllcz0lZCBjYl9jYWxscz0lZCByZWFkZXJzX2FsaXZlPSVkXG4iLAoJCWF0b21pY19yZWFk KCZmcl9jeWNsZXMpLCBhdG9taWNfcmVhZCgmZnJfcGFzc2VzKSwKCQlhdG9taWNfcmVhZCgmZnJf ZW50cmllcyksIGF0b21pY19yZWFkKCZmcl9jYl9jYWxscyksCgkJYXRvbWljX3JlYWQoJmZyX3Jl YWRlcnNfYWxpdmUpKTsKCWtmcmVlKGZiKTsKCXJldHVybiAwOwp9CgovKiBjb25jdXJyZW50LWRy aXZlciB2YXJpYW50OiB0d28gZHJpdmVycyByZWdpc3RlciBhdCB0aGUgc2FtZSB0aW1lIChhcwog KiB3aXRoIGljZStzZmMgaG90cGx1ZyBwcm9iaW5nIGluIHBhcmFsbGVsKSAtIHR3byBsb2NrbGVz cyBzcGxpY2VzIHJhY2UKICogb24gdGhlIHNhbWUgbGlzdCBoZWFkOyBhbiBpbnRlcmxlYXZlIG9y cGhhbnMgb3IgZG91YmxlLWxpbmtzIGEgY2hhaW4KICogYW5kIExJU1RfSEFSREVORUQgZmlyZXMg b24gdGhlIG5leHQgbGlzdF9kZWwuICovCnN0YXRpYyBpbnQgZnJfY2h1cm5fZm4odm9pZCAqcHJp dikKewoJaW50IGk7CgoJZm9yIChpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKCQlpZiAoIWZsb3df aW5kcl9kZXZfcmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCBwcml2KSkKCQkJZmxvd19pbmRyX2Rl dl91bnJlZ2lzdGVyKGZyX2luZHJfYmluZF9jYiwgcHJpdiwKCQkJCQkJIGZyX2NiX3JlbGVhc2Up OwoJCWF0b21pY19pbmMoJmZyX2N5Y2xlcyk7CgkJY29uZF9yZXNjaGVkKCk7Cgl9Cgljb21wbGV0 ZSgmZnJfY2NfZG9uZSk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBmcl9kb19jYXNlYV9uYXQy KHZvaWQpCnsKCXN0cnVjdCBmYWtlX2Jsb2NrICpmYiA9IGZyX2Jsb2NrX2FsbG9jKCk7CglzdHJ1 Y3QgdGFza19zdHJ1Y3QgKmMyLCAqYzMsICpyMCwgKnIxOwoKCWlmICghZmIpCgkJcmV0dXJuIC1F Tk9NRU07CglhdG9taWNfc2V0KCZmcl9zdG9wLCAwKTsKCWZsb3dfaW5kcl9kZXZfcmVnaXN0ZXIo ZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDEpOwoJZnJfY29udGFpbmVyX2JpbmQoZmIpOwoJaW5pdF9j b21wbGV0aW9uKCZmcl9jY19kb25lKTsKCglyMCA9IGt0aHJlYWRfcnVuKGZyX3JlYWRlcl9mbiwg ZmIsICJmcl9yZDAiKTsKCXIxID0ga3RocmVhZF9ydW4oZnJfcmVhZGVyX2ZuLCBmYiwgImZyX3Jk MSIpOwoKCWMyID0ga3RocmVhZF9ydW4oZnJfY2h1cm5fZm4sICZmcl9kMiwgImZyX2NoMiIpOwoJ YzMgPSBrdGhyZWFkX3J1bihmcl9jaHVybl9mbiwgJmZyX2QzLCAiZnJfY2gzIik7Cgl3YWl0X2Zv cl9jb21wbGV0aW9uKCZmcl9jY19kb25lKTsKCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZyX2NjX2Rv bmUpOwoJYXRvbWljX3NldCgmZnJfc3RvcCwgMSk7CglrdGhyZWFkX3N0b3AocjApOwoJa3RocmVh ZF9zdG9wKHIxKTsKCglmbG93X2luZHJfZGV2X3VucmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAm ZnJfZDEsIGZyX2NiX3JlbGVhc2UpOwoJcHJfaW5mbyhGUlRBRyAiIENBU0VBLU5BVDI6IGN5Y2xl cz0lZCByZWFkZXJfcGFzc2VzPSVkIGVudHJpZXM9JWQgY2JfY2FsbHM9JWRcbiIsCgkJYXRvbWlj X3JlYWQoJmZyX2N5Y2xlcyksIGF0b21pY19yZWFkKCZmcl9wYXNzZXMpLAoJCWF0b21pY19yZWFk KCZmcl9lbnRyaWVzKSwgYXRvbWljX3JlYWQoJmZyX2NiX2NhbGxzKSk7CglrZnJlZShmYik7Cgly ZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGFjdGlvbjogY2FzZWIgLSBkZXRlcm1pbmlz dGljIHVucmVnaXN0ZXItd2luZG93IFVBRiAgICAgICAgICAgICAgICAgKi8KCnN0YXRpYyBpbnQg ZnJfZG9fY2FzZWIodm9pZCkKewoJc3RydWN0IGZha2VfYmxvY2sgKmZiMSwgKmZiMjsKCglmYjEg PSBmcl9ibG9ja19hbGxvYygpOwoJZmIyID0gZnJfYmxvY2tfYWxsb2MoKTsKCWlmICghZmIxIHx8 ICFmYjIpCgkJcmV0dXJuIC1FTk9NRU07CglmbG93X2luZHJfZGV2X3JlZ2lzdGVyKGZyX2luZHJf YmluZF9jYiwgJmZyX2QxKTsKCWZyX2NvbnRhaW5lcl9iaW5kKGZiMSk7Cglmcl9jb250YWluZXJf YmluZChmYjIpOwoJcHJfaW5mbyhGUlRBRyAiIGNhc2ViOiB0d28gY29udGFpbmVycyBib3VuZFxu Iik7CgoJLyogdW5yZWdpc3RlcjogbXV0ZXggc2VjdGlvbiByZW1vdmVzIEQxICsgY29sbGVjdHMg Ym90aCBjYnM7IHRoZQoJICogbm90aWZ5IHBoYXNlIHRoZW4gY2FsbHMgZnJfdGNfY2xlYW51cChj Yl9mYjEpIGZpcnN0IC0gd2hpY2ggd2UKCSAqIHVzZSBhcyB0aGUgY29udHJvbGxlZCBwb2ludCB0 byBydW4gY29udGFpbmVyICMyJ3MgdGVhcmRvd24rZnJlZQoJICogKGVxdWl2YWxlbnQgdG8gYSBj b25jdXJyZW50IHFkaXNjIGRlc3Ryb3kgaW5zaWRlIHRoZSB3aW5kb3cpLAoJICogYWZ0ZXIgd2hp Y2ggbm90aWZ5IGNhbGxzIGZyX3RjX2NsZWFudXAoY2JfZmIyKSBvbiBmcmVlZCBmYjIuICovCglm cl9jYXNlYl9mYjEgPSBmYjE7Cglmcl9jYXNlYl9mYjIgPSBmYjI7Cglmcl9jYXNlYl9waGFzZSA9 IDE7CglmbG93X2luZHJfZGV2X3VucmVnaXN0ZXIoZnJfaW5kcl9iaW5kX2NiLCAmZnJfZDEsIGZy X2NiX3JlbGVhc2UpOwoJZnJfY2FzZWJfcGhhc2UgPSAwOwoKCXByX2luZm8oRlJUQUcgIiBDQVNF QjogdW5yZWdpc3RlciBkb25lLCBlYXJseV9yZXQ9JWQgZmIxX2xpc3RfZW1wdHk9JWQgKGZiMiBr ZnJlZSdkIG1pZC1ub3RpZnk7IFVBRiBleHBlY3RlZCBpbiBkbWVzZylcbiIsCgkJYXRvbWljX3Jl YWQoJmZyX2Nhc2ViX2Vhcmx5X3JldCksIGxpc3RfZW1wdHkoJmZiMS0+ZmIuY2JfbGlzdCkpOwoJ a2ZyZWUoZmIxKTsKCXJldHVybiAwOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogQ2FzZSBDOiBwZXJj cHUgc2NyYXRjaCByYWNlIHJlcGxpY2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq LwoKc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKmZyX3JvdXRlX2RzdF9uZXcodm9pZCkKewoJc3Ry dWN0IGRzdF9lbnRyeSAqZCA9IGRzdF9hbGxvYygmZnJfZHN0X29wcywgZnJfbmRldiwKCQkJCQlE U1RfT0JTT0xFVEVfTk9ORSwgRFNUX05PQ09VTlQpOwoKCWlmIChkKQoJCWF0b21pY19pbmMoJmZy X2RzdF9jcmVhdGVkKTsKCXJldHVybiBkOwp9CgovKiByZXBsaWNhIG9mIGJwZl9za2Jfc2V0X3hm cm1faW5mbygpICh4ZnJtX2ludGVyZmFjZV9icGYuYzo2NC05NCkgKi8Kc3RhdGljIGludCBmcl9z ZXRfeGZybV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpZl9pZCwgaW50IGxpbmspCnsK CXN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kX2RzdDsKCXN0cnVjdCB4ZnJtX21kX2luZm8gKmluZm87 CgoJaWYgKHVubGlrZWx5KHNrYl9tZXRhZGF0YV9kc3Qoc2tiKSkpCgkJcmV0dXJuIC1FSU5WQUw7 CgoJbWRfZHN0ID0gdGhpc19jcHVfcHRyKGZyX3NjcmF0Y2gpOwoJaW5mbyA9ICZtZF9kc3QtPnUu eGZybV9pbmZvOwoKCWluZm8tPmlmX2lkID0gaWZfaWQ7CglpbmZvLT5saW5rID0gbGluazsKCXNr Yl9kc3RfZm9yY2Uoc2tiKTsKCWluZm8tPmRzdF9vcmlnID0gc2tiX2RzdChza2IpOyAgICAgICAv KiB1bmNvbmRpdGlvbmFsIG92ZXJ3cml0ZSAqLwoJZHN0X2hvbGQoKHN0cnVjdCBkc3RfZW50cnkg KiltZF9kc3QpOwoJc2tiX2RzdF9zZXQoc2tiLCAoc3RydWN0IGRzdF9lbnRyeSAqKW1kX2RzdCk7 CglyZXR1cm4gMDsKfQoKLyogcmVwbGljYSBvZiB4ZnJtaV94bWl0MigpIGNvbGxlY3RfbWQgYmxv Y2sgKHhmcm1faW50ZXJmYWNlX2NvcmUuYzo0MzQtNDU1KSAqLwpzdGF0aWMgdm9pZCBmcl94bWl0 Ml9zd2FwKHN0cnVjdCBza19idWZmICpza2IpCnsKCXN0cnVjdCB4ZnJtX21kX2luZm8gKm1kX2lu Zm8gPSBza2JfeGZybV9tZF9pbmZvKHNrYik7CglzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CgoJaWYg KCFtZF9pbmZvKQoJCXJldHVybjsKCWlmIChtZF9pbmZvLT5kc3Rfb3JpZykgeyAgICAgICAgICAg ICAvKiByZWFkLXRha2UtY2xlYXIsIG5vbi1hdG9taWMgKi8KCQlzdHJ1Y3QgZHN0X2VudHJ5ICp0 bXBfZHN0ID0gc2tiX2RzdChza2IpOwoKCQlkc3QgPSBtZF9pbmZvLT5kc3Rfb3JpZzsKCQlza2Jf ZHN0X3NldChza2IsIGRzdCk7CgkJbWRfaW5mby0+ZHN0X29yaWcgPSBOVUxMOwoJCWRzdF9yZWxl YXNlKHRtcF9kc3QpOyAgICAgICAgLyogZHJvcCB0aGlzIHNrYidzIHNjcmF0Y2ggcmVmICovCgl9 Cn0KCnN0YXRpYyBpbnQgZnJfY2FzZWNfc2V0dXAodm9pZCkKewoJZnJfZHN0X2NhY2hlID0ga21l bV9jYWNoZV9jcmVhdGUoImZyZHN0Iiwgc2l6ZW9mKHN0cnVjdCBkc3RfZW50cnkpLAoJCQkJCSAw LCAwLCBOVUxMKTsKCWlmICghZnJfZHN0X2NhY2hlKQoJCXJldHVybiAtRU5PTUVNOwoJZnJfZHN0 X29wcy5rbWVtX2NhY2hlcCA9IGZyX2RzdF9jYWNoZTsKCWZyX2RzdF9vcHMuZGVzdHJveSA9IGZy X2RzdF9kZXN0cm95OwoJZnJfc2NyYXRjaCA9IG1ldGFkYXRhX2RzdF9hbGxvY19wZXJjcHUoMCwg TUVUQURBVEFfWEZSTSwgR0ZQX0tFUk5FTCk7CglpZiAoIWZyX3NjcmF0Y2gpCgkJcmV0dXJuIC1F Tk9NRU07CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgZnJfY2FzZWNfdGVhcmRvd24odm9pZCkK ewoJaWYgKGZyX3NjcmF0Y2gpIHsKCQltZXRhZGF0YV9kc3RfZnJlZV9wZXJjcHUoZnJfc2NyYXRj aCk7CgkJZnJfc2NyYXRjaCA9IE5VTEw7Cgl9CglpZiAoZnJfZHN0X2NhY2hlKSB7CgkJa21lbV9j YWNoZV9kZXN0cm95KGZyX2RzdF9jYWNoZSk7CgkJZnJfZHN0X2NhY2hlID0gTlVMTDsKCX0KfQoK c3RhdGljIGludCBmcl9kb19jYXNlY19jdGwodm9pZCkKewoJc3RydWN0IGRzdF9lbnRyeSAqcjEs ICpyMiwgKnJ4OwoJc3RydWN0IHNrX2J1ZmYgKnMxLCAqczIsICpzMzsKCWludCBiZWZvcmUsIGxl YWtzOwoKCWlmIChmcl9jYXNlY19zZXR1cCgpKQoJCXJldHVybiAtRU5PTUVNOwoKCS8qIC0tLSBi YXNlbGluZTogc2luZ2xlLXBhY2tldCBwcm90b2NvbCBjbG9zZXMgY2xlYW5seSAtLS0gKi8KCXIx ID0gZnJfcm91dGVfZHN0X25ldygpOwoJczEgPSBhbGxvY19za2IoNjQsIEdGUF9LRVJORUwpOwoJ c2tiX2RzdF9zZXQoczEsIHIxKTsgICAgICAgICAgICAgICAgIC8qIHNrYiBvd25zIHIxJ3Mgc2lu Z2xlIHJlZiAqLwoJcHJlZW1wdF9kaXNhYmxlKCk7ICAgICAgICAgICAgICAgICAgIC8qIGtlZXAg dGhpc19jcHVfcHRyIHN0YWJsZSAqLwoJZnJfc2V0X3hmcm1faW5mbyhzMSwgMSwgMCk7Cglmcl94 bWl0Ml9zd2FwKHMxKTsKCXByZWVtcHRfZW5hYmxlKCk7CglrZnJlZV9za2IoczEpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogZHJvcHMgcjEgLT4gZnJlZWQgdmlhIFJDVSAqLwoJc3luY2hyb25p emVfcmN1KCk7Cglwcl9pbmZvKEZSVEFHICIgY2FzZWMgYmFzZWxpbmU6IGNyZWF0ZWQ9JWQgZGVz dHJveWVkPSVkIChleHBlY3QgMS8xKVxuIiwKCQlhdG9taWNfcmVhZCgmZnJfZHN0X2NyZWF0ZWQp LCBhdG9taWNfcmVhZCgmZnJfZHN0X2Rlc3Ryb3llZCkpOwoKCS8qIC0tLSBsZWFrIHZhcmlhbnQ6 IHVuY29uZGl0aW9uYWwgb3ZlcndyaXRlIG9mIHBlbmRpbmcgZHN0X29yaWcgLS0tICovCgliZWZv cmUgPSBhdG9taWNfcmVhZCgmZnJfZHN0X2Rlc3Ryb3llZCk7CglyMSA9IGZyX3JvdXRlX2RzdF9u ZXcoKTsKCXIyID0gZnJfcm91dGVfZHN0X25ldygpOwoJczEgPSBhbGxvY19za2IoNjQsIEdGUF9L RVJORUwpOwoJczIgPSBhbGxvY19za2IoNjQsIEdGUF9LRVJORUwpOwoJc2tiX2RzdF9zZXQoczEs IHIxKTsKCXNrYl9kc3Rfc2V0KHMyLCByMik7CglwcmVlbXB0X2Rpc2FibGUoKTsKCWZyX3NldF94 ZnJtX2luZm8oczEsIDEsIDApOyAgICAgICAgICAvKiBzY3JhdGNoLmRzdF9vcmlnID0gcjEgKi8K CWZyX3NldF94ZnJtX2luZm8oczIsIDIsIDApOyAgICAgICAgICAvKiBPVkVSV1JJVEVTOiByMSBs ZWFrZWQgKi8KCWZyX3htaXQyX3N3YXAoczEpOyAgICAgICAgICAgICAgICAgICAvKiBnZXRzIHIy IChjcm9zcy1wYWNrZXQpICovCglmcl94bWl0Ml9zd2FwKHMyKTsgICAgICAgICAgICAgICAgICAg LyogZHN0X29yaWc9PU5VTEwgLT4gc2tpcCAqLwoJcHJlZW1wdF9lbmFibGUoKTsKCWtmcmVlX3Nr YihzMSk7CglrZnJlZV9za2IoczIpOwoJc3luY2hyb25pemVfcmN1KCk7CglsZWFrcyA9IGF0b21p Y19yZWFkKCZmcl9kc3RfY3JlYXRlZCkgLSBhdG9taWNfcmVhZCgmZnJfZHN0X2Rlc3Ryb3llZCk7 Cglwcl9pbmZvKEZSVEFHICIgQ0FTRUMtTEVBSzogbGVha2VkPSVkIChyMSByZWZzX2hlbGQ9JWQs IGV4cGVjdGVkIDAgaWYgbm90IGxlYWtlZDsgYmFzZWxpbmUgZGVzdHJveWVkKyVkIG9mIDIpXG4i LAoJCWxlYWtzLCByY3VyZWZfcmVhZCgmcjEtPl9fcmN1cmVmKSwKCQlhdG9taWNfcmVhZCgmZnJf ZHN0X2Rlc3Ryb3llZCkgLSBiZWZvcmUpOwoJZHN0X3JlbGVhc2UocjEpOyAgICAgICAgICAgICAg ICAgICAgIC8qIHJlY2xhaW0gdGhlIGxlYWtlZCByZWYgKi8KCgkvKiAtLS0gZG91YmxlLWNvbnN1 bWU6IGludGVybGVhdmVkIHJlYWQtdGFrZS1jbGVhciAodGhlIGV4YWN0CgkgKiBpbnN0cnVjdGlv biBvcmRlciB0d28gY29uY3VycmVudCB4ZnJtaV94bWl0MiBleGVjdXRpb25zIHByb2R1Y2U7Cgkg KiBuYXR1cmFsIHJlYWNoYWJpbGl0eSBpcyBzaG93biBieSBjYXNlY19uYXQpIC0tLSAqLwoJcngg PSBmcl9yb3V0ZV9kc3RfbmV3KCk7ICAgICAgICAgICAgIC8qIHJlZmNudCA9IDEgKi8KCXMxID0g YWxsb2Nfc2tiKDY0LCBHRlBfS0VSTkVMKTsKCXMyID0gYWxsb2Nfc2tiKDY0LCBHRlBfS0VSTkVM KTsKCXMzID0gYWxsb2Nfc2tiKDY0LCBHRlBfS0VSTkVMKTsKCXNrYl9kc3Rfc2V0KHMzLCByeCk7 ICAgICAgICAgICAgICAgICAvKiB0aGUgIm9yaWdpbmFsIHNrYiIgaGFuZHMgcnggKi8KCXByZWVt cHRfZGlzYWJsZSgpOwoJZnJfc2V0X3hmcm1faW5mbyhzMywgMywgMCk7ICAgICAgICAgIC8qIHNj cmF0Y2guZHN0X29yaWcgPSByeCAqLwoJewoJCXN0cnVjdCB4ZnJtX21kX2luZm8gKm1pID0gdGhp c19jcHVfcHRyKCZmcl9zY3JhdGNoLT51Lnhmcm1faW5mbyk7CgkJc3RydWN0IGRzdF9lbnRyeSAq dDEsICp0MjsKCgkJdDEgPSBtaS0+ZHN0X29yaWc7ICAgICAgICAgICAvKiBza2IxIHhtaXQyOiBy ZWFkICovCgkJdDIgPSBtaS0+ZHN0X29yaWc7ICAgICAgICAgICAvKiBza2IyIHhtaXQyOiByZWFk ICovCgkJc2tiX2RzdF9zZXQoczEsIHQxKTsgICAgICAgICAvKiBza2IxIHRha2VzICovCgkJc2ti X2RzdF9zZXQoczIsIHQyKTsgICAgICAgICAvKiBza2IyIHRha2VzIC0gMSByZWYsIDIgb3duZXJz ICovCgkJbWktPmRzdF9vcmlnID0gTlVMTDsKCX0KCXByZWVtcHRfZW5hYmxlKCk7CglrZnJlZV9z a2IoczMpOyAgICAgICAgICAgICAgICAgICAgICAgLyogZHJvcHMgc2NyYXRjaCBtZCByZWYgKi8K CXByX2luZm8oRlJUQUcgIiBjYXNlYyBkY29uczogcnggcmVmc19oZWxkPSVkICgyIGNsYWltcyBv biAxIHJlYWwgcmVmKVxuIiwKCQlyY3VyZWZfcmVhZCgmcngtPl9fcmN1cmVmKSk7CglrZnJlZV9z a2IoczEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgb3duZXIgcmVsZWFzZXMgKi8K CXByX2luZm8oRlJUQUcgIiBjYXNlYyBkY29uczogYWZ0ZXIgc2tiMSBmcmVlIHJ4IGRlYWQ9JWRc biIsCgkJcmN1cmVmX2lzX2RlYWQoJnJ4LT5fX3JjdXJlZikpOwoJa2ZyZWVfc2tiKHMyKTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIHNlY29uZCBvd25lcjogaW1iYWxhbmNlZCBwdXQgKi8KCXN5 bmNocm9uaXplX3JjdSgpOyAgICAgICAgICAgICAgICAgICAvKiBkc3RfZGVzdHJveV9yY3UgZnJl ZXMgcnggKi8KCXByX2luZm8oRlJUQUcgIiBDQVNFQy1EQ09OUzogdG91Y2hpbmcgcnggYWZ0ZXIg Z3JhY2UgcGVyaW9kIChVQUYgcmVhZCBleHBlY3RlZCBiZWxvdylcbiIpOwoJcHJfaW5mbyhGUlRB RyAiIENBU0VDLURDT05TOiByeC0+b2Jzb2xldGU9JWQgY3JlYXRlZD0lZCBkZXN0cm95ZWQ9JWRc biIsCgkJcngtPm9ic29sZXRlLCBhdG9taWNfcmVhZCgmZnJfZHN0X2NyZWF0ZWQpLAoJCWF0b21p Y19yZWFkKCZmcl9kc3RfZGVzdHJveWVkKSk7CgoJZnJfY2FzZWNfdGVhcmRvd24oKTsKCXJldHVy biAwOwp9CgovKiBuYXR1cmFsIGNodXJuOiB0d28gdGhyZWFkcyBvbiB0aGUgU0FNRSBjcHUgKHNo YXJlZCBwZXJjcHUgc2NyYXRjaCkgKi8Kc3RhdGljIGF0b21pY190IGZyX2NjX2N5Y2xlcywgZnJf Y2NfY29uZnVzZWQsIGZyX2NjX3NraXBwZWQ7CgpzdGF0aWMgaW50IGZyX2NjX2ZuKHZvaWQgKnVu dXNlZCkKewoJaW50IGk7CgoJZm9yIChpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKCQlzdHJ1Y3Qg ZHN0X2VudHJ5ICpyID0gZnJfcm91dGVfZHN0X25ldygpOwoJCXN0cnVjdCBza19idWZmICpza2Ig PSBhbGxvY19za2IoNjQsIEdGUF9LRVJORUwpOwoJCWludCB1czsKCgkJaWYgKHIgJiYgc2tiKSB7 CgkJCXNrYl9kc3Rfc2V0KHNrYiwgcik7CgkJCWZyX3NldF94ZnJtX2luZm8oc2tiLCBpICYgMSwg MCk7CgkJCXVzID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coaml0dGVyX3VzICsgMSk7CgkJCWlmICh1 cykKCQkJCXVkZWxheSh1cyk7ICAvKiB3aWRlbiBzZXQtPnhtaXQgd2luZG93ICovCgkJCWlmIChz a2JfZHN0KHNrYikgPT0gKHN0cnVjdCBkc3RfZW50cnkgKikKCQkJICAgIHRoaXNfY3B1X3B0cihm cl9zY3JhdGNoKSkgewoJCQkJc3RydWN0IGRzdF9lbnRyeSAqd2FudCA9IHI7CgoJCQkJZnJfeG1p dDJfc3dhcChza2IpOwoJCQkJaWYgKHNrYl9kc3Qoc2tiKSAhPSB3YW50KSB7CgkJCQkJaWYgKHNr Yl9kc3Qoc2tiKSA9PSAoc3RydWN0IGRzdF9lbnRyeSAqKQoJCQkJCSAgICB0aGlzX2NwdV9wdHIo ZnJfc2NyYXRjaCkpCgkJCQkJCWF0b21pY19pbmMoJmZyX2NjX3NraXBwZWQpOwoJCQkJCWVsc2UK CQkJCQkJYXRvbWljX2luYygmZnJfY2NfY29uZnVzZWQpOwoJCQkJfQoJCQl9CgkJCWtmcmVlX3Nr Yihza2IpOwoJCX0gZWxzZSB7CgkJCWlmIChza2IpCgkJCQlrZnJlZV9za2Ioc2tiKTsKCQkJaWYg KHIpCgkJCQlkc3RfcmVsZWFzZShyKTsKCQl9CgkJYXRvbWljX2luYygmZnJfY2NfY3ljbGVzKTsK CQljb25kX3Jlc2NoZWQoKTsKCX0KCWNvbXBsZXRlKCZmcl9jY19kb25lKTsKCXJldHVybiAwOwp9 CgpzdGF0aWMgdm9pZCBmcl9zY3JhdGNoX2RyYWluKHZvaWQpCnsKCWludCBjcHU7CgoJLyogcmVw bGljYXRlIG1ldGFkYXRhX2RzdF9mcmVlX3BlcmNwdSgpJ3MgZHN0X29yaWcgcmVsZWFzZSBsb29w IHNvCgkgKiBhY2NvdW50aW5nIGlzIHNldHRsZWQgYmVmb3JlIHRoZSBmaW5hbCBkZXN0cm95LWNv dW50IHJlYWQgKi8KCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKCQlzdHJ1Y3QgeGZybV9t ZF9pbmZvICptaSA9CgkJCXBlcl9jcHVfcHRyKCZmcl9zY3JhdGNoLT51Lnhmcm1faW5mbywgY3B1 KTsKCgkJaWYgKG1pLT5kc3Rfb3JpZykgewoJCQlkc3RfcmVsZWFzZShtaS0+ZHN0X29yaWcpOwoJ CQltaS0+ZHN0X29yaWcgPSBOVUxMOwoJCX0KCX0KfQoKc3RhdGljIGludCBmcl9kb19jYXNlY19u YXQodm9pZCkKewoJc3RydWN0IHRhc2tfc3RydWN0ICp0MSwgKnQyOwoJaW50IGxlYWtlZDsKCglp ZiAoZnJfY2FzZWNfc2V0dXAoKSkKCQlyZXR1cm4gLUVOT01FTTsKCWluaXRfY29tcGxldGlvbigm ZnJfY2NfZG9uZSk7Cgl0MSA9IGt0aHJlYWRfY3JlYXRlKGZyX2NjX2ZuLCBOVUxMLCAiZnJfY2Mw Iik7Cgl0MiA9IGt0aHJlYWRfY3JlYXRlKGZyX2NjX2ZuLCBOVUxMLCAiZnJfY2MxIik7CglpZiAo SVNfRVJSKHQxKSB8fCBJU19FUlIodDIpKQoJCXJldHVybiAtRU5PTUVNOwoJa3RocmVhZF9iaW5k KHQxLCAxKTsgICAgICAgICAgICAgICAgIC8qIHNhbWUgQ1BVIC0+IHNhbWUgc2NyYXRjaCAqLwoJ a3RocmVhZF9iaW5kKHQyLCAxKTsKCXdha2VfdXBfcHJvY2Vzcyh0MSk7Cgl3YWtlX3VwX3Byb2Nl c3ModDIpOwoJLyogbGV0IGJvdGggcnVuIHRoZWlyIGZ1bGwgYm91bmRlZCBsb29wcywgdGhlbiBz ZXR0bGUgYWNjb3VudGluZyAqLwoJd2FpdF9mb3JfY29tcGxldGlvbigmZnJfY2NfZG9uZSk7Cgl3 YWl0X2Zvcl9jb21wbGV0aW9uKCZmcl9jY19kb25lKTsKCWZyX3NjcmF0Y2hfZHJhaW4oKTsKCXN5 bmNocm9uaXplX3JjdSgpOwoJbGVha2VkID0gYXRvbWljX3JlYWQoJmZyX2RzdF9jcmVhdGVkKSAt IGF0b21pY19yZWFkKCZmcl9kc3RfZGVzdHJveWVkKTsKCXByX2luZm8oRlJUQUcgIiBDQVNFQy1O QVQ6IGN5Y2xlcz0lZCBjcmVhdGVkPSVkIGRlc3Ryb3llZD0lZCBsZWFrZWQ9JWQgY29uZnVzZWQo b3RoZXIgUik9JWQgc3dhcF9za2lwcGVkPSVkXG4iLAoJCWF0b21pY19yZWFkKCZmcl9jY19jeWNs ZXMpLCBhdG9taWNfcmVhZCgmZnJfZHN0X2NyZWF0ZWQpLAoJCWF0b21pY19yZWFkKCZmcl9kc3Rf ZGVzdHJveWVkKSwgbGVha2VkLAoJCWF0b21pY19yZWFkKCZmcl9jY19jb25mdXNlZCksIGF0b21p Y19yZWFkKCZmcl9jY19za2lwcGVkKSk7Cglmcl9jYXNlY190ZWFyZG93bigpOwoJcmV0dXJuIDA7 Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLwoKc3RhdGljIGludCBfX2luaXQgZmxvd3JhY2VfaW5pdCh2b2lk KQp7CglpbnQgcmV0ID0gMDsKCglmcl9uZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwg ImxvIik7CglpZiAoIWZyX25kZXYpIHsKCQlwcl9lcnIoRlJUQUcgIiBubyBsbyBuZXRkZXZcbiIp OwoJCXJldHVybiAtRU5PREVWOwoJfQoJcHJfaW5mbyhGUlRBRyAiIGFjdGlvbj0lcyBpdGVycz0l ZCByZWFkZXJzPSVkIGppdHRlcl91cz0lZFxuIiwKCQlhY3Rpb24sIGl0ZXJzLCBucmVhZGVycywg aml0dGVyX3VzKTsKCglpZiAoIXN0cmNtcChhY3Rpb24sICJzYW5pdHkiKSkKCQlyZXQgPSBmcl9k b19zYW5pdHkoKTsKCWVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLCAiY2FzZWFfY3RsIikpCgkJcmV0 ID0gZnJfZG9fY2FzZWFfY3RsKCk7CgllbHNlIGlmICghc3RyY21wKGFjdGlvbiwgImNhc2VhX25h dCIpKQoJCXJldCA9IGZyX2RvX2Nhc2VhX25hdCgpOwoJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24s ICJjYXNlYV9uYXQyIikpCgkJcmV0ID0gZnJfZG9fY2FzZWFfbmF0MigpOwoJZWxzZSBpZiAoIXN0 cmNtcChhY3Rpb24sICJjYXNlYiIpKQoJCXJldCA9IGZyX2RvX2Nhc2ViKCk7CgllbHNlIGlmICgh c3RyY21wKGFjdGlvbiwgImNhc2VjX2N0bCIpKQoJCXJldCA9IGZyX2RvX2Nhc2VjX2N0bCgpOwoJ ZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24sICJjYXNlY19uYXQiKSkKCQlyZXQgPSBmcl9kb19jYXNl Y19uYXQoKTsKCWVsc2UKCQlyZXQgPSAtRUlOVkFMOwoKCWRldl9wdXQoZnJfbmRldik7Cglwcl9p bmZvKEZSVEFHICItRE9ORSBhY3Rpb249JXMgcmV0PSVkIGNiX2NhbGxzPSVkXG4iLCBhY3Rpb24s IHJldCwKCQlhdG9taWNfcmVhZCgmZnJfY2JfY2FsbHMpKTsKCXJldHVybiByZXQ7Cn0KCnN0YXRp YyB2b2lkIF9fZXhpdCBmbG93cmFjZV9leGl0KHZvaWQpCnsKfQoKbW9kdWxlX2luaXQoZmxvd3Jh Y2VfaW5pdCk7Cm1vZHVsZV9leGl0KGZsb3dyYWNlX2V4aXQpOwpNT0RVTEVfTElDRU5TRSgiR1BM Iik7Ck1PRFVMRV9ERVNDUklQVElPTigibmV0L2NvcmUgZmxvd19pbmRyIC8geGZybSBzY3JhdGNo IHJhY2UgdmVyaWZpY2F0aW9uIik7Cg== ------=_Part_346981_8732332.1793242018374--