From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14953 invoked by alias); 23 Jan 2013 22:36:19 -0000 Received: (qmail 14925 invoked by uid 22791); 23 Jan 2013 22:36:18 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_FV X-Spam-Check-By: sourceware.org Received: from mail-wi0-f181.google.com (HELO mail-wi0-f181.google.com) (209.85.212.181) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 23 Jan 2013 22:36:11 +0000 Received: by mail-wi0-f181.google.com with SMTP id hq4so1197054wib.8 for ; Wed, 23 Jan 2013 14:36:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:mime-version:from:date:message-id:subject:to :content-type:x-gm-message-state; bh=laSrc9Zhs31YpeoBQHiwb9XPye3nCvDdt6vpudAqMU4=; b=CGqkiVmqDNaRjlAF7wGio6K0zizDI1PS1mpvwUzUzTwXz4c/e40jENJehGflEJPXqQ 1pkgtjUADJDgKytMhZc/imkFLsbLt2K0TU0CLTCL9FLkSxsW4z6XcIju95HyhfvuXd9T 0qm82vb3LBPA5KTqJn3dWvt4lKJx+uX6R/0jHpb+XRYKeP2j4rrli0NDN5yKslUpCGIs T/Rrb9sC81aUJeGg+3b+hnvMbHJRJfFtYtPc46imOkcal/2OyZ/0jLpb0yxLwDYyercR JmfokwhNtDIGqbUtqOMzr7qasAHCZiJ+TqqqspCwTkUsNGfUkBxtApqzz6mXVxtBLD69 r8Tg== X-Received: by 10.180.20.138 with SMTP id n10mr77374wie.0.1358980569423; Wed, 23 Jan 2013 14:36:09 -0800 (PST) MIME-Version: 1.0 Received: by 10.195.12.234 with HTTP; Wed, 23 Jan 2013 14:35:49 -0800 (PST) From: Caroline Tice Date: Wed, 23 Jan 2013 22:36:00 -0000 Message-ID: Subject: Re: [PATCH] Vtable pointer verification, main gcc changes (patch 2 of 3) To: GCC Patches Content-Type: multipart/mixed; boundary=bcaec53d5b2518e0ca04d3fc5256 X-Gm-Message-State: ALoCoQnJDFxJK6PA0QLu2Rk3SHrJPPHcfCPhnel4edfJu5Qz9Kwq6YEi6o4rEuEcETw3opimQlBabagJllm9kgkzCJ17qF6rd46atp3tRxvQXSwm82tiPlSax2u0ZX11ewVn4PGv63j10oRslicT/fhSx+/Mi/0cNZNGdLzE0TOLzIZukU84fwoAEIsRjRz7VBH8ujLQxrE+ X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-01/txt/msg01179.txt.bz2 --bcaec53d5b2518e0ca04d3fc5256 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1895 I have made the requested changes to the previous patches I submitted for the vtable verification feature. As requested, I have broken this into three patches: the C++ front end changes, the main gcc changes, and the runtime library changes. Here are the main gcc changes for the vtable verification features. -- Caroline Tice cmtice@google.com ChangeLog: 2013-01-23 Caroline Tice * ligbcc/config.host (extra_parts): Add vtv_start.o and vtv_end.o to the list. * libgcc/Makefile.in: Add definitin for gcc_srcdir; add rules for building vtv_start.o and vtv_end.o. * vtv_start.c: New file. * tree.h: Add extern function declaration for save_vtable_map_decl. * tree-pass.h (pass_vtable_verify): Declare new pass. * vtv_end.c: New file. * timevar.def (TV_VTABLE_VERIFICATION): Declare new time var. * flag-types.h (vtv_priority): New enum, for values for new '-fvtable-verify=' option. * tree-vtable-verify.c: New file, contains vtable verification tree pass. * tree-vtable-verify.h: New file. * common.opt: (fvtable-verify=): New option. Also define vtv_priority values for the option. * varasm.c (assemble_variable): Add code for handling variables that go into the ".vtable_map_vars" section. (assemble_vtv_perinit_initializer): New function. (default_section_type_flags): Add SECTION_LINKONCE to ".vtable_map_vars" section items. * output.h (assemble_vtv_preinit_initializer): External function decl. * Makefile.in (OBJS): Add tree-vtable-verify.o to list of object files. (tree-vtable-verify.o): Add rule for building object file. (GTFILES): Add tree-vtable-verify.c to list of files that use GCC's garbage collector. * passes.c (init_optimization_pass): Add pass_vtable_verify. * config/gnu-user.h: Add vtv_start.o to STARTFILE_SPEC if fvtable-verify is present; Add vtv_end.o to ENDFILE_SPEC if fvtable-verify is present. --bcaec53d5b2518e0ca04d3fc5256 Content-Type: application/octet-stream; name="fsf-vtable-verification.v4.gcc-main.patch" Content-Disposition: attachment; filename="fsf-vtable-verification.v4.gcc-main.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hcb1xbry0 Content-length: 92582 SW5kZXg6IGxpYmdjYy9jb25maWcuaG9zdAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBsaWJnY2MvY29uZmlnLmhvc3QJKHJldmlzaW9uIDE5NDgyMykK KysrIGxpYmdjYy9jb25maWcuaG9zdAkod29ya2luZyBjb3B5KQpAQCAtMTk4 LDcgKzE5OCw3IEBAIGNhc2UgJHtob3N0fSBpbgogICA7OwogKi0qLWxpbnV4 KiB8IGZydi0qLSpsaW51eCogfCAqLSota2ZyZWVic2QqLWdudSB8ICotKi1r bmV0YnNkKi1nbnUgfCAqLSotZ251KiB8ICotKi1rb3BlbnNvbGFyaXMqLWdu dSkKICAgdG1ha2VfZmlsZT0iJHRtYWtlX2ZpbGUgdC1jcnRzdHVmZi1waWMg dC1saWJnY2MtcGljIHQtZWgtZHcyLWRpcCB0LXNsaWJnY2MgdC1zbGliZ2Nj LWdsZCB0LXNsaWJnY2MtZWxmLXZlciB0LWxpbnV4IgotICBleHRyYV9wYXJ0 cz0iY3J0YmVnaW4ubyBjcnRiZWdpblMubyBjcnRiZWdpblQubyBjcnRlbmQu byBjcnRlbmRTLm8iCisgIGV4dHJhX3BhcnRzPSJjcnRiZWdpbi5vIGNydGJl Z2luUy5vIGNydGJlZ2luVC5vIGNydGVuZC5vIGNydGVuZFMubyB2dHZfc3Rh cnQubyB2dHZfZW5kLm8iCiAgIDs7CiAqLSotbHlueG9zKikKICAgdG1ha2Vf ZmlsZT0iJHRtYWtlX2ZpbGUgdC1seW54ICRjcHVfdHlwZS90LWNydHN0dWZm IHQtY3J0c3R1ZmYtcGljIHQtbGliZ2NjLXBpYyIKSW5kZXg6IGxpYmdjYy9N YWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJnY2Mv TWFrZWZpbGUuaW4JKHJldmlzaW9uIDE5NDgyMykKKysrIGxpYmdjYy9NYWtl ZmlsZS5pbgkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogbGli Z2NjX3RvcGRpciA9IEBsaWJnY2NfdG9wZGlyQAogaG9zdF9zdWJkaXIgPSBA aG9zdF9zdWJkaXJACiAKK2djY19zcmNkaXIgPSAkKGxpYmdjY190b3BkaXIp L2djYwogZ2NjX29iamRpciA9ICQoTVVMVElCVUlMRFRPUCkuLi8uLi8kKGhv c3Rfc3ViZGlyKS9nY2MKIAogc3JjZGlyID0gQHNyY2RpckAKQEAgLTk2OSw2 ICs5NzAsMTYgQEAgY3J0ZW5kUyQob2JqZXh0KTogJChzcmNkaXIpL2NydHN0 dWZmLmMKICMgVGhpcyBpcyBhIHZlcnNpb24gb2YgY3J0YmVnaW4gZm9yIC1z dGF0aWMgbGlua3MuCiBjcnRiZWdpblQkKG9iamV4dCk6ICQoc3JjZGlyKS9j cnRzdHVmZi5jCiAJJChjcnRfY29tcGlsZSkgJChDUlRTVFVGRl9UX0NGTEFH UykgLWMgJDwgLURDUlRfQkVHSU4gLURDUlRTVFVGRlRfTworCisjIFRoZXNl IGFyZSB1c2VkIGluIHZ0YWJsZSB2ZXJpZmljYXRpb247IHNlZSBjb21tZW50 cyBpbiBzb3VyY2UgZmlsZXMgZm9yCisjIG1vcmUgZGV0YWlscy4KK3Z0dl9z dGFydCQob2JqZXh0KTogJChnY2Nfc3JjZGlyKS92dHZfc3RhcnQuYworCSQo Y3J0X2NvbXBpbGUpICQoQ1JUU1RVRkZfVF9DRkxBR1NfUykgXAorCSAgLWMg JChnY2Nfc3JjZGlyKS92dHZfc3RhcnQuYworCit2dHZfZW5kJChvYmpleHQp OiAkKGdjY19zcmNkaXIpL3Z0dl9lbmQuYworCSQoY3J0X2NvbXBpbGUpICQo Q1JUU1RVRkZfVF9DRkxBR1NfUykgXAorCSAgLWMgJChnY2Nfc3JjZGlyKS92 dHZfZW5kLmMKIGVuZGlmCiAKIGlmZXEgKCQoQ1VTVE9NX0NSVElOKSwpCklu ZGV4OiBnY2MvdnR2X3N0YXJ0LmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL3Z0dl9zdGFydC5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Z0dl9z dGFydC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKiAgQ29w eXJpZ2h0IChDKSAyMDEyLCAyMDEzCisgICAgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKwor R0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0ND IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK K0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4K KworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgdnRhYmxlIHZlcmlmaWNhdGlvbiBmZWF0dXJlIChmb3IgYQor ICAgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUsIHNlZSBj b21tZW50cyBpbgorICAgdHJlZS12dGFibGUtdmVyaWZ5LmMpLiAgVGhlIHZ0 YWJsZSB2ZXJpZmljYXRpb24gZmVhdHVyZSBjcmVhdGVzCisgICBjZXJ0YWlu IGdsb2JhbCBzeW1ib2xzIHRoYXQgbmVlZCB0byBiZSByZWFkLXdyaXRlIHNv bWV0aW1lcyBkdXJpbmcKKyAgIHByb2dyYW0gZXhlY3V0aW9uLCBhbmQgcmVh ZC1vbmx5IGF0IG90aGVycy4gIEl0IHVzZXMgJ21wcm90ZWN0JyB0bworICAg Y2hhbmdlIHRoZSBtZW1vcnkgcHJvdGVjdGlvbnMgb2YgdGhlIHBhZ2VzIG9u IHdoaWNoIHRoZXNlIHZhcmlhYmxlcworICAgYXJlIHN0b3JlZC4gIEluIG9y ZGVyIHRvIG5vdCBhZmZlY3QgdGhlIHByb3RlY3Rpb25zIG9mIG90aGVyCisg ICBwcm9ncmFtIHZhcmlhYmxlcywgdGhlc2UgdmFyaWFibGVzIGFyZSBwdXQg aW50byBhIHNwZWNpYWwgbmFtZWQKKyAgIHNlY3Rpb24sICIudnRhYmxlX21h cF92YXJzIiwgd2hpY2ggaXMgcGFnZS1hbGlnbmVkIGF0IHRoZSBzdGFydCwK KyAgIGFuZCB3aGljaCBpcyBwYWRkZWQgd2l0aCBhIHBhZ2Utc2l6ZWQgYW1v dW50IG9mIHplcm9zIGF0IHRoZSBlbmQuCisgICBUbyBtYWtlIHRoaXMgc2Vj dGlvbiBwYWdlIGFsaWduZWQsIHdlIGNyZWF0ZSBhIHNwZWNpYWwgc3ltYm9s LAorICAgIl92dGFibGVfbWFwX3ZhcnNfc3RhcnQiIHdoaWNoIHdlIG1ha2Ug dGhlIHZlcnkgZmlyc3QgdGhpbmcgdGhhdAorICAgZ29lcyBpbnRvIHRoZSBz ZWN0aW9uLiAgVGhpcyBmaWxlIGRlZmluZXMgdGhhdCBzeW1ib2wgKGFuZCBv bmx5CisgICB0aGF0IHN5bWJvbCkuICBHQ0MgY29tcGlsZXMgdGhpcyBmaWxl IGludG8gdnR2X3N0YXJ0Lm8sIGFuZAorICAgaW5zZXJ0cyB2dHZfc3RhcnQu byBpbnRvIHRoZSBsaW5rIGxpbmUgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgIGNy dGJlZ2luLm8sIGlmIHRoZSBwcm9ncmFtIGlzIGNvbXBpbGVkIHdpdGggLWZ2 dGFibGUudmVyaWZ5LgorCisgICBJbiBvcmRlciB0byBwYWQgdGhlICIudnRh YmxlX21hcF92YXJzIiBzZWN0aW9uIHdpdGggYSBwYWdlLXNpemVkCisgICBh bW91bnQgb2YgemVyb3MgYXQgdGhlIGVuZCwgdGhlcmUgaXMgYSBzZWNvbmQg c3ltYm9sLAorICAgX3Z0YWJsZV9tYXBfdmFyc19lbmQsIHdoaWNoIGlzIGRl ZmluZWQgaW4gYW5vdGhlciBmaWxlLCB2dHZfZW5kLmMuCisgICBUaGlzIHNl Y29uZCBzeW1ib2wgaXMgYSBwYWdlLXNpemVkIGFycmF5IG9mIGNoYXJzLCB6 ZXJvLWZpbGxlZCwgYW5kCisgICBpcyB0aGUgdmVyeSBsYXN0IHRoaW5nIHRv IGdvIGludG8gdGhlIHNlY3Rpb24uICBXaGVuIHRoZSBHQ0MgZHJpdmVyCisg ICBpbnNlcnRzIHZ0dl9zdGFydC5vIGludG8gdGhlIGxpbmsgbGluZSAoanVz dCBhZnRlciBjcnRiZWdpbi5vKSBpdAorICAgYWxzbyBpbnNlcnRzIHZ0dl9l bmQubyBpbnRvIHRoZSBsaW5rIGxpbmUsIGp1c3QgYmVmb3JlIGNydGVuZC5v LgorICAgVGhpcyBoYXMgdGhlIGRlc2lyZWQgZWZmZWN0IG9mIG1ha2luZyBv dXIgc2VjdGlvbiBwYWdlLWFsaWduZWQgYW5kCisgICBwYWdlLXNpemUgcGFk ZWQsIGVuc3VyaW5nIHRoYXQgbm8gb3RoZXIgcHJvZ3JhbSBkYXRhIGxhbmRz IG9uIG91cgorICAgcGFnZXMuICAqLworCisjZGVmaW5lIFBBR0VfU0laRSA0 MDk2CisKKyNpZmRlZiBCSUdfUEFHRV9TSVpFCisvKiBUT0RPIC0gUmVwbGFj ZSAnNDA5NicgYmVsb3cgd2l0aCBjb3JyZWN0IGJpZyBwYWdlIHNpemUuICAq LworI2RlZmluZSBQQUdFX1NJWkUgNDA5NgorI2VuZGlmCisKKworLyogUGFn ZS1hbGlnbmVkIHN5bWJvbCB0byBtYXJrIGJlZ2lubmluZyBvZiAudnRhYmxl X21hcF92YXJzIHNlY3Rpb24uICAqLworY2hhciBfdnRhYmxlX21hcF92YXJz X3N0YXJ0IFtdCitfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKCJw cm90ZWN0ZWQiKSwgdXNlZCwgYWxpZ25lZChQQUdFX1NJWkUpLAorCQlzZWN0 aW9uKCIudnRhYmxlX21hcF92YXJzIikpKQorICA9IHsgfTsKSW5kZXg6IGdj Yy90cmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3RyZWUu aAkocmV2aXNpb24gMTk1MzEzKQorKysgZ2NjL3RyZWUuaAkod29ya2luZyBj b3B5KQpAQCAtNjQzOSw2ICs2NDM5LDkgQEAgaXNfbGFuZ19zcGVjaWZpYyAo dHJlZSB0KQogLyogSW4gZ2ltcGxlLWxvdy5jLiAgKi8KIGV4dGVybiBib29s IGJsb2NrX21heV9mYWxsdGhydSAoY29uc3RfdHJlZSk7CiAKKy8qIEluIHRy ZWUtdnRhYmxlLXZlcmlmeS5jLiAgKi8KK2V4dGVybiB2b2lkIHNhdmVfdnRh YmxlX21hcF9kZWNsICh0cmVlKTsKKwogDAogLyogRnVuY3Rpb25hbCBpbnRl cmZhY2UgdG8gdGhlIGJ1aWx0aW4gZnVuY3Rpb25zLiAgKi8KIApAQCAtNjUy OSw0ICs2NTMyLDUgQEAgYnVpbHRpbl9kZWNsX2ltcGxpY2l0X3AgKGVudW0g YnVpbHRfaW5fZgogCSAgJiYgYnVpbHRpbl9pbmZvLmltcGxpY2l0X3BbdW5z X2ZuY29kZV0pOwogfQogCisKICNlbmRpZiAgLyogR0NDX1RSRUVfSCAgKi8K SW5kZXg6IGdjYy90cmVlLXBhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvdHJlZS1wYXNzLmgJKHJldmlzaW9uIDE5NTMxMykKKysrIGdj Yy90cmVlLXBhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCw3 IEBAIGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdG1fZWQK IGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3BsaXRfZnVu Y3Rpb25zOwogZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19m ZWVkYmFja19zcGxpdF9mdW5jdGlvbnM7CiBleHRlcm4gc3RydWN0IGdpbXBs ZV9vcHRfcGFzcyBwYXNzX3N0cmVuZ3RoX3JlZHVjdGlvbjsKK2V4dGVybiBz dHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdnRhYmxlX3ZlcmlmeTsKIAog LyogSVBBIFBhc3NlcyAqLwogZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29w dF9wYXNzIHBhc3NfaXBhX2xvd2VyX2VtdXRsczsKSW5kZXg6IGdjYy92dHZf ZW5kLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Z0dl9lbmQu YwkocmV2aXNpb24gMCkKKysrIGdjYy92dHZfZW5kLmMJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsNjAgQEAKKy8qICBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw MTMKKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQg QU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB2dGFibGUgdmVy aWZpY2F0aW9uIGZlYXR1cmUgKGZvciBhCisgICBkZXRhaWxlZCBkZXNjcmlw dGlvbiBvZiB0aGUgZmVhdHVyZSwgc2VlIGNvbW1lbnRzIGluCisgICB0cmVl LXZ0YWJsZS12ZXJpZnkuYykuICBUaGUgdnRhYmxlIHZlcmlmaWNhdGlvbiBm ZWF0dXJlIGNyZWF0ZXMKKyAgIGNlcnRhaW4gZ2xvYmFsIHN5bWJvbHMgdGhh dCBuZWVkIHRvIGJlIHJlYWQtd3JpdGUgc29tZXRpbWVzIGR1cmluZworICAg cHJvZ3JhbSBleGVjdXRpb24sIGFuZCByZWFkLW9ubHkgYXQgb3RoZXJzLiAg SXQgdXNlcyAnbXByb3RlY3QnIHRvCisgICBjaGFuZ2UgdGhlIG1lbW9yeSBw cm90ZWN0aW9ucyBvZiB0aGUgcGFnZXMgb24gd2hpY2ggdGhlc2UgdmFyaWFi bGVzCisgICBhcmUgc3RvcmVkLiAgSW4gb3JkZXIgdG8gbm90IGFmZmVjdCB0 aGUgcHJvdGVjdGlvbnMgb2Ygb3RoZXIKKyAgIHByb2dyYW0gdmFyaWFibGVz LCB0aGVzZSB2YXJpYWJsZXMgYXJlIHB1dCBpbnRvIGEgc3BlY2lhbCBuYW1l ZAorICAgc2VjdGlvbiwgIi52dGFibGVfbWFwX3ZhcnMiLCB3aGljaCBpcyBw YWdlLWFsaWduZWQgYXQgdGhlIHN0YXJ0LAorICAgYW5kIHdoaWNoIGlzIHBh ZGRlZCB3aXRoIGEgcGFnZS1zaXplZCBhbW91bnQgb2YgemVyb3MgYXQgdGhl IGVuZC4KKyAgIFRvIG1ha2UgdGhpcyBzZWN0aW9uIHBhZ2UgYWxpZ25lZCwg d2UgY3JlYXRlIGEgc3BlY2lhbCBzeW1ib2wsCisgICAiX3Z0YWJsZV9tYXBf dmFyc19zdGFydCIgd2hpY2ggd2UgbWFrZSB0aGUgdmVyeSBmaXJzdCB0aGlu ZyB0aGF0CisgICBnb2VzIGludG8gdGhlIHNlY3Rpb24uICBUaGF0IGlzIGRl ZmluZWQgaW4gdnR2X3N0YXJ0LmMgKHdoaWNoCisgICBjb250YWlucyBub3Ro aW5nIGVsc2UpLiAgdnR2X3N0YXJ0LmMgZ2VzdCBjb21waWxlZCBpbnRvCisg ICB2dHZfc3RhcnQubywgYW5kIHZ0dl9zdGFydC5vIGdldHMgaW5zZXJ0ZWQg aW50byB0aGUgbGluayBsaW5lCisgICBpbW1lZGlhdGVseSBhZnRlciBjcnRi ZWdpbi5vLCBpZiB0aGUgcHJvZ3JhbSBpcyBjb21waWxlZCB3aXRoCisgICAt ZnZ0YWJsZS52ZXJpZnkuCisKKyAgIEluIG9yZGVyIHRvIHBhZCB0aGUgIi52 dGFibGVfbWFwX3ZhcnMiIHNlY3Rpb24gd2l0aCBhIHBhZ2Utc2l6ZWQKKyAg IGFtb3VudCBvZiB6ZXJvcyBhdCB0aGUgZW5kLCB0aGVyZSBpcyBhIHNlY29u ZCBzeW1ib2wsCisgICBfdnRhYmxlX21hcF92YXJzX2VuZC4gIFRoaXMgZmls ZSBkZWZpbmVzIHRoYXQgc3ltYm9sIChhbmQgb25seSB0aGlzCisgICBzeW1i b2wpLiAgVGhpcyBzZWNvbmQgc3ltYm9sIGlzIGEgcGFnZS1zaXplZCBhcnJh eSBvZiBjaGFycywKKyAgIHplcm8tZmlsbGVkLCBhbmQgaXMgdGhlIHZlcnkg bGFzdCB0aGluZyB0byBnbyBpbnRvIHRoZSBzZWN0aW9uLgorICAgV2hlbiB0 aGUgR0NDIGRyaXZlciBpbnNlcnRzIHZ0dl9zdGFydC5vIGludG8gdGhlIGxp bmsgbGluZSAoanVzdAorICAgYWZ0ZXIgY3J0YmVnaW4ubykgaXQgYWxzbyBp bnNlcnRzIHZ0dl9lbmQubyBpbnRvIHRoZSBsaW5rIGxpbmUsCisgICBqdXN0 IGJlZm9yZSBjcnRlbmQuby4gIFRoaXMgaGFzIHRoZSBkZXNpcmVkIGVmZmVj dCBvZiBtYWtpbmcgb3VyCisgICBzZWN0aW9uIHBhZ2UtYWxpZ25lZCBhbmQg cGFnZS1zaXplIHBhZGVkLCBlbnN1cmluZyB0aGF0IG5vIG90aGVyCisgICBw cm9ncmFtIGRhdGEgbGFuZHMgb24gb3VyIHBhZ2VzLiAgKi8KKworCisjZGVm aW5lIFBBR0VfU0laRSA0MDk2CisKKyNpZmRlZiBCSUdfUEFHRV9TSVpFCisv KiBUT0RPIC0gUmVwbGFjZSAnNDA5NicgYmVsb3cgd2l0aCBjb3JyZWN0IGJp ZyBwYWdlIHNpemUuICAqLworI2RlZmluZSBQQUdFX1NJWkUgNDA5NgorI2Vu ZGlmCisKKy8qIFBhZ2Utc2l6ZWQgdmFyaWFibGUgdG8gbWFyayBlbmQgb2Yg LnZ0YWJsZV9tYXBfdmFycyBzZWN0aW9uLiAgKi8KK2NoYXIgX3Z0YWJsZV9t YXBfdmFyc19lbmRbUEFHRV9TSVpFXQorICBfX2F0dHJpYnV0ZV9fICgoX192 aXNpYmlsaXR5X18gKCJwcm90ZWN0ZWQiKSwgdXNlZCwKKwkJICBzZWN0aW9u KCIudnRhYmxlX21hcF92YXJzIikpKTsKSW5kZXg6IGdjYy90aW1ldmFyLmRl Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGltZXZhci5kZWYJ KHJldmlzaW9uIDE5NTMxMykKKysrIGdjYy90aW1ldmFyLmRlZgkod29ya2lu ZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw3IEBAIERFRlRJTUVWQVIgKFRWX1RS RUVfVU5JTklUICAgICAgICAgICAsICIKIERFRlRJTUVWQVIgKFRWX1BMVUdJ Tl9JTklUICAgICAgICAgICAsICJwbHVnaW4gaW5pdGlhbGl6YXRpb24iKQog REVGVElNRVZBUiAoVFZfUExVR0lOX1JVTiAgICAgICAgICAgICwgInBsdWdp biBleGVjdXRpb24iKQogREVGVElNRVZBUiAoVFZfR0lNUExFX1NMU1IgICAg ICAgICAgICwgInN0cmFpZ2h0LWxpbmUgc3RyZW5ndGggcmVkdWN0aW9uIikK K0RFRlRJTUVWQVIgKFRWX1ZUQUJMRV9WRVJJRklDQVRJT04gICAsICJ2dGFi bGUgdmVyaWZpY2F0aW9uIikKIAogLyogRXZlcnl0aGluZyBlbHNlIGluIHJl c3Rfb2ZfY29tcGlsYXRpb24gbm90IGluY2x1ZGVkIGFib3ZlLiAgKi8KIERF RlRJTUVWQVIgKFRWX0VBUkxZX0xPQ0FMCSAgICAgLCAiZWFybHkgbG9jYWwg cGFzc2VzIikKSW5kZXg6IGdjYy9mbGFnLXR5cGVzLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL2ZsYWctdHlwZXMuaAkocmV2aXNpb24gMTk1 MzEzKQorKysgZ2NjL2ZsYWctdHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAt MTkxLDQgKzE5MSwxMCBAQCBlbnVtIGZwX2NvbnRyYWN0X21vZGUgewogICBG UF9DT05UUkFDVF9GQVNUID0gMgogfTsKIAorLyogZmxhZ192dGFibGVfdmVy aWZ5IGluaXRpYWxpemF0aW9uIGxldmVscy4gKi8KK2VudW0gdnR2X3ByaW9y aXR5IHsKKyAgVlRWX05PX1BSSU9SSVRZICAgICAgID0gMCwgIC8qIGkuRS4g RG8gTk9UIGRvIHZ0YWJsZSB2ZXJpZmljYXRpb24uICovCisgIFZUVl9TVEFO REFSRF9QUklPUklUWSA9IDEsCisgIFZUVl9QUkVJTklUX1BSSU9SSVRZICA9 IDIKK307CiAjZW5kaWYgLyogISBHQ0NfRkxBR19UWVBFU19IICovCkluZGV4 OiBnY2MvdHJlZS12dGFibGUtdmVyaWZ5LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL3RyZWUtdnRhYmxlLXZlcmlmeS5jCShyZXZpc2lvbiAw KQorKysgZ2NjL3RyZWUtdnRhYmxlLXZlcmlmeS5jCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDEyMTIgQEAKKy8qICAgQ29weXJpZ2h0IChDKSAyMDA1LCAy MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExCisgICAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVy c2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFO VEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1v cmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdp dGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBWaXJ0 dWFsIFRhYmxlIFBvaW50ZXIgU2VjdXJpdHkgUGFzcyAtIERldGVjdCBjb3Jy dXB0aW9uIG9mIHZ0YWJsZSBwb2ludGVycworICAgYmVmb3JlIHVzaW5nIHRo ZW0gZm9yIHZpcnR1YWwgbWV0aG9kIGRpc3BhdGNoZXMuICAqLworCisvKiBU aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdnRhYmxlIHNlY3VyaXR5IGZlYXR1 cmUgaW1wbGVtZW50YXRpb24uCisgICBUaGUgdnRhYmxlIHNlY3VyaXR5IGZl YXR1cmUgaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHdoZW4gYSB2aXJ0dWFsCisg ICBjYWxsIGlzIGFib3V0IHRvIGJlIG1hZGUgdGhyb3VnaCBhbiBpbnZhbGlk IHZ0YWJsZSBwb2ludGVyCisgICAocG9zc2libHkgZHVlIHRvIGRhdGEgY29y cnVwdGlvbiBvciBtYWxpY2lvdXMgYXR0YWNrcykuIFRoZQorICAgY29tcGls ZXIgZmluZHMgZXZlcnkgdmlydHVhbCBjYWxsLCBhbmQgaW5zZXJ0cyBhIHZl cmlmaWNhdGlvbiBjYWxsCisgICBiZWZvcmUgdGhlIHZpcnR1YWwgY2FsbC4g IFRoZSB2ZXJpZmljYXRpb24gY2FsbCB0YWtlcyB0aGUgYWN0dWFsCisgICB2 dGFibGUgcG9pbnRlciB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRocm91Z2ggd2hp Y2ggdGhlIHZpcnR1YWwgY2FsbAorICAgaXMgYmVpbmcgbWFkZSwgYW5kIGNv bXBhcmVzIHRoZSB2dGFibGUgcG9pbnRlciBhZ2FpbnN0IGEgc2V0IG9mIGFs bAorICAgdmFsaWQgdnRhYmxlIHBvaW50ZXJzIHRoYXQgdGhlIG9iamVjdCBj b3VsZCBjb250YWluICh0aGlzIHNldCBpcworICAgYmFzZWQgb24gdGhlIGRl Y2xhcmVkIHR5cGUgb2YgdGhlIG9iamVjdCkuICBJZiB0aGUgcG9pbnRlciBp cyBpbgorICAgdGhlIHZhbGlkIHNldCwgZXhlY3V0aW9uIGlzIGFsbG93ZWQg dG8gY29udGludWU7IG90aGVyd2lzZSB0aGUKKyAgIHByb2dyYW0gaXMgaGFs dGVkLgorCisgIFRoZXJlIGFyZSBzZXZlcmFsIHBpZWNlcyBuZWVkZWQgaW4g b3JkZXIgdG8gbWFrZSB0aGlzIHdvcms6IDEuIEZvcgorICBldmVyeSB2aXJ0 dWFsIGNsYXNzIGluIHRoZSBwcm9ncmFtIChpLmUuIGEgY2xhc3MgdGhhdCBj b250YWlucworICB2aXJ0dWFsIG1ldGhvZHMpLCB3ZSBuZWVkIHRvIGJ1aWxk IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHZhbGlkCisgIHZ0YWJsZXMgdGhh dCBhbiBvYmplY3Qgb2YgdGhhdCBjbGFzcyBjb3VsZCBwb2ludCB0by4gIFRo aXMgaW5jbHVkZXMKKyAgdnRhYmxlcyBmb3IgYW55IGNsYXNzKGVzKSB0aGF0 IGluaGVyaXQgZnJvbSB0aGUgY2xhc3MgdW5kZXIKKyAgY29uc2lkZXJhdGlv bi4gIDIuIEZvciBldmVyeSBzdWNoIGRhdGEgc2V0IHdlIGJ1aWxkIHVwLCB3 ZSBuZWVkIGEKKyAgd2F5IHRvIGZpbmQgYW5kIHJlZmVyZW5jZSB0aGUgZGF0 YSBzZXQuICBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZQorICBmYWN0IHRo YXQgdGhlIHJlYWwgdnRhYmxlIGFkZHJlc3NlcyBhcmUgbm90IGtub3duIHVu dGlsIHJ1bnRpbWUsCisgIHdoZW4gdGhlIHByb2dyYW0gaXMgbG9hZGVkIGlu dG8gbWVtb3J5LCBidXQgd2UgbmVlZCB0byByZWZlcmVuY2UgdGhlCisgIHNl dHMgYXQgY29tcGlsZSB0aW1lIHdoZW4gd2UgYXJlIGluc2VydGluZyB2ZXJp ZmljYXRpb24gY2FsbHMgaW50bworICB0aGUgcHJvZ3JhbS4gIDMuICBXZSBu ZWVkIHRvIGZpbmQgZXZlcnkgdmlydHVhbCBjYWxsIGluIHRoZSBwcm9ncmFt LAorICBhbmQgaW5zZXJ0IHRoZSB2ZXJpZmljYXRpb24gY2FsbCAod2l0aCB0 aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzKQorICBiZWZvcmUgdGhlIHZpcnR1 YWwgY2FsbC4gIDQuIFdlIG5lZWQgc29tZSBydW50aW1lIGxpYnJhcnkgcGll Y2VzOgorICB0aGUgY29kZSB0byBidWlsZCB1cCB0aGUgZGF0YSBzZXRzIGF0 IHJ1bnRpbWU7IHRoZSBjb2RlIHRvIGFjdHVhbGx5CisgIHBlcmZvcm0gdGhl IHZlcmlmaWNhdGlvbiB1c2luZyB0aGUgZGF0YSBzZXRzOyBhbmQgc29tZSBj b2RlIHRvIHNldAorICBwcm90ZWN0aW9ucyBvbiB0aGUgZGF0YSBzZXRzLCBz byB0aGV5IHRoZW1zZWx2ZXMgZG8gbm90IGJlY29tZQorICBoYWNrZXIgdGFy Z2V0cy4KKworICBUbyBmaW5kIGFuZCByZWZlcmVuY2UgdGhlIHNldCBvZiB2 YWxpZCB2dGFibGUgcG9pbnRlcnMgZm9yIGFueSBnaXZlbgorICB2aXJ0dWFs IGNsYXNzLCB3ZSBjcmVhdGUgYSBzcGVjaWFsIGdsb2JhbCB2YXJpYmxlIGZv ciBlYWNoIHZpcnR1YWwKKyAgY2xhc3MuICBXZSByZWZlciB0byB0aGlzIGFz IHRoZSAidnRhYmxlIG1hcCB2YXJpYWJsZSIgZm9yIHRoYXQKKyAgY2xhc3Mu ICBUaGUgdnRhYmxlIG1hcCB2YXJpYWJsZSBoYXMgdGhlIHR5cGUgInZvaWQg KiIsIGFuZCBpcworICBpbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIgdG8g TlVMTC4gIEF0IHJ1bnRpbWUgd2hlbiB0aGUgc2V0IG9mCisgIHZhbGlkIHZ0 YWJsZSBwb2ludGVycyBmb3IgYSB2aXJ0dWFsIGNsYXNzLCBlLmcuIGNsYXNz IEZvbywgaXMgYnVpbHQsCisgIHRoZSB2dGFibGUgbWFwIHZhcmlhYmxlIGZv ciBjbGFzcyBGb28gaXMgbWFkZSB0byBwb2ludCB0byB0aGUgc2V0LgorICBE dXJpbmcgY29tcGlsZSB0aW1lLCB3aGVuIHRoZSBjb21waWxlciBpcyBpbnNl cnRpbmcgdmVyaWZpY2F0aW9uCisgIGNhbGxzIGludG8gdGhlIHByb2dyYW0s IGl0IHBhc3NlcyB0aGUgdnRhYmxlIG1hcCB2YXJpYWJsZSBmb3IgdGhlCisg IGFwcHJvcHJpYXRlIGNsYXNzIHRvIHRoZSB2ZXJpZmljYXRpb24gY2FsbCwg c28gdGhhdCBhdCBydW50aW1lIHRoZQorICB2ZXJpZmljYXRpb24gY2FsbCBj YW4gZmluZCB0aGUgYXBwcm9wcmlhdGUgZGF0YSBzZXQuCisKKyAgVGhlIGFj dHVhbCBzZXQgb2YgdmFsaWQgdnRhYmxlIHBvaW50ZXJzIGZvciBhIHZpcnR1 YWwgY2xhc3MsCisgIGUuZy4gY2xhc3MgRm9vLCBjYW5ub3QgYmUgYnVpbHQg dW50aWwgcnVudGltZSwgd2hlbiB0aGUgdnRhYmxlcyBnZXQKKyAgbG9hZGVk IGludG8gbWVtb3J5IGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlIGtub3duLiAg QnV0IHRoZSBrbm93bGVkZ2UKKyAgYWJvdXQgd2hpY2ggdnRhYmxlcyBiZWxv bmcgaW4gd2hpY2ggY2xhc3MnIGhpZXJhcmNoeSBpcyBvbmx5IGtub3duCisg IGF0IGNvbXBpbGUgdGltZS4gIFRoZXJlZm9yZSBhdCBjb21waWxlIHRpbWUg d2UgY29sbGVjdCBjbGFzcworICBoaWVyYXJjaHkgYW5kIHZ0YWJsZSBpbmZv cm1hdGlvbiBhYm91dCBldmVyeSB2aXJ0dWFsIGNsYXNzLCBhbmQgd2UKKyAg Z2VuZXJhdGUgY2FsbHMgdG8gYnVpbGQgdXAgdGhlIGRhdGEgc2V0cyBhdCBy dW50aW1lLiAgVG8gYnVpbGQgdGhlCisgIGRhdGEgc2V0cywgd2UgY2FsbCBv bmUgb2YgdGhlIGZ1bmN0aW9ucyB3ZSBhZGQgdG8gdGhlIHJ1bnRpbWUKKyAg bGlicmFyeSwgX19WTFRSZWdpc3RlclBhaXIuICBfX1ZMVFJlZ2lzdGVyUGFp ciB0YWtlcyB0d28gYXJndW1lbnRzLAorICBhIHZ0YWJsZSBtYXAgdmFyaWFi bGUgYW5kIHRoZSBhZGRyZXNzIG9mIGEgdnRhYmxlLiAgSWYgdGhlIHZ0YWJs ZQorICBtYXAgdmFyaWFibGUgaXMgY3VycmVudGx5IE5VTEwsIGl0IGNyZWF0 ZXMgYSBuZXcgZGF0YSBzZXQgKGhhc2gKKyAgdGFibGUpLCBtYWtlcyB0aGUg dnRhYmxlIG1hcCB2YXJpYWJsZSBwb2ludCB0byB0aGUgbmV3IGRhdGEgc2V0 LCBhbmQKKyAgaW5zZXJ0cyB0aGUgdnRhYmxlIGFkZHJlc3MgaW50byB0aGUg ZGF0YSBzZXQuICBJZiB0aGUgdnRhYmxlIG1hcAorICB2YXJpYWJsZSBpcyBu b3QgTlVMTCwgaXQganVzdCBpbnNlcnRzIHRoZSB2dGFibGUgYWRkcmVzcyBp bnRvIHRoZQorICBkYXRhIHNldC4gIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0 aGF0IG91ciBkYXRhIHNldHMgYXJlIGJ1aWx0IGJlZm9yZQorICBhbnkgdmVy aWZpY2F0aW9uIGNhbGxzIGhhcHBlbiwgd2UgY3JlYXRlIGEgc3BlY2lhbCBj b25zdHJ1Y3RvcgorICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZWFj aCBjb21waWxhdGlvbiB1bml0LCBnaXZlIGl0IGEgdmVyeQorICBoaWdoIGlu aXRpYWxpemF0aW9uIHByaW9yaXR5LCBhbmQgaW5zZXJ0IGFsbCBvZiBvdXIg Y2FsbHMgdG8KKyAgX19WTFRSZWdpc3RlclBhaXIgaW50byBvdXIgc3BlY2lh bCBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbgorICBmdW5jdGlvbi4KKwor ICBUaGUgdnRhYmxlIHZlcmlmaWNhdGlvbiBmZWF0dXJlIGlzIGNvbnRyb2xs ZWQgYnkgdGhlIGZsYWcKKyAgJy1mdnRhYmxlLXZlcmlmeT0nLiAgVGhlcmUg YXJlIHRocmVlIGZsYXZvcnMgb2YgdGhpczoKKyAgJy1mdnRhYmxlLXZlcmlm eT1zdGQnLCAnLWZ2dGFibGUtdmVyaWZ5PXByZWluaXQnLCBhbmQKKyAgJy1m dnRhYmxlLXZlcmlmeT1ub25lJy4gIElmIHRoZSBvcHRpb24gJy1mdnRhYmxl LXZlcmZ5PXByZWluaXQnIGlzCisgIHVzZWQsIHRoZW4gb3VyIGNvbnN0cnVj dG9yIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGdldHMgcHV0IGludG8gdGhl CisgIHByZWluaXQgYXJyYXkuICBUaGlzIGlzIG5lY2Vzc2FyeSBpZiB0aGVy ZSBhcmUgZGF0YSBzZXRzIHRoYXQgbmVlZAorICB0byBiZSBidWlsdCB2ZXJ5 IGVhcmx5IGluIGV4ZWN1dGlvbi4gIElmIHRoZSBjb25zdHJ1Y3RvcgorICBp bml0aWFsaXphdGlvbiBmdW5jdGlvbiBnZXRzIHB1dCBpbnRvIHRoZSBwcmVp bml0IGFycmF5LCB0aGUgd2UgYWxzbworICBhZGQgY2FsbHMgdG8gX19WTFRD aGFuZ2VQZXJtaXNzaW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0 aGUKKyAgZnVuY3Rpb24uICBUaGUgY2FsbCBhdCB0aGUgYmVnaW5uaW5nIHNl dHMgdGhlIHBlcm1pc3Npb25zIG9uIHRoZQorICBkYXRhIHNldHMgYW5kIHZ0 YWJsZSBtYXAgdmFyaWFibGVzIHRvIHJlYWQvd3JpdGUsIGFuZCB0aGUgb25l IGF0IHRoZQorICBlbmQgbWFrZXMgdGhlbSByZWFkLW9ubHkuICBJZiB0aGUg Jy1mdnRhYmxlLXZlcmlmeT1zdGQnIG9wdGlvbiBpcworICB1c2VkLCB0aGUg Y29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGFyZSBleGVj dXRlZCBhdCB0aGVpcgorICBub3JtYWwgdGltZSwgYW5kIHRoZSBfX1ZMVENo YW5nZVBlcm1pc3Npb24gY2FsbHMgYXJlIGhhbmRsZWQKKyAgZGlmZmVyZW50 bHkgKHNlZSB0aGUgY29tbWVudHMgaW4gbGlic3RkYysrLXYzL2xpYnN1cGMr Ky92dHZfcnRzLmNjKS4KKyAgVGhlIG9wdGlvbiAnLWZ2dGFibGUtdmVyaWZ5 PW5vbmUnIHR1cm5zIG9mZiB2dGFibGUgdmVyaWZpY2F0aW9uLgorCisgIFRo aXMgZmlsZSBjb250YWlucyBjb2RlIGZvciB0aGUgdHJlZSBwYXNzIHRoYXQg Z29lcyB0aHJvdWdoIGFsbCB0aGUKKyAgc3RhdGVtZW50cyBpbiBlYWNoIGJh c2ljIGJsb2NrLCBsb29raW5nIGZvciB2aXJ0dWFsIGNhbGxzLCBhbmQKKyAg aW5zZXJ0aW5nIGEgY2FsbCB0byBfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXIg KHdpdGggYXBwcm9wcmlhdGUKKyAgYXJndW1lbnRzKSBiZWZvcmUgZWFjaCBv bmUuICBJdCBhbHNvIGNvbnRhaW5zIHRoZSBoYXNoIHRhYmxlCisgIGZ1bmN0 aW9ucyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciBjb2xsZWN0 aW5nIHRoZSBjbGFzcworICBoaWVyYXJjaHkgZGF0YSBhbmQgYnVpbGRpbmcv bWFpbnRhaW5pbmcgdGhlIHZ0YWJsZSBtYXAgdmFyaWFibGUgZGF0YQorICBh cmUgZGVmaW5lZCBpbiBnY2MvdHJlZS12dGFibGUtdmVyaWZ5LmguICBUaGVz ZSBkYXRhIHN0cnVjdHVyZXMgYXJlCisgIHNoYXJlZCB3aXRoIHRoZSBjb2Rl IGluIHRoZSBDKysgZnJvbnQgZW5kIHRoYXQgY29sbGVjdHMgdGhlIGNsYXNz CisgIGhpZXJhcmNoeSAmIHZ0YWJsZSBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJh dGVzIHRoZSB2dGFibGUgbWFwCisgIHZhcmlhYmxlcyAoc2VlIGNwL3Z0YWJs ZS1jbGFzcy1oaWVyYXJjaHkuYykuICBUaGlzIHRyZWUgcGFzcyBzaG91bGQK KyAgcnVuIGp1c3QgYmVmb3JlIHRoZSBnaW1wbGUgaXMgY29udmVydGVkIHRv IFJUTC4KKworICBTb21lIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRo aXMgcGFzczoKKworICBUbyBmaW5kIHRoZSBhbGwgb2YgdGhlIHZpcnR1YWwg Y2FsbHMsIHdlIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlCisgIGdpbXBsZSBz dGF0ZW1lbnRzIGluIGVhY2ggYmFzaWMgYmxvY2ssIGxvb2tpbmcgZm9yIGFu eSBjYWxsCisgIHN0YXRlbWVudCB3aXRoIHRoZSBjb2RlICJPQkpfVFlQRV9S RUYiLiAgT25jZSB3ZSBoYXZlIGZvdW5kIHRoZQorICB2aXJ0dWFsIGNhbGws IHdlIG5lZWQgdG8gZmluZCB0aGUgdnRhYmxlIHBvaW50ZXIgdGhyb3VnaCB3 aGljaCB0aGUKKyAgY2FsbCBpcyBiZWluZyBtYWRlLCBhbmQgdGhlIHR5cGUg b2YgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZQorICBwb2ludGVyICh0byBm aW5kIHRoZSBhcHByb3ByaWF0ZSB2dGFibGUgbWFwIHZhcmlhYmxlKS4gIFdl IHRoZW4gdXNlCisgIHRoZXNlIHRvIGJ1aWxkIGEgY2FsbCB0byBfX1ZMVFZl cmlmeVZ0YWJsZVBvaW50ZXIsIHBhc3NpbmcgdGhlCisgIHZ0YWJsZSBtYXAg dmFyaWFibGUsIGFuZCB0aGUgdnRhYmxlIHBvaW50ZXIuICBXZSBpbnNlcnQg dGhlCisgIHZlcmlmaWNhdGlvbiBjYWxsIGp1c3QgYWZ0ZXIgdGhlIGdpbXBs ZSBzdGF0ZW1lbnQgdGhhdCBnZXRzIHRoZQorICB2dGFibGUgcG9pbnRlciBv dXQgb2YgdGhlIG9iamVjdCwgYW5kIHdlIHVwZGF0ZSB0aGUgbmV4dAorICBz dGF0ZW1lbnQgdG8gZGVwZW5kIG9uIHRoZSByZXN1bHQgcmV0dXJuZWQgZnJv bQorICBfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXIgKHRoZSB2dGFibGUgcG9p bnRlciB2YWx1ZSksIHRvIGVuc3VyZQorICBzdWJzZXF1ZW50IGNvbXBpbGVy IHBoYXNlcyBkb24ndCByZW1vdmUgb3IgcmVvcmRlciB0aGUgY2FsbCAoaXQn cyBubworICBnb29kIHRvIGhhdmUgdGhlIHZlcmlmaWNhdGlvbiBvY2N1ciBh ZnRlciB0aGUgdmlydHVhbCBjYWxsLCBmb3IKKyAgZXhhbXBsZSkuICBUbyBm aW5kIHRoZSB2dGFibGUgcG9pbnRlciBiZWluZyB1c2VkIChhbmQgdGhlIHR5 cGUgb2YKKyAgdGhlIG9iamVjdCkgd2Ugc2VhcmNoIGJhY2t3YXJkcyB0aHJv dWdoIHRoZSBkZWZfc3RtdHMgY2hhaW4gZnJvbSB0aGUKKyAgdmlydHVhbCBj YWxsIChzZWUgdmVyaWZ5X2JiX3Z0YWJsZXMgZm9yIG1vcmUgZGV0YWlscyku ICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVt LmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAidG0uaCIK KyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY3AvY3AtdHJlZS5oIgor I2luY2x1ZGUgInRtX3AuaCIKKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgor I2luY2x1ZGUgIm91dHB1dC5oIgorI2luY2x1ZGUgInRyZWUtZmxvdy5oIgor I2luY2x1ZGUgInRyZWUtZHVtcC5oIgorI2luY2x1ZGUgInRyZWUtcGFzcy5o IgorI2luY2x1ZGUgInRpbWV2YXIuaCIKKyNpbmNsdWRlICJjZmdsb29wLmgi CisjaW5jbHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRlICJ0cmVlLWlubGluZS5o IgorI2luY2x1ZGUgInRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oIgorI2luY2x1 ZGUgImRpYWdub3N0aWMtY29yZS5oIgorI2luY2x1ZGUgImdpbXBsZS1wcmV0 dHktcHJpbnQuaCIKKyNpbmNsdWRlICJ0b3BsZXYuaCIKKyNpbmNsdWRlICJs YW5naG9va3MuaCIKKworI2luY2x1ZGUgInRyZWUtdnRhYmxlLXZlcmlmeS5o IgorCitib29sIHZ0dl9kZWJ1ZyA9IGZhbHNlOwordW5zaWduZWQgbnVtX3Z0 YWJsZV9tYXBfbm9kZXMgPSAwOworYm9vbCBhbnlfdmVyaWZpY2F0aW9uX2Nh bGxzX2dlbmVyYXRlZCA9IGZhbHNlOworCitzdGF0aWMgR1RZKCgpKSB0cmVl IHZlcmlmeV92dGJsX3B0cl9mbmRlY2wgPSBOVUxMX1RSRUU7CisKK3Vuc2ln bmVkIGludCB2dGFibGVfdmVyaWZ5X21haW4gKHZvaWQpOworCisvKiBUaGUg Zm9sbG93aW5nIGZldyBmdW5jdGlvbnMgYXJlIGZvciB0aGUgdnRibCBwb2lu dGVyIGhhc2ggdGFibGUKKyAgIGluIHRoZSAncmVnaXN0ZXJlZCcgZmllbGQg b2YgdGhlIHN0cnVjdCB2dGFibGVfbWFwX25vZGUuICBUaGUgaGFzaAorICAg dGFibGUga2VlcHMgdHJhY2sgb2Ygd2hpY2ggdnRhYmxlIHBvaW50ZXJzIGhh dmUgYmVlbiB1c2VkIGluCisgICBjYWxscyB0byBfX1ZMVFJlZ2lzdGVyUGFp ciB3aXRoIHRoYXQgcGFydGljdWxhciB2dGFibGUgbWFwIHZhcmlhYmxlLiAg Ki8KKworLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIGEgcGFy dGljdWxhciBWVEFCTEVfREVDTCBhbmQgT0ZGU0VUIGFyZQorICAgYWxyZWFk eSBpbiB0aGUgJ3JlZ2lzdGVyZWQnIGhhc2ggdGFibGUgZm9yIE5PREUuICAq LworCitib29sCit2dGJsX21hcF9ub2RlX3JlZ2lzdHJhdGlvbl9maW5kIChz dHJ1Y3QgdnRibF9tYXBfbm9kZSAqbm9kZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRyZWUgdnRhYmxlX2RlY2wsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7Cisg IHN0cnVjdCB2dGFibGVfcmVnaXN0cmF0aW9uIGtleTsKKyAgc3RydWN0IHZ0 YWJsZV9yZWdpc3RyYXRpb24gKipzbG90OworCisgIGdjY19hc3NlcnQgKG5v ZGUgJiYgbm9kZS0+cmVnaXN0ZXJlZCk7CisKKyAga2V5LnZ0YWJsZV9kZWNs ID0gdnRhYmxlX2RlY2w7CisgIHNsb3QgPSAoc3RydWN0IHZ0YWJsZV9yZWdp c3RyYXRpb24gKiopIGh0YWJfZmluZF9zbG90IChub2RlLT5yZWdpc3RlcmVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmtleSwgTk9fSU5TRVJUKTsKKworICBpZiAoc2xv dCAmJiAoKnNsb3QpICYmICgqc2xvdCktPm9mZnNldHMpCisgICAgeworICAg ICAgdW5zaWduZWQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAoKnNsb3Qp LT5jdXJfb2Zmc2V0OyArK2kpCisgICAgICAgIGlmICgoKnNsb3QpLT5vZmZz ZXRzW2ldID09IG9mZnNldCkKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBUaGlzIGZ1bmN0aW9u IGluc2VydHMgVlRBQkxFX0RFQ0wgYW5kIE9GRlNFVCBpbnRvIHRoZSAncmVn aXN0ZXJlZCcKKyAgIGhhc2ggdGFibGUgZm9yIE5PREUuICAqLworCit2b2lk Cit2dGJsX21hcF9ub2RlX3JlZ2lzdHJhdGlvbl9pbnNlcnQgKHN0cnVjdCB2 dGJsX21hcF9ub2RlICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cmVlIHZ0YWJsZV9kZWNsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisgIHN0 cnVjdCB2dGFibGVfcmVnaXN0cmF0aW9uIGtleTsKKyAgc3RydWN0IHZ0YWJs ZV9yZWdpc3RyYXRpb24gKipzbG90OworCisgIGlmICghbm9kZSB8fCAhbm9k ZS0+cmVnaXN0ZXJlZCkKKyAgICByZXR1cm47CisKKyAga2V5LnZ0YWJsZV9k ZWNsID0gdnRhYmxlX2RlY2w7CisgIHNsb3QgPSAoc3RydWN0IHZ0YWJsZV9y ZWdpc3RyYXRpb24gKiopIGh0YWJfZmluZF9zbG90IChub2RlLT5yZWdpc3Rl cmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmtleSwgSU5TRVJUKTsKKworICBpZiAoISAq c2xvdCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpOworICAgICAgc3RydWN0 IHZ0YWJsZV9yZWdpc3RyYXRpb24gKm5vZGU7CisgICAgICBub2RlID0gWE5F VyAoc3RydWN0IHZ0YWJsZV9yZWdpc3RyYXRpb24pOworICAgICAgbm9kZS0+ dnRhYmxlX2RlY2wgPSB2dGFibGVfZGVjbDsKKworICAgICAgLyogV2UgZXhw ZWN0IHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IG9mZnNldHMgaW4gYW55IGdp dmVuIHZ0YWJsZQorICAgICAgICAgdGhhdCB3aWxsIGJlIHZhbGlkIHZ0YWJs ZSBwb2ludGVycyB0byBiZSBzbWFsbCAoYnV0IHdlIGtub3cKKyAgICAgICAg IGl0IGNhbiBiZSBncmVhdGVyIHRoYW4gMSkuICBUbyBhdm9pZCBoYXZpbmcg dG8gcmVzaXplIHRoaXMKKyAgICAgICAgIHZlcnkgb2Z0ZW4sIHdlIHJhbmRv bWx5IGNob3NlIDEwIGFzIGEgcmVhc29uYWJsZS1zZWVtaW5nCisgICAgICAg ICBzaXplLiAgKi8KKyAgICAgIG5vZGUtPm9mZnNldHMgPSAodW5zaWduZWQg KikgeG1hbGxvYyAoMTAgKiBzaXplb2YgKHVuc2lnbmVkKSk7CisgICAgICBm b3IgKGk9IDA7IGkgPCAxMDsgKytpKQorICAgICAgICBub2RlLT5vZmZzZXRz W2ldID0gMDsKKyAgICAgIG5vZGUtPm9mZnNldHNbMF0gPSBvZmZzZXQ7Cisg ICAgICBub2RlLT5jdXJfb2Zmc2V0ID0gMTsKKyAgICAgIG5vZGUtPm1heF9v ZmZzZXRzID0gMTA7CisgICAgICAqc2xvdCA9IG5vZGU7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgLyogV2UgZm91bmQgdGhlIHZ0YWJsZV9kZWNs IHNsb3Q7IHdlIG5lZWQgdG8gc2VlIGlmIGl0IGFscmVhZHkKKyAgICAgICAg IGNvbnRhaW5zIHRoZSBvZmZzZXQuICBJZiBub3QsIHdlIG5lZWQgdG8gYWRk IHRoZSBvZmZzZXQuICAqLworICAgICAgdW5zaWduZWQgaTsKKyAgICAgIGJv b2wgZm91bmQgPSBmYWxzZTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAoKnNs b3QpLT5jdXJfb2Zmc2V0ICYmICFmb3VuZDsgKytpKQorICAgICAgICBpZiAo KCpzbG90KS0+b2Zmc2V0c1tpXSA9PSBvZmZzZXQpCisgICAgICAgICAgZm91 bmQgPSB0cnVlOworCisgICAgICBpZiAoIWZvdW5kKQorICAgICAgICB7Cisg ICAgICAgICAgLyogUmUtc2l6ZSB0aGUgb2Zmc2V0IGFycmF5IGlmIG5lY2Vz c2FyeS4gICovCisgICAgICAgICAgaWYgKCgqc2xvdCktPmN1cl9vZmZzZXQg PT0gKCpzbG90KS0+bWF4X29mZnNldHMpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIHVuc2lnbmVkIG5ld19tYXggPSAyICogKCpzbG90KS0+bWF4 X29mZnNldHM7CisgICAgICAgICAgICAgICgqc2xvdCktPm9mZnNldHMgPSAo dW5zaWduZWQgKikKKyAgICAgICAgICAgICAgICAgIHhyZWFsbG9jICgoKnNs b3QpLT5vZmZzZXRzLCBuZXdfbWF4ICogc2l6ZW9mICh1bnNpZ25lZCkpOwor CisgICAgICAgICAgICAgIGZvciAoaSA9ICgqc2xvdCktPm1heF9vZmZzZXRz OyBpIDwgbmV3X21heDsgKytpKQorICAgICAgICAgICAgICAgICgqc2xvdCkt Pm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgICAoKnNsb3QpLT5tYXhf b2Zmc2V0cyA9IG5ld19tYXg7CisgICAgICAgICAgICB9CisgICAgICAgICAg LyogSW5zZXJ0IHRoZSBuZXcgb2Zmc2V0LiAgKi8KKyAgICAgICAgICAoKnNs b3QpLT5vZmZzZXRzWygqc2xvdCktPmN1cl9vZmZzZXRdID0gb2Zmc2V0Owor ICAgICAgICAgICgqc2xvdCktPmN1cl9vZmZzZXQgPSAoKnNsb3QpLT5jdXJf b2Zmc2V0ICsgMTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogSGFzaHRh YmxlIGZ1bmN0aW9ucyBmb3IgdnRhYmxlX3JlZ2lzdHJhdGlvbiBoYXNodGFi bGVzLiAgKi8KKworc3RhdGljIGhhc2h2YWxfdAoraGFzaF92dGFibGVfcmVn aXN0cmF0aW9uIChjb25zdCB2b2lkICpwKQoreworICBjb25zdCBzdHJ1Y3Qg dnRhYmxlX3JlZ2lzdHJhdGlvbiAqbiA9IChjb25zdCBzdHJ1Y3QgdnRhYmxl X3JlZ2lzdHJhdGlvbiAqKSBwOworICByZXR1cm4gKGhhc2h2YWxfdCkgKERF Q0xfVUlEIChuLT52dGFibGVfZGVjbCkpOworfQorCitzdGF0aWMgaW50Citl cV92dGFibGVfcmVnaXN0cmF0aW9uIChjb25zdCB2b2lkICpwMSwgY29uc3Qg dm9pZCAqcDIpCit7CisgIGNvbnN0IHN0cnVjdCB2dGFibGVfcmVnaXN0cmF0 aW9uICpuMSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3Qgc3RydWN0IHZ0YWJsZV9yZWdpc3RyYXRpb24gKikgcDE7Cisg IGNvbnN0IHN0cnVjdCB2dGFibGVfcmVnaXN0cmF0aW9uICpuMiA9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0 IHZ0YWJsZV9yZWdpc3RyYXRpb24gKikgcDI7CisgIHJldHVybiAoREVDTF9V SUQgKG4xLT52dGFibGVfZGVjbCkgPT0gREVDTF9VSUQgKG4yLT52dGFibGVf ZGVjbCkpOworfQorCisvKiBFbmQgb2YgaGFzaHRhYmxlIGZ1bmN0aW9ucyBm b3IgInJlZ2lzdGVyZWQiIGhhc2h0YWJsZXMuICAqLworCisKKy8qIEhlcmUg YXJlIHRoZSB0aHJlZSBkYXRhIHN0cnVjdHVyZXMgaW50byB3aGljaCB3ZSBp bnNlcnQgdnRhYmxlIG1hcCBub2Rlcy4KKyAgIFdlIHVzZSB0aHJlZSBkYXRh IHN0cnVjdHVyZXMgYmVjYXVzZSBvZiB0aGUgdmFzdGx5IGRpZmZlcmVudCB3 YXlzIHdlIG5lZWQKKyAgIHRvIGZpbmQgdGhlIG5vZGVzIGZvciB2YXJpb3Vz IHRhc2tzIChzZWUgY29tbWVudHMgaW4gdHJlZS12dGFibGUtdmVyaWZ5LmgK KyAgIGZvciBtb3JlIGRldGFpbHMuICAqLworCisvKiBWdGFibGUgbWFwIHZh cmlhYmxlIG5vZGVzIHN0b3JlZCBpbiBhIGhhc2ggdGFibGUuICAqLworCitz dGF0aWMgaHRhYl90IHZ0YmxfbWFwX2hhc2ggPSBOVUxMOworCisvKiBWdGFi bGUgbWFwIHZhcmlhYmxlIG5vZGVzIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0 LiAgKi8KKworc3RydWN0IHZ0YmxfbWFwX25vZGUgKnZ0YmxfbWFwX25vZGVz ID0gTlVMTDsKKworLyogVnRhYmxlIG1hcCB2YXJpYWJsZSBub2RlcyBzdG9y ZWQgaW4gYSB2ZWN0b3IuICAqLworCit2ZWM8c3RydWN0IHZ0YmxfbWFwX25v ZGUgKj4gdnRibF9tYXBfbm9kZXNfdmVjOworCisKKy8qIEhhc2h0YWJsZSBm dW5jdGlvbnMgZm9yIHZ0YmxfbWFwX2hhc2guICAqLworCisvKiBSZXR1cm5z IGEgaGFzaCBjb2RlIGZvciBQLiAgKi8KKworc3RhdGljIGhhc2h2YWxfdAor aGFzaF92dGJsX21hcF9ub2RlIChjb25zdCB2b2lkICpwKQoreworICBjb25z dCBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqbiA9IChjb25zdCBzdHJ1Y3QgdnRi bF9tYXBfbm9kZSAqKSBwOworICByZXR1cm4gKGhhc2h2YWxfdCkgSURFTlRJ RklFUl9IQVNIX1ZBTFVFIChuLT5jbGFzc19uYW1lKTsKK30KKworLyogUmV0 dXJucyBub256ZXJvIGlmIFAxIGFuZCBQMiBhcmUgZXF1YWwuICAqLworCitz dGF0aWMgaW50CitlcV92dGJsX21hcF9ub2RlIChjb25zdCB2b2lkICpwMSwg Y29uc3Qgdm9pZCAqcDIpCit7CisgIGNvbnN0IHN0cnVjdCB2dGJsX21hcF9u b2RlICpuMSA9IChjb25zdCBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqKSBwMTsK KyAgY29uc3Qgc3RydWN0IHZ0YmxfbWFwX25vZGUgKm4yID0gKGNvbnN0IHN0 cnVjdCB2dGJsX21hcF9ub2RlICopIHAyOworICByZXR1cm4gKElERU5USUZJ RVJfSEFTSF9WQUxVRSAobjEtPmNsYXNzX25hbWUpID09CisgICAgICAgICAg SURFTlRJRklFUl9IQVNIX1ZBTFVFIChuMi0+Y2xhc3NfbmFtZSkpOworfQor CisvKiBSZXR1cm4gdnRibF9tYXAgbm9kZSBmb3IgQ0xBU1NfTkFNRSAgd2l0 aG91dCBjcmVhdGluZyBhIG5ldyBvbmUuICAqLworCitzdHJ1Y3QgdnRibF9t YXBfbm9kZSAqCit2dGJsX21hcF9nZXRfbm9kZSAoY29uc3RfdHJlZSBjbGFz c19uYW1lKQoreworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSBrZXk7CisgIHN0 cnVjdCB2dGJsX21hcF9ub2RlICoqc2xvdDsKKworICBpZiAoIXZ0YmxfbWFw X2hhc2gpCisgICAgcmV0dXJuIE5VTEw7CisKKyAga2V5LmNsYXNzX25hbWUg PSBDT05TVF9DQVNUMiAodHJlZSwgY29uc3RfdHJlZSwgY2xhc3NfbmFtZSk7 CisgIHNsb3QgPSAoc3RydWN0IHZ0YmxfbWFwX25vZGUgKiopIGh0YWJfZmlu ZF9zbG90ICh2dGJsX21hcF9oYXNoLCAma2V5LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fSU5TRVJU KTsKKyAgaWYgKCFzbG90KQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4g KnNsb3Q7Cit9CisKKy8qIFJldHVybiB2dGJsX21hcCBub2RlIGFzc2lnbmVk IHRvIEJBU0VfQ0xBU1NfVFlQRS4gIENyZWF0ZSBuZXcgb25lCisgICB3aGVu IG5lZWRlZC4gICovCisKK3N0cnVjdCB2dGJsX21hcF9ub2RlICoKK2ZpbmRf b3JfY3JlYXRlX3Z0YmxfbWFwX25vZGUgKHRyZWUgYmFzZV9jbGFzc190eXBl KQoreworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSBrZXk7CisgIHN0cnVjdCB2 dGJsX21hcF9ub2RlICpub2RlOworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAq KnNsb3Q7CisgIHVuc2lnbmVkIGk7CisgIHRyZWUgY2xhc3NfdHlwZV9kZWNs OworICB0cmVlIHR5cGVfZGVjbF90eXBlOworICB1bnNpZ25lZCBpbnQgc2F2 ZV9xdWFsczsKKyAgdW5zaWduZWQgaW50IG51bGxfcXVhbHMgPSBUWVBFX1VO UVVBTElGSUVEOworICAvKiBPdXIgZGF0YSBzaG93cyA5MCUgb2YgY2xhc3Nl cyBoYXZlIG5vIG1vcmUgdGhhbiA0IHBhcmVudHMgb3IgY2hpbGRyZW4sCisg ICAgIHNvIHdlIHdpbGwgdXNlIDQgYXMgb3VyIGRlZmF1bHQgaGllcmFyY2h5 IGFycmF5IHNpemUuICAqLworICB1bnNpZ25lZCBpbnQgZGVmYXVsdF9hcnJh eV9zaXplID0gNDsKKworICBpZiAoIXZ0YmxfbWFwX2hhc2gpCisgICAgdnRi bF9tYXBfaGFzaCA9IGh0YWJfY3JlYXRlICgxMCwgaGFzaF92dGJsX21hcF9u b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXFfdnRi bF9tYXBfbm9kZSwgTlVMTCk7CisKKyAgaWYgKFRSRUVfQ0hBSU4gKGJhc2Vf Y2xhc3NfdHlwZSkpCisgICAgY2xhc3NfdHlwZV9kZWNsID0gVFJFRV9DSEFJ TiAoYmFzZV9jbGFzc190eXBlKTsKKyAgZWxzZQorICAgIGNsYXNzX3R5cGVf ZGVjbCA9IFRZUEVfTkFNRSAoYmFzZV9jbGFzc190eXBlKTsKKworICAvKiBU ZW1wb3JhcmlseSByZW1vdmUgYW55IHR5cGUgcXVhbGlmaWVycyBvbiB0eXBl LiAgKi8KKyAgdHlwZV9kZWNsX3R5cGUgPSBUUkVFX1RZUEUgKGNsYXNzX3R5 cGVfZGVjbCk7CisgIHNhdmVfcXVhbHMgPSBUWVBFX1FVQUxTICh0eXBlX2Rl Y2xfdHlwZSk7CisgIHJlc2V0X3R5cGVfcXVhbGlmaWVycyAobnVsbF9xdWFs cywgdHlwZV9kZWNsX3R5cGUpOworCisgIGtleS5jbGFzc19uYW1lID0gREVD TF9BU1NFTUJMRVJfTkFNRSAoY2xhc3NfdHlwZV9kZWNsKTsKKyAgc2xvdCA9 IChzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqKikgaHRhYl9maW5kX3Nsb3QgKHZ0 YmxfbWFwX2hhc2gsICZrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQpOworCisgIC8qIFJl c3RvcmUgYW55IHR5cGUgcXVhbGlmaWVycy4gICovCisgIHJlc2V0X3R5cGVf cXVhbGlmaWVycyAoc2F2ZV9xdWFscywgdHlwZV9kZWNsX3R5cGUpOworCisg IGlmICgqc2xvdCkKKyAgICByZXR1cm4gKnNsb3Q7CisKKyAgbm9kZSA9IFhO RVcgKHN0cnVjdCB2dGJsX21hcF9ub2RlKTsKKyAgbm9kZS0+dnRibF9tYXBf ZGVjbCA9IE5VTExfVFJFRTsKKyAgbm9kZS0+Y2xhc3NfbmFtZSA9IGtleS5j bGFzc19uYW1lOworICBub2RlLT51aWQgPSBudW1fdnRhYmxlX21hcF9ub2Rl cysrOworCisgIG5vZGUtPmNsYXNzX2luZm8gPSBYTkVXIChzdHJ1Y3QgdnR2 X2dyYXBoX25vZGUpOworICBub2RlLT5jbGFzc19pbmZvLT5jbGFzc190eXBl ID0gYmFzZV9jbGFzc190eXBlOworICBub2RlLT5jbGFzc19pbmZvLT5jbGFz c191aWQgPSBub2RlLT51aWQ7CisgIG5vZGUtPmNsYXNzX2luZm8tPm1heF9w YXJlbnRzID0gZGVmYXVsdF9hcnJheV9zaXplOworICBub2RlLT5jbGFzc19p bmZvLT5tYXhfY2hpbGRyZW4gPSBkZWZhdWx0X2FycmF5X3NpemU7CisgIG5v ZGUtPmNsYXNzX2luZm8tPm51bV9wYXJlbnRzID0gMDsKKyAgbm9kZS0+Y2xh c3NfaW5mby0+bnVtX2NoaWxkcmVuID0gMDsKKyAgbm9kZS0+Y2xhc3NfaW5m by0+bnVtX3Byb2Nlc3NlZF9jaGlsZHJlbiA9IDA7CisgIG5vZGUtPmNsYXNz X2luZm8tPnBhcmVudHMgPQorICAgICAgKHN0cnVjdCB2dHZfZ3JhcGhfbm9k ZSAqKikKKyAgICAgICAgICAgICAgIHhtYWxsb2MgKGRlZmF1bHRfYXJyYXlf c2l6ZSAqIHNpemVvZiAoc3RydWN0IHZ0dl9ncmFwaF9ub2RlICopKTsKKyAg bm9kZS0+Y2xhc3NfaW5mby0+Y2hpbGRyZW4gPQorICAgICAgKHN0cnVjdCB2 dHZfZ3JhcGhfbm9kZSAqKikKKyAgICAgICAgICAgICAgIHhtYWxsb2MgKGRl ZmF1bHRfYXJyYXlfc2l6ZSAqIHNpemVvZiAoc3RydWN0IHZ0dl9ncmFwaF9u b2RlICopKTsKKworICBmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9hcnJheV9z aXplOyArK2kpCisgICAgeworICAgICAgbm9kZS0+Y2xhc3NfaW5mby0+cGFy ZW50c1tpXSA9IE5VTEw7CisgICAgICBub2RlLT5jbGFzc19pbmZvLT5jaGls ZHJlbltpXSA9IE5VTEw7CisgICAgfQorCisgIG5vZGUtPnJlZ2lzdGVyZWQg PSBodGFiX2NyZWF0ZSAoMTYsIGhhc2hfdnRhYmxlX3JlZ2lzdHJhdGlvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcV92dGFibGVf cmVnaXN0cmF0aW9uLCBOVUxMKTsKKyAgbm9kZS0+aXNfdXNlZCA9IGZhbHNl OworICBub2RlLT5uZXh0ID0gdnRibF9tYXBfbm9kZXM7CisgIGlmICh2dGJs X21hcF9ub2RlcykKKyAgICB2dGJsX21hcF9ub2Rlcy0+cHJldiA9IG5vZGU7 CisKKyAgdnRibF9tYXBfbm9kZXNfdmVjLnNhZmVfcHVzaCAobm9kZSk7Cisg IGdjY19hc3NlcnQgKHZ0YmxfbWFwX25vZGVzX3ZlY1tub2RlLT51aWRdID09 IG5vZGUpOworCisgIHZ0YmxfbWFwX25vZGVzID0gbm9kZTsKKyAgKnNsb3Qg PSBub2RlOworICByZXR1cm4gbm9kZTsKK30KKworLyogRW5kIG9mIGhhc2h0 YWJsZSBmdW5jdGlvbnMgZm9yIHZ0YWJsZV9tYXAgdmFyaWFibGVzIGhhc2gg dGFibGUuICAgKi8KKworLyogQXMgcGFydCBvZiB2dGFibGUgdmVyaWZpY2F0 aW9uIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgYW5kIGluc2VydHMKKyAgIGNh bGxzIHRvIF9fVkxUVmVyaWZ5VnRhYmxlUG9pbnRlciwgd2hpY2ggaXMgaW4g bGlic3RkYysrLiAgVGhpcworICAgZnVuY3Rpb24gYnVpbGRzIGFuZCBpbml0 aWFsaXplcyB0aGUgZnVuY3Rpb24gZGVjbCB0aGF0IGlzIHVzZWQKKyAgIGlu IGdlbmVyYXRpbmcgdGhvc2UgZnVuY3Rpb24gY2FsbHMuCisKKyAgIEluIGFk ZGl0aW9uIHRvIF9fVkxUVmVyaWZ5VnRhYmxlUG9pbnRlciB0aGVyZSBpcyBh bHNvCisgICBfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXJEZWJ1ZyB3aGljaCBj YW4gYmUgdXNlZCBpbiBwbGFjZSBvZgorICAgX19WTFRWZXJpZnlWdGFibGVQ b2ludGVyLCBhbmQgd2hpY2ggdGFrZXMgZXh0cmEgcGFyYW1ldGVycyBhbmQK KyAgIG91dHB1dHMgZXh0cmEgaW5mb3JtYXRpb24sIHRvIGhlbHAgZGVidWcg cHJvYmxlbXMuICBUaGUgZGVidWcKKyAgIHZlcnNpb24gb2YgdGhpcyBmdW5j dGlvbiBpcyBnZW5lcmF0ZWQgYW5kIHVzZWQgaWYgdnR2X2RlYnVnIGlzCisg ICB0cnVlLgorCisgICBUaGUgc2lnbmF0dXJlcyBmb3IgdGhlc2UgZnVuY3Rp b25zIGFyZToKKworICAgdm9pZCAqIF9fVkxUVmVyaWZ5VnRhYmxlUG9pbnRl ciAodm9pZCAqKiwgdm9pZCopOworICAgdm9pZCAqIF9fVkxUVmVyaWZ5VnRh YmxlUG9pbnRlckRlYnVnICh2b2lkKiosIHZvaWQgKiwgY2hhciAqLCBpbnQs IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50KTsKKyovCisKK3N0YXRpYyB2b2lkCitidWlsZF92dGFibGVf dmVyaWZ5X2ZuZGVjbCAodm9pZCkKK3sKKyAgdHJlZSB2b2lkX3B0cl90eXBl ID0gYnVpbGRfcG9pbnRlcl90eXBlICh2b2lkX3R5cGVfbm9kZSk7CisgIHRy ZWUgYXJnX3R5cGVzID0gTlVMTF9UUkVFOworICB0cmVlIGZ1bmNfdHlwZSA9 IE5VTExfVFJFRTsKKyAgc3RydWN0IGxhbmdfZGVjbCAqbGQ7CisgIHRyZWUg Y29uc3RfY2hhcl9wdHJfdHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWlsZF9xdWFsaWZp ZWRfdHlwZSAoY2hhcl90eXBlX25vZGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFX1FV QUxfQ09OU1QpKTsKKworICBpZiAodmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCAh PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuOworCisgIGxkID0gZ2djX2FsbG9j X2NsZWFyZWRfbGFuZ19kZWNsIChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xf Zm4pKTsKKyAgbGQtPnUuYmFzZS5zZWxlY3RvciA9IDE7CisKKyAgYXJnX3R5 cGVzID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsIGJ1aWxkX3BvaW50 ZXJfdHlwZSAodm9pZF9wdHJfdHlwZSkpOworICBhcmdfdHlwZXMgPSBjaGFp bm9uIChhcmdfdHlwZXMsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3RfcHRyX3R5cGVfbm9kZSkpOworCisgIGlmICh2dHZfZGVi dWcpCisgICAgeworICAgICAgLyogU3RhcnQ6IEFyZyB0eXBlcyBmb3IgZGVi dWdnaW5nIHZlcnNpb24gb2YgZnVuY3Rpb24uICAqLworICAgICAgYXJnX3R5 cGVzID0gY2hhaW5vbiAoYXJnX3R5cGVzLCBidWlsZF90cmVlX2xpc3QgKE5V TExfVFJFRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdF9jaGFyX3B0cl90eXBlKSk7Cisg ICAgICBhcmdfdHlwZXMgPSBjaGFpbm9uIChhcmdfdHlwZXMsIGJ1aWxkX3Ry ZWVfbGlzdCAoTlVMTF9UUkVFLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2NoYXJfcHRy X3R5cGUpKTsKKyAgICAgIC8qIEVuZDogQXJnIHR5cGVzIGZvciBkZWJ1Z2dp bmcuICAqLworICAgIH0KKworICBhcmdfdHlwZXMgPSBjaGFpbm9uIChhcmdf dHlwZXMsIGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCB2b2lkX3R5cGVf bm9kZSkpOworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlIChj b25zdF9wdHJfdHlwZV9ub2RlLCBhcmdfdHlwZXMpOworCisgIGlmICh2dHZf ZGVidWcpCisgICAgdmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCA9IGJ1aWxkX2Zu X2RlY2wgKCJfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXJEZWJ1ZyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNf dHlwZSk7CisgIGVsc2UKKyAgICB2ZXJpZnlfdnRibF9wdHJfZm5kZWNsID0g YnVpbGRfZm5fZGVjbCAoIl9fVkxUVmVyaWZ5VnRhYmxlUG9pbnRlciIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1 bmNfdHlwZSk7CisKKyAgVFJFRV9OT1RIUk9XICh2ZXJpZnlfdnRibF9wdHJf Zm5kZWNsKSA9IDE7CisgIERFQ0xfQVRUUklCVVRFUyAodmVyaWZ5X3Z0Ymxf cHRyX2ZuZGVjbCkKKyAgICAgID0gdHJlZV9jb25zIChnZXRfaWRlbnRpZmll ciAoImxlYWYiKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICBERUNMX0FU VFJJQlVURVMgKHZlcmlmeV92dGJsX3B0cl9mbmRlY2wpKTsKKyAgREVDTF9Q VVJFX1AgKHZlcmlmeV92dGJsX3B0cl9mbmRlY2wpID0gMTsKKyAgVFJFRV9Q VUJMSUMgKHZlcmlmeV92dGJsX3B0cl9mbmRlY2wpID0gMTsKKyAgLyogREVD TF9WSVNJQklMSVRZICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNsKSA9IDE7ICAq LworICBERUNMX1BSRVNFUlZFX1AgKHZlcmlmeV92dGJsX3B0cl9mbmRlY2wp ID0gMTsKKyAgREVDTF9MQU5HX1NQRUNJRklDICh2ZXJpZnlfdnRibF9wdHJf Zm5kZWNsKSA9IGxkOworICBTRVRfREVDTF9MQU5HVUFHRSAodmVyaWZ5X3Z0 YmxfcHRyX2ZuZGVjbCwgbGFuZ19jcGx1c3BsdXMpOworfQorCisvKiBUaGlz IGZ1bmN0aW9uIHRha2VzIGEgdHJlZSB0eXBlLCBUWVBFX05PREUsIGFuZCBh IHNldCBvZiB0eXBlIHF1YWxpZmllcgorICAgZmxhZ3MsIE5FV19RVUFMUywg YW5kIHNldCB0aGUgdHlwZSBxdWFsaWZpZXJzIG9uIFRZUEVfTk9ERSB0byB0 aG9zZQorICAgc3BlY2lmaWVkIGluIE5FV19RVUFMUy4gICovCisKK3ZvaWQK K3Jlc2V0X3R5cGVfcXVhbGlmaWVycyAodW5zaWduZWQgaW50IG5ld19xdWFs cywgdHJlZSB0eXBlX25vZGUpCit7CisgIGlmIChuZXdfcXVhbHMgJiBUWVBF X1FVQUxfQ09OU1QpCisgICAgVFlQRV9SRUFET05MWSAodHlwZV9ub2RlKSA9 IDE7CisgIGVsc2UKKyAgICBUWVBFX1JFQURPTkxZICh0eXBlX25vZGUpID0g MDsKKworICBpZiAobmV3X3F1YWxzICYgVFlQRV9RVUFMX1ZPTEFUSUxFKQor ICAgIFRZUEVfVk9MQVRJTEUgKHR5cGVfbm9kZSkgPSAxOworICBlbHNlCisg ICAgVFlQRV9WT0xBVElMRSAodHlwZV9ub2RlKSA9IDA7CisKKyAgaWYgKG5l d19xdWFscyAmIFRZUEVfUVVBTF9SRVNUUklDVCkKKyAgICBUWVBFX1JFU1RS SUNUICh0eXBlX25vZGUpID0gMTsKKyAgZWxzZQorICAgIFRZUEVfUkVTVFJJ Q1QgKHR5cGVfbm9kZSkgPSAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRh a2VzIHRoZSBMSFMgb2YgYSBnaW1wbGUgYXNzaWdubWVudCBzdGF0ZW1lbnQs IHdoaWNoCisgICBoYXMgYWxyZWFkeSBiZWVuIHZlcmlmaWVkIHRvIGJlIGFu IHNzYV9uYW1lLCBmaW5kcyB0aGUgdHlwZSBuYW1lIG9mCisgICBpdCwgYW5k IGNoZWNrcyB0byBzZWUgaWYgdGhlIG5hbWUgb2YgdGhlIHR5cGUgaXMKKyAg ICJfX3Z0YmxfcHRyX3R5cGUiLiAgKi8KKworc3RhdGljIGJvb2wKK3R5cGVf bmFtZV9pc192dGFibGVfcG9pbnRlciAodHJlZSBsaHMpCit7CisgIHRyZWUg bm9kZTsKKworICBpZiAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGxo cykpCisgICAgICB8fCAhUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoVFJF RV9UWVBFIChsaHMpKSkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIG5vZGUg PSBUUkVFX1RZUEUgKFRSRUVfVFlQRSAobGhzKSk7CisKKyAgaWYgKFRZUEVf TkFNRSAobm9kZSkpCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAoVFlQ RV9OQU1FIChub2RlKSkgPT0gSURFTlRJRklFUl9OT0RFKQorICAgICAgICBy ZXR1cm4gKHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChUWVBFX05BTUUg KG5vZGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX3Z0YmxfcHRy X3R5cGUiKSA9PSAwKTsKKyAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAoVFlQ RV9OQU1FIChub2RlKSkgPT0gVFlQRV9ERUNMCisgICAgICAgICAgICAgICAm JiBERUNMX05BTUUgKFRZUEVfTkFNRSAobm9kZSkpKQorICAgICAgICByZXR1 cm4gKHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKFRZ UEVfTkFNRSAobm9kZSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJf X3Z0YmxfcHRyX3R5cGUiKSA9PSAwKTsKKyAgICAgIGVsc2UKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisK Ky8qIEdpdmVuIGEgZ2ltcGxlIFNUTVQsIHRoaXMgZnVuY3Rpb24gY2hlY2tz IHRvIHNlZSBpZiB0aGUgc3RhdGVtZW50CisgICBpcyBhbiBhc3NpZ25tZW50 LCB0aGUgcmhzIG9mIHdoaWNoIGlzIGdldHRpbmcgdGhlIHZ0YWJsZSBwb2lu dGVyCisgICB2YWx1ZSBvdXQgb2YgYW4gb2JqZWN0LiAgKGkuZS4gaXQncyB0 aGUgdmFsdWUgd2UgbmVlZCB0byB2ZXJpZnkKKyAgIGJlY2F1c2UgaXRzIHRo ZSB2dGFibGUgcG9pbnRlciB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSB2aXJ0 dWFsCisgICBjYWxsKS4gICovCisKK3N0YXRpYyBib29sCitpc192dGFibGVf YXNzaWdubWVudF9zdG10IChnaW1wbGUgc3RtdCkKK3sKKworICBpZiAoZ2lt cGxlX2NvZGUgKHN0bXQpICE9IEdJTVBMRV9BU1NJR04pCisgICAgcmV0dXJu IGZhbHNlOworICBlbHNlCisgICAgeworICAgICAgdHJlZSBsaHMgPSBnaW1w bGVfYXNzaWduX2xocyAoc3RtdCk7CisgICAgICB0cmVlIHJocyA9IGdpbXBs ZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisKKyAgICAgIGlmIChUUkVFX0NPREUg KGxocykgIT0gU1NBX05BTUUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgICAgaWYgKCEgdHlwZV9uYW1lX2lzX3Z0YWJsZV9wb2ludGVyIChsaHMp KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGlmIChUUkVFX0NP REUgKHJocykgIT0gQ09NUE9ORU5UX1JFRikKKyAgICAgICAgcmV0dXJuIGZh bHNlOworCisgICAgICBpZiAoISAoVFJFRV9PUEVSQU5EIChyaHMsIDEpKQor ICAgICAgICAgIHx8IChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAocmhzLCAx KSkgIT0gRklFTERfREVDTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgICAgaWYgKCEgKERFQ0xfTkFNRSAoVFJFRV9PUEVSQU5EIChyaHMsIDEp KSkKKyAgICAgICAgICB8fCAoc3RybmNtcCAoSURFTlRJRklFUl9QT0lOVEVS IChERUNMX05BTUUgKFRSRUVfT1BFUkFORCAocmhzLCAxKSkpLAorICAgICAg ICAgICAgICAgICAgICAgICAiX3ZwdHIuIiwgNikgIT0gMCkpCisgICAgICAg IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K KworLyogR2l2ZW4gdGhlIEJJTkZPIGZvciBhIHZpcnR1YWwgdHlwZSwgZ2V0 cyB0aGUgdnRhYmxlIGRlY2wgZm9yIHRoYXQKKyAgIEJJTkZPLiAgKi8KKwor c3RhdGljIHRyZWUKK215X2dldF92dGJsX2RlY2xfZm9yX2JpbmZvICh0cmVl IGJpbmZvKQoreworICB0cmVlIGRlY2w7CisKKyAgZGVjbCA9IEJJTkZPX1ZU QUJMRSAoYmluZm8pOworICBpZiAoZGVjbCAmJiBUUkVFX0NPREUgKGRlY2wp ID09IFBPSU5URVJfUExVU19FWFBSKQorICB7CisgICAgZ2NjX2Fzc2VydCAo VFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGRlY2wsIDApKSA9PSBBRERSX0VY UFIpOworICAgIGRlY2wgPSBUUkVFX09QRVJBTkQgKFRSRUVfT1BFUkFORCAo ZGVjbCwgMCksIDApOworICB9CisgIGlmIChkZWNsKQorICAgIGdjY19hc3Nl cnQgKFRSRUVfQ09ERSAoZGVjbCkgPT0gVkFSX0RFQ0wpOworCisgIHJldHVy biBkZWNsOworfQorCitzdGF0aWMgdHJlZQorZmluZF9hbmRfcmVwbGFjZV92 YXJfMSAodHJlZSAqdHAsIGludCAqd2Fsa19zdWJ0cmVlcywgdm9pZCAqZGF0 YSkKK3sKKyAgdHJlZSB0ID0gKnRwOworICBzdHJ1Y3Qgd2Fsa19zdG10X2lu Zm8gKndpID0gKHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqKSBkYXRhOworICB0 cmVlIG9sZF92YXIgPSAoKHRyZWUgKikgd2ktPmluZm8pWzBdOworICB0cmVl IG5ld192YXIgPSAoKHRyZWUgKikgd2ktPmluZm8pWzFdOworICBnaW1wbGUg c3RtdCAgPSAoKGdpbXBsZSAqKSB3aS0+aW5mbylbMl07CisgIGJvb2wgZm91 bmQgPSBmYWxzZTsKKworICBpZiAoKFRSRUVfQ09ERSAodCkgPT0gU1NBX05B TUUpICYmICh0ID09IG9sZF92YXIpKQorICAgIHsKKyAgICAgIGlmIChnaW1w bGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0FTU0lHTikKKyAgICAgICAgewor ICAgICAgICAgIGVudW0gdHJlZV9jb2RlIGNvZGUgPSBnaW1wbGVfZXhwcl9j b2RlIChzdG10KTsKKyAgICAgICAgICBzd2l0Y2ggKGdldF9naW1wbGVfcmhz X2NsYXNzIChjb2RlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg Y2FzZSBHSU1QTEVfVEVSTkFSWV9SSFM6CisgICAgICAgICAgICAgICAgaWYg KGdpbXBsZV9hc3NpZ25fcmhzMyAoc3RtdCkgPT0gb2xkX3ZhcikKKyAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2ltcGxlX2Fz c2lnbl9zZXRfcmhzMyAoc3RtdCwgbmV3X3Zhcik7CisgICAgICAgICAgICAg ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICAg ICAgICAgIGNhc2UgR0lNUExFX0JJTkFSWV9SSFM6CisgICAgICAgICAgICAg ICAgaWYgKGdpbXBsZV9hc3NpZ25fcmhzMiAoc3RtdCkgPT0gb2xkX3ZhcikK KyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2lt cGxlX2Fzc2lnbl9zZXRfcmhzMiAoc3RtdCwgbmV3X3Zhcik7CisgICAgICAg ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisg ICAgICAgICAgICAgIGNhc2UgR0lNUExFX1NJTkdMRV9SSFM6CisgICAgICAg ICAgICAgICAgaWYgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCkgPT0gb2xk X3ZhcikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzMSAoc3RtdCwgbmV3X3Zhcik7Cisg ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdpbXBsZV9j b2RlIChzdG10KSA9PSBHSU1QTEVfQ0FMTCkKKyAgICAgICAgeworICAgICAg ICAgIHRyZWUgY2FsbCA9IGdpbXBsZV9jYWxsX2ZuIChzdG10KTsKKyAgICAg ICAgICBpZiAoVFJFRV9DT0RFIChjYWxsKSA9PSBPQkpfVFlQRV9SRUYpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBudW1fb3BlcmFuZHMg PSBUUkVFX09QRVJBTkRfTEVOR1RIIChjYWxsKTsKKyAgICAgICAgICAgICAg aW50IGk7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb3Bl cmFuZHM7ICsraSkKKyAgICAgICAgICAgICAgICBpZiAoVFJFRV9PUEVSQU5E IChjYWxsLCBpKSA9PSBvbGRfdmFyKQorICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICBUUkVFX09QRVJBTkQgKGNhbGwsIGkpID0g bmV3X3ZhcjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgeyB9CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgaW50IG51bV9vcGVyYW5kcyA9IFRSRUVfT1BFUkFORF9MRU5H VEggKHQpOworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwg bnVtX29wZXJhbmRzOyArK2kpCisgICAgICAgIGlmIChUUkVFX09QRVJBTkQg KHQsIGkpID09IG9sZF92YXIpCisgICAgICAgICAgeworICAgICAgICAgICAg VFJFRV9PUEVSQU5EICh0LCBpKSA9IG5ld192YXI7CisgICAgICAgICAgICBm b3VuZCA9IHRydWU7CisgICAgICAgICAgfQorICAgIH0KKworICBpZiAoZm91 bmQpCisgICAgeworICAgICAgKndhbGtfc3VidHJlZXMgPSAwOworICAgICAg cmV0dXJuIG5ld192YXI7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIE5V TExfVFJFRTsKK30KKworLyogU1RNVCBpcyBhIGdpbXBsZSBzdGF0bWVudCB0 aGF0IHVzZXMgT0xEX1ZBUi4gIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlCisg ICB1c2Ugb2YgT0xEX1ZBUiBpbiBTVE1UIGFuZCByZXBsYWNlcyBpdCB3aXRo IE5FV19WQVIuICBTVE1UIGlzIGVpdGhlcgorICAgYW4gYXNzaWdubWVudCBz dGF0ZW1lbnQgb3IgYSBjYWxsIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBi b29sCitmaW5kX2FuZF9yZXBsYWNlX3ZhciAoZ2ltcGxlIHN0bXQsIHRyZWUg b2xkX3ZhciwgdHJlZSBuZXdfdmFyKQoreworICBib29sIGZvdW5kID0gZmFs c2U7CisgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyB3aTsKKyAgdHJlZSBwYXJh bXNbM107CisgIHRyZWUgcmVzdWx0OworCisgIGlmICghc3RtdCB8fCAhIG9s ZF92YXIgfHwgIW5ld192YXIpCisgICAgcmV0dXJuIGZvdW5kOworCisgIGlm ICgoVFJFRV9DT0RFIChvbGRfdmFyKSAhPSBTU0FfTkFNRSkKKyAgICAgIHx8 IChUUkVFX0NPREUgKG5ld192YXIpICE9IFNTQV9OQU1FKSkKKyAgICByZXR1 cm4gZm91bmQ7CisKKyAgcGFyYW1zWzBdID0gb2xkX3ZhcjsKKyAgcGFyYW1z WzFdID0gbmV3X3ZhcjsKKyAgcGFyYW1zWzJdID0gKHRyZWUpIHN0bXQ7CisK KyAgd2kuaW5mbyA9ICZwYXJhbXM7CisgIHdpLnBzZXQgPSBOVUxMOworCisg IHJlc3VsdCA9IHdhbGtfZ2ltcGxlX29wIChzdG10LCBmaW5kX2FuZF9yZXBs YWNlX3Zhcl8xLCAmd2kpOworCisgIGlmIChyZXN1bHQgIT0gTlVMTF9UUkVF KQorICAgIGZvdW5kID0gdHJ1ZTsKKworICBpZiAoZm91bmQpCisgICAgdXBk YXRlX3N0bXQgKHN0bXQpOworCisgIHJldHVybiBmb3VuZDsKK30KKworLyog R2l2ZW4gYSB2aXJ0dWFsIGZ1bmNpdG9uIGNhbGwgKEZOQ0FMTCkgaW4gZ2lt cGxlIFNUTVQsIHRoaXMKKyAgIGZ1bmN0aW9uIGNoYWlucyBiYWNrIHRocm91 Z2ggdGhlIGRlZiBzdG10cyBvZiB0aGUgdmlydHVhbCBjYWxsLAorICAgbG9v a2luZyBmb3IgdGhlIG1vc3QgcmVjZW50IHN0YXRlbWVudCB0aGF0IGFzc2ln bmVkIGEgX3ZwdHIgZmllbGQKKyAgIG91dCBvZiB0aGUgb2JqZWN0IHVzZWQg aW4gdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGlzIGlzIHRoZSB2dGFibGUKKyAg IHBvaW50ZXIgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSB2ZXJpZmllZC4gICov CisKK3N0YXRpYyBnaW1wbGUKK2ZpbmRfdnRhYmxlX3B0cl9hc3NpZ25tZW50 X3N0bXQgKHRyZWUgZm5jYWxsLCBnaW1wbGUgc3RtdCwgZ2ltcGxlICpwcmV2 X3VzZSkKK3sKKyAgZ2ltcGxlIGRlZl9zdG10OworCisgIC8qIEZpbmQgdGhl IGZpcnN0IG9wZXJhbmQgb2YgdGhlIGZ1bmN0aW9uIGNhbGw7IHRoaXMgc2hv dWxkIGJlIHRoZQorICAgICBTU0FfTkFNRSB2YXJpYWJsZSB0aGF0IGNvbnRh aW5zIHRoZSBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsCisgICAgIGZ1bmN0aW9u LiAgKi8KKyAgaWYgKFRSRUVfT1BFUkFORCAoZm5jYWxsLCAwKQorICAgICAg JiYgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGZuY2FsbCwgMCkpID09IFNT QV9OQU1FKQorICAgIHsKKyAgICAgIHRyZWUgcmhzID0gTlVMTF9UUkVFOwor ICAgICAgdHJlZSBmdW5jX3B0cl92YXIgPSBOVUxMX1RSRUU7CisKKyAgICAg IGZ1bmNfcHRyX3ZhciA9IFRSRUVfT1BFUkFORCAoZm5jYWxsLCAwKTsKKyAg ICAgICpwcmV2X3VzZSA9IHN0bXQ7CisKKyAgICAgIC8qIEZpbmQgdGhlIHN0 YXRtZW50IHRoYXQgY2FsY3VsYXRlZCB0aGUgZnVuY3Rpb24gcG9pbnRlciwg aS5lLgorICAgICAgICAgZnVuY19wdHJfdmFyID0gKih2dGJsX3B0ciArIG9m ZnNldCkuICAqLworCisgICAgICBkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9T VE1UIChmdW5jX3B0cl92YXIpOworCisgICAgICAvKiBTZWFyY2ggYmFja3dh cmRzIHRocm91Z2ggdGhlIGRlZl9zdG10IGNoYWluLCB0byB0cnkKKyAgICAg ICAgIHRvIGZpbmQgdGhlIGFzc2lnbm1lbnQgc3RhdGVtZW50IHdoZXJlIHRo ZSByaHMgb2YKKyAgICAgICAgIHRoZSBhc3NpZ25tZW50IGNvbnRhaW5zIHRo ZSAiLl92cHRyIiBmaWVsZCAodGhlIHZ0YWJsZQorICAgICAgICAgcG9pbnRl cikuICAqLworCisgICAgICAvKiBUT0RPOiBJbiB0aGUgZnV0dXJlIHdlIG5l ZWQgdG8gaGFuZGxlIGRlZl9zdG10cworICAgICAgICAgdGhhdCBhcmUgcGhp IHN0bXRzLiAgRm9yIG5vdyB3ZSBwdW50IG9uIHRoZW0uICAqLworCisgICAg ICBpZiAoZGVmX3N0bXQgJiYgZ2ltcGxlX2NvZGUgKGRlZl9zdG10KSA9PSBH SU1QTEVfUEhJKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgZ2Nj X2Fzc2VydCAoKGRlZl9zdG10ICE9IE5VTEwpCisgICAgICAgICAgICAgICAg ICAmJiAoZ2ltcGxlX2NvZGUgKGRlZl9zdG10KSA9PSBHSU1QTEVfQVNTSUdO KSk7CisKKworICAgICAgLyogZGVmX3N0bXQgc2hvdWxkIG5vdyBiZSBvZiB0 aGUgZm9ybTogdmFyMSA9ICp2YXIyCisJIChkZXJlZmVyZW5jZGluZyB2YXIg MiB0byBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIHRoZQorCSB2aXJ0dWFs IG1ldGhvZC4gIFdlIG5lZWQgdG8gZXh0cmFjdCAndmFyMicgZnJvbSB0aGUg cmhzLCBhbmQKKwkgZmluZCBpdHMgZGVmX3N0bXQuICAqLworCisgICAgICBy aHMgPSBnaW1wbGVfYXNzaWduX3JoczEgKGRlZl9zdG10KTsKKyAgICAgIGlm IChyaHMKKwkgICYmIFRSRUVfQ09ERSAocmhzKSA9PSBNRU1fUkVGCisJICAm JiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAocmhzLCAwKSkgPT0gU1NBX05B TUUpCisJeworCSAgKnByZXZfdXNlID0gZGVmX3N0bXQ7CisJICBkZWZfc3Rt dCA9IFNTQV9OQU1FX0RFRl9TVE1UIChUUkVFX09QRVJBTkQgKHJocywgMCkp OworCX0KKworICAgICAgaWYgKGdpbXBsZV9jb2RlIChkZWZfc3RtdCkgPT0g R0lNUExFX1BISSkKKwlkZWZfc3RtdCA9IE5VTEw7CisKKyAgICAgIC8qIFNl YXJjaCBiYWNrd2FyZHMsIHRocm91Z2ggdGhlIFNTQV9OQU1FX0RFRl9TVE1U IHN0YXRlbWVudHMgaW4KKyAgICAgICAgIHRoZSBSSFMgb2Ygb3VyIGRlZl9z dG10KHMpLCB1bnRpbCB3ZSBmaW5kIGFuIGFzc2lnbm1lbnQKKyAgICAgICAg IHN0YXRlbWVudCB3aG9zZSBsaHMgaXMgYW4gU1NBX05BTUUgYW5kIHdob3Nl IHJocyBjb250YWlucyBhCisgICAgICAgICAiLl92cHRyIiBmaWVsZC4gICov CisKKyAgICAgIHdoaWxlIChkZWZfc3RtdAorICAgICAgICAgICAgICYmICFp c192dGFibGVfYXNzaWdubWVudF9zdG10IChkZWZfc3RtdCkpCisgICAgICAg IHsKKyAgICAgICAgICB0cmVlIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhzIChk ZWZfc3RtdCk7CisgICAgICAgICAgaWYgKCFsaHMgfHwgVFJFRV9DT0RFIChs aHMpICE9IFNTQV9OQU1FKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBkZWZfc3RtdCA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgLyogVHJ5IHRvIGZpbmQgdGhlIFNT QV9OQU1FIHZhcmlhYmxlIGluIHRoZSBSSFM7IHN0YXJ0IGJ5IHRyeWluZwor ICAgICAgICAgICAgIHRoZSBmaXJzdCAob25seSkgcmhzIHBpZWNlLiAgKi8K KyAgICAgICAgICBpZiAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChkZWZfc3RtdCkK KyAgICAgICAgICAgICAgJiYgVFJFRV9DT0RFIChnaW1wbGVfYXNzaWduX3Jo czEgKGRlZl9zdG10KSkgPT0gU1NBX05BTUUpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICpwcmV2X3VzZSA9IGRlZl9zdG10OworICAgICAgICAg ICAgICByaHMgPSBnaW1wbGVfYXNzaWduX3JoczEgKGRlZl9zdG10KTsKKwor ICAgICAgICAgICAgICAvKiBHZXQgb3VyIG5ldyBkZWZfc3RtdC4gICovCisg ICAgICAgICAgICAgIGRlZl9zdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKHJo cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogVGhlIGZpcnN0IHBp ZWNlIGRpZG4ndCB3b3JrLCBzbyB0cnkgdGhlIHNlY29uZCBwaWVjZSwgaWYK KyAgICAgICAgICAgICB0aGVyZSBpcyBvbmUuICAqLworICAgICAgICAgIGVs c2UgaWYgKChnZXRfZ2ltcGxlX3Joc19jbGFzcyAoZ2ltcGxlX2V4cHJfY29k ZSAoZGVmX3N0bXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICE9IEdJTVBMRV9TSU5HTEVfUkhT KQorICAgICAgICAgICAgICAgICAgICYmIGdpbXBsZV9hc3NpZ25fcmhzMiAo ZGVmX3N0bXQpCisgICAgICAgICAgICAgICAgICAgJiYgVFJFRV9DT0RFIChn aW1wbGVfYXNzaWduX3JoczIgKGRlZl9zdG10KSkgPT0gU1NBX05BTUUpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICpwcmV2X3VzZSA9IGRlZl9z dG10OworICAgICAgICAgICAgICByaHMgPSBnaW1wbGVfYXNzaWduX3JoczIg KGRlZl9zdG10KTsKKyAgICAgICAgICAgICAgZGVmX3N0bXQgPSBTU0FfTkFN RV9ERUZfU1RNVCAocmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICBkZWZfc3RtdCA9IE5VTEw7CisKKyAgICAgICAg ICBpZiAoZGVmX3N0bXQgJiYgZ2ltcGxlX2NvZGUgKGRlZl9zdG10KSA9PSBH SU1QTEVfUEhJKQorICAgICAgICAgICAgZGVmX3N0bXQgPSBOVUxMOworCisg ICAgICAgICAgaWYgKCFkZWZfc3RtdCkKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBkZWZfc3RtdDsKK30KKwor LyogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpbXBsZSBzdGF0bWVudCAoU1RN VCkgYW5kIGFuIGl0ZXJhdHByCisgICAoR1NJX1RFTVApIGFuZCBtYWtlcyB0 aGUgaXRlcmF0b3IgcG9pbnQgdG8gdGhlIFNUTVRzIGxvY2F0aW9uIGluCisg ICBpdHMgYmFzaWMgYmxvY2sncyBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzLiov CisKK3N0YXRpYyBib29sCitmaW5kX3N0bXRfaW5fYmJfc3RtdHMgKGdpbXBs ZSBzdG10LCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3RlbXApCit7Cisg IGJhc2ljX2Jsb2NrIGRlZl9iYjsKKyAgZ2ltcGxlX3NlcSBkZWZfYmJfc3Rt dHM7CisgIGdpbXBsZSB0bXBfc3RtdDsKKyAgYm9vbCBmb3VuZCA9IGZhbHNl OworCisgIGRlZl9iYiA9IGdpbXBsZV9iYiAoc3RtdCk7CisgIGRlZl9iYl9z dG10cyA9IGJiX3NlcSAoZGVmX2JiKTsKKyAgKmdzaV90ZW1wID0gZ3NpX3N0 YXJ0IChkZWZfYmJfc3RtdHMpOworICBmb3IgKDsgIWdzaV9lbmRfcCAoKmdz aV90ZW1wKSAmJiAhZm91bmQ7IGdzaV9uZXh0IChnc2lfdGVtcCkpCisgICAg eworICAgICAgdG1wX3N0bXQgPSBnc2lfc3RtdCAoKmdzaV90ZW1wKTsKKyAg ICAgIGlmICh0bXBfc3RtdCA9PSBzdG10KQorCXsKKwkgIGZvdW5kID0gdHJ1 ZTsKKwkgIGJyZWFrOyAvKiBFeGl0IGxvb3AgaW1tZWRpYXRlbHk7IGRvIG5v IGRvIGFub3RoZXIgZ3NpX25leHQuICAqLworCX0KKyAgICB9CisKKyAgcmV0 dXJuIGZvdW5kOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRv IHJlY292ZXIgdGhlIGRlY2xhcmVkIGNsYXNzIG9mIGFuIG9iamVjdAorICAg dGhhdCBpcyB1c2VkIGluIG1ha2luZyBhIHZpcnR1YWwgY2FsbC4gIEZpcnN0 IHdlIHRyeSBsb29raW5nCisgICBkaXJlY3RseSBhdCB0aGUgVEhJU19PQkpF Q1QgaXRzZWxmLiAgSWYgdGhhdCBkb2VzIG5vdCB3b3JrLCB3ZSB0cnkgdG8K KyAgIGdldCB0aGUgdHlwZSBmcm9tIHRoZSBnaW1wbGUgYXNzaWdubWVudCBz dGF0ZW1lbnQgdGhhdCBleHRyYWN0cyB0aGUKKyAgIHZ0YWJsZSBwb2ludGVy IGZyb20gdGhlIG9iamVjdCAoREVGX1NUTVQpLiAgVGhlIGdpbXBsZQorICAg c3RhdG1lbnQgdXN1YWxseSBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgor CisgICBELjIyMDFfNCA9IE1FTVsoc3RydWN0IEV2ZW50ICopdGhpc18xKEQp XS5fdnB0ci5FdmVudCAgICAqLworCitzdGF0aWMgdHJlZQorZXh0cmFjdF9v YmplY3RfY2xhc3NfdHlwZSAodHJlZSB0aGlzX29iamVjdCwgZ2ltcGxlIGRl Zl9zdG10KQoreworICB0cmVlIG9iamVjdF9yaHMgPSBUUkVFX1RZUEUgKHRo aXNfb2JqZWN0KTsKKyAgdHJlZSByaHMgPSBOVUxMX1RSRUU7CisKKyAgLyog Rmlyc3QgdHJ5IHRvIGdldCB0aGUgdHlwZSBvdXQgb2YgdGhlICd0aGlzJyBv YmplY3QuICAqLworCisgIGlmIChQT0lOVEVSX1RZUEVfUCAob2JqZWN0X3Jo cykKKyAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFIChvYmplY3Rfcmhz KSkgPT0gUkVDT1JEX1RZUEUpCisgICAgcmhzID0gVFJFRV9UWVBFIChvYmpl Y3RfcmhzKTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChvYmplY3RfcmhzKSA9 PSBSRUZFUkVOQ0VfVFlQRQorICAgICAgICAgICAmJiBUUkVFX0NPREUgKFRS RUVfVFlQRSAob2JqZWN0X3JocykpICA9PSBSRUNPUkRfVFlQRSkKKyAgICBy aHMgPSBUUkVFX1RZUEUgKG9iamVjdF9yaHMpOworCisgIC8qIENoZWNrIHRv IHNlZSBpZiB0aGUgdHlwZSBmcm9tIHRoZSAndGhpcycgb2JqZWN0IHdpbGwg d29yayBvciBub3QuCisgICAgIFNvbWV0aW1lcyB0aGUgdHlwZSBvZiB0aGUg J3RoaXMnIG9iamVjdCBpcyBub3QgdXNhYmxlICh1c3VhbGx5CisgICAgIGR1 ZSB0byBvcHRpbWl6YXRpb25zIHdoaWNoIGNoYW5nZSB0aGUgdHlwZSBvZiB0 aGUgJ3RoaXMnIG9iamVjdAorICAgICB0byAndm9pZCAqJyk7IHRyeSB0byBn ZXQgdGhlIHR5cGUgb3V0IG9mIHRoZSB0eXBlIGNhc3QgaW4gdGhlIHJocwor ICAgICBvZiB0aGUgdnRhYmxlIHBvaW50ZXIgYXNzaWdubWVudCBzdGF0ZW1l bnQuICAqLworCisgIGlmICghcmhzIHx8IFRSRUVfQ09ERSAocmhzKSAhPSBS RUNPUkRfVFlQRSB8fCAhVFlQRV9CSU5GTyAocmhzKQorICAgICAgfHwgIUJJ TkZPX1ZUQUJMRSAoVFlQRV9CSU5GTyAocmhzKSkKKyAgICAgIHx8ICFteV9n ZXRfdnRibF9kZWNsX2Zvcl9iaW5mbyAoVFlQRV9CSU5GTyAocmhzKSkpCisg ICAgeworICAgICAgLyogVGhlIHR5cGUgb2YgdGhlICd0aGlzJyBvYmplY3Qg ZGlkIG5vdCB3b3JrLCBzbyB0cnkgdG8gZmluZAorICAgICAgICAgdGhlIHR5 cGUgZnJvbSB0aGUgcmhzIG9mIHRoZSBkZWZfc3RtdC4gIFRyeSB0byBmaW5k IGFuZAorICAgICAgICAgZXh0cmFjdCB0aGUgdHlwZSBjYXN0IGZyb20gdGhh dCBzdG10LiAgKi8KKworICAgICAgcmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMx IChkZWZfc3RtdCk7CisgICAgICBpZiAoVFJFRV9DT0RFIChyaHMpID09IENP TVBPTkVOVF9SRUYpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoVFJF RV9DT0RFIChyaHMpID09IENPTVBPTkVOVF9SRUYKKyAgICAgICAgICAgICAg ICAgJiYgKFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChyaHMsIDApKSA9PSBD T01QT05FTlRfUkVGKSkKKyAgICAgICAgICAgIHJocyA9IFRSRUVfT1BFUkFO RCAocmhzLCAwKTsKKworICAgICAgICAgIGlmIChUUkVFX0NPREUgKHJocykg PT0gQ09NUE9ORU5UX1JFRgorICAgICAgICAgICAgICAmJiBUUkVFX0NPREUg KFRSRUVfT1BFUkFORCAocmhzLCAwKSkgPT0gTUVNX1JFRgorICAgICAgICAg ICAgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EIChy aHMsIDApKSk9PSBSRUNPUkRfVFlQRSkKKyAgICAgICAgICAgIHJocyA9IFRS RUVfVFlQRSAoVFJFRV9PUEVSQU5EIChyaHMsIDApKTsKKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICByaHMgPSBOVUxMX1RSRUU7CisgICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHJocyA9IE5VTExfVFJFRTsKKyAgICB9 CisKKyAgcmV0dXJuIHJoczsKK30KKworLyogR2l2ZW4gYSBDTEFTU19UWVBF LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgdnRh YmxlCisgICBtYXAgdmFyaWFibGUgbm9kZSBmcm9tIHRoZSB2dGFibGUgbWFw IGRhdGEgc3RydWN0dXJlcy4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdnRibF9t YXBfbm9kZSAqCitmaW5kX3Z0YmxfbWFwX25vZGVfZm9yX3R5cGUgKHRyZWUg Y2xhc3NfdHlwZSkKK3sKKyAgdHJlZSBjbGFzc190eXBlX2RlY2w7CisgIHRy ZWUgdHlwZV9kZWNsX3R5cGU7CisgIHRyZWUgdmFyX2lkOworICB1bnNpZ25l ZCBpbnQgc2F2ZV9xdWFsczsKKyAgdW5zaWduZWQgaW50IG51bGxfcXVhbHMg PSBUWVBFX1VOUVVBTElGSUVEOworICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAq dnRhYmxlX21hcF9ub2RlID0gTlVMTDsKKworICAvKiBHZXQgdGhlIHR5cGUg ZGVjbCBmb3IgdGhlIGNsYXNzLiAgKi8KKyAgaWYgKFRSRUVfQ0hBSU4gKGNs YXNzX3R5cGUpKQorICAgIGNsYXNzX3R5cGVfZGVjbCA9IFRSRUVfQ0hBSU4g KGNsYXNzX3R5cGUpOworICBlbHNlCisgICAgY2xhc3NfdHlwZV9kZWNsID0g VFlQRV9OQU1FIChjbGFzc190eXBlKTsKKworICAvKiBUZW1wb3JhcmlseSBy ZW1vdmUgYW55IHF1YWxpZmllcnMgb24gdHlwZSwgZm9yIGxvb2tpbmcgdXAg dnRhYmxlCisgICAgIG1hcCB2YXIuICAqLworICB0eXBlX2RlY2xfdHlwZSA9 IFRSRUVfVFlQRSAoY2xhc3NfdHlwZV9kZWNsKTsKKyAgc2F2ZV9xdWFscyA9 IFRZUEVfUVVBTFMgKHR5cGVfZGVjbF90eXBlKTsKKyAgcmVzZXRfdHlwZV9x dWFsaWZpZXJzIChudWxsX3F1YWxzLCB0eXBlX2RlY2xfdHlwZSk7CisKKyAg LyogVXNlIG1hbmdsZWQgbmFtZSBmb3IgdGhlIHVucXVhbGlmZWQgY2xhc3Mg dHlwZSB0byBMb29rIHVwIHZ0YWJsZQorICAgICBtYXAgdmFyaWFibGUuICAq LworICB2YXJfaWQgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChjbGFzc190eXBl X2RlY2wpOworICB2dGFibGVfbWFwX25vZGUgPSB2dGJsX21hcF9nZXRfbm9k ZSAodmFyX2lkKTsKKworICAvKiBSZXN0b3JlIGFueSB0eXBlIHF1YWxpZmll cnMuICAqLworICByZXNldF90eXBlX3F1YWxpZmllcnMgKHNhdmVfcXVhbHMs IHR5cGVfZGVjbF90eXBlKTsKKworICByZXR1cm4gdnRhYmxlX21hcF9ub2Rl OworfQorCisvKiBTZWFyY2ggdGhyb3VnaCBhbGwgdGhlIHN0YXRlbWVudHMg aW4gYSBiYXNpYyBibG9jayAoQkIpLCBzZWFyY2hpbmcKKyAgIGZvciB2aXJ0 dWFsIG1ldGhvZCBjYWxscy4gIEZvciBlYWNoIHZpcnR1YWwgbWV0aG9kIGRp c3BhdGNoLCBmaW5kCisgICB0aGUgdnB0ciB2YWx1ZSB1c2VkLCBhbmQgdGhl IHN0YXRpY2FsbHkgZGVjbGFyZWQgdHlwZSBvZiB0aGUKKyAgIG9iamVjdDsg cmV0cmlldmUgdGhlIHZ0YWJsZSBtYXAgdmFyaWFibGUgZm9yIHRoZSB0eXBl IG9mIHRoZQorICAgb2JqZWN0OyBnZW5lcmF0ZSBhIGNhbGwgdG8gX19WTFRW ZXJpZnlWdGFibGVQb2ludGVyOyBhbmQgaW5zZXJ0IHRoZQorICAgZ2VuZXJh dGVkIGNhbGwgaW50byB0aGUgYmFzaWMgYmxvY2ssIGFmdGVyIHRoZSBwb2lu dCB3aGVyZSB0aGUgdnB0cgorICAgdmFsdWUgaXMgZ290dGVuIG91dCBvZiB0 aGUgb2JqZWN0IGFuZCBiZWZvcmUgdGhlIHZpcnR1YWwgbWV0aG9kCisgICBk aXNwYXRjaC4gTWFrZSB0aGUgdmlydHVhbCBtZXRob2QgZGlzcGF0Y2ggZGVw ZW5kIG9uIHRoZSByZXR1cm4KKyAgIHZhbHVlIGZyb20gdGhlIHZlcmlmaWNh dGlvbiBjYWxsLCBzbyB0aGF0IHN1YnNlcXVlbnQgb3B0aW1pemF0aW9ucwor ICAgY2Fubm90IHJlb3JkZXIgdGhlIHR3byBjYWxscy4gICovCisKK3N0YXRp YyB2b2lkCit2ZXJpZnlfYmJfdnRhYmxlcyAoYmFzaWNfYmxvY2sgYmIpCit7 CisgIGdpbXBsZV9zZXEgc3RtdHM7CisgIGdpbXBsZSBzdG10ID0gTlVMTDsK KyAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpX3Z0YmxfYXNzaWduOworICBn aW1wbGVfc3RtdF9pdGVyYXRvciBnc2lfdmlydHVhbF9jYWxsOworICB0cmVl IHRoaXNfb2JqZWN0OworCisgIHN0bXRzID0gYmJfc2VxIChiYik7CisgIGdz aV92aXJ0dWFsX2NhbGwgPSBnc2lfc3RhcnQgKHN0bXRzKTsKKyAgdGhpc19v YmplY3QgPSBOVUxMX1RSRUU7CisgIGZvciAoOyAhZ3NpX2VuZF9wIChnc2lf dmlydHVhbF9jYWxsKTsgZ3NpX25leHQgKCZnc2lfdmlydHVhbF9jYWxsKSkK KyAgICB7CisgICAgICBzdG10ID0gZ3NpX3N0bXQgKGdzaV92aXJ0dWFsX2Nh bGwpOworICAgICAgaWYgKGdpbXBsZV9jb2RlIChzdG10KSA9PSBHSU1QTEVf Q0FMTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIEZvdW5kIGEgY2FsbDsg c2VlIGlmIGl0J3MgYSB2aXJ0dWFsIGNhbGwuICAqLworICAgICAgICAgIHRy ZWUgZm5jYWxsID0gZ2ltcGxlX2NhbGxfZm4gKHN0bXQpOworICAgICAgICAg IGlmIChUUkVFX0NPREUgKGZuY2FsbCkgPT0gT0JKX1RZUEVfUkVGKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7 CisJICAgICAgdHJlZSBsaHMgPSBOVUxMX1RSRUU7CisgICAgICAgICAgICAg IGdpbXBsZSB2cHRyX3N0bXQ7CisgICAgICAgICAgICAgIGdpbXBsZSBwcmV2 X3VzZSA9IE5VTEw7CisKKyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBmb3Vu ZCBhIHZpcnR1YWwgY2FsbDsgc2VhcmNoIGJhY2t3YXJkcywKKyAgICAgICAg ICAgICAgICAgdGhyb3VnaCB0aGUgb2JqZWN0J3MgU1NBX05BTUVfREVGX1NU TVRzLCB0byBmaW5kIHRoZSBwbGFjZQorICAgICAgICAgICAgICAgICB3ZXJl IHRoZSB2dGFibGUgcG9pbnRlciBpcyBnb3R0ZW4gb3V0IG9mIHRoZSBvYmpl Y3QKKyAgICAgICAgICAgICAgICAgKGFsc28gbmVlZCB0byBmaW5kIHRoZSBv YmplY3QncyBkZWNsYXJlZCBzdGF0aWMKKyAgICAgICAgICAgICAgICAgdHlw ZSkuICAqLworCisgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBhcmd1bWVu dCB0byB0aGUgZnVuY3Rpb24gbXVzdCBiZSAidGhpcyIsIGEKKyAgICAgICAg ICAgICAgICAgcG9pbnRlciB0byB0aGUgb2JqZWN0IGl0c2VsZi4gICovCisg ICAgICAgICAgICAgIHRoaXNfb2JqZWN0ID0gZ2ltcGxlX2NhbGxfYXJnIChz dG10LCAwKTsKKworICAgICAgICAgICAgICAvKiBGaW5kIHRoZSBwcmV2aW91 c2cgc3RhdGVtZW50IHRoYXQgZ2V0cyB0aGUgIl92cHRyIgorICAgICAgICAg ICAgICAgICBmaWVsZCBvdXQgb2YgdGhlIG9iamVjdC4gICovCisgICAgICAg ICAgICAgIHZwdHJfc3RtdCA9IGZpbmRfdnRhYmxlX3B0cl9hc3NpZ25tZW50 X3N0bXQgKGZuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RtdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnByZXZfdXNlKTsKKworCSAgICAgIGlmICghdnB0cl9zdG10KQor CQljb250aW51ZTsKKworCSAgICAgIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhz ICh2cHRyX3N0bXQpOworCisgICAgICAgICAgICAgIC8qIEZpbmQgdGhlIHZw dHJfc3RtdCBpbiBpdHMgYmFzaWMgYmxvY2sncyBzZXF1ZW5jZSwgc28KKyAg ICAgICAgICAgICAgICAgd2UgaGF2ZSBhbiBpbnNlcnRpb24gcG9pbnQgZm9y IGFkZGluZyBvdXIKKyAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGNh bGwuICAqLworICAgICAgICAgICAgICBmb3VuZCA9IGZpbmRfc3RtdF9pbl9i Yl9zdG10cyAodnB0cl9zdG10LCAmZ3NpX3Z0YmxfYXNzaWduKTsKKworICAg ICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgdHJlZSB2dGJsX3Zhcl9kZWNsID0gTlVMTF9UUkVF OworICAgICAgICAgICAgICAgICAgdHJlZSB2dGJsID0gTlVMTF9UUkVFOwor ICAgICAgICAgICAgICAgICAgZ2ltcGxlX3NlcSBwcmVfcCA9IE5VTEw7Cisg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRhYmxl X21hcF9ub2RlOworICAgICAgICAgICAgICAgICAgdHJlZSB2dGJsX2RlY2wg PSBOVUxMX1RSRUU7CisgICAgICAgICAgICAgICAgICB0cmVlIGV4cHJfdHJl ZSA9IE5VTExfVFJFRTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBnaW1w bGlmeV9jdHggZ2N0eDsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnZ0YWJsZV9uYW1lID0gIjx1bmtub3duPiI7CisgICAgICAgICAgICAgICAg ICBnaW1wbGUgYXNzaWduX3N0bXQ7CisgICAgICAgICAgICAgICAgICB0cmVl IHRtcDA7CisgICAgICAgICAgICAgICAgICBib29sIHN0YXR1czsKKyAgICAg ICAgICAgICAgICAgIGludCBsZW4xID0gMDsKKyAgICAgICAgICAgICAgICAg IGludCBsZW4yID0gMDsKKworICAgICAgICAgICAgICAgICAgLyogTm93IHdl IGhhdmUgZm91bmQgdGhlIHZpcnR1YWwgbWV0aG9kIGRpc3BhdGNoIGFuZAor ICAgICAgICAgICAgICAgICAgICAgdGhlIHByZWNlZGluZyBhY2Nlc3Mgb2Yg dGhlIF92cHRyLiogZmllbGQuLi4gTmV4dAorICAgICAgICAgICAgICAgICAg ICAgd2UgbmVlZCB0byBmaW5kIHRoZSBzdGF0aWNhbGx5IGRlY2xhcmVkIHR5 cGUgb2YKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBvYmplY3QsIHNvIHdl IGNhbiBmaW5kIGFuZCB1c2UgdGhlIHJpZ2h0CisgICAgICAgICAgICAgICAg ICAgICB2dGFibGUgbWFwIHZhcmlhYmxlIGluIHRoZSB2ZXJpZmljYXRpb24g Y2FsbC4gICovCisgICAgICAgICAgICAgICAgICB0cmVlIGNsYXNzX3R5cGUg PSBleHRyYWN0X29iamVjdF9jbGFzc190eXBlICh0aGlzX29iamVjdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZwdHJfc3RtdCk7CisKKyAgICAgICAgICAgICAg ICAgIC8qIE1ha2Ugc3VyZSB3ZSBmb3VuZCBhIHZhbGlkIHR5cGUuICAqLwor ICAgICAgICAgICAgICAgICAgZ2NjX2Fzc2VydCAoY2xhc3NfdHlwZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFRSRUVfQ09ERSAoY2xh c3NfdHlwZSkgPT0gUkVDT1JEX1RZUEUpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBUWVBFX0JJTkZPIChjbGFzc190eXBlKSk7CisKKyAg ICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdnRhYmxlIFZBUl9ERUNMIGZv ciB0aGUgdHlwZS4gICovCisgICAgICAgICAgICAgICAgICB2dGJsX3Zhcl9k ZWNsID0gbXlfZ2V0X3Z0YmxfZGVjbF9mb3JfYmluZm8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRZ UEVfQklORk8gKGNsYXNzX3R5cGUpKTsKKyAgICAgICAgICAgICAgICAgIHZ0 YmwgPSBCSU5GT19WVEFCTEUgKFRZUEVfQklORk8gKGNsYXNzX3R5cGUpKTsK KworICAgICAgICAgICAgICAgICAgZ2NjX2Fzc2VydCAodnRibF92YXJfZGVj bCAmJiB2dGJsKTsKKworICAgICAgICAgICAgICAgICAgdnRibF9kZWNsID0g dnRibF92YXJfZGVjbDsKKworICAgICAgICAgICAgICAgICAgaWYgKFBPSU5U RVJfVFlQRV9QIChUUkVFX1RZUEUgKHZ0YmwpKSkKKyAgICAgICAgICAgICAg ICAgICAgZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHZ0YmwsICZwcmVfcCwgMSwg TlVMTCk7CisKKyAgICAgICAgICAgICAgICAgIHZ0YWJsZV9tYXBfbm9kZSA9 IGZpbmRfdnRibF9tYXBfbm9kZV9mb3JfdHlwZSAoY2xhc3NfdHlwZSk7Cisg ICAgICAgICAgICAgICAgICBpZiAodnRhYmxlX21hcF9ub2RlKQorICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgdnRibF92 YXJfZGVjbCA9IHZ0YWJsZV9tYXBfbm9kZS0+dnRibF9tYXBfZGVjbDsKKyAg ICAgICAgICAgICAgICAgICAgICB2dGFibGVfbWFwX25vZGUtPmlzX3VzZWQg PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZ0YmxfdmFyX2RlY2wg PSBOVUxMOworCisgICAgICAgICAgICAgICAgICAvKiBCdWlsZCB0aGUgRlVO Q19ERUNMIHRvIHVzZSBmb3IgdGhlIHZlcmlmaWNhdGlvbgorICAgICAgICAg ICAgICAgICAgICAgY2FsbC4gICovCisgICAgICAgICAgICAgICAgICBidWls ZF92dGFibGVfdmVyaWZ5X2ZuZGVjbCAoKTsKKworICAgICAgICAgICAgICAg ICAgLyogR2l2ZW4gdGhlIHZ0YWJsZSBwb2ludGVyIGZvciB0aGUgYmFzZSBj bGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgdGhlIG9iamVjdCwgYnVp bGQgdGhlIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAgICAgIF9fVkxUVmVy aWZ5VnRhYmxlUG9pbnRlciB0byB2ZXJpZnkgdGhhdCB0aGUKKyAgICAgICAg ICAgICAgICAgICAgIG9iamVjdCdzIHZ0YWJsZSBwb2ludGVyIChjb250YWlu ZWQgaW4gbGhzKSBpcyBpbgorICAgICAgICAgICAgICAgICAgICAgdGhlIHNl dCBvZiB2YWxpZCB2dGFibGUgcG9pbnRlcnMgZm9yIHRoZSBiYXNlCisgICAg ICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisKKyAgICAgICAgICAgICAg ICAgIGdjY19hc3NlcnQgKHZ0YmxfdmFyX2RlY2wgJiYgdnRibCAmJiB2ZXJp ZnlfdnRibF9wdHJfZm5kZWNsKTsKKworICAgICAgICAgICAgICAgICAgaWYg KFRSRUVfQ09ERSAodnRibF9kZWNsKSA9PSBWQVJfREVDTCkKKyAgICAgICAg ICAgICAgICAgICAgdnRhYmxlX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIg KERFQ0xfTkFNRSAodnRibF9kZWNsKSk7CisKKyAgICAgICAgICAgICAgICAg IHB1c2hfZ2ltcGxpZnlfY29udGV4dCAoJmdjdHgpOworICAgICAgICAgICAg ICAgICAgbGVuMSA9IHN0cmxlbiAoSURFTlRJRklFUl9QT0lOVEVSCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChERUNMX05BTUUgKHZ0YmxfdmFyX2RlY2wpKSk7CisgICAgICAgICAgICAg ICAgICBsZW4yID0gc3RybGVuICh2dGFibGVfbmFtZSk7CisKKyAgICAgICAg ICAgICAgICAgIC8qIENhbGwgZGlmZmVyZW50IHJvdXRpbmVzIGlmIHdlIGFy ZSBpbnRlcmVzdGVkIGluCisgICAgICAgICAgICAgICAgICAgICB0cmFjZSBp bmZvcm1hdGlvbiB0byBkZWJ1ZyBwcm9ibGVtcy4gICovCisgICAgICAgICAg ICAgICAgICBpZiAodnR2X2RlYnVnKQorICAgICAgICAgICAgICAgICAgICBl eHByX3RyZWUgPSBidWlsZF9jYWxsX2V4cHIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodmVyaWZ5X3Z0YmxfcHRyX2ZuZGVjbCwg NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVp bGQxIChBRERSX0VYUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVFlQRV9QT0lOVEVSX1RPCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo VFJFRV9UWVBFICh2dGJsX3Zhcl9kZWNsKSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRibF92YXJfZGVj bCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVp bGRfc3RyaW5nX2xpdGVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjEgKyAxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURF TlRJRklFUl9QT0lOVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKERFQ0xfTkFNRQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHZ0YmxfdmFyX2RlY2wpKSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0cmluZ19saXRlcmFsIChs ZW4yICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZ0YWJsZV9uYW1lKSk7CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGV4cHJf dHJlZSA9IGJ1aWxkX2NhbGxfZXhwcgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh2ZXJpZnlfdnRibF9wdHJfZm5kZWNsLCAyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZDEg KEFERFJfRVhQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUWVBFX1BPSU5URVJfVE8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUUkVF X1RZUEUgKHZ0YmxfdmFyX2RlY2wpKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dGJsX3Zhcl9kZWNsKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGhzKTsK KworICAgICAgICAgICAgICAgICAgLyogQXNzaWduIHRoZSByZXN1bHQgb2Yg dGhlIGNhbGwgdG8gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAg ICB2YXJpYWJsZSByZWNlaXZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgdGhlIG9i amVjdCdzCisgICAgICAgICAgICAgICAgICAgICB2dGFibGUgcG9pbnRlcjsg bWFyayB0aGF0IHZhcmlhYmxlIHRvIGJlIHVwZGF0ZWQKKyAgICAgICAgICAg ICAgICAgICAgIGJ5IHVwZGF0ZV9zc2EuICAqLworCisgICAgICAgICAgICAg ICAgICBjZnVuLT5naW1wbGVfZGYtPnNzYV9yZW5hbWluZ19uZWVkZWQgPSAx OworICAgICAgICAgICAgICAgICAgdG1wMCA9IG1ha2VfdGVtcF9zc2FfbmFt ZSAoVFJFRV9UWVBFIChsaHMpLCBOVUxMLCAiVlRWIik7CisgICAgICAgICAg ICAgICAgICBhc3NpZ25fc3RtdCA9IGdpbXBsaWZ5X2Fzc2lnbiAodG1wMCwg ZXhwcl90cmVlLCAmcHJlX3ApOworICAgICAgICAgICAgICAgICAgc3RhdHVz ID0gZmluZF9hbmRfcmVwbGFjZV92YXIgKHByZXZfdXNlLCBsaHMsIHRtcDAp OworICAgICAgICAgICAgICAgICAgdXBkYXRlX3N0bXQgKGFzc2lnbl9zdG10 KTsKKyAgICAgICAgICAgICAgICAgIGdjY19hc3NlcnQgKHN0YXR1cyA9PSB0 cnVlKTsKKyAgICAgICAgICAgICAgICAgIHBvcF9naW1wbGlmeV9jb250ZXh0 IChOVUxMKTsKKworICAgICAgICAgICAgICAgICAgLyogSW5zZXJ0IHRoZSBu ZXcgY2FsbCBqdXN0IGFmdGVyIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAg ICAgICAgICAgYXNzaWdubWVudCBvZiB0aGUgb2JqZWN0J3MgdnRhYmxlIHBv aW50ZXIuICAqLworCisgICAgICAgICAgICAgICAgICBnc2lfaW5zZXJ0X3Nl cV9hZnRlciAoJmdzaV92dGJsX2Fzc2lnbiwgcHJlX3AsIEdTSV9ORVdfU1RN VCk7CisgICAgICAgICAgICAgICAgICBhbnlfdmVyaWZpY2F0aW9uX2NhbGxz X2dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvKiBNYWluIGZ1bmN0 aW9uLCBjYWxsZWQgZnJvbSBwYXNzLT5leGN1dGUoKS4gIExvb3AgdGhyb3Vn aCBhbGwgdGhlCisgICBiYXNpYyBibG9ja3MgaW4gdGhlIGN1cnJlbnQgZnVu Y3Rpb24sIHBhc3NpbmcgdGhlbSB0bworICAgdmVyaWZ5X2JiX3Z0YWJsZXMs IHdoaWNoIHNlYXJjaGVzIGZvciB2aXJ0dWFsIGNhbGxzLCBhbmQgaW5zZXJ0 cworICAgY2FsbHMgdG8gX19WTFRWZXJpZnlWdGFibGVQb2ludGVyLiAgKi8K KwordW5zaWduZWQgaW50Cit2dGFibGVfdmVyaWZ5X21haW4gKHZvaWQpCit7 CisgIHVuc2lnbmVkIGludCByZXQgPSAxOworICBiYXNpY19ibG9jayBiYjsK KworICBGT1JfQUxMX0JCIChiYikKKyAgICAgIHZlcmlmeV9iYl92dGFibGVz IChiYik7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogR2F0ZSBmdW5jdGlv biBmb3IgdGhlIHBhc3MuICAqLworCitzdGF0aWMgYm9vbAorZ2F0ZV90cmVl X3Z0YWJsZV92ZXJpZnkgKHZvaWQpCit7CisgIHJldHVybiAoZmxhZ192dGFi bGVfdmVyaWZ5CisgICAgICAgICAgJiYgKHN0cmNtcCAobGFuZ19ob29rcy5u YW1lLCAiR05VIEMrKyIpID09IDApKTsKK30KKworLyogRGVmaW5pdGlvbiBv ZiB0aGlzIG9wdGltaXphdGlvbiBwYXNzLiAgKi8KKworc3RydWN0IGdpbXBs ZV9vcHRfcGFzcyBwYXNzX3Z0YWJsZV92ZXJpZnkgPQoreworIHsKKyAgR0lN UExFX1BBU1MsCisgICJ2dGFibGUtdmVyaWZ5IiwgICAgICAgICAgICAgICAg ICAgICAgLyogbmFtZSAqLworICBPUFRHUk9VUF9OT05FLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9wdGluZm9fZmxhZ3MgKi8KKyAgZ2F0ZV90cmVl X3Z0YWJsZV92ZXJpZnksICAgICAgICAgICAgICAvKiBnYXRlICovCisgIHZ0 YWJsZV92ZXJpZnlfbWFpbiwgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0 ZSAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHN1YiAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIG5leHQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBzdGF0aWNfcGFzc19udW1iZXIgKi8KKyAgVFZf VlRBQkxFX1ZFUklGSUNBVElPTiwgICAgICAgICAgICAgICAvKiB0dl9pZCAq LworICBQUk9QX2NmZyB8IFBST1Bfc3NhLCAgICAgICAgICAgICAgICAgIC8q IHByb3BlcnRpZXNfcmVxdWlyZWQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBwcm9wZXJ0aWVzX3Byb3ZpZGVkICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog cHJvcGVydGllc19kZXN0cm95ZWQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0b2RvX2ZsYWdzX3N0YXJ0ICovCisg IFRPRE9fdXBkYXRlX3NzYQorICAgIHwgVE9ET19nZ2NfY29sbGVjdCAgICAg ICAgICAgICAgICAgIC8qIHRvZG9fZmxhZ3NfZmluaXNoICovCisgfQorfTsK KworI2luY2x1ZGUgImd0LXRyZWUtdnRhYmxlLXZlcmlmeS5oIgpJbmRleDog Z2NjL3RyZWUtdnRhYmxlLXZlcmlmeS5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy90cmVlLXZ0YWJsZS12ZXJpZnkuaAkocmV2aXNpb24gMCkK KysrIGdjYy90cmVlLXZ0YWJsZS12ZXJpZnkuaAkocmV2aXNpb24gMCkKQEAg LTAsMCArMSwxNDggQEAKKy8qIEludGVycHJvY2VkdXJhbCBjb25zdGFudCBw cm9wYWdhdGlvbgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3 LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExCisgICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitH Q0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxz LgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFZpcnR1YWwgVGFibGUg UG9pbnRlciBTZWN1cml0eS4gICovCisKKyNpZm5kZWYgVFJFRV9WVEFCTEVf VkVSSUZZX0gKKyNkZWZpbmUgVFJFRV9WVEFCTEVfVkVSSUZZX0gKKworI2lu Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1 ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAi dGltZXZhci5oIgorI2luY2x1ZGUgImNwcGxpYi5oIgorI2luY2x1ZGUgInRy ZWUuaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAic2JpdG1h cC5oIgorCisvKiBHbG9iYWwgdmFyaWFibGUga2VlcGluZyB0cmFjayBvZiBo b3cgbWFueSB2dGFibGUgbWFwIHZhcmlhYmxlcyB3ZQorICAgaGF2ZSBjcmVh dGVkLiAqLworZXh0ZXJuIHVuc2lnbmVkIG51bV92dGFibGVfbWFwX25vZGVz OworCisvKiBHbG9iYWwgdmFyaWFibGUgdGhhdCByZWNvcmRzIHdoZXRoZXIg b3Igbm90IGFueSB2dGFibGUgdmVyaWZpY2F0aW9uCisgICBjYWxscyBoYXZl IGJlZW4gZ2VuZXJhdGVkLiAgKi8KK2V4dGVybiBib29sIGFueV92ZXJpZmlj YXRpb25fY2FsbHNfZ2VuZXJhdGVkOworCisvKiBFYWNoIHZ0YWJsZSBtYXAg dmFyaWFibGUgY29ycmVzcG9uZHMgdG8gYSB2aXJ0dWFsIGNsYXNzLiAgRWFj aAorICAgdnRhYmxlIG1hcCB2YXJpYWJsZSBoYXMgYSBoYXNoIHRhYmxlIGFz c29jaWF0ZWQgd2l0aCBpdCwgdGhhdCBrZWVwcworICAgdHJhY2sgb2YgdGhl IHZ0YWJsZSBwb2ludGVycyBmb3Igd2hpY2ggd2UgaGF2ZSBnZW5lcmF0ZWQg YSBjYWxsIHRvCisgICBfX1ZMVFJlZ2lzdGVyUGFpciAod2l0aCB0aGUgY3Vy cmVudCB2dGFibGUgbWFwIHZhcmlhYmxlKS4gIFRoaXMgaXMKKyAgIHRoZSBo YXNoIHRhYmxlIG5vZGUgdGhhdCBpcyB1c2VkIGZvciBlYWNoIGVudHJ5IGlu IHRoaXMgaGFzaCB0YWJsZQorICAgb2YgdnRhYmxlIHBvaW50ZXJzLgorCisg ICBTb21ldGltZXMgdGhlcmUgYXJlIG11bHRpcGxlIHZhbGlkIHZ0YWJsZSBw b2ludGVyIGVudHJpZXMgdGhhdCB1c2UKKyAgIHRoZSBzYW1lIHZ0YWJsZSBw b2ludGVyIGRlY2wgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0cy4gIFRoZXJlZm9y ZSwKKyAgIGZvciBlYWNoIHZ0YWJsZSBwb2ludGVyIGluIHRoZSBoYXNoIHRh YmxlLCB0aGVyZSBpcyBhbHNvIGFuIGFycmF5CisgICBvZiBvZmZzZXRzIHVz ZWQgd2l0aCB0aGF0IHZ0YWJsZS4gKi8KKworc3RydWN0IHZ0YWJsZV9yZWdp c3RyYXRpb24KK3sKKyAgdHJlZSB2dGFibGVfZGVjbDsgICAgICAgICAgICAv KiBUaGUgdmFyIGRlY2wgb2YgdGhlIHZ0YWJsZS4gICAgICAgICAgICAgICAg Ki8KKyAgdW5zaWduZWQgbWF4X29mZnNldHM7ICAgICAgICAvKiBUaGUgYWxs b2NhdGVkIHNpemUgb2YgdGhlIG9mZnNldHMgYXJyYXkuICAgKi8KKyAgdW5z aWduZWQgY3VyX29mZnNldDsgICAgICAgICAvKiBUaGUgbmV4dCBhdmFpbGFi ZSBlbnRyeSBpbiB0aGUgb2Zmc2V0cworCQkJCSAgYXJyYXkuICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVuc2lnbmVkICpv ZmZzZXRzOyAgICAgICAgICAgLyogVGhlIG9mZnNldHMgYXJyYXkuICAgICAg ICAgICAgICAgICAgICAgICAgICovCit9OworCisvKiAgVGhpcyBzdHJ1Y3Qg aXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNsYXNzIGhpZXJhcmNoeSBpbmZv cm1hdGlvbgorICAgIHRoYXQgd2UgbmVlZC4gIEVhY2ggdnRhYmxlIG1hcCB2 YXJpYWJsZSBoYXMgYW4gYXNzb2NpYXRlZCBjbGFzcworICAgIGhpZXJhcmNo eSBub2RlIChzdHJ1Y3QgdnR2X2dyYXBoX25vZGUpLiAgTm90ZTogSW4gdGhp cyBzdHJ1Y3QsCisgICAgJ2NoaWxkcmVuJyBtZWFucyBpbW1lZGlhdGUgZGVz Y2VuZGFudHMgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeTsKKyAgICAnZGVzY2Vu ZGFudCcgbWVhbnMgYW55IGRlc2NlbmRhbnQgaG93ZXZlciBtYW55IGxldmVs cyBkZWVwLiAqLworCitzdHJ1Y3QgdnR2X2dyYXBoX25vZGUgeworICB0cmVl IGNsYXNzX3R5cGU7ICAgICAgICAgICAgICAgICAgLyogVGhlIHJlY29yZF90 eXBlIG9mIHRoZSBjbGFzcy4gICAgICAgICAqLworICB1bnNpZ25lZCBjbGFz c191aWQ7ICAgICAgICAgICAgICAgLyogQSB1bmlxdWUsIG1vbm90b25pY2Fs bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz Y2VuZGluZyBpZCBmb3IgY2xhc3Mgbm9kZS4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdnRhYmxlIG1hcCBub2RlIGFs c28gaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbiBpZC4gIFRoZSBjbGFzcyB1aWQgaXMgdGhlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIHRoZSB2dGFibGUg bWFwIG5vZGUgaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciBub2RlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBjbGFzcy4g ICovCisgIHVuc2lnbmVkIG1heF9wYXJlbnRzOyAgICAgICAgICAgICAvKiBB bGxvY2F0ZWQgc2l6ZSBvZiB0aGUgcGFyZW50cyBhcnJheS4gICovCisgIHVu c2lnbmVkIG1heF9jaGlsZHJlbjsgICAgICAgICAgICAvKiBBbGxvY2F0ZWQg c2l6ZSBvZiB0aGUgY2hpbGRyZW4gYXJyYXkuICovCisgIHVuc2lnbmVkIG51 bV9wYXJlbnRzOyAgICAgICAgICAgICAvKiAjIG9mIGVudHJpZXMgaW4gdGhl IHBhcmVudHMgYXJyYXkuICAgICovCisgIHVuc2lnbmVkIG51bV9jaGlsZHJl bjsgICAgICAgICAgICAvKiAjIG9mIGVudHJpZXMgaW4gdGhlIGNoaWxkcmVu IGFycmF5LiAgICovCisgIHVuc2lnbmVkIG51bV9wcm9jZXNzZWRfY2hpbGRy ZW47ICAvKiAjIG9mIGNoaWxkcmVuIGZvciB3aG9tIHdlIGhhdmUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkIHRo ZSBjbGFzcyBoaWVyYXJjaHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRyYW5zaXRpdmUgY2xvc3VyZS4gICAgICAgICAgICAg ICAgICAgKi8KKyAgc3RydWN0IHZ0dl9ncmFwaF9ub2RlICoqcGFyZW50czsg IC8qIEFycmF5IG9mIHBhcmVudHMgaW4gdGhlIGdyYXBoLiAgICAgICAgKi8K KyAgc3RydWN0IHZ0dl9ncmFwaF9ub2RlICoqY2hpbGRyZW47IC8qIEFycmF5 IG9mIGNoaWxkcmVuIGluIHRoZSBncmFwaC4gICAgICAgKi8KKyAgc2JpdG1h cCBkZXNjZW5kYW50czsgICAgICAgICAgICAgIC8qIEJpdG1hcCByZXByZXNl bnRpbmcgYWxsIHRoaXMgbm9kZSdzCisJCQkJICAgICAgIGRlc2NlbmRhbnRz IGluIHRoZSBncmFwaC4gICAgICAgICAgICAgKi8KK307CisKKy8qIFRoaXMg aXMgdGhlIG5vZGUgdXNlZCBmb3Igb3VyIGhhc2h0YWJsZSBvZiB2dGFibGUg bWFwIHZhcmlhYmxlCisgICBpbmZvcm1hdGlvbi4gIFdoZW4gd2UgY3JlYXRl IGEgdnRhYmxlIG1hcCB2YXJpYWJsZSAodmFyIGRlY2wpIHdlCisgICBwdXQg aXQgaW50byBvbmUgb2YgdGhlc2Ugbm9kZXM7IGNyZWF0ZSBhIGNvcnJlc3Bv bmRpbmcKKyAgIHZ0dl9ncmFwaF9ub2RlIGZvciBvdXIgY2xhc3MgaGllcmFy Y2h5IGluZm8gYW5kIHN0b3JlIHRoYXQgaW4gdGhpcworICAgbm9kZTsgZ2Vu ZXJhdGUgYSB1bmlxdWUgKG1vbm90b25pY2FsbHkgYXNjZW5kaW5nKSBpZCBm b3IgYm90aCB0aGUKKyAgIHZ0YmxfbWFwX25vZGUgYW5kIHRoZSB2dHZfZ3Jh cGhfbm9kZTsgYW5kIGluc2VydCB0aGUgbm9kZSBpbnRvCisgICBUSFJFRSBk YXRhIHN0cnVjdHVyZXMgKHRvIG1ha2UgaXQgZWFzeSB0byBmaW5kIGluIHNl dmVyYWwgZGlmZmVyZW50CisgICB3YXlzKTogMSkuIEEgaGFzaCB0YWJsZSAo InZ0YmxfbWFwX2hhc2giIGluIHRyZWUtdnRhYmxlLXZlcmlmeS5jKS4KKyAg IFRoaXMgZ2l2ZXMgdXMgYW4gZWFzeSB3YXkgdG8gY2hlY2sgdG8gc2VlIGlm IHdlIGFscmVhZHkgaGF2ZSBhIG5vZGUKKyAgIGZvciB0aGUgdnRhYmxlIG1h cCB2YXJpYWJsZSBvciBub3QuICAyKS4gIEEgbGlua2VkIGxpc3Qgb2YgYWxs CisgICB2dGJsX21hcF9ub2RlcyAoInZ0YmxfbWFwX25vZGVzIikgZm9yIGVh c3kgaXRlcmF0aW9uIHRocm91Z2ggYWxsIG9mCisgICB0aGVtOyBhbmQgMyku IEFuIGFycmF5IG9mIHZ0YmxfbWFwX25vZGVzLCB3aGVyZSB0aGUgYXJyYXkg aW5kZXgKKyAgIGNvcnJlc3BvbmRzIHRvIHRoZSB1bmlxdWUgaWQgb2YgdGhl IHZ0YmxfbWFwX25vZGUsIHdoaWNoIGdpdmVzIHVzCisgICBhbiBlYXN5IHdh eSB0byB1c2UgYml0bWFwcyB0byByZXByZXNlbnQgYW5kIGZpbmQgdGhlIHZ0 YWJsZSBtYXAKKyAgIG5vZGVzLiAgKi8KKworc3RydWN0IHZ0YmxfbWFwX25v ZGUgeworICB0cmVlIHZ0YmxfbWFwX2RlY2w7ICAgICAgICAgICAgICAgICAv KiBUaGUgdmFyIGRlY2wgZm9yIHRoZSB2dGFibGUgbWFwCisJCQkJCSB2YXJp YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0cmVlIGNs YXNzX25hbWU7ICAgICAgICAgICAgICAgICAgICAvKiBUaGUgREVDTF9BU1NF TUJMRVJfTkFNRSBvZiB0aGUKKwkJCQkJIGNsYXNzLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCB2dHZfZ3JhcGhfbm9kZSAq Y2xhc3NfaW5mbzsgIC8qIE91ciBjbGFzcyBoaWVyYXJjaHkgaW5mbyBmb3Ig dGhlCisJCQkJCSBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICB1bnNpZ25lZCB1aWQ7ICAgICAgICAgICAgICAgICAgICAgICAv KiBUaGUgdW5pcXVlIGlkIGZvciB0aGUgdnRhYmxlIG1hcAorCQkJCQkgdmFy aWFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RydWN0 IHZ0YmxfbWFwX25vZGUgKm5leHQsICpwcmV2OyAgLyogUG9pbnRlcnMgZm9y IHRoZSBsaW5rZWQgbGlzdAorCQkJCQkgc3RydWN0dXJlLiAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KKyAgaHRhYl90IHJlZ2lzdGVyZWQ7ICAgICAv KiBIYXNodGFibGUgb2YgdnRhYmxlIHBvaW50ZXJzIGZvciB3aGljaCB3ZSBo YXZlCisJCQkgICAgZ2VuZXJhdGVkIGEgX1ZMVFJlZ2lzdGVyUGFpciBjYWxs IHdpdGggdGhpcyB2dGFibGUKKwkJCSAgICBtYXAgdmFyaWFibGUuICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgYm9vbCBpc191 c2VkOyAgICAgICAgICAvKiBCb29sZWFuIGluZGljYXRpbmcgaWYgd2UgdXNl ZCB0aGlzIHZ0YWJsZSBtYXAKKwkJCSAgICB2YXJpYWJsZSBpbiBhIGNhbGwg dG8gX19WTFRWZXJpZnlWdGFibGVQb2ludGVyLiAgKi8KK307CisKKy8qIENv bnRyb2xzIGRlYnVnZ2luZyBmb3IgdnRhYmxlIHZlcmlmaWNhdGlvbi4gICov CisKK2V4dGVybiBib29sIHZ0dl9kZWJ1ZzsKKworLyogVGhlIGdsb2JhbCBs aW5rZWQgbGlzdCBvZiB2dGJsX21hcF9ub2Rlcy4gICovCisKK2V4dGVybiBz dHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRibF9tYXBfbm9kZXM7CisKKy8qIFRo ZSBnbG9iYWwgdmVjdG9yIG9mIHZ0YmxfbWFwX25vZGVzLiAgKi8KKworZXh0 ZXJuIHZlYzxzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqPiB2dGJsX21hcF9ub2Rl c192ZWM7CisKK2V4dGVybiBzdHJ1Y3QgdnRibF9tYXBfbm9kZSAqdnRibF9t YXBfZ2V0X25vZGUgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHN0cnVjdCB2dGJs X21hcF9ub2RlICpmaW5kX29yX2NyZWF0ZV92dGJsX21hcF9ub2RlICh0cmVl KTsKK2V4dGVybiB2b2lkIHZ0YmxfbWFwX25vZGVfY2xhc3NfaW5zZXJ0IChz dHJ1Y3QgdnRibF9tYXBfbm9kZSAqLCB1bnNpZ25lZCk7CitleHRlcm4gYm9v bCB2dGJsX21hcF9ub2RlX3JlZ2lzdHJhdGlvbl9maW5kIChzdHJ1Y3QgdnRi bF9tYXBfbm9kZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHJlZSwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQg dnRibF9tYXBfbm9kZV9yZWdpc3RyYXRpb25faW5zZXJ0IChzdHJ1Y3QgdnRi bF9tYXBfbm9kZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmVlLCB1bnNpZ25lZCk7CitleHRlcm4gdm9p ZCByZXNldF90eXBlX3F1YWxpZmllcnMgKHVuc2lnbmVkIGludCwgdHJlZSk7 CisKKyNlbmRpZiAvKiBUUkVFX1ZUQUJMRV9WRVJJRllfSCAqLwpJbmRleDog Z2NjL2NvbW1vbi5vcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L2NvbW1vbi5vcHQJKHJldmlzaW9uIDE5NTMxMykKKysrIGdjYy9jb21tb24u b3B0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjY1LDYgKzIyNjUsMjIgQEAgRW51 bShzeW1ib2xfdmlzaWJpbGl0eSkgU3RyaW5nKGhpZGRlbikgVgogRW51bVZh bHVlCiBFbnVtKHN5bWJvbF92aXNpYmlsaXR5KSBTdHJpbmcocHJvdGVjdGVk KSBWYWx1ZShWSVNJQklMSVRZX1BST1RFQ1RFRCkKIAorZnZ0YWJsZS12ZXJp Znk9CitDb21tb24gSm9pbmVkIFJlamVjdE5lZ2F0aXZlIEVudW0odnR2X3By aW9yaXR5KSBWYXIoZmxhZ192dGFibGVfdmVyaWZ5KSBJbml0KFZUVl9OT19Q UklPUklUWSkKK1ZhbGlkYXRlIHZ0YWJsZSBwb2ludGVycyBiZWZvcmUgdXNp bmcgdGhlbS4KKworRW51bQorTmFtZSh2dHZfcHJpb3JpdHkpIFR5cGUoZW51 bSB2dHZfcHJpb3JpdHkpIFVua25vd25FcnJvcih1bmtub3duIHZ0YWJsZSB2 ZXJpZnkgaW5pdGlhbGl6YXRpb24gcHJpb3JpdHkgJXFzKQorCitFbnVtVmFs dWUKK0VudW0odnR2X3ByaW9yaXR5KSBTdHJpbmcobm9uZSkgVmFsdWUoVlRW X05PX1BSSU9SSVRZKQorCitFbnVtVmFsdWUKK0VudW0odnR2X3ByaW9yaXR5 KSBTdHJpbmcoc3RkKSBWYWx1ZShWVFZfU1RBTkRBUkRfUFJJT1JJVFkpCisK K0VudW1WYWx1ZQorRW51bSh2dHZfcHJpb3JpdHkpIFN0cmluZyhwcmVpbml0 KSBWYWx1ZShWVFZfUFJFSU5JVF9QUklPUklUWSkKKwogZnZwdAogQ29tbW9u IFJlcG9ydCBWYXIoZmxhZ192YWx1ZV9wcm9maWxlX3RyYW5zZm9ybWF0aW9u cykgT3B0aW1pemF0aW9uCiBVc2UgZXhwcmVzc2lvbiB2YWx1ZSBwcm9maWxl cyBpbiBvcHRpbWl6YXRpb25zCkluZGV4OiBnY2MvdmFyYXNtLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3ZhcmFzbS5jCShyZXZpc2lvbiAx OTUzMTMpCisrKyBnY2MvdmFyYXNtLmMJKHdvcmtpbmcgY29weSkKQEAgLTIw MzEsNyArMjAzMSwyMSBAQCBhc3NlbWJsZV92YXJpYWJsZSAodHJlZSBkZWNs LCBpbnQgdG9wX2xlCiAgICAgYXNzZW1ibGVfbm9zd2l0Y2hfdmFyaWFibGUg KGRlY2wsIG5hbWUsIHNlY3QpOwogICBlbHNlCiAgICAgewotICAgICAgc3dp dGNoX3RvX3NlY3Rpb24gKHNlY3QpOworICAgICAgaWYgKHNlY3QtPm5hbWVk Lm5hbWUKKwkgICYmIChzdHJjbXAgKHNlY3QtPm5hbWVkLm5hbWUsICIudnRh YmxlX21hcF92YXJzIikgPT0gMCkpCisJeworI2lmIGRlZmluZWQgKE9CSkVD VF9GT1JNQVRfRUxGKQorICAgICAgICAgIHRhcmdldG0uYXNtX291dC5uYW1l ZF9zZWN0aW9uIChzZWN0LT5uYW1lZC5uYW1lLAorCQkJCQkgc2VjdC0+bmFt ZWQuY29tbW9uLmZsYWdzCisJCQkJICAgICAgICAgfCBTRUNUSU9OX0xJTktP TkNFLAorCQkJICAgIAkgICAgICAgICBERUNMX05BTUUgKGRlY2wpKTsKKyAg ICAgICAgICBpbl9zZWN0aW9uID0gc2VjdDsKKyNlbHNlCisgICAgICAgICAg c3dpdGNoX3RvX3NlY3Rpb24gKHNlY3QpOworI2VuZGlmCisgICAgICAgIH0K KyAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoX3RvX3NlY3Rpb24gKHNlY3Qp OwogICAgICAgaWYgKERFQ0xfQUxJR04gKGRlY2wpID4gQklUU19QRVJfVU5J VCkKIAlBU01fT1VUUFVUX0FMSUdOIChhc21fb3V0X2ZpbGUsIGZsb29yX2xv ZzIgKERFQ0xfQUxJR05fVU5JVCAoZGVjbCkpKTsKICAgICAgIGFzc2VtYmxl X3ZhcmlhYmxlX2NvbnRlbnRzIChkZWNsLCBuYW1lLCBkb250X291dHB1dF9k YXRhKTsKQEAgLTIwNDQsNiArMjA1OCwyMyBAQCBhc3NlbWJsZV92YXJpYWJs ZSAodHJlZSBkZWNsLCBpbnQgdG9wX2xlCiAgICAgfQogfQogCisKKy8qIEdp dmVuIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gKEZOX0RFQ0wpLCB0aGlzIGZ1 bmN0aW9uIGFzc2VtYmxlcyB0aGUKKyAgIGZ1bmN0aW9uIGludG8gdGhlIC5w cmVpbml0X2FycmF5IHNlY3Rpb24uICAqLworCit2b2lkCithc3NlbWJsZV92 dHZfcHJlaW5pdF9pbml0aWFsaXplciAodHJlZSBmbl9kZWNsKQoreworICBz ZWN0aW9uICpzZWN0OworICB1bnNpZ25lZCBmbGFncyA9IFNFQ1RJT05fV1JJ VEU7CisgIHJ0eCBzeW1ib2wgPSBYRVhQIChERUNMX1JUTCAoZm5fZGVjbCks IDApOworCisgIGZsYWdzIHw9IFNFQ1RJT05fTk9UWVBFOworICBzZWN0ID0g Z2V0X3NlY3Rpb24gKCIucHJlaW5pdF9hcnJheSIsIGZsYWdzLCBmbl9kZWNs KTsKKyAgc3dpdGNoX3RvX3NlY3Rpb24gKHNlY3QpOworICBhc3NlbWJsZV9h ZGRyX3RvX3NlY3Rpb24gKHN5bWJvbCwgc2VjdCk7Cit9CisKIC8qIFJldHVy biAxIGlmIHR5cGUgVFlQRSBjb250YWlucyBhbnkgcG9pbnRlcnMuICAqLwog CiBzdGF0aWMgaW50CkBAIC01OTkxLDYgKzYwMjIsOSBAQCBkZWZhdWx0X3Nl Y3Rpb25fdHlwZV9mbGFncyAodHJlZSBkZWNsLCBjCiAgIGlmIChkZWNsICYm IERFQ0xfT05FX09OTFkgKGRlY2wpKQogICAgIGZsYWdzIHw9IFNFQ1RJT05f TElOS09OQ0U7CiAKKyAgaWYgKHN0cmNtcCAobmFtZSwgIi52dGFibGVfbWFw X3ZhcnMiKSA9PSAwKQorICAgICAgZmxhZ3MgfD0gU0VDVElPTl9MSU5LT05D RTsKKwogICBpZiAoZGVjbCAmJiBUUkVFX0NPREUgKGRlY2wpID09IFZBUl9E RUNMICYmIERFQ0xfVEhSRUFEX0xPQ0FMX1AgKGRlY2wpKQogICAgIGZsYWdz IHw9IFNFQ1RJT05fVExTIHwgU0VDVElPTl9XUklURTsKIApJbmRleDogZ2Nj L291dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9vdXRw dXQuaAkocmV2aXNpb24gMTk1MzEzKQorKysgZ2NjL291dHB1dC5oCSh3b3Jr aW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3LDEwIEBAIGV4dGVybiB2b2lkIGFz c2VtYmxlX2VuZF9mdW5jdGlvbiAodHJlZSwKICAgIGluaXRpYWwgdmFsdWUg KHRoYXQgd2lsbCBiZSBkb25lIGJ5IHRoZSBjYWxsZXIpLiAgKi8KIGV4dGVy biB2b2lkIGFzc2VtYmxlX3ZhcmlhYmxlICh0cmVlLCBpbnQsIGludCwgaW50 KTsKIAorLyogUHV0IHRoZSB2dGFibGUgdmVyaWZpY2F0aW9uIGNvbnN0cnVj dG9yIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCisgICBpbnRvIHRoZSBwcmVp bml0IGFycmF5LiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3Z0dl9wcmVp bml0X2luaXRpYWxpemVyICh0cmVlKTsKKwogLyogQ29tcHV0ZSB0aGUgYWxp Z25tZW50IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSBERUNMLgogICAgRE9O VF9PVVRQVVRfREFUQSBpcyBmcm9tIGFzc2VtYmxlX3ZhcmlhYmxlLiAgKi8K IGV4dGVybiB2b2lkIGFsaWduX3ZhcmlhYmxlICh0cmVlIGRlY2wsIGJvb2wg ZG9udF9vdXRwdXRfZGF0YSk7CkluZGV4OiBnY2MvTWFrZWZpbGUuaW4KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL01ha2VmaWxlLmluCShyZXZp c2lvbiAxOTUzMTMpCisrKyBnY2MvTWFrZWZpbGUuaW4JKHdvcmtpbmcgY29w eSkKQEAgLTE0NDcsNiArMTQ0Nyw3IEBAIE9CSlMgPSBcCiAJdHJlZS12ZWN0 LWxvb3AtbWFuaXAubyBcCiAJdHJlZS12ZWN0LXNscC5vIFwKIAl0cmVlLXZl Y3Rvcml6ZXIubyBcCisJdHJlZS12dGFibGUtdmVyaWZ5Lm8gXAogCXRyZWUt dnJwLm8gXAogCXRyZWUubyBcCiAJdmFsdHJhY2subyBcCkBAIC0yNjE4LDYg KzI2MTksMTEgQEAgdHJlZS12ZWN0b3JpemVyLm86IHRyZWUtdmVjdG9yaXpl ci5jICQoQwogICAgZHVtcGZpbGUuaCAkKFRNX0gpICQoR0dDX0gpICQoVFJF RV9IKSAkKFRSRUVfRkxPV19IKSBcCiAgICAkKENGR0xPT1BfSCkgJChUUkVF X1BBU1NfSCkgJChUUkVFX1ZFQ1RPUklaRVJfSCkgXAogICAgJChUUkVFX1BS RVRUWV9QUklOVF9IKQordHJlZS12dGFibGUtdmVyaWZ5Lm86IHRyZWUtdnRh YmxlLXZlcmlmeS5jIHRyZWUtdnRhYmxlLXZlcmlmeS5oICQoQ09ORklHX0gp IFwKKyAgICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkgJChUUkVF X0gpIGNwL2NwLXRyZWUuaCAkKFRNX1BfSCkgXAorICAgJChCQVNJQ19CTE9D S19IKSBvdXRwdXQuaCAkKFRSRUVfRkxPV19IKSAkKFRSRUVfRFVNUF9IKSAk KFRSRUVfUEFTU19IKSBcCisgICAkKFRJTUVWQVJfSCkgJChDRkdMT09QX0gp ICQoRkxBR1NfSCkgICQoVFJFRV9JTkxJTkVfSCkgJChTQ0VWX0gpIFwKKyAg ICQoRElBR05PU1RJQ19DT1JFX0gpICQoR0lNUExFX1BSRVRUWV9QUklOVF9I KSB0b3BsZXYuaCBsYW5naG9va3MuaAogdHJlZS1sb29wLWRpc3RyaWJ1dGlv bi5vOiB0cmVlLWxvb3AtZGlzdHJpYnV0aW9uLmMgJChDT05GSUdfSCkgJChT WVNURU1fSCkgXAogICAgY29yZXR5cGVzLmggJChUUkVFX0ZMT1dfSCkgJChD RkdMT09QX0gpICQoVFJFRV9EQVRBX1JFRl9IKSAkKFRSRUVfUEFTU19IKQog dHJlZS1wYXJsb29wcy5vOiB0cmVlLXBhcmxvb3BzLmMgJChDT05GSUdfSCkg JChTWVNURU1fSCkgY29yZXR5cGVzLmggXApAQCAtMzc1Nyw2ICszNzYzLDcg QEAgR1RGSUxFUyA9ICQoQ1BQX0lEX0RBVEFfSCkgJChzcmNkaXIpL2lucAog ICAkKHNyY2RpcikvbHRvLXN0cmVhbWVyLmggXAogICAkKHNyY2RpcikvdGFy Z2V0LWdsb2JhbHMuaCBcCiAgICQoc3JjZGlyKS9pcGEtaW5saW5lLmggXAor ICAkKHNyY2RpcikvdHJlZS12dGFibGUtdmVyaWZ5LmMgXAogICAkKHNyY2Rp cikvYXNhbi5jIFwKICAgJChzcmNkaXIpL3RzYW4uYyBcCiAgIEBhbGxfZ3Rm aWxlc0AKSW5kZXg6IGdjYy9wYXNzZXMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvcGFzc2VzLmMJKHJldmlzaW9uIDE5NTMxMykKKysrIGdj Yy9wYXNzZXMuYwkod29ya2luZyBjb3B5KQpAQCAtMTU1NCw2ICsxNTU0LDcg QEAgaW5pdF9vcHRpbWl6YXRpb25fcGFzc2VzICh2b2lkKQogICAgICAgTkVY VF9QQVNTIChwYXNzX3RtX21lbW9wdCk7CiAgICAgICBORVhUX1BBU1MgKHBh c3NfdG1fZWRnZXMpOwogICAgIH0KKyAgTkVYVF9QQVNTIChwYXNzX3Z0YWJs ZV92ZXJpZnkpOwogICBORVhUX1BBU1MgKHBhc3NfbG93ZXJfY29tcGxleF9P MCk7CiAgIE5FWFRfUEFTUyAocGFzc19hc2FuX08wKTsKICAgTkVYVF9QQVNT IChwYXNzX3RzYW5fTzApOwpJbmRleDogZ2NjL2NvbmZpZy9nbnUtdXNlci5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jb25maWcvZ251LXVz ZXIuaAkocmV2aXNpb24gMTk1MzEzKQorKysgZ2NjL2NvbmZpZy9nbnUtdXNl ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMgQEAgc2VlIHRo ZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQogI2lmIGRlZmlu ZWQgSEFWRV9MRF9QSUUKICNkZWZpbmUgR05VX1VTRVJfVEFSR0VUX1NUQVJU RklMRV9TUEVDIFwKICAgIiV7IXNoYXJlZDogJXtwZ3xwfHByb2ZpbGU6Z2Ny dDEubyVzO3BpZTpTY3J0MS5vJXM7OmNydDEubyVzfX0gXAotICAgY3J0aS5v JXMgJXtzdGF0aWM6Y3J0YmVnaW5ULm8lcztzaGFyZWR8cGllOmNydGJlZ2lu Uy5vJXM7OmNydGJlZ2luLm8lc30iCisgICBjcnRpLm8lcyAle3N0YXRpYzpj cnRiZWdpblQubyVzO3NoYXJlZHxwaWU6Y3J0YmVnaW5TLm8lczs6Y3J0YmVn aW4ubyVzfSBcCisgICAle2Z2dGFibGUtdmVyaWZ5Kjp2dHZfc3RhcnQubyVz fSIKICNlbHNlCiAjZGVmaW5lIEdOVV9VU0VSX1RBUkdFVF9TVEFSVEZJTEVf U1BFQyBcCiAgICIleyFzaGFyZWQ6ICV7cGd8cHxwcm9maWxlOmdjcnQxLm8l czs6Y3J0MS5vJXN9fSBcCi0gICBjcnRpLm8lcyAle3N0YXRpYzpjcnRiZWdp blQubyVzO3NoYXJlZHxwaWU6Y3J0YmVnaW5TLm8lczs6Y3J0YmVnaW4ubyVz fSIKKyAgIGNydGkubyVzICV7c3RhdGljOmNydGJlZ2luVC5vJXM7c2hhcmVk fHBpZTpjcnRiZWdpblMubyVzOzpjcnRiZWdpbi5vJXN9IFwKKyAgICV7ZnZ0 YWJsZS12ZXJpZnkqOnZ0dl9zdGFydC5vJXN9IgogI2VuZGlmCiAjdW5kZWYg IFNUQVJURklMRV9TUEVDCiAjZGVmaW5lIFNUQVJURklMRV9TUEVDIEdOVV9V U0VSX1RBUkdFVF9TVEFSVEZJTEVfU1BFQwpAQCAtNTksNyArNjEsOCBAQCBz ZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCiAgICBH TlUgdXNlcnNwYWNlICJmaW5hbGl6ZXIiIGZpbGUsIGBjcnRuLm8nLiAgKi8K IAogI2RlZmluZSBHTlVfVVNFUl9UQVJHRVRfRU5ERklMRV9TUEVDIFwKLSAg IiV7c2hhcmVkfHBpZTpjcnRlbmRTLm8lczs6Y3J0ZW5kLm8lc30gY3J0bi5v JXMiCisgICIle2Z2dGFibGUtdmVyaWZ5Kjp2dHZfZW5kLm8lc30gXAorICAg JXtzaGFyZWR8cGllOmNydGVuZFMubyVzOzpjcnRlbmQubyVzfSBjcnRuLm8l cyIKICN1bmRlZiAgRU5ERklMRV9TUEVDCiAjZGVmaW5lIEVOREZJTEVfU1BF QyBHTlVfVVNFUl9UQVJHRVRfRU5ERklMRV9TUEVDCiAK --bcaec53d5b2518e0ca04d3fc5256--