From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: More (de)compress? Date: Mon, 19 Aug 2013 16:17:46 +0400 Message-ID: <52120CEA.6060701@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090407060207000707020806" X-Trace: ger.gmane.org 1376914683 1493 80.91.229.3 (19 Aug 2013 12:18:03 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 19 Aug 2013 12:18:03 +0000 (UTC) To: Emacs development discussions Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Aug 19 14:18:07 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VBOPO-00061V-9I for ged-emacs-devel@m.gmane.org; Mon, 19 Aug 2013 14:18:06 +0200 Original-Received: from localhost ([::1]:42752 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VBOPN-0004PE-Jx for ged-emacs-devel@m.gmane.org; Mon, 19 Aug 2013 08:18:05 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57095) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VBOPF-0004Ov-0K for emacs-devel@gnu.org; Mon, 19 Aug 2013 08:18:02 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VBOP9-0005vV-TC for emacs-devel@gnu.org; Mon, 19 Aug 2013 08:17:56 -0400 Original-Received: from forward3l.mail.yandex.net ([84.201.143.136]:38780) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VBOP9-0005vA-8o for emacs-devel@gnu.org; Mon, 19 Aug 2013 08:17:51 -0400 Original-Received: from smtp2h.mail.yandex.net (smtp2h.mail.yandex.net [84.201.187.145]) by forward3l.mail.yandex.net (Yandex) with ESMTP id 49DD8150152F for ; Mon, 19 Aug 2013 16:17:48 +0400 (MSK) Original-Received: from smtp2h.mail.yandex.net (localhost [127.0.0.1]) by smtp2h.mail.yandex.net (Yandex) with ESMTP id 0B52A1701A7A for ; Mon, 19 Aug 2013 16:17:47 +0400 (MSK) Original-Received: from unknown (unknown [37.139.80.10]) by smtp2h.mail.yandex.net (nwsmtp/Yandex) with ESMTP id dQvSBgCJ34-HkFSZZTu; Mon, 19 Aug 2013 16:17:47 +0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1376914667; bh=Hy5pQKOchk668uiB8GtRS/dxho06+AqqbamutiklOr0=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type; b=Cgu7GUWhMP26vxc6vvGCumxio16uEMCpG+yyIo7kdJKuInaKdfAsaICpvoPWbu2jm 6PpGTcg7ff+360sGh9MjuFe9yo3hLrayj+vZLLzWRklUg+/FplkENSK2iqujupsHIt lzPlfojjDJ8m1o8gBYIlXCmtFshJU8k7AuZrNt3M= Authentication-Results: smtp2h.mail.yandex.net; dkim=pass header.i=@yandex.ru User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 84.201.143.136 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:162876 Archived-At: This is a multi-part message in MIME format. --------------090407060207000707020806 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Inspired by current decompress.c, I would like to propose the symmetric compress function(s) as well as support for more compression methods. This is what I have now, and basically it works; still needs MS-Windows support, better error detection and a few other things. Dmitry --------------090407060207000707020806 Content-Type: text/plain; charset=UTF-8; name="compress.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="compress.patch" PT09IG1vZGlmaWVkIGZpbGUgJ2NvbmZpZ3VyZS5hYycKLS0tIGNvbmZpZ3VyZS5hYwkyMDEz LTA4LTE1IDE2OjM3OjE1ICswMDAwCisrKyBjb25maWd1cmUuYWMJMjAxMy0wOC0xOSAwNDo0 OTo1MyArMDAwMApAQCAtMjExLDcgKzIxMSw5IEBACiBPUFRJT05fREVGQVVMVF9PTihbZ3Nl dHRpbmdzXSxbZG9uJ3QgY29tcGlsZSB3aXRoIEdTZXR0aW5ncyBzdXBwb3J0XSkKIE9QVElP Tl9ERUZBVUxUX09OKFtzZWxpbnV4XSxbZG9uJ3QgY29tcGlsZSB3aXRoIFNFTGludXggc3Vw cG9ydF0pCiBPUFRJT05fREVGQVVMVF9PTihbZ251dGxzXSxbZG9uJ3QgdXNlIC1sZ251dGxz IGZvciBTU0wvVExTIHN1cHBvcnRdKQotT1BUSU9OX0RFRkFVTFRfT04oW3psaWJdLFtkb24n dCBjb21waWxlIHdpdGggemxpYiBkZWNvbXByZXNzaW9uIHN1cHBvcnRdKQorT1BUSU9OX0RF RkFVTFRfT04oW3psaWJdLFtkb24ndCBjb21waWxlIHdpdGggemxpYiBjb21wcmVzc2lvbiBz dXBwb3J0XSkKK09QVElPTl9ERUZBVUxUX09OKFtiemxpYl0sW2Rvbid0IGNvbXBpbGUgd2l0 aCBiejIgY29tcHJlc3Npb24gc3VwcG9ydF0pCitPUFRJT05fREVGQVVMVF9PTihbbHptYV0s W2Rvbid0IGNvbXBpbGUgd2l0aCBsem1hIGNvbXByZXNzaW9uIHN1cHBvcnRdKQogCiBBQ19B UkdfV0lUSChbZmlsZS1ub3RpZmljYXRpb25dLFtBU19IRUxQX1NUUklORyhbLS13aXRoLWZp bGUtbm90aWZpY2F0aW9uPUxJQl0sCiAgW3VzZSBhIGZpbGUgbm90aWZpY2F0aW9uIGxpYnJh cnkgKExJQiBvbmUgb2Y6IHllcywgZ2ZpbGUsIGlub3RpZnksIHczMiwgbm8pXSldLApAQCAt Mjk2Miw2ICsyOTY0LDQzIEBACiBmaQogQUNfU1VCU1QoTElCWikKIAorSEFWRV9CWkxJQj1u bworTElCQloyPQoraWYgdGVzdCAiJHt3aXRoX2J6bGlifSIgIT0gIm5vIjsgdGhlbgorICBP TElCUz0kTElCUworICBBQ19TRUFSQ0hfTElCUyhbQloyX2J6Q29tcHJlc3NdLCBbYnoyXSwg W0hBVkVfQlpMSUI9eWVzXSkKKyAgTElCUz0kT0xJQlMKKyAgY2FzZSAkYWNfY3Zfc2VhcmNo X0JaMl9iekNvbXByZXNzIGluCisgICAgLSopIExJQkJaMj0kYWNfY3Zfc2VhcmNoX0JaMl9i ekNvbXByZXNzIDs7CisgIGVzYWMKK2ZpCitpZiB0ZXN0ICIke0hBVkVfQlpMSUJ9IiA9ICJ5 ZXMiOyB0aGVuCisgIEFDX0RFRklORShbSEFWRV9CWkxJQl0sIDEsIFtEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgYnpsaWIgbGlicmFyeSAoLWxiejIpLl0pCisgICMjIyBtaW5ndzMy IGRvZXNuJ3QgdXNlIC1sYnoyLCBzaW5jZSBpdCBsb2FkcyB0aGUgbGlicmFyeSBkeW5hbWlj YWxseS4KKyAgaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3MzIiOyB0aGVuCisgICAgIExJ QkJaMj0KKyAgZmkKK2ZpCitBQ19TVUJTVChMSUJCWjIpCisKK0hBVkVfTFpNQT1ubworTElC TFpNQT0KK2lmIHRlc3QgIiR7d2l0aF9sem1hfSIgIT0gIm5vIjsgdGhlbgorICBPTElCUz0k TElCUworICBBQ19TRUFSQ0hfTElCUyhbbHptYV9sem1hX3ByZXNldF0sIFtsem1hXSwgW0hB VkVfTFpNQT15ZXNdKQorICBMSUJTPSRPTElCUworICBjYXNlICRhY19jdl9zZWFyY2hfbHpt YV9sem1hX3ByZXNldCBpbgorICAgIC0qKSBMSUJMWk1BPSRhY19jdl9zZWFyY2hfbHptYV9s em1hX3ByZXNldCA7OworICBlc2FjCitmaQoraWYgdGVzdCAiJHtIQVZFX0xaTUF9IiA9ICJ5 ZXMiOyB0aGVuCisgIEFDX0RFRklORShbSEFWRV9MWk1BXSwgMSwgW0RlZmluZSB0byAxIGlm IHlvdSBoYXZlIHRoZSBsem1hIGxpYnJhcnkgKC1sbHptYSkuXSkKKyAgIyMjIG1pbmd3MzIg ZG9lc24ndCB1c2UgLWxsem1hLCBzaW5jZSBpdCBsb2FkcyB0aGUgbGlicmFyeSBkeW5hbWlj YWxseS4KKyAgaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3MzIiOyB0aGVuCisgICAgIExJ QkxaTUE9CisgIGZpCitmaQorQUNfU1VCU1QoTElCTFpNQSkKIAogIyMjIFVzZSAtbHRpZmYg aWYgYXZhaWxhYmxlLCB1bmxlc3MgYC0td2l0aC10aWZmPW5vJy4KICMjIyBtaW5ndzMyIGRv ZXNuJ3QgdXNlIC1sdGlmZiwgc2luY2UgaXQgbG9hZHMgdGhlIGxpYnJhcnkgZHluYW1pY2Fs bHkuCkBAIC00ODE4LDYgKzQ4NTcsOCBAQAogZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbG90 Zj8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9MSUJPVEZ9Igog ZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbHhmdD8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICR7SEFWRV9YRlR9IgogZWNobyAiICBEb2VzIEVtYWNzIGRpcmVjdGx5IHVz ZSB6bGliPyAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9aTElCfSIKK2VjaG8g IiAgRG9lcyBFbWFjcyBkaXJlY3RseSB1c2UgYnpsaWI/ICAgICAgICAgICAgICAgICAgICAg ICAgICAke0hBVkVfQlpMSUJ9IgorZWNobyAiICBEb2VzIEVtYWNzIGRpcmVjdGx5IHVzZSBs em1hPyAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9MWk1BfSIKIAogZWNobyAi ICBEb2VzIEVtYWNzIHVzZSB0b29sa2l0IHNjcm9sbCBiYXJzPyAgICAgICAgICAgICAgICAg ICAgICR7VVNFX1RPT0xLSVRfU0NST0xMX0JBUlN9IgogZWNobwoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9NYWtlZmlsZS5pbicKLS0tIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTExIDE5 OjQzOjM2ICswMDAwCisrKyBzcmMvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAwNDo0NDoyOCAr MDAwMApAQCAtMjQ0LDYgKzI0NCw4IEBACiBMSUJYTUwyX0NGTEFHUyA9IEBMSUJYTUwyX0NG TEFHU0AKIAogTElCWiA9IEBMSUJaQAorTElCQloyID0gQExJQkJaMkAKK0xJQkxaTUEgPSBA TElCTFpNQUAKIAogWFJBTkRSX0xJQlMgPSBAWFJBTkRSX0xJQlNACiBYUkFORFJfQ0ZMQUdT ID0gQFhSQU5EUl9DRkxBR1NACkBAIC0zNzYsNyArMzc4LDcgQEAKIAlwcm9jZXNzLm8gZ251 dGxzLm8gY2FsbHByb2MubyBcCiAJcmVnaW9uLWNhY2hlLm8gc291bmQubyBhdGltZXIubyBc CiAJZG9wcm50Lm8gaW50ZXJ2YWxzLm8gdGV4dHByb3AubyBjb21wb3NpdGUubyB4bWwubyAk KE5PVElGWV9PQkopIFwKLQlwcm9maWxlci5vIGRlY29tcHJlc3MubyBcCisJcHJvZmlsZXIu byBkZWNvbXByZXNzLm8gY29tcHJlc3MubyBcCiAJJChNU0RPU19PQkopICQoTVNET1NfWF9P QkopICQoTlNfT0JKKSAkKENZR1dJTl9PQkopICQoRk9OVF9PQkopIFwKIAkkKFczMl9PQkop ICQoV0lORE9XX1NZU1RFTV9PQkopICQoWEdTRUxPQkopCiBvYmogPSAkKGJhc2Vfb2JqKSAk KE5TX09CSkNfT0JKKQpAQCAtNDMxLDcgKzQzMyw3IEBACiAgICAkKExJQlNfVEVSTUNBUCkg JChHRVRMT0FEQVZHX0xJQlMpICQoU0VUVElOR1NfTElCUykgJChMSUJTRUxJTlVYX0xJQlMp IFwKICAgICQoRlJFRVRZUEVfTElCUykgJChGT05UQ09ORklHX0xJQlMpICQoTElCT1RGX0xJ QlMpICQoTTE3Tl9GTFRfTElCUykgXAogICAgJChMSUJHTlVUTFNfTElCUykgJChMSUJfUFRI UkVBRCkgJChMSUJfUFRIUkVBRF9TSUdNQVNLKSBcCi0gICAkKEdGSUxFTk9USUZZX0xJQlMp ICQoTElCX01BVEgpICQoTElCWikKKyAgICQoR0ZJTEVOT1RJRllfTElCUykgJChMSUJfTUFU SCkgJChMSUJaKSAkKExJQkJaMikgJChMSUJMWk1BKQogCiBhbGw6IGVtYWNzJChFWEVFWFQp ICQoT1RIRVJfRklMRVMpCiAuUEhPTlk6IGFsbAoKPT09IGFkZGVkIGZpbGUgJ3NyYy9jb21w cmVzcy5jJwotLS0gc3JjL2NvbXByZXNzLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor Kysgc3JjL2NvbXByZXNzLmMJMjAxMy0wOC0xOSAxMjowNzowNCArMDAwMApAQCAtMCwwICsx LDYxOSBAQAorLyogSW50ZXJmYWNlIHRvIGNvbXByZXNzaW9uIGxpYnJhcmllcy4KKyAgIENv cHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhp cyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgorCitHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCitHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUg RW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJsaXNwLmgiCisjaW5jbHVk ZSAiY2hhcmFjdGVyLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisKKy8qIE1heGltdW0gbnVt YmVyIG9mIGJ5dGVzIHRoYXQgb25lIGNhbGwgdG8gY29tcHJlc3Npb24gb3IgZGVjb21wcmVz c2lvbgorICAgcm91dGluZSBzaG91bGQgd3JpdGUgaW50byBhbiBvdXRwdXQgYnVmZmVyLiAg TWFraW5nIGl0IHRvbyBsYXJnZSBtYXkKKyAgIGRlbGF5IEMtZzsgb24gdGhlIG90aGVyIHNp ZGUsIGl0IGxvb2tzIHVubGlrZWx5IGJlY2F1c2Ugd2Ugd2FudCB0bworICAgcmVhZCBhcyBt dWNoIGFzIHBvc3NpYmxlIHNpbmNlIG1vc3QgY29tcHJlc3Npb24gbWV0aG9kcyB3b3JrcyBi ZXR0ZXIKKyAgIGlmIHRoZXkgY2FuIGxvb2sgdGhyb3VnaCBsYXJnZXIgaW5wdXQgc2VxdWVu Y2VzLiAgKi8KKworI2RlZmluZSBPVVRQVVRfQkxPQ0tfU0laRSAoMTYgKiAxMDI0KQorCitz dGF0aWMgTGlzcF9PYmplY3QgUXpsaWIsIFFiemxpYiwgUWx6bWE7CisKKy8qCisgKiBaTElC IHN1cHBvcnQKKyAqLworCisjaWZkZWYgSEFWRV9aTElCCisKKyNpbmNsdWRlIDx6bGliLmg+ CisKK3N0cnVjdCB6X3Vud2luZAoreworICB1bnNpZ25lZCBpbmZsYXRlIDogMTsKKyAgcHRy ZGlmZl90IG9sZHB0OworICBwdHJkaWZmX3Qgc3RhcnQ7CisgIHpfc3RyZWFtICp6OworfTsK Kworc3RhdGljIHZvaWQKK3psaWJfdW53aW5kICh2b2lkICphcmcpCit7CisgIHN0cnVjdCB6 X3Vud2luZCAqdSA9IGFyZzsKKworICAvKiBGaW5hbGl6ZSBzdHJlYW0gc3RhdGUuICAqLwor ICBpZiAodS0+aW5mbGF0ZSkKKyAgICBpbmZsYXRlRW5kICh1LT56KTsKKyAgZWxzZQorICAg IGRlZmxhdGVFbmQgKHUtPnopOworCisgIC8qIERlbGV0ZSBhbnkgcHJvZHVjZWQgZGF0YSBh bHJlYWR5IGluc2VydGVkLiAgKi8KKyAgaWYgKHUtPnN0YXJ0KQorICAgIGRlbF9yYW5nZSAo dS0+c3RhcnQsIFBUKTsKKworICAvKiBQdXQgcG9pbnQgd2hlcmUgaXQgd2FzLCBvciBpZiB0 aGUgYnVmZmVyIGhhcyBzaHJ1bmsgYmVjYXVzZQorICAgICB0aGUgcHJvZHVjZWQgZGF0YSBp cyBiaWdnZXIgdGhhbiB0aGUgb3JpZ2luYWwsIGF0IHBvaW50LW1heC4gICovCisgIFNFVF9Q VCAobWluICh1LT5vbGRwdCwgWlYpKTsKK30KKworLyogTm9uemVybyBpZiBjdXJyZW50IGJ1 ZmZlciBwcm9iYWJseSBoYXMgemxpYi1jb21wcmVzc2VkIGRhdGEgc3RhcnRlZAorICAgYXQg Ynl0ZSBwb3NpdGlvbiBCLiAgKi8KKworc3RhdGljIGJvb2wKK3psaWJfZGV0ZWN0IChwdHJk aWZmX3QgYiwgcHRyZGlmZl90IGUpCit7CisgIC8qIENoZWNrIGZvciAnXDAzN1wyMTMnIGhl YWRlci4KKyAgICAgRklYTUU6IGFkZCBtb3JlIHpsaWItc3VwcG9ydGVkIGZvcm1hdHMuICAq LworICByZXR1cm4gKChlIC0gYiA+IDIpCisJICAmJiAoRkVUQ0hfQllURSAoYikgPT0gMzEp CisJICAmJiAoRkVUQ0hfQllURSAoYiArIDEpID09IDEzOSkpOworfQorCitzdGF0aWMgTGlz cF9PYmplY3QKK3psaWJfY29tcHJlc3NfcmVnaW9uIChwdHJkaWZmX3QgYiwgcHRyZGlmZl90 IGUpCit7CisgIGludCBzdGF0dXM7CisgIHpfc3RyZWFtIHo7CisgIHN0cnVjdCB6X3Vud2lu ZCB1OworICBwdHJkaWZmX3QgYnl0ZXBvcyA9IGIsIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAo KTsKKworICBtZW1zZXQgKCZ6LCAwLCBzaXplb2Ygeik7CisKKyAgLyogVXNlIE1BWF9XQklU UyArIDE2IHRvIGZvcmNlIGd6aXAtY29tcGF0aWJsZSBoZWFkZXIuICAqLworICBpZiAoZGVm bGF0ZUluaXQyICgmeiwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBaX0RFRkxBVEVELCBNQVhf V0JJVFMgKyAxNiwKKwkJICAgIE1BWF9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSkg IT0gWl9PSykKKyAgICByZXR1cm4gUW5pbDsKKworICAvKiBTZXR1cCBjYWxsIHRvIHpsaWJf dW53aW5kIGluIGNhc2Ugb2YgZXJyb3IuICAqLworICB1LmluZmxhdGUgPSAwOworICB1LnN0 YXJ0ID0gZTsKKyAgdS56ID0gJno7CisgIHUub2xkcHQgPSBQVDsKKyAgcmVjb3JkX3Vud2lu ZF9wcm90ZWN0X3B0ciAoemxpYl91bndpbmQsICZ1KTsKKworICAvKiBJbnNlcnQgdGhlIGNv bXByZXNzZWQgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBkYXRhLiAgKi8KKyAg bW92ZV9nYXBfYm90aCAoZSwgZSk7CisgIFNFVF9QVCAoZSk7CisKKyAgLyogQ29tcHJlc3Mg dW50aWwgd2UgaGF2ZSBhbiBlcnJvciBvciBpbnB1dCBlbmRzLiAgKi8KKyAgZG8KKyAgICB7 CisgICAgICBwdHJkaWZmX3QgYXZhaWxfaW4gPSBtaW4gKGUgLSBieXRlcG9zLCBVSU5UX01B WCk7CisgICAgICBwdHJkaWZmX3QgY29tcHJlc3NlZCwgYXZhaWxfb3V0ID0gT1VUUFVUX0JM T0NLX1NJWkU7CisKKyAgICAgIGlmIChHQVBfU0laRSA8IGF2YWlsX291dCkKKwltYWtlX2dh cCAoYXZhaWxfb3V0IC0gR0FQX1NJWkUpOworICAgICAgei5uZXh0X2luID0gQllURV9QT1Nf QUREUiAoYnl0ZXBvcyk7CisgICAgICB6LmF2YWlsX2luID0gYXZhaWxfaW47CisgICAgICB6 Lm5leHRfb3V0ID0gR1BUX0FERFI7CisgICAgICB6LmF2YWlsX291dCA9IGF2YWlsX291dDsK KyAgICAgIHN0YXR1cyA9IGRlZmxhdGUgKCZ6LCBieXRlcG9zICsgYXZhaWxfaW4gPT0gZSA/ IFpfRklOSVNIIDogWl9OT19GTFVTSCk7CisgICAgICBieXRlcG9zICs9IGF2YWlsX2luIC0g ei5hdmFpbF9pbjsKKyAgICAgIGNvbXByZXNzZWQgPSBhdmFpbF9vdXQgLSB6LmF2YWlsX291 dDsKKyAgICAgIGluc2VydF9mcm9tX2dhcCAoY29tcHJlc3NlZCwgY29tcHJlc3NlZCwgMCk7 CisgICAgICBRVUlUOworICAgIH0KKyAgd2hpbGUgKHN0YXR1cyA9PSBaX09LKTsKKworICBp ZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCkKKyAgICB7CisgICAgICAvKiBEZWxldGUgdGhl IG9yaWdpbmFsIGRhdGEuICAqLworICAgICAgdS5zdGFydCA9IDA7CisgICAgICBkZWxfcmFu Z2UgKGIsIGUpOworICAgIH0KKyAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIHN0YXR1cyA9 PSBaX1NUUkVBTV9FTkQgPyBRdCA6IFFuaWwpOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QK K3psaWJfZGVjb21wcmVzc19yZWdpb24gKHB0cmRpZmZfdCBiLCBwdHJkaWZmX3QgZSkKK3sK KyAgaW50IHN0YXR1czsKKyAgel9zdHJlYW0gejsKKyAgc3RydWN0IHpfdW53aW5kIHU7Cisg IHB0cmRpZmZfdCBieXRlcG9zID0gYiwgY291bnQgPSBTUEVDUERMX0lOREVYICgpOworCisg IGlmICghemxpYl9kZXRlY3QgKGIsIGUpKQorICAgIGVycm9yICgiTm90IGEgemxpYi1jb21w cmVzc2VkIGRhdGEiKTsKKworICBtZW1zZXQgKCZ6LCAwLCBzaXplb2Ygeik7CisKKyAgLyog VGhlIG1hZ2ljIG51bWJlciAzMiBhcHBhcmVudGx5IG1lYW5zICJhdXRvZGVjdCBib3RoCisg ICAgIHRoZSBnemlwIGFuZCB6bGliIGZvcm1hdHMiIGFjY29yZGluZyB0byB6bGliLmguICAq LworICBpZiAoaW5mbGF0ZUluaXQyICgmeiwgTUFYX1dCSVRTICsgMzIpICE9IFpfT0spCisg ICAgcmV0dXJuIFFuaWw7CisKKyAgLyogU2V0dXAgY2FsbCB0byB6bGliX3Vud2luZCBpbiBj YXNlIG9mIGVycm9yLiAgKi8KKyAgdS5pbmZsYXRlID0gMTsKKyAgdS5zdGFydCA9IGU7Cisg IHUueiA9ICZ6OworICB1Lm9sZHB0ID0gUFQ7CisgIHJlY29yZF91bndpbmRfcHJvdGVjdF9w dHIgKHpsaWJfdW53aW5kLCAmdSk7CisKKyAgLyogSW5zZXJ0IHRoZSBkZWNvbXByZXNzZWQg ZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuICAqLworICBtb3ZlX2dh cF9ib3RoIChlLCBlKTsKKyAgU0VUX1BUIChlKTsKKworICAvKiBEZWNvbXByZXNzIHVudGls IHdlIGhhdmUgYW4gZXJyb3Igb3IgaW5wdXQgZW5kcy4gICovCisgIGRvCisgICAgeworICAg ICAgcHRyZGlmZl90IGF2YWlsX2luID0gbWluIChlIC0gYnl0ZXBvcywgVUlOVF9NQVgpOwor ICAgICAgcHRyZGlmZl90IGRlY29tcHJlc3NlZCwgYXZhaWxfb3V0ID0gT1VUUFVUX0JMT0NL X1NJWkU7CisKKyAgICAgIGlmIChHQVBfU0laRSA8IGF2YWlsX291dCkKKwltYWtlX2dhcCAo YXZhaWxfb3V0IC0gR0FQX1NJWkUpOworICAgICAgei5uZXh0X2luID0gQllURV9QT1NfQURE UiAoYnl0ZXBvcyk7CisgICAgICB6LmF2YWlsX2luID0gYXZhaWxfaW47CisgICAgICB6Lm5l eHRfb3V0ID0gR1BUX0FERFI7CisgICAgICB6LmF2YWlsX291dCA9IGF2YWlsX291dDsKKyAg ICAgIHN0YXR1cyA9IGluZmxhdGUgKCZ6LCBaX05PX0ZMVVNIKTsKKyAgICAgIGJ5dGVwb3Mg Kz0gYXZhaWxfaW4gLSB6LmF2YWlsX2luOworICAgICAgZGVjb21wcmVzc2VkID0gYXZhaWxf b3V0IC0gei5hdmFpbF9vdXQ7CisgICAgICBpbnNlcnRfZnJvbV9nYXAgKGRlY29tcHJlc3Nl ZCwgZGVjb21wcmVzc2VkLCAwKTsKKyAgICAgIFFVSVQ7CisgICAgfQorICB3aGlsZSAoc3Rh dHVzID09IFpfT0spOworCisgIGlmIChzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKQorICAgIHsK KyAgICAgIC8qIERlbGV0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLiAgKi8KKyAgICAgIHUuc3Rh cnQgPSAwOworICAgICAgZGVsX3JhbmdlIChiLCBlKTsKKyAgICB9CisgIHJldHVybiB1bmJp bmRfdG8gKGNvdW50LCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EID8gUXQgOiBRbmlsKTsKK30K KworI2VuZGlmIC8qIEhBVkVfWkxJQiAqLworCisvKgorICogQlpMSUIgc3VwcG9ydAorICov CisKKyNpZmRlZiBIQVZFX0JaTElCCisKKyNpbmNsdWRlIDxiemxpYi5oPgorCitzdHJ1Y3Qg YnpfdW53aW5kCit7CisgIHVuc2lnbmVkIGNvbXByZXNzIDogMTsKKyAgcHRyZGlmZl90IG9s ZHB0OworICBwdHJkaWZmX3Qgc3RhcnQ7CisgIGJ6X3N0cmVhbSAqYno7Cit9OworCitzdGF0 aWMgdm9pZAorYnpsaWJfdW53aW5kICh2b2lkICphcmcpCit7CisgIHN0cnVjdCBiel91bndp bmQgKnUgPSBhcmc7CisKKyAgLyogRmluYWxpemUgc3RyZWFtIHN0YXRlLiAgKi8KKyAgaWYg KHUtPmNvbXByZXNzKQorICAgIEJaMl9iekNvbXByZXNzRW5kICh1LT5ieik7CisgIGVsc2UK KyAgICBCWjJfYnpEZWNvbXByZXNzRW5kICh1LT5ieik7CisKKyAgLyogRGVsZXRlIGFueSBw cm9kdWNlZCBkYXRhIGFscmVhZHkgaW5zZXJ0ZWQuICAqLworICBpZiAodS0+c3RhcnQpCisg ICAgZGVsX3JhbmdlICh1LT5zdGFydCwgUFQpOworCisgIC8qIFB1dCBwb2ludCB3aGVyZSBp dCB3YXMsIG9yIGlmIHRoZSBidWZmZXIgaGFzIHNocnVuayBiZWNhdXNlCisgICAgIHRoZSBw cm9kdWNlZCBkYXRhIGlzIGJpZ2dlciB0aGFuIHRoZSBvcmlnaW5hbCwgYXQgcG9pbnQtbWF4 LiAgKi8KKyAgU0VUX1BUIChtaW4gKHUtPm9sZHB0LCBaVikpOworfQorCisvKiBOb256ZXJv IGlmIGN1cnJlbnQgYnVmZmVyIHByb2JhYmx5IGhhcyBiemxpYi1jb21wcmVzc2VkIGRhdGEg c3RhcnRlZAorICAgYXQgYnl0ZSBwb3NpdGlvbiBCLiAgKi8KKworc3RhdGljIGJvb2wKK2J6 bGliX2RldGVjdCAocHRyZGlmZl90IGIsIHB0cmRpZmZfdCBlKQoreworICAvKiBDaGVjayBm b3IgJ0JaaCcgaGVhZGVyLiAgKi8KKyAgcmV0dXJuICgoZSAtIGIgPiAzKSAmJiAhbWVtY21w IChCWVRFX1BPU19BRERSIChiKSwgIkJaaCIsIDMpKTsKK30KKworc3RhdGljIExpc3BfT2Jq ZWN0CitiemxpYl9jb21wcmVzc19yZWdpb24gKHB0cmRpZmZfdCBiLCBwdHJkaWZmX3QgZSkK K3sKKyAgaW50IHN0YXR1czsKKyAgYnpfc3RyZWFtIGJ6OworICBzdHJ1Y3QgYnpfdW53aW5k IHU7CisgIHB0cmRpZmZfdCBieXRlcG9zID0gYiwgY291bnQgPSBTUEVDUERMX0lOREVYICgp OworCisgIG1lbXNldCAoJmJ6LCAwLCBzaXplb2YgYnopOworCisgIC8qIFVzZSA5MDBrIGJs b2NrIHNpemUgYW5kIGRlZmF1bHRzIGZvciBvdGhlcnMuICAqLworICBpZiAoQloyX2J6Q29t cHJlc3NJbml0ICgmYnosIDksIDAsIDApICE9IEJaX09LKQorICAgIHJldHVybiBRbmlsOwor CisgIC8qIFNldHVwIGNhbGwgdG8gYnpsaWJfdW53aW5kIGluIGNhc2Ugb2YgZXJyb3IuICAq LworICB1LmNvbXByZXNzID0gMTsKKyAgdS5zdGFydCA9IGU7CisgIHUuYnogPSAmYno7Cisg IHUub2xkcHQgPSBQVDsKKyAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X3B0ciAoYnpsaWJfdW53 aW5kLCAmdSk7CisKKyAgLyogSW5zZXJ0IHRoZSBjb21wcmVzc2VkIGRhdGEgYXQgdGhlIGVu ZCBvZiB0aGUgb3JpZ2luYWwgZGF0YS4gICovCisgIG1vdmVfZ2FwX2JvdGggKGUsIGUpOwor ICBTRVRfUFQgKGUpOworCisgIC8qIENvbXByZXNzIHVudGlsIHdlIGhhdmUgYW4gZXJyb3Ig b3IgaW5wdXQgZW5kcy4gICovCisgIGRvCisgICAgeworICAgICAgcHRyZGlmZl90IGF2YWls X2luID0gbWluIChlIC0gYnl0ZXBvcywgVUlOVF9NQVgpOworICAgICAgcHRyZGlmZl90IGNv bXByZXNzZWQsIGF2YWlsX291dCA9IE9VVFBVVF9CTE9DS19TSVpFOworCisgICAgICBpZiAo R0FQX1NJWkUgPCBhdmFpbF9vdXQpCisJbWFrZV9nYXAgKGF2YWlsX291dCAtIEdBUF9TSVpF KTsKKyAgICAgIGJ6Lm5leHRfaW4gPSAoY2hhciAqKSBCWVRFX1BPU19BRERSIChieXRlcG9z KTsKKyAgICAgIGJ6LmF2YWlsX2luID0gYXZhaWxfaW47CisgICAgICBiei5uZXh0X291dCA9 IChjaGFyICopIEdQVF9BRERSOworICAgICAgYnouYXZhaWxfb3V0ID0gYXZhaWxfb3V0Owor ICAgICAgc3RhdHVzID0gQloyX2J6Q29tcHJlc3MgKCZieiwgYnl0ZXBvcyArIGF2YWlsX2lu ID09IGUgPyBCWl9GSU5JU0ggOiBCWl9SVU4pOworICAgICAgYnl0ZXBvcyArPSBhdmFpbF9p biAtIGJ6LmF2YWlsX2luOworICAgICAgY29tcHJlc3NlZCA9IGF2YWlsX291dCAtIGJ6LmF2 YWlsX291dDsKKyAgICAgIGluc2VydF9mcm9tX2dhcCAoY29tcHJlc3NlZCwgY29tcHJlc3Nl ZCwgMCk7CisgICAgICBRVUlUOworICAgIH0KKyAgd2hpbGUgKHN0YXR1cyA9PSBCWl9GSU5J U0hfT0spOworCisgIGlmIChzdGF0dXMgPT0gQlpfU1RSRUFNX0VORCkKKyAgICB7CisgICAg ICAvKiBEZWxldGUgdGhlIG9yaWdpbmFsIGRhdGEuICAqLworICAgICAgdS5zdGFydCA9IDA7 CisgICAgICBkZWxfcmFuZ2UgKGIsIGUpOworICAgIH0KKyAgcmV0dXJuIHVuYmluZF90byAo Y291bnQsIHN0YXR1cyA9PSBCWl9TVFJFQU1fRU5EID8gUXQgOiBRbmlsKTsKK30KKworc3Rh dGljIExpc3BfT2JqZWN0CitiemxpYl9kZWNvbXByZXNzX3JlZ2lvbiAocHRyZGlmZl90IGIs IHB0cmRpZmZfdCBlKQoreworICBpbnQgc3RhdHVzOworICBiel9zdHJlYW0gYno7CisgIHN0 cnVjdCBiel91bndpbmQgdTsKKyAgcHRyZGlmZl90IGJ5dGVwb3MgPSBiLCBjb3VudCA9IFNQ RUNQRExfSU5ERVggKCk7CisKKyAgaWYgKCFiemxpYl9kZXRlY3QgKGIsIGUpKQorICAgIGVy cm9yICgiTm90IGEgYnpsaWItY29tcHJlc3NlZCBkYXRhIik7CisKKyAgbWVtc2V0ICgmYnos IDAsIHNpemVvZiBieik7CisKKyAgaWYgKEJaMl9iekRlY29tcHJlc3NJbml0ICgmYnosIDAs IDApICE9IEJaX09LKQorICAgIHJldHVybiBRbmlsOworCisgIC8qIFNldHVwIGNhbGwgdG8g YnpsaWJfdW53aW5kIGluIGNhc2Ugb2YgZXJyb3IuICAqLworICB1LmNvbXByZXNzID0gMDsK KyAgdS5zdGFydCA9IGU7CisgIHUuYnogPSAmYno7CisgIHUub2xkcHQgPSBQVDsKKyAgcmVj b3JkX3Vud2luZF9wcm90ZWN0X3B0ciAoYnpsaWJfdW53aW5kLCAmdSk7CisKKyAgLyogSW5z ZXJ0IHRoZSBkZWNvbXByZXNzZWQgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2Vk IGRhdGEuICAqLworICBtb3ZlX2dhcF9ib3RoIChlLCBlKTsKKyAgU0VUX1BUIChlKTsKKwor ICAvKiBEZWNvbXByZXNzIHVudGlsIHdlIGhhdmUgYW4gZXJyb3Igb3IgaW5wdXQgZW5kcy4g ICovCisgIGRvCisgICAgeworICAgICAgcHRyZGlmZl90IGF2YWlsX2luID0gbWluIChlIC0g Ynl0ZXBvcywgVUlOVF9NQVgpOworICAgICAgcHRyZGlmZl90IGRlY29tcHJlc3NlZCwgYXZh aWxfb3V0ID0gT1VUUFVUX0JMT0NLX1NJWkU7CisKKyAgICAgIGlmIChHQVBfU0laRSA8IGF2 YWlsX291dCkKKwltYWtlX2dhcCAoYXZhaWxfb3V0IC0gR0FQX1NJWkUpOworICAgICAgYnou bmV4dF9pbiA9IChjaGFyICopIEJZVEVfUE9TX0FERFIgKGJ5dGVwb3MpOworICAgICAgYnou YXZhaWxfaW4gPSBhdmFpbF9pbjsKKyAgICAgIGJ6Lm5leHRfb3V0ID0gKGNoYXIgKikgR1BU X0FERFI7CisgICAgICBiei5hdmFpbF9vdXQgPSBhdmFpbF9vdXQ7CisgICAgICBzdGF0dXMg PSBCWjJfYnpEZWNvbXByZXNzICgmYnopOworICAgICAgYnl0ZXBvcyArPSBhdmFpbF9pbiAt IGJ6LmF2YWlsX2luOworICAgICAgZGVjb21wcmVzc2VkID0gYXZhaWxfb3V0IC0gYnouYXZh aWxfb3V0OworICAgICAgaW5zZXJ0X2Zyb21fZ2FwIChkZWNvbXByZXNzZWQsIGRlY29tcHJl c3NlZCwgMCk7CisgICAgICBRVUlUOworICAgIH0KKyAgd2hpbGUgKHN0YXR1cyA9PSBCWl9P Syk7CisKKyAgaWYgKHN0YXR1cyA9PSBCWl9TVFJFQU1fRU5EKQorICAgIHsKKyAgICAgIC8q IERlbGV0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLiAgKi8KKyAgICAgIHUuc3RhcnQgPSAwOwor ICAgICAgZGVsX3JhbmdlIChiLCBlKTsKKyAgICB9CisgIHJldHVybiB1bmJpbmRfdG8gKGNv dW50LCBzdGF0dXMgPT0gQlpfU1RSRUFNX0VORCA/IFF0IDogUW5pbCk7Cit9CisKKyNlbmRp ZiAvKiBIQVZFX0JaTElCICovCisKKy8qCisgKiBMWk1BIHN1cHBvcnQKKyAqLworCisjaWZk ZWYgSEFWRV9MWk1BCisKKyNpbmNsdWRlIDxsem1hLmg+CisKK3N0cnVjdCBsel91bndpbmQK K3sKKyAgcHRyZGlmZl90IG9sZHB0OworICBwdHJkaWZmX3Qgc3RhcnQ7CisgIGx6bWFfc3Ry ZWFtICpsejsKK307CisKK3N0YXRpYyB2b2lkCitsem1hX3Vud2luZCAodm9pZCAqYXJnKQor eworICBzdHJ1Y3QgbHpfdW53aW5kICp1ID0gYXJnOworCisgIC8qIEZpbmFsaXplIHN0cmVh bSBzdGF0ZS4gICovCisgIGx6bWFfZW5kICh1LT5seik7CisKKyAgLyogRGVsZXRlIGFueSBw cm9kdWNlZCBkYXRhIGFscmVhZHkgaW5zZXJ0ZWQuICAqLworICBpZiAodS0+c3RhcnQpCisg ICAgZGVsX3JhbmdlICh1LT5zdGFydCwgUFQpOworCisgIC8qIFB1dCBwb2ludCB3aGVyZSBp dCB3YXMsIG9yIGlmIHRoZSBidWZmZXIgaGFzIHNocnVuayBiZWNhdXNlCisgICAgIHRoZSBw cm9kdWNlZCBkYXRhIGlzIGJpZ2dlciB0aGFuIHRoZSBvcmlnaW5hbCwgYXQgcG9pbnQtbWF4 LiAgKi8KKyAgU0VUX1BUIChtaW4gKHUtPm9sZHB0LCBaVikpOworfQorCisvKiBOb256ZXJv IGlmIGN1cnJlbnQgYnVmZmVyIHByb2JhYmx5IGhhcyBsem1hLWNvbXByZXNzZWQgZGF0YSBz dGFydGVkCisgICBhdCBieXRlIHBvc2l0aW9uIEIuICAqLworCitzdGF0aWMgYm9vbAorbHpt YV9kZXRlY3QgKHB0cmRpZmZfdCBiLCBwdHJkaWZmX3QgZSkKK3sKKyAgLyogQ2hlY2sgZm9y ICdcMzc1N1pYWicgaGVhZGVyLiAgKi8KKyAgcmV0dXJuICgoZSAtIGIgPiA1KSAmJiAoRkVU Q0hfQllURSAoYikgPT0gMjUzKQorCSAgJiYgIW1lbWNtcCAoQllURV9QT1NfQUREUiAoYiAr IDEpLCAiN3pYWiIsIDQpKTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0Citsem1hX2NvbXBy ZXNzX3JlZ2lvbiAocHRyZGlmZl90IGIsIHB0cmRpZmZfdCBlKQoreworICBpbnQgc3RhdHVz OworICBzdHJ1Y3QgbHpfdW53aW5kIHU7CisgIGx6bWFfc3RyZWFtIGx6ID0gTFpNQV9TVFJF QU1fSU5JVDsKKyAgcHRyZGlmZl90IGJ5dGVwb3MgPSBiLCBjb3VudCA9IFNQRUNQRExfSU5E RVggKCk7CisKKyAgaWYgKGx6bWFfZWFzeV9lbmNvZGVyICgmbHosIExaTUFfUFJFU0VUX0RF RkFVTFQsCisJCQkgTFpNQV9DSEVDS19DUkMzMikgIT0gTFpNQV9PSykKKyAgICByZXR1cm4g UW5pbDsKKworICAvKiBTZXR1cCBjYWxsIHRvIGx6bWFfdW53aW5kIGluIGNhc2Ugb2YgZXJy b3IuICAqLworICB1LnN0YXJ0ID0gZTsKKyAgdS5seiA9ICZsejsKKyAgdS5vbGRwdCA9IFBU OworICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyIChsem1hX3Vud2luZCwgJnUpOworCisg IC8qIEluc2VydCB0aGUgY29tcHJlc3NlZCBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIG9yaWdp bmFsIGRhdGEuICAqLworICBtb3ZlX2dhcF9ib3RoIChlLCBlKTsKKyAgU0VUX1BUIChlKTsK KworICAvKiBDb21wcmVzcyB1bnRpbCB3ZSBoYXZlIGFuIGVycm9yIG9yIGlucHV0IGVuZHMu ICAqLworICBkbworICAgIHsKKyAgICAgIHB0cmRpZmZfdCBhdmFpbF9pbiA9IG1pbiAoZSAt IGJ5dGVwb3MsIFVJTlRfTUFYKTsKKyAgICAgIHB0cmRpZmZfdCBjb21wcmVzc2VkLCBhdmFp bF9vdXQgPSBPVVRQVVRfQkxPQ0tfU0laRTsKKworICAgICAgaWYgKEdBUF9TSVpFIDwgYXZh aWxfb3V0KQorCW1ha2VfZ2FwIChhdmFpbF9vdXQgLSBHQVBfU0laRSk7CisgICAgICBsei5u ZXh0X2luID0gQllURV9QT1NfQUREUiAoYnl0ZXBvcyk7CisgICAgICBsei5hdmFpbF9pbiA9 IGF2YWlsX2luOworICAgICAgbHoubmV4dF9vdXQgPSBHUFRfQUREUjsKKyAgICAgIGx6LmF2 YWlsX291dCA9IGF2YWlsX291dDsKKyAgICAgIHN0YXR1cyA9IGx6bWFfY29kZSAoJmx6LCBi eXRlcG9zICsgYXZhaWxfaW4gPT0gZSA/IExaTUFfRklOSVNIIDogTFpNQV9SVU4pOworICAg ICAgYnl0ZXBvcyArPSBhdmFpbF9pbiAtIGx6LmF2YWlsX2luOworICAgICAgY29tcHJlc3Nl ZCA9IGF2YWlsX291dCAtIGx6LmF2YWlsX291dDsKKyAgICAgIGluc2VydF9mcm9tX2dhcCAo Y29tcHJlc3NlZCwgY29tcHJlc3NlZCwgMCk7CisgICAgICBRVUlUOworICAgIH0KKyAgd2hp bGUgKHN0YXR1cyA9PSBMWk1BX09LKTsKKworICBpZiAoc3RhdHVzID09IExaTUFfU1RSRUFN X0VORCkKKyAgICB7CisgICAgICAvKiBEZWxldGUgdGhlIG9yaWdpbmFsIGRhdGEuICAqLwor ICAgICAgdS5zdGFydCA9IDA7CisgICAgICBkZWxfcmFuZ2UgKGIsIGUpOworICAgIH0KKyAg cmV0dXJuIHVuYmluZF90byAoY291bnQsIHN0YXR1cyA9PSBMWk1BX1NUUkVBTV9FTkQgPyBR dCA6IFFuaWwpOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK2x6bWFfZGVjb21wcmVzc19y ZWdpb24gKHB0cmRpZmZfdCBiLCBwdHJkaWZmX3QgZSkKK3sKKyAgaW50IHN0YXR1czsKKyAg c3RydWN0IGx6X3Vud2luZCB1OworICBsem1hX3N0cmVhbSBseiA9IExaTUFfU1RSRUFNX0lO SVQ7CisgIHB0cmRpZmZfdCBieXRlcG9zID0gYiwgY291bnQgPSBTUEVDUERMX0lOREVYICgp OworCisgIGlmICghbHptYV9kZXRlY3QgKGIsIGUpKQorICAgIGVycm9yICgiTm90IGEgbHpt YS1jb21wcmVzc2VkIGRhdGEiKTsKKworICBpZiAobHptYV9hdXRvX2RlY29kZXIgKCZseiwg VUlOVDY0X01BWCwgMCkgIT0gTFpNQV9PSykKKyAgICByZXR1cm4gUW5pbDsKKworICAvKiBT ZXR1cCBjYWxsIHRvIGx6bWFfdW53aW5kIGluIGNhc2Ugb2YgZXJyb3IuICAqLworICB1LnN0 YXJ0ID0gZTsKKyAgdS5seiA9ICZsejsKKyAgdS5vbGRwdCA9IFBUOworICByZWNvcmRfdW53 aW5kX3Byb3RlY3RfcHRyIChsem1hX3Vud2luZCwgJnUpOworCisgIC8qIEluc2VydCB0aGUg ZGVjb21wcmVzc2VkIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLiAg Ki8KKyAgbW92ZV9nYXBfYm90aCAoZSwgZSk7CisgIFNFVF9QVCAoZSk7CisKKyAgLyogRGVj b21wcmVzcyB1bnRpbCB3ZSBoYXZlIGFuIGVycm9yIG9yIGlucHV0IGVuZHMuICAqLworICBk bworICAgIHsKKyAgICAgIHB0cmRpZmZfdCBhdmFpbF9pbiA9IG1pbiAoZSAtIGJ5dGVwb3Ms IFVJTlRfTUFYKTsKKyAgICAgIHB0cmRpZmZfdCBkZWNvbXByZXNzZWQsIGF2YWlsX291dCA9 IE9VVFBVVF9CTE9DS19TSVpFOworCisgICAgICBpZiAoR0FQX1NJWkUgPCBhdmFpbF9vdXQp CisJbWFrZV9nYXAgKGF2YWlsX291dCAtIEdBUF9TSVpFKTsKKyAgICAgIGx6Lm5leHRfaW4g PSBCWVRFX1BPU19BRERSIChieXRlcG9zKTsKKyAgICAgIGx6LmF2YWlsX2luID0gYXZhaWxf aW47CisgICAgICBsei5uZXh0X291dCA9IEdQVF9BRERSOworICAgICAgbHouYXZhaWxfb3V0 ID0gYXZhaWxfb3V0OworICAgICAgc3RhdHVzID0gbHptYV9jb2RlICgmbHosIGJ5dGVwb3Mg KyBhdmFpbF9pbiA9PSBlID8gTFpNQV9GSU5JU0ggOiBMWk1BX1JVTik7CisgICAgICBieXRl cG9zICs9IGF2YWlsX2luIC0gbHouYXZhaWxfaW47CisgICAgICBkZWNvbXByZXNzZWQgPSBh dmFpbF9vdXQgLSBsei5hdmFpbF9vdXQ7CisgICAgICBpbnNlcnRfZnJvbV9nYXAgKGRlY29t cHJlc3NlZCwgZGVjb21wcmVzc2VkLCAwKTsKKyAgICAgIFFVSVQ7CisgICAgfQorICB3aGls ZSAoc3RhdHVzID09IExaTUFfT0spOworCisgIGlmIChzdGF0dXMgPT0gTFpNQV9TVFJFQU1f RU5EKQorICAgIHsKKyAgICAgIC8qIERlbGV0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLiAgKi8K KyAgICAgIHUuc3RhcnQgPSAwOworICAgICAgZGVsX3JhbmdlIChiLCBlKTsKKyAgICB9Cisg IHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCBzdGF0dXMgPT0gTFpNQV9TVFJFQU1fRU5EID8g UXQgOiBRbmlsKTsKK30KKworI2VuZGlmIC8qIEhBVkVfTFpNQSAqLworCisvKgorICogTGlz cCBpbnRlcmZhY2UKKyAqLworCitERUZVTiAoImNvbXByZXNzaW9uLWF2YWlsYWJsZS1wIiwg RmNvbXByZXNzaW9uX2F2YWlsYWJsZV9wLAorICAgICAgIFNjb21wcmVzc2lvbl9hdmFpbGFi bGVfcCwgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFJldHVybiB0IGlmIE1FVEhPRCBvZiBj b21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBpcyBhdmFpbGFibGUuCitWYWxpZCBNRVRI T0Qgc2hvdWxkIGJlIG9uZSBvZiBgemxpYicsIGBiemxpYicgb3IgJ2x6bWEnLiAgKi8pCisg ICAgIChMaXNwX09iamVjdCBtZXRob2QpCit7CisjaWZkZWYgSEFWRV9aTElCCisgIGlmIChF USAobWV0aG9kLCBRemxpYikpCisgICAgcmV0dXJuIFF0OworI2VuZGlmCisjaWZkZWYgSEFW RV9CWkxJQgorICBpZiAoRVEgKG1ldGhvZCwgUWJ6bGliKSkKKyAgICByZXR1cm4gUXQ7Cisj ZW5kaWYKKyNpZmRlZiBIQVZFX0xaTUEKKyAgaWYgKEVRIChtZXRob2QsIFFsem1hKSkKKyAg ICByZXR1cm4gUXQ7CisjZW5kaWYKKyAgcmV0dXJuIFFuaWw7Cit9CisKKyNpZiBkZWZpbmVk IEhBVkVfWkxJQiB8fCBkZWZpbmVkIEhBVkVfQlpMSUIgfHwgZGVmaW5lZCBIQVZFX0xaTUEK KworLyogVHJ5IHRvIGRldGVjdCBjb21wcmVzc2lvbiBtZXRob2QgZm9yIGNvbnRlbnRzIG9m IGN1cnJlbnQgYnVmZmVyIGZyb20gYnl0ZQorICAgcG9zaXRpb24gQiB0byBFLiAgUmV0dXJu IG9uZSBvZiB6bGliLCBiemxpYiBvciBsem1hIGlmIGNvbXByZXNzZWQgZGF0YSBvZgorICAg YXBwcm9wcmlhdGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBhbmQgZGV0ZWN0ZWQsIG9yIG5pbCBv dGhlcndpc2UuICAqLworCitzdGF0aWMgTGlzcF9PYmplY3QKK2RldGVjdF9jb21wcmVzc2Vk X2RhdGEgKHB0cmRpZmZfdCBiLCBwdHJkaWZmX3QgZSkKK3sKKyNpZmRlZiBIQVZFX1pMSUIK KyAgaWYgKHpsaWJfZGV0ZWN0IChiLCBlKSkKKyAgICByZXR1cm4gUXpsaWI7CisjZW5kaWYK KyNpZmRlZiBIQVZFX0JaTElCCisgIGlmIChiemxpYl9kZXRlY3QgKGIsIGUpKQorICAgIHJl dHVybiBRYnpsaWI7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xaTUEKKyAgaWYgKGx6bWFfZGV0 ZWN0IChiLCBlKSkKKyAgICByZXR1cm4gUWx6bWE7CisjZW5kaWYKKyAgcmV0dXJuIFFuaWw7 Cit9CisKK0RFRlVOICgiY29tcHJlc3MtcmVnaW9uIiwgRmNvbXByZXNzX3JlZ2lvbiwgU2Nv bXByZXNzX3JlZ2lvbiwgMywgMywgMCwKKyAgICAgICBkb2M6IC8qIENvbXByZXNzIHJlZ2lv biBieSB1c2luZyBNRVRIT0QgZnJvbSBTVEFSVCB0byBFTkQuICAqLykKKyAgICAgKExpc3Bf T2JqZWN0IG1ldGhvZCwgTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCkKK3sK KyAgdmFsaWRhdGVfcmVnaW9uICgmc3RhcnQsICZlbmQpOworICBpZiAoIU5JTFAgKEJWQVIg KGN1cnJlbnRfYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKKyAgICBl cnJvciAoIlRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbmx5IGluIHVuaWJ5dGUgYnVm ZmVycyIpOworCisjaWZkZWYgSEFWRV9aTElCCisgIGlmIChFUSAobWV0aG9kLCBRemxpYikp CisgICAgcmV0dXJuIHpsaWJfY29tcHJlc3NfcmVnaW9uIChYSU5UIChzdGFydCksIFhJTlQg KGVuZCkpOworI2VuZGlmCisjaWZkZWYgSEFWRV9CWkxJQgorICBpZiAoRVEgKG1ldGhvZCwg UWJ6bGliKSkKKyAgICByZXR1cm4gYnpsaWJfY29tcHJlc3NfcmVnaW9uIChYSU5UIChzdGFy dCksIFhJTlQgKGVuZCkpOworI2VuZGlmCisjaWZkZWYgSEFWRV9MWk1BCisgIGlmIChFUSAo bWV0aG9kLCBRbHptYSkpCisgICAgcmV0dXJuIGx6bWFfY29tcHJlc3NfcmVnaW9uIChYSU5U IChzdGFydCksIFhJTlQgKGVuZCkpOworI2VuZGlmCisgIGVycm9yICgiVW5zdXBwb3J0ZWQg Y29tcHJlc3Npb24gbWV0aG9kIik7CisgIHJldHVybiBRbmlsOworfQorCitERUZVTiAoImRl Y29tcHJlc3MtcmVnaW9uIiwgRmRlY29tcHJlc3NfcmVnaW9uLCBTZGVjb21wcmVzc19yZWdp b24sIDMsIDMsIDAsCisgICAgICAgZG9jOiAvKiBEZWNvbXByZXNzIHJlZ2lvbiBieSB1c2lu ZyBNRVRIT0QgZnJvbSBTVEFSVCB0byBFTkQuICAqLykKKyAgICAgKExpc3BfT2JqZWN0IG1l dGhvZCwgTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCkKK3sKKyAgdmFsaWRh dGVfcmVnaW9uICgmc3RhcnQsICZlbmQpOworICBpZiAoIU5JTFAgKEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKKyAgICBlcnJvciAoIlRo aXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbmx5IGluIHVuaWJ5dGUgYnVmZmVycyIpOwor CisgIGlmIChOSUxQIChtZXRob2QpKQorICAgIG1ldGhvZCA9IGRldGVjdF9jb21wcmVzc2Vk X2RhdGEgKFhJTlQgKHN0YXJ0KSwgWElOVCAoZW5kKSk7CisjaWZkZWYgSEFWRV9aTElCCisg IGlmIChFUSAobWV0aG9kLCBRemxpYikpCisgICAgcmV0dXJuIHpsaWJfZGVjb21wcmVzc19y ZWdpb24gKFhJTlQgKHN0YXJ0KSwgWElOVCAoZW5kKSk7CisjZW5kaWYKKyNpZmRlZiBIQVZF X0JaTElCCisgIGlmIChFUSAobWV0aG9kLCBRYnpsaWIpKQorICAgIHJldHVybiBiemxpYl9k ZWNvbXByZXNzX3JlZ2lvbiAoWElOVCAoc3RhcnQpLCBYSU5UIChlbmQpKTsKKyNlbmRpZgor I2lmZGVmIEhBVkVfTFpNQQorICBpZiAoRVEgKG1ldGhvZCwgUWx6bWEpKQorICAgIHJldHVy biBsem1hX2RlY29tcHJlc3NfcmVnaW9uIChYSU5UIChzdGFydCksIFhJTlQgKGVuZCkpOwor I2VuZGlmCisgIGVycm9yICgiVW5zdXBwb3J0ZWQgZGVjb21wcmVzc2lvbiBtZXRob2QiKTsK KyAgcmV0dXJuIFFuaWw7Cit9CisKKyNlbmRpZiAvKiBIQVZFX1pMSUIgfHwgSEFWRV9CWkxJ QiB8fCBIQVZFX0xaTUEgKi8KKwordm9pZAorc3ltc19vZl9jb21wcmVzcyAodm9pZCkKK3sK KyAgREVGU1lNIChRemxpYiwgInpsaWIiKTsKKyAgREVGU1lNIChRYnpsaWIsICJiemxpYiIp OworICBERUZTWU0gKFFsem1hLCAibHptYSIpOworCisgIGRlZnN1YnIgKCZTY29tcHJlc3Np b25fYXZhaWxhYmxlX3ApOworI2lmIGRlZmluZWQgSEFWRV9aTElCIHx8IGRlZmluZWQgSEFW RV9CWkxJQiB8fCBkZWZpbmVkIEhBVkVfTFpNQQorICBkZWZzdWJyICgmU2NvbXByZXNzX3Jl Z2lvbik7CisgIGRlZnN1YnIgKCZTZGVjb21wcmVzc19yZWdpb24pOworI2VuZGlmCit9Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2VtYWNzLmMnCi0tLSBzcmMvZW1hY3MuYwkyMDEzLTA4 LTE1IDE2OjM3OjE1ICswMDAwCisrKyBzcmMvZW1hY3MuYwkyMDEzLTA4LTE5IDA0OjQ0OjI4 ICswMDAwCkBAIC0xNDEwLDYgKzE0MTAsNyBAQAogI2lmZGVmIEhBVkVfWkxJQgogICAgICAg c3ltc19vZl9kZWNvbXByZXNzICgpOwogI2VuZGlmCisgICAgICBzeW1zX29mX2NvbXByZXNz ICgpOwogCiAgICAgICBzeW1zX29mX21lbnUgKCk7CiAKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvbGlzcC5oJwotLS0gc3JjL2xpc3AuaAkyMDEzLTA4LTE1IDE0OjUyOjUzICswMDAwCisr KyBzcmMvbGlzcC5oCTIwMTMtMDgtMTkgMDQ6NDQ6MjggKzAwMDAKQEAgLTQyMjcsNiArNDIy Nyw4IEBACiB2b2lkIHN5bXNfb2ZfZGJ1c2JpbmQgKHZvaWQpOwogI2VuZGlmCiAKKy8qIERl ZmluZWQgaW4gY29tcHJlc3MuYy4gICovCitleHRlcm4gdm9pZCBzeW1zX29mX2NvbXByZXNz ICh2b2lkKTsKIAogLyogRGVmaW5lZCBpbiBwcm9maWxlci5jLiAgKi8KIGV4dGVybiBib29s IHByb2ZpbGVyX21lbW9yeV9ydW5uaW5nOwoK --------------090407060207000707020806 Content-Type: text/plain; charset=UTF-8; name="compress-test.el" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="compress-test.el" KGRlZnVuIGNvbXByZXNzLXRlc3QgKCkKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHN1bSAo bWQ1IChjdXJyZW50LWJ1ZmZlcikgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkKICAgIChk b2xpc3QgKG1ldGhvZCAnKHpsaWIgYnpsaWIgbHptYSkpCiAgICAgIChtZXNzYWdlICJVc2lu ZyAlUyBmb3IgJWQuLiVkIiBtZXRob2QgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiAgICAg IChsZXQgKCh0ZXN0IChwcm9nbiAoY29tcHJlc3MtcmVnaW9uIG1ldGhvZCAocG9pbnQtbWlu KSAocG9pbnQtbWF4KSkKCQkJIChkZWNvbXByZXNzLXJlZ2lvbiBtZXRob2QgKHBvaW50LW1p bikgKHBvaW50LW1heCkpCgkJCSAobWQ1IChjdXJyZW50LWJ1ZmZlcikgKHBvaW50LW1pbikg KHBvaW50LW1heCkpKSkpCgkob3IgKHN0cmluZy1lcXVhbCBzdW0gdGVzdCkgKGVycm9yICIl UyB0ZXN0IGVycm9yIiBtZXRob2QpKSkpKSkK --------------090407060207000707020806--