From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 6810047DA4 for ; Wed, 27 Dec 2023 16:26:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9DA1968CA4C; Wed, 27 Dec 2023 18:25:41 +0200 (EET) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6CC1B68C22A for ; Wed, 27 Dec 2023 18:25:32 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 648109C2821 for ; Wed, 27 Dec 2023 11:25:29 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id O7uYHWihYkmf; Wed, 27 Dec 2023 11:25:26 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 93E389C29FB; Wed, 27 Dec 2023 11:25:26 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 93E389C29FB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1703694326; bh=PcART5VU4fqQ1wXYB8BVQ19sYIjpO2uJFkgLtDeK++g=; h=From:To:Date:Message-Id:MIME-Version; b=L76dMfrRUzYj9zrkHer1WmBXNZL2izV9i9p1rj1JHWN9LU3Kxh0QPeGVIADonco4G PRfN6dnERIGKiqYEKEprJr7Gf91otIfR2AA9SqT1cJEJpoZCo7VENJFx31TzAvuH0t aAChLUugP8oTuM3DbAgnr789kmuXRzEz8kfn/Jibgxhtb1Zao0NK3fq3lhAsAlixoD dRQTd2yZ8yrkywBuWWAmF22uID5O3crvNywxjBT/YK6glTt6Duv4tOI2TPqGZ9X3YU 8qyy0cul4L8B7tjjqNMKCGSEr2xdtA1Qhcu3YIgJs+2K8qSbXfqakVha/iOicBxf0g 8FmyyJoQKgnIA== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id xod8Ut6pORbx; Wed, 27 Dec 2023 11:25:26 -0500 (EST) Received: from asuspc2.taile0726.ts.net (unknown [192.168.51.254]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 6F63E9C2821; Wed, 27 Dec 2023 11:25:26 -0500 (EST) From: Abhishek Ojha To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Dec 2023 11:25:02 -0500 Message-Id: <20231227162504.690730-1-abhishek.ojha@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] libavdevice/pipewiregrab: add pipewire based grab X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Abhishek Ojha Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBpcyBhbiBwcm9vZiBvZiBjb25jZXB0IGZvciBwaXBld2lyZSBncmFiIHRvIGVuYWJsZSBz Y3JlZW4gY2FwdHVyZQpvbiB3YXlsYW5kLiBBZGQgYSBuZXcgTGludXggY2FwdHVyZSBiYXNlZCBv biBbMV0gUGlwZVdpcmUgYW5kIHRoZQpbMl0gRGVza3RvcCBwb3J0YWwuClRoaXMgbmV3IGNhcHR1 cmUgc3RhcnRzIGJ5IGFza2luZyB0aGUgRGVza3RvcCBwb3J0YWwgZm9yIGEgc2NyZWVuY2FwdHVy ZQpzZXNzaW9uLlRoZXJlIGFyZSBxdWl0ZSBhIGZldyBELUJ1cyBjYWxscyBpbnZvbHZlZCBpbiB0 aGlzLCBidXQgdGhlIGtleQpwb2ludHMgYXJlOgoKMS4gQSBjb25uZWN0aW9uIHRvIG9yZy5mcmVl ZGVza3RvcC5wb3J0YWwuU2NyZWVuQ2FzdCBpcyBlc3RhYmlsaXNoZWQsCiAgIGFuZCB0aGUgYXZh aWxhYmxlIGN1cnNvciBtb2RlcyBhcmUgdXBkYXRlZC4gQ3VycmVudGx5IG9ubHkgZW1iZWRkZWQK ICAgYW5kIGhpZGRlbiBjdXJyc29yIG1vZGUgZW5hYmxlZC4KCjIuIENhbGwgQ3JlYXRlU2Vzc2lv biB2aWEgZGJ1cyBjYWxsLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIG9mIHRoZQogICBjb21tdW5p Y2F0aW9uLiBSZXNwb25zZSBjYWxsYmFjayByZXR1cm4gdGhlIHN0YXR1cyBvZiBjcmVhdGVkCiAg IHNlc3Npb24uCgozLiBDYWxsIFNlbGVjdFNvdXJjZXMgLiBUaGlzIGlzIHdoZW4gYSBzeXN0ZW0g ZGlhbG9nIHBvcHMgdXAgYXNraW5nCiAgIHRoZSB1c2VyIHRvIGVpdGhlciBzZWxlY3QgYSBtb25p dG9yIChkZXNrdG9wIGNhcHR1cmUpLk9ubHkgbW9uaXRvcgogICBjYXB0dXJlIGlzIGVuYWJsZWQg aW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KCjQuIENhbGwgU3RhcnQgLiBUaGlzIHNpZ25hbHMg dGhlIGNvbXBvc2l0b3IgdGhhdCBpdCBjYW4gc2V0dXAgYSBQaXBlV2lyZQogICBzdHJlYW0sIGFu ZCBzdGFydCBzZW5kaW5nIGJ1ZmZlcnMuCgpBYm92ZSBmbG93IGlzIGltcGxlbWVudGVkIGFzIHBl ciB0aGUgWzJdIHhkZy1kZXNrdG9wLXBvcnRhbC4gT25jZSBmbG93CmlzIGNvbXBsZXRlZCwgcGlw ZXdpcmUgZmQgaXMgcmVjZWl2ZWQgYW5kIHVzaW5nIHRoaXMgcGlwZXdpcmUgc3RyZWFtIGlzCmNy ZWF0ZWQgYW5kIHJlY2VpdmUgYnVmZmVyIGZyb20gdGhlIGNyZWF0ZWQgc3RyZWFtLgoKRm9yIGN1 cnNvciBpbXBsZW1lbnRhdGlvbiwgZW1iZWRkZWQgY3Vyc29yIG1vZGUgaXMgZW5hYmxlZCB0aGF0 IG1lYW5zCmN1cnNvciBtZXRhZGF0YSBpcyBub3QgaGFuZGxlZCBpbiBjdXJyZW50IGltcGxlbWVu dGF0aW9uIGFuZCBoYXMgbm8KY29udHJvbCBvdmVyIHRoZSBjdXJzb3IgYml0bWFwLgoKZ2RidXMv cGlwZXdpcmUgbG9naWMsIHRoaXMgaXMgYmFzZWQgb24gb2JzLXhkZywgZ3N0cGlwZXdpcmUgYW5k CnBpcGV3aXJlIGV4YW1wbGVzLCBhbmQgaW5pdGlhbCBwaXBld2lyZSBncmFiIGxvZ2ljLCB0aGlz IGlzIGJhc2VkIG9uCmxpYmF2ZGV2aWNlL3hjYmdyYWIgYW5kIGxpYmF2ZGV2aWNlL3Y0bDIKClRo aXMgaW1wbGVtZW50YXRpb24gc2hvd3MgdGhlIHNrZWxldG9uIGltcGxlbWVudGF0aW9uIGFuZCBl bmFibGVzIGJhc2ljCmZ1bmN0aW9uYWxpdHkuIEknZCBsaWtlIHRvIGhlYXIgb3BpbmlvbnMgYW5k IHN1Z2dlc3Rpb25zIHRvIGltcHJvdmUgYW5kCnByb3Blcmx5IHVzZSB0aGlzLgoKWzFdIGh0dHBz Oi8vcGlwZXdpcmUub3JnLwpbMl0gaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwYWsveGRnLWRlc2t0 b3AtcG9ydGFsLwoKQmVsb3cgYXJlIHRoZSBhcmd1bWVudHMgZm9yIHBpcGV3aXJlZ3JhYi4KZmZw bGF5IC1mIHBpcGV3aXJlZ3JhYiAtZHJhd19tb3VzZSAxIC1pIDowLjAKClNpZ25lZC1vZmYtYnk6 IEFiaGlzaGVrIE9qaGEgPGFiaGlzaGVrLm9qaGFAc2F2b2lyZmFpcmVsaW51eC5jb20+Ci0tLQog Y29uZmlndXJlICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGxpYmF2ZGV2aWNlL01ha2VmaWxl ICAgICAgIHwgICAgMSArCiBsaWJhdmRldmljZS9hbGxkZXZpY2VzLmMgICB8ICAgIDEgKwogbGli YXZkZXZpY2UvcGlwZXdpcmVncmFiLmMgfCAxODE1ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxODI2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmRldmljZS9waXBld2lyZWdyYWIuYwoKZGlmZiAtLWdpdCBhL2NvbmZp Z3VyZSBiL2NvbmZpZ3VyZQppbmRleCBjZDY2ZTQyODUwLi4zNzUzMjdkNWZhIDEwMDc1NQotLS0g YS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yOTcsNiArMjk3LDcgQEAgRXh0ZXJuYWwg bGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJ4Y2Itc2htICAgICAgZW5hYmxlIFgxMSBn cmFiYmluZyBzaG0gY29tbXVuaWNhdGlvbiBbYXV0b2RldGVjdF0KICAgLS1lbmFibGUtbGlieGNi LXhmaXhlcyAgIGVuYWJsZSBYMTEgZ3JhYmJpbmcgbW91c2UgcmVuZGVyaW5nIFthdXRvZGV0ZWN0 XQogICAtLWVuYWJsZS1saWJ4Y2Itc2hhcGUgICAgZW5hYmxlIFgxMSBncmFiYmluZyBzaGFwZSBy ZW5kZXJpbmcgW2F1dG9kZXRlY3RdCisgIC0tZW5hYmxlLWxpYnBpcGV3aXJlICAgICBlbmFibGUg c2NyZWVuIGdyYWJiaW5nIHVzaW5nIHBpcGV3aXJlIFthdXRvZGV0ZWN0XQogICAtLWVuYWJsZS1s aWJ4dmlkICAgICAgICAgZW5hYmxlIFh2aWQgZW5jb2RpbmcgdmlhIHh2aWRjb3JlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmF0aXZlIE1QRUctNC9YdmlkIGVuY29kZXIgZXhpc3RzIFtu b10KICAgLS1lbmFibGUtbGlieG1sMiAgICAgICAgIGVuYWJsZSBYTUwgcGFyc2luZyB1c2luZyB0 aGUgQyBsaWJyYXJ5IGxpYnhtbDIsIG5lZWRlZApAQCAtMTc4OCw2ICsxNzg5LDggQEAgRVhURVJO QUxfQVVUT0RFVEVDVF9MSUJSQVJZX0xJU1Q9IgogICAgIGxpYnhjYl9zaG0KICAgICBsaWJ4Y2Jf c2hhcGUKICAgICBsaWJ4Y2JfeGZpeGVzCisgICAgbGlicGlwZXdpcmUKKyAgICBsaWJnaW9fdW5p eAogICAgIGx6bWEKICAgICBtZWRpYWZvdW5kYXRpb24KICAgICBtZXRhbApAQCAtMzYzOSw2ICsz NjQyLDcgQEAgdjRsMl9vdXRkZXZfc3VnZ2VzdD0ibGlidjRsMiIKIHZmd2NhcF9pbmRldl9kZXBz PSJ2ZnczMiB2ZndjYXBfZGVmaW5lcyIKIHhjYmdyYWJfaW5kZXZfZGVwcz0ibGlieGNiIgogeGNi Z3JhYl9pbmRldl9zdWdnZXN0PSJsaWJ4Y2Jfc2htIGxpYnhjYl9zaGFwZSBsaWJ4Y2JfeGZpeGVz IgorcGlwZXdpcmVncmFiX2luZGV2X2RlcHM9ImxpYnBpcGV3aXJlIGxpYmdpb191bml4IHB0aHJl YWRzIgogeHZfb3V0ZGV2X2RlcHM9InhsaWJfeHYgeGxpYl94MTEgeGxpYl94ZXh0IgogCiAjIHBy b3RvY29scwpAQCAtNzEwMiw2ICs3MTA2LDExIEBAIGlmIGVuYWJsZWQgbGlieGNiOyB0aGVuCiAg ICAgZW5hYmxlZCBsaWJ4Y2JfeGZpeGVzICYmIGNoZWNrX3BrZ19jb25maWcgbGlieGNiX3hmaXhl cyB4Y2IteGZpeGVzIHhjYi94Zml4ZXMuaCB4Y2JfeGZpeGVzX2dldF9jdXJzb3JfaW1hZ2UKIGZp CiAKK2VuYWJsZWQgbGlicGlwZXdpcmUgJiYgY2hlY2tfcGtnX2NvbmZpZyBsaWJwaXBld2lyZSAi bGlicGlwZXdpcmUtMC4zID49IDAuMy40MCIgcGlwZXdpcmUvcGlwZXdpcmUuaCBwd19pbml0Citp ZiBlbmFibGVkIGxpYnBpcGV3aXJlOyB0aGVuCisgICAgZW5hYmxlZCBsaWJnaW9fdW5peCAmJiBj aGVja19wa2dfY29uZmlnIGxpYmdpb191bml4IGdpby11bml4LTIuMCBnaW8vZ2lvLmggZ19tYWlu X2xvb3BfbmV3CitmaQorCiBjaGVja19mdW5jX2hlYWRlcnMgIndpbmRvd3MuaCIgQ3JlYXRlRElC U2VjdGlvbiAiJGdkaWdyYWJfaW5kZXZfZXh0cmFsaWJzIgogCiAjIGNoZWNrIGlmIGJ1aWxkaW5n IGZvciBkZXNrdG9wIG9yIHV3cApkaWZmIC0tZ2l0IGEvbGliYXZkZXZpY2UvTWFrZWZpbGUgYi9s aWJhdmRldmljZS9NYWtlZmlsZQppbmRleCBjMzA0NDkyMDFkLi5mMDI5NjA3ODJkIDEwMDY0NAot LS0gYS9saWJhdmRldmljZS9NYWtlZmlsZQorKysgYi9saWJhdmRldmljZS9NYWtlZmlsZQpAQCAt NDksNiArNDksNyBAQCBPQkpTLSQoQ09ORklHX1Y0TDJfSU5ERVYpICAgICAgICAgICAgICAgICs9 IHY0bDIubyB2NGwyLWNvbW1vbi5vIHRpbWVmaWx0ZXIubwogT0JKUy0kKENPTkZJR19WNEwyX09V VERFVikgICAgICAgICAgICAgICArPSB2NGwyZW5jLm8gdjRsMi1jb21tb24ubwogT0JKUy0kKENP TkZJR19WRldDQVBfSU5ERVYpICAgICAgICAgICAgICArPSB2ZndjYXAubwogT0JKUy0kKENPTkZJ R19YQ0JHUkFCX0lOREVWKSAgICAgICAgICAgICArPSB4Y2JncmFiLm8KK09CSlMtJChDT05GSUdf UElQRVdJUkVHUkFCX0lOREVWKSAgICAgICAgKz0gcGlwZXdpcmVncmFiLm8KIE9CSlMtJChDT05G SUdfWFZfT1VUREVWKSAgICAgICAgICAgICAgICAgKz0geHYubwogCiAjIGV4dGVybmFsIGxpYnJh cmllcwpkaWZmIC0tZ2l0IGEvbGliYXZkZXZpY2UvYWxsZGV2aWNlcy5jIGIvbGliYXZkZXZpY2Uv YWxsZGV2aWNlcy5jCmluZGV4IDhhOTBmY2I1ZDcuLjFmYTg1NjNkZjQgMTAwNjQ0Ci0tLSBhL2xp YmF2ZGV2aWNlL2FsbGRldmljZXMuYworKysgYi9saWJhdmRldmljZS9hbGxkZXZpY2VzLmMKQEAg LTUzLDYgKzUzLDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Y0bDJfZGVtdXhl cjsKIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl92NGwyX211eGVyOwogZXh0ZXJuIGNv bnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Zmd2NhcF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX3hjYmdyYWJfZGVtdXhlcjsKK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9waXBld2lyZWdyYWJfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBm Zl94dl9tdXhlcjsKIAogLyogZXh0ZXJuYWwgbGlicmFyaWVzICovCmRpZmYgLS1naXQgYS9saWJh dmRldmljZS9waXBld2lyZWdyYWIuYyBiL2xpYmF2ZGV2aWNlL3BpcGV3aXJlZ3JhYi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY3YjhhMWQ5N2MKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmRldmljZS9waXBld2lyZWdyYWIuYwpAQCAtMCwwICsxLDE4MTUgQEAKKy8q CisgKiBQaXBlV2lyZSBpbnB1dCBncmFiYmVyIChTY3JlZW5DYXN0KQorICogQ29weXJpZ2h0IChD KSAyMDIzIFNhdm9pci1mYWlyZSBMaW51eCwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBQaXBld2lyZSBHcmFiIGRlbXV4ZXIK KyAqIEBhdXRob3IgRmlyYXMgQXNoa2FyIDxmaXJhcy5hc2hrYXJAc2F2b2lyZmFpcmVsaW51eC5j b20+CisgKiBAYXV0aG9yIEFiaGlzaGVrIE9qaGEgPGFiaGlzaGVrLm9qaGFAc2F2b2lyZmFpcmVs aW51eC5jb20+CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8ZmNudGwu aD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1 ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRhdG9taWMuaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUg PHN5cy9xdWV1ZS5oPgorCisjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL21hdGhlbWF0aWNzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9wYXJzZXV0aWxzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3Rp bWUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdmZv cm1hdC9hdmZvcm1hdC5oIgorI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2ludGVybmFsLmgiCisjaW5j bHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisKKyNpbmNsdWRlIDxwaXBld2lyZS9waXBld2ly ZS5oPgorI2luY2x1ZGUgPHBpcGV3aXJlL3RocmVhZC1sb29wLmg+CisjaW5jbHVkZSA8c3BhL2Rl YnVnL3R5cGVzLmg+CisjaW5jbHVkZSA8c3BhL3BhcmFtL3ZpZGVvL2Zvcm1hdC11dGlscy5oPgor I2luY2x1ZGUgPHNwYS9wYXJhbS92aWRlby90eXBlLWluZm8uaD4KKworI2luY2x1ZGUgPGdpby9n aW8uaD4KKyNpbmNsdWRlIDxnaW8vZ3VuaXhmZGxpc3QuaD4KKworI2lmbmRlZiBfX1VTRV9YT1BF TjJLOAorI2RlZmluZSBGX0RVUEZEX0NMT0VYRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAxMDMwIC8qIER1cGxpY2F0ZSBmaWxl IGRlc2NyaXB0b3Igd2l0aCBjbG9zZS1vbi1leGl0IHNldC4gICovCisjZW5kaWYKKworI2RlZmlu ZSBCWVRFU19QRVJfUElYRUwgNCAvKiBjdXJyZW50bHkgYWxsIGZvcm1hdHMgYXNzdW1lIDQgYnl0 ZXMgcGVyIHBpeGVsICovCisjZGVmaW5lIFJFUVVFU1RfUEFUSCAiL29yZy9mcmVlZGVza3RvcC9w b3J0YWwvZGVza3RvcC9yZXF1ZXN0LyVzL29icyV1IgorI2RlZmluZSBTRVNTSU9OX1BBVEggIi9v cmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3Avc2Vzc2lvbi8lcy9vYnMldSIKKyNkZWZpbmUg TUFYX1NQQV9QQVJBTSA0IC8qIG1heCBudW1iZXIgb2YgcGFyYW1zIGZvciBzcGEgcG9kICovCisK KyNkZWZpbmUgQ1VSU09SX01FVEFfU0laRSh3aWR0aCwgaGVpZ2h0KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHNpemVvZihzdHJ1Y3Qgc3BhX21ldGFfY3Vy c29yKSArIHNpemVvZihzdHJ1Y3Qgc3BhX21ldGFfYml0bWFwKSArICAgICAgICAgXAorICAgICB3 aWR0aCAqIGhlaWdodCAqIDQpCisKKy8qKgorICogUGlwZXdpcmUgY2FwdHVyZSB0eXBlcworICov Cit0eXBlZGVmIGVudW0geworICAgIERFU0tUT1BfQ0FQVFVSRSA9IDEsCisgICAgV0lORE9XX0NB UFRVUkUgPSAyLAorfSBwd19jYXB0dXJlX3R5cGU7CisKKy8qKgorICogUGlwZXdpcmUgdmVyc2lv biBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IEZGbXBlZ1B3VmVyc2lvbiB7CisgICAgaW50IG1ham9y OworICAgIGludCBtaW5vcjsKKyAgICBpbnQgbWljcm87Cit9OworCisvKioKKyAqIFBpcGV3aXJl IHN0cnVjdHVyZSBmb3IgZnJhbWUgcHJvY2Vzc2luZworICovCitzdHJ1Y3QgUHdTdHJlYW1BbmRC dWZmZXIgeworICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4OworICAgIHN0cnVjdCBwd19zdHJlYW0g KnB3X3N0cmVhbTsKKyAgICBzdHJ1Y3QgcHdfYnVmZmVyICpwd19idWY7Cit9OworCisvKioKKyAq IFBpcGV3aXJlIHN1cHBvcnRlZCBjdXJzb3IgbW9kZXMKKyAqLworZW51bSBQb3J0YWxDdXJzb3JN b2RlIHsKKyAgICBQT1JUQUxfQ1VSU09SX01PREVfSElEREVOID0gMSA8PCAwLAorICAgIFBPUlRB TF9DVVJTT1JfTU9ERV9FTUJFRERFRCA9IDEgPDwgMSwKKyAgICBQT1JUQUxfQ1VSU09SX01PREVf TUVUQURBVEEgPSAxIDw8IDIsCit9OworCisvKioKKyAqIFBpcGVXaXJlIEdyYWIgbWFpbiBzdHJ1 Y3R1cmUKKyAqIENvbnRhaW5zIGFsbCBuZWNlc3NhcnkgZGF0YSB0aGF0IGhvbGQgY3VycmVudCBz dGF0ZQorICogSW5pdGlhbCBzdGF0ZSBvZiB0aGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgYnkgbGli YXZkZXZpY2UKKyAqIGxvZ2ljIHdoZW4gZGVjbGFyaW5nIHRoZSBBVklucHV0Rm9ybWF0IGZmX3Bp cGV3aXJlZ3JhYl9kZW11eGVyLgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdl9kYXRhIG9mIEFW Rm9ybWF0Q29udGV4dCBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGlwZXdpcmVHcmFi Q29udGV4dCB7CisgICAgLyoqIHRocmVhZCB1c2VkIHRvIGludGlhbGl6ZS9zdGFydCBwaXBld2ly ZSBsb2dpYyAqLworICAgIHB0aHJlYWRfdCBwaXBld2lyZV9wdGhyZWFkOworCisgICAgLyoqIGNv bmRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBsb2dpYyBlbGVjbWVudHMgYmV0d2VlbiBwaXBld2ly ZQorICAgICAqIHRocmVhZCBhbmQgbGliYXZkZXZpY2UgdGhyZWFkLgorICAgICAqLworICAgIHB0 aHJlYWRfY29uZF90IGF2c3RyZWFtX2NvZGVjX2NvbmRfdmFyOworICAgIHB0aHJlYWRfbXV0ZXhf dCBhdnN0cmVhbV9jb2RlY19tdXRleDsKKyAgICBhdG9taWNfaW50IGF2c3RyZWFtX2NvZGVjX2Zs YWc7CisKKyAgICBwdGhyZWFkX211dGV4X3QgY3VycmVudF9wa3RfbXV0ZXg7CisgICAgQVZQYWNr ZXQqIGN1cnJlbnRfcGt0OworCisgICAgR0RCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uOworICAg IEdEQnVzUHJveHkgKnByb3h5OworICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7CisKKyAg ICBjaGFyICpzZW5kZXJfbmFtZTsKKyAgICBjaGFyICpzZXNzaW9uX2hhbmRsZTsKKworICAgIHVp bnQzMl90IHBpcGV3aXJlX25vZGU7CisgICAgaW50IHBpcGV3aXJlX2ZkOworCisgICAgdWludDMy X3QgYXZhaWxhYmxlX2N1cnNvcl9tb2RlczsKKworICAgIEdNYWluTG9vcCAqZ2xpYl9tYWluX2xv b3A7CisgICAgc3RydWN0IHB3X3RocmVhZF9sb29wICp0aHJlYWRfbG9vcDsKKyAgICBzdHJ1Y3Qg cHdfY29udGV4dCAqY29udGV4dDsKKworICAgIHN0cnVjdCBwd19jb3JlICpjb3JlOworICAgIHN0 cnVjdCBzcGFfaG9vayBjb3JlX2xpc3RlbmVyOworCisgICAgc3RydWN0IHB3X3N0cmVhbSAqc3Ry ZWFtOworICAgIHN0cnVjdCBzcGFfaG9vayBzdHJlYW1fbGlzdGVuZXI7CisgICAgc3RydWN0IHNw YV92aWRlb19pbmZvIGZvcm1hdDsKKworICAgIHB3X2NhcHR1cmVfdHlwZSBjYXB0dXJlX3R5cGU7 CisgICAgYm9vbCBuZWdvdGlhdGVkOworCisgICAgLyoqPCBkcmF3X21vdXNlIGlzIHRvIGNvbnRy b2wgdGhlIGVuYWJsZS9kaXNhYmxlIG1vdXNlIGN1cnNvciAqLworICAgIGludCBkcmF3X21vdXNl OworCisgICAgLyoqIGN1cnNvciBtZXRhZGF0YSAqLworICAgIHN0cnVjdCB7CisgICAgICAgIGlu dCB2aXNpYmxlOworICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAgaW50IGhvdHNwb3RfeCwgaG90 c3BvdF95OworICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICB9IGN1cnNvcjsKKworICAg IC8qKjwgV2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ3JhYiBmcmFtZSAocHJpdmF0ZSBvcHRpb24p ICovCisgICAgdWludDMyX3Qgd2lkdGgsIGhlaWdodDsKKworICAgIC8qKjwgU2l6ZSBpbiBieXRl cyBvZiB0aGUgZnJhbWUgcGl4ZWwgZGF0YSAqLworICAgIHNpemVfdCBmcmFtZV9zaXplOworICAg IHVpbnQ4X3QgQnBwOworICAgIGVudW0gQVZQaXhlbEZvcm1hdCBhdl9weGxfZm9ybWF0OworCisg ICAgaW50NjRfdCB0aW1lX2ZyYW1lOworICAgIGludDY0X3QgZnJhbWVfZHVyYXRpb247CisKKyAg ICBjb25zdCBBVkNsYXNzICpjbGFzczsKKworICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlOworICAg IHN0cnVjdCBGRm1wZWdQd1ZlcnNpb24gc2VydmVyX3ZlcnNpb247CisgICAgaW50IHNlcnZlcl92 ZXJzaW9uX3N5bmM7CisKKyAgICAvL2RidXMgdG9rZW4KKyAgICB1aW50MzJfdCByZXF1ZXN0X3Rv a2VuX2NvdW50OworICAgIHVpbnQzMl90IHNlc3Npb25fdG9rZW5fY291bnQ7Cit9IFBpcGV3aXJl R3JhYkNvbnRleHQ7CisKKy8qKgorICogZGJ1cydzIG1ldGhvZC9ldmVudCBtYXJzaGFsbGluZyBz dHJ1Y3R1cmUKKyAqLworc3RydWN0IERidXNDYWxsRGF0YSB7CisgICAgQVZGb3JtYXRDb250ZXh0 ICpjdHg7CisgICAgY2hhciAqcmVxdWVzdF9wYXRoOworICAgIGd1aW50IHNpZ25hbF9pZDsKKyAg ICBndWxvbmcgY2FuY2VsbGVkX2lkOworfTsKKworCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihQaXBld2lyZUdyYWJDb250ZXh0LCB4KQorI2RlZmluZSBEIEFWX09QVF9GTEFHX0RFQ09ESU5H X1BBUkFNCitzdGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0geworICAgIHsgImZyYW1l cmF0ZSIsCisgICAgICAiIiwKKyAgICAgIE9GRlNFVChmcmFtZXJhdGUpLAorICAgICAgQVZfT1BU X1RZUEVfVklERU9fUkFURSwKKyAgICAgIHsgLnN0ciA9ICJudHNjIiB9LAorICAgICAgMCwKKyAg ICAgIElOVF9NQVgsCisgICAgICBEIH0sCisgICAgeyAiZHJhd19tb3VzZSIsCisgICAgICAiRHJh dyB0aGUgbW91c2UgcG9pbnRlci4iLAorICAgICAgT0ZGU0VUKGRyYXdfbW91c2UpLAorICAgICAg QVZfT1BUX1RZUEVfSU5ULAorICAgICAgeyAuaTY0ID0gMCB9LAorICAgICAgMCwKKyAgICAgIDEs CisgICAgICBEIH0sCisgICAgeyBOVUxMIH0sCit9OworCisvKioKKyAqIEZ1bmN0aW9uIHBhcnNl IHRoZSBwaXBld2lyZSB2ZXJzaW9uCisgKiBAcGFyYW0gZHN0IEZtcGVnUHdWZXJzaW9uIHRoYXQg Y29udGFpbnMgUGlwZVdpcmUgdmVyc2lvbiBpbmZvCisgKiBAcGFyYW0gdmVyc2lvbiBwaXBld2ly ZSB2ZXJzaW9uCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcHdfdmVyc2lvbihzdHJ1Y3QgRkZtcGVn UHdWZXJzaW9uICpkc3QsIGNvbnN0IGNoYXIgKnZlcnNpb24pCit7CisgICAgaW50IG5fbWF0Y2hl cyA9IHNzY2FuZih2ZXJzaW9uLCAiJWQuJWQuJWQiLCAmZHN0LT5tYWpvciwgJmRzdC0+bWlub3Is CisgICAgICAgICAgICAgICAgICAgJmRzdC0+bWljcm8pOworICAgIHJldHVybiAobl9tYXRjaGVz ID09IDMpID8gMCA6IC0xOworfQorCisvKioKKyAqIEZ1bmN0aW9uIHVwZGF0ZSB0aGUgcGlwZXdp cmUgdmVyc2lvbiBpbiBwcml2YXRlIGRhdGEKKyAqIHBhcmFtcywgdGhlbiBzaWduYWwgdGhlIGJs b2NrZWQgQHJlZiBwaXBld2lyZWdyYWJfcmVhZF9oZWFkZXIKKyAqCisgKiBAcGFyYW0gY3R4IEFW Rm9ybWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdyYWIgbWFpbiBzdHJ1Y3R1cmUK KyAqIEBwYXJhbSB2ZXJzaW9uIHBpcGV3aXJlIHZlcnNpb24KKyAqLworc3RhdGljIHZvaWQgdXBk YXRlX3B3X3ZlcnNpb25zKEFWRm9ybWF0Q29udGV4dCAqY3R4LCBjb25zdCBjaGFyICp2ZXJzaW9u KQoreworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwor ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlNlcnZlciB2ZXJzaW9uOiAlc1xuIiwgdmVy c2lvbik7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJMaWJyYXJ5IHZlcnNpb246ICVz XG4iLAorICAgICAgICBwd19nZXRfbGlicmFyeV92ZXJzaW9uKCkpOworICAgIGF2X2xvZyhjdHgs IEFWX0xPR19ERUJVRywgIkhlYWRlciB2ZXJzaW9uOiAlc1xuIiwKKyAgICAgICAgcHdfZ2V0X2hl YWRlcnNfdmVyc2lvbigpKTsKKworICAgIGlmIChwYXJzZV9wd192ZXJzaW9uKCZwd19jdHgtPnNl cnZlcl92ZXJzaW9uLCB2ZXJzaW9uKSA8IDApCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiIp OworfQorCisvKioKKyAqIEFWU3RyZWFtIGNyZWF0b3IKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBhIHZhbGlkIEFWU3RyZWFtIGJhc2VkIG9uIHBpcGV3aXJlJ3MgbmVnb3RpYXRlZAorICogcGFy YW1zLCB0aGVuIHNpZ25hbCB0aGUgYmxvY2tlZCBAcmVmIHBpcGV3aXJlZ3JhYl9yZWFkX2hlYWRl cgorICoKKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRDb250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdp cmUgR3JhYiBtYWluIHN0cnVjdHVyZQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJST1Ig b24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9mZm1wZWdfc3RyZWFtKEFWRm9ybWF0 Q29udGV4dCAqY3R4KQoreworICAgIGludDY0X3QgZnJhbWVfc2l6ZV9iaXRzOworICAgIEFWU3Ry ZWFtICphdnN0cmVhbTsKKyAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZTsKKworICAgIFBpcGV3aXJl R3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7 CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZh bGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7CisgICAgfQorCisgICAgYXZzdHJlYW0gPSBhdmZvcm1hdF9uZXdfc3RyZWFtKGN0eCwg TlVMTCk7CisgICAgaWYgKCFhdnN0cmVhbSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsCisgICAgICAgICAgICAgICAiYXZmb3JtYXRfbmV3X3N0cmVhbSBmYWlsZWQhXG4iKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBhdnN0cmVhbS0+ YXZnX2ZyYW1lX3JhdGUgPSBwd19jdHgtPmZyYW1lcmF0ZTsKKworICAgIC8qIDY0IGJpdHMgcHRz IGluIG1pY3Jvc2Vjb25kcyAqLworICAgIGF2cHJpdl9zZXRfcHRzX2luZm8oYXZzdHJlYW0sIDY0 LCAxLCAxMDAwMDAwKTsKKworICAgIHRpbWVfYmFzZSA9IGF2X21ha2VfcShhdnN0cmVhbS0+YXZn X2ZyYW1lX3JhdGUuZGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2c3Ry ZWFtLT5hdmdfZnJhbWVfcmF0ZS5udW0pOworICAgIHB3X2N0eC0+ZnJhbWVfZHVyYXRpb24gPSBh dl9yZXNjYWxlX3EoMSwgdGltZV9iYXNlLCBBVl9USU1FX0JBU0VfUSk7CisgICAgcHdfY3R4LT50 aW1lX2ZyYW1lID0gYXZfZ2V0dGltZV9yZWxhdGl2ZSgpOworCisgICAgZnJhbWVfc2l6ZV9iaXRz ID0gKGludDY0X3QpcHdfY3R4LT53aWR0aCAqIHB3X2N0eC0+aGVpZ2h0ICogcHdfY3R4LT5CcHAg KiA4OworICAgIGF2c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9W SURFTzsKKyAgICBhdnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfUkFX VklERU87CisgICAgYXZzdHJlYW0tPmNvZGVjcGFyLT53aWR0aCA9IHB3X2N0eC0+d2lkdGg7Cisg ICAgYXZzdHJlYW0tPmNvZGVjcGFyLT5oZWlnaHQgPSBwd19jdHgtPmhlaWdodDsKKyAgICBhdnN0 cmVhbS0+Y29kZWNwYXItPmJpdF9yYXRlID0KKyAgICAgICAgYXZfcmVzY2FsZShmcmFtZV9zaXpl X2JpdHMsIGF2c3RyZWFtLT5hdmdfZnJhbWVfcmF0ZS5udW0sCisgICAgICAgICAgICAgICAgICAg YXZzdHJlYW0tPmF2Z19mcmFtZV9yYXRlLmRlbik7CisgICAgYXZzdHJlYW0tPmNvZGVjcGFyLT5m b3JtYXQgPSBwd19jdHgtPmF2X3B4bF9mb3JtYXQ7CisKKyAgICBhdG9taWNfc3RvcmUoJnB3X2N0 eC0+YXZzdHJlYW1fY29kZWNfZmxhZywgMSk7CisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcHdf Y3R4LT5hdnN0cmVhbV9jb2RlY19jb25kX3Zhcik7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoq CisgKiBQaXBld2lyZSBtYW51YWwgYWJvcnQKKyAqCisgKiBAcGFyYW0gdXNlcl9kYXRhIEFWRm9y bWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdyYWIgbWFpbiBzdHJ1Y3R1cmUKKyAq IEBwYXJhbSBtZXNzYWdlIGFib3J0IG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgcGlwZXdpcmVn cmFiX2Fib3J0KHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBB VkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0 ICpwd19jdHg7CisKKyAgICBpZiAoIWN0eCB8fCAhY3R4LT5wcml2X2RhdGEpCisgICAgICAgIHJl dHVybjsKKworICAgIHB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworCisgICAgYXRvbWljX3N0b3Jl KCZwd19jdHgtPmF2c3RyZWFtX2NvZGVjX2ZsYWcsIDEpOworICAgIHB0aHJlYWRfY29uZF9zaWdu YWwoJnB3X2N0eC0+YXZzdHJlYW1fY29kZWNfY29uZF92YXIpOworCisgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiQWJvcnRpbmc6ICVzXG4iLCBtZXNzYWdlKTsKKworICAgIGlmICghcHdf Y3R4LT50aHJlYWRfbG9vcCkKKyAgICAgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3X2N0eC0+ dGhyZWFkX2xvb3AsIGZhbHNlKTsKKworICAgIGlmICghcHdfY3R4LT5nbGliX21haW5fbG9vcCAm JgorICAgICAgICBnX21haW5fbG9vcF9pc19ydW5uaW5nKHB3X2N0eC0+Z2xpYl9tYWluX2xvb3Ap KSB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQocHdfY3R4LT5nbGliX21haW5fbG9vcCk7Cisg ICAgfQorfQorCisvKioKKyAqIFBpcGV3aXJlIGNvcmUgaW5mbyBldmVudAorICoKKyAqIEBwYXJh bSB1c2VyX2RhdGEgQVZGb3JtYXRDb250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUgR3JhYiBt YWluIHN0cnVjdHVyZQorICogQHBhcmFtIGluZm8gcHdfY29yZV9pbmZvCisgKi8KK3N0YXRpYyB2 b2lkIG9uX2NvcmVfaW5mb19jYih2b2lkICp1c2VyX2RhdGEsIGNvbnN0IHN0cnVjdCBwd19jb3Jl X2luZm8gKmluZm8pCit7CisgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1c2VyX2RhdGE7Cisg ICAgdXBkYXRlX3B3X3ZlcnNpb25zKGN0eCwgaW5mby0+dmVyc2lvbik7Cit9CisKKy8qKgorICog UGlwZXdpcmUgY29yZSBjb21wbGV0aW9uIGV2ZW50CisgKgorICogQHBhcmFtIHVzZXJfZGF0YSBB VkZvcm1hdENvbnRleHQgdGhhdCBjb250YWlucyBQaXBlV2lyZSBHcmFiIG1haW4gc3RydWN0dXJl CisgKiBAcGFyYW0gaWQgcGlwZXdpcmUgb2JqZWN0IGlkIG9mIGNhbGxpbmcKKyAqIEBwYXJhbSBz ZXEgcGlwZXdpcmUgb2JqZWN0IHNlcXVlbmNlCisgKi8KK3N0YXRpYyB2b2lkIG9uX2NvcmVfZG9u ZV9jYWxsYmFjayh2b2lkICp1c2VyX2RhdGEsIHVpbnQzMl90IGlkLCBpbnQgc2VxKQoreworICAg IEFWRm9ybWF0Q29udGV4dCAqY3R4ID0gdXNlcl9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRl eHQgKnB3X2N0eDsKKworICAgIGlmICghY3R4IHx8ICFjdHgtPnByaXZfZGF0YSkKKyAgICAgICAg cmV0dXJuOworCisgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIklu dmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K KyAgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFsaWQgcHJp dmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm IChpZCA9PSBQV19JRF9DT1JFKSB7CisgICAgICAgIHB3X3RocmVhZF9sb29wX3NpZ25hbChwd19j dHgtPnRocmVhZF9sb29wLCBmYWxzZSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQocHdfY3R4 LT5nbGliX21haW5fbG9vcCk7CisgICAgfQorfQorCisvKioKKyAqIFBpcGV3aXJlIGNvcmUgZXJy b3IgZXZlbnQKKyAqCisgKiBAcGFyYW0gdXNlcl9kYXRhIEFWRm9ybWF0Q29udGV4dCB0aGF0IGNv bnRhaW5zIFBpcGVXaXJlIEdyYWIgbWFpbiBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBpZCBwaXBld2ly ZSBvYmplY3QgaWQgb2YgY2FsbGluZworICogQHBhcmFtIHNlcSBwaXBld2lyZSBvYmplY3Qgc2Vx dWVuY2UKKyAqIEBwYXJhbSByZXMgZXJyb3IgbnVtYmVyCisgKiBAcGFyYW0gbWVzc2FnZSBlcnJv ciBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIG9uX2NvcmVfZXJyb3JfY2FsbGJhY2sodm9pZCAq dXNlcl9kYXRhLCB1aW50MzJfdCBpZCwgaW50IHNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHJlcywgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBBVkZvcm1h dENvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19j dHg7CisKKyAgICBpZiAoIWN0eCB8fCAhY3R4LT5wcml2X2RhdGEpCisgICAgICAgIHJldHVybjsK KworICAgIHB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHBy aXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICJFcnJvciBpZDoldSBzZXE6JWQg cmVzOiVkICglcyk6ICVzXG4iLCBpZCwgc2VxLCByZXMsCisgICAgICAgICAgIGdfc3RyZXJyb3Io cmVzKSwgbWVzc2FnZSk7CisKKyAgICBwd190aHJlYWRfbG9vcF9zaWduYWwocHdfY3R4LT50aHJl YWRfbG9vcCwgZmFsc2UpOworICAgIGdfbWFpbl9sb29wX3F1aXQocHdfY3R4LT5nbGliX21haW5f bG9vcCk7Cit9CisKKy8qKgorICogUmVnaXN0ZXIgcGlwZXdpcmUgY29yZSBldmVudCBjYWxsYmFj a3MgaGVyZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHB3X2NvcmVfZXZlbnRzIGNvcmVfZXZl bnRzID0geworICAgIFBXX1ZFUlNJT05fQ09SRV9FVkVOVFMsCisgICAgLmluZm8gPSBvbl9jb3Jl X2luZm9fY2IsCisgICAgLmRvbmUgPSBvbl9jb3JlX2RvbmVfY2FsbGJhY2ssCisgICAgLmVycm9y ID0gb25fY29yZV9lcnJvcl9jYWxsYmFjaywKK307CisKKy8qKgorICogaGVscGVyIGZ1bmN0aW9u OiBjcmVhdGUgYSBuZXcgcGF0aCB0byBkYnVzIGRlc2t0b3Agb2JqZWN0IHJlcXVlc3QgbWV0aG9k CisgKgorICogQHBhcmFtIGN0eCBBVkZvcm1hdENvbnRleHQgdGhhdCBjb250YWlucyBQaXBlV2ly ZSBHcmFiIG1haW4gc3RydWN0dXJlCisgKiBAcGFyYW0gb3V0X3BhdGggZGJ1cyB0b2tlbiBjb3Vu dAorICogQHBhcmFtIG91dF90b2tlbiBmaW5hbCBvYmplY3QvaW50ZXJmYWNlIHBhdGggZm9yIHJl cXVlc3QgbWV0aG9kCisgKiBAcGFyYW0gdG9rZW5fY291bnQgdmFsdWUgb2YgdG9rZW4gY291bnQg bWFpbnRhaW5lZCBpbiBwcml2YXRlIEdyYWIgc3RydWN0dXJlCisgKiBAcGFyYW0gcGF0aF9mb3Jt YXQgcGF0aCBmb3IgZGJ1cyBSRVFVRVNUL1NFU1NJT04KKyAqLworc3RhdGljIHZvaWQgbmV3X3Bh dGgoQVZGb3JtYXRDb250ZXh0ICpjdHgsIGNoYXIgKipvdXRfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKm91dF90b2tlbiwgdWludDMyX3QgKnRva2VuX2NvdW50LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoX2Zvcm1hdCkKK3sK KyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKKyAgICBp ZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAg ICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAgICAgICByZXR1 cm47CisgICAgfQorCisgICAgKCp0b2tlbl9jb3VudCkrKzsKKworICAgIGlmIChvdXRfdG9rZW4p CisgICAgICAgICpvdXRfdG9rZW4gPSBnX3N0cmR1cF9wcmludGYoIm9icyV1IiwgKnRva2VuX2Nv dW50KTsKKworICAgIGlmIChvdXRfcGF0aCkKKyAgICAgICAgKm91dF9wYXRoID0gZ19zdHJkdXBf cHJpbnRmKHBhdGhfZm9ybWF0LCBwd19jdHgtPnNlbmRlcl9uYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKnRva2VuX2NvdW50KTsKK30KKworLyoqCisgKiBoZWxwZXIg ZnVuY3Rpb246IGNvbnZlcnQgc3BhIHBpeGVsIGZvcm1hdCB0byBhdiBwaXhlbCBmb3JtYXQKKyAq CisgKiBAcGFyYW0gc3BhX2Zvcm1hdCBjb25hdGlucyBzcGEgZm9ybWF0IHZhbHVlCisgKiBAcmV0 dXJuIEFWUGl4ZWxGb3JtYXQKKyAqLworc3RhdGljIGVudW0gQVZQaXhlbEZvcm1hdAorc3BhX3Bp eGVsX2Zvcm1hdF90b19hdl9waXhlbF9mb3JtYXQodWludDMyX3Qgc3BhX2Zvcm1hdCkKK3sKKyAg ICBzd2l0Y2ggKHNwYV9mb3JtYXQpIHsKKyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfUkdCQToK KyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfUkdCeDoKKyAgICAgICAgcmV0dXJuIEFWX1BJWF9G TVRfUkdCQTsKKworICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9CR1JBOgorICAgIGNhc2UgU1BB X1ZJREVPX0ZPUk1BVF9CR1J4OgorICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9CR1JBOworCisg ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKKyAgICB9Cit9CisK Ky8qKgorICogaGVscGVyIGZ1bmN0aW9uOiBncmFjZWZ1bGx5IHN0b3AvZGVzdHJveSBvZiBwaXBl d2lyZSBvYmplY3RzCisgKgorICogQHBhcmFtIGN0eCBBVkZvcm1hdENvbnRleHQgdGhhdCBjb250 YWlucyBQaXBlV2lyZSBHcmFiIG1haW4gc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHRlYXJk b3duX3BpcGV3aXJlKEFWRm9ybWF0Q29udGV4dCAqY3R4KQoreworICAgIFBpcGV3aXJlR3JhYkNv bnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHBy aXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp ZiAocHdfY3R4LT50aHJlYWRfbG9vcCkgeworICAgICAgICBwd190aHJlYWRfbG9vcF91bmxvY2so cHdfY3R4LT50aHJlYWRfbG9vcCk7CisgICAgICAgIHB3X3RocmVhZF9sb29wX3N0b3AocHdfY3R4 LT50aHJlYWRfbG9vcCk7CisgICAgfQorCisgICAgaWYgKHB3X2N0eC0+c3RyZWFtKSB7CisgICAg ICAgIHB3X3N0cmVhbV9kaXNjb25uZWN0KHB3X2N0eC0+c3RyZWFtKTsKKyAgICAgICAgZ19jbGVh cl9wb2ludGVyKCZwd19jdHgtPnN0cmVhbSwgcHdfc3RyZWFtX2Rlc3Ryb3kpOworICAgICAgICBw d19jdHgtPnN0cmVhbSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHB3X2N0eC0+Y29yZSl7Cisg ICAgICAgIHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOworICAgICAgICBwd19jdHgt PmNvcmUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChwd19jdHgtPmNvbnRleHQpIHsKKyAgICAg ICAgcHdfY29udGV4dF9kZXN0cm95KHB3X2N0eC0+Y29udGV4dCk7CisgICAgICAgIHB3X2N0eC0+ Y29udGV4dCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHB3X2N0eC0+dGhyZWFkX2xvb3ApIHsK KyAgICAgICAgcHdfdGhyZWFkX2xvb3BfZGVzdHJveShwd19jdHgtPnRocmVhZF9sb29wKTsKKyAg ICAgICAgcHdfY3R4LT50aHJlYWRfbG9vcCA9IE5VTEw7CisgICAgfQorCisgICAgcHdfY3R4LT5u ZWdvdGlhdGVkID0gZmFsc2U7Cit9CisKKy8qKgorICogaGVscGVyIGZ1bmN0aW9uOiBncmFjZWZ1 bGx5IHN0b3AvZGVzdHJveSBvZiBkYnVzIHNlc3Npb24KKyAqCisgKiBAcGFyYW0gY3R4IEFWRm9y bWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdyYWIgbWFpbiBzdHJ1Y3R1cmUKKyAq Lworc3RhdGljIHZvaWQgZGVzdHJveV9zZXNzaW9uKEFWRm9ybWF0Q29udGV4dCAqY3R4KQorewor ICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlm ICghcHdfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAg ICAgICAgICJJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgICBpZiAocHdfY3R4LT5zZXNzaW9uX2hhbmRsZSkgeworICAgICAgICBn X2RidXNfY29ubmVjdGlvbl9jYWxsKAorICAgICAgICAgICAgcHdfY3R4LT5jb25uZWN0aW9uLCAi b3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiwKKyAgICAgICAgICAgIHB3X2N0eC0+c2Vz c2lvbl9oYW5kbGUsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlNlc3Npb24iLCAiQ2xvc2UiLAor ICAgICAgICAgICAgTlVMTCwgTlVMTCwgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIE5VTEws IE5VTEwsIE5VTEwpOworCisgICAgICAgIGdfY2xlYXJfcG9pbnRlcigmcHdfY3R4LT5zZXNzaW9u X2hhbmRsZSwgZ19mcmVlKTsKKyAgICB9CisKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChwd19j dHgtPmNhbmNlbGxhYmxlKTsKKyAgICBnX2NsZWFyX29iamVjdCgmcHdfY3R4LT5jYW5jZWxsYWJs ZSk7CisgICAgZ19jbGVhcl9vYmplY3QoJnB3X2N0eC0+Y29ubmVjdGlvbik7CisgICAgZ19jbGVh cl9vYmplY3QoJnB3X2N0eC0+cHJveHkpOworICAgIGdfY2xlYXJfcG9pbnRlcigmcHdfY3R4LT5z ZW5kZXJfbmFtZSwgZ19mcmVlKTsKK30KKworLyoqCisgKiBoZWxwZXIgZnVuY3Rpb246IGdyYWNl ZnVsbHkgc3RvcC9kZXN0cm95IG9mIHBpcGV3aXJlL2RidXMgc2Vzc2lvbgorICoKKyAqIEBwYXJh bSBjdHggQVZGb3JtYXRDb250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUgR3JhYiBtYWluIHN0 cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBwaXBld2lyZV9kZXN0cm95KEFWRm9ybWF0Q29udGV4 dCAqY3R4KQoreworICAgIHRlYXJkb3duX3BpcGV3aXJlKGN0eCk7CisgICAgZGVzdHJveV9zZXNz aW9uKGN0eCk7Cit9CisKKy8qKgorICogY2FsbGJhY2sgdG8gc3RvcC9kaXNjb25uZWN0IGN1cnJl bnQgZGJ1cyBzZXNzaW9uCisgKgorICogQHBhcmFtIHB0cl9kYnVzX2NhbGxfZGF0YSBkYnVzIG1h cnNoYWxsaW5nIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBkYnVzX2NhbGxfZGF0YV9mcmVl KHN0cnVjdCBEYnVzQ2FsbERhdGEgKnB0cl9kYnVzX2NhbGxfZGF0YSkKK3sKKyAgICBBVkZvcm1h dENvbnRleHQgKmN0eDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHg7CisKKyAgICBp ZiAoIXB0cl9kYnVzX2NhbGxfZGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3R4ID0gcHRy X2RidXNfY2FsbF9kYXRhLT5jdHg7CisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsKKwor ICAgIHB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7CisgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHByaXZh dGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo cHRyX2RidXNfY2FsbF9kYXRhLT5zaWduYWxfaWQpCisgICAgICAgIGdfZGJ1c19jb25uZWN0aW9u X3NpZ25hbF91bnN1YnNjcmliZShwd19jdHgtPmNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2RhdGEtPnNpZ25hbF9p ZCk7CisKKyAgICBpZiAocHRyX2RidXNfY2FsbF9kYXRhLT5jYW5jZWxsZWRfaWQgPiAwKQorICAg ICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QocHdfY3R4LT5jYW5jZWxsYWJsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9kYnVzX2NhbGxfZGF0YS0+Y2Fu Y2VsbGVkX2lkKTsKKworICAgIGdfY2xlYXJfcG9pbnRlcigmcHRyX2RidXNfY2FsbF9kYXRhLT5y ZXF1ZXN0X3BhdGgsIGdfZnJlZSk7CisgICAgYXZfZnJlZShwdHJfZGJ1c19jYWxsX2RhdGEpOwor fQorCisvKioKKyAqIGRidXMgY2FsbGJhY2sgb2YgY2FuY2VsbGVkIGV2ZW50cworICoKKyAqIEBw YXJhbSBjYW5jZWxsYWJsZSBub3QgdXNlZAorICogQHBhcmFtIHVzZXJfZGF0YSBkYnVzIG1hcnNo YWxsaW5nIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBvbl9jYW5jZWxsZWRfY2FsbGJhY2so R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIHN0 cnVjdCBEYnVzQ2FsbERhdGEgKnB0cl9kYnVzX2NhbGxfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICBB VkZvcm1hdENvbnRleHQgKmN0eCA9IHB0cl9kYnVzX2NhbGxfZGF0YS0+Y3R4OworICAgIFBpcGV3 aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworCisgICAgaWYgKCFwd19j dHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAg IkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiU2NyZWVuY2FzdCBzZXNzaW9uIGNh bmNlbGxlZCFcbiIpOworCisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fY2FsbChwd19jdHgtPmNvbm5l Y3Rpb24sICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLkRlc2t0b3AiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRyX2RidXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiwgIkNsb3Nl IiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEdfREJVU19DQUxMX0ZM QUdTX05PTkUsIC0xLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworLyoqCisgKiBwaXBld2lyZSBj YWxsYmFjayBvZiBwYXJhbWV0ZXJzIGNoYW5nZWQgZXZlbnRzCisgKgorICogQHBhcmFtIHVzZXJf ZGF0YSBkYnVzIG1hcnNoYWxsaW5nIHN0cnVjdHVyZQorICogQHBhcmFtIGlkIGNvbnRhaW5zIGNo YW4gcGFyYW0gdHlwZQorICogQHBhcmFtIHBhcmFtIHBvaW50ZXIgdG8gY2hhbmdlZCBwYXJhbSBz dHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgb25fc3RyZWFtX3BhcmFtX2NoYW5nZWRfY2FsbGJh Y2sodm9pZCAqdXNlcl9kYXRhLCB1aW50MzJfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbSkKK3sKKyAg ICBzdHJ1Y3Qgc3BhX3BvZF9idWlsZGVyIHBvZF9idWlsZGVyOworICAgIGNvbnN0IHN0cnVjdCBz cGFfcG9kICpwYXJhbXNbTUFYX1NQQV9QQVJBTV07CisgICAgdWludDMyX3Qgbl9wYXJhbXMgPSAw OworICAgIHVpbnQ4X3QgcGFyYW1zX2J1ZmZlcls0MDk2XTsKKyAgICBpbnQgcmVzdWx0OworICAg IFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eDsKKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9 IHVzZXJfZGF0YTsKKworICAgIGlmICghY3R4IHx8ICFjdHgtPnByaXZfZGF0YSkKKyAgICAgICAg cmV0dXJuOworCisgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisKKyAgICBpZiAoIXBhcmFt IHx8IGlkICE9IFNQQV9QQVJBTV9Gb3JtYXQpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X1dBUk5JTkcsCisgICAgICAgICAgICAgICAiSWdub3Jpbmcgbm9uZSBzdHJlYW0gcGFyYW0gZm9y bWF0IGNoYW5nZSFcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0ID0g c3BhX2Zvcm1hdF9wYXJzZShwYXJhbSwgJnB3X2N0eC0+Zm9ybWF0Lm1lZGlhX3R5cGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5mb3JtYXQubWVkaWFfc3VidHlwZSk7 CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwd19jdHgt PmZvcm1hdC5tZWRpYV90eXBlICE9IFNQQV9NRURJQV9UWVBFX3ZpZGVvIHx8CisgICAgICAgIHB3 X2N0eC0+Zm9ybWF0Lm1lZGlhX3N1YnR5cGUgIT0gU1BBX01FRElBX1NVQlRZUEVfcmF3KQorICAg ICAgICByZXR1cm47CisKKyAgICBzcGFfZm9ybWF0X3ZpZGVvX3Jhd19wYXJzZShwYXJhbSwgJnB3 X2N0eC0+Zm9ybWF0LmluZm8ucmF3KTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAi TmVnb3RpYXRlZCBmb3JtYXQ6XG4iKTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAi Rm9ybWF0OiAlZCAoJXMpXG4iLAorICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5m b3JtYXQsCisgICAgICAgICAgIHNwYV9kZWJ1Z190eXBlX2ZpbmRfbmFtZShzcGFfdHlwZV92aWRl b19mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd19jdHgtPmZv cm1hdC5pbmZvLnJhdy5mb3JtYXQpKTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlNp emU6ICVkeCVkXG4iLAorICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLndp ZHRoLAorICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLmhlaWdodCk7Cisg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJGcmFtZXJhdGU6ICVkLyVkXG4iLAorICAgICAg ICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mcmFtZXJhdGUubnVtLAorICAgICAgICAgICBw d19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mcmFtZXJhdGUuZGVub20pOworCisgICAgcHdfY3R4LT53 aWR0aCA9IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUud2lkdGg7CisgICAgcHdfY3R4LT5o ZWlnaHQgPSBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLmhlaWdodDsKKyAgICBwd19jdHgt PkJwcCA9IEJZVEVTX1BFUl9QSVhFTDsKKyAgICBwd19jdHgtPmZyYW1lX3NpemUgPSBwd19jdHgt PndpZHRoICogcHdfY3R4LT5oZWlnaHQgKiBwd19jdHgtPkJwcDsKKyAgICBpZiAocHdfY3R4LT5m cmFtZV9zaXplICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSA+IElOVF9NQVgpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FwdHVyZWQgYXJlYSBpcyB0b28gbGFy Z2VcbiIpOworICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIHB3X2N0eC0+YXZfcHhsX2Zv cm1hdCA9CisgICAgICAgIHNwYV9waXhlbF9mb3JtYXRfdG9fYXZfcGl4ZWxfZm9ybWF0KHB3X2N0 eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCk7CisKKyAgICAvKiBWaWRlbyBjcm9wICovCisgICAg cG9kX2J1aWxkZXIgPSBTUEFfUE9EX0JVSUxERVJfSU5JVChwYXJhbXNfYnVmZmVyLCBzaXplb2Yo cGFyYW1zX2J1ZmZlcikpOworICAgIHBhcmFtc1tuX3BhcmFtcysrXSA9IHNwYV9wb2RfYnVpbGRl cl9hZGRfb2JqZWN0KAorICAgICAgICAmcG9kX2J1aWxkZXIsIFNQQV9UWVBFX09CSkVDVF9QYXJh bU1ldGEsIFNQQV9QQVJBTV9NZXRhLAorICAgICAgICBTUEFfUEFSQU1fTUVUQV90eXBlLCBTUEFf UE9EX0lkKFNQQV9NRVRBX1ZpZGVvQ3JvcCksCisgICAgICAgIFNQQV9QQVJBTV9NRVRBX3NpemUs IFNQQV9QT0RfSW50KHNpemVvZihzdHJ1Y3Qgc3BhX21ldGFfcmVnaW9uKSkpOworCisgICAgLyog Q3Vyc29yICovCisgICAgcGFyYW1zW25fcGFyYW1zKytdID0gc3BhX3BvZF9idWlsZGVyX2FkZF9v YmplY3QoCisgICAgICAgICZwb2RfYnVpbGRlciwgU1BBX1RZUEVfT0JKRUNUX1BhcmFtTWV0YSwg U1BBX1BBUkFNX01ldGEsCisgICAgICAgIFNQQV9QQVJBTV9NRVRBX3R5cGUsIFNQQV9QT0RfSWQo U1BBX01FVEFfQ3Vyc29yKSwgU1BBX1BBUkFNX01FVEFfc2l6ZSwKKyAgICAgICAgU1BBX1BPRF9D SE9JQ0VfUkFOR0VfSW50KENVUlNPUl9NRVRBX1NJWkUoNjQsIDY0KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENVUlNPUl9NRVRBX1NJWkUoMSwgMSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDVVJTT1JfTUVUQV9TSVpFKDEwMjQsIDEwMjQpKSk7CisKKyAg ICAvKiBCdWZmZXIgb3B0aW9ucyAqLworICAgIHBhcmFtc1tuX3BhcmFtcysrXSA9IHNwYV9wb2Rf YnVpbGRlcl9hZGRfb2JqZWN0KAorICAgICAgICAmcG9kX2J1aWxkZXIsIFNQQV9UWVBFX09CSkVD VF9QYXJhbUJ1ZmZlcnMsIFNQQV9QQVJBTV9CdWZmZXJzLAorICAgICAgICBTUEFfUEFSQU1fQlVG RkVSU19kYXRhVHlwZSwKKyAgICAgICAgU1BBX1BPRF9JbnQoKDEgPDwgU1BBX0RBVEFfTWVtUHRy KSB8ICgxIDw8IFNQQV9EQVRBX01lbUZkKSkpOworCisgICAgLyogTWV0YSBoZWFkZXIgKi8KKyAg ICBwYXJhbXNbbl9wYXJhbXMrK10gPSBzcGFfcG9kX2J1aWxkZXJfYWRkX29iamVjdCgKKyAgICAg ICAgJnBvZF9idWlsZGVyLCBTUEFfVFlQRV9PQkpFQ1RfUGFyYW1NZXRhLCBTUEFfUEFSQU1fTWV0 YSwKKyAgICAgICAgU1BBX1BBUkFNX01FVEFfdHlwZSwgU1BBX1BPRF9JZChTUEFfTUVUQV9IZWFk ZXIpLAorICAgICAgICBTUEFfUEFSQU1fTUVUQV9zaXplLAorICAgICAgICBTUEFfUE9EX0ludChz aXplb2Yoc3RydWN0IHNwYV9tZXRhX2hlYWRlcikpKTsKKworICAgIHB3X3N0cmVhbV91cGRhdGVf cGFyYW1zKHB3X2N0eC0+c3RyZWFtLCBwYXJhbXMsIG5fcGFyYW1zKTsKKworICAgIHB3X2N0eC0+ bmVnb3RpYXRlZCA9IHRydWU7CisKKyAgICBpZiAoY3JlYXRlX2ZmbXBlZ19zdHJlYW0oY3R4KSA8 IDApCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUg ZmZtcGVnIHN0cmVhbVxuIik7Cit9CisKKy8qKgorICogcGlwZXdpcmUgY2FsbGJhY2sgb2Ygc3Rh dGUgY2hhbmdlZCBldmVudHMKKyAqCisgKiBAcGFyYW0gdXNlcl9kYXRhIGRidXMgbWFyc2hhbGxp bmcgc3RydWN0dXJlCisgKiBAcGFyYW0gb2xkIHBpcGV3aXJlIHN0cmVhbSBvbGQgc3RhdGUKKyAq IEBwYXJhbSBzdGF0ZSBwaXBld2lyZSBzdHJlYW0gY3VycmVudCBzdGF0ZQorICogQHBhcmFtIGVy cm9yIHJlY2VpdmVkIGVycm9yIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIG9uX3N0cmVh bV9zdGF0ZV9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHdfc3RyZWFtX3N0YXRlIG9sZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHdfc3Ry ZWFtX3N0YXRlIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZXJyb3IpCit7CisgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1 c2VyX2RhdGE7CisKKyAgICBpZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0lORk8sICJzdHJlYW0gc3RhdGU6IFwiJXNcIlxuIiwKKyAgICAgICAgICAg cHdfc3RyZWFtX3N0YXRlX2FzX3N0cmluZyhzdGF0ZSkpOworfQorCisvKioKKyAqIHBpcGV3aXJl IHJlY3ljbGUgYnVmZmVyIHRvIHB1dCBidWZmZXIgYmFjayB0byBxdWV1ZSBhbmQgZnJlZQorICog YWxsb2NhdGVkIHNwYWNlIGFmdGVyIHByb2Nlc3Npbmcgb2YgZnJhbWUKKyAqCisgKiBAcGFyYW0g b3BhcXVlIHJlZmVyZW5jZSB0byBQd1N0cmVhbUFuZEJ1ZmZlcgorICogQHBhcmFtIGRhdGEgc3Bh X2RhdGEgZm9yIGhhbmRsaW5nIG1lbWVvcnkgbWFwcGluZworICovCitzdGF0aWMgdm9pZCBwd19y ZWN5Y2xlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKK3sKKyAgICBlbnVtIHB3X3N0cmVh bV9zdGF0ZSBzdGF0ZTsKKyAgICBzdHJ1Y3QgUHdTdHJlYW1BbmRCdWZmZXIgKmJ1ZmZlciA9IChz dHJ1Y3QgUHdTdHJlYW1BbmRCdWZmZXIgKilvcGFxdWU7CisgICAgc3RydWN0IHNwYV9idWZmZXIg KnNwYV9idWYgPSBidWZmZXItPnB3X2J1Zi0+YnVmZmVyOworICAgIHN0cnVjdCBzcGFfZGF0YSAq ZCA9ICZzcGFfYnVmLT5kYXRhc1swXTsKKworICAgIGlmIChkLT50eXBlID09IFNQQV9EQVRBX01l bUZkKSB7CisgICAgICAgIG11bm1hcChidWZmZXItPnB3X2J1Zi0+dXNlcl9kYXRhLCBkLT5tYXhz aXplICsgZC0+bWFwb2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKiBvbmx5IHB1dCBidWZmZXIgaW4g cXVldWUgd2hlbiBzdHJlYW0gc3RhdGUgaXMgc3RyZWFtaW5nICovCisgICAgc3RhdGUgPSBwd19z dHJlYW1fZ2V0X3N0YXRlIChidWZmZXItPnB3X3N0cmVhbSwgTlVMTCk7CisgICAgaWYgKHN0YXRl ID09IFBXX1NUUkVBTV9TVEFURV9TVFJFQU1JTkcpCisgICAgICAgIHB3X3N0cmVhbV9xdWV1ZV9i dWZmZXIoYnVmZmVyLT5wd19zdHJlYW0sIGJ1ZmZlci0+cHdfYnVmKTsKKyAgICBhdl9mcmVlKGJ1 ZmZlcik7Cit9CisKKy8qKgorICogZmluZCBtb3N0IHJlY2VudCBidWZmZXIgcmVjZWl2ZWQgZm9y bSBwaXBld2lyZQorICoKKyAqIEBwYXJhbSBwd19jdHggUGlwZXdpcmVHcmFiQ29udGV4dCBwcml2 YXRlIGRhdGEKKyAqIEByZXR1cm4gcHdfYnVmIG1vc3QgcmVjZW50IGJ1ZmZlcgorICovCitzdGF0 aWMgc3RydWN0IHB3X2J1ZmZlciogZmluZF9tb3N0X3JlY2VudF9idWZmZXJfYW5kX3JlY3ljbGVf b2xkZXJzKFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCkKK3sKKyAgICBzdHJ1Y3QgcHdfYnVm ZmVyICpwd19idWYgPSBOVUxMOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN0cnVjdCBwd19i dWZmZXIgKmF1eCA9IHB3X3N0cmVhbV9kZXF1ZXVlX2J1ZmZlcihwd19jdHgtPnN0cmVhbSk7Cisg ICAgICAgIGlmICghYXV4KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBpZiAocHdfYnVmKSB7CisgICAgICAgICAgICBwd19zdHJlYW1fcXVldWVfYnVmZmVyKHB3X2N0 eC0+c3RyZWFtLCBwd19idWYpOworICAgICAgICB9CisgICAgICAgIHB3X2J1ZiA9IGF1eDsKKyAg ICB9CisgICAgcmV0dXJuIHB3X2J1ZjsKK30KKworLyoqCisgKiBvdXIgZGF0YSBwcm9jZXNzaW5n IGZ1bmN0aW9uCisgKgorICogQHBhcmFtIHVzZXJfZGF0YSBkYnVzIG1hcnNoYWxsaW5nIHN0cnVj dHVyZQorICovCitzdGF0aWMgdm9pZCBvbl9zdHJlYW1fcHJvY2Vzc19jYWxsYmFjayh2b2lkICp1 c2VyX2RhdGEpCit7CisgICAgc3RydWN0IHNwYV9idWZmZXIgKnNwYV9idWYgPSBOVUxMOworICAg IHN0cnVjdCBwd19idWZmZXIgKnB3X2J1ZiA9IE5VTEw7CisgICAgdWludDhfdCAqbWFwID0gTlVM TDsKKyAgICB2b2lkICpzZGF0YSA9IE5VTEw7CisgICAgc3RydWN0IHNwYV9tZXRhX2hlYWRlciAq aGVhZGVyID0gTlVMTDsKKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAg ICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBOVUxMOworICAgIEFWUGFja2V0ICpwa3Qg PSBOVUxMOworICAgIHN0cnVjdCBQd1N0cmVhbUFuZEJ1ZmZlciogYnVmZmVyID0gTlVMTDsKKwor ICAgIGN0eCA9IHVzZXJfZGF0YTsKKyAgICBpZiAoIWN0eCB8fCAhY3R4LT5wcml2X2RhdGEpCisg ICAgICAgIHJldHVybjsKKworICAgIHB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworCisgICAgLy9E YXRhIHJlY2lldmVkIGluIGJ1ZmZlciBmcm9tIHBpcGV3aXJlLiBHZXQgdGhlIGJ1ZmZlciBhbmQg cGFzcyBpdCB0byBmZm1wZWcuIAorICAgIHB3X2J1ZiA9IGZpbmRfbW9zdF9yZWNlbnRfYnVmZmVy X2FuZF9yZWN5Y2xlX29sZGVycyhwd19jdHgpOworICAgIGlmICghcHdfYnVmKSB7CisgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk91dCBvZiBidWZmZXJzIVxuIik7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICBzcGFfYnVmID0gcHdfYnVmLT5idWZmZXI7CisgICAgaGVh ZGVyID0gc3BhX2J1ZmZlcl9maW5kX21ldGFfZGF0YShzcGFfYnVmLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTUEFfTUVUQV9IZWFkZXIsIHNpemVvZigqaGVhZGVyKSk7 CisgICAgaWYgKGhlYWRlciAmJiAoaGVhZGVyLT5mbGFncyAmIFNQQV9NRVRBX0hFQURFUl9GTEFH X0NPUlJVUFRFRCkpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiYnVmZmVy IGlzIGNvcnJ1cHQiKTsKKyAgICAgICAgcHdfc3RyZWFtX3F1ZXVlX2J1ZmZlcihwd19jdHgtPnN0 cmVhbSwgcHdfYnVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwd19jdHgt PmF2X3B4bF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGJ1ZmZlciBmb3Jt YXQ6ICVkXG4iLAorICAgICAgICAgICAgICAgcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZm9ybWF0 KTsKKyAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNwYV9idWYtPmRhdGFzWzBdLnR5 cGUgPT0gU1BBX0RBVEFfTWVtRmQgKSB7CisgICAgICAgIG1hcCA9CisgICAgICAgICAgICBtbWFw KE5VTEwsIHNwYV9idWYtPmRhdGFzWzBdLm1heHNpemUgKyBzcGFfYnVmLT5kYXRhc1swXS5tYXBv ZmZzZXQsCisgICAgICAgICAgICAgICAgIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIHNwYV9idWYt PmRhdGFzWzBdLmZkLCAwKTsKKyAgICAgICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7CisgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJtbWFwIGZhaWxlZCEgZXJyb3IgJXNc biIsCisgICAgICAgICAgICAgICAgICAgZ19zdHJlcnJvcihlcnJubykpOworICAgICAgIHJldHVy bjsKKyAgICAgICAgfQorICAgICAgICBwd19idWYtPnVzZXJfZGF0YSA9IG1hcDsKKyAgICAgICAg c2RhdGEgPSBTUEFfUFRST0ZGKG1hcCwgc3BhX2J1Zi0+ZGF0YXNbMF0ubWFwb2Zmc2V0LCB1aW50 OF90KTsKKyAgICB9IGVsc2UgaWYgKHNwYV9idWYtPmRhdGFzWzBdLnR5cGUgPT0gU1BBX0RBVEFf TWVtUHRyKSB7CisgICAgICAgIGlmIChzcGFfYnVmLT5kYXRhc1swXS5kYXRhID09IE5VTEwpIHsK KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIm5vIGRhdGEhXG4iKTsKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYXAgPSBOVUxMOworICAgICAg ICBzZGF0YSA9IHNwYV9idWYtPmRhdGFzWzBdLmRhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQnVmZmVyIGlzIG5vdCB2YWxpZCFcbiIpOworICAg ICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogQ3JlYXRlIGEgbmV3IEFWUGFja2V0IG9uIHRv cCBvZiB0aGUgcHcgYnVmZmVyICovCisgICAgcGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7CisgICAg aWYgKHBrdCA9PSBOVUxMKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAg ICAgICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBhdiBwYWNrZXRcbiIpOworICAg ICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVmZmVyID0gKHN0cnVjdCBQd1N0cmVhbUFuZEJ1 ZmZlciopYXZfbWFsbG9jKHNpemVvZihzdHJ1Y3QgUHdTdHJlYW1BbmRCdWZmZXIpKTsKKyAgICBp ZiAoIWJ1ZmZlcikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAg ICAgICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBQd1N0cmVhbUFuZEJ1ZmZlciBlbnRyeVxuIik7 CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBidWZmZXItPmN0eCA9IGN0eDsKKyAgICBi dWZmZXItPnB3X3N0cmVhbSA9IHB3X2N0eC0+c3RyZWFtOworICAgIGJ1ZmZlci0+cHdfYnVmID0g cHdfYnVmOworCisgICAgcGt0LT5idWYgPSBhdl9idWZmZXJfY3JlYXRlKHNkYXRhLCBwd19jdHgt PmZyYW1lX3NpemUsIHB3X3JlY3ljbGUsIGJ1ZmZlciwgMCk7CisgICAgaWYgKCFwa3QtPmJ1Zikg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgY3JlYXRpbmcgYXYg YnVmZmVyXG4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBwa3QtPmRhdGEgPSBz ZGF0YTsKKyAgICBwa3QtPnNpemUgPSBwd19jdHgtPmZyYW1lX3NpemU7CisKKyAgICAvKiBGcmVl IHRoZSBsYXN0IGN1cnJlbnRfcGt0IGFuZCBtYWtlIHRoZSBuZXcgZnJhbWUgYXZhaWxhYmxlICov CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfcGt0X211dGV4KTsKKyAg ICBhdl9wYWNrZXRfdW5yZWYocHdfY3R4LT5jdXJyZW50X3BrdCk7CisgICAgaWYgKGF2X3BhY2tl dF9yZWYocHdfY3R4LT5jdXJyZW50X3BrdCwgcGt0KSA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIGNyZWF0aW5nIGF2IGJ1ZmZlclxuIik7CisgICAgfQor ICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPmN1cnJlbnRfcGt0X211dGV4KTsKKyAg ICBnb3RvIGVuZDsKKworZmFpbDoKKyAgICBhdl9mcmVlKGJ1ZmZlcik7CitlbmQ6CisgICAgYXZf cGFja2V0X2ZyZWUoJnBrdCk7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IHB3X3N0cmVhbV9ldmVudHMgc3RyZWFtX2V2ZW50cyA9IHsKKyAgICBQV19WRVJTSU9OX1NUUkVB TV9FVkVOVFMsCisgICAgLnN0YXRlX2NoYW5nZWQgPSBvbl9zdHJlYW1fc3RhdGVfY2hhbmdlZF9j YWxsYmFjaywKKyAgICAucGFyYW1fY2hhbmdlZCA9IG9uX3N0cmVhbV9wYXJhbV9jaGFuZ2VkX2Nh bGxiYWNrLAorICAgIC5wcm9jZXNzID0gb25fc3RyZWFtX3Byb2Nlc3NfY2FsbGJhY2ssCit9Owor CitzdGF0aWMgc3RydWN0IERidXNDYWxsRGF0YSAqc3Vic2NyaWJlX3RvX3NpZ25hbChBVkZvcm1h dENvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0RCdXNTaWduYWxDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAg ICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2RhdGE7CisgICAgUGlwZXdpcmVH cmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgpIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFs aWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg fQorCisgICAgcHRyX2RidXNfY2FsbF9kYXRhID0gKHN0cnVjdCBEYnVzQ2FsbERhdGEgKilhdl9t YWxsb2N6KHNpemVvZihzdHJ1Y3QgRGJ1c0NhbGxEYXRhKSk7CisgICAgcHRyX2RidXNfY2FsbF9k YXRhLT5jdHggPSBjdHg7CisgICAgcHRyX2RidXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggPSBn X3N0cmR1cChwYXRoKTsKKyAgICBwdHJfZGJ1c19jYWxsX2RhdGEtPmNhbmNlbGxlZF9pZCA9Cisg ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocHdfY3R4LT5jYW5jZWxsYWJsZSwgImNhbmNlbGxlZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhvbl9jYW5jZWxsZWRfY2FsbGJh Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9kYnVzX2NhbGxfZGF0YSAvKiB1c2Vy X2RhdGEgKi8pOworICAgIHB0cl9kYnVzX2NhbGxfZGF0YS0+c2lnbmFsX2lkID0gZ19kYnVzX2Nv bm5lY3Rpb25fc2lnbmFsX3N1YnNjcmliZSgKKyAgICAgICAgcHdfY3R4LT5jb25uZWN0aW9uLCAi b3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiAvKnNlbmRlciovLAorICAgICAgICAib3Jn LmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiAvKmludGVyZmFjZV9uYW1lKi8sCisgICAgICAg ICJSZXNwb25zZSIgLyptZW1iZXI6IGRidXMgc2lnbmFsIG5hbWUqLywKKyAgICAgICAgcHRyX2Ri dXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggLypvYmplY3RfcGF0aCovLCBOVUxMLAorICAgICAg ICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PX01BVENIX1JVTEUsIGNhbGxiYWNrLCBwdHJfZGJ1c19j YWxsX2RhdGEsIE5VTEwpOworCisgICAgcmV0dXJuIHB0cl9kYnVzX2NhbGxfZGF0YTsKK30KKwor c3RhdGljIGludCBwbGF5X3BpcGV3aXJlX3N0cmVhbShBVkZvcm1hdENvbnRleHQgKmN0eCkKK3sK KyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCBzdHJ1Y3Qgc3BhX3BvZCAqcHRyX3NwYV9wb2Q7 CisgICAgdWludDhfdCBidWZmZXJbNDA5Nl07CisgICAgc3RydWN0IHNwYV9wb2RfYnVpbGRlciBz cGFfcG9kX2JsZHIgPSB7CisgICAgICAgIDAsCisgICAgfTsKKworICAgIFBpcGV3aXJlR3JhYkNv bnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHBy aXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisg ICAgcHdfY3R4LT50aHJlYWRfbG9vcCA9CisgICAgICAgIHB3X3RocmVhZF9sb29wX25ldygidGhy ZWFkIGxvb3AiLCBOVUxMKTsKKyAgICBpZiAoIXB3X2N0eC0+dGhyZWFkX2xvb3ApIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgInB3X3RocmVhZF9s b29wX25ldyBmYWlsZWQhXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHB3X2N0eC0+Y29udGV4dCA9CisgICAgICAg IHB3X2NvbnRleHRfbmV3KHB3X3RocmVhZF9sb29wX2dldF9sb29wKHB3X2N0eC0+dGhyZWFkX2xv b3ApLCBOVUxMLCAwKTsKKyAgICBpZiAoIXB3X2N0eC0+Y29udGV4dCkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJwd19jb250ZXh0X25ldyBmYWlsZWQhXG4iKTsKKyAgICAg ICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor CisgICAgaWYgKHB3X3RocmVhZF9sb29wX3N0YXJ0KHB3X2N0eC0+dGhyZWFkX2xvb3ApIDwgMCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAicHdf dGhyZWFkX2xvb3Bfc3RhcnQgZmFpbGVkIVxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUZB VUxUKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIHB3X3RocmVhZF9sb29w X2xvY2socHdfY3R4LT50aHJlYWRfbG9vcCk7CisKKyAgICAvKiBDb3JlICovCisgICAgcHdfY3R4 LT5jb3JlID0KKyAgICAgICAgcHdfY29udGV4dF9jb25uZWN0X2ZkKHB3X2N0eC0+Y29udGV4dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsKHB3X2N0eC0+cGlwZXdpcmVfZmQs IEZfRFVQRkRfQ0xPRVhFQywgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAwKTsKKyAgICBpZiAocHdfY3R4LT5jb3JlID09IE5VTEwpIHsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgInB3X2NvbnRleHRfY29ubmVjdF9mZCBm YWlsZWQhXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFRkFVTFQpOworICAgICAgICBwd190 aHJlYWRfbG9vcF91bmxvY2socHdfY3R4LT50aHJlYWRfbG9vcCk7CisgICAgICAgIGdvdG8gY2xl YW51cDsKKyAgICB9CisKKyAgICBwd19jb3JlX2FkZF9saXN0ZW5lcihwd19jdHgtPmNvcmUsICZw d19jdHgtPmNvcmVfbGlzdGVuZXIsICZjb3JlX2V2ZW50cywKKyAgICAgICAgICAgICAgICAgICAg ICAgICBjdHggLyogdXNlcl9kYXRhICovKTsKKworICAgIC8qIFN0cmVhbSAqLworICAgIHB3X2N0 eC0+c3RyZWFtID0gcHdfc3RyZWFtX25ldygKKyAgICAgICAgcHdfY3R4LT5jb3JlLCAid2F5bGFu ZCBncmFiIiwKKyAgICAgICAgcHdfcHJvcGVydGllc19uZXcoUFdfS0VZX01FRElBX1RZUEUsICJW aWRlbyIsIFBXX0tFWV9NRURJQV9DQVRFR09SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IkNhcHR1cmUiLCBQV19LRVlfTUVESUFfUk9MRSwgIlNjcmVlbiIsIE5VTEwpKTsKKworICAgIGlm IChwd19jdHgtPnN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgInB3X3N0cmVhbV9uZXcgZmFpbGVkIVxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1Io RU5PTUVNKTsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0eC0+dGhyZWFkX2xv b3ApOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgcHdfc3RyZWFtX2FkZF9s aXN0ZW5lcihwd19jdHgtPnN0cmVhbSwgJnB3X2N0eC0+c3RyZWFtX2xpc3RlbmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV9ldmVudHMsIGN0eCAvKiB1c2VyX2RhdGEgKi8p OworCisgICAgLyogU3RyZWFtIHBhcmFtZXRlcnMgKi8KKyAgICBzcGFfcG9kX2JsZHIgPSBTUEFf UE9EX0JVSUxERVJfSU5JVChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBwdHJfc3BhX3Bv ZCA9IHNwYV9wb2RfYnVpbGRlcl9hZGRfb2JqZWN0KAorICAgICAgICAmc3BhX3BvZF9ibGRyLCBT UEFfVFlQRV9PQkpFQ1RfRm9ybWF0LCBTUEFfUEFSQU1fRW51bUZvcm1hdCwKKyAgICAgICAgU1BB X0ZPUk1BVF9tZWRpYVR5cGUsIFNQQV9QT0RfSWQoU1BBX01FRElBX1RZUEVfdmlkZW8pLAorICAg ICAgICBTUEFfRk9STUFUX21lZGlhU3VidHlwZSwgU1BBX1BPRF9JZChTUEFfTUVESUFfU1VCVFlQ RV9yYXcpLAorICAgICAgICBTUEFfRk9STUFUX1ZJREVPX2Zvcm1hdCwKKyAgICAgICAgU1BBX1BP RF9DSE9JQ0VfRU5VTV9JZCg0LCBTUEFfVklERU9fRk9STUFUX1JHQkEsIFNQQV9WSURFT19GT1JN QVRfUkdCeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFfVklERU9fRk9STUFU X0JHUngsIFNQQV9WSURFT19GT1JNQVRfQkdSQSksCisgICAgICAgIFNQQV9GT1JNQVRfVklERU9f c2l6ZSwKKyAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfUmVjdGFuZ2xlKCZTUEFfUkVDVEFO R0xFKDMyMCwgMjQwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZT UEFfUkVDVEFOR0xFKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlNQQV9SRUNUQU5HTEUoNDA5NiwgNDA5NikpLAorICAgICAgICBTUEFfRk9STUFUX1ZJREVP X2ZyYW1lcmF0ZSwKKyAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfRnJhY3Rpb24oCisgICAg ICAgICAgICAmU1BBX0ZSQUNUSU9OKHB3X2N0eC0+ZnJhbWVyYXRlLm51bSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcHdfY3R4LT5mcmFtZXJhdGUuZGVuKSwKKyAgICAgICAgICAgICZTUEFf RlJBQ1RJT04oMCwgMSksICZTUEFfRlJBQ1RJT04oMTQ0LCAxKSkpOworCisgICAgcmV0ID0gcHdf c3RyZWFtX2Nvbm5lY3QoCisgICAgICAgIHB3X2N0eC0+c3RyZWFtLCBQV19ESVJFQ1RJT05fSU5Q VVQsIHB3X2N0eC0+cGlwZXdpcmVfbm9kZSwKKyAgICAgICAgUFdfU1RSRUFNX0ZMQUdfQVVUT0NP Tk5FQ1QgfCBQV19TVFJFQU1fRkxBR19NQVBfQlVGRkVSUywgJnB0cl9zcGFfcG9kLAorICAgICAg ICAxKTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiU3RhcnRpbmcgc2NyZWVuIGNh cHR1cmUgLi4uXG4iKTsKKworICAgIHB3X3RocmVhZF9sb29wX3VubG9jayhwd19jdHgtPnRocmVh ZF9sb29wKTsKKworICAgIHJldHVybiByZXQ7CisKKy8qCisgKiBkaXNjb25uZWN0IGZyb20gdGhl IHNlcnZlci9kYWVtb24KKyAqIGRlc3Ryb3kgdGhlIGNvcmUgcHJveHkgb2JqZWN0IGFuZCB3aWxs IHJlbW92ZSB0aGUgcHJveGllcworICogdGhhdCBtaWdodCBoYXZlIGJlZW4gY3JlYXRlZCBvbiB0 aGlzIGNvbm5lY3Rpb24KKyAqLworY2xlYW51cDoKKyAgICBpZiAocHdfY3R4LT5jb3JlKQorICAg ICAgICBwd19jb3JlX2Rpc2Nvbm5lY3QocHdfY3R4LT5jb3JlKTsKKworICAgIGlmIChwd19jdHgt PmNvbnRleHQpCisgICAgICAgIHB3X2NvbnRleHRfZGVzdHJveShwd19jdHgtPmNvbnRleHQpOwor CisgICAgaWYocHdfY3R4LT50aHJlYWRfbG9vcCkKKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfZGVz dHJveShwd19jdHgtPnRocmVhZF9sb29wKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIG9uX3BpcGV3aXJlX3JlbW90ZV9vcGVuZWRfY2FsbGJhY2soR09iamVjdCAqc291cmNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNS ZXN1bHQgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIEdVbml4RkRMaXN0KiBmZF9saXN0ID0gTlVM TDsKKyAgICBHVmFyaWFudCogcmVzdWx0ID0gTlVMTDsKKyAgICBHRXJyb3IqIGVycm9yID0gTlVM TDsKKyAgICBpbnQgZmRfaW5kZXg7CisKKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJf ZGF0YTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsK KyAgICBpZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisg ICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGRhdGEsIGFu ZCByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdC4gKi8KKyAgICByZXN1bHQgPSBnX2RidXNfcHJv eHlfY2FsbF93aXRoX3VuaXhfZmRfbGlzdF9maW5pc2goR19EQlVTX1BST1hZKHNvdXJjZSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm ZF9saXN0LCByZXMsICZlcnJvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgaWYgKCFn X2Vycm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkK KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAg ICAiRXJyb3IgcmV0cmlldmluZyBwaXBld2lyZSBmZDogJXNcbiIsCisgICAgICAgICAgICAgICAg ICAgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgZ192YXJpYW50X2dldChyZXN1bHQsICIoaCkiLCAmZmRf aW5kZXgsICZlcnJvcik7CisKKyAgICBwd19jdHgtPnBpcGV3aXJlX2ZkID0gZ191bml4X2ZkX2xp c3RfZ2V0KGZkX2xpc3QsIGZkX2luZGV4LCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAg ICAgICBpZiAoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9D QU5DRUxMRUQpKQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAg ICAgICAgICAgICAgICJFcnJvciByZXRyaWV2aW5nIHBpcGV3aXJlIGZkOiAlc1xuIiwKKyAgICAg ICAgICAgICAgICAgICBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJv cik7CisgICAgICAgIGdfdmFyaWFudF91bnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgZ192YXJpYW50X3VucmVmKHJlc3VsdCk7CisgICAgZ19vYmplY3RfdW5yZWYo ZmRfbGlzdCk7CisKKyAgICBwbGF5X3BpcGV3aXJlX3N0cmVhbShjdHgpOworfQorCitzdGF0aWMg dm9pZCBvcGVuX3BpcGV3aXJlX3JlbW90ZShBVkZvcm1hdENvbnRleHQgKmN0eCkKK3sKKyAgICBH VmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHgg PSBjdHgtPnByaXZfZGF0YTsKKyAgICBpZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQg ZGF0YSFcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ192YXJpYW50X2J1aWxk ZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisKKyAgICBnX2RidXNf cHJveHlfY2FsbF93aXRoX3VuaXhfZmRfbGlzdCgKKyAgICAgICAgcHdfY3R4LT5wcm94eSwgIk9w ZW5QaXBlV2lyZVJlbW90ZSIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihvYXtzdn0pIiwgcHdf Y3R4LT5zZXNzaW9uX2hhbmRsZSwgJmJ1aWxkZXIpLAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFH U19OT05FLCAtMSwgTlVMTCwgcHdfY3R4LT5jYW5jZWxsYWJsZSwKKyAgICAgICAgb25fcGlwZXdp cmVfcmVtb3RlX29wZW5lZF9jYWxsYmFjaywgY3R4IC8qIHVzZXJfZGF0YSAqLyk7Cit9CisKK3N0 YXRpYyB2b2lkIG9uX3N0YXJ0X3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKAorICAgIEdEQnVz Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqc2VuZGVyX25hbWUsCisgICAgY29u c3QgY2hhciAqb2JqZWN0X3BhdGgsIGNvbnN0IGNoYXIgKmludGVyZmFjZV9uYW1lLAorICAgIGNv bnN0IGNoYXIgKnNpZ25hbF9uYW1lLCBHVmFyaWFudCAqcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNl cl9kYXRhKQoreworICAgIEdWYXJpYW50KiBzdHJlYW1fcHJvcGVydGllcyA9IE5VTEw7CisgICAg R1ZhcmlhbnQqIHN0cmVhbXMgPSBOVUxMOworICAgIEdWYXJpYW50KiByZXN1bHQgPSBOVUxMOwor ICAgIEdWYXJpYW50SXRlciBpdGVyOworICAgIHVpbnQzMl90IHJlc3BvbnNlOworCisgICAgc3Ry dWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOworICAgIEFW Rm9ybWF0Q29udGV4dCAqY3R4ID0gcHRyX2RidXNfY2FsbF9kYXRhLT5jdHg7CisgICAgUGlwZXdp cmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisKKyAgICBpZiAoIXB3X2N0 eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAi SW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAgICAgICByZXR1cm47CisgICAg fQorCisgICAgZ19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEsIGRidXNfY2FsbF9k YXRhX2ZyZWUpOworCisgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHVAYXtzdn0pIiwg JnJlc3BvbnNlLCAmcmVzdWx0KTsKKworICAgIGlmIChyZXNwb25zZSkgeworICAgICAgICBhdl9s b2coCisgICAgICAgICAgICBjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICJGYWlsZWQg dG8gc3RhcnQgc2NyZWVuY2FzdCwgZGVuaWVkIG9yIGNhbmNlbGxlZCBieSB1c2VyIVxuIik7Cisg ICAgICAgIHBpcGV3aXJlZ3JhYl9hYm9ydCgKKyAgICAgICAgICAgIGN0eCwgIkZhaWxlZCB0byBz dGFydCBzY3JlZW5jYXN0LCBkZW5pZWQgb3IgY2FuY2VsbGVkIGJ5IHVzZXIhIik7CisgICAgICAg IGdfdmFyaWFudF91bnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg c3RyZWFtcyA9IGdfdmFyaWFudF9sb29rdXBfdmFsdWUocmVzdWx0LCAic3RyZWFtcyIsIEdfVkFS SUFOVF9UWVBFX0FSUkFZKTsKKworICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHN0cmVh bXMpOworICAgIGF2X2Fzc2VydDAoZ192YXJpYW50X2l0ZXJfbl9jaGlsZHJlbigmaXRlcikgPT0g MSk7CisKKyAgICBnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAiKHVAYXtzdn0pIiwgJnB3X2N0 eC0+cGlwZXdpcmVfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1fcHJvcGVy dGllcyk7CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywKKyAgICAgICAgICAgIk1vbml0 b3Igc2VsZWN0ZWQsIHNldHRpbmcgdXAgc2NyZWVuY2FzdFxuXG4iKTsKKworICAgIGdfdmFyaWFu dF91bnJlZihyZXN1bHQpOworICAgIGdfdmFyaWFudF91bnJlZihzdHJlYW1zKTsKKyAgICBnX3Zh cmlhbnRfdW5yZWYoc3RyZWFtX3Byb3BlcnRpZXMpOworCisgICAgb3Blbl9waXBld2lyZV9yZW1v dGUoY3R4KTsKKworfQorCitzdGF0aWMgdm9pZCBvbl9zdGFydGVkX2NhbGxiYWNrKEdPYmplY3Qg KnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBHVmFyaWFudCogcmVzdWx0ID0gTlVMTDsK KyAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJf ZGJ1c19jYWxsX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSBw dHJfZGJ1c19jYWxsX2RhdGEtPmN0eDsKKworICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94eV9jYWxs X2ZpbmlzaChHX0RCVVNfUFJPWFkoc291cmNlKSwgcmVzLCAmZXJyb3IpOworICAgIGlmICghcmVz dWx0KSB7CisgICAgICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBH X0lPX0VSUk9SX0NBTkNFTExFRCkpCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsCisgICAgICAgICAgICAgICAgICAgIkVycm9yIHNlbGVjdGluZyBzY3JlZW5jYXN0IHNvdXJj ZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBn X2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdfdmFyaWFu dF91bnJlZihyZXN1bHQpOworCit9CisKK3N0YXRpYyBpbnQgc3RhcnQoQVZGb3JtYXRDb250ZXh0 ICpjdHgpCit7CisgICAgZ19hdXRvZnJlZSBjaGFyICpyZXF1ZXN0X3Rva2VuID0gTlVMTDsKKyAg ICBnX2F1dG9mcmVlIGNoYXIgKnJlcXVlc3RfcGF0aCA9IE5VTEw7CisgICAgR1ZhcmlhbnRCdWls ZGVyIGJ1aWxkZXI7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRh OworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworICAg IGlmICghcHdfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAg ICAgICAgICAgICJJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgbmV3X3BhdGgoY3R4LCAmcmVxdWVz dF9wYXRoLCAmcmVxdWVzdF90b2tlbiwgJihwd19jdHgtPnJlcXVlc3RfdG9rZW5fY291bnQpLCBS RVFVRVNUX1BBVEgpOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJBc2tpbmcg Zm9yIG1vbml0b3LigKZcbiIpOworCisgICAgcHRyX2RidXNfY2FsbF9kYXRhID0gc3Vic2NyaWJl X3RvX3NpZ25hbCgKKyAgICAgICAgY3R4IC8qIHVzZXJfZGF0YSAqLywgcmVxdWVzdF9wYXRoLCBv bl9zdGFydF9yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjayk7CisgICAgaWYgKCFwdHJfZGJ1c19j YWxsX2RhdGEpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAg ICAgICAgInN1YnNjcmliZV90b19zaWduYWwgZmFpbGVkIVxuIik7CisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVp bGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk KCZidWlsZGVyLCAie3N2fSIsICJoYW5kbGVfdG9rZW4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBnX3ZhcmlhbnRfbmV3X3N0cmluZyhyZXF1ZXN0X3Rva2VuKSk7CisKKyAgICBnX2RidXNf cHJveHlfY2FsbChwd19jdHgtPnByb3h5LCAiU3RhcnQiLAorICAgICAgICAgICAgICAgICAgICAg IGdfdmFyaWFudF9uZXcoIihvc2F7c3Z9KSIsIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsICIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1aWxkZXIpLAorICAgICAgICAg ICAgICAgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBwd19jdHgtPmNhbmNlbGxh YmxlLAorICAgICAgICAgICAgICAgICAgICAgIG9uX3N0YXJ0ZWRfY2FsbGJhY2ssIHB0cl9kYnVz X2NhbGxfZGF0YSAvKiB1c2VyX2RhdGEgKi8pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBvbl9zZWxlY3Rfc291cmNlX3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKAorICAgIEdE QnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqc2VuZGVyX25hbWUsCisgICAg Y29uc3QgY2hhciAqb2JqZWN0X3BhdGgsIGNvbnN0IGNoYXIgKmludGVyZmFjZV9uYW1lLAorICAg IGNvbnN0IGNoYXIgKnNpZ25hbF9uYW1lLCBHVmFyaWFudCAqcGFyYW1ldGVycywgZ3BvaW50ZXIg dXNlcl9kYXRhKQoreworICAgIEdWYXJpYW50KiByZXQgPSBOVUxMOworICAgIHVpbnQzMl90IHJl c3BvbnNlOworICAgIHN0cnVjdCBEYnVzQ2FsbERhdGEgKnB0cl9kYnVzX2NhbGxfZGF0YSA9IHVz ZXJfZGF0YTsKKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHB0cl9kYnVzX2NhbGxfZGF0YS0+ Y3R4OworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sCisgICAgICAgICAgICJSZXNwb25z ZSB0byBzZWxlY3Qgc291cmNlIHJlY2VpdmVkXG4iKTsKKworICAgIGdfY2xlYXJfcG9pbnRlcigm cHRyX2RidXNfY2FsbF9kYXRhLCBkYnVzX2NhbGxfZGF0YV9mcmVlKTsKKworICAgIGdfdmFyaWFu dF9nZXQocGFyYW1ldGVycywgIih1QGF7c3Z9KSIsICZyZXNwb25zZSwgJnJldCk7CisgICAgZ192 YXJpYW50X3VucmVmKHJldCk7CisgICAgaWYgKHJlc3BvbnNlKSB7CisgICAgICAgIGF2X2xvZygK KyAgICAgICAgICAgIGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgIkZhaWxlZCB0byBz ZWxlY3Qgc291cmNlLCBkZW5pZWQgb3IgY2FuY2VsbGVkIGJ5IHVzZXIhXG4iKTsKKyAgICAgICAg cGlwZXdpcmVncmFiX2Fib3J0KAorICAgICAgICAgICAgY3R4LCAiRmFpbGVkIHRvIHNlbGVjdCBz b3VyY2UsIGRlbmllZCBvciBjYW5jZWxsZWQgYnkgdXNlciEiKTsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKworICAgIGlmIChzdGFydChjdHgpIDwgMCkKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0lORk8sCisgICAgICAgICAgICJTdGFydCBzb3VyY2UgcmVjZWl2ZWRcbiIpOworfQorCitz dGF0aWMgdm9pZCBvbl9zb3VyY2Vfc2VsZWN0ZWRfY2FsbGJhY2soR09iamVjdCAqc291cmNlLCBH QXN5bmNSZXN1bHQgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgR1ZhcmlhbnQqIHJlc3VsdCA9IE5VTEw7Cisg ICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2Ri dXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOworICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4ID0gcHRy X2RidXNfY2FsbF9kYXRhLT5jdHg7CisKKyAgICByZXN1bHQgPSBnX2RidXNfcHJveHlfY2FsbF9m aW5pc2goR19EQlVTX1BST1hZKHNvdXJjZSksIHJlcywgJmVycm9yKTsKKyAgICBpZiAoIXJlc3Vs dCkgeworICAgICAgICBpZiAoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19J T19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAorICAgICAgICAgICAgICAgICAgICJFcnJvciBzZWxlY3Rpbmcgc2NyZWVuY2FzdCBzb3VyY2U6 ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19l cnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnX3ZhcmlhbnRf dW5yZWYocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0X3NvdXJjZShBVkZvcm1hdENv bnRleHQgKmN0eCkKK3sKKyAgICBnX2F1dG9mcmVlIGNoYXIgKnJlcXVlc3RfdG9rZW4gPSBOVUxM OworICAgIGdfYXV0b2ZyZWUgY2hhciAqcmVxdWVzdF9wYXRoID0gTlVMTDsKKyAgICBHVmFyaWFu dEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxs X2RhdGE7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7 CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAor ICAgICAgICAgICAgICAgIkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIG5ld19wYXRoKGN0eCwgJnJlcXVlc3RfcGF0aCwgJnJl cXVlc3RfdG9rZW4sICYocHdfY3R4LT5yZXF1ZXN0X3Rva2VuX2NvdW50KSwgUkVRVUVTVF9QQVRI KTsKKworICAgIHB0cl9kYnVzX2NhbGxfZGF0YSA9CisgICAgICAgIHN1YnNjcmliZV90b19zaWdu YWwoY3R4IC8qIHVzZXJfZGF0YSAqLywgcmVxdWVzdF9wYXRoLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9uX3NlbGVjdF9zb3VyY2VfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2spOwor ICAgIGlmIChwdHJfZGJ1c19jYWxsX2RhdGEgPT0gTlVMTCkgeworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAic3Vic2NyaWJlX3RvX3NpZ25hbCBmYWls ZWQhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdfdmFyaWFudF9idWlsZGVy X2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9i dWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAidHlwZXMiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBnX3ZhcmlhbnRfbmV3X3VpbnQzMihwd19jdHgtPmNhcHR1cmVfdHlwZSkpOworICAg IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAibXVsdGlwbGUiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4oRkFMU0UpKTsKKyAg ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgImhhbmRsZV90b2tlbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXdfc3RyaW5nKHJlcXVlc3Rf dG9rZW4pKTsKKworICAgIGlmIChwd19jdHgtPmF2YWlsYWJsZV9jdXJzb3JfbW9kZXMgJiBQT1JU QUxfQ1VSU09SX01PREVfTUVUQURBVEEpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgm YnVpbGRlciwgIntzdn0iLCAiY3Vyc29yX21vZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ192YXJpYW50X25ld191aW50MzIoUE9SVEFMX0NVUlNPUl9NT0RFX01FVEFEQVRBKSk7 CisgICAgZWxzZSBpZiAoKHB3X2N0eC0+YXZhaWxhYmxlX2N1cnNvcl9tb2RlcyAmIFBPUlRBTF9D VVJTT1JfTU9ERV9FTUJFRERFRCkKKyAgICAgICAgICAgICYmIHB3X2N0eC0+Y3Vyc29yLnZpc2li bGUpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAiY3Vy c29yX21vZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld191 aW50MzIoUE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEKSk7CisgICAgZWxzZQorICAgICAgICBn X3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgImN1cnNvcl9tb2RlIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXdfdWludDMyKFBPUlRBTF9D VVJTT1JfTU9ERV9ISURERU4pKTsKKworICAgIGdfZGJ1c19wcm94eV9jYWxsKHB3X2N0eC0+cHJv eHksICJTZWxlY3RTb3VyY2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3 KCIob2F7c3Z9KSIsIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmYnVpbGRlciksCisgICAgICAgICAgICAgICAgICAgICAgR19EQlVT X0NBTExfRkxBR1NfTk9ORSwgLTEsIHB3X2N0eC0+Y2FuY2VsbGFibGUsCisgICAgICAgICAgICAg ICAgICAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spb25fc291cmNlX3NlbGVjdGVkX2NhbGxiYWNr LAorICAgICAgICAgICAgICAgICAgICAgIHB0cl9kYnVzX2NhbGxfZGF0YSAvKiB1c2VyX2RhdGEg Ki8pOworfQorCitzdGF0aWMgdm9pZCBvbl9jcmVhdGVfc2Vzc2lvbl9yZXNwb25zZV9yZWNlaXZl ZF9jYWxsYmFjaygKKyAgICBHREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIg KnNlbmRlcl9uYW1lLAorICAgIGNvbnN0IGNoYXIgKm9iamVjdF9wYXRoLCBjb25zdCBjaGFyICpp bnRlcmZhY2VfbmFtZSwKKyAgICBjb25zdCBjaGFyICpzaWduYWxfbmFtZSwgR1ZhcmlhbnQgKnBh cmFtZXRlcnMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICB1aW50MzJfdCByZXNwb25zZTsK KyAgICBHVmFyaWFudCogcmVzdWx0ID0gTlVMTDsKKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpw dHJfZGJ1c19jYWxsX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgQVZGb3JtYXRDb250ZXh0ICpjdHgg PSBwdHJfZGJ1c19jYWxsX2RhdGEtPmN0eDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19j dHggPSBjdHgtPnByaXZfZGF0YTsKKworICAgIGlmICghcHdfY3R4KSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHByaXZhdGUgY29u dGV4dCBkYXRhIVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX2NsZWFyX3Bv aW50ZXIoJnB0cl9kYnVzX2NhbGxfZGF0YSwgZGJ1c19jYWxsX2RhdGFfZnJlZSk7CisKKyAgICBn X3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodUBhe3N2fSkiLCAmcmVzcG9uc2UsICZyZXN1bHQp OworCisgICAgaWYgKHJlc3BvbnNlICE9IDApIHsKKyAgICAgICAgYXZfbG9nKAorICAgICAgICAg ICAgY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAiUGlwZXdpcmUgZmFpbGVkIHRvIGNy ZWF0ZSBzZXNzaW9uLCBkZW5pZWQgb3IgY2FuY2VsbGVkIGJ5IHVzZXIhXG4iKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlNjcmVlbmNh c3Qgc2Vzc2lvbiBjcmVhdGVkXG4iKTsKKworICAgIGdfdmFyaWFudF9sb29rdXAocmVzdWx0LCAi c2Vzc2lvbl9oYW5kbGUiLCAicyIsICZwd19jdHgtPnNlc3Npb25faGFuZGxlKTsKKyAgICAvL2df dmFyaWFudF91bnJlZihyZXN1bHQpOworICAgIC8qIGVuYWJsZS9kaXNhYmxlIG1vdXNlIGN1cnNv ciAqLworICAgIHB3X2N0eC0+Y3Vyc29yLnZpc2libGUgPSBwd19jdHgtPmRyYXdfbW91c2U7Cisg ICAgc2VsZWN0X3NvdXJjZShjdHgpOworfQorCitzdGF0aWMgdm9pZCBvbl9zZXNzaW9uX2NyZWF0 ZWRfY2FsbGJhY2soR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7Cisg ICAgR1ZhcmlhbnQqIHJlc3VsdCA9IE5VTEw7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Cisg ICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOwor ICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4ID0gcHRyX2RidXNfY2FsbF9kYXRhLT5jdHg7CisKKyAg ICByZXN1bHQgPSBnX2RidXNfcHJveHlfY2FsbF9maW5pc2goR19EQlVTX1BST1hZKHNvdXJjZSks IHJlcywgJmVycm9yKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAoIWdfZXJyb3Jf bWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJFcnJv ciBjcmVhdGluZyBzY3JlZW5jYXN0IHNlc3Npb246ICVzXG4iLAorICAgICAgICAgICAgICAgICAg IGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKyAgICBnX3ZhcmlhbnRfdW5yZWYocmVzdWx0KTsKK30KKworLyoqCisg KiBmdW5jdGlvbiB0byBzdGFydCB0aGUgbmVnb3RhdGlvbgorICoKKyAqIEBwYXJhbSBjdHggY3R4 IEFWRm9ybWF0Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0CisgKi8KK3N0YXRpYyB2b2lkIGNyZWF0 ZV9zZXNzaW9uKEFWRm9ybWF0Q29udGV4dCAqY3R4KQoreworICAgIEdWYXJpYW50QnVpbGRlciBi dWlsZGVyOworICAgIGdfYXV0b2ZyZWUgY2hhciAqcmVxdWVzdF90b2tlbiA9IE5VTEw7CisgICAg Z19hdXRvZnJlZSBjaGFyICpyZXF1ZXN0X3BhdGggPSBOVUxMOworICAgIGdfYXV0b2ZyZWUgY2hh ciAqc2Vzc2lvbl90b2tlbiA9IE5VTEw7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2Ri dXNfY2FsbF9kYXRhOworCisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5w cml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4i KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5ld19wYXRoKGN0eCwgJnJlcXVlc3Rf cGF0aCwgJnJlcXVlc3RfdG9rZW4sICYocHdfY3R4LT5yZXF1ZXN0X3Rva2VuX2NvdW50KSwgUkVR VUVTVF9QQVRIKTsKKyAgICBuZXdfcGF0aChjdHgsIE5VTEwsICZzZXNzaW9uX3Rva2VuLCAmKHB3 X2N0eC0+c2Vzc2lvbl90b2tlbl9jb3VudCksIFNFU1NJT05fUEFUSCk7CisKKyAgICBwdHJfZGJ1 c19jYWxsX2RhdGEgPQorICAgICAgICBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0eCAvKiB1c2VyX2Rh dGEgKi8sIHJlcXVlc3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbl9jcmVh dGVfc2Vzc2lvbl9yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjayk7CisgICAgaWYgKHB0cl9kYnVz X2NhbGxfZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwK KyAgICAgICAgICAgICAgICJzdWJzY3JpYmVfdG9fc2lnbmFsIGZhaWxlZCFcbiIpOworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwg R19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWls ZGVyLCAie3N2fSIsICJoYW5kbGVfdG9rZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBn X3ZhcmlhbnRfbmV3X3N0cmluZyhyZXF1ZXN0X3Rva2VuKSk7CisgICAgZ192YXJpYW50X2J1aWxk ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJzZXNzaW9uX2hhbmRsZV90b2tlbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXdfc3RyaW5nKHNlc3Npb25fdG9rZW4pKTsK KworICAgIGdfZGJ1c19wcm94eV9jYWxsKHB3X2N0eC0+cHJveHksICJDcmVhdGVTZXNzaW9uIiwK KyAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoYXtzdn0pIiwgJmJ1aWxkZXIp LAorICAgICAgICAgICAgICAgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBwd19j dHgtPmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIG9uX3Nlc3Npb25fY3JlYXRl ZF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2RhdGEgLyog dXNlcl9kYXRhICovKTsKK30KKworLyoqCisgKiBoZWxwZXIgZnVuY3Rpb246IGdldCBhdmFpbGFi bGUgY3Vyc29yIG1vZGUgYW5kIHVwZGF0ZQorICoKKyAqIEBwYXJhbSBjdHggY3R4IEFWRm9ybWF0 Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0CisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9hdmFpbGFi bGVfY3Vyc29yX21vZGVzKEFWRm9ybWF0Q29udGV4dCAqY3R4KQoreworICAgIEdWYXJpYW50KiBj YWNoZWRfY3Vyc29yX21vZGVzID0gTlVMTDsKKyAgICB1aW50MzJfdCBhdmFpbGFibGVfY3Vyc29y X21vZGVzOworCisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2Rh dGE7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAorICAgICAgICAgICAgICAgIkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAg ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vcmV0dXJuZWQgcmVmZXJlbmNlIG11c3QgYmUg ZnJlZWQgd2l0aCBnX3ZhcmlhbnRfdW5yZWYoKS4KKyAgICBjYWNoZWRfY3Vyc29yX21vZGVzID0K KyAgICAgICAgZ19kYnVzX3Byb3h5X2dldF9jYWNoZWRfcHJvcGVydHkocHdfY3R4LT5wcm94eSwg IkF2YWlsYWJsZUN1cnNvck1vZGVzIik7CisgICAgYXZhaWxhYmxlX2N1cnNvcl9tb2RlcyA9Cisg ICAgICAgIGNhY2hlZF9jdXJzb3JfbW9kZXMgPyBnX3ZhcmlhbnRfZ2V0X3VpbnQzMihjYWNoZWRf Y3Vyc29yX21vZGVzKSA6IDA7CisKKyAgICAvKiBVc2UgZW1iZWRkZWQgb3IgaGlkZGVuIG1vZGUg Zm9yIG5vdyovCisgICAgYXZhaWxhYmxlX2N1cnNvcl9tb2RlcyA9IGF2YWlsYWJsZV9jdXJzb3Jf bW9kZXMgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUE9SVEFMX0NVUlNPUl9NT0RF X0VNQkVEREVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRBTF9DVVJTT1Jf TU9ERV9ISURERU4pOworICAgIHB3X2N0eC0+YXZhaWxhYmxlX2N1cnNvcl9tb2RlcyA9IGF2YWls YWJsZV9jdXJzb3JfbW9kZXM7CisKKyAgICBnX3ZhcmlhbnRfdW5yZWYoY2FjaGVkX2N1cnNvcl9t b2Rlcyk7Cit9CisKKy8qKgorICogY2FsbGJhY2sgZnVuY3Rpb24gb2YgY3JlYXRlZCBwcm94eQor ICoKKyAqIEBwYXJhbSBzb3VyY2UgR09iamVjdAorICogQHBhcmFtIHJlcyBHQXN5bmNSZXN1bHQK KyAqIEBwYXJhbSB1c2VyX2RhdGEgY3R4IEFWRm9ybWF0Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0 CisgKi8KK3N0YXRpYyB2b2lkIG9uX3BpcGV3aXJlX3Byb3h5X2NyZWF0ZWRfY2FsbGJhY2soR09i amVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHQXN5bmNSZXN1bHQgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIEdFcnJvciogZXJyb3Ig PSBOVUxMOworICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4ID0gdXNlcl9kYXRhOworICAgIFBpcGV3 aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOworCisgICAgaWYgKCFwd19j dHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAg IkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIHB3X2N0eC0+cHJveHkgPSBnX2RidXNfcHJveHlfbmV3X2ZpbmlzaChyZXMsICZl cnJvcik7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgaWYgKCFnX2Vycm9yX21hdGNoZXMo ZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiRXJyb3IgY3JlYXRp bmcgcHJveHk6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZShl cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1cGRhdGVfYXZhaWxhYmxlX2N1 cnNvcl9tb2RlcyhjdHgpOworICAgIGNyZWF0ZV9zZXNzaW9uKGN0eCk7Cit9CisKKy8qKgorICog R2V0IHRoZSBwcm94eSBmcm9tIGRlc2t0b3AtcG9ydGFsCisgKgorICogQHBhcmFtIGN0eCBBVkZv cm1hdENvbnRleHQgYXZmb3JtYXQgY29udGV4dAorICovCitzdGF0aWMgdm9pZCBjcmVhdGVfcGlw ZXdpcmVfcHJveHkoQVZGb3JtYXRDb250ZXh0ICpjdHgpCit7CisgICAgUGlwZXdpcmVHcmFiQ29u dGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFsaWQgcHJp dmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdf ZGJ1c19wcm94eV9uZXcocHdfY3R4LT5jb25uZWN0aW9uLCBHX0RCVVNfUFJPWFlfRkxBR1NfTk9O RSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLkRl c2t0b3AiLAorICAgICAgICAgICAgICAgICAgICAgIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rl c2t0b3AiLAorICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuU2Ny ZWVuQ2FzdCIsIHB3X2N0eC0+Y2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAoR0Fz eW5jUmVhZHlDYWxsYmFjaylvbl9waXBld2lyZV9wcm94eV9jcmVhdGVkX2NhbGxiYWNrLAorICAg ICAgICAgICAgICAgICAgICAgY3R4IC8qIHVzZXJfZGF0YSAqLyk7Cit9CisKKy8qKgorICogSW5p dGlhdGUgdGhlIHBpcGV3aXJlZ3JhYgorICoKKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRDb250ZXh0 IGF2Zm9ybWF0IGNvbnRleHQKKyAqLworc3RhdGljIGludCBpbml0X3BpcGV3aXJlZ3JhYihBVkZv cm1hdENvbnRleHQgKmN0eCkKK3sKKyAgICBjaGFyICphdXg7CisgICAgR0Vycm9yKiBlcnJvciA9 IE5VTEw7CisgICAgaW50IHJldCA9IDA7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4 ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFsaWQgcHJpdmF0ZSBjb250ZXh0 IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAg ICBwd19jdHgtPmNhcHR1cmVfdHlwZSA9IERFU0tUT1BfQ0FQVFVSRTsKKyAgICBwd19jdHgtPmNh bmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKworICAgIHB3X2N0eC0+Y29ubmVjdGlv biA9IGdfYnVzX2dldF9zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwgTlVMTCwgJmVycm9yKTsKKyAg ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcmV0ID0gZXJyb3ItPmNvZGU7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJFcnJvciBnZXR0aW5nIHNlc3Np b24gYnVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAg IGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAg cHdfY3R4LT5zZW5kZXJfbmFtZSA9CisgICAgICAgIGdfc3RyZHVwKGdfZGJ1c19jb25uZWN0aW9u X2dldF91bmlxdWVfbmFtZShwd19jdHgtPmNvbm5lY3Rpb24pICsgMSk7CisKKyAgICAvKiBSZXBs YWNlIGRvdHMgYnkgdW5kZXJzY29yZXMgKi8KKyAgICBhdXggPSBhdl9zdHJpcmVwbGFjZShwd19j dHgtPnNlbmRlcl9uYW1lLCAiLiIsICJfIik7CisKKyAgICAvL1VwZGF0ZSBzZW5kZXIgbmFtZSB3 aXRoIG1vZGlmaWVkIHN0cmluZworICAgIHB3X2N0eC0+c2VuZGVyX25hbWUgPSBhdXg7CisgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSW5pdGlhbGl6ZWQgKHNlbmRlciBuYW1lOiAlcylc biIsCisgICAgICAgICAgIHB3X2N0eC0+c2VuZGVyX25hbWUpOworCisgICAgY3JlYXRlX3BpcGV3 aXJlX3Byb3h5KGN0eCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhlbHBlciBm dW5jdGlvbjogY2FsY3VsYXRlIHRoZSB3YWl0IHRpbWUgYmFzZWQKKyAqIG9uIHRoZSBmcmFtZSBk dXJhdGlvbgorICoKKyAqIEBwYXJhbSBzIEFWRm9ybWF0Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0 CisgKiBAcmV0dXJuIGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgaW50NjRfdCB3YWl0X2ZyYW1l KEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpjID0gcy0+ cHJpdl9kYXRhOworICAgIGludDY0X3QgY3VydGltZSwgZGVsYXk7CisKKyAgICAvKiBDYWxjdWxh dGUgdGhlIHRpbWUgb2YgdGhlIG5leHQgZnJhbWUgKi8KKyAgICBjLT50aW1lX2ZyYW1lICs9IGMt PmZyYW1lX2R1cmF0aW9uOworCisgICAgLyogd2FpdCBiYXNlZCBvbiB0aGUgZnJhbWUgcmF0ZSAq LworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgY3VydGltZSA9IGF2X2dldHRpbWVfcmVsYXRpdmUo KTsKKyAgICAgICAgZGVsYXkgICA9IGMtPnRpbWVfZnJhbWUgLSBjdXJ0aW1lOworICAgICAgICBp ZiAoZGVsYXkgPD0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhdl91c2xlZXAoZGVs YXkpOworICAgIH0KKworICAgIHJldHVybiBjdXJ0aW1lOworfQorCisvKioKKyAqIGhlbHBlciBm dW5jdGlvbjogR3JhYnMgYSBmcmFtZSBmcm9tIHBpcGV3aXJlCisgKgorICogQHBhcmFtIGN0eCBB VkZvcm1hdENvbnRleHQgYXZmb3JtYXQgY29udGV4dAorICogQHBhcmFtIHBrdCBQYWNrZXQgaG9s ZGluZyB0aGUgZ3JhYmJlZCBmcmFtZQorICovCitzdGF0aWMgaW50IGdyYWJfZnJhbWUoQVZGb3Jt YXRDb250ZXh0ICpjdHgsIEFWUGFja2V0ICpwa3QpCit7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4 dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBwdGhy ZWFkX211dGV4X2xvY2soJnB3X2N0eC0+Y3VycmVudF9wa3RfbXV0ZXgpOworICAgIGlmICgocmV0 ID0gYXZfcGFja2V0X3JlZihwa3QsIHB3X2N0eC0+Y3VycmVudF9wa3QpKSA8IDApIHsKKyAgICAg ICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+Y3VycmVudF9wa3RfbXV0ZXgpOworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJhdl9wYWNrZXRfcmVmKCkgZmFpbGVkIGlu IGdyYWJfZnJhbWUoKVxuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHRo cmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+Y3VycmVudF9wa3RfbXV0ZXgpOworICAgIHJldHVy biByZXQ7Cit9CisKKy8qKgorICogcmVhZCB0aGUgZnJhbWUgZnJvbSBwaXBld2lyZQorICoKKyAq IEBwYXJhbSBjdHggQ29udGV4dCBmcm9tIGF2Zm9ybWF0IGNvcmUKKyAqIEBwYXJhbSBwa3QgUGFj a2V0IGhvbGRpbmcgdGhlIGdyYWJiZWQgZnJhbWUKKyAqIEByZXR1cm4gZnJhbWUgc2l6ZSBpbiBi eXRlcworICovCitzdGF0aWMgaW50IHBpcGV3aXJlZ3JhYl9yZWFkX3BhY2tldChBVkZvcm1hdENv bnRleHQgKmN0eCwgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQ2NF90IHB0czsKKyAgICBpbnQg cmV0ID0gMDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0 YTsKKyAgICBpZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is CisgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKyAgICBkbyB7CisgICAgICAgIHdh aXRfZnJhbWUoY3R4KTsKKyAgICAgICAgcHRzID0gYXZfZ2V0dGltZSgpOworICAgICAgICBpZigo cmV0ID0gZ3JhYl9mcmFtZShjdHgsIHBrdCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7 CisgICAgICAgIHBrdC0+ZHRzID0gcGt0LT5wdHMgPSBwdHM7CisgICAgICAgIHBrdC0+ZHVyYXRp b24gPSBwd19jdHgtPmZyYW1lX2R1cmF0aW9uOworICAgfSB3aGlsZSghcGt0LT5kYXRhKTsKKwor ICAgIHJldHVybiBwa3QtPnNpemU7Cit9CisKKy8qKgorICogQ2xvc2VzIHBpcGV3aXJlIGZyYW1l IGdyYWJiZXIuCisgKgorICogQHBhcmFtIGN0eCBDb250ZXh0IGZyb20gYXZmb3JtYXQgY29yZQor ICogQHJldHVybiAwIHN1Y2Nlc3MsICEwIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBwaXBld2ly ZWdyYWJfcmVhZF9jbG9zZShBVkZvcm1hdENvbnRleHQgKmN0eCkKK3sKKyAgICBQaXBld2lyZUdy YWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKKyAgICBpZiAoIXB3X2N0eCkgewor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiSW52YWxp ZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOworICAgIH0KKworICAgIGlmIChwd19jdHgtPnRocmVhZF9sb29wKQorICAgICAgICBwd190 aHJlYWRfbG9vcF9zaWduYWwocHdfY3R4LT50aHJlYWRfbG9vcCwgZmFsc2UpOworCisgICAgaWYg KHB3X2N0eC0+Z2xpYl9tYWluX2xvb3AgJiYKKyAgICAgICAgZ19tYWluX2xvb3BfaXNfcnVubmlu Zyhwd19jdHgtPmdsaWJfbWFpbl9sb29wKSkgeworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHB3 X2N0eC0+Z2xpYl9tYWluX2xvb3ApOworICAgIH0KKworICAgIHB0aHJlYWRfam9pbihwd19jdHgt PnBpcGV3aXJlX3B0aHJlYWQsIE5VTEwpOworICAgIGF2X3BhY2tldF9mcmVlKCZwd19jdHgtPmN1 cnJlbnRfcGt0KTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFRocmVhZCB0byBpbml0 aWFsaXplIHRoZSBQaXBld2lyZSBsaWJyYXJ5IGFuZAorICogaW5pdGlhdGUgdGhlIGNvbm5ldGlv biBmbG93CisgKgorICogQHBhcmFtIGFyZ28gdGhyZWFkIGFyZ3VtZW50IGN0eAorICovCitzdGF0 aWMgdm9pZCAqcGlwZXdpcmVfZ2RidXNfaW5pdF9wdGhyZWFkKHZvaWQgKmFyZ28pCit7CisgICAg aW50cHRyX3QgcmV0ID0gMDsKKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IChBVkZvcm1hdENv bnRleHQgKilhcmdvOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJp dl9kYXRhOworICAgIGlmICghcHdfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwKKyAgICAgICAgICAgICAgICJJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7 CisgICAgICAgIHJldHVybiAodm9pZCAqKUFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAv KiBpbml0aWFsaXplIHRoZSBQaXBlV2lyZSBsaWJyYXJ5ICovCisgICAgcHdfaW5pdChOVUxMLCBO VUxMKTsKKworICAgIHB3X2N0eC0+Z2xpYl9tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM TCwgRkFMU0UpOworICAgIGlmIChwd19jdHgtPmdsaWJfbWFpbl9sb29wID09IE5VTEwpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiZ19tYWluX2xvb3BfbmV3IGZhaWxlZCFc biIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZXhpdF9w d19kZWluaXQ7CisgICAgfQorCisgICAgaWYgKGluaXRfcGlwZXdpcmVncmFiKGN0eCkgIT0gMCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJpbml0X3BpcGV3aXJlZ3JhYiBm YWlsZWQhXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFUEVSTSk7CisgICAgICAgIGdvdG8g ZXhpdF9nbGliX2xvb3A7CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJz dGFydGluZyBnbGliIG1haW4gbG9vcCFcbiIpOworICAgIGdfbWFpbl9sb29wX3J1bihwd19jdHgt PmdsaWJfbWFpbl9sb29wKTsKKworICAgIC8qIGdfbWFpbl9sb29wIHF1aXRlZCwgZGVzdHJveSBw aXBld2lyZSovCisgICAgcGlwZXdpcmVfZGVzdHJveShjdHgpOworCitleGl0X2dsaWJfbG9vcDoK KyAgICBnX21haW5fbG9vcF91bnJlZihwd19jdHgtPmdsaWJfbWFpbl9sb29wKTsKKyAgICBwd19j dHgtPmdsaWJfbWFpbl9sb29wID0gTlVMTDsKK2V4aXRfcHdfZGVpbml0OgorICAgIHB3X2RlaW5p dCgpOworCisgICAgcmV0dXJuICh2b2lkICopcmV0OworfQorCisvKioKKyAqIEluaXRpYWxpemVz IHRoZSBwaXBld2lyZSBncmFiIGRldmljZSBkZW11eGVyCisgKgorICogQHBhcmFtIGN0eCBDb250 ZXh0IGZyb20gYXZmb3JtYXQgY29yZQorICogQHJldHVybiBBVkVSUk9SX0lPIGVycm9yLCAwIHN1 Y2Nlc3MKKyAqLworc3RhdGljIGludCBwaXBld2lyZWdyYWJfcmVhZF9oZWFkZXIoQVZGb3JtYXRD b250ZXh0ICpjdHgpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4 dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7CisKKyAgICBpZiAoIXB3X2N0eCkgeworICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2 YXRlIGNvbnRleHQgZGF0YSFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwor ICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgdG9rZW4gY291bnQKKyAgICBwd19jdHgtPnJlcXVl c3RfdG9rZW5fY291bnQgPSAwOworICAgIHB3X2N0eC0+c2Vzc2lvbl90b2tlbl9jb3VudCA9IDA7 CisKKyAgICBhdG9taWNfaW5pdCgmcHdfY3R4LT5hdnN0cmVhbV9jb2RlY19mbGFnLCAwKTsKKwor ICAgIHB0aHJlYWRfY29uZF9pbml0KCZwd19jdHgtPmF2c3RyZWFtX2NvZGVjX2NvbmRfdmFyLCBO VUxMKTsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoJnB3X2N0eC0+YXZzdHJlYW1fY29kZWNfbXV0 ZXgsIE5VTEwpOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmcHdfY3R4LT5jdXJyZW50X3BrdF9t dXRleCwgTlVMTCk7CisKKyAgICBwd19jdHgtPmN1cnJlbnRfcGt0ID0gYXZfcGFja2V0X2FsbG9j KCk7CisgICAgaWYgKHB3X2N0eC0+Y3VycmVudF9wa3QgPT0gTlVMTCkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBhbGxvY2F0 ZSBuZXcgYXYgcGFja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICB9CisKKyAgICByZXQgPSBwdGhyZWFkX2NyZWF0ZSgmcHdfY3R4LT5waXBld2lyZV9wdGhyZWFk LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICZwaXBld2lyZV9nZGJ1c19pbml0X3B0 aHJlYWQsIGN0eCk7CisgICAgaWYocmV0KSB7CisgICAgICAgIHJldCA9IEFWRVJST1IocmV0KTsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHRocmVhZF9jcmVhdGUoKSBmYWls ZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKKyAgICAgICAgZ290 byBmYWlsOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5hdnN0cmVh bV9jb2RlY19tdXRleCk7CisgICAgd2hpbGUgKCFhdG9taWNfbG9hZCgmcHdfY3R4LT5hdnN0cmVh bV9jb2RlY19mbGFnKSkgeworICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmcHdfY3R4LT5hdnN0 cmVhbV9jb2RlY19jb25kX3ZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnB3X2N0eC0+ YXZzdHJlYW1fY29kZWNfbXV0ZXgpOworICAgIH0KKyAgICAvKiB3YWl0IHVudGlsIHNpZ25hbGVk ICovCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+YXZzdHJlYW1fY29kZWNfbXV0 ZXgpOworCisgICAgcmV0dXJuIHJldDsKKworZmFpbDoKKyAgICBhdl9wYWNrZXRfZnJlZSgmcHdf Y3R4LT5jdXJyZW50X3BrdCk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IEFW Q2xhc3MgcGlwZXdpcmVncmFiID0geworICAgIC5jbGFzc19uYW1lID0gInBpcGV3aXJlZ3JhYiBp bmRldiIsCisgICAgLml0ZW1fbmFtZSA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorICAgIC5vcHRp b24gPSBvcHRpb25zLAorICAgIC52ZXJzaW9uID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorICAg IC5jYXRlZ29yeSA9IEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9WSURFT19JTlBVVCwKK307CisK Ky8qKiBwaXBld2lyZSBncmFiYmVyIGRldmljZSBkZW11eGVyIGRlY2xhcmF0aW9uICovCitjb25z dCBBVklucHV0Rm9ybWF0IGZmX3BpcGV3aXJlZ3JhYl9kZW11eGVyID0geworICAgIC5uYW1lID0g InBpcGV3aXJlZ3JhYiIsCisgICAgLmxvbmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJz Y3JlZW4gY2FwdHVyZSwgdXNpbmcgcGlwZXdpcmUiKSwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBz aXplb2Yoc3RydWN0IFBpcGV3aXJlR3JhYkNvbnRleHQpLAorICAgIC5yZWFkX2hlYWRlciA9IHBp cGV3aXJlZ3JhYl9yZWFkX2hlYWRlciwKKyAgICAucmVhZF9wYWNrZXQgPSBwaXBld2lyZWdyYWJf cmVhZF9wYWNrZXQsCisgICAgLnJlYWRfY2xvc2UgPSBwaXBld2lyZWdyYWJfcmVhZF9jbG9zZSwK KyAgICAuZmxhZ3MgPSBBVkZNVF9OT0ZJTEUsCisgICAgLnByaXZfY2xhc3MgPSAmcGlwZXdpcmVn cmFiLAorfTsKLS0gCjIuMzQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVn Lm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRv IHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVx dWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=