From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1IRoLl-0001G0-Ds for mharc-grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:45 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IRoLj-0001Fv-Of for grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:43 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IRoLg-0001Fj-Om for grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:42 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IRoLg-0001Fg-K9 for grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:40 -0400 Received: from mx20.gnu.org ([199.232.41.8]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IRoLf-0001oM-LG for grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:40 -0400 Received: from mail.gmx.net ([213.165.64.20]) by mx20.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1IRoLc-0008Gu-Qk for grub-devel@gnu.org; Sun, 02 Sep 2007 08:14:37 -0400 Received: (qmail invoked by alias); 02 Sep 2007 12:14:29 -0000 Received: from ikdesk5.inf.ethz.ch (EHLO ikdesk5.ethz.ch) [129.132.130.15] by mail.gmx.net (mp042) with SMTP; 02 Sep 2007 14:14:29 +0200 X-Authenticated: #228032 X-Provags-ID: V01U2FsdGVkX1/l1hIkCOvlaiBVT77sFtQ6AjcKS9RsBYO2bCfNxT /zZ1ynWLUw1Sw3 Date: Sun, 2 Sep 2007 14:17:36 +0200 From: Simon Peter To: grub-devel@gnu.org Message-Id: <20070902141736.af8d1d50.dn.tlp@gmx.net> X-Mailer: Sylpheed 2.4.4 (GTK+ 2.10.13; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__2_Sep_2007_14_17_36_+0200_Fc1FZOy+hunN46se" X-Y-GMX-Trusted: 0 X-detected-kernel: Linux 2.6, seldom 2.4 (older, 4) X-Detected-Kernel: Linux 2.6, seldom 2.4 (older, 4) Subject: Strong Crypto Support for GRUB2 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Sep 2007 12:14:43 -0000 This is a multi-part message in MIME format. --Multipart=_Sun__2_Sep_2007_14_17_36_+0200_Fc1FZOy+hunN46se Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, along the lines of a FeatureRequests GRUB2 Wiki entry I made earlier, I added strong cryptography support to GRUB that allows Linux encrypted partitions to be read. The patch is attached. It currently features AES support, both in ECB and CBC mode with Linux-style "plain mode" sector-based initialization vectors and 256-bit keys. The RIPEMD 160-bit hash function is also supported. Support for encrypted devices is strongly modelled after Linux' dm-crypt module: A device-mapper command called 'devmap' is included to map devices or partitions onto virtual devices that transparently decrypt data (encryption is not fully implemented yet, but should be a breeze to add as all functions are already there). Key size mangling is identical to that of Linux' cryptsetup command. Cryptographic functionality is modularized and decoupled from the device mapper so other modules can freely use it as well. Things like encrypted serial or network connections to GRUB are conceivable, for example. LUKS is not supported yet, but I'm thinking about it (I don't currently need it personally, that's why). I'd be glad for any help. As stated in the Wiki entry, the main motivation for this is to get rid of unencrypted boot partitions and have an encrypted kernel and initrd, which, besides being a lot easier to maintain, also greatly enhances security (details in the Wiki entry). Simon --Multipart=_Sun__2_Sep_2007_14_17_36_+0200_Fc1FZOy+hunN46se Content-Type: video/dv; name="crypto.dif" Content-Disposition: attachment; filename="crypto.dif" Content-Transfer-Encoding: base64 ZGlmZiAtdSAtciAteCBDVlMgLU4gZ3J1YjItb3JpZy9jb25mL2NvbW1vbi5ybWsgZ3J1YjIvY29u Zi9jb21tb24ucm1rCi0tLSBncnViMi1vcmlnL2NvbmYvY29tbW9uLnJtawkyMDA3LTA4LTAyIDIx OjEyOjUyLjAwMDAwMDAwMCArMDIwMAorKysgZ3J1YjIvY29uZi9jb21tb24ucm1rCTIwMDctMDkt MDEgMjE6NDk6MzkuMDAwMDAwMDAwICswMjAwCkBAIC0xOTgsOCArMTk4LDggQEAKICMgQ29tbWFu ZHMuCiBwa2dkYXRhX01PRFVMRVMgKz0gaGVsbG8ubW9kIGJvb3QubW9kIHRlcm1pbmFsLm1vZCBs cy5tb2QJXAogCWNtcC5tb2QgY2F0Lm1vZCBoZWxwLm1vZCBmb250Lm1vZCBzZWFyY2gubW9kCQlc Ci0JbG9vcGJhY2subW9kIGNvbmZpZ2ZpbGUubW9kCQkJCVwKLQl0ZXJtaW5mby5tb2QgdGVzdC5t b2QgYmxvY2tsaXN0Lm1vZAorCWxvb3BiYWNrLm1vZCBjb25maWdmaWxlLm1vZCBkZXZtYXBwZXIu bW9kCQlcCisJdGVybWluZm8ubW9kIHRlc3QubW9kIGJsb2NrbGlzdC5tb2QgCiAKICMgRm9yIGhl bGxvLm1vZC4KIGhlbGxvX21vZF9TT1VSQ0VTID0gaGVsbG8vaGVsbG8uYwpAQCAtMjYxLDYgKzI2 MSwxMSBAQAogbG9vcGJhY2tfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKIGxvb3BiYWNr X21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKIAorIyBGb3IgZGV2bWFwcGVyLm1vZAor ZGV2bWFwcGVyX21vZF9TT1VSQ0VTID0gZGlzay9kZXZtYXBwZXIuYworZGV2bWFwcGVyX21vZF9D RkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCitkZXZtYXBwZXJfbW9kX0xERkxBR1MgPSAkKENPTU1P Tl9MREZMQUdTKQorCiAjIEZvciBjb25maWdmaWxlLm1vZAogY29uZmlnZmlsZV9tb2RfU09VUkNF UyA9IGNvbW1hbmRzL2NvbmZpZ2ZpbGUuYwogY29uZmlnZmlsZV9tb2RfQ0ZMQUdTID0gJChDT01N T05fQ0ZMQUdTKQpAQCAtMjg5LDUgKzI5NCwyMCBAQAogZ3ppb19tb2RfQ0ZMQUdTID0gJChDT01N T05fQ0ZMQUdTKQogZ3ppb19tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCiAKKyMgQ3J5 cHRvZ3JhcGh5LgorcGtnZGF0YV9NT0RVTEVTICs9IGNyeXB0by5tb2QgYWVzLm1vZCBybWQxNjAu bW9kCiAKLQorIyBGb3IgY3J5cHRvLm1vZAorY3J5cHRvX21vZF9TT1VSQ0VTID0gY3J5cHRvL2Ny eXB0by5jCitjcnlwdG9fbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKK2NyeXB0b19tb2Rf TERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCisKKyMgRm9yIGFlcy5tb2QKK2Flc19tb2RfU09V UkNFUyA9IGNyeXB0by9hZXMuYworYWVzX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCith ZXNfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9MREZMQUdTKQorCisjIEZvciBybWQxNjAubW9kCity bWQxNjBfbW9kX1NPVVJDRVMgPSBjcnlwdG8vcm1kMTYwLmMKK3JtZDE2MF9tb2RfQ0ZMQUdTID0g JChDT01NT05fQ0ZMQUdTKQorcm1kMTYwX21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykK ZGlmZiAtdSAtciAteCBDVlMgLU4gZ3J1YjItb3JpZy9jcnlwdG8vYWVzLmMgZ3J1YjIvY3J5cHRv L2Flcy5jCi0tLSBncnViMi1vcmlnL2NyeXB0by9hZXMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMAorKysgZ3J1YjIvY3J5cHRvL2Flcy5jCTIwMDctMDktMDIgMDA6NDU6MDAu MDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTA2MiBAQAorLyoKKyAqICBGSVBTLTE5NyBjb21w bGlhbnQgQUVTIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3 ICBDaHJpc3RvcGhlIERldmluZQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UsIHZl cnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sCisgKiAgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisvKgorICog IFRoZSBBRVMgYmxvY2sgY2lwaGVyIHdhcyBkZXNpZ25lZCBieSBWaW5jZW50IFJpam1lbiBhbmQg Sm9hbiBEYWVtZW4uCisgKgorICogIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVz L3Jpam5kYWVsL1Jpam5kYWVsLnBkZgorICogIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0 aW9ucy9maXBzL2ZpcHMxOTcvZmlwcy0xOTcucGRmCisgKi8KKy8qCisgKiAyMDA3LTA4LTMxOiBN b2RpZmllZCBmb3IgR05VIEdSVUIgYnkgU2ltb24gUGV0ZXIgPGRuLnRscEBnbXgubmV0Pi4KKyAq LworCisjaWZuZGVmIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQorI2RlZmluZSBfQ1JUX1NFQ1VS RV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxncnViL2Vyci5oPgorI2luY2x1 ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbW0uaD4KKyNpbmNsdWRlIDxncnViL2Rs Lmg+CisjaW5jbHVkZSA8Z3J1Yi9jcnlwdG8uaD4KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAg QUVTIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWdu ZWQgbG9uZyBlcmtbNjRdOyAgICAgLyohPCBlbmNyeXB0aW9uIHJvdW5kIGtleXMgKi8KKyAgICB1 bnNpZ25lZCBsb25nIGRya1s2NF07ICAgICAvKiE8IGRlY3J5cHRpb24gcm91bmQga2V5cyAqLwor ICAgIGludCBucjsgICAgICAgICAgICAgICAgICAgIC8qITwgbnVtYmVyIG9mIHJvdW5kcyAgICAg ICovCit9CithZXNfY29udGV4dDsKKworI2lmbmRlZiB1aW50OAorI2RlZmluZSB1aW50OCB1bnNp Z25lZCBjaGFyCisjZW5kaWYKKworI2lmbmRlZiB1aW50MzIKKyNkZWZpbmUgdWludDMyIHVuc2ln bmVkIGxvbmcKKyNlbmRpZgorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1h Y3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdF VF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChu KSA9ICggKHVpbnQzMikgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgIFwKKyAgICAgICAgfCAo ICh1aW50MzIpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICBcCisgICAgICAgIHwgKCAodWlu dDMyKSAoYilbKGkpICsgMl0gPDwgIDggKSAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMikg KGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgIFwKK30KKyNlbmRpZgorI2lmbmRlZiBQVVRfVUlO VDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1aW50OCkgKCAobikgPj4gMjQgKTsgICAg ICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1aW50OCkgKCAobikgPj4gMTYgKTsgICAgICAgXAor ICAgIChiKVsoaSkgKyAyXSA9ICh1aW50OCkgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChi KVsoaSkgKyAzXSA9ICh1aW50OCkgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisK Ky8qCisgKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHVzZSBwcmUtY29tcHV0ZWQg dGFibGVzLAorICogb3RoZXJ3aXNlIHRoZSB0YWJsZXMgd2lsbCBiZSBnZW5lcmF0ZWQgYXQgdGhl IGZpcnN0IHJ1bi4KKyAqCisgKiAjZGVmaW5lIEZJWEVEX1RBQkxFUworICovCisKKyNpZiAhZGVm aW5lZChGSVhFRF9UQUJMRVMpCisKKy8qCisgKiBGb3J3YXJkIFMtYm94ICYgdGFibGVzCisgKi8K K3N0YXRpYyB1aW50OCAgRlNiWzI1Nl07CitzdGF0aWMgdWludDMyIEZUMFsyNTZdOyAKK3N0YXRp YyB1aW50MzIgRlQxWzI1Nl07IAorc3RhdGljIHVpbnQzMiBGVDJbMjU2XTsgCitzdGF0aWMgdWlu dDMyIEZUM1syNTZdOyAKKworLyoKKyAqIFJldmVyc2UgUy1ib3ggJiB0YWJsZXMKKyAqLworc3Rh dGljIHVpbnQ4ICBSU2JbMjU2XTsKK3N0YXRpYyB1aW50MzIgUlQwWzI1Nl07CitzdGF0aWMgdWlu dDMyIFJUMVsyNTZdOworc3RhdGljIHVpbnQzMiBSVDJbMjU2XTsKK3N0YXRpYyB1aW50MzIgUlQz WzI1Nl07CisKKy8qCisgKiBSb3VuZCBjb25zdGFudHMKKyAqLworc3RhdGljIHVpbnQzMiBSQ09O WzEwXTsKKworLyoKKyAqIFRhYmxlcyBnZW5lcmF0aW9uIGNvZGUKKyAqLworI2RlZmluZSBST1RS OCh4KSAoICggKCB4IDw8IDI0ICkgJiAweEZGRkZGRkZGICkgfCBcCisgICAgICAgICAgICAgICAg ICAgKCAoIHggJiAweEZGRkZGRkZGICkgPj4gOCApICkKKyNkZWZpbmUgWFRJTUUoeCkgKCAoIHgg PDwgMSApIF4gKCAoIHggJiAweDgwICkgPyAweDFCIDogMHgwMCApICkKKyNkZWZpbmUgTVVMKHgs eSkgKCAoIHggJiYgeSApID8gcG93Wyhsb2dbeF0gKyBsb2dbeV0pICUgMjU1XSA6IDAgKQorCitz dGF0aWMgdm9pZCBhZXNfZ2VuX3RhYmxlcyggdm9pZCApCit7CisgICAgaW50IGk7CisgICAgdWlu dDggeCwgeTsKKyAgICB1aW50OCBwb3dbMjU2XTsKKyAgICB1aW50OCBsb2dbMjU2XTsKKworICAg IC8qCisgICAgICogY29tcHV0ZSBwb3cgYW5kIGxvZyB0YWJsZXMgb3ZlciBHRigyXjgpCisgICAg ICovCisgICAgZm9yKCBpID0gMCwgeCA9IDE7IGkgPCAyNTY7IGkrKywgeCBePSBYVElNRSggeCAp ICkKKyAgICB7CisgICAgICAgIHBvd1tpXSA9IHg7CisgICAgICAgIGxvZ1t4XSA9IGk7CisgICAg fQorCisgICAgLyoKKyAgICAgKiBjYWxjdWxhdGUgdGhlIHJvdW5kIGNvbnN0YW50cworICAgICAq LworICAgIGZvciggaSA9IDAsIHggPSAxOyBpIDwgMTA7IGkrKywgeCA9IFhUSU1FKCB4ICkgKQor ICAgIHsKKyAgICAgICAgUkNPTltpXSA9ICh1aW50MzIpIHggPDwgMjQ7CisgICAgfQorCisgICAg LyoKKyAgICAgKiBnZW5lcmF0ZSB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSBTLWJveGVzCisgICAg ICovCisgICAgRlNiWzB4MDBdID0gMHg2MzsKKyAgICBSU2JbMHg2M10gPSAweDAwOworCisgICAg Zm9yKCBpID0gMTsgaSA8IDI1NjsgaSsrICkKKyAgICB7CisgICAgICAgIHggPSBwb3dbMjU1IC0g bG9nW2ldXTsKKworICAgICAgICB5ICA9IHg7IHkgPSAoIHkgPDwgMSApIHwgKCB5ID4+IDcgKTsK KyAgICAgICAgeCBePSB5OyB5ID0gKCB5IDw8IDEgKSB8ICggeSA+PiA3ICk7CisgICAgICAgIHgg Xj0geTsgeSA9ICggeSA8PCAxICkgfCAoIHkgPj4gNyApOworICAgICAgICB4IF49IHk7IHkgPSAo IHkgPDwgMSApIHwgKCB5ID4+IDcgKTsKKyAgICAgICAgeCBePSB5IF4gMHg2MzsKKworICAgICAg ICBGU2JbaV0gPSB4OworICAgICAgICBSU2JbeF0gPSBpOworICAgIH0KKworICAgIC8qCisgICAg ICogZ2VuZXJhdGUgdGhlIGZvcndhcmQgYW5kIHJldmVyc2UgdGFibGVzCisgICAgICovCisgICAg Zm9yKCBpID0gMDsgaSA8IDI1NjsgaSsrICkKKyAgICB7CisgICAgICAgIHggPSBGU2JbaV07IHkg PSBYVElNRSggeCApOworCisgICAgICAgIEZUMFtpXSA9ICAgKHVpbnQzMikgKCB4IF4geSApIF4K KyAgICAgICAgICAgICAgICAgKCAodWludDMyKSB4IDw8ICA4ICkgXgorICAgICAgICAgICAgICAg ICAoICh1aW50MzIpIHggPDwgMTYgKSBeCisgICAgICAgICAgICAgICAgICggKHVpbnQzMikgeSA8 PCAyNCApOworCisgICAgICAgIEZUMFtpXSAmPSAweEZGRkZGRkZGOworCisgICAgICAgIEZUMVtp XSA9IFJPVFI4KCBGVDBbaV0gKTsKKyAgICAgICAgRlQyW2ldID0gUk9UUjgoIEZUMVtpXSApOwor ICAgICAgICBGVDNbaV0gPSBST1RSOCggRlQyW2ldICk7CisKKyAgICAgICAgeSA9IFJTYltpXTsK KworICAgICAgICBSVDBbaV0gPSAoICh1aW50MzIpIE1VTCggMHgwQiwgeSApICAgICAgICkgXgor ICAgICAgICAgICAgICAgICAoICh1aW50MzIpIE1VTCggMHgwRCwgeSApIDw8ICA4ICkgXgorICAg ICAgICAgICAgICAgICAoICh1aW50MzIpIE1VTCggMHgwOSwgeSApIDw8IDE2ICkgXgorICAgICAg ICAgICAgICAgICAoICh1aW50MzIpIE1VTCggMHgwRSwgeSApIDw8IDI0ICk7CisKKyAgICAgICAg UlQwW2ldICY9IDB4RkZGRkZGRkY7CisKKyAgICAgICAgUlQxW2ldID0gUk9UUjgoIFJUMFtpXSAp OworICAgICAgICBSVDJbaV0gPSBST1RSOCggUlQxW2ldICk7CisgICAgICAgIFJUM1tpXSA9IFJP VFI4KCBSVDJbaV0gKTsKKyAgICB9Cit9CisKKyNlbHNlCisKKy8qCisgKiBGb3J3YXJkIFMtYm94 CisgKi8KK3N0YXRpYyBjb25zdCB1aW50OCBGU2JbMjU2XSA9Cit7CisgICAgMHg2MywgMHg3Qywg MHg3NywgMHg3QiwgMHhGMiwgMHg2QiwgMHg2RiwgMHhDNSwKKyAgICAweDMwLCAweDAxLCAweDY3 LCAweDJCLCAweEZFLCAweEQ3LCAweEFCLCAweDc2LAorICAgIDB4Q0EsIDB4ODIsIDB4QzksIDB4 N0QsIDB4RkEsIDB4NTksIDB4NDcsIDB4RjAsCisgICAgMHhBRCwgMHhENCwgMHhBMiwgMHhBRiwg MHg5QywgMHhBNCwgMHg3MiwgMHhDMCwKKyAgICAweEI3LCAweEZELCAweDkzLCAweDI2LCAweDM2 LCAweDNGLCAweEY3LCAweENDLAorICAgIDB4MzQsIDB4QTUsIDB4RTUsIDB4RjEsIDB4NzEsIDB4 RDgsIDB4MzEsIDB4MTUsCisgICAgMHgwNCwgMHhDNywgMHgyMywgMHhDMywgMHgxOCwgMHg5Niwg MHgwNSwgMHg5QSwKKyAgICAweDA3LCAweDEyLCAweDgwLCAweEUyLCAweEVCLCAweDI3LCAweEIy LCAweDc1LAorICAgIDB4MDksIDB4ODMsIDB4MkMsIDB4MUEsIDB4MUIsIDB4NkUsIDB4NUEsIDB4 QTAsCisgICAgMHg1MiwgMHgzQiwgMHhENiwgMHhCMywgMHgyOSwgMHhFMywgMHgyRiwgMHg4NCwK KyAgICAweDUzLCAweEQxLCAweDAwLCAweEVELCAweDIwLCAweEZDLCAweEIxLCAweDVCLAorICAg IDB4NkEsIDB4Q0IsIDB4QkUsIDB4MzksIDB4NEEsIDB4NEMsIDB4NTgsIDB4Q0YsCisgICAgMHhE MCwgMHhFRiwgMHhBQSwgMHhGQiwgMHg0MywgMHg0RCwgMHgzMywgMHg4NSwKKyAgICAweDQ1LCAw eEY5LCAweDAyLCAweDdGLCAweDUwLCAweDNDLCAweDlGLCAweEE4LAorICAgIDB4NTEsIDB4QTMs IDB4NDAsIDB4OEYsIDB4OTIsIDB4OUQsIDB4MzgsIDB4RjUsCisgICAgMHhCQywgMHhCNiwgMHhE QSwgMHgyMSwgMHgxMCwgMHhGRiwgMHhGMywgMHhEMiwKKyAgICAweENELCAweDBDLCAweDEzLCAw eEVDLCAweDVGLCAweDk3LCAweDQ0LCAweDE3LAorICAgIDB4QzQsIDB4QTcsIDB4N0UsIDB4M0Qs IDB4NjQsIDB4NUQsIDB4MTksIDB4NzMsCisgICAgMHg2MCwgMHg4MSwgMHg0RiwgMHhEQywgMHgy MiwgMHgyQSwgMHg5MCwgMHg4OCwKKyAgICAweDQ2LCAweEVFLCAweEI4LCAweDE0LCAweERFLCAw eDVFLCAweDBCLCAweERCLAorICAgIDB4RTAsIDB4MzIsIDB4M0EsIDB4MEEsIDB4NDksIDB4MDYs IDB4MjQsIDB4NUMsCisgICAgMHhDMiwgMHhEMywgMHhBQywgMHg2MiwgMHg5MSwgMHg5NSwgMHhF NCwgMHg3OSwKKyAgICAweEU3LCAweEM4LCAweDM3LCAweDZELCAweDhELCAweEQ1LCAweDRFLCAw eEE5LAorICAgIDB4NkMsIDB4NTYsIDB4RjQsIDB4RUEsIDB4NjUsIDB4N0EsIDB4QUUsIDB4MDgs CisgICAgMHhCQSwgMHg3OCwgMHgyNSwgMHgyRSwgMHgxQywgMHhBNiwgMHhCNCwgMHhDNiwKKyAg ICAweEU4LCAweERELCAweDc0LCAweDFGLCAweDRCLCAweEJELCAweDhCLCAweDhBLAorICAgIDB4 NzAsIDB4M0UsIDB4QjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4RjYsIDB4MEUsCisgICAgMHg2MSwg MHgzNSwgMHg1NywgMHhCOSwgMHg4NiwgMHhDMSwgMHgxRCwgMHg5RSwKKyAgICAweEUxLCAweEY4 LCAweDk4LCAweDExLCAweDY5LCAweEQ5LCAweDhFLCAweDk0LAorICAgIDB4OUIsIDB4MUUsIDB4 ODcsIDB4RTksIDB4Q0UsIDB4NTUsIDB4MjgsIDB4REYsCisgICAgMHg4QywgMHhBMSwgMHg4OSwg MHgwRCwgMHhCRiwgMHhFNiwgMHg0MiwgMHg2OCwKKyAgICAweDQxLCAweDk5LCAweDJELCAweDBG LCAweEIwLCAweDU0LCAweEJCLCAweDE2Cit9OworCisvKgorICogRm9yd2FyZCB0YWJsZXMKKyAq LworI2RlZmluZSBGVCBcCitcCisgICAgVihDNiw2Myw2MyxBNSksIFYoRjgsN0MsN0MsODQpLCBW KEVFLDc3LDc3LDk5KSwgVihGNiw3Qiw3Qiw4RCksIFwKKyAgICBWKEZGLEYyLEYyLDBEKSwgVihE Niw2Qiw2QixCRCksIFYoREUsNkYsNkYsQjEpLCBWKDkxLEM1LEM1LDU0KSwgXAorICAgIFYoNjAs MzAsMzAsNTApLCBWKDAyLDAxLDAxLDAzKSwgVihDRSw2Nyw2NyxBOSksIFYoNTYsMkIsMkIsN0Qp LCBcCisgICAgVihFNyxGRSxGRSwxOSksIFYoQjUsRDcsRDcsNjIpLCBWKDRELEFCLEFCLEU2KSwg VihFQyw3Niw3Niw5QSksIFwKKyAgICBWKDhGLENBLENBLDQ1KSwgVigxRiw4Miw4Miw5RCksIFYo ODksQzksQzksNDApLCBWKEZBLDdELDdELDg3KSwgXAorICAgIFYoRUYsRkEsRkEsMTUpLCBWKEIy LDU5LDU5LEVCKSwgVig4RSw0Nyw0NyxDOSksIFYoRkIsRjAsRjAsMEIpLCBcCisgICAgVig0MSxB RCxBRCxFQyksIFYoQjMsRDQsRDQsNjcpLCBWKDVGLEEyLEEyLEZEKSwgVig0NSxBRixBRixFQSks IFwKKyAgICBWKDIzLDlDLDlDLEJGKSwgVig1MyxBNCxBNCxGNyksIFYoRTQsNzIsNzIsOTYpLCBW KDlCLEMwLEMwLDVCKSwgXAorICAgIFYoNzUsQjcsQjcsQzIpLCBWKEUxLEZELEZELDFDKSwgVigz RCw5Myw5MyxBRSksIFYoNEMsMjYsMjYsNkEpLCBcCisgICAgVig2QywzNiwzNiw1QSksIFYoN0Us M0YsM0YsNDEpLCBWKEY1LEY3LEY3LDAyKSwgVig4MyxDQyxDQyw0RiksIFwKKyAgICBWKDY4LDM0 LDM0LDVDKSwgVig1MSxBNSxBNSxGNCksIFYoRDEsRTUsRTUsMzQpLCBWKEY5LEYxLEYxLDA4KSwg XAorICAgIFYoRTIsNzEsNzEsOTMpLCBWKEFCLEQ4LEQ4LDczKSwgVig2MiwzMSwzMSw1MyksIFYo MkEsMTUsMTUsM0YpLCBcCisgICAgVigwOCwwNCwwNCwwQyksIFYoOTUsQzcsQzcsNTIpLCBWKDQ2 LDIzLDIzLDY1KSwgVig5RCxDMyxDMyw1RSksIFwKKyAgICBWKDMwLDE4LDE4LDI4KSwgVigzNyw5 Niw5NixBMSksIFYoMEEsMDUsMDUsMEYpLCBWKDJGLDlBLDlBLEI1KSwgXAorICAgIFYoMEUsMDcs MDcsMDkpLCBWKDI0LDEyLDEyLDM2KSwgVigxQiw4MCw4MCw5QiksIFYoREYsRTIsRTIsM0QpLCBc CisgICAgVihDRCxFQixFQiwyNiksIFYoNEUsMjcsMjcsNjkpLCBWKDdGLEIyLEIyLENEKSwgVihF QSw3NSw3NSw5RiksIFwKKyAgICBWKDEyLDA5LDA5LDFCKSwgVigxRCw4Myw4Myw5RSksIFYoNTgs MkMsMkMsNzQpLCBWKDM0LDFBLDFBLDJFKSwgXAorICAgIFYoMzYsMUIsMUIsMkQpLCBWKERDLDZF LDZFLEIyKSwgVihCNCw1QSw1QSxFRSksIFYoNUIsQTAsQTAsRkIpLCBcCisgICAgVihBNCw1Miw1 MixGNiksIFYoNzYsM0IsM0IsNEQpLCBWKEI3LEQ2LEQ2LDYxKSwgVig3RCxCMyxCMyxDRSksIFwK KyAgICBWKDUyLDI5LDI5LDdCKSwgVihERCxFMyxFMywzRSksIFYoNUUsMkYsMkYsNzEpLCBWKDEz LDg0LDg0LDk3KSwgXAorICAgIFYoQTYsNTMsNTMsRjUpLCBWKEI5LEQxLEQxLDY4KSwgVigwMCww MCwwMCwwMCksIFYoQzEsRUQsRUQsMkMpLCBcCisgICAgVig0MCwyMCwyMCw2MCksIFYoRTMsRkMs RkMsMUYpLCBWKDc5LEIxLEIxLEM4KSwgVihCNiw1Qiw1QixFRCksIFwKKyAgICBWKEQ0LDZBLDZB LEJFKSwgVig4RCxDQixDQiw0NiksIFYoNjcsQkUsQkUsRDkpLCBWKDcyLDM5LDM5LDRCKSwgXAor ICAgIFYoOTQsNEEsNEEsREUpLCBWKDk4LDRDLDRDLEQ0KSwgVihCMCw1OCw1OCxFOCksIFYoODUs Q0YsQ0YsNEEpLCBcCisgICAgVihCQixEMCxEMCw2QiksIFYoQzUsRUYsRUYsMkEpLCBWKDRGLEFB LEFBLEU1KSwgVihFRCxGQixGQiwxNiksIFwKKyAgICBWKDg2LDQzLDQzLEM1KSwgVig5QSw0RCw0 RCxENyksIFYoNjYsMzMsMzMsNTUpLCBWKDExLDg1LDg1LDk0KSwgXAorICAgIFYoOEEsNDUsNDUs Q0YpLCBWKEU5LEY5LEY5LDEwKSwgVigwNCwwMiwwMiwwNiksIFYoRkUsN0YsN0YsODEpLCBcCisg ICAgVihBMCw1MCw1MCxGMCksIFYoNzgsM0MsM0MsNDQpLCBWKDI1LDlGLDlGLEJBKSwgVig0QixB OCxBOCxFMyksIFwKKyAgICBWKEEyLDUxLDUxLEYzKSwgVig1RCxBMyxBMyxGRSksIFYoODAsNDAs NDAsQzApLCBWKDA1LDhGLDhGLDhBKSwgXAorICAgIFYoM0YsOTIsOTIsQUQpLCBWKDIxLDlELDlE LEJDKSwgVig3MCwzOCwzOCw0OCksIFYoRjEsRjUsRjUsMDQpLCBcCisgICAgVig2MyxCQyxCQyxE RiksIFYoNzcsQjYsQjYsQzEpLCBWKEFGLERBLERBLDc1KSwgVig0MiwyMSwyMSw2MyksIFwKKyAg ICBWKDIwLDEwLDEwLDMwKSwgVihFNSxGRixGRiwxQSksIFYoRkQsRjMsRjMsMEUpLCBWKEJGLEQy LEQyLDZEKSwgXAorICAgIFYoODEsQ0QsQ0QsNEMpLCBWKDE4LDBDLDBDLDE0KSwgVigyNiwxMywx MywzNSksIFYoQzMsRUMsRUMsMkYpLCBcCisgICAgVihCRSw1Riw1RixFMSksIFYoMzUsOTcsOTcs QTIpLCBWKDg4LDQ0LDQ0LENDKSwgVigyRSwxNywxNywzOSksIFwKKyAgICBWKDkzLEM0LEM0LDU3 KSwgVig1NSxBNyxBNyxGMiksIFYoRkMsN0UsN0UsODIpLCBWKDdBLDNELDNELDQ3KSwgXAorICAg IFYoQzgsNjQsNjQsQUMpLCBWKEJBLDVELDVELEU3KSwgVigzMiwxOSwxOSwyQiksIFYoRTYsNzMs NzMsOTUpLCBcCisgICAgVihDMCw2MCw2MCxBMCksIFYoMTksODEsODEsOTgpLCBWKDlFLDRGLDRG LEQxKSwgVihBMyxEQyxEQyw3RiksIFwKKyAgICBWKDQ0LDIyLDIyLDY2KSwgVig1NCwyQSwyQSw3 RSksIFYoM0IsOTAsOTAsQUIpLCBWKDBCLDg4LDg4LDgzKSwgXAorICAgIFYoOEMsNDYsNDYsQ0Ep LCBWKEM3LEVFLEVFLDI5KSwgVig2QixCOCxCOCxEMyksIFYoMjgsMTQsMTQsM0MpLCBcCisgICAg VihBNyxERSxERSw3OSksIFYoQkMsNUUsNUUsRTIpLCBWKDE2LDBCLDBCLDFEKSwgVihBRCxEQixE Qiw3NiksIFwKKyAgICBWKERCLEUwLEUwLDNCKSwgVig2NCwzMiwzMiw1NiksIFYoNzQsM0EsM0Es NEUpLCBWKDE0LDBBLDBBLDFFKSwgXAorICAgIFYoOTIsNDksNDksREIpLCBWKDBDLDA2LDA2LDBB KSwgVig0OCwyNCwyNCw2QyksIFYoQjgsNUMsNUMsRTQpLCBcCisgICAgVig5RixDMixDMiw1RCks IFYoQkQsRDMsRDMsNkUpLCBWKDQzLEFDLEFDLEVGKSwgVihDNCw2Miw2MixBNiksIFwKKyAgICBW KDM5LDkxLDkxLEE4KSwgVigzMSw5NSw5NSxBNCksIFYoRDMsRTQsRTQsMzcpLCBWKEYyLDc5LDc5 LDhCKSwgXAorICAgIFYoRDUsRTcsRTcsMzIpLCBWKDhCLEM4LEM4LDQzKSwgVig2RSwzNywzNyw1 OSksIFYoREEsNkQsNkQsQjcpLCBcCisgICAgVigwMSw4RCw4RCw4QyksIFYoQjEsRDUsRDUsNjQp LCBWKDlDLDRFLDRFLEQyKSwgVig0OSxBOSxBOSxFMCksIFwKKyAgICBWKEQ4LDZDLDZDLEI0KSwg VihBQyw1Niw1NixGQSksIFYoRjMsRjQsRjQsMDcpLCBWKENGLEVBLEVBLDI1KSwgXAorICAgIFYo Q0EsNjUsNjUsQUYpLCBWKEY0LDdBLDdBLDhFKSwgVig0NyxBRSxBRSxFOSksIFYoMTAsMDgsMDgs MTgpLCBcCisgICAgVig2RixCQSxCQSxENSksIFYoRjAsNzgsNzgsODgpLCBWKDRBLDI1LDI1LDZG KSwgVig1QywyRSwyRSw3MiksIFwKKyAgICBWKDM4LDFDLDFDLDI0KSwgVig1NyxBNixBNixGMSks IFYoNzMsQjQsQjQsQzcpLCBWKDk3LEM2LEM2LDUxKSwgXAorICAgIFYoQ0IsRTgsRTgsMjMpLCBW KEExLERELERELDdDKSwgVihFOCw3NCw3NCw5QyksIFYoM0UsMUYsMUYsMjEpLCBcCisgICAgVig5 Niw0Qiw0QixERCksIFYoNjEsQkQsQkQsREMpLCBWKDBELDhCLDhCLDg2KSwgVigwRiw4QSw4QSw4 NSksIFwKKyAgICBWKEUwLDcwLDcwLDkwKSwgVig3QywzRSwzRSw0MiksIFYoNzEsQjUsQjUsQzQp LCBWKENDLDY2LDY2LEFBKSwgXAorICAgIFYoOTAsNDgsNDgsRDgpLCBWKDA2LDAzLDAzLDA1KSwg VihGNyxGNixGNiwwMSksIFYoMUMsMEUsMEUsMTIpLCBcCisgICAgVihDMiw2MSw2MSxBMyksIFYo NkEsMzUsMzUsNUYpLCBWKEFFLDU3LDU3LEY5KSwgVig2OSxCOSxCOSxEMCksIFwKKyAgICBWKDE3 LDg2LDg2LDkxKSwgVig5OSxDMSxDMSw1OCksIFYoM0EsMUQsMUQsMjcpLCBWKDI3LDlFLDlFLEI5 KSwgXAorICAgIFYoRDksRTEsRTEsMzgpLCBWKEVCLEY4LEY4LDEzKSwgVigyQiw5OCw5OCxCMyks IFYoMjIsMTEsMTEsMzMpLCBcCisgICAgVihEMiw2OSw2OSxCQiksIFYoQTksRDksRDksNzApLCBW KDA3LDhFLDhFLDg5KSwgVigzMyw5NCw5NCxBNyksIFwKKyAgICBWKDJELDlCLDlCLEI2KSwgVigz QywxRSwxRSwyMiksIFYoMTUsODcsODcsOTIpLCBWKEM5LEU5LEU5LDIwKSwgXAorICAgIFYoODcs Q0UsQ0UsNDkpLCBWKEFBLDU1LDU1LEZGKSwgVig1MCwyOCwyOCw3OCksIFYoQTUsREYsREYsN0Ep LCBcCisgICAgVigwMyw4Qyw4Qyw4RiksIFYoNTksQTEsQTEsRjgpLCBWKDA5LDg5LDg5LDgwKSwg VigxQSwwRCwwRCwxNyksIFwKKyAgICBWKDY1LEJGLEJGLERBKSwgVihENyxFNixFNiwzMSksIFYo ODQsNDIsNDIsQzYpLCBWKEQwLDY4LDY4LEI4KSwgXAorICAgIFYoODIsNDEsNDEsQzMpLCBWKDI5 LDk5LDk5LEIwKSwgVig1QSwyRCwyRCw3NyksIFYoMUUsMEYsMEYsMTEpLCBcCisgICAgVig3QixC MCxCMCxDQiksIFYoQTgsNTQsNTQsRkMpLCBWKDZELEJCLEJCLEQ2KSwgVigyQywxNiwxNiwzQSkK KworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgY29uc3QgdWludDMy IEZUMFsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNk IyNhIyNiIyNjCitzdGF0aWMgY29uc3QgdWludDMyIEZUMVsyNTZdID0geyBGVCB9OworI3VuZGVm IFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCitzdGF0aWMgY29uc3QgdWlu dDMyIEZUMlsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4 IyNiIyNjIyNkIyNhCitzdGF0aWMgY29uc3QgdWludDMyIEZUM1syNTZdID0geyBGVCB9OworI3Vu ZGVmIFYKKworI3VuZGVmIEZUCisKKy8qCisgKiBSZXZlcnNlIFMtYm94CisgKi8KK3N0YXRpYyBj b25zdCB1aW50OCBSU2JbMjU2XSA9Cit7CisgICAgMHg1MiwgMHgwOSwgMHg2QSwgMHhENSwgMHgz MCwgMHgzNiwgMHhBNSwgMHgzOCwKKyAgICAweEJGLCAweDQwLCAweEEzLCAweDlFLCAweDgxLCAw eEYzLCAweEQ3LCAweEZCLAorICAgIDB4N0MsIDB4RTMsIDB4MzksIDB4ODIsIDB4OUIsIDB4MkYs IDB4RkYsIDB4ODcsCisgICAgMHgzNCwgMHg4RSwgMHg0MywgMHg0NCwgMHhDNCwgMHhERSwgMHhF OSwgMHhDQiwKKyAgICAweDU0LCAweDdCLCAweDk0LCAweDMyLCAweEE2LCAweEMyLCAweDIzLCAw eDNELAorICAgIDB4RUUsIDB4NEMsIDB4OTUsIDB4MEIsIDB4NDIsIDB4RkEsIDB4QzMsIDB4NEUs CisgICAgMHgwOCwgMHgyRSwgMHhBMSwgMHg2NiwgMHgyOCwgMHhEOSwgMHgyNCwgMHhCMiwKKyAg ICAweDc2LCAweDVCLCAweEEyLCAweDQ5LCAweDZELCAweDhCLCAweEQxLCAweDI1LAorICAgIDB4 NzIsIDB4RjgsIDB4RjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYsCisgICAgMHhENCwg MHhBNCwgMHg1QywgMHhDQywgMHg1RCwgMHg2NSwgMHhCNiwgMHg5MiwKKyAgICAweDZDLCAweDcw LCAweDQ4LCAweDUwLCAweEZELCAweEVELCAweEI5LCAweERBLAorICAgIDB4NUUsIDB4MTUsIDB4 NDYsIDB4NTcsIDB4QTcsIDB4OEQsIDB4OUQsIDB4ODQsCisgICAgMHg5MCwgMHhEOCwgMHhBQiwg MHgwMCwgMHg4QywgMHhCQywgMHhEMywgMHgwQSwKKyAgICAweEY3LCAweEU0LCAweDU4LCAweDA1 LCAweEI4LCAweEIzLCAweDQ1LCAweDA2LAorICAgIDB4RDAsIDB4MkMsIDB4MUUsIDB4OEYsIDB4 Q0EsIDB4M0YsIDB4MEYsIDB4MDIsCisgICAgMHhDMSwgMHhBRiwgMHhCRCwgMHgwMywgMHgwMSwg MHgxMywgMHg4QSwgMHg2QiwKKyAgICAweDNBLCAweDkxLCAweDExLCAweDQxLCAweDRGLCAweDY3 LCAweERDLCAweEVBLAorICAgIDB4OTcsIDB4RjIsIDB4Q0YsIDB4Q0UsIDB4RjAsIDB4QjQsIDB4 RTYsIDB4NzMsCisgICAgMHg5NiwgMHhBQywgMHg3NCwgMHgyMiwgMHhFNywgMHhBRCwgMHgzNSwg MHg4NSwKKyAgICAweEUyLCAweEY5LCAweDM3LCAweEU4LCAweDFDLCAweDc1LCAweERGLCAweDZF LAorICAgIDB4NDcsIDB4RjEsIDB4MUEsIDB4NzEsIDB4MUQsIDB4MjksIDB4QzUsIDB4ODksCisg ICAgMHg2RiwgMHhCNywgMHg2MiwgMHgwRSwgMHhBQSwgMHgxOCwgMHhCRSwgMHgxQiwKKyAgICAw eEZDLCAweDU2LCAweDNFLCAweDRCLCAweEM2LCAweEQyLCAweDc5LCAweDIwLAorICAgIDB4OUEs IDB4REIsIDB4QzAsIDB4RkUsIDB4NzgsIDB4Q0QsIDB4NUEsIDB4RjQsCisgICAgMHgxRiwgMHhE RCwgMHhBOCwgMHgzMywgMHg4OCwgMHgwNywgMHhDNywgMHgzMSwKKyAgICAweEIxLCAweDEyLCAw eDEwLCAweDU5LCAweDI3LCAweDgwLCAweEVDLCAweDVGLAorICAgIDB4NjAsIDB4NTEsIDB4N0Ys IDB4QTksIDB4MTksIDB4QjUsIDB4NEEsIDB4MEQsCisgICAgMHgyRCwgMHhFNSwgMHg3QSwgMHg5 RiwgMHg5MywgMHhDOSwgMHg5QywgMHhFRiwKKyAgICAweEEwLCAweEUwLCAweDNCLCAweDRELCAw eEFFLCAweDJBLCAweEY1LCAweEIwLAorICAgIDB4QzgsIDB4RUIsIDB4QkIsIDB4M0MsIDB4ODMs IDB4NTMsIDB4OTksIDB4NjEsCisgICAgMHgxNywgMHgyQiwgMHgwNCwgMHg3RSwgMHhCQSwgMHg3 NywgMHhENiwgMHgyNiwKKyAgICAweEUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAw eDBDLCAweDdECit9OworCisvKgorICogUmV2ZXJzZSB0YWJsZXMKKyAqLworI2RlZmluZSBSVCBc CitcCisgICAgVig1MSxGNCxBNyw1MCksIFYoN0UsNDEsNjUsNTMpLCBWKDFBLDE3LEE0LEMzKSwg VigzQSwyNyw1RSw5NiksIFwKKyAgICBWKDNCLEFCLDZCLENCKSwgVigxRiw5RCw0NSxGMSksIFYo QUMsRkEsNTgsQUIpLCBWKDRCLEUzLDAzLDkzKSwgXAorICAgIFYoMjAsMzAsRkEsNTUpLCBWKEFE LDc2LDZELEY2KSwgVig4OCxDQyw3Niw5MSksIFYoRjUsMDIsNEMsMjUpLCBcCisgICAgVig0RixF NSxENyxGQyksIFYoQzUsMkEsQ0IsRDcpLCBWKDI2LDM1LDQ0LDgwKSwgVihCNSw2MixBMyw4Riks IFwKKyAgICBWKERFLEIxLDVBLDQ5KSwgVigyNSxCQSwxQiw2NyksIFYoNDUsRUEsMEUsOTgpLCBW KDVELEZFLEMwLEUxKSwgXAorICAgIFYoQzMsMkYsNzUsMDIpLCBWKDgxLDRDLEYwLDEyKSwgVig4 RCw0Niw5NyxBMyksIFYoNkIsRDMsRjksQzYpLCBcCisgICAgVigwMyw4Riw1RixFNyksIFYoMTUs OTIsOUMsOTUpLCBWKEJGLDZELDdBLEVCKSwgVig5NSw1Miw1OSxEQSksIFwKKyAgICBWKEQ0LEJF LDgzLDJEKSwgVig1OCw3NCwyMSxEMyksIFYoNDksRTAsNjksMjkpLCBWKDhFLEM5LEM4LDQ0KSwg XAorICAgIFYoNzUsQzIsODksNkEpLCBWKEY0LDhFLDc5LDc4KSwgVig5OSw1OCwzRSw2QiksIFYo MjcsQjksNzEsREQpLCBcCisgICAgVihCRSxFMSw0RixCNiksIFYoRjAsODgsQUQsMTcpLCBWKEM5 LDIwLEFDLDY2KSwgVig3RCxDRSwzQSxCNCksIFwKKyAgICBWKDYzLERGLDRBLDE4KSwgVihFNSwx QSwzMSw4MiksIFYoOTcsNTEsMzMsNjApLCBWKDYyLDUzLDdGLDQ1KSwgXAorICAgIFYoQjEsNjQs NzcsRTApLCBWKEJCLDZCLEFFLDg0KSwgVihGRSw4MSxBMCwxQyksIFYoRjksMDgsMkIsOTQpLCBc CisgICAgVig3MCw0OCw2OCw1OCksIFYoOEYsNDUsRkQsMTkpLCBWKDk0LERFLDZDLDg3KSwgVig1 Miw3QixGOCxCNyksIFwKKyAgICBWKEFCLDczLEQzLDIzKSwgVig3Miw0QiwwMixFMiksIFYoRTMs MUYsOEYsNTcpLCBWKDY2LDU1LEFCLDJBKSwgXAorICAgIFYoQjIsRUIsMjgsMDcpLCBWKDJGLEI1 LEMyLDAzKSwgVig4NixDNSw3Qiw5QSksIFYoRDMsMzcsMDgsQTUpLCBcCisgICAgVigzMCwyOCw4 NyxGMiksIFYoMjMsQkYsQTUsQjIpLCBWKDAyLDAzLDZBLEJBKSwgVihFRCwxNiw4Miw1QyksIFwK KyAgICBWKDhBLENGLDFDLDJCKSwgVihBNyw3OSxCNCw5MiksIFYoRjMsMDcsRjIsRjApLCBWKDRF LDY5LEUyLEExKSwgXAorICAgIFYoNjUsREEsRjQsQ0QpLCBWKDA2LDA1LEJFLEQ1KSwgVihEMSwz NCw2MiwxRiksIFYoQzQsQTYsRkUsOEEpLCBcCisgICAgVigzNCwyRSw1Myw5RCksIFYoQTIsRjMs NTUsQTApLCBWKDA1LDhBLEUxLDMyKSwgVihBNCxGNixFQiw3NSksIFwKKyAgICBWKDBCLDgzLEVD LDM5KSwgVig0MCw2MCxFRixBQSksIFYoNUUsNzEsOUYsMDYpLCBWKEJELDZFLDEwLDUxKSwgXAor ICAgIFYoM0UsMjEsOEEsRjkpLCBWKDk2LERELDA2LDNEKSwgVihERCwzRSwwNSxBRSksIFYoNEQs RTYsQkQsNDYpLCBcCisgICAgVig5MSw1NCw4RCxCNSksIFYoNzEsQzQsNUQsMDUpLCBWKDA0LDA2 LEQ0LDZGKSwgVig2MCw1MCwxNSxGRiksIFwKKyAgICBWKDE5LDk4LEZCLDI0KSwgVihENixCRCxF OSw5NyksIFYoODksNDAsNDMsQ0MpLCBWKDY3LEQ5LDlFLDc3KSwgXAorICAgIFYoQjAsRTgsNDIs QkQpLCBWKDA3LDg5LDhCLDg4KSwgVihFNywxOSw1QiwzOCksIFYoNzksQzgsRUUsREIpLCBcCisg ICAgVihBMSw3QywwQSw0NyksIFYoN0MsNDIsMEYsRTkpLCBWKEY4LDg0LDFFLEM5KSwgVigwMCww MCwwMCwwMCksIFwKKyAgICBWKDA5LDgwLDg2LDgzKSwgVigzMiwyQixFRCw0OCksIFYoMUUsMTEs NzAsQUMpLCBWKDZDLDVBLDcyLDRFKSwgXAorICAgIFYoRkQsMEUsRkYsRkIpLCBWKDBGLDg1LDM4 LDU2KSwgVigzRCxBRSxENSwxRSksIFYoMzYsMkQsMzksMjcpLCBcCisgICAgVigwQSwwRixEOSw2 NCksIFYoNjgsNUMsQTYsMjEpLCBWKDlCLDVCLDU0LEQxKSwgVigyNCwzNiwyRSwzQSksIFwKKyAg ICBWKDBDLDBBLDY3LEIxKSwgVig5Myw1NyxFNywwRiksIFYoQjQsRUUsOTYsRDIpLCBWKDFCLDlC LDkxLDlFKSwgXAorICAgIFYoODAsQzAsQzUsNEYpLCBWKDYxLERDLDIwLEEyKSwgVig1QSw3Nyw0 Qiw2OSksIFYoMUMsMTIsMUEsMTYpLCBcCisgICAgVihFMiw5MyxCQSwwQSksIFYoQzAsQTAsMkEs RTUpLCBWKDNDLDIyLEUwLDQzKSwgVigxMiwxQiwxNywxRCksIFwKKyAgICBWKDBFLDA5LDBELDBC KSwgVihGMiw4QixDNyxBRCksIFYoMkQsQjYsQTgsQjkpLCBWKDE0LDFFLEE5LEM4KSwgXAorICAg IFYoNTcsRjEsMTksODUpLCBWKEFGLDc1LDA3LDRDKSwgVihFRSw5OSxERCxCQiksIFYoQTMsN0Ys NjAsRkQpLCBcCisgICAgVihGNywwMSwyNiw5RiksIFYoNUMsNzIsRjUsQkMpLCBWKDQ0LDY2LDNC LEM1KSwgVig1QixGQiw3RSwzNCksIFwKKyAgICBWKDhCLDQzLDI5LDc2KSwgVihDQiwyMyxDNixE QyksIFYoQjYsRUQsRkMsNjgpLCBWKEI4LEU0LEYxLDYzKSwgXAorICAgIFYoRDcsMzEsREMsQ0Ep LCBWKDQyLDYzLDg1LDEwKSwgVigxMyw5NywyMiw0MCksIFYoODQsQzYsMTEsMjApLCBcCisgICAg Vig4NSw0QSwyNCw3RCksIFYoRDIsQkIsM0QsRjgpLCBWKEFFLEY5LDMyLDExKSwgVihDNywyOSxB MSw2RCksIFwKKyAgICBWKDFELDlFLDJGLDRCKSwgVihEQyxCMiwzMCxGMyksIFYoMEQsODYsNTIs RUMpLCBWKDc3LEMxLEUzLEQwKSwgXAorICAgIFYoMkIsQjMsMTYsNkMpLCBWKEE5LDcwLEI5LDk5 KSwgVigxMSw5NCw0OCxGQSksIFYoNDcsRTksNjQsMjIpLCBcCisgICAgVihBOCxGQyw4QyxDNCks IFYoQTAsRjAsM0YsMUEpLCBWKDU2LDdELDJDLEQ4KSwgVigyMiwzMyw5MCxFRiksIFwKKyAgICBW KDg3LDQ5LDRFLEM3KSwgVihEOSwzOCxEMSxDMSksIFYoOEMsQ0EsQTIsRkUpLCBWKDk4LEQ0LDBC LDM2KSwgXAorICAgIFYoQTYsRjUsODEsQ0YpLCBWKEE1LDdBLERFLDI4KSwgVihEQSxCNyw4RSwy NiksIFYoM0YsQUQsQkYsQTQpLCBcCisgICAgVigyQywzQSw5RCxFNCksIFYoNTAsNzgsOTIsMEQp LCBWKDZBLDVGLENDLDlCKSwgVig1NCw3RSw0Niw2MiksIFwKKyAgICBWKEY2LDhELDEzLEMyKSwg Vig5MCxEOCxCOCxFOCksIFYoMkUsMzksRjcsNUUpLCBWKDgyLEMzLEFGLEY1KSwgXAorICAgIFYo OUYsNUQsODAsQkUpLCBWKDY5LEQwLDkzLDdDKSwgVig2RixENSwyRCxBOSksIFYoQ0YsMjUsMTIs QjMpLCBcCisgICAgVihDOCxBQyw5OSwzQiksIFYoMTAsMTgsN0QsQTcpLCBWKEU4LDlDLDYzLDZF KSwgVihEQiwzQixCQiw3QiksIFwKKyAgICBWKENELDI2LDc4LDA5KSwgVig2RSw1OSwxOCxGNCks IFYoRUMsOUEsQjcsMDEpLCBWKDgzLDRGLDlBLEE4KSwgXAorICAgIFYoRTYsOTUsNkUsNjUpLCBW KEFBLEZGLEU2LDdFKSwgVigyMSxCQyxDRiwwOCksIFYoRUYsMTUsRTgsRTYpLCBcCisgICAgVihC QSxFNyw5QixEOSksIFYoNEEsNkYsMzYsQ0UpLCBWKEVBLDlGLDA5LEQ0KSwgVigyOSxCMCw3QyxE NiksIFwKKyAgICBWKDMxLEE0LEIyLEFGKSwgVigyQSwzRiwyMywzMSksIFYoQzYsQTUsOTQsMzAp LCBWKDM1LEEyLDY2LEMwKSwgXAorICAgIFYoNzQsNEUsQkMsMzcpLCBWKEZDLDgyLENBLEE2KSwg VihFMCw5MCxEMCxCMCksIFYoMzMsQTcsRDgsMTUpLCBcCisgICAgVihGMSwwNCw5OCw0QSksIFYo NDEsRUMsREEsRjcpLCBWKDdGLENELDUwLDBFKSwgVigxNyw5MSxGNiwyRiksIFwKKyAgICBWKDc2 LDRELEQ2LDhEKSwgVig0MyxFRixCMCw0RCksIFYoQ0MsQUEsNEQsNTQpLCBWKEU0LDk2LDA0LERG KSwgXAorICAgIFYoOUUsRDEsQjUsRTMpLCBWKDRDLDZBLDg4LDFCKSwgVihDMSwyQywxRixCOCks IFYoNDYsNjUsNTEsN0YpLCBcCisgICAgVig5RCw1RSxFQSwwNCksIFYoMDEsOEMsMzUsNUQpLCBW KEZBLDg3LDc0LDczKSwgVihGQiwwQiw0MSwyRSksIFwKKyAgICBWKEIzLDY3LDFELDVBKSwgVig5 MixEQixEMiw1MiksIFYoRTksMTAsNTYsMzMpLCBWKDZELEQ2LDQ3LDEzKSwgXAorICAgIFYoOUEs RDcsNjEsOEMpLCBWKDM3LEExLDBDLDdBKSwgVig1OSxGOCwxNCw4RSksIFYoRUIsMTMsM0MsODkp LCBcCisgICAgVihDRSxBOSwyNyxFRSksIFYoQjcsNjEsQzksMzUpLCBWKEUxLDFDLEU1LEVEKSwg Vig3QSw0NyxCMSwzQyksIFwKKyAgICBWKDlDLEQyLERGLDU5KSwgVig1NSxGMiw3MywzRiksIFYo MTgsMTQsQ0UsNzkpLCBWKDczLEM3LDM3LEJGKSwgXAorICAgIFYoNTMsRjcsQ0QsRUEpLCBWKDVG LEZELEFBLDVCKSwgVihERiwzRCw2RiwxNCksIFYoNzgsNDQsREIsODYpLCBcCisgICAgVihDQSxB RixGMyw4MSksIFYoQjksNjgsQzQsM0UpLCBWKDM4LDI0LDM0LDJDKSwgVihDMixBMyw0MCw1Riks IFwKKyAgICBWKDE2LDFELEMzLDcyKSwgVihCQyxFMiwyNSwwQyksIFYoMjgsM0MsNDksOEIpLCBW KEZGLDBELDk1LDQxKSwgXAorICAgIFYoMzksQTgsMDEsNzEpLCBWKDA4LDBDLEIzLERFKSwgVihE OCxCNCxFNCw5QyksIFYoNjQsNTYsQzEsOTApLCBcCisgICAgVig3QixDQiw4NCw2MSksIFYoRDUs MzIsQjYsNzApLCBWKDQ4LDZDLDVDLDc0KSwgVihEMCxCOCw1Nyw0MikKKworI2RlZmluZSBWKGEs YixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgY29uc3QgdWludDMyIFJUMFsyNTZdID0geyBS VCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCitzdGF0 aWMgY29uc3QgdWludDMyIFJUMVsyNTZdID0geyBSVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBW KGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCitzdGF0aWMgY29uc3QgdWludDMyIFJUMlsyNTZdID0g eyBSVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNiIyNjIyNkIyNhCitz dGF0aWMgY29uc3QgdWludDMyIFJUM1syNTZdID0geyBSVCB9OworI3VuZGVmIFYKKworI3VuZGVm IFJUCisKKy8qCisgKiBSb3VuZCBjb25zdGFudHMKKyAqLworc3RhdGljIGNvbnN0IHVpbnQzMiBS Q09OWzEwXSA9Cit7CisgICAgMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgw ODAwMDAwMCwKKyAgICAweDEwMDAwMDAwLCAweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDgwMDAw MDAwLAorICAgIDB4MUIwMDAwMDAsIDB4MzYwMDAwMDAKK307CisKK3N0YXRpYyB2b2lkIGFlc19n ZW5fdGFibGVzKCB2b2lkICkge30KKworI2VuZGlmCisKKy8qCisgKiBEZWNyeXB0aW9uIGtleSBz Y2hlZHVsZSB0YWJsZXMKKyAqLworc3RhdGljIHVpbnQzMiBLVDBbMjU2XTsKK3N0YXRpYyB1aW50 MzIgS1QxWzI1Nl07CitzdGF0aWMgdWludDMyIEtUMlsyNTZdOworc3RhdGljIHVpbnQzMiBLVDNb MjU2XTsKKworLyoKKyAqIEFFUyBrZXkgc2NoZWR1bGUKKyAqLworc3RhdGljIHZvaWQgYWVzX3Nl dF9rZXkoIGFlc19jb250ZXh0ICpjdHgsIGNvbnN0IHVpbnQ4ICprZXksIGludCBrZXlzaXplICkK K3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzIgKlJLLCAqU0s7CisgICAgc3RhdGljIGludCBmdF9p bml0ID0gMDsKKyAgICBzdGF0aWMgaW50IGt0X2luaXQgPSAwOworCisgICAgaWYoIGZ0X2luaXQg PT0gMCApCisgICAgeworICAgICAgICBhZXNfZ2VuX3RhYmxlcygpOworCisgICAgICAgIGZ0X2lu aXQgPSAxOworICAgIH0KKworICAgIHN3aXRjaCgga2V5c2l6ZSApCisgICAgeworICAgICAgICBj YXNlIDEyODogY3R4LT5uciA9IDEwOyBicmVhazsKKyAgICAgICAgY2FzZSAxOTI6IGN0eC0+bnIg PSAxMjsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OiBjdHgtPm5yID0gMTQ7IGJyZWFrOworICAg ICAgICBkZWZhdWx0IDogcmV0dXJuOworICAgIH0KKworICAgIFJLID0gY3R4LT5lcms7CisKKyAg ICBmb3IoIGkgPSAwOyBpIDwgKGtleXNpemUgPj4gNSk7IGkrKyApCisgICAgeworICAgICAgICBH RVRfVUlOVDMyX0JFKCBSS1tpXSwga2V5LCBpIDw8IDIgKTsKKyAgICB9CisKKyAgICAvKgorICAg ICAqIHNldHVwIGVuY3J5cHRpb24gcm91bmQga2V5cworICAgICAqLworICAgIHN3aXRjaCggY3R4 LT5uciApCisgICAgeworICAgIGNhc2UgMTA6CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDEw OyBpKyssIFJLICs9IDQgKQorICAgICAgICB7CisgICAgICAgICAgICBSS1s0XSAgPSBSS1swXSBe IFJDT05baV0gXgorICAgICAgICAgICAgICAgICggRlNiWyAodWludDgpICggUktbM10gPj4gMTYg KSBdIDw8IDI0ICkgXgorICAgICAgICAgICAgICAgICggRlNiWyAodWludDgpICggUktbM10gPj4g IDggKSBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICggRlNiWyAodWludDgpICggUktbM10g ICAgICAgKSBdIDw8ICA4ICkgXgorICAgICAgICAgICAgICAgICggRlNiWyAodWludDgpICggUktb M10gPj4gMjQgKSBdICAgICAgICk7CisKKyAgICAgICAgICAgIFJLWzVdICA9IFJLWzFdIF4gUktb NF07CisgICAgICAgICAgICBSS1s2XSAgPSBSS1syXSBeIFJLWzVdOworICAgICAgICAgICAgUktb N10gID0gUktbM10gXiBSS1s2XTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNh c2UgMTI6CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKywgUksgKz0gNiApCisgICAg ICAgIHsKKyAgICAgICAgICAgIFJLWzZdICA9IFJLWzBdIF4gUkNPTltpXSBeCisgICAgICAgICAg ICAgICAgKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAxNiApIF0gPDwgMjQgKSBeCisgICAgICAg ICAgICAgICAgKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAgOCApIF0gPDwgMTYgKSBeCisgICAg ICAgICAgICAgICAgKCBGU2JbICh1aW50OCkgKCBSS1s1XSAgICAgICApIF0gPDwgIDggKSBeCisg ICAgICAgICAgICAgICAgKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAyNCApIF0gICAgICAgKTsK KworICAgICAgICAgICAgUktbN10gID0gUktbMV0gXiBSS1s2XTsKKyAgICAgICAgICAgIFJLWzhd ICA9IFJLWzJdIF4gUktbN107CisgICAgICAgICAgICBSS1s5XSAgPSBSS1szXSBeIFJLWzhdOwor ICAgICAgICAgICAgUktbMTBdID0gUktbNF0gXiBSS1s5XTsKKyAgICAgICAgICAgIFJLWzExXSA9 IFJLWzVdIF4gUktbMTBdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAx NDoKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgNzsgaSsrLCBSSyArPSA4ICkKKyAgICAgICAg eworICAgICAgICAgICAgUktbOF0gID0gUktbMF0gXiBSQ09OW2ldIF4KKyAgICAgICAgICAgICAg ICAoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+IDE2ICkgXSA8PCAyNCApIF4KKyAgICAgICAgICAg ICAgICAoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+ICA4ICkgXSA8PCAxNiApIF4KKyAgICAgICAg ICAgICAgICAoIEZTYlsgKHVpbnQ4KSAoIFJLWzddICAgICAgICkgXSA8PCAgOCApIF4KKyAgICAg ICAgICAgICAgICAoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+IDI0ICkgXSAgICAgICApOworCisg ICAgICAgICAgICBSS1s5XSAgPSBSS1sxXSBeIFJLWzhdOworICAgICAgICAgICAgUktbMTBdID0g UktbMl0gXiBSS1s5XTsKKyAgICAgICAgICAgIFJLWzExXSA9IFJLWzNdIF4gUktbMTBdOworCisg ICAgICAgICAgICBSS1sxMl0gPSBSS1s0XSBeCisgICAgICAgICAgICAgICAgKCBGU2JbICh1aW50 OCkgKCBSS1sxMV0gPj4gMjQgKSBdIDw8IDI0ICkgXgorICAgICAgICAgICAgICAgICggRlNiWyAo dWludDgpICggUktbMTFdID4+IDE2ICkgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAoIEZT YlsgKHVpbnQ4KSAoIFJLWzExXSA+PiAgOCApIF0gPDwgIDggKSBeCisgICAgICAgICAgICAgICAg KCBGU2JbICh1aW50OCkgKCBSS1sxMV0gICAgICAgKSBdICAgICAgICk7CisKKyAgICAgICAgICAg IFJLWzEzXSA9IFJLWzVdIF4gUktbMTJdOworICAgICAgICAgICAgUktbMTRdID0gUktbNl0gXiBS S1sxM107CisgICAgICAgICAgICBSS1sxNV0gPSBSS1s3XSBeIFJLWzE0XTsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor CisgICAgLyoKKyAgICAgKiBzZXR1cCBkZWNyeXB0aW9uIHJvdW5kIGtleXMKKyAgICAgKi8KKyAg ICBpZigga3RfaW5pdCA9PSAwICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCAyNTY7 IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIEtUMFtpXSA9IFJUMFsgRlNiW2ldIF07Cisg ICAgICAgICAgICBLVDFbaV0gPSBSVDFbIEZTYltpXSBdOworICAgICAgICAgICAgS1QyW2ldID0g UlQyWyBGU2JbaV0gXTsKKyAgICAgICAgICAgIEtUM1tpXSA9IFJUM1sgRlNiW2ldIF07CisgICAg ICAgIH0KKworICAgICAgICBrdF9pbml0ID0gMTsKKyAgICB9CisKKyAgICBTSyA9IGN0eC0+ZHJr OworCisgICAgKlNLKysgPSAqUksrKzsKKyAgICAqU0srKyA9ICpSSysrOworICAgICpTSysrID0g KlJLKys7CisgICAgKlNLKysgPSAqUksrKzsKKworICAgIGZvciggaSA9IDE7IGkgPCBjdHgtPm5y OyBpKysgKQorICAgIHsKKyAgICAgICAgUksgLT0gODsKKworICAgICAgICAqU0srKyA9IEtUMFsg KHVpbnQ4KSAoICpSSyA+PiAyNCApIF0gXgorICAgICAgICAgICAgICAgIEtUMVsgKHVpbnQ4KSAo ICpSSyA+PiAxNiApIF0gXgorICAgICAgICAgICAgICAgIEtUMlsgKHVpbnQ4KSAoICpSSyA+PiAg OCApIF0gXgorICAgICAgICAgICAgICAgIEtUM1sgKHVpbnQ4KSAoICpSSyAgICAgICApIF07IFJL Kys7CisKKyAgICAgICAgKlNLKysgPSBLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKyAg ICAgICAgICAgICAgICBLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKyAgICAgICAgICAg ICAgICBLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKyAgICAgICAgICAgICAgICBLVDNb ICh1aW50OCkgKCAqUksgICAgICAgKSBdOyBSSysrOworCisgICAgICAgICpTSysrID0gS1QwWyAo dWludDgpICggKlJLID4+IDI0ICkgXSBeCisgICAgICAgICAgICAgICAgS1QxWyAodWludDgpICgg KlJLID4+IDE2ICkgXSBeCisgICAgICAgICAgICAgICAgS1QyWyAodWludDgpICggKlJLID4+ICA4 ICkgXSBeCisgICAgICAgICAgICAgICAgS1QzWyAodWludDgpICggKlJLICAgICAgICkgXTsgUksr KzsKKworICAgICAgICAqU0srKyA9IEtUMFsgKHVpbnQ4KSAoICpSSyA+PiAyNCApIF0gXgorICAg ICAgICAgICAgICAgIEtUMVsgKHVpbnQ4KSAoICpSSyA+PiAxNiApIF0gXgorICAgICAgICAgICAg ICAgIEtUMlsgKHVpbnQ4KSAoICpSSyA+PiAgOCApIF0gXgorICAgICAgICAgICAgICAgIEtUM1sg KHVpbnQ4KSAoICpSSyAgICAgICApIF07IFJLKys7CisgICAgfQorCisgICAgUksgLT0gODsKKwor ICAgICpTSysrID0gKlJLKys7CisgICAgKlNLKysgPSAqUksrKzsKKyAgICAqU0srKyA9ICpSSysr OworICAgICpTSysrID0gKlJLKys7Cit9CisKKy8qKgorICogQUVTIGJsb2NrIGVuY3J5cHRpb24g KEVDQiBtb2RlKQorICovCitzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdCggYWVzX2NvbnRleHQgKmN0 eCwKKwkJCSB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKwkJCSB1bnNpZ25lZCBjaGFyIG91dHB1 dFsxNl0gKQoreworICAgIHVpbnQzMiAqUkssIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZ MzsKKworICAgIFJLID0gY3R4LT5lcms7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYMCwgaW5wdXQs ICAwICk7IFgwIF49IFJLWzBdOworICAgIEdFVF9VSU5UMzJfQkUoIFgxLCBpbnB1dCwgIDQgKTsg WDEgXj0gUktbMV07CisgICAgR0VUX1VJTlQzMl9CRSggWDIsIGlucHV0LCAgOCApOyBYMiBePSBS S1syXTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYMywgaW5wdXQsIDEyICk7IFgzIF49IFJLWzNdOwor CisjZGVmaW5lIEFFU19GUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpICAgICAgICAgICAg IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIFJLICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBYMCA9IFJLWzBdIF4gRlQwWyAodWludDgpICggWTAgPj4gMjQgKSBdIF4g ICAgICAgICAgXAorICAgICAgICAgICAgICAgICBGVDFbICh1aW50OCkgKCBZMSA+PiAxNiApIF0g XiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEZUMlsgKHVpbnQ4KSAoIFkyID4+ICA4ICkg XSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgRlQzWyAodWludDgpICggWTMgICAgICAg KSBdOyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgWDEgPSBSS1sxXSBeIEZUMFsgKHVpbnQ4KSAoIFkxID4+ IDI0ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgRlQxWyAodWludDgpICggWTIg Pj4gMTYgKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAgICAgICBGVDJbICh1aW50OCkgKCBZ MyA+PiAgOCApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEZUM1sgKHVpbnQ4KSAo IFkwICAgICAgICkgXTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgyID0gUktbMl0gXiBGVDBbICh1aW50 OCkgKCBZMiA+PiAyNCApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEZUMVsgKHVp bnQ4KSAoIFkzID4+IDE2ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgRlQyWyAo dWludDgpICggWTAgPj4gIDggKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAgICAgICBGVDNb ICh1aW50OCkgKCBZMSAgICAgICApIF07ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMyA9IFJLWzNdIF4g RlQwWyAodWludDgpICggWTMgPj4gMjQgKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAgICAg ICBGVDFbICh1aW50OCkgKCBZMCA+PiAxNiApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgIEZUMlsgKHVpbnQ4KSAoIFkxID4+ICA4ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAg ICAgICAgRlQzWyAodWludDgpICggWTIgICAgICAgKSBdOyAgICAgICAgICAgXAorfQorCisgICAg QUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX0ZS T1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgQUVTX0ZST1VORCgg WTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX0ZST1VORCggWDAsIFgx LCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwg WTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX0ZST1VORCggWDAsIFgxLCBYMiwgWDMsIFkw LCBZMSwgWTIsIFkzICk7CisgICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwg WDIsIFgzICk7CisgICAgQUVTX0ZST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkz ICk7CisgICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisK KyAgICBpZiggY3R4LT5uciA+IDEwICkKKyAgICB7CisgICAgICAgIEFFU19GUk9VTkQoIFgwLCBY MSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyApOworICAgICAgICBBRVNfRlJPVU5EKCBZMCwgWTEs IFkyLCBZMywgWDAsIFgxLCBYMiwgWDMgKTsKKyAgICB9CisKKyAgICBpZiggY3R4LT5uciA+IDEy ICkKKyAgICB7CisgICAgICAgIEFFU19GUk9VTkQoIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFky LCBZMyApOworICAgICAgICBBRVNfRlJPVU5EKCBZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwg WDMgKTsKKyAgICB9CisKKyAgICBSSyArPSA0OworCisgICAgWDAgPSBSS1swXSBeICggRlNiWyAo dWludDgpICggWTAgPj4gMjQgKSBdIDw8IDI0ICkgXgorICAgICAgICAgICAgICAgICAoIEZTYlsg KHVpbnQ4KSAoIFkxID4+IDE2ICkgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAgKCBGU2Jb ICh1aW50OCkgKCBZMiA+PiAgOCApIF0gPDwgIDggKSBeCisgICAgICAgICAgICAgICAgICggRlNi WyAodWludDgpICggWTMgICAgICAgKSBdICAgICAgICk7CisKKyAgICBYMSA9IFJLWzFdIF4gKCBG U2JbICh1aW50OCkgKCBZMSA+PiAyNCApIF0gPDwgMjQgKSBeCisgICAgICAgICAgICAgICAgICgg RlNiWyAodWludDgpICggWTIgPj4gMTYgKSBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICAo IEZTYlsgKHVpbnQ4KSAoIFkzID4+ICA4ICkgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICAgICAg KCBGU2JbICh1aW50OCkgKCBZMCAgICAgICApIF0gICAgICAgKTsKKworICAgIFgyID0gUktbMl0g XiAoIEZTYlsgKHVpbnQ4KSAoIFkyID4+IDI0ICkgXSA8PCAyNCApIF4KKyAgICAgICAgICAgICAg ICAgKCBGU2JbICh1aW50OCkgKCBZMyA+PiAxNiApIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAg ICAgICggRlNiWyAodWludDgpICggWTAgPj4gIDggKSBdIDw8ICA4ICkgXgorICAgICAgICAgICAg ICAgICAoIEZTYlsgKHVpbnQ4KSAoIFkxICAgICAgICkgXSAgICAgICApOworCisgICAgWDMgPSBS S1szXSBeICggRlNiWyAodWludDgpICggWTMgPj4gMjQgKSBdIDw8IDI0ICkgXgorICAgICAgICAg ICAgICAgICAoIEZTYlsgKHVpbnQ4KSAoIFkwID4+IDE2ICkgXSA8PCAxNiApIF4KKyAgICAgICAg ICAgICAgICAgKCBGU2JbICh1aW50OCkgKCBZMSA+PiAgOCApIF0gPDwgIDggKSBeCisgICAgICAg ICAgICAgICAgICggRlNiWyAodWludDgpICggWTIgICAgICAgKSBdICAgICAgICk7CisKKyAgICBQ VVRfVUlOVDMyX0JFKCBYMCwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIFgxLCBv dXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9CRSggWDIsIG91dHB1dCwgIDggKTsKKyAgICBQ VVRfVUlOVDMyX0JFKCBYMywgb3V0cHV0LCAxMiApOworfQorCisvKgorICogQUVTIGJsb2NrIGRl Y3J5cHRpb24gKEVDQiBtb2RlKQorICovCitzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdCggYWVzX2Nv bnRleHQgKmN0eCwKKwkJCSB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKwkJCSB1bnNpZ25lZCBj aGFyIG91dHB1dFsxNl0gKQoreworICAgIHVpbnQzMiAqUkssIFgwLCBYMSwgWDIsIFgzLCBZMCwg WTEsIFkyLCBZMzsKKworICAgIFJLID0gY3R4LT5kcms7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBY MCwgaW5wdXQsICAwICk7IFgwIF49IFJLWzBdOworICAgIEdFVF9VSU5UMzJfQkUoIFgxLCBpbnB1 dCwgIDQgKTsgWDEgXj0gUktbMV07CisgICAgR0VUX1VJTlQzMl9CRSggWDIsIGlucHV0LCAgOCAp OyBYMiBePSBSS1syXTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYMywgaW5wdXQsIDEyICk7IFgzIF49 IFJLWzNdOworCisjZGVmaW5lIEFFU19SUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpICAg ICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIFJLICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICBYMCA9IFJLWzBdIF4gUlQwWyAodWludDgpICggWTAgPj4g MjQgKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAgICAgICBSVDFbICh1aW50OCkgKCBZMyA+ PiAxNiApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIFJUMlsgKHVpbnQ4KSAoIFky ID4+ICA4ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgUlQzWyAodWludDgpICgg WTEgICAgICAgKSBdOyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWDEgPSBSS1sxXSBeIFJUMFsgKHVpbnQ4 KSAoIFkxID4+IDI0ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgUlQxWyAodWlu dDgpICggWTAgPj4gMTYgKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAgICAgICBSVDJbICh1 aW50OCkgKCBZMyA+PiAgOCApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIFJUM1sg KHVpbnQ4KSAoIFkyICAgICAgICkgXTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgyID0gUktbMl0gXiBS VDBbICh1aW50OCkgKCBZMiA+PiAyNCApIF0gXiAgICAgICAgICBcCisgICAgICAgICAgICAgICAg IFJUMVsgKHVpbnQ4KSAoIFkxID4+IDE2ICkgXSBeICAgICAgICAgIFwKKyAgICAgICAgICAgICAg ICAgUlQyWyAodWludDgpICggWTAgPj4gIDggKSBdIF4gICAgICAgICAgXAorICAgICAgICAgICAg ICAgICBSVDNbICh1aW50OCkgKCBZMyAgICAgICApIF07ICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMyA9 IFJLWzNdIF4gUlQwWyAodWludDgpICggWTMgPj4gMjQgKSBdIF4gICAgICAgICAgXAorICAgICAg ICAgICAgICAgICBSVDFbICh1aW50OCkgKCBZMiA+PiAxNiApIF0gXiAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgIFJUMlsgKHVpbnQ4KSAoIFkxID4+ICA4ICkgXSBeICAgICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgUlQzWyAodWludDgpICggWTAgICAgICAgKSBdOyAgICAgICAgICAgXAor fQorCisgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7Cisg ICAgQUVTX1JST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgQUVT X1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX1JST1VO RCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgQUVTX1JST1VORCggWTAs IFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX1JST1VORCggWDAsIFgxLCBY MiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMs IFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX1JST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZ MSwgWTIsIFkzICk7CisgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIs IFgzICk7CisKKyAgICBpZiggY3R4LT5uciA+IDEwICkKKyAgICB7CisgICAgICAgIEFFU19SUk9V TkQoIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyApOworICAgICAgICBBRVNfUlJPVU5E KCBZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMgKTsKKyAgICB9CisKKyAgICBpZiggY3R4 LT5uciA+IDEyICkKKyAgICB7CisgICAgICAgIEFFU19SUk9VTkQoIFgwLCBYMSwgWDIsIFgzLCBZ MCwgWTEsIFkyLCBZMyApOworICAgICAgICBBRVNfUlJPVU5EKCBZMCwgWTEsIFkyLCBZMywgWDAs IFgxLCBYMiwgWDMgKTsKKyAgICB9CisKKyAgICBSSyArPSA0OworCisgICAgWDAgPSBSS1swXSBe ICggUlNiWyAodWludDgpICggWTAgPj4gMjQgKSBdIDw8IDI0ICkgXgorICAgICAgICAgICAgICAg ICAoIFJTYlsgKHVpbnQ4KSAoIFkzID4+IDE2ICkgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICAg ICAgKCBSU2JbICh1aW50OCkgKCBZMiA+PiAgOCApIF0gPDwgIDggKSBeCisgICAgICAgICAgICAg ICAgICggUlNiWyAodWludDgpICggWTEgICAgICAgKSBdICAgICAgICk7CisKKyAgICBYMSA9IFJL WzFdIF4gKCBSU2JbICh1aW50OCkgKCBZMSA+PiAyNCApIF0gPDwgMjQgKSBeCisgICAgICAgICAg ICAgICAgICggUlNiWyAodWludDgpICggWTAgPj4gMTYgKSBdIDw8IDE2ICkgXgorICAgICAgICAg ICAgICAgICAoIFJTYlsgKHVpbnQ4KSAoIFkzID4+ICA4ICkgXSA8PCAgOCApIF4KKyAgICAgICAg ICAgICAgICAgKCBSU2JbICh1aW50OCkgKCBZMiAgICAgICApIF0gICAgICAgKTsKKworICAgIFgy ID0gUktbMl0gXiAoIFJTYlsgKHVpbnQ4KSAoIFkyID4+IDI0ICkgXSA8PCAyNCApIF4KKyAgICAg ICAgICAgICAgICAgKCBSU2JbICh1aW50OCkgKCBZMSA+PiAxNiApIF0gPDwgMTYgKSBeCisgICAg ICAgICAgICAgICAgICggUlNiWyAodWludDgpICggWTAgPj4gIDggKSBdIDw8ICA4ICkgXgorICAg ICAgICAgICAgICAgICAoIFJTYlsgKHVpbnQ4KSAoIFkzICAgICAgICkgXSAgICAgICApOworCisg ICAgWDMgPSBSS1szXSBeICggUlNiWyAodWludDgpICggWTMgPj4gMjQgKSBdIDw8IDI0ICkgXgor ICAgICAgICAgICAgICAgICAoIFJTYlsgKHVpbnQ4KSAoIFkyID4+IDE2ICkgXSA8PCAxNiApIF4K KyAgICAgICAgICAgICAgICAgKCBSU2JbICh1aW50OCkgKCBZMSA+PiAgOCApIF0gPDwgIDggKSBe CisgICAgICAgICAgICAgICAgICggUlNiWyAodWludDgpICggWTAgICAgICAgKSBdICAgICAgICk7 CisKKyAgICBQVVRfVUlOVDMyX0JFKCBYMCwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJf QkUoIFgxLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9CRSggWDIsIG91dHB1dCwgIDgg KTsKKyAgICBQVVRfVUlOVDMyX0JFKCBYMywgb3V0cHV0LCAxMiApOworfQorCisvKgorICogQUVT LUNCQyBidWZmZXIgZW5jcnlwdGlvbgorICovCitzdGF0aWMgdm9pZCBhZXNfY2JjX2VuY3J5cHQo IGFlc19jb250ZXh0ICpjdHgsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorCQkJICAg ICB1bnNpZ25lZCBjaGFyICppbnB1dCwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAor CQkJICAgICBpbnQgbGVuICkKK3sKKyAgICBpbnQgaTsKKworICAgIHdoaWxlKCBsZW4gPiAwICkK KyAgICB7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgIG91 dHB1dFtpXSA9IGlucHV0W2ldIF4gaXZbaV07CisKKyAgICAgICAgYWVzX2VuY3J5cHQoIGN0eCwg b3V0cHV0LCBvdXRwdXQgKTsKKyAgICAgICAgZ3J1Yl9tZW1jcHkoIGl2LCBvdXRwdXQsIDE2ICk7 CisKKyAgICAgICAgaW5wdXQgICs9IDE2OworICAgICAgICBvdXRwdXQgKz0gMTY7CisgICAgICAg IGxlbiAgICAtPSAxNjsKKyAgICB9Cit9CisKKy8qCisgKiBBRVMtQ0JDIGJ1ZmZlciBkZWNyeXB0 aW9uCisgKi8KK3N0YXRpYyB2b2lkIGFlc19jYmNfZGVjcnlwdCggYWVzX2NvbnRleHQgKmN0eCwK KwkJCSAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmlu cHV0LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCQkgICAgIGludCBsZW4gKQor eworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcFsxNl07CisKKyAgICB3aGlsZSgg bGVuID4gMCApCisgICAgeworICAgICAgICBncnViX21lbWNweSggdGVtcCwgaW5wdXQsIDE2ICk7 CisgICAgICAgIGFlc19kZWNyeXB0KCBjdHgsIGlucHV0LCBvdXRwdXQgKTsKKworICAgICAgICBm b3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICBvdXRwdXRbaV0gPSBvdXRwdXRb aV0gXiBpdltpXTsKKworICAgICAgICBncnViX21lbWNweSggaXYsIHRlbXAsIDE2ICk7CisKKyAg ICAgICAgaW5wdXQgICs9IDE2OworICAgICAgICBvdXRwdXQgKz0gMTY7CisgICAgICAgIGxlbiAg ICAtPSAxNjsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIF9hZXNfc3JjW10gPSAiX2Fl c19zcmMiOworCisjaWYgZGVmaW5lZChTRUxGX1RFU1QpCisKKyNpbmNsdWRlIDxzdGRpby5oPgor CisvKgorICogQUVTLUVDQiB0ZXN0IHZlY3RvcnMgKHNvdXJjZTogTklTVCwgcmlqbmRhZWwtdmFs cy56aXApCisgKi8KK3N0YXRpYyBjb25zdCB1aW50OCBhZXNfZW5jX3Rlc3RbM11bMTZdID0KK3sK KyAgICB7IDB4QzMsIDB4NEMsIDB4MDUsIDB4MkMsIDB4QzAsIDB4REEsIDB4OEQsIDB4NzMsCisg ICAgICAweDQ1LCAweDFBLCAweEZFLCAweDVGLCAweDAzLCAweEJFLCAweDI5LCAweDdGIH0sCisg ICAgeyAweEYzLCAweEY2LCAweDc1LCAweDJBLCAweEU4LCAweEQ3LCAweDgzLCAweDExLAorICAg ICAgMHgzOCwgMHhGMCwgMHg0MSwgMHg1NiwgMHgwNiwgMHgzMSwgMHhCMSwgMHgxNCB9LAorICAg IHsgMHg4QiwgMHg3OSwgMHhFRSwgMHhDQywgMHg5MywgMHhBMCwgMHhFRSwgMHg1RCwKKyAgICAg IDB4RkYsIDB4MzAsIDB4QjQsIDB4RUEsIDB4MjEsIDB4NjMsIDB4NkQsIDB4QTQgfQorfTsKKyAg ICAKK3N0YXRpYyBjb25zdCB1aW50OCBhZXNfZGVjX3Rlc3RbM11bMTZdID0KK3sKKyAgICB7IDB4 NDQsIDB4NDEsIDB4NkEsIDB4QzIsIDB4RDEsIDB4RjUsIDB4M0MsIDB4NTgsCisgICAgICAweDMz LCAweDAzLCAweDkxLCAweDdFLCAweDZCLCAweEU5LCAweEVCLCAweEUwIH0sCisgICAgeyAweDQ4 LCAweEUzLCAweDFFLCAweDlFLCAweDI1LCAweDY3LCAweDE4LCAweEYyLAorICAgICAgMHg5Miwg MHgyOSwgMHgzMSwgMHg5QywgMHgxOSwgMHhGMSwgMHg1QiwgMHhBNCB9LAorICAgIHsgMHgwNSwg MHg4QywgMHhDRiwgMHhGRCwgMHhCQiwgMHhDQiwgMHgzOCwgMHgyRCwKKyAgICAgIDB4MUYsIDB4 NkYsIDB4NTYsIDB4NTgsIDB4NUQsIDB4OEEsIDB4NEEsIDB4REUgfQorfTsKKworLyoKKyAqIENo ZWNrdXAgcm91dGluZQorICovCitpbnQgYWVzX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQorewor ICAgIGludCBpLCBqLCB1LCB2OworICAgIGFlc19jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBj aGFyIGJ1ZlszMl07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgNjsgaSsrICkKKyAgICB7CisgICAg ICAgIHUgPSBpID4+IDE7CisgICAgICAgIHYgPSBpICAmIDE7CisKKyAgICAgICAgaWYoIHZlcmJv c2UgIT0gMCApCisgICAgICAgICAgICBwcmludGYoICIgIEFFUy1FQ0ItJTNkICglcyk6ICIsIDEy OCArIHUgKiA2NCwKKyAgICAgICAgICAgICAgICAgICAgKCB2ID09IDAgKSA/ICJlbmMiIDogImRl YyIgKTsKKworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgMzIgKTsKKyAgICAgICAgYWVzX3NldF9r ZXkoICZjdHgsIGJ1ZiwgMTI4ICsgdSAqIDY0ICk7CisKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8 IDEwMDAwOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdiA9PSAwICkgYWVzX2Vu Y3J5cHQoICZjdHgsIGJ1ZiwgYnVmICk7CisgICAgICAgICAgICBpZiggdiA9PSAxICkgYWVzX2Rl Y3J5cHQoICZjdHgsIGJ1ZiwgYnVmICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCB2ID09 IDAgJiYgbWVtY21wKCBidWYsIGFlc19lbmNfdGVzdFt1XSwgMTYgKSAhPSAwICkgfHwKKyAgICAg ICAgICAgICggdiA9PSAxICYmIG1lbWNtcCggYnVmLCBhZXNfZGVjX3Rlc3RbdV0sIDE2ICkgIT0g MCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAg ICAgICAgICAgcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggMSAp OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBw cmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAg ICAgICAgcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZgorCisv KioqIEdOVSBHUlVCMiBpbnRlcmZhY2UgKioqLworCitzdGF0aWMgZ3J1Yl9lcnJfdCBncnViX2Np cGhlcl9hZXNfaW5pdChncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMpCit7CisgIHBhcmFtcy0+ cHJpdmF0ZSA9IGdydWJfbWFsbG9jKHNpemVvZihhZXNfY29udGV4dCkpOworCisgIGlmKCFwYXJh bXMtPnByaXZhdGUpCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgcGFyYW1zLT5rZXlzaXpl ID0gMzI7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBncnViX2Vycl90IGdydWJfY2lwaGVy X2Flc19jYmNfaW5pdChncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMpCit7CisgIGdydWJfZXJy X3QgZXJyOworCisgIGlmKChlcnIgPSBncnViX2NpcGhlcl9hZXNfaW5pdChwYXJhbXMpKSkgcmV0 dXJuIGVycjsKKyAgaWYoIShwYXJhbXMtPnUuY2lwaGVyLml2ID0gZ3J1Yl9tYWxsb2MoMTYpKSkg cmV0dXJuIGdydWJfZXJybm87CisgIGdydWJfbWVtc2V0KHBhcmFtcy0+dS5jaXBoZXIuaXYsIDAs IDE2KTsKKyAgcGFyYW1zLT51LmNpcGhlci5pdl9sZW5ndGggPSAxNjsKKyAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGdydWJfY2lwaGVyX2Flc19kZWluaXQoZ3J1Yl9jaXBoZXJfcGFyYW1z X3QgcGFyYW1zKQoreworICBncnViX2ZyZWUocGFyYW1zLT5wcml2YXRlKTsKK30KKworc3RhdGlj IHZvaWQgZ3J1Yl9jaXBoZXJfYWVzX2NiY19kZWluaXQoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFy YW1zKQoreworICBncnViX2ZyZWUocGFyYW1zLT51LmNpcGhlci5pdik7CisgIGdydWJfY2lwaGVy X2Flc19kZWluaXQocGFyYW1zKTsKK30KKworc3RhdGljIGdydWJfZXJyX3QgZ3J1Yl9jaXBoZXJf YWVzX3NldF9rZXkoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFyYW1zLCBjb25zdCBjaGFyICprZXkp Cit7CisgIGFlc19zZXRfa2V5KHBhcmFtcy0+cHJpdmF0ZSwgKHVpbnQ4ICopa2V5LCBwYXJhbXMt PmtleXNpemUgKiA4KTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBncnViX2Vycl90IGdydWJf Y2lwaGVyX2Flc19kZWNyeXB0X2lucGxhY2UoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFyYW1zLAor CQkJCQkJICBjaGFyICpidWYsIGdydWJfc2l6ZV90IHNpemUpCit7CisgIGdydWJfc2l6ZV90IGk7 CisKKyAgaWYoc2l6ZSAlIDE2ICE9IDApCisgICAgcmV0dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJf QkFEX0FSR1VNRU5ULCAiU2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDE2Iik7CisKKyAgZm9yKGkg PSAwOyBpIDwgc2l6ZTsgaSArPSAxNikKKyAgICBhZXNfZGVjcnlwdChwYXJhbXMtPnByaXZhdGUs ICh1bnNpZ25lZCBjaGFyICopYnVmICsgaSwKKwkJKHVuc2lnbmVkIGNoYXIgKilidWYgKyBpKTsK KworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdydWJfZXJyX3QgZ3J1Yl9jaXBoZXJfYWVzX2Ni Y19kZWNyeXB0X2lucGxhY2UoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFyYW1zLAorCQkJCQkJICAg ICAgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplKQoreworICBpZihwYXJhbXMtPnUuY2lwaGVy Lml2X2xlbmd0aCAhPSAxNikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvcihHUlVCX0VSUl9CQURfQVJH VU1FTlQsICJJViBsZW5ndGggaW5jb3JyZWN0Iik7CisKKyAgYWVzX2NiY19kZWNyeXB0KHBhcmFt cy0+cHJpdmF0ZSwgcGFyYW1zLT51LmNpcGhlci5pdiwgKHVuc2lnbmVkIGNoYXIgKilidWYsCisJ CSAgKHVuc2lnbmVkIGNoYXIgKilidWYsIHNpemUpOworICByZXR1cm4gMDsKK30KKworI2RlZmlu ZSBGSUVMRFNPRihhKQkoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorCitzdGF0aWMgY29uc3Qg dW5zaWduZWQgaW50IGFlc19rZXlzaXplc1tdID0geyAzMiB9OworCitzdGF0aWMgc3RydWN0IGdy dWJfY2lwaGVyIGdydWJfY2lwaGVyX2FlcyA9IHsKKyAgLm5hbWUgPSAiYWVzIiwKKyAgLnR5cGUg PSBHUlVCX0NJUEhFUl9UWVBFX0NJUEhFUiwKKyAgLmtleXNpemVzID0gYWVzX2tleXNpemVzLAor ICAua2V5c2l6ZXNfbGVuZ3RoID0gRklFTERTT0YoYWVzX2tleXNpemVzKSwKKworICAuaW5pdCA9 IGdydWJfY2lwaGVyX2Flc19pbml0LAorICAuZGVpbml0ID0gZ3J1Yl9jaXBoZXJfYWVzX2RlaW5p dCwKKyAgLnUuY2lwaGVyID0geworICAgIC5zZXRfa2V5ID0gZ3J1Yl9jaXBoZXJfYWVzX3NldF9r ZXksCisgICAgLmVuY3J5cHQgPSBOVUxMLAorICAgIC5kZWNyeXB0ID0gTlVMTCwKKyAgICAuZGVj cnlwdF9pbnBsYWNlID0gZ3J1Yl9jaXBoZXJfYWVzX2RlY3J5cHRfaW5wbGFjZSwKKyAgICAuZW5j cnlwdF9pbnBsYWNlID0gTlVMTAorICB9Cit9OworCitzdGF0aWMgc3RydWN0IGdydWJfY2lwaGVy IGdydWJfY2lwaGVyX2Flc19jYmMgPSB7CisgIC5uYW1lID0gImFlcy1jYmMiLAorICAudHlwZSA9 IEdSVUJfQ0lQSEVSX1RZUEVfQ0lQSEVSLAorICAua2V5c2l6ZXMgPSBhZXNfa2V5c2l6ZXMsCisg IC5rZXlzaXplc19sZW5ndGggPSBGSUVMRFNPRihhZXNfa2V5c2l6ZXMpLAorCisgIC5pbml0ID0g Z3J1Yl9jaXBoZXJfYWVzX2NiY19pbml0LAorICAuZGVpbml0ID0gZ3J1Yl9jaXBoZXJfYWVzX2Ni Y19kZWluaXQsCisgIC51LmNpcGhlciA9IHsKKyAgICAuc2V0X2tleSA9IGdydWJfY2lwaGVyX2Fl c19zZXRfa2V5LAorICAgIC5lbmNyeXB0ID0gTlVMTCwKKyAgICAuZGVjcnlwdCA9IE5VTEwsCisg ICAgLmRlY3J5cHRfaW5wbGFjZSA9IGdydWJfY2lwaGVyX2Flc19jYmNfZGVjcnlwdF9pbnBsYWNl LAorICAgIC5lbmNyeXB0X2lucGxhY2UgPSBOVUxMCisgIH0KK307CisKK0dSVUJfTU9EX0lOSVQo YWVzKQoreworICAodm9pZCltb2Q7CQkJLyogVG8gc3RvcCB3YXJuaW5nLiAqLworICBncnViX2Ny eXB0b19jaXBoZXJfcmVnaXN0ZXIoJmdydWJfY2lwaGVyX2Flcyk7CisgIGdydWJfY3J5cHRvX2Np cGhlcl9yZWdpc3RlcigmZ3J1Yl9jaXBoZXJfYWVzX2NiYyk7Cit9CisKK0dSVUJfTU9EX0ZJTkko YWVzKQoreworICBncnViX2NyeXB0b19jaXBoZXJfdW5yZWdpc3RlcigmZ3J1Yl9jaXBoZXJfYWVz KTsKKyAgZ3J1Yl9jcnlwdG9fY2lwaGVyX3VucmVnaXN0ZXIoJmdydWJfY2lwaGVyX2Flc19jYmMp OworfQpkaWZmIC11IC1yIC14IENWUyAtTiBncnViMi1vcmlnL2NyeXB0by9jcnlwdG8uYyBncnVi Mi9jcnlwdG8vY3J5cHRvLmMKLS0tIGdydWIyLW9yaWcvY3J5cHRvL2NyeXB0by5jCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBncnViMi9jcnlwdG8vY3J5cHRvLmMJMjAw Ny0wOS0wMiAwMjowODoxMy4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisg KiBjcnlwdG8uYyAtIFN0cm9uZyBjcnlwdG9ncmFwaHkgQVBJIGZvciBHUlVCCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDA3IFNpbW9uIFBldGVyIDxkbi50bHBAZ214Lm5ldD4KKyAqIFRoYW5rcyB0 byBSYW91bCBCb2VuaXNjaCA8amtsMzQ1QGdteC5uZXQ+IGZvciB0aGUgaW5pdGlhbCBpZGVhLgor ICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDMsMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgor ICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRl IDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIu aD4KKyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9jcnlwdG8uaD4KKworI2Rl ZmluZSBNQVgoYSwgYikJKGEgPiBiID8gYSA6IGIpCisKK3N0cnVjdCBjaXBoZXJfbGlzdCB7Cisg IGdydWJfY2lwaGVyX3QJCWNpcGhlcjsKKyAgc3RydWN0IGNpcGhlcl9saXN0CSpuZXh0OworfTsK Kworc3RhdGljIHN0cnVjdCBjaXBoZXJfbGlzdCAqY2lwaGVyX2xpc3QgPSBOVUxMOworCitncnVi X2Vycl90CitncnViX2NyeXB0b19oYXNoKGdydWJfY2lwaGVyX3BhcmFtc190IHBhcmFtcywgY2hh ciAqaGFzaCwgY29uc3QgY2hhciAqcGF5bG9hZCwKKwkJIHVuc2lnbmVkIGludCBzaXplKQorewor ICByZXR1cm4gcGFyYW1zLT5jaXBoZXItPnUuaGFzaC5mbihwYXJhbXMsIGhhc2gsIHBheWxvYWQs IHNpemUpOworfQorCitzdGF0aWMgZ3J1Yl9jaXBoZXJfdAorZ2V0X2NpcGhlcihjb25zdCBjaGFy ICpuYW1lLCBncnViX2NpcGhlcl90eXBlX3QgdHlwZSkKK3sKKyAgc3RydWN0IGNpcGhlcl9saXN0 ICppOworCisgIGZvcihpID0gY2lwaGVyX2xpc3Q7IGkgIT0gTlVMTDsgaSA9IGktPm5leHQpCisg ICAgaWYoIWdydWJfc3RyY21wKGktPmNpcGhlci0+bmFtZSwgbmFtZSkgJiYgaS0+Y2lwaGVyLT50 eXBlID09IHR5cGUpCisgICAgICByZXR1cm4gaS0+Y2lwaGVyOworCisgIHJldHVybiBOVUxMOwor fQorCitncnViX2Vycl90CitncnViX2NyeXB0b19uZXdfY2lwaGVyKGdydWJfY2lwaGVyX3BhcmFt c190ICpwYXJhbXMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBncnViX2NpcGhlcl90eXBl X3QgdHlwZSkKK3sKKyAgZ3J1Yl9jaXBoZXJfdAljaXBoZXIgPSBnZXRfY2lwaGVyKG5hbWUsIHR5 cGUpOworICBncnViX2Vycl90CWVycjsKKworICBpZihjaXBoZXIgPT0gTlVMTCkgeworICAgIGNv bnN0IGNoYXIgKmVycnN0ciA9ICJJbGxlZ2FsIGNpcGhlciB0eXBlIjsKKworICAgIHN3aXRjaCh0 eXBlKSB7CisgICAgY2FzZSBHUlVCX0NJUEhFUl9UWVBFX05PTkU6CisgICAgICBicmVhazsKKwor ICAgIGNhc2UgR1JVQl9DSVBIRVJfVFlQRV9DSVBIRVI6CisgICAgICBlcnJzdHIgPSAiVW5rbm93 biBjaXBoZXIiOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdSVUJfQ0lQSEVSX1RZUEVfSEFT SDoKKyAgICAgIGVycnN0ciA9ICJVbmtub3duIGhhc2giOworICAgICAgYnJlYWs7CisgICAgfQor CisgICAgcmV0dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBlcnJzdHIpOwor ICB9CisKKyAgKnBhcmFtcyA9IGdydWJfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3J1Yl9jaXBoZXJf cGFyYW1zKSk7CisgIGlmKCpwYXJhbXMgPT0gTlVMTCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsK KworICBpZihjaXBoZXItPmluaXQpIHsKKyAgICBpZigoZXJyID0gY2lwaGVyLT5pbml0KCpwYXJh bXMpKSAhPSBHUlVCX0VSUl9OT05FKSB7CisgICAgICBncnViX2ZyZWUoKnBhcmFtcyk7CisgICAg ICByZXR1cm4gZXJyOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB1bnNpZ25lZCBpbnQgaSwga2V5 c2l6ZSA9IDA7CisKKyAgICAvKiBTZXQga2V5c2l6ZSB0byBsYXJnZXN0ICovCisgICAgZm9yKGkg PSAwOyBpIDwgY2lwaGVyLT5rZXlzaXplc19sZW5ndGg7IGkrKykKKyAgICAgIGtleXNpemUgPSBN QVgoa2V5c2l6ZSwgY2lwaGVyLT5rZXlzaXplc1tpXSk7CisKKyAgICAoKnBhcmFtcyktPmtleXNp emUgPSBrZXlzaXplOworICB9CisKKyAgKCpwYXJhbXMpLT5jaXBoZXIgPSBjaXBoZXI7CisgIHJl dHVybiBHUlVCX0VSUl9OT05FOworfQorCit2b2lkCitncnViX2NyeXB0b19kZWxldGVfY2lwaGVy KGdydWJfY2lwaGVyX3BhcmFtc190IHBhcmFtcykKK3sKKyAgaWYocGFyYW1zLT5jaXBoZXItPmRl aW5pdCkKKyAgICBwYXJhbXMtPmNpcGhlci0+ZGVpbml0KHBhcmFtcyk7CisKKyAgZ3J1Yl9mcmVl KHBhcmFtcyk7Cit9CisKK2ludAorZ3J1Yl9jcnlwdG9fY2lwaGVyX2l0ZXJhdGUoZ3J1Yl9jcnlw dG9faG9vayBob29rLCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3QgY2lwaGVyX2xpc3QgKmk7CisK KyAgZm9yKGkgPSBjaXBoZXJfbGlzdDsgaSAhPSBOVUxMOyBpID0gaS0+bmV4dCkKKyAgICBpZiho b29rKGktPmNpcGhlciwgZGF0YSkpCisgICAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30K Kwordm9pZAorZ3J1Yl9jcnlwdG9fY2lwaGVyX3JlZ2lzdGVyKGdydWJfY2lwaGVyX3QgY2lwaGVy KQoreworICBzdHJ1Y3QgY2lwaGVyX2xpc3QgKm5ld2NpcGhlciA9IGdydWJfbWFsbG9jKHNpemVv ZihzdHJ1Y3QgY2lwaGVyX2xpc3QpKTsKKworICBpZighbmV3Y2lwaGVyKSByZXR1cm47CS8qIG91 dCBvZiBtZW1vcnkhICovCisKKyAgbmV3Y2lwaGVyLT5jaXBoZXIgPSBjaXBoZXI7CisgIG5ld2Np cGhlci0+bmV4dCA9IGNpcGhlcl9saXN0OworICBjaXBoZXJfbGlzdCA9IG5ld2NpcGhlcjsKK30K Kwordm9pZAorZ3J1Yl9jcnlwdG9fY2lwaGVyX3VucmVnaXN0ZXIoZ3J1Yl9jaXBoZXJfdCBjaXBo ZXIpCit7CisgIHN0cnVjdCBjaXBoZXJfbGlzdCAqaSwgKipwcmV2OworCisgIGZvcihpID0gY2lw aGVyX2xpc3QsIHByZXYgPSAmY2lwaGVyX2xpc3Q7IGkgIT0gTlVMTDsgcHJldiA9ICZpLT5uZXh0 LCBpID0gaS0+bmV4dCkKKyAgICBpZighZ3J1Yl9zdHJjbXAoaS0+Y2lwaGVyLT5uYW1lLCBjaXBo ZXItPm5hbWUpKQorICAgICAgYnJlYWs7CisKKyAgaWYoIWkpIHsKKyAgICBncnViX3ByaW50Zigi QlVHOiBUcnlpbmcgdG8gdW5yZWdpc3RlciBhIG5vbi1yZWdpc3RlcmVkIGNpcGhlciFcbiIpOwor ICAgIHJldHVybjsKKyAgfQorCisgIC8qIFJlbW92ZSBjaXBoZXIgZnJvbSBsaXN0ICovCisgICpw cmV2ID0gaS0+bmV4dDsKKyAgZ3J1Yl9mcmVlKGkpOworfQorCitncnViX2Vycl90CitncnViX2Ny eXB0b19zZXRfa2V5KGdydWJfY2lwaGVyX3BhcmFtc190IHBhcmFtcywgY29uc3QgY2hhciAqa2V5 KQoreworICBpZihwYXJhbXMtPmNpcGhlci0+dS5jaXBoZXIuc2V0X2tleSkKKyAgICByZXR1cm4g cGFyYW1zLT5jaXBoZXItPnUuY2lwaGVyLnNldF9rZXkocGFyYW1zLCBrZXkpOworICBlbHNlCisg ICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK2dydWJfZXJyX3QgZ3J1Yl9jcnlwdG9fZW5j cnlwdChncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMsIGNoYXIgKipvdXQsCisJCQkgICAgICAg Y29uc3QgY2hhciAqaW4sIGdydWJfc2l6ZV90ICpvdXRzaXplLAorCQkJICAgICAgIGdydWJfc2l6 ZV90IGluc2l6ZSkKK3sKKyAgaWYocGFyYW1zLT5jaXBoZXItPnUuY2lwaGVyLmVuY3J5cHQpCisg ICAgcmV0dXJuIHBhcmFtcy0+Y2lwaGVyLT51LmNpcGhlci5lbmNyeXB0KHBhcmFtcywgb3V0LCBp biwgb3V0c2l6ZSwgaW5zaXplKTsKKyAgZWxzZQorICAgIHJldHVybiBHUlVCX0VSUl9OT1RfSU1Q TEVNRU5URURfWUVUOworfQorCitncnViX2Vycl90IGdydWJfY3J5cHRvX2RlY3J5cHQoZ3J1Yl9j aXBoZXJfcGFyYW1zX3QgcGFyYW1zLCBjaGFyICoqb3V0LAorCQkJICAgICAgIGNvbnN0IGNoYXIg KmluLCBncnViX3NpemVfdCAqb3V0c2l6ZSwKKwkJCSAgICAgICBncnViX3NpemVfdCBpbnNpemUp Cit7CisgIGlmKHBhcmFtcy0+Y2lwaGVyLT51LmNpcGhlci5kZWNyeXB0KQorICAgIHJldHVybiBw YXJhbXMtPmNpcGhlci0+dS5jaXBoZXIuZGVjcnlwdChwYXJhbXMsIG91dCwgaW4sIG91dHNpemUs IGluc2l6ZSk7CisgIGVsc2UKKyAgICByZXR1cm4gR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lF VDsKK30KKworZ3J1Yl9lcnJfdCBncnViX2NyeXB0b19kZWNyeXB0X2lucGxhY2UoZ3J1Yl9jaXBo ZXJfcGFyYW1zX3QgcGFyYW1zLCBjaGFyICpidWYsCisJCQkJICAgICAgIGdydWJfc2l6ZV90IHNp emUpCit7CisgIGlmKHBhcmFtcy0+Y2lwaGVyLT51LmNpcGhlci5kZWNyeXB0X2lucGxhY2UpCisg ICAgcmV0dXJuIHBhcmFtcy0+Y2lwaGVyLT51LmNpcGhlci5kZWNyeXB0X2lucGxhY2UocGFyYW1z LCBidWYsIHNpemUpOworICBlbHNlCisgICAgcmV0dXJuIEdSVUJfRVJSX05PVF9JTVBMRU1FTlRF RF9ZRVQ7Cit9CisKK2dydWJfZXJyX3QgZ3J1Yl9jcnlwdG9fZW5jcnlwdF9pbnBsYWNlKGdydWJf Y2lwaGVyX3BhcmFtc190IHBhcmFtcywgY2hhciAqYnVmLAorCQkJCSAgICAgICBncnViX3NpemVf dCBzaXplKQoreworICBpZihwYXJhbXMtPmNpcGhlci0+dS5jaXBoZXIuZW5jcnlwdF9pbnBsYWNl KQorICAgIHJldHVybiBwYXJhbXMtPmNpcGhlci0+dS5jaXBoZXIuZW5jcnlwdF9pbnBsYWNlKHBh cmFtcywgYnVmLCBzaXplKTsKKyAgZWxzZQorICAgIHJldHVybiBHUlVCX0VSUl9OT1RfSU1QTEVN RU5URURfWUVUOworfQorCisvKioqKiogTm9uZSBjaXBoZXIgaW50ZXJmYWNlICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgZ3J1Yl9lcnJf dAorY2lwaGVyX25vbmVfY3J5cHQoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgdW51c2VkLCBjaGFyICoq b3V0LCBjb25zdCBjaGFyICppbiwgZ3J1Yl9zaXplX3QgKm91dHNpemUsIGdydWJfc2l6ZV90IGlu c2l6ZSkKK3sKKyAgKHZvaWQpdW51c2VkOworICBpZighKCpvdXQgPSBncnViX21hbGxvYyhpbnNp emUpKSkgcmV0dXJuIGdydWJfZXJybm87CisgICpvdXQgPSBncnViX21lbWNweSgqb3V0LCBpbiwg aW5zaXplKTsKKyAgKm91dHNpemUgPSBpbnNpemU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg Z3J1Yl9lcnJfdAorY2lwaGVyX25vbmVfY3J5cHRfaW5wbGFjZShncnViX2NpcGhlcl9wYXJhbXNf dCB1bnVzZWQsIGNoYXIgKmJ1ZiwgZ3J1Yl9zaXplX3Qgc2l6ZSkKK3sKKyAgKHZvaWQpdW51c2Vk OworICAodm9pZClidWY7CisgICh2b2lkKXNpemU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg Z3J1Yl9lcnJfdAoraGFzaF9ub25lX2ZuKGdydWJfY2lwaGVyX3BhcmFtc190IHBhcmFtcywgY2hh ciAqb3V0LCBjb25zdCBjaGFyICppbiwgZ3J1Yl9zaXplX3QgaW5zaXplKQoreworICBwYXJhbXMt PmtleXNpemUgPSBpbnNpemU7CisgIGdydWJfbWVtY3B5KG91dCwgaW4sIGluc2l6ZSk7CisgIHJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdydWJfY2lwaGVyIGdydWJfY2lwaGVyX25vbmUg PSB7CisgIC5uYW1lID0gIm5vbmUiLAorICAudHlwZSA9IEdSVUJfQ0lQSEVSX1RZUEVfQ0lQSEVS LAorICAua2V5c2l6ZXNfbGVuZ3RoID0gMCwKKworICAudS5jaXBoZXIgPSB7CisgICAgLmVuY3J5 cHQgPSBjaXBoZXJfbm9uZV9jcnlwdCwKKyAgICAuZGVjcnlwdCA9IGNpcGhlcl9ub25lX2NyeXB0 LAorICAgIC5kZWNyeXB0X2lucGxhY2UgPSBjaXBoZXJfbm9uZV9jcnlwdF9pbnBsYWNlLAorICAg IC5lbmNyeXB0X2lucGxhY2UgPSBjaXBoZXJfbm9uZV9jcnlwdF9pbnBsYWNlCisgIH0KK307CisK K3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9jaXBoZXIgZ3J1Yl9oYXNoX25vbmUgPSB7CisgIC5uYW1lID0g Im5vbmUiLAorICAudHlwZSA9IEdSVUJfQ0lQSEVSX1RZUEVfSEFTSCwKKyAgLmtleXNpemVzX2xl bmd0aCA9IDAsCisgIC51Lmhhc2guZm4gPSBoYXNoX25vbmVfZm4KK307CisKKy8qKioqKiBHUlVC IG1vZHVsZSAoZGUtKWluaXRpYWxpemF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK0dSVUJfTU9EX0lOSVQoY3J5cHRvKQoreworICAodm9pZCltb2Q7CQkJLyog VG8gc3RvcCB3YXJuaW5nLiAqLworICBncnViX2NyeXB0b19jaXBoZXJfcmVnaXN0ZXIoJmdydWJf Y2lwaGVyX25vbmUpOworICBncnViX2NyeXB0b19jaXBoZXJfcmVnaXN0ZXIoJmdydWJfaGFzaF9u b25lKTsKK30KKworR1JVQl9NT0RfRklOSShjcnlwdG8pCit7CisgIGdydWJfY3J5cHRvX2NpcGhl cl91bnJlZ2lzdGVyKCZncnViX2hhc2hfbm9uZSk7CisgIGdydWJfY3J5cHRvX2NpcGhlcl91bnJl Z2lzdGVyKCZncnViX2NpcGhlcl9ub25lKTsKK30KZGlmZiAtdSAtciAteCBDVlMgLU4gZ3J1YjIt b3JpZy9jcnlwdG8vcm1kMTYwLmMgZ3J1YjIvY3J5cHRvL3JtZDE2MC5jCi0tLSBncnViMi1vcmln L2NyeXB0by9ybWQxNjAuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysg Z3J1YjIvY3J5cHRvL3JtZDE2MC5jCTIwMDctMDktMDIgMDA6NTI6NTcuMDAwMDAwMDAwICswMjAw CkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogMjAwNy0wOS0wMTogTW9kaWZpZWQgZm9yIEdOVSBH UlVCIGJ5IFNpbW9uIFBldGVyIDxkbi50bHBAZ214Lm5ldD4uCisgKi8KKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK KyAqCisgKiAgICAgIEZJTEU6ICAgICBybWQxNjAuYworICoKKyAqICAgICAgQ09OVEVOVFM6IEEg c2FtcGxlIEMtaW1wbGVtZW50YXRpb24gb2YgdGhlIFJJUEVNRC0xNjAKKyAqICAgICAgICAgICAg ICAgIGhhc2gtZnVuY3Rpb24uCisgKiAgICAgIFRBUkdFVDogICBhbnkgY29tcHV0ZXIgd2l0aCBh biBBTlNJIEMgY29tcGlsZXIKKyAqCisgKiAgICAgIEFVVEhPUjogICBBbnRvb24gQm9zc2VsYWVy cywgRVNBVC1DT1NJQworICogICAgICBEQVRFOiAgICAgMSBNYXJjaCAxOTk2CisgKiAgICAgIFZF UlNJT046ICAxLjAKKyAqCisgKiAgICAgIENvcHlyaWdodCAoYykgS2F0aG9saWVrZSBVbml2ZXJz aXRlaXQgTGV1dmVuCisgKiAgICAgIDE5OTYsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiAg Q29uZGl0aW9ucyBmb3IgdXNlIG9mIHRoZSBSSVBFTUQtMTYwIFNvZnR3YXJlCisgKgorICogIFRo ZSBSSVBFTUQtMTYwIHNvZnR3YXJlIGlzIGZyZWVseSBhdmFpbGFibGUgZm9yIHVzZSB1bmRlciB0 aGUgdGVybXMgYW5kCisgKiAgY29uZGl0aW9ucyBkZXNjcmliZWQgaGVyZXVuZGVyLCB3aGljaCBz aGFsbCBiZSBkZWVtZWQgdG8gYmUgYWNjZXB0ZWQgYnkKKyAqICBhbnkgdXNlciBvZiB0aGUgc29m dHdhcmUgYW5kIGFwcGxpY2FibGUgb24gYW55IHVzZSBvZiB0aGUgc29mdHdhcmU6CisgKiAKKyAq ICAxLiBLLlUuTGV1dmVuIERlcGFydG1lbnQgb2YgRWxlY3RyaWNhbCBFbmdpbmVlcmluZy1FU0FU L0NPU0lDIHNoYWxsIGZvcgorICogICAgIGFsbCBwdXJwb3NlcyBiZSBjb25zaWRlcmVkIHRoZSBv d25lciBvZiB0aGUgUklQRU1ELTE2MCBzb2Z0d2FyZSBhbmQgb2YKKyAqICAgICBhbGwgY29weXJp Z2h0LCB0cmFkZSBzZWNyZXQsIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkK KyAqICAgICByaWdodHMgdGhlcmVpbi4KKyAqICAyLiBUaGUgUklQRU1ELTE2MCBzb2Z0d2FyZSBp cyBwcm92aWRlZCBvbiBhbiAiYXMgaXMiIGJhc2lzIHdpdGhvdXQKKyAqICAgICB3YXJyYW50eSBv ZiBhbnkgc29ydCwgZXhwcmVzcyBvciBpbXBsaWVkLiBLLlUuTGV1dmVuIG1ha2VzIG5vCisgKiAg ICAgcmVwcmVzZW50YXRpb24gdGhhdCB0aGUgdXNlIG9mIHRoZSBzb2Z0d2FyZSB3aWxsIG5vdCBp bmZyaW5nZSBhbnkKKyAqICAgICBwYXRlbnQgb3IgcHJvcHJpZXRhcnkgcmlnaHQgb2YgdGhpcmQg cGFydGllcy4gVXNlciB3aWxsIGluZGVtbmlmeQorICogICAgIEsuVS5MZXV2ZW4gYW5kIGhvbGQg Sy5VLkxldXZlbiBoYXJtbGVzcyBmcm9tIGFueSBjbGFpbXMgb3IgbGlhYmlsaXRpZXMKKyAqICAg ICB3aGljaCBtYXkgYXJpc2UgYXMgYSByZXN1bHQgb2YgaXRzIHVzZSBvZiB0aGUgc29mdHdhcmUu IEluIG5vCisgKiAgICAgY2lyY3Vtc3RhbmNlcyBLLlUuTGV1dmVuIFImRCB3aWxsIGJlIGhlbGQg bGlhYmxlIGZvciBhbnkgZGVmaWNpZW5jeSwKKyAqICAgICBmYXVsdCBvciBvdGhlciBtaXNoYXBw ZW5pbmcgd2l0aCByZWdhcmQgdG8gdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZgorICogICAgIHRo ZSBzb2Z0d2FyZS4KKyAqICAzLiBVc2VyIGFncmVlcyB0byBnaXZlIGR1ZSBjcmVkaXQgdG8gSy5V LkxldXZlbiBpbiBzY2llbnRpZmljIHB1YmxpY2F0aW9ucyAKKyAqICAgICBvciBjb21tdW5pY2F0 aW9ucyBpbiByZWxhdGlvbiB3aXRoIHRoZSB1c2Ugb2YgdGhlIFJJUEVNRC0xNjAgc29mdHdhcmUg CisgKiAgICAgYXMgZm9sbG93czogUklQRU1ELTE2MCBzb2Z0d2FyZSB3cml0dGVuIGJ5IEFudG9v biBCb3NzZWxhZXJzLCAKKyAqICAgICBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lc2F0Lmt1bGV1 dmVuLmJlL35jb3NpY2FydC9wcy9BQi05NjAxLy4KKyAqCitcKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNs dWRlIDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9k bC5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisKKy8qIHR5cGVkZWYgOCBhbmQgMzIgYml0 IHR5cGVzLCByZXNwLiAgKi8KKy8qIGFkYXB0IHRoZXNlLCBpZiBuZWNlc3NhcnksIAorICAgZm9y IHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBhbmQgY29tcGlsZXIgKi8KK3R5cGVkZWYgICAgdW5zaWdu ZWQgY2hhciAgICAgICAgYnl0ZTsKK3R5cGVkZWYgICAgdW5zaWduZWQgbG9uZyAgICAgICAgZHdv cmQ7CisKKy8qIG1hY3JvIGRlZmluaXRpb25zICovCisKKy8qIGNvbGxlY3QgZm91ciBieXRlcyBp bnRvIG9uZSB3b3JkOiAqLworI2RlZmluZSBCWVRFU19UT19EV09SRChzdHJwdHIpICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICAoKChkd29yZCkgKigoc3RycHRyKSszKSA8PCAyNCkg fCBcCisgICAgICAgICAgICAgKChkd29yZCkgKigoc3RycHRyKSsyKSA8PCAxNikgfCBcCisgICAg ICAgICAgICAgKChkd29yZCkgKigoc3RycHRyKSsxKSA8PCAgOCkgfCBcCisgICAgICAgICAgICAg KChkd29yZCkgKihzdHJwdHIpKSkKKworLyogUk9MKHgsIG4pIGN5Y2xpY2FsbHkgcm90YXRlcyB4 IG92ZXIgbiBiaXRzIHRvIHRoZSBsZWZ0ICovCisvKiB4IG11c3QgYmUgb2YgYW4gdW5zaWduZWQg MzIgYml0cyB0eXBlIGFuZCAwIDw9IG4gPCAzMi4gKi8KKyNkZWZpbmUgUk9MKHgsIG4pICAgICAg ICAoKCh4KSA8PCAobikpIHwgKCh4KSA+PiAoMzItKG4pKSkpCisKKy8qIHRoZSBmaXZlIGJhc2lj IGZ1bmN0aW9ucyBGKCksIEcoKSBhbmQgSCgpICovCisjZGVmaW5lIEYoeCwgeSwgeikgICAgICAg ICgoeCkgXiAoeSkgXiAoeikpIAorI2RlZmluZSBHKHgsIHksIHopICAgICAgICAoKCh4KSAmICh5 KSkgfCAofih4KSAmICh6KSkpIAorI2RlZmluZSBIKHgsIHksIHopICAgICAgICAoKCh4KSB8IH4o eSkpIF4gKHopKQorI2RlZmluZSBJKHgsIHksIHopICAgICAgICAoKCh4KSAmICh6KSkgfCAoKHkp ICYgfih6KSkpIAorI2RlZmluZSBKKHgsIHksIHopICAgICAgICAoKHgpIF4gKCh5KSB8IH4oeikp KQorICAKKy8qIHRoZSB0ZW4gYmFzaWMgb3BlcmF0aW9ucyBGRigpIHRocm91Z2ggSUlJKCkgKi8K KyNkZWZpbmUgRkYoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIHtcCisgICAgICAoYSkgKz0g RigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBST0woKGEpLCAocykpICsgKGUp O1wKKyAgICAgIChjKSA9IFJPTCgoYyksIDEwKTtcCisgICB9CisjZGVmaW5lIEdHKGEsIGIsIGMs IGQsIGUsIHgsIHMpICAgICAgICB7XAorICAgICAgKGEpICs9IEcoKGIpLCAoYyksIChkKSkgKyAo eCkgKyAweDVhODI3OTk5VUw7XAorICAgICAgKGEpID0gUk9MKChhKSwgKHMpKSArIChlKTtcCisg ICAgICAoYykgPSBST0woKGMpLCAxMCk7XAorICAgfQorI2RlZmluZSBISChhLCBiLCBjLCBkLCBl LCB4LCBzKSAgICAgICAge1wKKyAgICAgIChhKSArPSBIKChiKSwgKGMpLCAoZCkpICsgKHgpICsg MHg2ZWQ5ZWJhMVVMO1wKKyAgICAgIChhKSA9IFJPTCgoYSksIChzKSkgKyAoZSk7XAorICAgICAg KGMpID0gUk9MKChjKSwgMTApO1wKKyAgIH0KKyNkZWZpbmUgSUkoYSwgYiwgYywgZCwgZSwgeCwg cykgICAgICAgIHtcCisgICAgICAoYSkgKz0gSSgoYiksIChjKSwgKGQpKSArICh4KSArIDB4OGYx YmJjZGNVTDtcCisgICAgICAoYSkgPSBST0woKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9 IFJPTCgoYyksIDEwKTtcCisgICB9CisjZGVmaW5lIEpKKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAg ICAgICB7XAorICAgICAgKGEpICs9IEooKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweGE5NTNmZDRl VUw7XAorICAgICAgKGEpID0gUk9MKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0wo KGMpLCAxMCk7XAorICAgfQorI2RlZmluZSBGRkYoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAg IHtcCisgICAgICAoYSkgKz0gRigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBS T0woKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTCgoYyksIDEwKTtcCisgICB9Cisj ZGVmaW5lIEdHRyhhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAge1wKKyAgICAgIChhKSArPSBH KChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg3YTZkNzZlOVVMO1wKKyAgICAgIChhKSA9IFJPTCgo YSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MKChjKSwgMTApO1wKKyAgIH0KKyNkZWZp bmUgSEhIKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICB7XAorICAgICAgKGEpICs9IEgoKGIp LCAoYyksIChkKSkgKyAoeCkgKyAweDZkNzAzZWYzVUw7XAorICAgICAgKGEpID0gUk9MKChhKSwg KHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0woKGMpLCAxMCk7XAorICAgfQorI2RlZmluZSBJ SUkoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIHtcCisgICAgICAoYSkgKz0gSSgoYiksIChj KSwgKGQpKSArICh4KSArIDB4NWM0ZGQxMjRVTDtcCisgICAgICAoYSkgPSBST0woKGEpLCAocykp ICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTCgoYyksIDEwKTtcCisgICB9CisjZGVmaW5lIEpKSihh LCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAge1wKKyAgICAgIChhKSArPSBKKChiKSwgKGMpLCAo ZCkpICsgKHgpICsgMHg1MGEyOGJlNlVMO1wKKyAgICAgIChhKSA9IFJPTCgoYSksIChzKSkgKyAo ZSk7XAorICAgICAgKGMpID0gUk9MKChjKSwgMTApO1wKKyAgIH0KKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor CitzdGF0aWMgdm9pZCBNRGluaXQoZHdvcmQgKk1EYnVmKQoreworICAgTURidWZbMF0gPSAweDY3 NDUyMzAxVUw7CisgICBNRGJ1ZlsxXSA9IDB4ZWZjZGFiODlVTDsKKyAgIE1EYnVmWzJdID0gMHg5 OGJhZGNmZVVMOworICAgTURidWZbM10gPSAweDEwMzI1NDc2VUw7CisgICBNRGJ1Zls0XSA9IDB4 YzNkMmUxZjBVTDsKKworICAgcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2 b2lkIGNvbXByZXNzKGR3b3JkICpNRGJ1ZiwgZHdvcmQgKlgpCit7CisgICBkd29yZCBhYSA9IE1E YnVmWzBdLCAgYmIgPSBNRGJ1ZlsxXSwgIGNjID0gTURidWZbMl0sCisgICAgICAgICBkZCA9IE1E YnVmWzNdLCAgZWUgPSBNRGJ1Zls0XTsKKyAgIGR3b3JkIGFhYSA9IE1EYnVmWzBdLCBiYmIgPSBN RGJ1ZlsxXSwgY2NjID0gTURidWZbMl0sCisgICAgICAgICBkZGQgPSBNRGJ1ZlszXSwgZWVlID0g TURidWZbNF07CisKKyAgIC8qIHJvdW5kIDEgKi8KKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwg WFsgMF0sIDExKTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgMV0sIDE0KTsKKyAgIEZG KGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMl0sIDE1KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBi YiwgWFsgM10sIDEyKTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgNF0sICA1KTsKKyAg IEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNV0sICA4KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNj LCBkZCwgWFsgNl0sICA3KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgN10sICA5KTsK KyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDExKTsKKyAgIEZGKGJiLCBjYywgZGQs IGVlLCBhYSwgWFsgOV0sIDEzKTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMF0sIDE0 KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsxMV0sIDE1KTsKKyAgIEZGKGRkLCBlZSwg YWEsIGJiLCBjYywgWFsxMl0sICA2KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxM10s ICA3KTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA5KTsKKyAgIEZGKGFhLCBi YiwgY2MsIGRkLCBlZSwgWFsxNV0sICA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CisgICAvKiByb3VuZCAyICovCisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDddLCAgNyk7 CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDRdLCAgNik7CisgICBHRyhjYywgZGQsIGVl LCBhYSwgYmIsIFhbMTNdLCAgOCk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDFdLCAx Myk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTBdLCAxMSk7CisgICBHRyhlZSwgYWEs IGJiLCBjYywgZGQsIFhbIDZdLCAgOSk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTVd LCAgNyk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDNdLCAxNSk7CisgICBHRyhiYiwg Y2MsIGRkLCBlZSwgYWEsIFhbMTJdLCAgNyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhb IDBdLCAxMik7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDldLCAxNSk7CisgICBHRyhk ZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDVdLCAgOSk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIs IFhbIDJdLCAxMSk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTRdLCAgNyk7CisgICBH RyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTFdLCAxMyk7CisgICBHRyhlZSwgYWEsIGJiLCBjYywg ZGQsIFhbIDhdLCAxMik7CisKKyAgIC8qIHJvdW5kIDMgKi8KKyAgIEhIKGRkLCBlZSwgYWEsIGJi LCBjYywgWFsgM10sIDExKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxMF0sIDEzKTsK KyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA2KTsKKyAgIEhIKGFhLCBiYiwgY2Ms IGRkLCBlZSwgWFsgNF0sICA3KTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgOV0sIDE0 KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxNV0sICA5KTsKKyAgIEhIKGNjLCBkZCwg ZWUsIGFhLCBiYiwgWFsgOF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgMV0s IDE1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgMl0sIDE0KTsKKyAgIEhIKGVlLCBh YSwgYmIsIGNjLCBkZCwgWFsgN10sICA4KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsg MF0sIDEzKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgNl0sICA2KTsKKyAgIEhIKGJi LCBjYywgZGQsIGVlLCBhYSwgWFsxM10sICA1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwg WFsxMV0sIDEyKTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNV0sICA3KTsKKyAgIEhI KGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxMl0sICA1KTsKKworICAgLyogcm91bmQgNCAqLworICAg SUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAxXSwgMTEpOworICAgSUkoYmIsIGNjLCBkZCwgZWUs IGFhLCBYWyA5XSwgMTIpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzExXSwgMTQpOwor ICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTUpOworICAgSUkoZGQsIGVlLCBhYSwg YmIsIGNjLCBYWyAwXSwgMTQpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA4XSwgMTUp OworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEyXSwgIDkpOworICAgSUkoYWEsIGJiLCBj YywgZGQsIGVlLCBYWyA0XSwgIDgpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEzXSwg IDkpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAzXSwgMTQpOworICAgSUkoY2MsIGRk LCBlZSwgYWEsIGJiLCBYWyA3XSwgIDUpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzE1 XSwgIDYpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzE0XSwgIDgpOworICAgSUkoZWUs IGFhLCBiYiwgY2MsIGRkLCBYWyA1XSwgIDYpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBY WyA2XSwgIDUpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAyXSwgMTIpOworCisgICAv KiByb3VuZCA1ICovCisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDRdLCAgOSk7CisgICBK SihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDBdLCAxNSk7CisgICBKSihlZSwgYWEsIGJiLCBjYywg ZGQsIFhbIDVdLCAgNSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDldLCAxMSk7Cisg ICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDddLCAgNik7CisgICBKSihiYiwgY2MsIGRkLCBl ZSwgYWEsIFhbMTJdLCAgOCk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDJdLCAxMyk7 CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTBdLCAxMik7CisgICBKSihkZCwgZWUsIGFh LCBiYiwgY2MsIFhbMTRdLCAgNSk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDFdLCAx Mik7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDNdLCAxMyk7CisgICBKSihhYSwgYmIs IGNjLCBkZCwgZWUsIFhbIDhdLCAxNCk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTFd LCAxMSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDZdLCAgOCk7CisgICBKSihjYywg ZGQsIGVlLCBhYSwgYmIsIFhbMTVdLCAgNSk7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhb MTNdLCAgNik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDEgKi8KKyAgIEpKSihhYWEsIGJiYiwg Y2NjLCBkZGQsIGVlZSwgWFsgNV0sICA4KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRk ZCwgWFsxNF0sICA5KTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgN10sICA5 KTsKKyAgIEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgMF0sIDExKTsKKyAgIEpKSihi YmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDEzKTsKKyAgIEpKSihhYWEsIGJiYiwgY2Nj LCBkZGQsIGVlZSwgWFsgMl0sIDE1KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwg WFsxMV0sIDE1KTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNF0sICA1KTsK KyAgIEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxM10sICA3KTsKKyAgIEpKSihiYmIs IGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgNl0sICA3KTsKKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBk ZGQsIGVlZSwgWFsxNV0sICA4KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsg OF0sIDExKTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgMV0sIDE0KTsKKyAg IEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxMF0sIDE0KTsKKyAgIEpKSihiYmIsIGNj YywgZGRkLCBlZWUsIGFhYSwgWFsgM10sIDEyKTsKKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBkZGQs IGVlZSwgWFsxMl0sICA2KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMiAqLworICAgSUlJKGVl ZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA2XSwgIDkpOyAKKyAgIElJSShkZGQsIGVlZSwgYWFh LCBiYmIsIGNjYywgWFsxMV0sIDEzKTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwg WFsgM10sIDE1KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgN10sICA3KTsK KyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMF0sIDEyKTsKKyAgIElJSShlZWUs IGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxM10sICA4KTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBi YmIsIGNjYywgWFsgNV0sICA5KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsx MF0sIDExKTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxNF0sICA3KTsKKyAg IElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxNV0sICA3KTsKKyAgIElJSShlZWUsIGFh YSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDEyKTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIs IGNjYywgWFsxMl0sICA3KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgNF0s ICA2KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDE1KTsKKyAgIElJ SShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMV0sIDEzKTsKKyAgIElJSShlZWUsIGFhYSwg YmJiLCBjY2MsIGRkZCwgWFsgMl0sIDExKTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMyAqLwor ICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE1XSwgIDkpOworICAgSEhIKGNjYywg ZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA1XSwgIDcpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVl ZSwgYWFhLCBYWyAxXSwgMTUpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAz XSwgMTEpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA3XSwgIDgpOworICAg SEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDYpOworICAgSEhIKGNjYywgZGRk LCBlZWUsIGFhYSwgYmJiLCBYWyA2XSwgIDYpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwg YWFhLCBYWyA5XSwgMTQpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzExXSwg MTIpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA4XSwgMTMpOworICAgSEhI KGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEyXSwgIDUpOworICAgSEhIKGNjYywgZGRkLCBl ZWUsIGFhYSwgYmJiLCBYWyAyXSwgMTQpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFh LCBYWzEwXSwgMTMpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAwXSwgMTMp OworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA0XSwgIDcpOworICAgSEhIKGRk ZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEzXSwgIDUpOworCisgICAvKiBwYXJhbGxlbCByb3Vu ZCA0ICovICAgCisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDhdLCAxNSk7Cisg ICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDZdLCAgNSk7CisgICBHR0coYWFhLCBi YmIsIGNjYywgZGRkLCBlZWUsIFhbIDRdLCAgOCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2Nj LCBkZGQsIFhbIDFdLCAxMSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNd LCAxNCk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTFdLCAxNCk7CisgICBH R0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTVdLCAgNik7CisgICBHR0coYWFhLCBiYmIs IGNjYywgZGRkLCBlZWUsIFhbIDBdLCAxNCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBk ZGQsIFhbIDVdLCAgNik7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTJdLCAg OSk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDJdLCAxMik7CisgICBHR0co YmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTNdLCAgOSk7CisgICBHR0coYWFhLCBiYmIsIGNj YywgZGRkLCBlZWUsIFhbIDldLCAxMik7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQs IFhbIDddLCAgNSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTBdLCAxNSk7 CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTRdLCAgOCk7CisKKyAgIC8qIHBh cmFsbGVsIHJvdW5kIDUgKi8KKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMl0g LCAgOCk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTVdICwgIDUpOworICAg RkZGKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWzEwXSAsIDEyKTsKKyAgIEZGRihkZGQsIGVl ZSwgYWFhLCBiYmIsIGNjYywgWFsgNF0gLCAgOSk7CisgICBGRkYoY2NjLCBkZGQsIGVlZSwgYWFh LCBiYmIsIFhbIDFdICwgMTIpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA1 XSAsICA1KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgOF0gLCAxNCk7Cisg ICBGRkYoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddICwgIDYpOworICAgRkZGKGRkZCwg ZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyA2XSAsICA4KTsKKyAgIEZGRihjY2MsIGRkZCwgZWVlLCBh YWEsIGJiYiwgWFsgMl0gLCAxMyk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhb MTNdICwgIDYpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzE0XSAsICA1KTsK KyAgIEZGRihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMF0gLCAxNSk7CisgICBGRkYoZGRk LCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNdICwgMTMpOworICAgRkZGKGNjYywgZGRkLCBlZWUs IGFhYSwgYmJiLCBYWyA5XSAsIDExKTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwg WFsxMV0gLCAxMSk7CisKKyAgIC8qIGNvbWJpbmUgcmVzdWx0cyAqLworICAgZGRkICs9IGNjICsg TURidWZbMV07ICAgICAgICAgICAgICAgLyogZmluYWwgcmVzdWx0IGZvciBNRGJ1ZlswXSAqLwor ICAgTURidWZbMV0gPSBNRGJ1ZlsyXSArIGRkICsgZWVlOworICAgTURidWZbMl0gPSBNRGJ1Zlsz XSArIGVlICsgYWFhOworICAgTURidWZbM10gPSBNRGJ1Zls0XSArIGFhICsgYmJiOworICAgTURi dWZbNF0gPSBNRGJ1ZlswXSArIGJiICsgY2NjOworICAgTURidWZbMF0gPSBkZGQ7CisKKyAgIHJl dHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBNRGZpbmlzaChkd29yZCAq TURidWYsIGNvbnN0IGJ5dGUgKnN0cnB0ciwgZHdvcmQgbHN3bGVuLCBkd29yZCBtc3dsZW4pCit7 CisgICB1bnNpZ25lZCBpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBj b3VudGVyICAgICAgICovCisgICBkd29yZCAgICAgICAgWFsxNl07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBtZXNzYWdlIHdvcmRzICovCisKKyAgIGdydWJfbWVtc2V0KFgsIDAsIDE2 KnNpemVvZihkd29yZCkpOworCisgICAvKiBwdXQgYnl0ZXMgZnJvbSBzdHJwdHIgaW50byBYICov CisgICBmb3IgKGk9MDsgaTwobHN3bGVuJjYzKTsgaSsrKSB7CisgICAgICAvKiBieXRlIGkgZ29l cyBpbnRvIHdvcmQgWFtpIGRpdiA0XSBhdCBwb3MuICA4KihpIG1vZCA0KSAgKi8KKyAgICAgIFhb aT4+Ml0gXj0gKGR3b3JkKSAqc3RycHRyKysgPDwgKDggKiAoaSYzKSk7CisgICB9CisKKyAgIC8q IGFwcGVuZCB0aGUgYml0IG1fbiA9PSAxICovCisgICBYWyhsc3dsZW4+PjIpJjE1XSBePSAoZHdv cmQpMSA8PCAoOCoobHN3bGVuJjMpICsgNyk7CisKKyAgIGlmICgobHN3bGVuICYgNjMpID4gNTUp IHsKKyAgICAgIC8qIGxlbmd0aCBnb2VzIHRvIG5leHQgYmxvY2sgKi8KKyAgICAgIGNvbXByZXNz KE1EYnVmLCBYKTsKKyAgICAgIGdydWJfbWVtc2V0KFgsIDAsIDE2KnNpemVvZihkd29yZCkpOwor ICAgfQorCisgICAvKiBhcHBlbmQgbGVuZ3RoIGluIGJpdHMqLworICAgWFsxNF0gPSBsc3dsZW4g PDwgMzsKKyAgIFhbMTVdID0gKGxzd2xlbiA+PiAyOSkgfCAobXN3bGVuIDw8IDMpOworICAgY29t cHJlc3MoTURidWYsIFgpOworCisgICByZXR1cm47Cit9CisKKy8qKiogR05VIEdSVUIyIGludGVy ZmFjZSAqKiovCisKKyNkZWZpbmUgUk1Ec2l6ZSAxNjAKKworc3RhdGljIGdydWJfZXJyX3QgZ3J1 Yl9oYXNoX3JtZDE2MF9mbihncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMsIGNoYXIgKm91dCwK KwkJCQkgICAgICBjb25zdCBjaGFyICppbiwgZ3J1Yl9zaXplX3QgaW5zaXplKQoreworICAgZHdv cmQgICAgICAgICBNRGJ1ZltSTURzaXplLzMyXTsgICAvKiBjb250YWlucyAoQSwgQiwgQywgRCgs IEUpKSAgICovCisgICBkd29yZCAgICAgICAgIFhbMTZdOyAgICAgICAgICAgICAgIC8qIGN1cnJl bnQgMTYtd29yZCBjaHVuayAgICAgICAgKi8KKyAgIHVuc2lnbmVkIGludCAgaTsgICAgICAgICAg ICAgICAgICAgLyogY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgZHdvcmQgICAg ICAgICBuYnl0ZXM7ICAgICAgICAgICAgICAvKiAjIG9mIGJ5dGVzIG5vdCB5ZXQgcHJvY2Vzc2Vk ICovCisKKyAgIC8qIGluaXRpYWxpemUgKi8KKyAgIE1EaW5pdChNRGJ1Zik7CisKKyAgIC8qIHBy b2Nlc3MgbWVzc2FnZSBpbiAxNi13b3JkIGNodW5rcyAqLworICAgZm9yIChuYnl0ZXM9aW5zaXpl OyBuYnl0ZXMgPiA2MzsgbmJ5dGVzLT02NCkgeworICAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykg eworICAgICAgICAgWFtpXSA9IEJZVEVTX1RPX0RXT1JEKGluKTsKKyAgICAgICAgIGluICs9IDQ7 CisgICAgICB9CisgICAgICBjb21wcmVzcyhNRGJ1ZiwgWCk7CisgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG1vZCA2NCBieXRlcyBsZWZ0ICovCisKKyAg IC8qIGZpbmlzaDogKi8KKyAgIE1EZmluaXNoKE1EYnVmLCAoY29uc3QgYnl0ZSAqKWluLCBpbnNp emUsIDApOworCisgICBmb3IgKGk9MDsgaTxSTURzaXplLzg7IGkrPTQpIHsKKyAgICAgIG91dFtp XSAgID0gIE1EYnVmW2k+PjJdOyAgICAgICAgIC8qIGltcGxpY2l0IGNhc3QgdG8gYnl0ZSAgKi8K KyAgICAgIG91dFtpKzFdID0gKE1EYnVmW2k+PjJdID4+ICA4KTsgIC8qICBleHRyYWN0cyB0aGUg OCBsZWFzdCAgKi8KKyAgICAgIG91dFtpKzJdID0gKE1EYnVmW2k+PjJdID4+IDE2KTsgIC8qICBz aWduaWZpY2FudCBiaXRzLiAgICAgKi8KKyAgICAgIG91dFtpKzNdID0gKE1EYnVmW2k+PjJdID4+ IDI0KTsKKyAgIH0KKworICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZ3J1Yl9jaXBoZXIgZ3J1Yl9jaXBoZXJfcm1kMTYwID0geworICAubmFtZSA9ICJyaXBlbWQx NjAiLAorICAudHlwZSA9IEdSVUJfQ0lQSEVSX1RZUEVfSEFTSCwKKyAgLmtleXNpemVzID0gKGNv bnN0IHVuc2lnbmVkIGludFtdKXsgMjAgfSwKKyAgLmtleXNpemVzX2xlbmd0aCA9IDEsCisKKyAg LnUuaGFzaCA9IHsKKyAgICAuZm4gPSBncnViX2hhc2hfcm1kMTYwX2ZuCisgIH0KK307CisKK0dS VUJfTU9EX0lOSVQocmlwZW1kMTYwKQoreworICAodm9pZCltb2Q7CQkJLyogVG8gc3RvcCB3YXJu aW5nLiAqLworICBncnViX2NyeXB0b19jaXBoZXJfcmVnaXN0ZXIoJmdydWJfY2lwaGVyX3JtZDE2 MCk7Cit9CisKK0dSVUJfTU9EX0ZJTkkocmlwZW1kMTYwKQoreworICBncnViX2NyeXB0b19jaXBo ZXJfdW5yZWdpc3RlcigmZ3J1Yl9jaXBoZXJfcm1kMTYwKTsKK30KZGlmZiAtdSAtciAteCBDVlMg LU4gZ3J1YjItb3JpZy9kaXNrL2Rldm1hcHBlci5jIGdydWIyL2Rpc2svZGV2bWFwcGVyLmMKLS0t IGdydWIyLW9yaWcvZGlzay9kZXZtYXBwZXIuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgZ3J1YjIvZGlzay9kZXZtYXBwZXIuYwkyMDA3LTA5LTAyIDAyOjEyOjU5LjAw MDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIGRldm1hcHBlci5jIC0gRGV2 aWNlIG1hcHBlciAody8gY3J5cHRvIHN1cHBvcnQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3 IFNpbW9uIFBldGVyIDxkbi50bHBAZ214Lm5ldD4KKyAqIFRoYW5rcyB0byBSYW91bCBCb2VuaXNj aCA8amtsMzQ1QGdteC5uZXQ+IGZvciB0aGUgaW5pdGlhbCBpZGVhLgorICovCisvKgorICogIEdS VUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs MjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u ZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4K KyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxn cnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9ub3JtYWwuaD4KKyNpbmNsdWRlIDxncnViL2FyZy5o PgorI2luY2x1ZGUgPGdydWIvZGlzay5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisKKyNk ZWZpbmUgREVGQVVMVF9IQVNICSJyaXBlbWQxNjAiCisjZGVmaW5lIERFRkFVTFRfQ0lQSEVSCSJh ZXMtY2JjIgorI2RlZmluZSBNQVhfS0VZU0laRQk2NAorI2RlZmluZSBNQVhfUEFTU1BIUkFTRQky NTYKKworI2RlZmluZSBNSU4oYSwgYikJKGEgPCBiID8gYSA6IGIpCisKK3N0cnVjdCBncnViX2Ny eXB0bworeworICBjaGFyCQkJCSpkZXZuYW1lLCAqc291cmNlX2Rldm5hbWU7CisgIGludAkJCQlo YXNfcGFydGl0aW9uczsKKyAgZ3J1Yl9jaXBoZXJfcGFyYW1zX3QJCWNpcGhlcjsKKyAgZ3J1Yl9k aXNrX3QJCQlzcmNkaXNrOworCisgIHN0cnVjdCBncnViX2NyeXB0byAqbmV4dDsKK307CisKK3R5 cGVkZWYgc3RydWN0IGdydWJfY3J5cHRvICpncnViX2NyeXB0b190OworCitzdHJ1Y3QgY3J5cHRv X3ByaXZhdGUgeworICBncnViX2NyeXB0b190CWNyeXB0bzsKKyAgZ3J1Yl9kaXNrX3QJc3JjZGlz azsKK307CisKK3R5cGVkZWYgc3RydWN0IGNyeXB0b19wcml2YXRlICpjcnlwdG9fcHJpdmF0ZV90 OworCitzdGF0aWMgZ3J1Yl9jcnlwdG9fdCBjcnlwdG9fbGlzdCA9IE5VTEw7CisKKy8qIERlbGV0 ZSBhIHJlZ2lzdGVyZWQgY3J5cHRvIGRldmljZS4gKi8KK3N0YXRpYyBncnViX2Vycl90CitkZWxl dGVfY3J5cHRvKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGdydWJfY3J5cHRvX3QgZGV2LCAqcHJl djsKKworICAvKiBTZWFyY2ggZm9yIHRoZSBkZXZpY2UgKi8KKyAgZm9yKGRldiA9IGNyeXB0b19s aXN0LCBwcmV2ID0gJmNyeXB0b19saXN0OyBkZXY7IHByZXYgPSAmZGV2LT5uZXh0LCBkZXYgPSBk ZXYtPm5leHQpCisgICAgaWYoZ3J1Yl9zdHJjbXAoZGV2LT5kZXZuYW1lLCBuYW1lKSA9PSAwKQor ICAgICAgYnJlYWs7CisKKyAgaWYoIWRldikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvcihHUlVCX0VS Ul9CQURfREVWSUNFLCAiRGV2aWNlIG5vdCBmb3VuZCIpOworCisgIC8qIFJlbW92ZSB0aGUgZGV2 aWNlIGZyb20gdGhlIGxpc3QgKi8KKyAgKnByZXYgPSBkZXYtPm5leHQ7CisgIGdydWJfZnJlZShk ZXYtPmRldm5hbWUpOworICBncnViX2ZyZWUoZGV2LT5zb3VyY2VfZGV2bmFtZSk7CisgIGdydWJf Y3J5cHRvX2RlbGV0ZV9jaXBoZXIoZGV2LT5jaXBoZXIpOworICBncnViX2ZyZWUoZGV2KTsKKwor ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyogSGFzaGVzIGEgcGFzc3BocmFzZSBpbnRv IGEga2V5IGFuZCBzdG9yZXMgaXQgd2l0aCBjaXBoZXIuICovCitzdGF0aWMgZ3J1Yl9lcnJfdAor c2V0X3Bhc3NwaHJhc2UoZ3J1Yl9jcnlwdG9fdCBkZXYsIGdydWJfY2lwaGVyX3BhcmFtc190IGhh c2hwYXJhbXMsCisJICAgICAgIGNvbnN0IGNoYXIgKnBhc3NwaHJhc2UpCit7CisgIGNoYXIJCWhh c2hbTUFYX0tFWVNJWkUgKiAyXSwgKnAsICprZXkgPSBoYXNoOworICBncnViX2Vycl90CWVyciA9 IEdSVUJfRVJSX05PTkU7CisgIHVuc2lnbmVkIGludAlyb3VuZCwgaSwgc2l6ZSA9IGRldi0+Y2lw aGVyLT5rZXlzaXplLAorICAgIGxlbiA9IGhhc2hwYXJhbXMtPmtleXNpemU7CisKKyAgLyogTmVl ZCBubyBwYXNzcGhyYXNlIGlmIHRoZXJlJ3Mgbm8ga2V5ICovCisgIGlmKHNpemUgPT0gMCkKKyAg ICByZXR1cm4gZXJyOworCisgIC8qIEhhY2sgdG8gc3VwcG9ydCB0aGUgIm5vbmUiIGhhc2ggKi8K KyAgaWYoIWdydWJfc3RyY21wKGhhc2hwYXJhbXMtPmNpcGhlci0+bmFtZSwgIm5vbmUiKSkKKyAg ICBsZW4gPSBoYXNocGFyYW1zLT5rZXlzaXplID0gZ3J1Yl9zdHJsZW4ocGFzc3BocmFzZSk7CisK KyAgaWYoc2l6ZSA+IE1BWF9LRVlTSVpFIHx8IGxlbiA+IE1BWF9LRVlTSVpFKQorICAgIHJldHVy biBncnViX2Vycm9yKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgIlJlcXVlc3RlZCBrZXkgc2l6ZSB0 b28gbGFyZ2UiKTsKKworICBwID0gZ3J1Yl9tYWxsb2MoZ3J1Yl9zdHJsZW4ocGFzc3BocmFzZSkg KyAyICsgc2l6ZSAvIGxlbik7CisgIGlmKCFwKSByZXR1cm4gZ3J1Yl9lcnJubzsKKworICBmb3Io cm91bmQgPSAwOyBzaXplOyByb3VuZCsrLCBrZXkgKz0gbGVuLCBzaXplIC09IGxlbikgeworICAg IC8qIGhhY2sgZnJvbSBoYXNoYWxvdCB0byBhdm9pZCBudWxsIGJ5dGVzIGluIGtleSAqLworICAg IGZvcihpID0gMDsgaSA8IHJvdW5kOyBpKyspCisgICAgICBwW2ldID0gJ0EnOworCisgICAgZ3J1 Yl9zdHJjcHkocCArIGksIHBhc3NwaHJhc2UpOworCisgICAgaWYobGVuID4gc2l6ZSkKKyAgICAg IGxlbiA9IHNpemU7CisKKyAgICBpZigoZXJyID0gZ3J1Yl9jcnlwdG9faGFzaChoYXNocGFyYW1z LCBrZXksIHAsIGdydWJfc3RybGVuKHApKSkgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgIGdvdG8g ZXJyX291dDsKKyAgfQorCisgIGVyciA9IGdydWJfY3J5cHRvX3NldF9rZXkoZGV2LT5jaXBoZXIs IGhhc2gpOworCisgZXJyX291dDoKKyAgZ3J1Yl9mcmVlKHApOworICByZXR1cm4gZXJyOworfQor CisvKioqKiogR1JVQiBjb21tYW5kIGxpbmUgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitjaXBoZXJfcHJpbnRfaG9vayhn cnViX2NpcGhlcl90IGNpcGhlciwgdm9pZCAqZGF0YSkKK3sKKyAgZ3J1Yl9jaXBoZXJfdHlwZV90 IHR5cGUgPSAoZ3J1Yl9jaXBoZXJfdHlwZV90KWRhdGE7CisKKyAgaWYoY2lwaGVyLT50eXBlID09 IHR5cGUpCisgICAgZ3J1Yl9wcmludGYoIiVzXG4iLCBjaXBoZXItPm5hbWUpOworCisgIHJldHVy biAwOworfQorCisvKiBMaXN0IGFsbCBrbm93biBjaXBoZXJzIGFuZCBoYXNoZXMgKi8KK3N0YXRp YyB2b2lkCitsaXN0X2NpcGhlcnModm9pZCkKK3sKKyAgZ3J1Yl9wcmludGYoIktub3duIGNpcGhl cnM6XG4iKTsKKyAgZ3J1Yl9jcnlwdG9fY2lwaGVyX2l0ZXJhdGUoY2lwaGVyX3ByaW50X2hvb2ss ICh2b2lkICopR1JVQl9DSVBIRVJfVFlQRV9DSVBIRVIpOworCisgIGdydWJfcHJpbnRmKCJcbktu b3duIGhhc2hlczpcbiIpOworICBncnViX2NyeXB0b19jaXBoZXJfaXRlcmF0ZShjaXBoZXJfcHJp bnRfaG9vaywgKHZvaWQgKilHUlVCX0NJUEhFUl9UWVBFX0hBU0gpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGdydWJfYXJnX29wdGlvbiBvcHRpb25zW10gPQorICB7CisgICAgeyJkZWxldGUi LCAnZCcsIDAsICJkZWxldGUgdGhlIGNyeXB0byBkZXZpY2UgZW50cnkiLCAwLCBBUkdfVFlQRV9O T05FfSwKKyAgICB7InBhcnRpdGlvbnMiLCAncCcsIDAsICJzZXQgdGhhdCB0aGUgZGV2aWNlIGhh cyBwYXJ0aXRpb25zIiwgMCwgQVJHX1RZUEVfTk9ORX0sCisgICAgeyJjaXBoZXIiLCAnYycsIDAs ICJzZXQgY2lwaGVyIChkZWZhdWx0PSIgREVGQVVMVF9DSVBIRVIgIikiLCAwLCBBUkdfVFlQRV9T VFJJTkd9LAorICAgIHsiaGFzaCIsICdoJywgMCwgInNldCBoYXNoIGZ1bmN0aW9uIChkZWZhdWx0 PSIgREVGQVVMVF9IQVNIICIpIiwgMCwgQVJHX1RZUEVfU1RSSU5HfSwKKyAgICB7InBhc3NwaHJh c2UiLCAnUCcsIDAsICJzZXQgZGVjcnlwdGlvbiBwYXNzcGhyYXNlIiwgMCwgQVJHX1RZUEVfU1RS SU5HfSwKKyAgICB7Imxpc3QiLCAnbCcsIDAsICJsaXN0IGtub3duIGNpcGhlcnMgYW5kIGhhc2hl cyIsIDAsIEFSR19UWVBFX05PTkV9LAorICAgIHsia2V5c2l6ZSIsICdrJywgMCwgInNldCBrZXkg c2l6ZSAoZGVmYXVsdCBpcyBjaXBoZXIgc3BlY2lmaWMpIiwgMCwgQVJHX1RZUEVfSU5UfSwKKyAg ICB7MCwgMCwgMCwgMCwgMCwgMH0KKyAgfTsKKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfY21k X2Rldm1hcChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAqc3RhdGUsIGludCBhcmdjLCBjaGFyICoqYXJn cykKK3sKKyAgZ3J1Yl9kaXNrX3QJCWRpc2s7CisgIGdydWJfY3J5cHRvX3QJCW5ld2RldjsKKyAg Y29uc3QgY2hhcgkJKmNpcGhlciwgKmhhc2g7CisgIGdydWJfY2lwaGVyX3BhcmFtc190CWhhc2hw YXJhbXM7CisgIGdydWJfZXJyX3QJCWVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIJCQkqcGFz c3BocmFzZSA9ICIiLCBjbWRwaHJhc2VbTUFYX1BBU1NQSFJBU0VdOworCisgIC8qIENoZWNrIHdo ZXRoZXIgY2lwaGVyIGxpc3QgaXMgcmVxdWVzdGVkICovCisgIGlmKHN0YXRlWzVdLnNldCkgewor ICAgIGxpc3RfY2lwaGVycygpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYoYXJnYyA8IDEp CisgICAgcmV0dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiRGV2aWNlIG5h bWUgcmVxdWlyZWQiKTsKKworICAvKiBDaGVjayB3aGV0aGVyIGRlbGV0ZSBpcyByZXF1ZXN0ZWQg Ki8KKyAgaWYoc3RhdGVbMF0uc2V0KQorICAgIHJldHVybiBkZWxldGVfY3J5cHRvKGFyZ3NbMF0p OworCisgIGlmKGFyZ2MgPCAyKQorICAgIHJldHVybiBncnViX2Vycm9yKEdSVUJfRVJSX0JBRF9B UkdVTUVOVCwgIlNvdXJjZSBkZXZpY2UgbmFtZSByZXF1aXJlZCIpOworCisgIC8qKiogQ3JlYXRl IGRldmljZSBpcyByZXF1ZXN0ZWQgKioqLworCisgIC8qIENob2tlIG9uIGFscmFkeSBleGlzdGlu ZyBkZXZpY2VzICovCisgIGZvcihuZXdkZXYgPSBjcnlwdG9fbGlzdDsgbmV3ZGV2ICE9IE5VTEw7 IG5ld2RldiA9IG5ld2Rldi0+bmV4dCkKKyAgICBpZihncnViX3N0cmNtcChuZXdkZXYtPmRldm5h bWUsIGFyZ3NbMF0pID09IDApCisgICAgICByZXR1cm4gZ3J1Yl9lcnJvcihHUlVCX0VSUl9CQURf QVJHVU1FTlQsICJEZXZpY2UgYWxyZWFkeSBleGlzdHMiKTsKKworICAvKiBDaGVjayB3aGV0aGVy IHNvdXJjZSBkZXZpY2UgY2FuIGJlIG9wZW5lZCAqLworICBkaXNrID0gZ3J1Yl9kaXNrX29wZW4o YXJnc1sxXSk7CisgIGlmKCFkaXNrKSByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgZ3J1Yl9kaXNrX2Ns b3NlKGRpc2spOworCisgIC8qIFBhcnNlIHJlbWFpbmluZyBvcHRpb25zICovCisgIGlmKHN0YXRl WzJdLnNldCkgY2lwaGVyID0gc3RhdGVbMl0uYXJnOyBlbHNlIGNpcGhlciA9IERFRkFVTFRfQ0lQ SEVSOworICBpZihzdGF0ZVszXS5zZXQpIGhhc2ggPSBzdGF0ZVszXS5hcmc7IGVsc2UgaGFzaCA9 IERFRkFVTFRfSEFTSDsKKworICAvKiBDcmVhdGUgbmV3IGRldmljZSBlbnRyeSAqLworICBpZigh KG5ld2RldiA9IGdydWJfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3J1Yl9jcnlwdG8pKSkpIHJldHVy biBncnViX2Vycm5vOworICBpZighKG5ld2Rldi0+ZGV2bmFtZSA9IGdydWJfc3RyZHVwKGFyZ3Nb MF0pKSkgeyBlcnIgPSBncnViX2Vycm5vOyBnb3RvIGVycl9vdXQ7IH0KKyAgaWYoIShuZXdkZXYt PnNvdXJjZV9kZXZuYW1lID0gZ3J1Yl9zdHJkdXAoYXJnc1sxXSkpKSB7IGVyciA9IGdydWJfZXJy bm87IGdvdG8gZXJyMl9vdXQ7IH0KKyAgbmV3ZGV2LT5oYXNfcGFydGl0aW9ucyA9IHN0YXRlWzFd LnNldDsKKyAgZXJyID0gZ3J1Yl9jcnlwdG9fbmV3X2NpcGhlcigmbmV3ZGV2LT5jaXBoZXIsIGNp cGhlciwgR1JVQl9DSVBIRVJfVFlQRV9DSVBIRVIpOworICBpZihlcnIgIT0gR1JVQl9FUlJfTk9O RSkgZ290byBlcnIzX291dDsKKyAgZXJyID0gZ3J1Yl9jcnlwdG9fbmV3X2NpcGhlcigmaGFzaHBh cmFtcywgaGFzaCwgR1JVQl9DSVBIRVJfVFlQRV9IQVNIKTsKKyAgaWYoZXJyICE9IEdSVUJfRVJS X05PTkUpIGdvdG8gZXJyNF9vdXQ7CisgIG5ld2Rldi0+c3JjZGlzayA9IE5VTEw7CisgIGlmKHN0 YXRlWzZdLnNldCkKKyAgICBuZXdkZXYtPmNpcGhlci0+a2V5c2l6ZSA9IGdydWJfc3RydG91bChz dGF0ZVs2XS5hcmcsIE5VTEwsIDEwKTsKKworICAvKiBHZXQgcGFzc3BocmFzZSAqLworICBpZihz dGF0ZVs0XS5zZXQpCS8qIFBhc3NwaHJhc2Ugc3VwcGxpZWQgb24gY29tbWFuZGxpbmUgKi8KKyAg ICBwYXNzcGhyYXNlID0gc3RhdGVbNF0uYXJnOworICBlbHNlIHsKKyAgICBpZihncnViX3N0cmNt cChjaXBoZXIsICJub25lIikpIHsKKyAgICAgIGdydWJfY21kbGluZV9nZXQoIlBhc3NwaHJhc2U6 ICIsIGNtZHBocmFzZSwgTUFYX1BBU1NQSFJBU0UsICcqJywgMCk7CisgICAgICBwYXNzcGhyYXNl ID0gY21kcGhyYXNlOworICAgIH0KKyAgfQorICBpZigoZXJyID0gc2V0X3Bhc3NwaHJhc2UobmV3 ZGV2LCBoYXNocGFyYW1zLCBwYXNzcGhyYXNlKSkgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3Rv IGVycnBfb3V0OworCisgIC8qIEFkZCBuZXcgZW50cnkgdG8gbGlzdCBhbmQgcmV0dXJuICovCisg IG5ld2Rldi0+bmV4dCA9IGNyeXB0b19saXN0OworICBjcnlwdG9fbGlzdCA9IG5ld2RldjsKKwor ICAvKiBFcnJvciBjb25kaXRpb25zICovCisgZXJycF9vdXQ6CisgIGdydWJfY3J5cHRvX2RlbGV0 ZV9jaXBoZXIoaGFzaHBhcmFtcyk7CisgIGlmKGVyciA9PSBHUlVCX0VSUl9OT05FKSByZXR1cm4g MDsKKyBlcnI0X291dDoKKyAgZ3J1Yl9jcnlwdG9fZGVsZXRlX2NpcGhlcihuZXdkZXYtPmNpcGhl cik7CisgZXJyM19vdXQ6CisgIGdydWJfZnJlZShuZXdkZXYtPnNvdXJjZV9kZXZuYW1lKTsKKyBl cnIyX291dDoKKyAgZ3J1Yl9mcmVlKG5ld2Rldi0+ZGV2bmFtZSk7CisgZXJyX291dDoKKyAgZ3J1 Yl9mcmVlKG5ld2Rldik7CisgIHJldHVybiBlcnI7Cit9CisKKy8qKioqKiBHUlVCIGRpc2sgZGV2 aWNlIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKK3N0YXRpYyBpbnQKK2dydWJfY3J5cHRvX2l0ZXJhdGUgKGludCAoKmhvb2spIChjb25zdCBj aGFyICpuYW1lKSkKK3sKKyAgZ3J1Yl9jcnlwdG9fdCBpOworCisgIGZvciAoaSA9IGNyeXB0b19s aXN0OyBpICE9IE5VTEw7IGkgPSBpLT5uZXh0KQorICAgIGlmKGhvb2soaS0+ZGV2bmFtZSkpCisg ICAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dy dWJfY3J5cHRvX29wZW4gKGNvbnN0IGNoYXIgKm5hbWUsIGdydWJfZGlza190IGRpc2spCit7Cisg IGdydWJfY3J5cHRvX3QJCWRldjsKKyAgY3J5cHRvX3ByaXZhdGVfdAlwcml2YXRlOworCisgIGZv cihkZXYgPSBjcnlwdG9fbGlzdDsgZGV2ICE9IE5VTEw7IGRldiA9IGRldi0+bmV4dCkKKyAgICBp ZihncnViX3N0cmNtcChkZXYtPmRldm5hbWUsIG5hbWUpID09IDApCisgICAgICBicmVhazsKKwor ICBpZighZGV2KQorICAgIHJldHVybiBncnViX2Vycm9yKEdSVUJfRVJSX1VOS05PV05fREVWSUNF LCAiQ2FuJ3Qgb3BlbiBkZXZpY2UiKTsKKworICAvKiBTZXR1cCBjcnlwdG8gcHJpdmF0ZSBzdHJ1 Y3R1cmUgKi8KKyAgaWYoIShwcml2YXRlID0gZ3J1Yl9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlw dG9fcHJpdmF0ZSkpKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgcHJpdmF0ZS0+Y3J5cHRv ID0gZGV2OworCisgIC8qIE9wZW4gdW5kZXJseWluZyBkZXZpY2UgKi8KKyAgcHJpdmF0ZS0+c3Jj ZGlzayA9IGdydWJfZGlza19vcGVuKGRldi0+c291cmNlX2Rldm5hbWUpOworICBpZighcHJpdmF0 ZS0+c3JjZGlzaykgeworICAgIHJldHVybiBncnViX2Vycm5vOworICB9CisKKyAgLyogUG9wdWxh dGUgcmVxdWVzdGVkIGRpc2sgKi8KKyAgZGlzay0+dG90YWxfc2VjdG9ycyA9IGdydWJfZGlza19n ZXRfc2l6ZShwcml2YXRlLT5zcmNkaXNrKTsKKyAgZGlzay0+aWQgPSAoaW50KWRldjsKKyAgZGlz ay0+aGFzX3BhcnRpdGlvbnMgPSBkZXYtPmhhc19wYXJ0aXRpb25zOworICBkaXNrLT5kYXRhID0g cHJpdmF0ZTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2dydWJfY3J5cHRvX2Ns b3NlIChncnViX2Rpc2tfdCBkaXNrKQoreworICBjcnlwdG9fcHJpdmF0ZV90IHByaXZhdGUgPSAo Y3J5cHRvX3ByaXZhdGVfdClkaXNrLT5kYXRhOworLyogICBjaGFyIGJ1Zls0OF07ICovCisKKy8q ICAgZ3J1Yl9kaXNrX3JlYWQoZGlzaywgMCwgMCwgNDgsIGJ1Zik7ICovCisvKiAgIGdydWJfcHJp bnRmKCJkaXNrIGlkOiAlLTQ4c1xuIiwgYnVmKTsgKi8KKworICBncnViX2Rpc2tfY2xvc2UocHJp dmF0ZS0+c3JjZGlzayk7CisgIGdydWJfZnJlZShwcml2YXRlKTsKK30KKworc3RhdGljIGdydWJf ZXJyX3QKK2dydWJfY3J5cHRvX3JlYWQgKGdydWJfZGlza190IGRpc2ssIGdydWJfZGlza19hZGRy X3Qgc2VjdG9yLAorCQkgIGdydWJfc2l6ZV90IHNpemUsIGNoYXIgKmJ1ZikKK3sKKyAgY3J5cHRv X3ByaXZhdGVfdAlwcml2YXRlID0gKGNyeXB0b19wcml2YXRlX3QpZGlzay0+ZGF0YTsKKyAgZ3J1 Yl9lcnJfdAkJZXJyOworICBncnViX2NpcGhlcl9wYXJhbXNfdAljaXBoZXIgPSBwcml2YXRlLT5j cnlwdG8tPmNpcGhlcjsKKyAgZ3J1Yl9zaXplX3QJCWk7CisKKyAgLyogUmVhZCBzZWN0b3JzIGZy b20gdW5kZXJseWluZyBkaXNrICovCisgIGVyciA9IGdydWJfZGlza19yZWFkKHByaXZhdGUtPnNy Y2Rpc2ssIHNlY3RvciwgMCwgc2l6ZSA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMsIGJ1Zik7Cisg IGlmKGVycikgcmV0dXJuIGVycjsKKworICAvKiBEZWNyeXB0IHNlY3RvcnMgKi8KKyAgZm9yKGkg PSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgZ3J1Yl9kaXNrX2FkZHJfdCBzID0gc2VjdG9yICsg aTsKKworICAgIC8qIFNldCBJViBmcm9tIHJhdyBzZWN0b3IgbnVtYmVyIChwbGFpbiBtb2RlKSAq LworICAgIGdydWJfbWVtc2V0KGNpcGhlci0+dS5jaXBoZXIuaXYsIDAsIGNpcGhlci0+dS5jaXBo ZXIuaXZfbGVuZ3RoKTsKKyAgICBncnViX21lbWNweShjaXBoZXItPnUuY2lwaGVyLml2LCAmcywg TUlOKHNpemVvZihncnViX2Rpc2tfYWRkcl90KSwgY2lwaGVyLT51LmNpcGhlci5pdl9sZW5ndGgp KTsKKworICAgIGdydWJfY3J5cHRvX2RlY3J5cHRfaW5wbGFjZShjaXBoZXIsIGJ1ZiArIChpIDw8 IEdSVUJfRElTS19TRUNUT1JfQklUUyksCisJCQkJR1JVQl9ESVNLX1NFQ1RPUl9TSVpFKTsKKyAg fQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9jcnlwdG9fd3Jp dGUgKGdydWJfZGlza190IGRpc2sgX19hdHRyaWJ1dGUgKCh1bnVzZWQpKSwKKwkJICAgZ3J1Yl9k aXNrX2FkZHJfdCBzZWN0b3IgX19hdHRyaWJ1dGUgKCh1bnVzZWQpKSwKKwkJICAgZ3J1Yl9zaXpl X3Qgc2l6ZSBfX2F0dHJpYnV0ZSAoKHVudXNlZCkpLAorCQkgICBjb25zdCBjaGFyICpidWYgX19h dHRyaWJ1dGUgKCh1bnVzZWQpKSkKK3sKKyAgcmV0dXJuIEdSVUJfRVJSX05PVF9JTVBMRU1FTlRF RF9ZRVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9kaXNrX2RldiBncnViX2NyeXB0b19kZXYg PQorICB7CisgICAgLm5hbWUgPSAiY3J5cHRvIiwKKyAgICAuaWQgPSBHUlVCX0RJU0tfREVWSUNF X0NSWVBUT19JRCwKKyAgICAuaXRlcmF0ZSA9IGdydWJfY3J5cHRvX2l0ZXJhdGUsCisgICAgLm9w ZW4gPSBncnViX2NyeXB0b19vcGVuLAorICAgIC5jbG9zZSA9IGdydWJfY3J5cHRvX2Nsb3NlLAor ICAgIC5yZWFkID0gZ3J1Yl9jcnlwdG9fcmVhZCwKKyAgICAud3JpdGUgPSBncnViX2NyeXB0b193 cml0ZSwKKyAgICAubmV4dCA9IDAKKyAgfTsKKworLyoqKioqIEdSVUIgbW9kdWxlIChkZS0paW5p dGlhbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR1JV Ql9NT0RfSU5JVChkZXZtYXBwZXIpCit7CisgICh2b2lkKW1vZDsJCQkvKiBUbyBzdG9wIHdhcm5p bmcuICovCisgIGdydWJfcmVnaXN0ZXJfY29tbWFuZCgiZGV2bWFwIiwgZ3J1Yl9jbWRfZGV2bWFw LCBHUlVCX0NPTU1BTkRfRkxBR19CT1RILAorCQkJImRldm1hcCBbT1BUSU9OUy4uLl0gW0RFVklD RV0gW1NSQy1ERVZdIiwKKwkJCSJNYXAgb25lIGRldmljZSBvbnRvIGFub3RoZXIgKHcvIGNyeXB0 b2dyYXBoeSBzdXBwb3J0KS4iLCBvcHRpb25zKTsKKyAgZ3J1Yl9kaXNrX2Rldl9yZWdpc3Rlcigm Z3J1Yl9jcnlwdG9fZGV2KTsKK30KKworR1JVQl9NT0RfRklOSShkZXZtYXBwZXIpCit7CisgIGdy dWJfdW5yZWdpc3Rlcl9jb21tYW5kKCJkZXZtYXAiKTsKKyAgZ3J1Yl9kaXNrX2Rldl91bnJlZ2lz dGVyKCZncnViX2NyeXB0b19kZXYpOworfQpkaWZmIC11IC1yIC14IENWUyAtTiBncnViMi1vcmln L2luY2x1ZGUvZ3J1Yi9jcnlwdG8uaCBncnViMi9pbmNsdWRlL2dydWIvY3J5cHRvLmgKLS0tIGdy dWIyLW9yaWcvaW5jbHVkZS9ncnViL2NyeXB0by5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyBncnViMi9pbmNsdWRlL2dydWIvY3J5cHRvLmgJMjAwNy0wOS0wMiAwMDo1 MTo1OC4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBjcnlwdG8uaCAt IEdSVUIgY3J5cHRvZ3JhcGhpYyBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ltb24g UGV0ZXIgPGRuLnRscEBnbXgubmV0PgorICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlm aWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNyAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBH UlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBD UllQVE9fSAorI2RlZmluZSBDUllQVE9fSAorCisjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorCitl bnVtIGdydWJfY2lwaGVyX3R5cGUKKyAgeworICAgIEdSVUJfQ0lQSEVSX1RZUEVfTk9ORSA9IDAs CisgICAgR1JVQl9DSVBIRVJfVFlQRV9DSVBIRVIgPSAxLAorICAgIEdSVUJfQ0lQSEVSX1RZUEVf SEFTSCA9IDIKKyAgfTsKKwordHlwZWRlZiBlbnVtIGdydWJfY2lwaGVyX3R5cGUgZ3J1Yl9jaXBo ZXJfdHlwZV90OworCitzdHJ1Y3QgZ3J1Yl9jaXBoZXJfcGFyYW1zOwordHlwZWRlZiBzdHJ1Y3Qg Z3J1Yl9jaXBoZXJfcGFyYW1zICpncnViX2NpcGhlcl9wYXJhbXNfdDsKKworc3RydWN0IGdydWJf Y2lwaGVyCit7CisgIGNvbnN0IGNoYXIJCSpuYW1lOworICBncnViX2NpcGhlcl90eXBlX3QJdHlw ZTsKKyAgY29uc3QgdW5zaWduZWQgaW50CSprZXlzaXplcywga2V5c2l6ZXNfbGVuZ3RoOworCisg IGdydWJfZXJyX3QgKCppbml0KShncnViX2NpcGhlcl9wYXJhbXNfdCk7CisgIHZvaWQgKCpkZWlu aXQpKGdydWJfY2lwaGVyX3BhcmFtc190KTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAg ICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaXZzaXplcywgaXZzaXplc19sZW5ndGg7CisKKyAgICAg IGdydWJfZXJyX3QgKCpzZXRfa2V5KShncnViX2NpcGhlcl9wYXJhbXNfdCwgY29uc3QgY2hhciAq a2V5KTsKKyAgICAgIGdydWJfZXJyX3QgKCplbmNyeXB0KShncnViX2NpcGhlcl9wYXJhbXNfdCwg Y2hhciAqKm91dCwgY29uc3QgY2hhciAqaW4sIGdydWJfc2l6ZV90ICpvdXRzaXplLCBncnViX3Np emVfdCBpbnNpemUpOworICAgICAgZ3J1Yl9lcnJfdCAoKmRlY3J5cHQpKGdydWJfY2lwaGVyX3Bh cmFtc190LCBjaGFyICoqb3V0LCBjb25zdCBjaGFyICppbiwgZ3J1Yl9zaXplX3QgKm91dHNpemUs IGdydWJfc2l6ZV90IGluc2l6ZSk7CisgICAgICBncnViX2Vycl90ICgqZGVjcnlwdF9pbnBsYWNl KShncnViX2NpcGhlcl9wYXJhbXNfdCwgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplKTsKKyAg ICAgIGdydWJfZXJyX3QgKCplbmNyeXB0X2lucGxhY2UpKGdydWJfY2lwaGVyX3BhcmFtc190LCBj aGFyICpidWYsIGdydWJfc2l6ZV90IHNpemUpOworICAgIH0gY2lwaGVyOworCisgICAgc3RydWN0 IHsKKyAgICAgIGdydWJfZXJyX3QgKCpmbikoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QsIGNoYXIgKm91 dCwgY29uc3QgY2hhciAqaW4sIGdydWJfc2l6ZV90IGluc2l6ZSk7CisgICAgfSBoYXNoOworICB9 IHU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBncnViX2NpcGhlciAqZ3J1Yl9jaXBoZXJfdDsKKwor c3RydWN0IGdydWJfY2lwaGVyX3BhcmFtcworeworICBncnViX2NpcGhlcl90CWNpcGhlcjsKKyAg dm9pZAkJKnByaXZhdGU7CisgIHVuc2lnbmVkIGludAlrZXlzaXplOworCisgIHVuaW9uIHsKKyAg ICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhcgkqaXY7CisgICAgICB1bnNpZ25lZCBpbnQJ aXZfbGVuZ3RoOworICAgIH0gY2lwaGVyOworICB9IHU7Cit9OworCit0eXBlZGVmIGludCAoKmdy dWJfY3J5cHRvX2hvb2spKGdydWJfY2lwaGVyX3QsIHZvaWQgKik7CisKK2dydWJfZXJyX3QgRVhQ T1JUX0ZVTkMoZ3J1Yl9jcnlwdG9fZW5jcnlwdCkoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFyYW1z LCBjaGFyICoqb3V0LAorCQkJCQkgICAgY29uc3QgY2hhciAqaW4sIGdydWJfc2l6ZV90ICpvdXRz aXplLAorCQkJCQkgICAgZ3J1Yl9zaXplX3QgaW5zaXplKTsKK2dydWJfZXJyX3QgRVhQT1JUX0ZV TkMoZ3J1Yl9jcnlwdG9fZGVjcnlwdCkoZ3J1Yl9jaXBoZXJfcGFyYW1zX3QgcGFyYW1zLCBjaGFy ICoqb3V0LAorCQkJCQkgICAgY29uc3QgY2hhciAqaW4sIGdydWJfc2l6ZV90ICpvdXRzaXplLAor CQkJCQkgICAgZ3J1Yl9zaXplX3QgaW5zaXplKTsKK2dydWJfZXJyX3QgRVhQT1JUX0ZVTkMoZ3J1 Yl9jcnlwdG9fZGVjcnlwdF9pbnBsYWNlKShncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMsCisJ CQkJCQkgICAgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplKTsKK2dydWJfZXJyX3QgRVhQT1JU X0ZVTkMoZ3J1Yl9jcnlwdG9fZW5jcnlwdF9pbnBsYWNlKShncnViX2NpcGhlcl9wYXJhbXNfdCBw YXJhbXMsCisJCQkJCQkgICAgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplKTsKK2dydWJfZXJy X3QgRVhQT1JUX0ZVTkMoZ3J1Yl9jcnlwdG9fc2V0X2tleSkoZ3J1Yl9jaXBoZXJfcGFyYW1zX3Qg cGFyYW1zLCBjb25zdCBjaGFyICprZXkpOworaW50IEVYUE9SVF9GVU5DKGdydWJfY3J5cHRvX2Np cGhlcl9pdGVyYXRlKShncnViX2NyeXB0b19ob29rIGhvb2ssIHZvaWQgKmRhdGEpOworZ3J1Yl9l cnJfdCBFWFBPUlRfRlVOQyhncnViX2NyeXB0b19oYXNoKShncnViX2NpcGhlcl9wYXJhbXNfdCBw YXJhbXMsCisJCQkJCSBjaGFyICpoYXNoLCBjb25zdCBjaGFyICpwYXlsb2FkLAorCQkJCQkgdW5z aWduZWQgaW50IHNpemUpOworZ3J1Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnViX2NyeXB0b19uZXdf Y2lwaGVyKShncnViX2NpcGhlcl9wYXJhbXNfdCAqcGFyYW1zLAorCQkJCQkgICAgICAgY29uc3Qg Y2hhciAqbmFtZSwgZ3J1Yl9jaXBoZXJfdHlwZV90IHR5cGUpOwordm9pZCBFWFBPUlRfRlVOQyhn cnViX2NyeXB0b19kZWxldGVfY2lwaGVyKShncnViX2NpcGhlcl9wYXJhbXNfdCBwYXJhbXMpOwor dm9pZCBFWFBPUlRfRlVOQyhncnViX2NyeXB0b19jaXBoZXJfcmVnaXN0ZXIpKGdydWJfY2lwaGVy X3QgY2lwaGVyKTsKK3ZvaWQgRVhQT1JUX0ZVTkMoZ3J1Yl9jcnlwdG9fY2lwaGVyX3VucmVnaXN0 ZXIpKGdydWJfY2lwaGVyX3QgY2lwaGVyKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLXggQ1ZTIC1O IGdydWIyLW9yaWcvaW5jbHVkZS9ncnViL2Rpc2suaCBncnViMi9pbmNsdWRlL2dydWIvZGlzay5o Ci0tLSBncnViMi1vcmlnL2luY2x1ZGUvZ3J1Yi9kaXNrLmgJMjAwNy0wOC0wMiAyMDo0MDozNi4w MDAwMDAwMDAgKzAyMDAKKysrIGdydWIyL2luY2x1ZGUvZ3J1Yi9kaXNrLmgJMjAwNy0wOC0yNSAx Nzo0NzoyOS4wMDAwMDAwMDAgKzAyMDAKQEAgLTM0LDcgKzM0LDggQEAKICAgICBHUlVCX0RJU0tf REVWSUNFX0VGSURJU0tfSUQsCiAgICAgR1JVQl9ESVNLX0RFVklDRV9SQUlEX0lELAogICAgIEdS VUJfRElTS19ERVZJQ0VfTFZNX0lELAotICAgIEdSVUJfRElTS19ERVZJQ0VfSE9TVF9JRAorICAg IEdSVUJfRElTS19ERVZJQ0VfSE9TVF9JRCwKKyAgICBHUlVCX0RJU0tfREVWSUNFX0NSWVBUT19J RAogICB9OwogCiBzdHJ1Y3QgZ3J1Yl9kaXNrOwo= --Multipart=_Sun__2_Sep_2007_14_17_36_+0200_Fc1FZOy+hunN46se--