From: "Tan Swee Heng" Subject: [PATCH 2/2] Salsa20 stream cipher algorithm (x86-64 version) Date: Mon, 17 Dec 2007 02:06:15 +0800 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2208_22860522.1197828375219" To: "Herbert Xu" , "Linux Crypto" Return-path: Received: from hs-out-0708.google.com ([64.233.178.244]:38353 "EHLO hs-out-2122.google.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934515AbXLPSGR (ORCPT ); Sun, 16 Dec 2007 13:06:17 -0500 Received: by hs-out-2122.google.com with SMTP id 54so1853483hsz.5 for ; Sun, 16 Dec 2007 10:06:16 -0800 (PST) Sender: linux-crypto-owner@vger.kernel.org List-ID: ------=_Part_2208_22860522.1197828375219 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline This is the x86-64 version of the Salsa20 stream cipher algorithm. The original assembly code came from . It has been reformatted for clarity. Signed-off-by: Tan Swee Heng Hi Herbert, as mentioned some time ago, I don't have an x86-64. So please help me test it. Thanks! The Python script used to automate the reformatting is also attached in case anyone is interested. ------=_Part_2208_22860522.1197828375219 Content-Type: text/plain; name=0002-Salsa20-stream-cipher-algorithm-x86-64-version.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fa9vu36a0 Content-Disposition: attachment; filename=0002-Salsa20-stream-cipher-algorithm-x86-64-version.txt LS0tCiBhcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAyICsKIGFy Y2gveDg2L2NyeXB0by9zYWxzYTIwLXg4Nl82NC1hc21fNjQuUyB8ICA5MjAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogYXJjaC94ODYvY3J5cHRvL3NhbHNhMjBfZ2x1ZS5jICAgICAg ICAgIHwgICAgMiArCiBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDE1ICsKIDQgZmlsZXMgY2hhbmdlZCwgOTM5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvY3J5cHRvL3NhbHNhMjAteDg2XzY0LWFzbV82 NC5TCgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC94ODYvY3J5 cHRvL01ha2VmaWxlCmluZGV4IDI1Y2M4NDQuLjA5MjAwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2 L2NyeXB0by9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKQEAgLTgsNiAr OCw3IEBAIG9iai0kKENPTkZJR19DUllQVE9fU0FMU0EyMF81ODYpICs9IHNhbHNhMjAtaTU4Ni5v CiAKIG9iai0kKENPTkZJR19DUllQVE9fQUVTX1g4Nl82NCkgKz0gYWVzLXg4Nl82NC5vCiBvYmot JChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0KSArPSB0d29maXNoLXg4Nl82NC5vCitvYmot JChDT05GSUdfQ1JZUFRPX1NBTFNBMjBfWDg2XzY0KSArPSBzYWxzYTIwLXg4Nl82NC5vCiAKIGFl cy1pNTg2LXkgOj0gYWVzLWk1ODYtYXNtXzMyLm8gYWVzX2dsdWUubwogdHdvZmlzaC1pNTg2LXkg Oj0gdHdvZmlzaC1pNTg2LWFzbV8zMi5vIHR3b2Zpc2hfMzIubwpAQCAtMTUsMyArMTYsNCBAQCBz YWxzYTIwLWk1ODYteSA6PSBzYWxzYTIwLWk1ODYtYXNtXzMyLm8gc2Fsc2EyMF9nbHVlLm8KIAog YWVzLXg4Nl82NC15IDo9IGFlcy14ODZfNjQtYXNtXzY0Lm8gYWVzX2dsdWUubwogdHdvZmlzaC14 ODZfNjQteSA6PSB0d29maXNoLXg4Nl82NC1hc21fNjQubyB0d29maXNoXzY0Lm8KK3NhbHNhMjAt eDg2XzY0LXkgOj0gc2Fsc2EyMC14ODZfNjQtYXNtXzY0Lm8gc2Fsc2EyMF9nbHVlLm8KZGlmZiAt LWdpdCBhL2FyY2gveDg2L2NyeXB0by9zYWxzYTIwLXg4Nl82NC1hc21fNjQuUyBiL2FyY2gveDg2 L2NyeXB0by9zYWxzYTIwLXg4Nl82NC1hc21fNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42MjE0YTliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvY3J5cHRvL3Nh bHNhMjAteDg2XzY0LWFzbV82NC5TCkBAIC0wLDAgKzEsOTIwIEBACisjIGVudGVyIEVDUllQVF9l bmNyeXB0X2J5dGVzCisudGV4dAorLnAyYWxpZ24gNQorLmdsb2JsIEVDUllQVF9lbmNyeXB0X2J5 dGVzCitFQ1JZUFRfZW5jcnlwdF9ieXRlczoKKwltb3YJJXJzcCwlcjExCisJYW5kCSQzMSwlcjEx CisJYWRkCSQyNTYsJXIxMQorCXN1YgklcjExLCVyc3AKKwkjIHggPSBhcmcxCisJbW92CSVyZGks JXI4CisJIyBtID0gYXJnMgorCW1vdgklcnNpLCVyc2kKKwkjIG91dCA9IGFyZzMKKwltb3YJJXJk eCwlcmRpCisJIyBieXRlcyA9IGFyZzQKKwltb3YJJXJjeCwlcmR4CisJIyAgICAgICAgICAgICAg IHVuc2lnbmVkPj8gYnl0ZXMgLSAwCisJY21wCSQwLCVyZHgKKwkjIGNvbW1lbnQ6ZnAgc3RhY2sg dW5jaGFuZ2VkIGJ5IGp1bXAKKwkjIGdvdG8gZG9uZSBpZiAhdW5zaWduZWQ+CisJamJlCS5fZG9u ZQorCSMgY29tbWVudDpmcCBzdGFjayB1bmNoYW5nZWQgYnkgZmFsbHRocm91Z2gKKyMgc3RhcnQ6 CisuX3N0YXJ0OgorCSMgcjExX3N0YWNrID0gcjExCisJbW92cQklcjExLDAoJXJzcCkKKwkjIHIx Ml9zdGFjayA9IHIxMgorCW1vdnEJJXIxMiw4KCVyc3ApCisJIyByMTNfc3RhY2sgPSByMTMKKwlt b3ZxCSVyMTMsMTYoJXJzcCkKKwkjIHIxNF9zdGFjayA9IHIxNAorCW1vdnEJJXIxNCwyNCglcnNw KQorCSMgcjE1X3N0YWNrID0gcjE1CisJbW92cQklcjE1LDMyKCVyc3ApCisJIyByYnhfc3RhY2sg PSByYngKKwltb3ZxCSVyYngsNDAoJXJzcCkKKwkjIHJicF9zdGFjayA9IHJicAorCW1vdnEJJXJi cCw0OCglcnNwKQorCSMgaW4wID0gKih1aW50NjQgKikgKHggKyAwKQorCW1vdnEJMCglcjgpLCVy Y3gKKwkjIGluMiA9ICoodWludDY0ICopICh4ICsgOCkKKwltb3ZxCTgoJXI4KSwlcjkKKwkjIGlu NCA9ICoodWludDY0ICopICh4ICsgMTYpCisJbW92cQkxNiglcjgpLCVyYXgKKwkjIGluNiA9ICoo dWludDY0ICopICh4ICsgMjQpCisJbW92cQkyNCglcjgpLCVyMTAKKwkjIGluOCA9ICoodWludDY0 ICopICh4ICsgMzIpCisJbW92cQkzMiglcjgpLCVyMTEKKwkjIGluMTAgPSAqKHVpbnQ2NCAqKSAo eCArIDQwKQorCW1vdnEJNDAoJXI4KSwlcjEyCisJIyBpbjEyID0gKih1aW50NjQgKikgKHggKyA0 OCkKKwltb3ZxCTQ4KCVyOCksJXIxMworCSMgaW4xNCA9ICoodWludDY0ICopICh4ICsgNTYpCisJ bW92cQk1NiglcjgpLCVyMTQKKwkjIGowID0gaW4wCisJbW92cQklcmN4LDU2KCVyc3ApCisJIyBq MiA9IGluMgorCW1vdnEJJXI5LDY0KCVyc3ApCisJIyBqNCA9IGluNAorCW1vdnEJJXJheCw3Migl cnNwKQorCSMgajYgPSBpbjYKKwltb3ZxCSVyMTAsODAoJXJzcCkKKwkjIGo4ID0gaW44CisJbW92 cQklcjExLDg4KCVyc3ApCisJIyBqMTAgPSBpbjEwCisJbW92cQklcjEyLDk2KCVyc3ApCisJIyBq MTIgPSBpbjEyCisJbW92cQklcjEzLDEwNCglcnNwKQorCSMgajE0ID0gaW4xNAorCW1vdnEJJXIx NCwxMTIoJXJzcCkKKwkjIHhfYmFja3VwID0geAorCW1vdnEJJXI4LDEyMCglcnNwKQorIyBieXRl c2F0bGVhc3QxOgorLl9ieXRlc2F0bGVhc3QxOgorCSMgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQ8PyBieXRlcyAtIDY0CisJY21wCSQ2NCwlcmR4CisJIyBjb21tZW50OmZwIHN0YWNrIHVuY2hh bmdlZCBieSBqdW1wCisJIyAgIGdvdG8gbm9jb3B5IGlmICF1bnNpZ25lZDwKKwlqYWUJLl9ub2Nv cHkKKwkjICAgICBjdGFyZ2V0ID0gb3V0CisJbW92cQklcmRpLDEyOCglcnNwKQorCSMgICAgIG91 dCA9ICZ0bXAKKwlsZWFxCTE5MiglcnNwKSwlcmRpCisJIyAgICAgaSA9IGJ5dGVzCisJbW92CSVy ZHgsJXJjeAorCSMgICAgIHdoaWxlIChpKSB7ICpvdXQrKyA9ICptKys7IC0taSB9CisJcmVwCW1v dnNiCisJIyAgICAgb3V0ID0gJnRtcAorCWxlYXEJMTkyKCVyc3ApLCVyZGkKKwkjICAgICBtID0g JnRtcAorCWxlYXEJMTkyKCVyc3ApLCVyc2kKKwkjIGNvbW1lbnQ6ZnAgc3RhY2sgdW5jaGFuZ2Vk IGJ5IGZhbGx0aHJvdWdoCisjICAgbm9jb3B5OgorLl9ub2NvcHk6CisJIyAgIG91dF9iYWNrdXAg PSBvdXQKKwltb3ZxCSVyZGksMTM2KCVyc3ApCisJIyAgIG1fYmFja3VwID0gbQorCW1vdnEJJXJz aSwxNDQoJXJzcCkKKwkjICAgYnl0ZXNfYmFja3VwID0gYnl0ZXMKKwltb3ZxCSVyZHgsMTUyKCVy c3ApCisJIyAgIHgxID0gajAKKwltb3ZxCTU2KCVyc3ApLCVyZGkKKwkjICAgeDAgPSB4MQorCW1v dgklcmRpLCVyZHgKKwkjICAgKHVpbnQ2NCkgeDEgPj49IDMyCisJc2hyCSQzMiwlcmRpCisJIyAg IAkJeDMgPSBqMgorCW1vdnEJNjQoJXJzcCksJXJzaQorCSMgICAJCXgyID0geDMKKwltb3YJJXJz aSwlcmN4CisJIyAgIAkJKHVpbnQ2NCkgeDMgPj49IDMyCisJc2hyCSQzMiwlcnNpCisJIyAgIHg1 ID0gajQKKwltb3ZxCTcyKCVyc3ApLCVyOAorCSMgICB4NCA9IHg1CisJbW92CSVyOCwlcjkKKwkj ICAgKHVpbnQ2NCkgeDUgPj49IDMyCisJc2hyCSQzMiwlcjgKKwkjICAgeDVfc3RhY2sgPSB4NQor CW1vdnEJJXI4LDE2MCglcnNwKQorCSMgICAJCXg3ID0gajYKKwltb3ZxCTgwKCVyc3ApLCVyOAor CSMgICAJCXg2ID0geDcKKwltb3YJJXI4LCVyYXgKKwkjICAgCQkodWludDY0KSB4NyA+Pj0gMzIK KwlzaHIJJDMyLCVyOAorCSMgICB4OSA9IGo4CisJbW92cQk4OCglcnNwKSwlcjEwCisJIyAgIHg4 ID0geDkKKwltb3YJJXIxMCwlcjExCisJIyAgICh1aW50NjQpIHg5ID4+PSAzMgorCXNocgkkMzIs JXIxMAorCSMgICAJCXgxMSA9IGoxMAorCW1vdnEJOTYoJXJzcCksJXIxMgorCSMgICAJCXgxMCA9 IHgxMQorCW1vdgklcjEyLCVyMTMKKwkjICAgCQl4MTBfc3RhY2sgPSB4MTAKKwltb3ZxCSVyMTMs MTY4KCVyc3ApCisJIyAgIAkJKHVpbnQ2NCkgeDExID4+PSAzMgorCXNocgkkMzIsJXIxMgorCSMg ICB4MTMgPSBqMTIKKwltb3ZxCTEwNCglcnNwKSwlcjEzCisJIyAgIHgxMiA9IHgxMworCW1vdgkl cjEzLCVyMTQKKwkjICAgKHVpbnQ2NCkgeDEzID4+PSAzMgorCXNocgkkMzIsJXIxMworCSMgICAJ CXgxNSA9IGoxNAorCW1vdnEJMTEyKCVyc3ApLCVyMTUKKwkjICAgCQl4MTQgPSB4MTUKKwltb3YJ JXIxNSwlcmJ4CisJIyAgIAkJKHVpbnQ2NCkgeDE1ID4+PSAzMgorCXNocgkkMzIsJXIxNQorCSMg ICAJCXgxNV9zdGFjayA9IHgxNQorCW1vdnEJJXIxNSwxNzYoJXJzcCkKKwkjICAgaSA9IDIwCisJ bW92CSQyMCwlcjE1CisjICAgbWFpbmxvb3A6CisuX21haW5sb29wOgorCSMgICBpX2JhY2t1cCA9 IGkKKwltb3ZxCSVyMTUsMTg0KCVyc3ApCisJIyAJCXg1ID0geDVfc3RhY2sKKwltb3ZxCTE2MCgl cnNwKSwlcjE1CisJIyBhID0geDEyICsgeDAKKwlsZWEJKCVyMTQsJXJkeCksJXJicAorCSMgKHVp bnQzMikgYSA8PDw9IDcKKwlyb2wJJDcsJWVicAorCSMgeDQgXj0gYQorCXhvcgklcmJwLCVyOQor CSMgCQliID0geDEgKyB4NQorCWxlYQkoJXJkaSwlcjE1KSwlcmJwCisJIyAJCSh1aW50MzIpIGIg PDw8PSA3CisJcm9sCSQ3LCVlYnAKKwkjIAkJeDkgXj0gYgorCXhvcgklcmJwLCVyMTAKKwkjIGEg PSB4MCArIHg0CisJbGVhCSglcmR4LCVyOSksJXJicAorCSMgKHVpbnQzMikgYSA8PDw9IDkKKwly b2wJJDksJWVicAorCSMgeDggXj0gYQorCXhvcgklcmJwLCVyMTEKKwkjIAkJYiA9IHg1ICsgeDkK KwlsZWEJKCVyMTUsJXIxMCksJXJicAorCSMgCQkodWludDMyKSBiIDw8PD0gOQorCXJvbAkkOSwl ZWJwCisJIyAJCXgxMyBePSBiCisJeG9yCSVyYnAsJXIxMworCSMgYSA9IHg0ICsgeDgKKwlsZWEJ KCVyOSwlcjExKSwlcmJwCisJIyAodWludDMyKSBhIDw8PD0gMTMKKwlyb2wJJDEzLCVlYnAKKwkj IHgxMiBePSBhCisJeG9yCSVyYnAsJXIxNAorCSMgCQliID0geDkgKyB4MTMKKwlsZWEJKCVyMTAs JXIxMyksJXJicAorCSMgCQkodWludDMyKSBiIDw8PD0gMTMKKwlyb2wJJDEzLCVlYnAKKwkjIAkJ eDEgXj0gYgorCXhvcgklcmJwLCVyZGkKKwkjIGEgPSB4OCArIHgxMgorCWxlYQkoJXIxMSwlcjE0 KSwlcmJwCisJIyAodWludDMyKSBhIDw8PD0gMTgKKwlyb2wJJDE4LCVlYnAKKwkjIHgwIF49IGEK Kwl4b3IJJXJicCwlcmR4CisJIyAJCWIgPSB4MTMgKyB4MQorCWxlYQkoJXIxMywlcmRpKSwlcmJw CisJIyAJCSh1aW50MzIpIGIgPDw8PSAxOAorCXJvbAkkMTgsJWVicAorCSMgCQl4NSBePSBiCisJ eG9yCSVyYnAsJXIxNQorCSMgCQkJCXgxMCA9IHgxMF9zdGFjaworCW1vdnEJMTY4KCVyc3ApLCVy YnAKKwkjIAkJeDVfc3RhY2sgPSB4NQorCW1vdnEJJXIxNSwxNjAoJXJzcCkKKwkjIAkJCQljID0g eDYgKyB4MTAKKwlsZWEJKCVyYXgsJXJicCksJXIxNQorCSMgCQkJCSh1aW50MzIpIGMgPDw8PSA3 CisJcm9sCSQ3LCVyMTVkCisJIyAJCQkJeDE0IF49IGMKKwl4b3IJJXIxNSwlcmJ4CisJIyAJCQkJ YyA9IHgxMCArIHgxNAorCWxlYQkoJXJicCwlcmJ4KSwlcjE1CisJIyAJCQkJKHVpbnQzMikgYyA8 PDw9IDkKKwlyb2wJJDksJXIxNWQKKwkjIAkJCQl4MiBePSBjCisJeG9yCSVyMTUsJXJjeAorCSMg CQkJCWMgPSB4MTQgKyB4MgorCWxlYQkoJXJieCwlcmN4KSwlcjE1CisJIyAJCQkJKHVpbnQzMikg YyA8PDw9IDEzCisJcm9sCSQxMywlcjE1ZAorCSMgCQkJCXg2IF49IGMKKwl4b3IJJXIxNSwlcmF4 CisJIyAJCQkJYyA9IHgyICsgeDYKKwlsZWEJKCVyY3gsJXJheCksJXIxNQorCSMgCQkJCSh1aW50 MzIpIGMgPDw8PSAxOAorCXJvbAkkMTgsJXIxNWQKKwkjIAkJCQl4MTAgXj0gYworCXhvcgklcjE1 LCVyYnAKKwkjIAkJCQkJCXgxNSA9IHgxNV9zdGFjaworCW1vdnEJMTc2KCVyc3ApLCVyMTUKKwkj IAkJCQl4MTBfc3RhY2sgPSB4MTAKKwltb3ZxCSVyYnAsMTY4KCVyc3ApCisJIyAJCQkJCQlkID0g eDExICsgeDE1CisJbGVhCSglcjEyLCVyMTUpLCVyYnAKKwkjIAkJCQkJCSh1aW50MzIpIGQgPDw8 PSA3CisJcm9sCSQ3LCVlYnAKKwkjIAkJCQkJCXgzIF49IGQKKwl4b3IJJXJicCwlcnNpCisJIyAJ CQkJCQlkID0geDE1ICsgeDMKKwlsZWEJKCVyMTUsJXJzaSksJXJicAorCSMgCQkJCQkJKHVpbnQz MikgZCA8PDw9IDkKKwlyb2wJJDksJWVicAorCSMgCQkJCQkJeDcgXj0gZAorCXhvcgklcmJwLCVy OAorCSMgCQkJCQkJZCA9IHgzICsgeDcKKwlsZWEJKCVyc2ksJXI4KSwlcmJwCisJIyAJCQkJCQko dWludDMyKSBkIDw8PD0gMTMKKwlyb2wJJDEzLCVlYnAKKwkjIAkJCQkJCXgxMSBePSBkCisJeG9y CSVyYnAsJXIxMgorCSMgCQkJCQkJZCA9IHg3ICsgeDExCisJbGVhCSglcjgsJXIxMiksJXJicAor CSMgCQkJCQkJKHVpbnQzMikgZCA8PDw9IDE4CisJcm9sCSQxOCwlZWJwCisJIyAJCQkJCQl4MTUg Xj0gZAorCXhvcgklcmJwLCVyMTUKKwkjIAkJCQkJCXgxNV9zdGFjayA9IHgxNQorCW1vdnEJJXIx NSwxNzYoJXJzcCkKKwkjIAkJeDUgPSB4NV9zdGFjaworCW1vdnEJMTYwKCVyc3ApLCVyMTUKKwkj IGEgPSB4MyArIHgwCisJbGVhCSglcnNpLCVyZHgpLCVyYnAKKwkjICh1aW50MzIpIGEgPDw8PSA3 CisJcm9sCSQ3LCVlYnAKKwkjIHgxIF49IGEKKwl4b3IJJXJicCwlcmRpCisJIyAJCWIgPSB4NCAr IHg1CisJbGVhCSglcjksJXIxNSksJXJicAorCSMgCQkodWludDMyKSBiIDw8PD0gNworCXJvbAkk NywlZWJwCisJIyAJCXg2IF49IGIKKwl4b3IJJXJicCwlcmF4CisJIyBhID0geDAgKyB4MQorCWxl YQkoJXJkeCwlcmRpKSwlcmJwCisJIyAodWludDMyKSBhIDw8PD0gOQorCXJvbAkkOSwlZWJwCisJ IyB4MiBePSBhCisJeG9yCSVyYnAsJXJjeAorCSMgCQliID0geDUgKyB4NgorCWxlYQkoJXIxNSwl cmF4KSwlcmJwCisJIyAJCSh1aW50MzIpIGIgPDw8PSA5CisJcm9sCSQ5LCVlYnAKKwkjIAkJeDcg Xj0gYgorCXhvcgklcmJwLCVyOAorCSMgYSA9IHgxICsgeDIKKwlsZWEJKCVyZGksJXJjeCksJXJi cAorCSMgKHVpbnQzMikgYSA8PDw9IDEzCisJcm9sCSQxMywlZWJwCisJIyB4MyBePSBhCisJeG9y CSVyYnAsJXJzaQorCSMgCQliID0geDYgKyB4NworCWxlYQkoJXJheCwlcjgpLCVyYnAKKwkjIAkJ KHVpbnQzMikgYiA8PDw9IDEzCisJcm9sCSQxMywlZWJwCisJIyAJCXg0IF49IGIKKwl4b3IJJXJi cCwlcjkKKwkjIGEgPSB4MiArIHgzCisJbGVhCSglcmN4LCVyc2kpLCVyYnAKKwkjICh1aW50MzIp IGEgPDw8PSAxOAorCXJvbAkkMTgsJWVicAorCSMgeDAgXj0gYQorCXhvcgklcmJwLCVyZHgKKwkj IAkJYiA9IHg3ICsgeDQKKwlsZWEJKCVyOCwlcjkpLCVyYnAKKwkjIAkJKHVpbnQzMikgYiA8PDw9 IDE4CisJcm9sCSQxOCwlZWJwCisJIyAJCXg1IF49IGIKKwl4b3IJJXJicCwlcjE1CisJIyAJCQkJ eDEwID0geDEwX3N0YWNrCisJbW92cQkxNjgoJXJzcCksJXJicAorCSMgCQl4NV9zdGFjayA9IHg1 CisJbW92cQklcjE1LDE2MCglcnNwKQorCSMgCQkJCWMgPSB4OSArIHgxMAorCWxlYQkoJXIxMCwl cmJwKSwlcjE1CisJIyAJCQkJKHVpbnQzMikgYyA8PDw9IDcKKwlyb2wJJDcsJXIxNWQKKwkjIAkJ CQl4MTEgXj0gYworCXhvcgklcjE1LCVyMTIKKwkjIAkJCQljID0geDEwICsgeDExCisJbGVhCSgl cmJwLCVyMTIpLCVyMTUKKwkjIAkJCQkodWludDMyKSBjIDw8PD0gOQorCXJvbAkkOSwlcjE1ZAor CSMgCQkJCXg4IF49IGMKKwl4b3IJJXIxNSwlcjExCisJIyAJCQkJYyA9IHgxMSArIHg4CisJbGVh CSglcjEyLCVyMTEpLCVyMTUKKwkjIAkJCQkodWludDMyKSBjIDw8PD0gMTMKKwlyb2wJJDEzLCVy MTVkCisJIyAJCQkJeDkgXj0gYworCXhvcgklcjE1LCVyMTAKKwkjIAkJCQljID0geDggKyB4OQor CWxlYQkoJXIxMSwlcjEwKSwlcjE1CisJIyAJCQkJKHVpbnQzMikgYyA8PDw9IDE4CisJcm9sCSQx OCwlcjE1ZAorCSMgCQkJCXgxMCBePSBjCisJeG9yCSVyMTUsJXJicAorCSMgCQkJCQkJeDE1ID0g eDE1X3N0YWNrCisJbW92cQkxNzYoJXJzcCksJXIxNQorCSMgCQkJCXgxMF9zdGFjayA9IHgxMAor CW1vdnEJJXJicCwxNjgoJXJzcCkKKwkjIAkJCQkJCWQgPSB4MTQgKyB4MTUKKwlsZWEJKCVyYngs JXIxNSksJXJicAorCSMgCQkJCQkJKHVpbnQzMikgZCA8PDw9IDcKKwlyb2wJJDcsJWVicAorCSMg CQkJCQkJeDEyIF49IGQKKwl4b3IJJXJicCwlcjE0CisJIyAJCQkJCQlkID0geDE1ICsgeDEyCisJ bGVhCSglcjE1LCVyMTQpLCVyYnAKKwkjIAkJCQkJCSh1aW50MzIpIGQgPDw8PSA5CisJcm9sCSQ5 LCVlYnAKKwkjIAkJCQkJCXgxMyBePSBkCisJeG9yCSVyYnAsJXIxMworCSMgCQkJCQkJZCA9IHgx MiArIHgxMworCWxlYQkoJXIxNCwlcjEzKSwlcmJwCisJIyAJCQkJCQkodWludDMyKSBkIDw8PD0g MTMKKwlyb2wJJDEzLCVlYnAKKwkjIAkJCQkJCXgxNCBePSBkCisJeG9yCSVyYnAsJXJieAorCSMg CQkJCQkJZCA9IHgxMyArIHgxNAorCWxlYQkoJXIxMywlcmJ4KSwlcmJwCisJIyAJCQkJCQkodWlu dDMyKSBkIDw8PD0gMTgKKwlyb2wJJDE4LCVlYnAKKwkjIAkJCQkJCXgxNSBePSBkCisJeG9yCSVy YnAsJXIxNQorCSMgCQkJCQkJeDE1X3N0YWNrID0geDE1CisJbW92cQklcjE1LDE3NiglcnNwKQor CSMgCQl4NSA9IHg1X3N0YWNrCisJbW92cQkxNjAoJXJzcCksJXIxNQorCSMgYSA9IHgxMiArIHgw CisJbGVhCSglcjE0LCVyZHgpLCVyYnAKKwkjICh1aW50MzIpIGEgPDw8PSA3CisJcm9sCSQ3LCVl YnAKKwkjIHg0IF49IGEKKwl4b3IJJXJicCwlcjkKKwkjIAkJYiA9IHgxICsgeDUKKwlsZWEJKCVy ZGksJXIxNSksJXJicAorCSMgCQkodWludDMyKSBiIDw8PD0gNworCXJvbAkkNywlZWJwCisJIyAJ CXg5IF49IGIKKwl4b3IJJXJicCwlcjEwCisJIyBhID0geDAgKyB4NAorCWxlYQkoJXJkeCwlcjkp LCVyYnAKKwkjICh1aW50MzIpIGEgPDw8PSA5CisJcm9sCSQ5LCVlYnAKKwkjIHg4IF49IGEKKwl4 b3IJJXJicCwlcjExCisJIyAJCWIgPSB4NSArIHg5CisJbGVhCSglcjE1LCVyMTApLCVyYnAKKwkj IAkJKHVpbnQzMikgYiA8PDw9IDkKKwlyb2wJJDksJWVicAorCSMgCQl4MTMgXj0gYgorCXhvcgkl cmJwLCVyMTMKKwkjIGEgPSB4NCArIHg4CisJbGVhCSglcjksJXIxMSksJXJicAorCSMgKHVpbnQz MikgYSA8PDw9IDEzCisJcm9sCSQxMywlZWJwCisJIyB4MTIgXj0gYQorCXhvcgklcmJwLCVyMTQK KwkjIAkJYiA9IHg5ICsgeDEzCisJbGVhCSglcjEwLCVyMTMpLCVyYnAKKwkjIAkJKHVpbnQzMikg YiA8PDw9IDEzCisJcm9sCSQxMywlZWJwCisJIyAJCXgxIF49IGIKKwl4b3IJJXJicCwlcmRpCisJ IyBhID0geDggKyB4MTIKKwlsZWEJKCVyMTEsJXIxNCksJXJicAorCSMgKHVpbnQzMikgYSA8PDw9 IDE4CisJcm9sCSQxOCwlZWJwCisJIyB4MCBePSBhCisJeG9yCSVyYnAsJXJkeAorCSMgCQliID0g eDEzICsgeDEKKwlsZWEJKCVyMTMsJXJkaSksJXJicAorCSMgCQkodWludDMyKSBiIDw8PD0gMTgK Kwlyb2wJJDE4LCVlYnAKKwkjIAkJeDUgXj0gYgorCXhvcgklcmJwLCVyMTUKKwkjIAkJCQl4MTAg PSB4MTBfc3RhY2sKKwltb3ZxCTE2OCglcnNwKSwlcmJwCisJIyAJCXg1X3N0YWNrID0geDUKKwlt b3ZxCSVyMTUsMTYwKCVyc3ApCisJIyAJCQkJYyA9IHg2ICsgeDEwCisJbGVhCSglcmF4LCVyYnAp LCVyMTUKKwkjIAkJCQkodWludDMyKSBjIDw8PD0gNworCXJvbAkkNywlcjE1ZAorCSMgCQkJCXgx NCBePSBjCisJeG9yCSVyMTUsJXJieAorCSMgCQkJCWMgPSB4MTAgKyB4MTQKKwlsZWEJKCVyYnAs JXJieCksJXIxNQorCSMgCQkJCSh1aW50MzIpIGMgPDw8PSA5CisJcm9sCSQ5LCVyMTVkCisJIyAJ CQkJeDIgXj0gYworCXhvcgklcjE1LCVyY3gKKwkjIAkJCQljID0geDE0ICsgeDIKKwlsZWEJKCVy YngsJXJjeCksJXIxNQorCSMgCQkJCSh1aW50MzIpIGMgPDw8PSAxMworCXJvbAkkMTMsJXIxNWQK KwkjIAkJCQl4NiBePSBjCisJeG9yCSVyMTUsJXJheAorCSMgCQkJCWMgPSB4MiArIHg2CisJbGVh CSglcmN4LCVyYXgpLCVyMTUKKwkjIAkJCQkodWludDMyKSBjIDw8PD0gMTgKKwlyb2wJJDE4LCVy MTVkCisJIyAJCQkJeDEwIF49IGMKKwl4b3IJJXIxNSwlcmJwCisJIyAJCQkJCQl4MTUgPSB4MTVf c3RhY2sKKwltb3ZxCTE3NiglcnNwKSwlcjE1CisJIyAJCQkJeDEwX3N0YWNrID0geDEwCisJbW92 cQklcmJwLDE2OCglcnNwKQorCSMgCQkJCQkJZCA9IHgxMSArIHgxNQorCWxlYQkoJXIxMiwlcjE1 KSwlcmJwCisJIyAJCQkJCQkodWludDMyKSBkIDw8PD0gNworCXJvbAkkNywlZWJwCisJIyAJCQkJ CQl4MyBePSBkCisJeG9yCSVyYnAsJXJzaQorCSMgCQkJCQkJZCA9IHgxNSArIHgzCisJbGVhCSgl cjE1LCVyc2kpLCVyYnAKKwkjIAkJCQkJCSh1aW50MzIpIGQgPDw8PSA5CisJcm9sCSQ5LCVlYnAK KwkjIAkJCQkJCXg3IF49IGQKKwl4b3IJJXJicCwlcjgKKwkjIAkJCQkJCWQgPSB4MyArIHg3CisJ bGVhCSglcnNpLCVyOCksJXJicAorCSMgCQkJCQkJKHVpbnQzMikgZCA8PDw9IDEzCisJcm9sCSQx MywlZWJwCisJIyAJCQkJCQl4MTEgXj0gZAorCXhvcgklcmJwLCVyMTIKKwkjIAkJCQkJCWQgPSB4 NyArIHgxMQorCWxlYQkoJXI4LCVyMTIpLCVyYnAKKwkjIAkJCQkJCSh1aW50MzIpIGQgPDw8PSAx OAorCXJvbAkkMTgsJWVicAorCSMgCQkJCQkJeDE1IF49IGQKKwl4b3IJJXJicCwlcjE1CisJIyAJ CQkJCQl4MTVfc3RhY2sgPSB4MTUKKwltb3ZxCSVyMTUsMTc2KCVyc3ApCisJIyAJCXg1ID0geDVf c3RhY2sKKwltb3ZxCTE2MCglcnNwKSwlcjE1CisJIyBhID0geDMgKyB4MAorCWxlYQkoJXJzaSwl cmR4KSwlcmJwCisJIyAodWludDMyKSBhIDw8PD0gNworCXJvbAkkNywlZWJwCisJIyB4MSBePSBh CisJeG9yCSVyYnAsJXJkaQorCSMgCQliID0geDQgKyB4NQorCWxlYQkoJXI5LCVyMTUpLCVyYnAK KwkjIAkJKHVpbnQzMikgYiA8PDw9IDcKKwlyb2wJJDcsJWVicAorCSMgCQl4NiBePSBiCisJeG9y CSVyYnAsJXJheAorCSMgYSA9IHgwICsgeDEKKwlsZWEJKCVyZHgsJXJkaSksJXJicAorCSMgKHVp bnQzMikgYSA8PDw9IDkKKwlyb2wJJDksJWVicAorCSMgeDIgXj0gYQorCXhvcgklcmJwLCVyY3gK KwkjIAkJYiA9IHg1ICsgeDYKKwlsZWEJKCVyMTUsJXJheCksJXJicAorCSMgCQkodWludDMyKSBi IDw8PD0gOQorCXJvbAkkOSwlZWJwCisJIyAJCXg3IF49IGIKKwl4b3IJJXJicCwlcjgKKwkjIGEg PSB4MSArIHgyCisJbGVhCSglcmRpLCVyY3gpLCVyYnAKKwkjICh1aW50MzIpIGEgPDw8PSAxMwor CXJvbAkkMTMsJWVicAorCSMgeDMgXj0gYQorCXhvcgklcmJwLCVyc2kKKwkjIAkJYiA9IHg2ICsg eDcKKwlsZWEJKCVyYXgsJXI4KSwlcmJwCisJIyAJCSh1aW50MzIpIGIgPDw8PSAxMworCXJvbAkk MTMsJWVicAorCSMgCQl4NCBePSBiCisJeG9yCSVyYnAsJXI5CisJIyBhID0geDIgKyB4MworCWxl YQkoJXJjeCwlcnNpKSwlcmJwCisJIyAodWludDMyKSBhIDw8PD0gMTgKKwlyb2wJJDE4LCVlYnAK KwkjIHgwIF49IGEKKwl4b3IJJXJicCwlcmR4CisJIyAJCWIgPSB4NyArIHg0CisJbGVhCSglcjgs JXI5KSwlcmJwCisJIyAJCSh1aW50MzIpIGIgPDw8PSAxOAorCXJvbAkkMTgsJWVicAorCSMgCQl4 NSBePSBiCisJeG9yCSVyYnAsJXIxNQorCSMgCQkJCXgxMCA9IHgxMF9zdGFjaworCW1vdnEJMTY4 KCVyc3ApLCVyYnAKKwkjIAkJeDVfc3RhY2sgPSB4NQorCW1vdnEJJXIxNSwxNjAoJXJzcCkKKwkj IAkJCQljID0geDkgKyB4MTAKKwlsZWEJKCVyMTAsJXJicCksJXIxNQorCSMgCQkJCSh1aW50MzIp IGMgPDw8PSA3CisJcm9sCSQ3LCVyMTVkCisJIyAJCQkJeDExIF49IGMKKwl4b3IJJXIxNSwlcjEy CisJIyAJCQkJYyA9IHgxMCArIHgxMQorCWxlYQkoJXJicCwlcjEyKSwlcjE1CisJIyAJCQkJKHVp bnQzMikgYyA8PDw9IDkKKwlyb2wJJDksJXIxNWQKKwkjIAkJCQl4OCBePSBjCisJeG9yCSVyMTUs JXIxMQorCSMgCQkJCWMgPSB4MTEgKyB4OAorCWxlYQkoJXIxMiwlcjExKSwlcjE1CisJIyAJCQkJ KHVpbnQzMikgYyA8PDw9IDEzCisJcm9sCSQxMywlcjE1ZAorCSMgCQkJCXg5IF49IGMKKwl4b3IJ JXIxNSwlcjEwCisJIyAJCQkJYyA9IHg4ICsgeDkKKwlsZWEJKCVyMTEsJXIxMCksJXIxNQorCSMg CQkJCSh1aW50MzIpIGMgPDw8PSAxOAorCXJvbAkkMTgsJXIxNWQKKwkjIAkJCQl4MTAgXj0gYwor CXhvcgklcjE1LCVyYnAKKwkjIAkJCQkJCXgxNSA9IHgxNV9zdGFjaworCW1vdnEJMTc2KCVyc3Ap LCVyMTUKKwkjIAkJCQl4MTBfc3RhY2sgPSB4MTAKKwltb3ZxCSVyYnAsMTY4KCVyc3ApCisJIyAJ CQkJCQlkID0geDE0ICsgeDE1CisJbGVhCSglcmJ4LCVyMTUpLCVyYnAKKwkjIAkJCQkJCSh1aW50 MzIpIGQgPDw8PSA3CisJcm9sCSQ3LCVlYnAKKwkjIAkJCQkJCXgxMiBePSBkCisJeG9yCSVyYnAs JXIxNAorCSMgCQkJCQkJZCA9IHgxNSArIHgxMgorCWxlYQkoJXIxNSwlcjE0KSwlcmJwCisJIyAJ CQkJCQkodWludDMyKSBkIDw8PD0gOQorCXJvbAkkOSwlZWJwCisJIyAJCQkJCQl4MTMgXj0gZAor CXhvcgklcmJwLCVyMTMKKwkjIAkJCQkJCWQgPSB4MTIgKyB4MTMKKwlsZWEJKCVyMTQsJXIxMyks JXJicAorCSMgCQkJCQkJKHVpbnQzMikgZCA8PDw9IDEzCisJcm9sCSQxMywlZWJwCisJIyAJCQkJ CQl4MTQgXj0gZAorCXhvcgklcmJwLCVyYngKKwkjIAkJCQkJCWQgPSB4MTMgKyB4MTQKKwlsZWEJ KCVyMTMsJXJieCksJXJicAorCSMgCQkJCQkJKHVpbnQzMikgZCA8PDw9IDE4CisJcm9sCSQxOCwl ZWJwCisJIyAJCQkJCQl4MTUgXj0gZAorCXhvcgklcmJwLCVyMTUKKwkjIAkJCQkJCXgxNV9zdGFj ayA9IHgxNQorCW1vdnEJJXIxNSwxNzYoJXJzcCkKKwkjICAgaSA9IGlfYmFja3VwCisJbW92cQkx ODQoJXJzcCksJXIxNQorCSMgICAgICAgICAgICAgICAgICB1bnNpZ25lZD4/IGkgLT0gNAorCXN1 YgkkNCwlcjE1CisJIyBjb21tZW50OmZwIHN0YWNrIHVuY2hhbmdlZCBieSBqdW1wCisJIyBnb3Rv IG1haW5sb29wIGlmIHVuc2lnbmVkPgorCWphCS5fbWFpbmxvb3AKKwkjICAgKHVpbnQzMikgeDIg Kz0gajIKKwlhZGRsCTY0KCVyc3ApLCVlY3gKKwkjICAgeDMgPDw9IDMyCisJc2hsCSQzMiwlcnNp CisJIyAgIHgzICs9IGoyCisJYWRkcQk2NCglcnNwKSwlcnNpCisJIyAgICh1aW50NjQpIHgzID4+ PSAzMgorCXNocgkkMzIsJXJzaQorCSMgICB4MyA8PD0gMzIKKwlzaGwJJDMyLCVyc2kKKwkjICAg eDIgKz0geDMKKwlhZGQJJXJzaSwlcmN4CisJIyAgICh1aW50MzIpIHg2ICs9IGo2CisJYWRkbAk4 MCglcnNwKSwlZWF4CisJIyAgIHg3IDw8PSAzMgorCXNobAkkMzIsJXI4CisJIyAgIHg3ICs9IGo2 CisJYWRkcQk4MCglcnNwKSwlcjgKKwkjICAgKHVpbnQ2NCkgeDcgPj49IDMyCisJc2hyCSQzMiwl cjgKKwkjICAgeDcgPDw9IDMyCisJc2hsCSQzMiwlcjgKKwkjICAgeDYgKz0geDcKKwlhZGQJJXI4 LCVyYXgKKwkjICAgKHVpbnQzMikgeDggKz0gajgKKwlhZGRsCTg4KCVyc3ApLCVyMTFkCisJIyAg IHg5IDw8PSAzMgorCXNobAkkMzIsJXIxMAorCSMgICB4OSArPSBqOAorCWFkZHEJODgoJXJzcCks JXIxMAorCSMgICAodWludDY0KSB4OSA+Pj0gMzIKKwlzaHIJJDMyLCVyMTAKKwkjICAgeDkgPDw9 IDMyCisJc2hsCSQzMiwlcjEwCisJIyAgIHg4ICs9IHg5CisJYWRkCSVyMTAsJXIxMQorCSMgICAo dWludDMyKSB4MTIgKz0gajEyCisJYWRkbAkxMDQoJXJzcCksJXIxNGQKKwkjICAgeDEzIDw8PSAz MgorCXNobAkkMzIsJXIxMworCSMgICB4MTMgKz0gajEyCisJYWRkcQkxMDQoJXJzcCksJXIxMwor CSMgICAodWludDY0KSB4MTMgPj49IDMyCisJc2hyCSQzMiwlcjEzCisJIyAgIHgxMyA8PD0gMzIK KwlzaGwJJDMyLCVyMTMKKwkjICAgeDEyICs9IHgxMworCWFkZAklcjEzLCVyMTQKKwkjICAgKHVp bnQzMikgeDAgKz0gajAKKwlhZGRsCTU2KCVyc3ApLCVlZHgKKwkjICAgeDEgPDw9IDMyCisJc2hs CSQzMiwlcmRpCisJIyAgIHgxICs9IGowCisJYWRkcQk1NiglcnNwKSwlcmRpCisJIyAgICh1aW50 NjQpIHgxID4+PSAzMgorCXNocgkkMzIsJXJkaQorCSMgICB4MSA8PD0gMzIKKwlzaGwJJDMyLCVy ZGkKKwkjICAgeDAgKz0geDEKKwlhZGQJJXJkaSwlcmR4CisJIyAgIHg1ID0geDVfc3RhY2sKKwlt b3ZxCTE2MCglcnNwKSwlcmRpCisJIyAgICh1aW50MzIpIHg0ICs9IGo0CisJYWRkbAk3MiglcnNw KSwlcjlkCisJIyAgIHg1IDw8PSAzMgorCXNobAkkMzIsJXJkaQorCSMgICB4NSArPSBqNAorCWFk ZHEJNzIoJXJzcCksJXJkaQorCSMgICAodWludDY0KSB4NSA+Pj0gMzIKKwlzaHIJJDMyLCVyZGkK KwkjICAgeDUgPDw9IDMyCisJc2hsCSQzMiwlcmRpCisJIyAgIHg0ICs9IHg1CisJYWRkCSVyZGks JXI5CisJIyAgIHgxMCA9IHgxMF9zdGFjaworCW1vdnEJMTY4KCVyc3ApLCVyOAorCSMgICAodWlu dDMyKSB4MTAgKz0gajEwCisJYWRkbAk5NiglcnNwKSwlcjhkCisJIyAgIHgxMSA8PD0gMzIKKwlz aGwJJDMyLCVyMTIKKwkjICAgeDExICs9IGoxMAorCWFkZHEJOTYoJXJzcCksJXIxMgorCSMgICAo dWludDY0KSB4MTEgPj49IDMyCisJc2hyCSQzMiwlcjEyCisJIyAgIHgxMSA8PD0gMzIKKwlzaGwJ JDMyLCVyMTIKKwkjICAgeDEwICs9IHgxMQorCWFkZAklcjEyLCVyOAorCSMgICB4MTUgPSB4MTVf c3RhY2sKKwltb3ZxCTE3NiglcnNwKSwlcmRpCisJIyAgICh1aW50MzIpIHgxNCArPSBqMTQKKwlh ZGRsCTExMiglcnNwKSwlZWJ4CisJIyAgIHgxNSA8PD0gMzIKKwlzaGwJJDMyLCVyZGkKKwkjICAg eDE1ICs9IGoxNAorCWFkZHEJMTEyKCVyc3ApLCVyZGkKKwkjICAgKHVpbnQ2NCkgeDE1ID4+PSAz MgorCXNocgkkMzIsJXJkaQorCSMgICB4MTUgPDw9IDMyCisJc2hsCSQzMiwlcmRpCisJIyAgIHgx NCArPSB4MTUKKwlhZGQJJXJkaSwlcmJ4CisJIyAgIG91dCA9IG91dF9iYWNrdXAKKwltb3ZxCTEz NiglcnNwKSwlcmRpCisJIyAgIG0gPSBtX2JhY2t1cAorCW1vdnEJMTQ0KCVyc3ApLCVyc2kKKwkj ICAgeDAgXj0gKih1aW50NjQgKikgKG0gKyAwKQorCXhvcnEJMCglcnNpKSwlcmR4CisJIyAgICoo dWludDY0ICopIChvdXQgKyAwKSA9IHgwCisJbW92cQklcmR4LDAoJXJkaSkKKwkjICAgeDIgXj0g Kih1aW50NjQgKikgKG0gKyA4KQorCXhvcnEJOCglcnNpKSwlcmN4CisJIyAgICoodWludDY0ICop IChvdXQgKyA4KSA9IHgyCisJbW92cQklcmN4LDgoJXJkaSkKKwkjICAgeDQgXj0gKih1aW50NjQg KikgKG0gKyAxNikKKwl4b3JxCTE2KCVyc2kpLCVyOQorCSMgICAqKHVpbnQ2NCAqKSAob3V0ICsg MTYpID0geDQKKwltb3ZxCSVyOSwxNiglcmRpKQorCSMgICB4NiBePSAqKHVpbnQ2NCAqKSAobSAr IDI0KQorCXhvcnEJMjQoJXJzaSksJXJheAorCSMgICAqKHVpbnQ2NCAqKSAob3V0ICsgMjQpID0g eDYKKwltb3ZxCSVyYXgsMjQoJXJkaSkKKwkjICAgeDggXj0gKih1aW50NjQgKikgKG0gKyAzMikK Kwl4b3JxCTMyKCVyc2kpLCVyMTEKKwkjICAgKih1aW50NjQgKikgKG91dCArIDMyKSA9IHg4CisJ bW92cQklcjExLDMyKCVyZGkpCisJIyAgIHgxMCBePSAqKHVpbnQ2NCAqKSAobSArIDQwKQorCXhv cnEJNDAoJXJzaSksJXI4CisJIyAgICoodWludDY0ICopIChvdXQgKyA0MCkgPSB4MTAKKwltb3Zx CSVyOCw0MCglcmRpKQorCSMgICB4MTIgXj0gKih1aW50NjQgKikgKG0gKyA0OCkKKwl4b3JxCTQ4 KCVyc2kpLCVyMTQKKwkjICAgKih1aW50NjQgKikgKG91dCArIDQ4KSA9IHgxMgorCW1vdnEJJXIx NCw0OCglcmRpKQorCSMgICB4MTQgXj0gKih1aW50NjQgKikgKG0gKyA1NikKKwl4b3JxCTU2KCVy c2kpLCVyYngKKwkjICAgKih1aW50NjQgKikgKG91dCArIDU2KSA9IHgxNAorCW1vdnEJJXJieCw1 NiglcmRpKQorCSMgICBieXRlcyA9IGJ5dGVzX2JhY2t1cAorCW1vdnEJMTUyKCVyc3ApLCVyZHgK KwkjICAgaW44ID0gajgKKwltb3ZxCTg4KCVyc3ApLCVyY3gKKwkjICAgaW44ICs9IDEKKwlhZGQJ JDEsJXJjeAorCSMgICBqOCA9IGluOAorCW1vdnEJJXJjeCw4OCglcnNwKQorCSMgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkPj8gdW5zaWduZWQ8PyBieXRlcyAtIDY0CisJY21wCSQ2 NCwlcmR4CisJIyBjb21tZW50OmZwIHN0YWNrIHVuY2hhbmdlZCBieSBqdW1wCisJIyAgIGdvdG8g Ynl0ZXNhdGxlYXN0NjUgaWYgdW5zaWduZWQ+CisJamEJLl9ieXRlc2F0bGVhc3Q2NQorCSMgY29t bWVudDpmcCBzdGFjayB1bmNoYW5nZWQgYnkganVtcAorCSMgICAgIGdvdG8gYnl0ZXNhdGxlYXN0 NjQgaWYgIXVuc2lnbmVkPAorCWphZQkuX2J5dGVzYXRsZWFzdDY0CisJIyAgICAgICBtID0gb3V0 CisJbW92CSVyZGksJXJzaQorCSMgICAgICAgb3V0ID0gY3RhcmdldAorCW1vdnEJMTI4KCVyc3Ap LCVyZGkKKwkjICAgICAgIGkgPSBieXRlcworCW1vdgklcmR4LCVyY3gKKwkjICAgICAgIHdoaWxl IChpKSB7ICpvdXQrKyA9ICptKys7IC0taSB9CisJcmVwCW1vdnNiCisJIyBjb21tZW50OmZwIHN0 YWNrIHVuY2hhbmdlZCBieSBmYWxsdGhyb3VnaAorIyAgICAgYnl0ZXNhdGxlYXN0NjQ6CisuX2J5 dGVzYXRsZWFzdDY0OgorCSMgICAgIHggPSB4X2JhY2t1cAorCW1vdnEJMTIwKCVyc3ApLCVyZGkK KwkjICAgICBpbjggPSBqOAorCW1vdnEJODgoJXJzcCksJXJzaQorCSMgICAgICoodWludDY0ICop ICh4ICsgMzIpID0gaW44CisJbW92cQklcnNpLDMyKCVyZGkpCisJIyAgICAgcjExID0gcjExX3N0 YWNrCisJbW92cQkwKCVyc3ApLCVyMTEKKwkjICAgICByMTIgPSByMTJfc3RhY2sKKwltb3ZxCTgo JXJzcCksJXIxMgorCSMgICAgIHIxMyA9IHIxM19zdGFjaworCW1vdnEJMTYoJXJzcCksJXIxMwor CSMgICAgIHIxNCA9IHIxNF9zdGFjaworCW1vdnEJMjQoJXJzcCksJXIxNAorCSMgICAgIHIxNSA9 IHIxNV9zdGFjaworCW1vdnEJMzIoJXJzcCksJXIxNQorCSMgICAgIHJieCA9IHJieF9zdGFjawor CW1vdnEJNDAoJXJzcCksJXJieAorCSMgICAgIHJicCA9IHJicF9zdGFjaworCW1vdnEJNDgoJXJz cCksJXJicAorCSMgY29tbWVudDpmcCBzdGFjayB1bmNoYW5nZWQgYnkgZmFsbHRocm91Z2gKKyMg ICAgIGRvbmU6CisuX2RvbmU6CisJIyAgICAgbGVhdmUKKwlhZGQJJXIxMSwlcnNwCisJbW92CSVy ZGksJXJheAorCW1vdgklcnNpLCVyZHgKKwlyZXQKKyMgICBieXRlc2F0bGVhc3Q2NToKKy5fYnl0 ZXNhdGxlYXN0NjU6CisJIyAgIGJ5dGVzIC09IDY0CisJc3ViCSQ2NCwlcmR4CisJIyAgIG91dCAr PSA2NAorCWFkZAkkNjQsJXJkaQorCSMgICBtICs9IDY0CisJYWRkCSQ2NCwlcnNpCisJIyBjb21t ZW50OmZwIHN0YWNrIHVuY2hhbmdlZCBieSBqdW1wCisJIyBnb3RvIGJ5dGVzYXRsZWFzdDEKKwlq bXAJLl9ieXRlc2F0bGVhc3QxCisjIGVudGVyIEVDUllQVF9rZXlzZXR1cAorLnRleHQKKy5wMmFs aWduIDUKKy5nbG9ibCBFQ1JZUFRfa2V5c2V0dXAKK0VDUllQVF9rZXlzZXR1cDoKKwltb3YJJXJz cCwlcjExCisJYW5kCSQzMSwlcjExCisJYWRkCSQyNTYsJXIxMQorCXN1YgklcjExLCVyc3AKKwkj ICAgayA9IGFyZzIKKwltb3YJJXJzaSwlcnNpCisJIyAgIGtiaXRzID0gYXJnMworCW1vdgklcmR4 LCVyZHgKKwkjICAgeCA9IGFyZzEKKwltb3YJJXJkaSwlcmRpCisJIyAgIGluMCA9ICoodWludDY0 ICopIChrICsgMCkKKwltb3ZxCTAoJXJzaSksJXI4CisJIyAgIGluMiA9ICoodWludDY0ICopIChr ICsgOCkKKwltb3ZxCTgoJXJzaSksJXI5CisJIyAgICoodWludDY0ICopICh4ICsgNCkgPSBpbjAK Kwltb3ZxCSVyOCw0KCVyZGkpCisJIyAgICoodWludDY0ICopICh4ICsgMTIpID0gaW4yCisJbW92 cQklcjksMTIoJXJkaSkKKwkjICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZDw/IGtiaXRzIC0g MjU2CisJY21wCSQyNTYsJXJkeAorCSMgY29tbWVudDpmcCBzdGFjayB1bmNoYW5nZWQgYnkganVt cAorCSMgICBnb3RvIGtiaXRzMTI4IGlmIHVuc2lnbmVkPAorCWpiCS5fa2JpdHMxMjgKKyMgICBr Yml0czI1NjoKKy5fa2JpdHMyNTY6CisJIyAgICAgaW4xMCA9ICoodWludDY0ICopIChrICsgMTYp CisJbW92cQkxNiglcnNpKSwlcmR4CisJIyAgICAgaW4xMiA9ICoodWludDY0ICopIChrICsgMjQp CisJbW92cQkyNCglcnNpKSwlcnNpCisJIyAgICAgKih1aW50NjQgKikgKHggKyA0NCkgPSBpbjEw CisJbW92cQklcmR4LDQ0KCVyZGkpCisJIyAgICAgKih1aW50NjQgKikgKHggKyA1MikgPSBpbjEy CisJbW92cQklcnNpLDUyKCVyZGkpCisJIyAgICAgaW4wID0gMTYzNDc2MDgwNQorCW1vdgkkMTYz NDc2MDgwNSwlcnNpCisJIyAgICAgaW40ID0gODU3NzYwODc4CisJbW92CSQ4NTc3NjA4NzgsJXJk eAorCSMgICAgIGluMTAgPSAyMDM2NDc3MjM0CisJbW92CSQyMDM2NDc3MjM0LCVyY3gKKwkjICAg ICBpbjE0ID0gMTc5NzI4NTIzNgorCW1vdgkkMTc5NzI4NTIzNiwlcjgKKwkjICAgICAqKHVpbnQz MiAqKSAoeCArIDApID0gaW4wCisJbW92bAklZXNpLDAoJXJkaSkKKwkjICAgICAqKHVpbnQzMiAq KSAoeCArIDIwKSA9IGluNAorCW1vdmwJJWVkeCwyMCglcmRpKQorCSMgICAgICoodWludDMyICop ICh4ICsgNDApID0gaW4xMAorCW1vdmwJJWVjeCw0MCglcmRpKQorCSMgICAgICoodWludDMyICop ICh4ICsgNjApID0gaW4xNAorCW1vdmwJJXI4ZCw2MCglcmRpKQorCSMgY29tbWVudDpmcCBzdGFj ayB1bmNoYW5nZWQgYnkganVtcAorCSMgICBnb3RvIGtleXNldHVwZG9uZQorCWptcAkuX2tleXNl dHVwZG9uZQorIyAgIGtiaXRzMTI4OgorLl9rYml0czEyODoKKwkjICAgICBpbjEwID0gKih1aW50 NjQgKikgKGsgKyAwKQorCW1vdnEJMCglcnNpKSwlcmR4CisJIyAgICAgaW4xMiA9ICoodWludDY0 ICopIChrICsgOCkKKwltb3ZxCTgoJXJzaSksJXJzaQorCSMgICAgICoodWludDY0ICopICh4ICsg NDQpID0gaW4xMAorCW1vdnEJJXJkeCw0NCglcmRpKQorCSMgICAgICoodWludDY0ICopICh4ICsg NTIpID0gaW4xMgorCW1vdnEJJXJzaSw1MiglcmRpKQorCSMgICAgIGluMCA9IDE2MzQ3NjA4MDUK Kwltb3YJJDE2MzQ3NjA4MDUsJXJzaQorCSMgICAgIGluNCA9IDgyNDIwNjQ0NgorCW1vdgkkODI0 MjA2NDQ2LCVyZHgKKwkjICAgICBpbjEwID0gMjAzNjQ3NzIzOAorCW1vdgkkMjAzNjQ3NzIzOCwl cmN4CisJIyAgICAgaW4xNCA9IDE3OTcyODUyMzYKKwltb3YJJDE3OTcyODUyMzYsJXI4CisJIyAg ICAgKih1aW50MzIgKikgKHggKyAwKSA9IGluMAorCW1vdmwJJWVzaSwwKCVyZGkpCisJIyAgICAg Kih1aW50MzIgKikgKHggKyAyMCkgPSBpbjQKKwltb3ZsCSVlZHgsMjAoJXJkaSkKKwkjICAgICAq KHVpbnQzMiAqKSAoeCArIDQwKSA9IGluMTAKKwltb3ZsCSVlY3gsNDAoJXJkaSkKKwkjICAgICAq KHVpbnQzMiAqKSAoeCArIDYwKSA9IGluMTQKKwltb3ZsCSVyOGQsNjAoJXJkaSkKKyMgICBrZXlz ZXR1cGRvbmU6CisuX2tleXNldHVwZG9uZToKKwkjIGxlYXZlCisJYWRkCSVyMTEsJXJzcAorCW1v dgklcmRpLCVyYXgKKwltb3YJJXJzaSwlcmR4CisJcmV0CisjIGVudGVyIEVDUllQVF9pdnNldHVw CisudGV4dAorLnAyYWxpZ24gNQorLmdsb2JsIEVDUllQVF9pdnNldHVwCitFQ1JZUFRfaXZzZXR1 cDoKKwltb3YJJXJzcCwlcjExCisJYW5kCSQzMSwlcjExCisJYWRkCSQyNTYsJXIxMQorCXN1Ygkl cjExLCVyc3AKKwkjICAgaXYgPSBhcmcyCisJbW92CSVyc2ksJXJzaQorCSMgICB4ID0gYXJnMQor CW1vdgklcmRpLCVyZGkKKwkjICAgaW42ID0gKih1aW50NjQgKikgKGl2ICsgMCkKKwltb3ZxCTAo JXJzaSksJXJzaQorCSMgICBpbjggPSAwCisJbW92CSQwLCVyOAorCSMgICAqKHVpbnQ2NCAqKSAo eCArIDI0KSA9IGluNgorCW1vdnEJJXJzaSwyNCglcmRpKQorCSMgICAqKHVpbnQ2NCAqKSAoeCAr IDMyKSA9IGluOAorCW1vdnEJJXI4LDMyKCVyZGkpCisJIyBsZWF2ZQorCWFkZAklcjExLCVyc3AK Kwltb3YJJXJkaSwlcmF4CisJbW92CSVyc2ksJXJkeAorCXJldApkaWZmIC0tZ2l0IGEvYXJjaC94 ODYvY3J5cHRvL3NhbHNhMjBfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL3NhbHNhMjBfZ2x1ZS5j CmluZGV4IDg1OTJjY2IuLjE2NTY4YjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9zYWxz YTIwX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vc2Fsc2EyMF9nbHVlLmMKQEAgLTgsNiAr OCw4IEBACiAgKiBhbmQgdG8gcmVtb3ZlIGV4dHJhbmVvdXMgY29tbWVudHMgYW5kIGZ1bmN0aW9u cyB0aGF0IGFyZSBub3QgbmVlZGVkLgogICogLSBpNTg2IHZlcnNpb24sIHJlbmFtZWQgYXMgc2Fs c2EyMC1pNTg2LWFzbV8zMi5TCiAgKiAgIGF2YWlsYWJsZSBmcm9tIDxodHRwOi8vY3IueXAudG8v c251ZmZsZS9zYWxzYTIwL3g4Ni1wbS9zYWxzYTIwLnM+CisgKiAtIHg4Ni02NCB2ZXJzaW9uLCBy ZW5hbWVkIGFzIHNhbHNhMjAteDg2XzY0LWFzbV82NC5TCisgKiAgIGF2YWlsYWJsZSBmcm9tIDxo dHRwOi8vY3IueXAudG8vc251ZmZsZS9zYWxzYTIwL2FtZDY0LTMvc2Fsc2EyMC5zPgogICoKICAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpkaWZmIC0tZ2l0IGEvY3J5cHRv L0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCAyMjEzNTZiLi5iMDQ4MWY3IDEwMDY0NAot LS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtNTA0LDYgKzUwNCwy MSBAQCBjb25maWcgQ1JZUFRPX1NBTFNBMjBfNTg2CiAJICBUaGUgU2Fsc2EyMCBzdHJlYW0gY2lw aGVyIGFsZ29yaXRobSBpcyBkZXNpZ25lZCBieSBEYW5pZWwgSi4KIAkgIEJlcm5zdGVpbiA8ZGpi QGNyLnlwLnRvPi4gU2VlIDxodHRwOi8vY3IueXAudG8vc251ZmZsZS5odG1sPgogCitjb25maWcg Q1JZUFRPX1NBTFNBMjBfWDg2XzY0CisJdHJpc3RhdGUgIlNhbHNhMjAgc3RyZWFtIGNpcGhlciBh bGdvcml0aG0gKHg4Nl82NCkgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiAoWDg2IHx8IFVN TF9YODYpICYmIDY0QklUCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JZUFRP X0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fU0FMU0EyMAorCWhlbHAKKwkgIFNhbHNhMjAgc3Ry ZWFtIGNpcGhlciBhbGdvcml0aG0uCisKKwkgIFNhbHNhMjAgaXMgYSBzdHJlYW0gY2lwaGVyIHN1 Ym1pdHRlZCB0byBlU1RSRUFNLCB0aGUgRUNSWVBUCisJICBTdHJlYW0gQ2lwaGVyIFByb2plY3Qu IFNlZSA8aHR0cDovL3d3dy5lY3J5cHQuZXUub3JnL3N0cmVhbS8+CisKKwkgIFRoZSBTYWxzYTIw IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtIGlzIGRlc2lnbmVkIGJ5IERhbmllbCBKLgorCSAgQmVy bnN0ZWluIDxkamJAY3IueXAudG8+LiBTZWUgPGh0dHA6Ly9jci55cC50by9zbnVmZmxlLmh0bWw+ CisKIGNvbmZpZyBDUllQVE9fREVGTEFURQogCXRyaXN0YXRlICJEZWZsYXRlIGNvbXByZXNzaW9u IGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotLSAKMS41LjMuNgoK ------=_Part_2208_22860522.1197828375219 Content-Type: text/x-python; name=indent.py Content-Transfer-Encoding: base64 X-Attachment-Id: f_fa9vvflq1 Content-Disposition: attachment; filename=indent.py IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgppbXBvcnQgc3lzCgojIHNsdXJwIGluIHRoZSBjb2RlIGZy b20gc3RkaW4KY29kZSA9IFtzLnN0cmlwKCkgZm9yIHMgaW4gc3lzLnN0ZGluXQoKIyByZXBsYWNl IGFsbCAicWhhc206ICIgc3RyaW5ncwpjb2RlID0gW3MucmVwbGFjZSgicWhhc206ICIsICIiKSBm b3IgcyBpbiBjb2RlXQoKIyBmaW5kIHRoZSBmaXJzdCBsaW5lIHRoYXQgaW5kaWNhdGVzIHRoZSBz dGFydCBvZiBhIGZ1bmN0aW9uCmZvciBpIGluIHhyYW5nZShsZW4oY29kZSkpOgoJaWYgY29kZVtp XVs6N10gPT0gIiMgZW50ZXIiOgoJCWJyZWFrCgojIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJldGFp bgpmdW5jdGlvbnMgPSBbIkVDUllQVF8iICsgcyBmb3IgcyBpbiAoImtleXNldHVwIiwgIml2c2V0 dXAiLCAiZW5jcnlwdF9ieXRlcyIpXQoKIyBmaWx0ZXIgdGhlIGNvZGUKd2lsbHByaW50ID0gRmFs c2UKZm9yIHMgaW4gY29kZVtpOl06CglpZiBzWzo3XSA9PSAiIyBlbnRlciI6CgkJd2lsbHByaW50 ID0gKHNbODpdIGluIGZ1bmN0aW9ucykKCWlmIG5vdCB3aWxscHJpbnQgb3IgIl9FQ1JZUFRfIiBp biBzIG9yIHMgPT0gIiI6CgkJY29udGludWUKCWlmIHNbOjddID09ICIjIGVudGVyIiBvciBzWzox XSA9PSAiLiIgb3Igc1stMTpdID09ICI6IjoKCQlwcmludCBzCgkJY29udGludWUKCWlmIHNbOjFd ID09ICIjIjoKCQlpZiAoIiMiIG5vdCBpbiBzWzE6XSBhbmQgIiVlIiBub3QgaW4gc1sxOl0gCgkJ CQkgICAgIGFuZCAiJXIiIG5vdCBpbiBzWzE6XSk6CgkJCXByaW50ICJcdCVzIiAlIHMKCQljb250 aW51ZQoJIyB0aGUgbGluZXMgYmVsb3cgc2hvdyB0aGF0IG9ubHkgZm9ybWF0dGluZyB3ZXJlIGNo YW5nZWQgaW4gdGhlIGNvZGUKCWEgPSB0dXBsZShzLnNwbGl0KE5vbmUsMSkpCglwcmludCAiXHQl cyIqbGVuKGEpICUgYQo= ------=_Part_2208_22860522.1197828375219--