From owner-freebsd-current@FreeBSD.ORG Mon Apr 25 17:55:56 2005 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 41FEA16A4CE for ; Mon, 25 Apr 2005 17:55:56 +0000 (GMT) Received: from lakermmtao04.cox.net (lakermmtao04.cox.net [68.230.240.35]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7E77743D66 for ; Mon, 25 Apr 2005 17:55:55 +0000 (GMT) (envelope-from conrads@cox.net) Received: from dolphin.local.net ([68.11.70.216]) by lakermmtao04.cox.net (InterMail vM.6.01.04.00 201-2131-118-20041027) with ESMTP <20050425175551.QNCQ20878.lakermmtao04.cox.net@dolphin.local.net>; Mon, 25 Apr 2005 13:55:51 -0400 Received: from dolphin.local.net (conrads@localhost.local.net [127.0.0.1]) by dolphin.local.net (8.13.3/8.13.3) with ESMTP id j3PHtjBi020983; Mon, 25 Apr 2005 12:55:49 -0500 (CDT) (envelope-from conrads@cox.net) Date: Mon, 25 Apr 2005 12:55:45 -0500 From: "Conrad J. Sabatier" To: Andre Guibert de Bruet Message-ID: <20050425125545.0dcbf4ec@dolphin.local.net> In-Reply-To: <20050423161839.P68772@lexi.siliconlandmark.com> References: <20050418232455.2d530890@dolphin.local.net> <5265.1113888748@critter.freebsd.dk> <20050419130048.6e545269@dolphin.local.net> <20050423023605.A68772@lexi.siliconlandmark.com> <20050423135112.63c74617@dolphin.local.net> <20050423161839.P68772@lexi.siliconlandmark.com> X-Mailer: Sylpheed-Claws 1.0.4 (GTK+ 1.2.10; amd64-portbld-freebsd6.0) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY cc: freebsd-current@freebsd.org cc: Mathew Kanner Subject: Latest MIDI patchset from Mat X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Apr 2005 17:55:56 -0000 --Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sat, 23 Apr 2005 16:40:44 -0400 (EDT), Andre Guibert de Bruet wrote: > > I have an emu10k1, so I guess I could give it a spin. Any ideas for > the whereabout of these patches? > > My synth is an S08. I've attached the latest patchset Mat sent me. They *should* apply cleanly to STABLE, but will yield a couple of failed hunks when applied to CURRENT, which are quite simple to fix by hand. Just do the following: cd /usr/src patch -p0 < /path/to/midi2-RELENG_5-mar05.diff Let us know if you need any help. And also, do be sure to let us know if you're successful with these! :-) Thanks! -- Conrad J. Sabatier -- "In Unix veritas" --Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY Content-Type: application/octet-stream; name=midi2-RELENG_5-mar05.diff Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=midi2-RELENG_5-mar05.diff SW5kZXg6IHN5cy9jb25mL2ttb2QubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9z cmMvc3lzL2NvbmYva21vZC5tayx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjYuMi4xCmRpZmYg LXUgLXIxLjE2Ni4yLjEga21vZC5tawotLS0gc3lzL2NvbmYva21vZC5tawkyNSBGZWIgMjAwNSAy MTo0NTo1NSAtMDAwMAkxLjE2Ni4yLjEKKysrIHN5cy9jb25mL2ttb2QubWsJNSBNYXIgMjAwNSAx NjoyOToxNCAtMDAwMApAQCAtMjk5LDcgKzI5OSw4IEBACiAJZGV2L3VzYi91c2JfaWYubSBpc2Ev aXNhX2lmLm0gXAogCWtlcm4vYnVzX2lmLm0ga2Vybi9jcHVmcmVxX2lmLm0ga2Vybi9kZXZpY2Vf aWYubSBcCiAJbGlia2Vybi9pY29udl9jb252ZXJ0ZXJfaWYubSBvcGVuY3J5cHRvL2NyeXB0b19p Zi5tIFwKLQlwYzk4L3BjOTgvY2FuYnVzX2lmLm0gcGNpL2FncF9pZi5tIHNwYXJjNjQvcGNpL29m d19wY2lfaWYubQorCXBjOTgvcGM5OC9jYW5idXNfaWYubSBwY2kvYWdwX2lmLm0gc3BhcmM2NC9w Y2kvb2Z3X3BjaV9pZi5tIFwKKyAJZGV2L3NvdW5kL21pZGkvbXB1X2lmLm0gZGV2L3NvdW5kL21p ZGkvbXB1Zm9pX2lmLm0gZGV2L3NvdW5kL21pZGkvc3ludGhfaWYubQogCiAuZm9yIF9zcmNzcmMg aW4gJHtNRklMRVN9CiAuZm9yIF9leHQgaW4gYyBoCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkv bWlkaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9taWRpLmMKZGlm ZiAtTiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaS5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9zb3VuZC9taWRpL21pZGkuYwk1IE1hciAyMDA1IDE3 OjA3OjM5IC0wMDAwCkBAIC0wLDAgKzEsMTUxNCBAQAorLyoKKyAqIChjKSAyMDAzIE1hdGhldyBL YW5uZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwg SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICog YnkgTGVubmFydCBBdWd1c3Rzc29uIChhdWd1c3Rzc0BuZXRic2Qub3JnKS4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBj b250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRh dGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElO Qy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisgKi8KKworIC8qCisgICogUGFydHMgb2YgdGhpcyBmaWxlIHN0YXJ0ZWQgb3V0IGFzIE5l dEJTRDogbWlkaS5jIDEuMzEKKyAgKiBUaGV5IGFyZSBtb3N0bHkgZ29uZS4gIFN0aWxsIHRoZSBt b3N0IG9idmlvdXMgd2lsbCBiZSB0aGUgc3RhdGUKKyAgKiBtYWNoaW5lIG1pZGlfaW4KKyAgKi8K KworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1 ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9t dXRleC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbHZhci5o PgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKyNpbmNs dWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lz L21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5o PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9wb2xs Lmg+CisjaW5jbHVkZSA8c3lzL3NidWYuaD4KKyNpbmNsdWRlIDxzeXMva29iai5oPgorI2luY2x1 ZGUgPHN5cy9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGkuaD4KKyNp bmNsdWRlICJtcHVfaWYuaCIKKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGlxLmg+Cisj aW5jbHVkZSAic3ludGhfaWYuaCIKK01BTExPQ19ERUZJTkUoTV9NSURJLCAibWlkaSBidWZmZXJz IiwgIk1pZGkgZGF0YSBhbGxvY2F0aW9uIGFyZWEiKTsKKworCisjZGVmaW5lIFBDTU1LTUlOT1Io dSwgZCwgYykgKCgoKGMpICYgMHhmZikgPDwgMTYpIHwgKCgodSkgJiAweDBmKSA8PCA0KSB8ICgo ZCkgJiAweDBmKSkKKyNkZWZpbmUgTUlESU1LTUlOT1IodSwgZCwgYykgUENNTUtNSU5PUih1LCBk LCBjKQorCisjZGVmaW5lIE1JRElfREVWX1JBVwkyCisjZGVmaW5lIE1JRElfREVWX01JRElDVEwg MTIKKworZW51bSBtaWRpX3N0YXRlcyB7CisJTUlESV9JTl9TVEFSVCwgTUlESV9JTl9TWVNFWCwg TUlESV9JTl9EQVRBCit9OworCisvKgorICogVGhlIE1QVSBpbnRlcmZhY2UgY3VycmVudCBoYXMg aW5pdCgpIHVuaW5pdCgpIGlucXNpemUoKCBvdXRxc2l6ZSgpCisgKiBjYWxsYmFjaygpIDogZmlk ZGxlIHdpdGggdGhlIHR4fHJ4IHN0YXR1cy4KKyAqLworCisjaW5jbHVkZSAibXB1X2lmLmgiCisK Ky8qCisgKiAvZGV2L3JtaWRpCVN0cnVjdHVyZSBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUg TUlESV9OQU1FTEVOICAgMTYKK3N0cnVjdCBzbmRfbWlkaSB7CisJS09CSl9GSUVMRFM7CisJc3Ry dWN0IG10eCAgICAgIGxvY2s7CS8qIFByb3RlY3RzIGFsbCBidXQgcXVldWVzICovCisJdm9pZCAg ICAgICAgICAgKmNvb2tpZTsKKworCWludCAgICAgICAgICAgICB1bml0OwkvKiBTaG91bGQgb25s eSBiZSB1c2VkIGluIG1pZGlzdGF0ICovCisJaW50ICAgICAgICAgICAgIGNoYW5uZWw7LyogU2hv dWxkIG9ubHkgYmUgdXNlZCBpbiBtaWRpc3RhdCAqLworCisJaW50ICAgICAgICAgICAgIGJ1c3k7 CisJaW50ICAgICAgICAgICAgIGZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJY2hhciAgICAgICAg ICAgIG5hbWVbTUlESV9OQU1FTEVOXTsKKwlzdHJ1Y3QgbXR4ICAgICAgcWxvY2s7CS8qIFByb3Rl Y3RzIGlucSwgb3V0cSBhbmQgZmxhZ3MgKi8KKwkgICAgICAgICAgICAgICAgTUlESVFfSEVBRCgs IGNoYXIpaW5xLCBvdXRxOworCWludCAgICAgICAgICAgICByY2hhbiwgd2NoYW47CisJc3RydWN0 IHNlbGluZm8gIHJzZWwsIHdzZWw7CisJaW50ICAgICAgICAgICAgIGhpd2F0OwkvKiBRTEVOKG91 dHEpPkhpZ2gtd2F0ZXIgLT4gZGlzYWJsZSB3cml0ZXMKKwkJICAgICAqIGZyb20gdXNlcmxhbmQg Ki8KKwllbnVtIG1pZGlfc3RhdGVzIGlucV9zdGF0ZTsKKwlpbnQgICAgICAgICAgICAgaW5xX3N0 YXR1cywgaW5xX2xlZnQ7CS8qIFZhcmlhYmxlcyBmb3IgdGhlIHN0YXRlCisJCQkgICAgICogbWFj aGluZSBpbiBNaWRpX2luLCB0aGlzCisJCQkgICAgICogaXMgdG8gcHJvdmlkZSB0aGF0IHNpZ25h bHMKKwkJCSAgICAgKiBvbmx5IGdldCBpc3N1ZWQgb25seQorCQkJICAgICAqIGNvbXBsZXRlIGNv bW1hbmQgcGFja2V0cy4gKi8KKwlzdHJ1Y3QgcHJvYyAgICAqYXN5bmM7CisJc3RydWN0IGNkZXYg ICAgKmRldjsKKwlzdHJ1Y3Qgc3ludGhfbWlkaSAqc3ludGg7CisJaW50CQlzeW50aF9mbGFnczsK KwlUQUlMUV9FTlRSWShzbmRfbWlkaSkgbGluazsKK307CisKK3N0cnVjdCBzeW50aF9taWRpIHsK KyAgICBLT0JKX0ZJRUxEUzsKKyAgICBzdHJ1Y3Qgc25kX21pZGkgKm07Cit9OworCitzdGF0aWMg c3ludGhfb3Blbl90IG1pZGlzeW50aF9vcGVuOworc3RhdGljIHN5bnRoX2Nsb3NlX3QgbWlkaXN5 bnRoX2Nsb3NlOworc3RhdGljIHN5bnRoX3dyaXRlcmF3X3QgbWlkaXN5bnRoX3dyaXRlcmF3Owor c3RhdGljIHN5bnRoX2tpbGxub3RlX3QgbWlkaXN5bnRoX2tpbGxub3RlOworc3RhdGljIHN5bnRo X3N0YXJ0bm90ZV90IG1pZGlzeW50aF9zdGFydG5vdGU7CitzdGF0aWMgc3ludGhfc2V0aW5zdHJf dCBtaWRpc3ludGhfc2V0aW5zdHI7CitzdGF0aWMgc3ludGhfYWxsb2NfdCBtaWRpc3ludGhfYWxs b2M7CitzdGF0aWMgc3ludGhfY29udHJvbGxlcl90IG1pZGlzeW50aF9jb250cm9sbGVyOworc3Rh dGljIHN5bnRoX2JlbmRlcl90IG1pZGlzeW50aF9iZW5kZXI7CisKKworc3RhdGljIGtvYmpfbWV0 aG9kX3QgbWlkaXN5bnRoX21ldGhvZHNbXSA9IHsKKyAgICAgICAgICAgIEtPQkpNRVRIT0Qoc3lu dGhfb3BlbixtaWRpc3ludGhfb3BlbiksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX2Ns b3NlLG1pZGlzeW50aF9jbG9zZSksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX3dyaXRl cmF3LG1pZGlzeW50aF93cml0ZXJhdyksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX3Nl dGluc3RyLG1pZGlzeW50aF9zZXRpbnN0ciksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRo X3N0YXJ0bm90ZSxtaWRpc3ludGhfc3RhcnRub3RlKSwKKyAgICAgICAgICAgIEtPQkpNRVRIT0Qo c3ludGhfa2lsbG5vdGUsbWlkaXN5bnRoX2tpbGxub3RlKSwKKwkgICAgS09CSk1FVEhPRChzeW50 aF9hbGxvYywgbWlkaXN5bnRoX2FsbG9jKSwKKwkgICAgS09CSk1FVEhPRChzeW50aF9jb250cm9s bGVyLCBtaWRpc3ludGhfY29udHJvbGxlciksCisJICAgIEtPQkpNRVRIT0Qoc3ludGhfYmVuZGVy LCBtaWRpc3ludGhfYmVuZGVyKSwKKyAgICAgICAgICAgIHsgMCwgMCB9Cit9OworCitERUZJTkVf Q0xBU1MobWlkaXN5bnRoLCBtaWRpc3ludGhfbWV0aG9kcywgMCk7CisKKy8qCisgKiBNb2R1bGUg RXhwb3J0cyAmIEludGVyZmFjZQorICogCisgKiBzdHJ1Y3QgbWlkaV9jaGFuICptaWRpX2luaXQo TVBVX0NMQVNTIGNscywgaW50IHVuaXQsIGludCBjaGFuKSBpbnQKKyAqIG1pZGlfdW5pbml0KHN0 cnVjdCBzbmRfbWlkaSAqKSAwID09IG5vIGVycm9yIEVCVVNZIG9yIG90aGVyIGVycm9yIGludAor ICogTWlkaV9pbihzdHJ1Y3QgbWlkaV9jaGFuICosIGNoYXIgKmJ1ZiwgaW50IGNvdW50KSBpbnQg TWlkaV9vdXQoc3RydWN0CisgKiBtaWRpX2NoYW4gKiwgY2hhciAqYnVmLCBpbnQgY291bnQpCisg KiAKKyAqIG1pZGlfe2luLG91dH0gcmV0dXJuIGFjdHVhbCBzaXplIHRyYW5zZmVyZWQKKyAqIAor ICovCisKKworLyoKKyAqIG1pZGlfZGV2cyB0YWlscSwgaG9sZGVyIG9mIGFsbCBybWlkaSBpbnN0 YW5jZXMgcHJvdGVjdGVkIGJ5IG1pZGlzdGF0X2xvY2sKKyAqLworCitUQUlMUV9IRUFEKCwgc25k X21pZGkpIG1pZGlfZGV2czsKKworLyoKKyAqIC9kZXYvbWlkaXN0YXQgdmFyaWFibGVzIGFuZCBk ZWNsYXJhdGlvbnMsIHByb3RlY3RlZCBieSBtaWRpc3RhdF9sb2NrCisgKi8KKworc3RhdGljIHN0 cnVjdCBtdHggbWlkaXN0YXRfbG9jazsKK3N0YXRpYyBpbnQgICAgICBtaWRpc3RhdF9pc29wZW4g PSAwOworc3RhdGljIHN0cnVjdCBzYnVmIG1pZGlzdGF0X3NidWY7CitzdGF0aWMgaW50ICAgICAg bWlkaXN0YXRfYnVmcHRyOworc3RhdGljIHN0cnVjdCBjZGV2ICptaWRpc3RhdF9kZXY7CisKKy8q CisgKiAvZGV2L21pZGlzdGF0CWRldl90IGRlY2xhcmF0aW9ucworICovCisKK3N0YXRpYyBkX29w ZW5fdCBtaWRpc3RhdF9vcGVuOworc3RhdGljIGRfY2xvc2VfdCBtaWRpc3RhdF9jbG9zZTsKK3N0 YXRpYyBkX3JlYWRfdCBtaWRpc3RhdF9yZWFkOworCisjZGVmaW5lIE1JRElfTUFKT1IgMzAKKwor c3RhdGljIHN0cnVjdCBjZGV2c3cgbWlkaXN0YXRfY2RldnN3ID0geworCS5kX3ZlcnNpb24gPSBE X1ZFUlNJT04sCisJLmRfb3BlbiA9IG1pZGlzdGF0X29wZW4sCisJLmRfY2xvc2UgPSBtaWRpc3Rh dF9jbG9zZSwKKwkuZF9yZWFkID0gbWlkaXN0YXRfcmVhZCwKKwkuZF9uYW1lID0gIm1pZGlzdGF0 IiwKKwkuZF9tYWogPSBNSURJX01BSk9SLAorfTsKKworCisvKgorICogL2Rldi9ybWlkaSBkZXZf dCBkZWNsYXJhdGlvbnMsIHN0cnVjdCB2YXJpYWJsZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5Cisg KiBsb2NrcyBjb250YWluZWQgd2l0aGluIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIGRf b3Blbl90IG1pZGlfb3BlbjsKK3N0YXRpYyBkX2Nsb3NlX3QgbWlkaV9jbG9zZTsKK3N0YXRpYyBk X2lvY3RsX3QgbWlkaV9pb2N0bDsKK3N0YXRpYyBkX3JlYWRfdCBtaWRpX3JlYWQ7CitzdGF0aWMg ZF93cml0ZV90IG1pZGlfd3JpdGU7CitzdGF0aWMgZF9wb2xsX3QgbWlkaV9wb2xsOworCitzdGF0 aWMgc3RydWN0IGNkZXZzdyBtaWRpX2NkZXZzdyA9IHsKKwkuZF92ZXJzaW9uID0gRF9WRVJTSU9O LAorCS5kX29wZW4gPSBtaWRpX29wZW4sCisJLmRfY2xvc2UgPSBtaWRpX2Nsb3NlLAorCS5kX3Jl YWQgPSBtaWRpX3JlYWQsCisJLmRfd3JpdGUgPSBtaWRpX3dyaXRlLAorCS5kX2lvY3RsID0gbWlk aV9pb2N0bCwKKwkuZF9wb2xsID0gbWlkaV9wb2xsLAorCS5kX25hbWUgPSAicm1pZGkiLAorCS5k X21haiA9IE1JRElfTUFKT1IsCit9OworCisvKgorICogUHJvdG90eXBlcyBvZiBsaWJyYXJ5IGZ1 bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgICAgICBtaWRpX2Rlc3Ryb3koc3RydWN0IHNuZF9t aWRpICosIGludCk7CitzdGF0aWMgaW50ICAgICAgbWlkaXN0YXRfcHJlcGFyZShzdHJ1Y3Qgc2J1 ZiAqIHMpOworc3RhdGljIGludCAgICAgIG1pZGlfbG9hZCh2b2lkKTsKK3N0YXRpYyBpbnQgICAg ICBtaWRpX3VubG9hZCh2b2lkKTsKKworLyoKKyAqIE1pc2MgZGVjbHIuCisgKi8KK1NZU0NUTF9O T0RFKF9odywgT0lEX0FVVE8sIG1pZGksIENUTEZMQUdfUkQsIDAsICJNaWRpIGRyaXZlciIpOwor U1lTQ1RMX05PREUoX2h3X21pZGksIE9JRF9BVVRPLCBzdGF0LCBDVExGTEFHX1JELCAwLCAiU3Rh dHVzIGRldmljZSIpOworCitpbnQgICAgICAgICAgICAgbWlkaV9kZWJ1ZzsKK1NZU0NUTF9JTlQo X2h3X21pZGksIE9JRF9BVVRPLCBkZWJ1ZywgQ1RMRkxBR19SVywgJm1pZGlfZGVidWcsIDAsICIi KTsKKworaW50ICAgICAgICAgICAgIG1pZGlfZHVtcHJhdzsKK1NZU0NUTF9JTlQoX2h3X21pZGks IE9JRF9BVVRPLCBkdW1wcmF3LCBDVExGTEFHX1JXLCAmbWlkaV9kdW1wcmF3LCAwLCAiIik7CisK K2ludCAgICAgICAgICAgICBtaWRpX2luc3Ryb2ZmOworU1lTQ1RMX0lOVChfaHdfbWlkaSwgT0lE X0FVVE8sIGluc3Ryb2ZmLCBDVExGTEFHX1JXLCAmbWlkaV9pbnN0cm9mZiwgMCwgIiIpOworCitp bnQgICAgICAgICAgICAgbWlkaXN0YXRfdmVyYm9zZTsKK1NZU0NUTF9JTlQoX2h3X21pZGlfc3Rh dCwgT0lEX0FVVE8sIHZlcmJvc2UsIENUTEZMQUdfUlcsIAorCSZtaWRpc3RhdF92ZXJib3NlLCAw LCAiIik7CisKKyNkZWZpbmUgTUlESV9ERUJVRyhsLGEpCWlmKG1pZGlfZGVidWc+PWwpIGEKKy8q CisgKiBDT0RFIFNUQVJUCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyIGEgbmV3IHJtaWRpIGRldmlj ZS4gY2xzIG1pZGlfaWYgaW50ZXJmYWNlIHVuaXQgPT0gMCBtZWFucworICogYXV0by1hc3NpZ24g bmV3IHVuaXQgbnVtYmVyIHVuaXQgIT0gMCBhbHJlYWR5IGFzc2lnbmVkIGEgdW5pdCBudW1iZXIs IGVnLgorICogbm90IHRoZSBmaXJzdCBjaGFubmVsIHByb3ZpZGVkIGJ5IHRoaXMgZGV2aWNlLiBj aGFubmVsLAlzdWItdW5pdAorICogY29va2llIGlzIHBhc3NlZCBiYWNrIG9uIE1QVSBjYWxscyBU eXBpY2FsIGRldmljZSBkcml2ZXJzIHdpbGwgY2FsbCB3aXRoCisgKiB1bml0PTAsIGNoYW5uZWw9 MS4uKG51bWJlciBvZiBjaGFubmVscykgYW5kIGNvb2tpZT1zb2Z0X2MgYW5kIHdvbid0IGNhcmUK KyAqIHdoYXQgdW5pdCBudW1iZXIgaXMgdXNlZC4KKyAqIAorICogSXQgaXMgYW4gZXJyb3IgdG8g Y2FsbCBtaWRpX2luaXQgd2l0aCBhbiBhbHJlYWR5IHVzZWQgdW5pdC9jaGFubmVsIGNvbWJvLgor ICogCisgKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IKKyAqIAorICovCitzdHJ1Y3Qgc25kX21pZGkg KgorbWlkaV9pbml0KGtvYmpfY2xhc3NfdCBjbHMsIGludCB1bml0LCBpbnQgY2hhbm5lbCwgdm9p ZCAqY29va2llKQoreworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKwlpbnQgICAgICAgICAgICAgaTsK KwlpbnQgICAgICAgICAgICAgaW5xc2l6ZSwgb3V0cXNpemU7CisJTUlESV9UWVBFICAgICAgKmJ1 ZjsKKworCU1JRElfREVCVUcoMSxwcmludGYoIm1pZGlpbml0OiB1bml0ICVkLyVkLlxuIiwgdW5p dCwgY2hhbm5lbCkpOworCW10eF9sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwkvKgorCSAqIFByb3Rl Y3QgYWdhaW5zdCBjYWxsIHdpdGggZXhpc3RpbmcgdW5pdC9jaGFubmVsIG9yIGF1dG8tYWxsb2Nh dGUgYQorCSAqIG5ldyB1bml0IG51bWJlci4KKwkgKi8KKwlpID0gLTE7CisJVEFJTFFfRk9SRUFD SChtLCAmbWlkaV9kZXZzLCBsaW5rKSB7CisJICAgIG10eF9sb2NrKCZtLT5sb2NrKTsKKwkgICAg aWYgKHVuaXQgIT0gMCkgeworCSAgICBpZiAobS0+dW5pdCA9PSB1bml0ICYmIG0tPmNoYW5uZWwg PT0gY2hhbm5lbCkgeworCSAgICAgICAgbXR4X3VubG9jaygmbS0+bG9jayk7CisJCWdvdG8gZXJy MDsKKwkJfQorCSAgICB9IGVsc2UgeworCS8qCisJICogRmluZCBhIGJldHRlciB1bml0IG51bWJl cgorCSAqLworCSAgICBpZiAobS0+dW5pdCA+IGkpCisJCWkgPSBtLT51bml0OworCSAgICB9CisJ ICAgIG10eF91bmxvY2soJm0tPmxvY2spOworCX0KKworCWlmICh1bml0ID09IDApCisJICAgIHVu aXQgPSBpICsgMTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpaW5pdCAjMjogdW5pdCAl ZC8lZC5cbiIsIHVuaXQsIGNoYW5uZWwpKTsKKwltID0gbWFsbG9jKHNpemVvZigqbSksIE1fTUlE SSwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChtID09IE5VTEwpCisJICAgIGdvdG8gZXJyMDsK KworCW0tPnN5bnRoID0gbWFsbG9jKHNpemVvZigqbS0+c3ludGgpLCBNX01JREksIE1fTk9XQUlU IHwgTV9aRVJPKTsKKwlrb2JqX2luaXQoKGtvYmpfdCltLT5zeW50aCwgJm1pZGlzeW50aF9jbGFz cyk7CisJbS0+c3ludGgtPm0gPSBtOworCWtvYmpfaW5pdCgoa29ial90KW0sIGNscyk7CisJaW5x c2l6ZSA9IE1QVV9JTlFTSVpFKG0sIGNvb2tpZSk7CisJb3V0cXNpemUgPSBNUFVfT1VUUVNJWkUo bSwgY29va2llKTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpaW5pdCBxdWV1ZXMgJWQv JWQuXG4iLCBpbnFzaXplLCBvdXRxc2l6ZSkpOworCWlmICghaW5xc2l6ZSAmJiAhb3V0cXNpemUp CisJICAgIGdvdG8gZXJyMTsKKworCW10eF9pbml0KCZtLT5sb2NrLCAicmF3IG1pZGkiLCAwLCAw KTsKKwltdHhfaW5pdCgmbS0+cWxvY2ssICJxIHJhdyBtaWRpIiwgMCwgMCk7CisKKwltdHhfbG9j aygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKworCWlmIChpbnFzaXplKQorCSAg ICBidWYgPSBtYWxsb2Moc2l6ZW9mKE1JRElfVFlQRSkgKiBpbnFzaXplLCBNX01JREksIE1fTk9X QUlUKTsKKwllbHNlCisJICAgIGJ1ZiA9IE5VTEw7CisKKwlNSURJUV9JTklUKG0tPmlucSwgYnVm LCBpbnFzaXplKTsKKworCWlmIChvdXRxc2l6ZSkKKwkgICAgYnVmID0gbWFsbG9jKHNpemVvZihN SURJX1RZUEUpICogb3V0cXNpemUsIE1fTUlESSwgTV9OT1dBSVQpOworCWVsc2UKKwkgICAgYnVm ID0gTlVMTDsKKwltLT5oaXdhdCA9IG91dHFzaXplIC8gMjsKKworCU1JRElRX0lOSVQobS0+b3V0 cSwgYnVmLCBvdXRxc2l6ZSk7CisKKwlpZiAoKGlucXNpemUgJiYgIU1JRElRX0JVRihtLT5pbnEp KSB8fAorCSAgICAob3V0cXNpemUgJiYgIU1JRElRX0JVRihtLT5vdXRxKSkpCisJICAgIGdvdG8g ZXJyMjsKKworCisJbS0+YnVzeSA9IDA7CisJbS0+ZmxhZ3MgPSAwOworCW0tPnVuaXQgPSB1bml0 OworCW0tPmNoYW5uZWwgPSBjaGFubmVsOworCW0tPmNvb2tpZSA9IGNvb2tpZTsKKworCWlmIChN UFVfSU5JVChtLCBjb29raWUpKQorCSAgICBnb3RvIGVycjI7CisKKwltdHhfdW5sb2NrKCZtLT5s b2NrKTsKKwltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisKKwlUQUlMUV9JTlNFUlRfVEFJTCgmbWlk aV9kZXZzLCBtLCBsaW5rKTsKKworCW10eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCisJbS0+ ZGV2ID0gbWFrZV9kZXYoJm1pZGlfY2RldnN3LAorCQkJTUlESU1LTUlOT1IodW5pdCwgTUlESV9E RVZfUkFXLCBjaGFubmVsKSwKKwkgICAgICAgICAJVUlEX1JPT1QsIEdJRF9XSEVFTCwgMDY2Niwg Im1pZGklZC4lZCIsIHVuaXQsIGNoYW5uZWwpOworCW0tPmRldi0+c2lfZHJ2MSA9IG07CisKKwly ZXR1cm4gbTsKKworZXJyMjoJbXR4X2Rlc3Ryb3koJm0tPnFsb2NrKTsKKwltdHhfZGVzdHJveSgm bS0+bG9jayk7CisKKwlpZiAoTUlESVFfQlVGKG0tPmlucSkpCisJICAgIGZyZWUoTUlESVFfQlVG KG0tPmlucSksIE1fTUlESSk7CisJaWYgKE1JRElRX0JVRihtLT5vdXRxKSkKKwkgICAgZnJlZShN SURJUV9CVUYobS0+b3V0cSksIE1fTUlESSk7CitlcnIxOglmcmVlKG0sIE1fTUlESSk7CitlcnIw OgltdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwlNSURJX0RFQlVHKDEsIHByaW50ZigibWlk aV9pbml0IGVuZGVkIGluIGVycm9yXG4iKSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBt aWRpX3VuaW5pdCBkb2VzIG5vdCBjYWxsIE1JRElfVU5JTklULCBhcyBzaW5jZSB0aGlzIGlzIHRo ZSBpbXBsZW1lbnRvcnMKKyAqIGVudHJ5IHBvaW50LiBtaWRpX3VuaW50IGlmIGZhY3QsIGRvZXMg bm90IHNlbmQgYW55IG1ldGhvZHMuIEEgY2FsbCB0bworICogbWlkaV91bmluaXQgaXMgYSBkZWZh Y3RvIHByb21pc2UgdGhhdCB5b3Ugd29uJ3QgbWFuaXB1bGF0ZSBjaCBhbnltb3JlCisgKiAKKyAq LworCitpbnQKK21pZGlfdW5pbml0KHN0cnVjdCBzbmRfbWlkaSAqIG0pCit7CisJaW50ICAgICAg ICAgICAgIGVycjsKKworCWVyciA9IEVOWElPOworCW10eF9sb2NrKCZtaWRpc3RhdF9sb2NrKTsK KwltdHhfbG9jaygmbS0+bG9jayk7CisJaWYgKG0tPmJ1c3kpIHsKKwkgICAgaWYgKCEobS0+cmNo YW4gfHwgbS0+d2NoYW4pKQorCQlnb3RvIGVycjsKKworCSAgICBpZiAobS0+cmNoYW4pIHsKKwkJ d2FrZXVwKCZtLT5yY2hhbik7CisJCW0tPnJjaGFuID0gMDsKKwkgICAgfQorCSAgICBpZiAobS0+ d2NoYW4pIHsKKwkJd2FrZXVwKCZtLT53Y2hhbik7CisJCW0tPndjaGFuID0gMDsKKwkgICAgfQor CX0KKwllcnIgPSBtaWRpX2Rlc3Ryb3kobSwgMCk7CisJaWYoIWVycikKKwkJZ290byBleGl0Owor CitlcnI6CW10eF91bmxvY2soJm0tPmxvY2spOworZXhpdDoJbXR4X3VubG9jaygmbWlkaXN0YXRf bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIG1pZGlfaW46IHByb2Nlc3MgYWxsIGRh dGEgdW50aWwgdGhlIHF1ZXVlIGlzIGZ1bGwsIHRoZW4gZGlzY2FyZHMgdGhlIHJlc3QuCisgKiBT aW5jZSBtaWRpX2luIGlzIGEgc3RhdGUgbWFjaGluZSwgZGF0YSBkaXNjYXJkcyBjYW4gY2F1c2Ug aXQgdG8gZ2V0IG91dCBvZgorICogd2hhY2suICBQcm9jZXNzIGFzIG11Y2ggYXMgcG9zc2libGUu ICBJdCBjYWxscywgd2FrZXVwLCBzZWxub3RpZnkgYW5kCisgKiBwc2lnbmFsIGF0IG1vc3Qgb25j ZS4KKyAqLworCisjaWYgbm90ZGVmCitzdGF0aWMgaW50ICAgICAgbWlkaV9sZW5ndGhzW10gPSB7 MiwgMiwgMiwgMiwgMSwgMSwgMiwgMH07CisjZW5kaWYgLyogbm90ZGVmICovCisvKiBOdW1iZXIg b2YgYnl0ZXMgaW4gYSBNSURJIGNvbW1hbmQgKi8KKyNkZWZpbmUgTUlESV9MRU5HVEgoZCkgKG1p ZGlfbGVuZ3Roc1soKGQpID4+IDQpICYgN10pCisjZGVmaW5lIE1JRElfQUNLCTB4ZmUKKyNkZWZp bmUgTUlESV9JU19TVEFUVVMoZCkgKChkKSA+PSAweDgwKQorI2RlZmluZSBNSURJX0lTX0NPTU1P TihkKSAoKGQpID49IDB4ZjApCisKKyNkZWZpbmUgTUlESV9TWVNFWF9TVEFSVAkweEYwCisjZGVm aW5lIE1JRElfU1lTRVhfRU5ECSAgICAweEY3CisKKworaW50CittaWRpX2luKHN0cnVjdCBzbmRf bWlkaSAqIG0sIE1JRElfVFlQRSAqIGJ1ZiwgaW50IHNpemUpCit7CisJLyogaW50ICAgICAgICAg ICAgIGksIHNpZywgZW5xOyAqLworCWludCAgICAgICAgICAgICB1c2VkOworCS8qIE1JRElfVFlQ RSAgICAgICBkYXRhOyAqLworCU1JRElfREVCVUcoNSwgcHJpbnRmKCJtaWRpX2luOiBtPSVwIHNp emU9JWRcbiIsIG0sIHNpemUpKTsKKworLyoKKyAqIFhYWDogbG9ja2luZyBmbHViCisgKi8KKwlp ZiAoIShtLT5mbGFncyAmIE1fUlgpKQorCSAgICByZXR1cm4gc2l6ZTsKKworCXVzZWQgPSAwOwor CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKyNpZiAwCisJLyoKKwkgKiBEb24ndCBib3RoZXIgcXVl dWluZyBpZiBub3QgaW4gcmVhZCBtb2RlLiAgRGlzY2FyZCBldmVyeXRoaW5nIGFuZAorCSAqIHJl dHVybiBzaXplIHNvIHRoZSBjYWxsZXIgZG9lc24ndCBmcmVhayBvdXQuCisJICovCisKKwlpZiAo IShtLT5mbGFncyAmIE1fUlgpKQorCSAgICByZXR1cm4gc2l6ZTsKKworCWZvciAoaSA9IHNpZyA9 IDA7IGkgPCBzaXplOyBpKyspIHsKKworCSAgICBkYXRhID0gYnVmW2ldOworCSAgICBlbnEgPSAw OworCSAgICBpZiAoZGF0YSA9PSBNSURJX0FDSykKKwkJY29udGludWU7CisKKwkgICAgc3dpdGNo IChtLT5pbnFfc3RhdGUpIHsKKwkgICAgY2FzZSBNSURJX0lOX1NUQVJUOgorCQlpZiAoTUlESV9J U19TVEFUVVMoZGF0YSkpIHsKKwkJICAgIHN3aXRjaCAoZGF0YSkgeworCQkgICAgY2FzZSAweGYw OgkvKiBTeXNleCAqLworCQkJbS0+aW5xX3N0YXRlID0gTUlESV9JTl9TWVNFWDsKKwkJCWJyZWFr OworCQkgICAgY2FzZSAweGYxOgkvKiBNVEMgcXVhcnRlciBmcmFtZSAqLworCQkgICAgY2FzZSAw eGYzOgkvKiBTb25nIHNlbGVjdCAqLworCQkJbS0+aW5xX3N0YXRlID0gTUlESV9JTl9EQVRBOwor CQkJZW5xID0gMTsKKwkJCW0tPmlucV9sZWZ0ID0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAw eGYyOgkvKiBTb25nIHBvc2l0aW9uIHBvaW50ZXIgKi8KKwkJCW0tPmlucV9zdGF0ZSA9IE1JRElf SU5fREFUQTsKKwkJCWVucSA9IDE7CisJCQltLT5pbnFfbGVmdCA9IDI7CisJCQlicmVhazsKKwkJ ICAgIGRlZmF1bHQ6CisJCQlpZiAoTUlESV9JU19DT01NT04oZGF0YSkpIHsKKwkJCSAgICBlbnEg PSAxOworCQkJICAgIHNpZyA9IDE7CisJCQl9IGVsc2UgeworCQkJICAgIG0tPmlucV9zdGF0ZSA9 IE1JRElfSU5fREFUQTsKKwkJCSAgICBlbnEgPSAxOworCQkJICAgIG0tPmlucV9zdGF0dXMgPSBk YXRhOworCQkJICAgIG0tPmlucV9sZWZ0ID0gTUlESV9MRU5HVEgoZGF0YSk7CisJCQl9CisJCQli cmVhazsKKwkJICAgIH0KKwkJfSBlbHNlIGlmIChNSURJX0lTX1NUQVRVUyhtLT5pbnFfc3RhdHVz KSkgeworCQkgICAgbS0+aW5xX3N0YXRlID0gTUlESV9JTl9EQVRBOworCQkgICAgaWYgKCFNSURJ UV9GVUxMKG0tPmlucSkpIHsKKwkJCXVzZWQrKzsKKwkJCU1JRElRX0VOUShtLT5pbnEsICZtLT5p bnFfc3RhdHVzLCAxKTsKKwkJICAgIH0KKwkJICAgIGVucSA9IDE7CisJCSAgICBtLT5pbnFfbGVm dCA9IE1JRElfTEVOR1RIKG0tPmlucV9zdGF0dXMpIC0gMTsKKwkJfQorCQlicmVhazsKKwkJLyoK KwkJICogRW5kIG9mIGNhc2UgTUlESV9JTl9TVEFSVDoKKwkJICovCisKKwkgICAgY2FzZSBNSURJ X0lOX0RBVEE6CisJCWVucSA9IDE7CisJCWlmICgtLW0tPmlucV9sZWZ0IDw9IDApCisJCSAgICBz aWcgPSAxOwkvKiBkZWxpdmVyIGRhdGEgKi8KKwkJYnJlYWs7CisJICAgIGNhc2UgTUlESV9JTl9T WVNFWDoKKwkJaWYgKGRhdGEgPT0gTUlESV9TWVNFWF9FTkQpCisJCSAgICBtLT5pbnFfc3RhdGUg PSBNSURJX0lOX1NUQVJUOworCQlicmVhazsKKwkgICAgfQorCisJICAgIGlmIChlbnEpCisJCWlm ICghTUlESVFfRlVMTChtLT5pbnEpKSB7CisJCSAgICBNSURJUV9FTlEobS0+aW5xLCAmZGF0YSwg MSk7CisJCSAgICB1c2VkKys7CisJCX0KKwkgICAgLyoKKwkgICAgICogRW5kIG9mIHRoZSBzdGF0 ZSBtYWNoaW5lcyBtYWluICJmb3IgbG9vcCIKKwkgICAgICovCisJfQorCWlmIChzaWcpIHsKKyNl bmRpZgorCU1JRElfREVCVUcoNiwgcHJpbnRmKCJtaWRpX2luOiBsZW4gJWpkIGF2YWlsICVqZFxu IiwgKGludG1heF90KU1JRElRX0xFTihtLT5pbnEpLCAoaW50bWF4X3QpTUlESVFfQVZBSUwobS0+ aW5xKSkpIDsKKwlpZiAoTUlESVFfQVZBSUwobS0+aW5xKSA+IHNpemUpIHsKKwkJdXNlZD1zaXpl OworCQlNSURJUV9FTlEobS0+aW5xLCBidWYsIHNpemUpOworCX0gZWxzZSB7CisJCU1JRElfREVC VUcoNCxwcmludGYoIm1pZGlfaW46IERpc2NhcmRpbmcgZGF0YSBxdVxuIikpOworCQltdHhfdW5s b2NrKCZtLT5xbG9jayk7CisJCXJldHVybiAwOworCX0KKwkgICAgaWYgKG0tPnJjaGFuKSB7CisJ CXdha2V1cCgmbS0+cmNoYW4pOworCQltLT5yY2hhbiA9IDA7CisJICAgIH0KKwkgICAgc2Vsd2Fr ZXVwKCZtLT5yc2VsKTsKKwkgICAgaWYgKG0tPmFzeW5jKSB7CisJCVBST0NfTE9DSyhtLT5hc3lu Yyk7CisJCXBzaWduYWwobS0+YXN5bmMsIFNJR0lPKTsKKwkJUFJPQ19VTkxPQ0sobS0+YXN5bmMp OworCSAgICB9CisjaWYgMAorCX0KKyNlbmRpZgorCW10eF91bmxvY2soJm0tPnFsb2NrKTsKKwly ZXR1cm4gdXNlZDsKK30KKworLyoKKyAqIG1pZGlfb3V0OiBUaGUgb25seSBjbGVhcmVyIG9mIHRo ZSBNX1RYRU4gZmxhZy4KKyAqLworaW50CittaWRpX291dChzdHJ1Y3Qgc25kX21pZGkgKiBtLCBN SURJX1RZUEUgKiBidWYsIGludCBzaXplKQoreworCWludCAgICAgICAgICAgICB1c2VkOworCisv KgorICogWFhYOiBsb2NraW5nIGZsdWIKKyAqLworCWlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkK KwkJcmV0dXJuIDA7CisKKwlNSURJX0RFQlVHKDIsIHByaW50ZigibWlkaV9vdXQ6ICVwXG4iLCBt KSk7IAorCW10eF9sb2NrKCZtLT5xbG9jayk7CisJdXNlZCA9IE1JTihzaXplLCBNSURJUV9MRU4o bS0+b3V0cSkpOworCU1JRElfREVCVUcoMywgcHJpbnRmKCJtaWRpX291dDogdXNlZCAlZFxuIiwg dXNlZCkpOworCWlmICh1c2VkKQorCSAgICBNSURJUV9ERVEobS0+b3V0cSwgYnVmLCB1c2VkKTsK KwlpZiAoTUlESVFfRU1QVFkobS0+b3V0cSkpIHsKKwkgICAgbS0+ZmxhZ3MgJj0gfk1fVFhFTjsK KwkgICAgTVBVX0NBTExCQUNLUChtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwl9CisJaWYgKHVz ZWQgJiYgTUlESVFfQVZBSUwobS0+b3V0cSkgPiBtLT5oaXdhdCApIHsKKwkJaWYgKG0tPndjaGFu KSB7CisJCQl3YWtldXAoJm0tPndjaGFuKTsKKwkJCW0tPndjaGFuID0gMDsKKwkJfQorCQlzZWx3 YWtldXAoJm0tPndzZWwpOworCQkgaWYgKG0tPmFzeW5jKSB7CisJCQlQUk9DX0xPQ0sobS0+YXN5 bmMpOworCQkJcHNpZ25hbChtLT5hc3luYywgU0lHSU8pOworCQkJUFJPQ19VTkxPQ0sobS0+YXN5 bmMpOworCQl9CisJfQorCW10eF91bmxvY2soJm0tPnFsb2NrKTsKKwlyZXR1cm4gdXNlZDsKK30K KworCisvKgorICogL2Rldi9ybWlkaSMuIwlkZXZpY2UgYWNjZXNzIGZ1bmN0aW9ucworICovCitp bnQKK21pZGlfb3BlbihzdHJ1Y3QgY2RldiAqaV9kZXYsIGludCBmbGFncywgaW50IG1vZGUsIHN0 cnVjdCB0aHJlYWQgKiB0ZCkKK3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+c2lfZHJ2 MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCisJTUlESV9ERUJVRygxLHByaW50ZigibWlk aW9wZW4gJXAgJXMgJXNcbiIsIHRkLAorCQlmbGFncyAmIEZSRUFEPyJNX1JYIjoiIiwgZmxhZ3Mg JiBGV1JJVEU/Ik1fVFgiOiIiKSk7CisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElP OworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwlyZXR2 YWwgPSAwOworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgaWYgKE1JRElRX1NJWkUobS0+ aW5xKSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBN X1JYKQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJ fQorCWlmIChmbGFncyAmIEZXUklURSkgeworCSAgICBpZiAoTUlESVFfU0laRShtLT5vdXRxKSA9 PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBNX1RYKQor CQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJfQorCW0t PmJ1c3krKzsKKworCW0tPnJjaGFuID0gMDsKKwltLT53Y2hhbiA9IDA7CisJbS0+YXN5bmMgPSAw OworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgbS0+ZmxhZ3MgfD0gTV9SWCB8IE1fUlhF TjsKKwkgICAgLyoKKwkgICAgICogT25seSBjbGVhciB0aGUgaW5xLCB0aGUgb3V0cSBtaWdodCBz dGlsbCBoYXZlIGRhdGEgdG8gZHJhaW4gZnJvbQorCSAgICAgKiBhIHByZXZpb3VzIHNlc3Npb24K KwkgICAgICovCisJICAgIE1JRElRX0NMRUFSKG0tPmlucSk7CisJfTsKKworCWlmIChmbGFncyAm IEZXUklURSkKKwkgICAgbS0+ZmxhZ3MgfD0gTV9UWDsKKworCU1QVV9DQUxMQkFDSyhtLCBtLT5j b29raWUsIG0tPmZsYWdzKTsKKworCU1JRElfREVCVUcoMiwgcHJpbnRmKCJtaWRpX29wZW46IG9w ZW5lZC5cbiIpKTsKKworZXJyOgltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisJbXR4X3VubG9jaygm bS0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50CittaWRpX2Nsb3NlKHN0cnVjdCBj ZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0IHRocmVhZCAqIHRkKQorewor CXN0cnVjdCBzbmRfbWlkaSAqbSA9IGlfZGV2LT5zaV9kcnYxOworCWludCAgICAgICAgICAgICBy ZXR2YWw7CisJaW50CQlvbGRmbGFnczsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpX2Ns b3NlICVwICVzICVzXG4iLCB0ZCwKKwkJZmxhZ3MgJiBGUkVBRD8iTV9SWCI6IiIsIGZsYWdzICYg RldSSVRFPyJNX1RYIjoiIikpOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuICAgICAg ICAgICBFTlhJTzsKKworCW10eF9sb2NrKCZtLT5sb2NrKTsKKwltdHhfbG9jaygmbS0+cWxvY2sp OworCisJaWYgKCAoZmxhZ3MgJiBGUkVBRCAmJiAhKG0tPmZsYWdzICYgTV9SWCkpIHx8IAorCSAg ICAgKGZsYWdzICYgRldSSVRFICYmICEobS0+ZmxhZ3MgJiBNX1RYKSkgKSB7CisJICAgIHJldHZh bCA9IEVOWElPOworCSAgICBnb3RvIGVycjsKKwl9CisKKwltLT5idXN5LS07CisKKwlvbGRmbGFn cyA9IG0tPmZsYWdzOworCisJaWYgKGZsYWdzICYgRlJFQUQpCisJICAgIG0tPmZsYWdzICY9IH4o TV9SWCB8IE1fUlhFTik7CisJaWYgKGZsYWdzICYgRldSSVRFKQorCSAgICBtLT5mbGFncyAmPSB+ TV9UWDsKKworCWlmKCAobS0+ZmxhZ3MgJiAoTV9UWEVOIHwgTV9SWEVOKSkgIT0gKG9sZGZsYWdz ICYgKE1fUlhFTiB8IE1fVFhFTikpICkKKwkJTVBVX0NBTExCQUNLKG0sIG0tPmNvb2tpZSwgbS0+ ZmxhZ3MpOworCisJTUlESV9ERUJVRygxLCBwcmludGYoIm1pZGlfY2xvc2U6IGNsb3NlZCwgYnVz eSA9ICVkLlxuIiwgbS0+YnVzeSkpOworCisJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91 bmxvY2soJm0tPmxvY2spOworCXJldHZhbCA9IDA7CitlcnI6CXJldHVybiByZXR2YWw7Cit9Cisv KgorICogVE9ETzogbWlkaV9yZWFkLCBwZXIgb3NzIHByb2dyYW1tZXIncyBndWlkZSBwZy4gNDIg c2hvdWxkIHJldHVybiBhcyBzb29uIGFzIGRhdGEgaXMgYXZhaWxhYmxlLgorICovCitpbnQKK21p ZGlfcmVhZChzdHJ1Y3QgY2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKiB1aW8sIGludCBpb2ZsYWcp Cit7CisjZGVmaW5lIE1JRElfUlNJWkUgMzIKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+ c2lfZHJ2MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludCAgICAgICAgICAgICB1c2Vk OworCWNoYXIgICAgICAgICAgICBidWZbTUlESV9SU0laRV07CisKKwlNSURJX0RFQlVHKDUsIHBy aW50ZigibWlkaXJlYWQ6IGNvdW50PSVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpdWlvLT51aW9fcmVz aWQpKTsKKworCXJldHZhbCA9IEVJTzsKKworCWlmIChtID09IE5VTEwpCisJICAgIGdvdG8gZXJy MDsKKworCW10eF9sb2NrKCZtLT5sb2NrKTsKKwltdHhfbG9jaygmbS0+cWxvY2spOworCisJaWYg KCEobS0+ZmxhZ3MgJiBNX1JYKSkKKwkgICAgZ290byBlcnIxOworCisJd2hpbGUgKHVpby0+dWlv X3Jlc2lkID4gMCkgeworCSAgICB3aGlsZSAoTUlESVFfRU1QVFkobS0+aW5xKSkgeworCQlyZXR2 YWwgPSBFV09VTERCTE9DSzsKKwkJaWYgKGlvZmxhZyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3Rv IGVycjE7CisJCW10eF91bmxvY2soJm0tPmxvY2spOworCQltLT5yY2hhbiA9IDE7CisJCXJldHZh bCA9IG1zbGVlcCgmbS0+cmNoYW4sICZtLT5xbG9jaywKKwkJCVBDQVRDSCB8IFBEUk9QLCAibWlk aSBSWCIsIDApOworCQkvKgorCQkgKiBXZSBzbGVwdCwgbWF5YmUgdGhpbmdzIGhhdmUgY2hhbmdl ZCBzaW5jZSBsYXN0CisJCSAqIGR5aW5nIGNoZWNrCisJCSAqLworCQlpZiAocmV0dmFsID09IEVJ TlRSKQorCQkgICAgZ290byBlcnIwOworCQlpZiAobSAhPSBpX2Rldi0+c2lfZHJ2MSkKKwkJICAg IHJldHZhbCA9IEVOWElPOworCQkvKiBpZiAocmV0dmFsICYmIHJldHZhbCAhPSBFUkVTVEFSVCkg Ki8KKwkJaWYgKHJldHZhbCkKKwkJICAgIGdvdG8gZXJyMDsKKwkJbXR4X2xvY2soJm0tPmxvY2sp OworCQltdHhfbG9jaygmbS0+cWxvY2spOworCQltLT5yY2hhbiA9IDA7CisJCWlmICghbS0+YnVz eSkKKwkJICAgIGdvdG8gZXJyMTsKKwkgICAgfQorCQlNSURJX0RFQlVHKDYsIHByaW50ZigibWlk aV9yZWFkIHN0YXJ0XG4iKSk7CisJICAgIC8qCisJICAgICAqIEF0IHRoaXMgcG9pbnQsIGl0IGlz IGNlcnRhaW4gdGhhdCBtLT5pbnEgaGFzIGRhdGEKKwkgICAgICovCisKKwkgICAgdXNlZCA9IE1J TihNSURJUV9MRU4obS0+aW5xKSwgdWlvLT51aW9fcmVzaWQpOworCSAgICB1c2VkID0gTUlOKHVz ZWQsIE1JRElfUlNJWkUpOworCisJICAgIE1JRElfREVCVUcoNixwcmludGYoIm1pZGlyZWFkOiB1 aW9tb3ZlIGNjPSVkXG4iLCB1c2VkKSk7CisJICAgIE1JRElRX0RFUShtLT5pbnEsIGJ1ZiwgdXNl ZCk7CisJICAgIHJldHZhbCA9IHVpb21vdmUoYnVmLCB1c2VkLCB1aW8pOworCSAgICBpZiAocmV0 dmFsKQorCQlnb3RvIGVycjE7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBNYWRlIGl0IGhlcmUgdGhl biB0cmFuc2ZlciBpcyBnb29kCisJICovCisJcmV0dmFsID0gMDsKK2VycjE6CW10eF91bmxvY2so Jm0tPnFsb2NrKTsKKwltdHhfdW5sb2NrKCZtLT5sb2NrKTsKK2VycjA6CU1JRElfREVCVUcoNCwg cHJpbnRmKCJtaWRpX3JlYWQ6IHJldCAlZFxuIixyZXR2YWwpKTsKKwlyZXR1cm4gcmV0dmFsOwor fQorCisvKgorICogbWlkaV93cml0ZTogVGhlIG9ubHkgc2V0dGVyIG9mIE1fVFhFTgorICovCisK K2ludAorbWlkaV93cml0ZShzdHJ1Y3QgY2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKiB1aW8sIGlu dCBpb2ZsYWcpCit7CisjZGVmaW5lIE1JRElfV1NJWkUgMzIKKwlzdHJ1Y3Qgc25kX21pZGkgKm0g PSBpX2Rldi0+c2lfZHJ2MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludCAgICAgICAg ICAgICB1c2VkOworCWNoYXIgICAgICAgICAgICBidWZbTUlESV9XU0laRV07CisKKworCU1JRElf REVCVUcoNCwgcHJpbnRmKCJtaWRpX3dyaXRlXG4iKSk7IAorCXJldHZhbCA9IDA7CisJaWYgKG0g PT0gTlVMTCkKKwkgICAgZ290byBlcnIwOworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9s b2NrKCZtLT5xbG9jayk7CisKKwlpZiAoIShtLT5mbGFncyAmIE1fVFgpKQorCSAgICBnb3RvIGVy cjE7CisKKwl3aGlsZSAodWlvLT51aW9fcmVzaWQgPiAwKSB7CisJICAgIHdoaWxlIChNSURJUV9B VkFJTChtLT5vdXRxKSA9PSAwKSB7CisJCXJldHZhbCA9IEVXT1VMREJMT0NLOworCQlpZiAoaW9m bGFnICYgT19OT05CTE9DSykKKwkJICAgIGdvdG8gZXJyMTsKKwkJbXR4X3VubG9jaygmbS0+bG9j ayk7CisJCW0tPndjaGFuID0gMTsKKwkJTUlESV9ERUJVRygzLHByaW50ZigibWlkaV93cml0ZSBt c2xlZXBcbiIpKTsKKwkJcmV0dmFsID0gbXNsZWVwKCZtLT53Y2hhbiwgJm0tPnFsb2NrLAorCQkJ UENBVENIIHwgUERST1AsICJtaWRpIFRYIiwgMCk7CisJCS8qCisJCSAqIFdlIHNsZXB0LCBtYXli ZSB0aGluZ3MgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QKKwkJICogZHlpbmcgY2hlY2sKKwkJICov CisJCWlmIChyZXR2YWwgPT0gRUlOVFIpCisJCSAgICBnb3RvIGVycjA7CisJCWlmIChtICE9IGlf ZGV2LT5zaV9kcnYxKQorCQkgICAgcmV0dmFsID0gRU5YSU87CisJCWlmIChyZXR2YWwpCisJCSAg ICBnb3RvIGVycjA7CisJCW10eF9sb2NrKCZtLT5sb2NrKTsKKwkJbXR4X2xvY2soJm0tPnFsb2Nr KTsKKwkJbS0+d2NoYW4gPSAwOworCQlpZiAoIW0tPmJ1c3kpCisJCSAgICBnb3RvIGVycjE7CisJ ICAgIH0KKworCSAgICAvKgorCSAgICAgKiBXZSBhcmUgY2VydGFpbiB0aGFuIGRhdGEgY2FuIGJl IHBsYWNlZCBvbiB0aGUgcXVldWUKKwkgICAgICovCisKKwkgICAgdXNlZCA9IE1JTihNSURJUV9B VkFJTChtLT5vdXRxKSwgdWlvLT51aW9fcmVzaWQpOworCSAgICB1c2VkID0gTUlOKHVzZWQsIE1J RElfV1NJWkUpOworCQlNSURJX0RFQlVHKDUscHJpbnRmKCJtaWRpb3V0OiByZXNpZCAlZCBsZW4g JWpkIGF2YWlsICVqZFxuIiwgdWlvLT51aW9fcmVzaWQsIChpbnRtYXhfdClNSURJUV9MRU4obS0+ b3V0cSksIChpbnRtYXhfdClNSURJUV9BVkFJTChtLT5vdXRxKSkpOworCisKKwkgICAgTUlESV9E RUJVRyg1LHByaW50ZigibWlkaV93cml0ZTogdWlvbW92ZSBjYz0lZFxuIiwgdXNlZCkpOworCSAg ICByZXR2YWwgPSB1aW9tb3ZlKGJ1ZiwgdXNlZCwgdWlvKTsKKwkgICAgaWYgKHJldHZhbCkKKwkJ Z290byBlcnIxOworCSAgICBNSURJUV9FTlEobS0+b3V0cSwgYnVmLCB1c2VkKTsKKwkgICAgLyoK KwkgICAgICogSW5mb3JtIHRoZSBib3R0b20gaGFsZiB0aGF0IGRhdGEgY2FuIGJlIHdyaXR0ZW4K KwkgICAgICovCisJICAgIGlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkgeworCQltLT5mbGFncyB8 PSBNX1RYRU47CisJCU1QVV9DQUxMQkFDSyhtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwkgICAg fQorCX0KKwkvKgorCSAqIElmIHdlIE1hZGUgaXQgaGVyZSB0aGVuIHRyYW5zZmVyIGlzIGdvb2QK KwkgKi8KKwlyZXR2YWwgPSAwOworZXJyMToJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91 bmxvY2soJm0tPmxvY2spOworZXJyMDoJcmV0dXJuIHJldHZhbDsKK30KKworaW50CittaWRpX2lv Y3RsKHN0cnVjdCBjZGV2ICppX2RldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBhcmcsIGludCBtb2Rl LCBzdHJ1Y3QgdGhyZWFkICogdGQpCit7CisJcmV0dXJuIEVOWElPOworfQorCitpbnQKK21pZGlf cG9sbChzdHJ1Y3QgY2RldiAqaV9kZXYsIGludCBldmVudHMsIHN0cnVjdCB0aHJlYWQgKiB0ZCkK K3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+c2lfZHJ2MTsKKwlpbnQgICAgICAgICAg ICAgcmV2ZW50czsKKworCWlmIChtID09IE5VTEwpCisJICAgIHJldHVybiAwOworCisJcmV2ZW50 cyA9IDA7CisKKwltdHhfbG9jaygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKwor CWlmIChldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJICAgIGlmICghTUlESVFfRU1Q VFkobS0+aW5xKSkKKwkJZXZlbnRzIHw9IGV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsK KworCWlmIChldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0pKQorCSAgICBpZiAoTUlESVFf QVZBSUwobS0+b3V0cSkgPCBtLT5oaXdhdCkKKwkJZXZlbnRzIHw9IGV2ZW50cyAmIChQT0xMT1VU IHwgUE9MTFdSTk9STSk7CisKKwlpZiAocmV2ZW50cyA9PSAwKSB7CisJICAgIGlmIChldmVudHMg JiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJCXNlbHJlY29yZCh0ZCwgJm0tPnJzZWwpOworCisJ ICAgIGlmIChldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0pKQorCQlzZWxyZWNvcmQodGQs ICZtLT53c2VsKTsKKwl9CisJbXR4X3VubG9jaygmbS0+bG9jayk7CisJbXR4X3VubG9jaygmbS0+ cWxvY2spOworCisJcmV0dXJuIChyZXZlbnRzKTsKK30KKworLyoKKyAqIC9kZXYvbWlkaXN0YXQg ZGV2aWNlIGZ1bmN0aW9ucworICogCisgKi8KK3N0YXRpYyBpbnQKK21pZGlzdGF0X29wZW4oc3Ry dWN0IGNkZXYgKmlfZGV2LCBpbnQgZmxhZ3MsIGludCBtb2RlLCBzdHJ1Y3QgdGhyZWFkICogdGQp Cit7CisJaW50ICAgICAgICAgICAgIGVycm9yOworCisKKwlNSURJX0RFQlVHKDEscHJpbnRmKCJt aWRpc3RhdF9vcGVuXG4iKSk7CisJbXR4X2xvY2soJm1pZGlzdGF0X2xvY2spOworCisJaWYgKG1p ZGlzdGF0X2lzb3BlbikgeworCSAgICBtdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwkgICAg cmV0dXJuIEVCVVNZOworCX0KKwltaWRpc3RhdF9pc29wZW4gPSAxOworCisJaWYgKHNidWZfbmV3 KCZtaWRpc3RhdF9zYnVmLCBOVUxMLCA0MDk2LCAwKSA9PSBOVUxMKSB7CisJICAgIGVycm9yID0g RU5YSU87CisJICAgIGdvdG8gb3V0OworCX0KKwltaWRpc3RhdF9idWZwdHIgPSAwOworCWVycm9y ID0gKG1pZGlzdGF0X3ByZXBhcmUoJm1pZGlzdGF0X3NidWYpID4gMCkgPyAwIDogRU5PTUVNOwor CitvdXQ6CWlmIChlcnJvcikKKwkgICAgbWlkaXN0YXRfaXNvcGVuID0gMDsKKwltdHhfdW5sb2Nr KCZtaWRpc3RhdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK21pZGlz dGF0X2Nsb3NlKHN0cnVjdCBjZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0 IHRocmVhZCAqIHRkKQoreworCWludHJtYXNrX3QgICAgICBzOworCisJTUlESV9ERUJVRygxLHBy aW50ZigibWlkaXN0YXRfY2xvc2VcbiIpKTsKKwltdHhfbG9jaygmbWlkaXN0YXRfbG9jayk7CisJ aWYgKCFtaWRpc3RhdF9pc29wZW4pIHsKKwkgICAgbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7 CisJICAgIHJldHVybiBFQkFERjsKKwl9CisJc2J1Zl9kZWxldGUoJm1pZGlzdGF0X3NidWYpOwor CW1pZGlzdGF0X2lzb3BlbiA9IDA7CisKKwltdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwlz cGx4KHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittaWRpc3RhdF9yZWFkKHN0cnVj dCBjZGV2ICppX2Rldiwgc3RydWN0IHVpbyAqIGJ1ZiwgaW50IGZsYWcpCit7CisJaW50ICAgICAg ICAgICAgIGwsIGVycjsKKworCU1JRElfREVCVUcoNCxwcmludGYoIm1pZGlzdGF0X3JlYWRcbiIp KTsKKwltdHhfbG9jaygmbWlkaXN0YXRfbG9jayk7CisJaWYgKCFtaWRpc3RhdF9pc29wZW4pIHsK KwkgICAgbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7CisJICAgIHJldHVybiAgICAgICAgICAg RUJBREY7CisJfQorCWwgPSBtaW4oYnVmLT51aW9fcmVzaWQsIHNidWZfbGVuKCZtaWRpc3RhdF9z YnVmKSAtIG1pZGlzdGF0X2J1ZnB0cik7CisJZXJyID0gMDsKKwlpZiAobCA+IDApCisJICAgIGVy ciA9IHVpb21vdmUoc2J1Zl9kYXRhKCZtaWRpc3RhdF9zYnVmKSArIG1pZGlzdGF0X2J1ZnB0ciwg bCwgYnVmKTsKKwllbHNlCisJICAgIGwgPSAwOworCW1pZGlzdGF0X2J1ZnB0ciArPSBsOworCW10 eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBNb2R1 bGUgbGlicmFyeSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50CittaWRpc3RhdF9wcmVwYXJl KHN0cnVjdCBzYnVmICogcykKK3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm07CisKKwltdHhfYXNzZXJ0 KCZtaWRpc3RhdF9sb2NrLCBNQV9PV05FRCk7CisKKwlzYnVmX3ByaW50ZihzLCAiRnJlZUJTRCBN aWRpIERyaXZlciAobWlkaTIpXG4iKTsKKwlpZiAoVEFJTFFfRU1QVFkoJm1pZGlfZGV2cykpIHsK KwkgICAgc2J1Zl9wcmludGYocywgIk5vIGRldmljZXMgaW5zdGFsbGVkLlxuIik7CisJICAgIHNi dWZfZmluaXNoKHMpOworCSAgICByZXR1cm4gc2J1Zl9sZW4ocyk7CisJfQorCXNidWZfcHJpbnRm KHMsICJJbnN0YWxsZWQgZGV2aWNlczpcbiIpOworCisJVEFJTFFfRk9SRUFDSChtLCAmbWlkaV9k ZXZzLCBsaW5rKSB7CisJICAgIG10eF9sb2NrKCZtLT5sb2NrKTsKKwkgICAgc2J1Zl9wcmludGYo cywgIiVzIFslZC8lZDolc10iLCBtLT5uYW1lLCBtLT51bml0LCBtLT5jaGFubmVsLAorCQkgICAg TVBVX1BST1ZJREVSKG0sIG0tPmNvb2tpZSkpOworCSAgICBzYnVmX3ByaW50ZihzLCAiJXMiLCBN UFVfREVTQ1IobSwgbS0+Y29va2llLCBtaWRpc3RhdF92ZXJib3NlKSk7CisJICAgIHNidWZfcHJp bnRmKHMsICJcbiIpOworCSAgICBtdHhfdW5sb2NrKCZtLT5sb2NrKTsKKwl9CisKKwlzYnVmX2Zp bmlzaChzKTsKKwlyZXR1cm4gc2J1Zl9sZW4ocyk7Cit9CisKKyNpZiBub3RkZWYKKy8qCisgKiBD b252ZXJ0IElPQ1RMIGNvbW1hbmQgdG8gc3RyaW5nIGZvciBkZWJ1Z2dpbmcKKyAqLworCitzdGF0 aWMgY2hhciAgICAqCittaWRpX2NtZG5hbWUoaW50IGNtZCkKK3sKKwlzdGF0aWMgc3RydWN0IHsK KwkgICAgaW50ICAgICAgICAgICAgIGNtZDsKKwkgICAgY2hhciAgICAgICAgICAgKm5hbWU7CisJ fSAgICAgICAgICAgICAgKnRhYiwgY21kdGFiX21pZGlpb2N0bFtdID0geworI2RlZmluZSBBKHgp CXt4LCAjIyB4fQorCSAgICAvKgorCSAgICAgKiBPbmNlIHdlIGhhdmUgc29tZSByZWFsIElPQ1RM cyBkZWZpbmUsIHRoZSBmb2xsb3dpbmcgd2lsbAorCSAgICAgKiBiZSByZWxhdmFudC4KKwkgICAg ICogCisJICAgICAqIEEoU05EQ1RMX01JRElfUFJFVElNRSksIEEoU05EQ1RMX01JRElfTVBVTU9E RSksCisJICAgICAqIEEoU05EQ1RMX01JRElfTVBVQ01EKSwgQShTTkRDVExfU1lOVEhfSU5GTyks CisJICAgICAqIEEoU05EQ1RMX01JRElfSU5GTyksIEEoU05EQ1RMX1NZTlRIX01FTUFWTCksCisJ ICAgICAqIEEoU05EQ1RMX0ZNX0xPQURfSU5TVFIpLCBBKFNORENUTF9GTV80T1BfRU5BQkxFKSwK KwkgICAgICogQShNSU9TUEFTU1RIUlUpLCBBKE1JT0dQQVNTVEhSVSksIEEoQUlPTldSSVRFKSwK KwkgICAgICogQShBSU9HU0laRSksIEEoQUlPU1NJWkUpLCBBKEFJT0dGTVQpLCBBKEFJT1NGTVQp LAorCSAgICAgKiBBKEFJT0dNSVgpLCBBKEFJT1NNSVgpLCBBKEFJT1NUT1ApLCBBKEFJT1NZTkMp LAorCSAgICAgKiBBKEFJT0dDQVApLAorCSAgICAgKi8KKyN1bmRlZiBBCisJICAgIHsKKwkJLTEs ICJ1bmtub3duIgorCSAgICB9LAorCX07CisKKwlmb3IgKHRhYiA9IGNtZHRhYl9taWRpaW9jdGw7 IHRhYi0+Y21kICE9IGNtZCAmJiB0YWItPmNtZCAhPSAtMTsgdGFiKyspCisJICAgIDsKKwlyZXR1 cm4gdGFiLT5uYW1lOworfQorI2VuZGlmIC8qIG5vdGRlZiAqLworCisvKgorICogbWlkaXN5bnRo CisgKi8KKworCitpbnQKK21pZGlzeW50aF9vcGVuKHZvaWQgKm4sIHZvaWQgKmFyZywgaW50IGZs YWdzKQoreworCXN0cnVjdCBzbmRfbWlkaSAqbSA9ICgoc3RydWN0IHN5bnRoX21pZGkgKiApIG4p LT5tOworCWludCAgICAgICAgICAgICByZXR2YWw7CisKKwlNSURJX0RFQlVHKDEscHJpbnRmKCJt aWRpc3ludGhfb3BlbiAlcyAlc1xuIiwKKwkJZmxhZ3MgJiBGUkVBRD8iTV9SWCI6IiIsIGZsYWdz ICYgRldSSVRFPyJNX1RYIjoiIikpOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVO WElPOworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwly ZXR2YWwgPSAwOworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgaWYgKE1JRElRX1NJWkUo bS0+aW5xKSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3Mg JiBNX1JYKQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7 CisJfQorCWlmIChmbGFncyAmIEZXUklURSkgeworCSAgICBpZiAoTUlESVFfU0laRShtLT5vdXRx KSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBNX1RY KQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJfQor CW0tPmJ1c3krKzsKKworCS8qCisJICogVE9ETzogQ29uc2lkZXIgbS0+YXN5bmMgPSAwOworCSAq LworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgbS0+ZmxhZ3MgfD0gTV9SWCB8IE1fUlhF TjsKKwkgICAgLyoKKwkgICAgICogT25seSBjbGVhciB0aGUgaW5xLCB0aGUgb3V0cSBtaWdodCBz dGlsbCBoYXZlIGRhdGEgdG8gZHJhaW4gZnJvbQorCSAgICAgKiBhIHByZXZpb3VzIHNlc3Npb24K KwkgICAgICovCisJICAgIE1JRElRX0NMRUFSKG0tPmlucSk7CisJICAgIG0tPnJjaGFuID0gMDsK Kwl9OworCisJaWYgKGZsYWdzICYgRldSSVRFKSB7CisJICAgIG0tPmZsYWdzIHw9IE1fVFg7CisJ ICAgIG0tPndjaGFuID0gMDsKKwl9CisKKwltLT5zeW50aF9mbGFncyA9IGZsYWdzICYgKEZSRUFE IHwgRldSSVRFKTsKKwkKKwlNUFVfQ0FMTEJBQ0sobSwgbS0+Y29va2llLCBtLT5mbGFncyk7CisK KworZXJyOgltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisJbXR4X3VubG9jaygmbS0+bG9jayk7CisJ TUlESV9ERUJVRygyLCBwcmludGYoIm1pZGlzeW50aF9vcGVuOiByZXR1cm4gJWQuXG4iLCByZXR2 YWwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQKK21pZGlzeW50aF9jbG9zZSh2b2lkICpu KQoreworCXN0cnVjdCBzbmRfbWlkaSAqbSA9ICgoc3RydWN0IHN5bnRoX21pZGkgKiluKS0+bTsK KwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludAkJb2xkZmxhZ3M7CisKKwlNSURJX0RFQlVH KDEsIHByaW50ZigibWlkaXN5bnRoX2Nsb3NlICVzICVzXG4iLAorCQltLT5zeW50aF9mbGFncyAm IEZSRUFEID8gIk1fUlgiIDogIiIsIAorCQltLT5zeW50aF9mbGFncyAmIEZXUklURSA/ICJNX1RY IiA6ICIiKSk7CisKKwlpZiAobSA9PSBOVUxMKQorCSAgICByZXR1cm4gRU5YSU87CisKKwltdHhf bG9jaygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKworCWlmICggKG0tPnN5bnRo X2ZsYWdzICYgRlJFQUQgJiYgIShtLT5mbGFncyAmIE1fUlgpKSB8fCAKKwkgICAgIChtLT5zeW50 aF9mbGFncyAmIEZXUklURSAmJiAhKG0tPmZsYWdzICYgTV9UWCkpICkgeworCSAgICByZXR2YWwg PSBFTlhJTzsKKwkgICAgZ290byBlcnI7CisJfQorCisJbS0+YnVzeS0tOworCisJb2xkZmxhZ3Mg PSBtLT5mbGFnczsKKworCWlmIChtLT5zeW50aF9mbGFncyAmIEZSRUFEKQorCSAgICBtLT5mbGFn cyAmPSB+KE1fUlggfCBNX1JYRU4pOworCWlmIChtLT5zeW50aF9mbGFncyAmIEZXUklURSkKKwkg ICAgbS0+ZmxhZ3MgJj0gfk1fVFg7CisKKwlpZiggKG0tPmZsYWdzICYgKE1fVFhFTiB8IE1fUlhF TikpICE9IChvbGRmbGFncyAmIChNX1JYRU4gfCBNX1RYRU4pKSApCisJCU1QVV9DQUxMQkFDSyht LCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpX2Ns b3NlOiBjbG9zZWQsIGJ1c3kgPSAlZC5cbiIsIG0tPmJ1c3kpKTsKKworCW10eF91bmxvY2soJm0t PnFsb2NrKTsKKwltdHhfdW5sb2NrKCZtLT5sb2NrKTsKKwlyZXR2YWwgPSAwOworZXJyOglyZXR1 cm4gcmV0dmFsOworfQorCisvKgorICogQWx3YXlzIGJsb2NraW5nLgorICovCisKK2ludAorbWlk aXN5bnRoX3dyaXRlcmF3KHZvaWQgKm4sIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlz dHJ1Y3Qgc25kX21pZGkJKm0gPSAoKHN0cnVjdCBzeW50aF9taWRpICopbiktPm07CisJaW50ICAg ICAgICAgICAgIHJldHZhbDsKKwlpbnQgICAgICAgICAgICAgdXNlZDsKKwlpbnQgaTsKKworCU1J RElfREVCVUcoNCwgcHJpbnRmKCJtaWRpc3ludGhfd3JpdGVyYXdcbiIpKTsgCisKKwlyZXR2YWwg PSAwOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOworCisJbXR4X2xvY2so Jm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwlpZiAoIShtLT5mbGFncyAmIE1f VFgpKQorCSAgICBnb3RvIGVycjE7CisKKwlpZiAobWlkaV9kdW1wcmF3KQorCSAgICBwcmludGYo Im1pZGkgZHVtcDogIik7CisKKwl3aGlsZSAobGVuID4gMCkgeworCSAgICB3aGlsZSAoTUlESVFf QVZBSUwobS0+b3V0cSkgPT0gMCkgeworCSAgICBpZiAoIShtLT5mbGFncyAmIE1fVFhFTikpIHsK KwkJbS0+ZmxhZ3MgfD0gTV9UWEVOOworCQlNUFVfQ0FMTEJBQ0sobSwgbS0+Y29va2llLCBtLT5m bGFncyk7CisJICAgIH0KKwkJbXR4X3VubG9jaygmbS0+bG9jayk7CisJCW0tPndjaGFuID0gMTsK KwkJTUlESV9ERUJVRygzLHByaW50ZigibWlkaXN5bnRoX3dyaXRlcmF3IG1zbGVlcFxuIikpOwor CQlyZXR2YWwgPSBtc2xlZXAoJm0tPndjaGFuLCAmbS0+cWxvY2ssCisJCQlQQ0FUQ0ggfCBQRFJP UCwgIm1pZGkgVFgiLCAwKTsKKwkJLyoKKwkJICogV2Ugc2xlcHQsIG1heWJlIHRoaW5ncyBoYXZl IGNoYW5nZWQgc2luY2UgbGFzdAorCQkgKiBkeWluZyBjaGVjaworCQkgKi8KKwkJaWYgKHJldHZh bCA9PSBFSU5UUikKKwkJICAgIGdvdG8gZXJyMDsKKworCQlpZiAocmV0dmFsKQorCQkgICAgZ290 byBlcnIwOworCQltdHhfbG9jaygmbS0+bG9jayk7CisJCW10eF9sb2NrKCZtLT5xbG9jayk7CisJ CW0tPndjaGFuID0gMDsKKwkJaWYgKCFtLT5idXN5KQorCQkgICAgZ290byBlcnIxOworCSAgICB9 CisKKwkgICAgLyoKKwkgICAgICogV2UgYXJlIGNlcnRhaW4gdGhhbiBkYXRhIGNhbiBiZSBwbGFj ZWQgb24gdGhlIHF1ZXVlCisJICAgICAqLworCisJICAgIHVzZWQgPSBNSU4oTUlESVFfQVZBSUwo bS0+b3V0cSksIGxlbik7CisJICAgIHVzZWQgPSBNSU4odXNlZCwgTUlESV9XU0laRSk7CisJICAg IE1JRElfREVCVUcoNSxwcmludGYoIm1pZGlfc3ludGg6IHJlc2lkICVkIGxlbiAlamQgYXZhaWwg JWpkXG4iLCAKKwkJCWxlbiwgKGludG1heF90KU1JRElRX0xFTihtLT5vdXRxKSwgCisJCQkoaW50 bWF4X3QpTUlESVFfQVZBSUwobS0+b3V0cSkpKTsKKworCSAgICBpZiAobWlkaV9kdW1wcmF3KQor CQlmb3IoaT0wO2k8dXNlZDtpKyspIHByaW50ZigiJXggIiwgYnVmW2ldKTsKKworCSAgICBNSURJ UV9FTlEobS0+b3V0cSwgYnVmLCB1c2VkKTsKKwkgICAgbGVuIC09IHVzZWQ7CisKKwkgICAgLyoK KwkgICAgICogSW5mb3JtIHRoZSBib3R0b20gaGFsZiB0aGF0IGRhdGEgY2FuIGJlIHdyaXR0ZW4K KwkgICAgICovCisJICAgIGlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkgeworCQltLT5mbGFncyB8 PSBNX1RYRU47CisJCU1QVV9DQUxMQkFDSyhtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwkgICAg fQorCX0KKwkvKgorCSAqIElmIHdlIE1hZGUgaXQgaGVyZSB0aGVuIHRyYW5zZmVyIGlzIGdvb2QK KwkgKi8KKwlpZiAobWlkaV9kdW1wcmF3KQorCSAgICBwcmludGYoIlxuIik7CisKKwlyZXR2YWwg PSAwOworZXJyMToJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91bmxvY2soJm0tPmxvY2sp OworZXJyMDoJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2tpbGxu b3RlKHZvaWQgKm4sIHVpbnQ4X3QgY2huLCB1aW50OF90IG5vdGUsIHVpbnQ4X3QgdmVsKQorewor CXVfY2hhciBjWzNdOworCisKKwlpZiAobm90ZSA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJu IChFSU5WQUwpOworCisJaWYgKHZlbCA+IDEyNykKKwkgICAgdmVsID0gMTI3OworCisJaWYgKHZl bCA9PSA2NCkgeworCQljWzBdID0gMHg5MCB8IChjaG4gJiAweDBmKTsgLyogTm90ZSBvbi4gKi8K KwkJY1sxXSA9ICh1X2NoYXIpbm90ZTsKKwkJY1syXSA9IDA7CisJfSBlbHNlIHsKKwkJY1swXSA9 IDB4ODAgfCAoY2huICYgMHgwZik7IC8qIE5vdGUgb2ZmLiAqLworCQljWzFdID0gKHVfY2hhcilu b3RlOworCQljWzJdID0gKHVfY2hhcil2ZWw7CisJfQorCisJcmV0dXJuIG1pZGlzeW50aF93cml0 ZXJhdyhuLCBjLCAzKTsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX3NldGluc3RyKHZvaWQg Km4sIHVpbnQ4X3QgY2huLCB1aW50MTZfdCBpbnN0cikKK3sKKwl1X2NoYXIgY1syXTsKKworCWlm IChpbnN0ciA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWNbMF0gPSAw eGMwIHwgKGNobiAmIDB4MGYpOyAvKiBQcm9nYW1tZSBjaGFuZ2UuICovCisJY1sxXSA9IGluc3Ry ICsgbWlkaV9pbnN0cm9mZjsKKworCXJldHVybiBtaWRpc3ludGhfd3JpdGVyYXcobiwgYywgMik7 Cit9CisKK3N0YXRpYyBpbnQKK21pZGlzeW50aF9zdGFydG5vdGUodm9pZCAqbiwgdWludDhfdCBj aG4sIHVpbnQ4X3Qgbm90ZSwgdWludDhfdCB2ZWwpCit7CisJdV9jaGFyIGNbM107CisKKwlpZiAo bm90ZSA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmICh2ZWwgPiAx MjcpCisJICAgIHZlbCA9IDEyNzsKKworCWNbMF0gPSAweDkwIHwgKGNobiAmIDB4MGYpOyAvKiBO b3RlIG9uLiAqLworCWNbMV0gPSAodV9jaGFyKW5vdGU7CisJY1syXSA9ICh1X2NoYXIpdmVsOwor CisJcmV0dXJuIG1pZGlzeW50aF93cml0ZXJhdyhuLCBjLCAzKTsKK30KK3N0YXRpYyBpbnQKK21p ZGlzeW50aF9hbGxvYyh2b2lkICpuLCB1aW50OF90IGNoYW4sIHVpbnQ4X3Qgbm90ZSkKK3sKKwly ZXR1cm4gY2hhbjsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2NvbnRyb2xsZXIodm9pZCAq biwgdWludDhfdCBjaG4sIHVpbnQ4X3QgY3RybG51bSwgdWludDE2X3QgdmFsKQoreworCXVfY2hh ciBjWzNdOworCisJaWYgKGN0cmxudW0gPiAxMjcgfHwgY2huID4gMTUpCisJICAgIHJldHVybiBF SU5WQUw7CisKKwljWzBdID0gMHhiMCB8IChjaG4gJiAweDBmKTsgLyogQ29udHJvbCBNZXNzYWdl LiAqLworCWNbMV0gPSBjdHJsbnVtOworCWNbMl0gPSB2YWw7CisJcmV0dXJuIG1pZGlzeW50aF93 cml0ZXJhdyhuLCBjLCAzKTsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2JlbmRlcih2b2lk ICpuLCB1aW50OF90IGNobiwgdWludDE2X3QgdmFsKQoreworCXVfY2hhciBjWzNdOworCisKKwlp ZiAodmFsID4gMTYzODMgfHwgY2huID4gMTUpCisJCXJldHVybiAgRUlOVkFMOworCisJY1swXSA9 IDB4ZTAgfCAoY2huICYgMHgwZik7IC8qIFBpdGNoIGJlbmQuICovCisJY1sxXSA9ICh1X2NoYXIp dmFsICYgMHg3ZjsKKwljWzJdID0gKHVfY2hhcikodmFsID4+IDcpICYgMHg3ZjsKKworCXJldHVy biBtaWRpc3ludGhfd3JpdGVyYXcobiwgYywgMyk7Cit9CisKKy8qCisgKiBTaW5nbGUgcG9pbnQg b2YgbWlkaSBkZXN0cnVjdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK21pZGlfZGVzdHJveShzdHJ1 Y3Qgc25kX21pZGkgKiBtLCBpbnQgbWlkaXVuaW5pdCkKK3sKKworCW10eF9hc3NlcnQoJm1pZGlz dGF0X2xvY2ssIE1BX09XTkVEKTsKKwltdHhfYXNzZXJ0KCZtLT5sb2NrLCBNQV9PV05FRCk7CisK KwlNSURJX0RFQlVHKDMscHJpbnRmKCJtaWRpX2Rlc3Ryb3lcbiIpKTsKKwltLT5kZXYtPnNpX2Ry djEgPSBOVUxMOworCWRlc3Ryb3lfZGV2KG0tPmRldik7CisJVEFJTFFfUkVNT1ZFKCZtaWRpX2Rl dnMsIG0sIGxpbmspOworCWlmIChtaWRpdW5pbml0KQorCSAgICBNUFVfVU5JTklUKG0sIG0tPmNv b2tpZSk7CisJZnJlZShNSURJUV9CVUYobS0+aW5xKSwgTV9NSURJKTsKKwlmcmVlKE1JRElRX0JV RihtLT5vdXRxKSwgTV9NSURJKTsKKwltdHhfZGVzdHJveSgmbS0+cWxvY2spOworCW10eF9kZXN0 cm95KCZtLT5sb2NrKTsKKwlmcmVlKG0sIE1fTUlESSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisg KiBMb2FkIGFuZCB1bmxvYWQgZnVuY3Rpb25zLCBjcmVhdGVzIHRoZSAvZGV2L21pZGlzdGF0IGRl dmljZQorICovCisKK3N0YXRpYyBpbnQKK21pZGlfbG9hZCgpCit7CisJbXR4X2luaXQoJm1pZGlz dGF0X2xvY2ssICJtaWRpc3RhdCBsb2NrIiwgMCwgMCk7CisJVEFJTFFfSU5JVCgmbWlkaV9kZXZz KTsJLyogSW5pdGlhbGl6ZSB0aGUgcXVldWUuICovCisKKwltaWRpc3RhdF9kZXYgPSBtYWtlX2Rl digmbWlkaXN0YXRfY2RldnN3LAorCQkgICAgTUlESU1LTUlOT1IoMCwgTUlESV9ERVZfTUlESUNU TCwgMCksCisJCSAgICBVSURfUk9PVCwgR0lEX1dIRUVMLCAwNjY2LCAibWlkaXN0YXQiKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittaWRpX3VubG9hZCgpCit7CisJc3RydWN0IHNu ZF9taWRpICptOworCWludCAgICAgICAgICAgICByZXR2YWw7CisKKwlNSURJX0RFQlVHKDEscHJp bnRmKCJtaWRpX3VubG9hZCgpXG4iKSk7CisJcmV0dmFsID0gRUJVU1k7CisJbXR4X2xvY2soJm1p ZGlzdGF0X2xvY2spOworCWlmIChtaWRpc3RhdF9pc29wZW4pCisJICAgIGdvdG8gZXhpdDA7CisK KwlUQUlMUV9GT1JFQUNIKG0sICZtaWRpX2RldnMsIGxpbmspIHsKKwkgICAgbXR4X2xvY2soJm0t PmxvY2spOworCSAgICBpZiAobS0+YnVzeSkKKwkJcmV0dmFsID0gRUJVU1k7CisJICAgIGVsc2UK KwkJcmV0dmFsID0gbWlkaV9kZXN0cm95KG0sIDEpOworCSAgICBpZiAocmV0dmFsKQorCQlnb3Rv IGV4aXQxOworCX0KKworCWRlc3Ryb3lfZGV2KG1pZGlzdGF0X2Rldik7CisJLyoKKwkgKiBNYWRl IGl0IGhlcmUgdGhlbiB1bmxvYWQgaXMgY29tcGxldGUKKwkgKi8KKwltdHhfZGVzdHJveSgmbWlk aXN0YXRfbG9jayk7CisJcmV0dXJuIDA7CisKK2V4aXQxOgorCW10eF91bmxvY2soJm0tPmxvY2sp OworZXhpdDA6CisJbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7CisJaWYocmV0dmFsKSBNSURJ X0RFQlVHKDIscHJpbnRmKCJtaWRpX3VubG9hZDogZmFpbGVkXG4iKSk7CisJcmV0dXJuIHJldHZh bDsKK30KKworZXh0ZXJuIGludCBzZXFfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBpbnQgdHlwZSwg dm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbnQKK21pZGlfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBp bnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCisJcmV0 dmFsID0gMDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTU9EX0xPQUQ6CisJICAgIHJldHZh bCA9IG1pZGlfbG9hZCgpOworCSAgICBpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHNlcV9t b2RldmVudChtb2QsIHR5cGUsIGRhdGEpOworCSAgICBicmVhazsKKworCWNhc2UgTU9EX1VOTE9B RDoKKwkgICAgcmV0dmFsID0gbWlkaV91bmxvYWQoKTsKKwkgICAgaWYgKHJldHZhbCA9PSAwKQor CQlyZXR2YWwgPSBzZXFfbW9kZXZlbnQobW9kLCB0eXBlLCBkYXRhKTsKKwkgICAgYnJlYWs7CisK KwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitrb2Jq X3QKK21pZGltYXBwZXJfYWRkc2VxKHZvaWQgKmFyZzEsIGludCAqdW5pdCwgdm9pZCAqKmNvb2tp ZSkKK3sKKwl1bml0ID0gMDsKKworCXJldHVybiAoa29ial90KSBhcmcxOworfQorCitpbnQKK21p ZGltYXBwZXJfb3Blbih2b2lkICphcmcxLCB2b2lkICoqY29va2llKQoreworCWludCByZXR2YWwg PSAwOworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKworICAgICAgICBtdHhfbG9jaygmbWlkaXN0YXRf bG9jayk7CisKKyAgICAgICAgVEFJTFFfRk9SRUFDSChtLCAmbWlkaV9kZXZzLCBsaW5rKSB7CisJ ICAgIHJldHZhbCsrOworCSAgICAgICAgfQorCisgICAgICAgIG10eF91bmxvY2soJm1pZGlzdGF0 X2xvY2spOworICAgICAgICByZXR1cm4gcmV0dmFsOworfQorCitpbnQKK21pZGltYXBwZXJfY2xv c2Uodm9pZCAqYXJnMSwgdm9pZCAqY29va2llKQoreworCXJldHVybiAwOworfQorCitrb2JqX3QK K21pZGltYXBwZXJfZmV0Y2hfc3ludGgodm9pZCAqYXJnLCB2b2lkICpjb29raWUsIGludCB1bml0 KQoreworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKwlpbnQgcmV0dmFsID0gMDsKKworCW10eF9sb2Nr KCZtaWRpc3RhdF9sb2NrKTsKKworCVRBSUxRX0ZPUkVBQ0gobSwgJm1pZGlfZGV2cywgbGluaykg eworCSAgIGlmICh1bml0ID09IHJldHZhbCkgeworCSAgICAgICBtdHhfdW5sb2NrKCZtaWRpc3Rh dF9sb2NrKTsKKwkgICAgICAgcmV0dXJuIChrb2JqX3QpbS0+c3ludGg7CisJICAgfQorCSAgIHJl dHZhbCsrOworCX0KKworCW10eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCXJldHVybiBOVUxM OworfQorCitERVZfTU9EVUxFKG1pZGksIG1pZGlfbW9kZXZlbnQsIE5VTEwpOworTU9EVUxFX1ZF UlNJT04obWlkaSwgMSk7CkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaS5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9taWRpLmgKZGlmZiAtTiBzeXMvZGV2L3Nv dW5kL21pZGkvbWlkaS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor Kysgc3lzL2Rldi9zb3VuZC9taWRpL21pZGkuaAk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBA IC0wLDAgKzEsNTQgQEAKKy8qCisgKiAoYykgMjAwMyBNYXRoZXcgS2FubmVyCisgKiAKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAyLgor ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE1JRElf SAorI2RlZmluZSBNSURJX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5 cy9tYWxsb2MuaD4KKworTUFMTE9DX0RFQ0xBUkUoTV9NSURJKTsKKworI2RlZmluZSBNX1JYCQkw eDAxCisjZGVmaW5lIE1fVFgJCTB4MDIKKyNkZWZpbmUgTV9SWEVOCQkweDA0CisjZGVmaW5lIE1f VFhFTgkJMHgwOAorCisjZGVmaW5lIE1JRElfVFlQRSB1bnNpZ25lZCBjaGFyCisKK3N0cnVjdCBz bmRfbWlkaTsKKworc3RydWN0IHNuZF9taWRpICptaWRpX2luaXQoa29ial9jbGFzc190IF9tcHVf Y2xzLCBpbnQgX3VuaXQsIGludCBfY2hhbm5lbCwgCisJCQl2b2lkICpjb29raWUpOworaW50IG1p ZGlfdW5pbml0KHN0cnVjdCBzbmRfbWlkaSAqIF9tKTsKK2ludCBtaWRpX291dChzdHJ1Y3Qgc25k X21pZGkgKiBfbSwgTUlESV9UWVBFICogX2J1ZiwgaW50IF9zaXplKTsKK2ludCBtaWRpX2luKHN0 cnVjdCBzbmRfbWlkaSAqIF9tLCBNSURJX1RZUEUgKiBfYnVmLCBpbnQgX3NpemUpOworCitrb2Jq X3QgbWlkaW1hcHBlcl9hZGRzZXEodm9pZCAqYXJnMSwgaW50ICp1bml0LCB2b2lkICoqY29va2ll KTsKK2ludCBtaWRpbWFwcGVyX29wZW4odm9pZCAqYXJnMSwgdm9pZCAqKmNvb2tpZSk7CitpbnQg bWlkaW1hcHBlcl9jbG9zZSh2b2lkICphcmcxLCB2b2lkICpjb29raWUpOwora29ial90IG1pZGlt YXBwZXJfZmV0Y2hfc3ludGgodm9pZCAqYXJnLCB2b2lkICpjb29raWUsIGludCB1bml0KTsKKwor I2VuZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaXEuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaXEuaApkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlk aS9taWRpcS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lz L2Rldi9zb3VuZC9taWRpL21pZGlxLmgJNSBNYXIgMjAwNSAxNzowNjo0MSAtMDAwMApAQCAtMCww ICsxLDEwMyBAQAorCisvKgorICogKGMpIDIwMDMgTWF0aGV3IEthbm5lcgorICogCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KKyAq IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBNSURJUV9I CisKKyNkZWZpbmUgTUlESVFfTU9WRShhLGIsYykgYmNvcHkoYixhLGMpCisKKyNkZWZpbmUgTUlE SVFfSEVBRChuYW1lLCB0eXBlKSAgICAgICAgICBcCitzdHJ1Y3QgbmFtZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgaCwgdCwgczsgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgdHlwZSAqIGI7ICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAKKworI2Rl ZmluZSBNSURJUV9JTklUKGhlYWQsIGJ1Ziwgc2l6ZSkgZG8geyAgICAgICAgICAgICAgICBcCisg ICAgICAgIChoZWFkKS5oPShoZWFkKS50PTA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIChoZWFkKS5zPXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAoaGVhZCkuYj1idWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK K30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfRU1QVFkoaGVhZCkgICAgICAgKChoZWFkKS5o ID09IChoZWFkKS50ICkKKworI2RlZmluZSBNSURJUV9MRU5CQVNFKGhlYWQpICAgICAgICAgKCho ZWFkKS5oIC0gKGhlYWQpLnQgPCAwID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChoZWFkKS5oIC0gKGhlYWQpLnQgKyAoaGVhZCkucyA6IFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVhZCkuaCAtIChoZWFkKS50KQorCisjZGVm aW5lIE1JRElRX0ZVTEwoaGVhZCkgICAgICAgICgoaGVhZCkuaCA9PSAtMSkKKyNkZWZpbmUgTUlE SVFfQVZBSUwoaGVhZCkgICAgICAgKE1JRElRX0ZVTEwoaGVhZCkgPyAwIDogKGhlYWQpLnMgLSBN SURJUV9MRU5CQVNFKGhlYWQpKQorI2RlZmluZSBNSURJUV9MRU4oaGVhZCkJCSgoaGVhZCkucyAt IE1JRElRX0FWQUlMKGhlYWQpKQorI2RlZmluZSBNSURJUV9ERUJVRyAwCisvKgorICogTm8gcHJv dGVjdGlvbiBhZ2FpbnN0IG92ZXJmbG93LCB1bmRlcmZsb3cKKyAqLworI2RlZmluZSBNSURJUV9F TlEoaGVhZCwgYnVmLCBzaXplKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmKE1JRElRX0RFQlVHKVwKKyAg ICAgICAgICAgICAgICAJcHJpbnRmKCIjMSAlcCAlcCBieXRlcyBjb3BpZWQgJWpkIHRyYW4gcmVx IHMgJWQgaCAlZCB0ICVkXG4iLCAgICAgICAgICAgIFwKKwkJCSAgICAgICAmKGhlYWQpLmJbKGhl YWQpLmhdLCAoYnVmKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor CQkJICAgICAgIChpbnRtYXhfdCkoc2l6ZW9mKCooaGVhZCkuYikgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgTUlOKCAoc2l6ZSksIChoZWFkKS5zIC0gKGhl YWQpLmgpICksICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICAgICAoc2l6ZSksIChoZWFkKS5o LCAoaGVhZCkudCk7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIE1JRElRX01PVkUo JihoZWFkKS5iWyhoZWFkKS5oXSwgKGJ1ZiksIHNpemVvZigqKGhlYWQpLmIpICogTUlOKChzaXpl KSwgKGhlYWQpLnMgLSAoaGVhZCkuaCkpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgIGlmKCAoaGVhZCkucyAtIChoZWFkKS5oIDwgKHNpemUpICkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlpZihNSURJUV9E RUJVRykgXAorICAgICAgICAgICAgICAgICAgICAgICAgCXByaW50ZigiIzIgJXAgJXAgYnl0ZXMg Y29waWVkICVqZFxuIiwgIChoZWFkKS5iLCAoYnVmKSArIChoZWFkKS5zIC0gKGhlYWQpLmgsIChp bnRtYXhfdClzaXplb2YoKihoZWFkKS5iKSAqICgoc2l6ZSkgLSAoaGVhZCkucyArIChoZWFkKS5o KSApOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1JRElRX01PVkUoKGhlYWQpLmIs IChidWYpICsgKGhlYWQpLnMgLSAoaGVhZCkuaCwgc2l6ZW9mKCooaGVhZCkuYikgKiAoKHNpemUp IC0gKGhlYWQpLnMgKyAoaGVhZCkuaCkgKTsgICAgICBcCisJCX0gXAorICAgICAgICAgICAgICAg IChoZWFkKS5oKz0oc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoaGVh ZCkuaCU9KGhlYWQpLnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZihNSURJUV9FTVBUWShoZWFkKSkgKGhl YWQpLmg9LTE7IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAgICAgIAlwcmludGYo IiNFIGggJWQgdCAlZFxuIiwgKGhlYWQpLmgsIChoZWFkKS50KTsgICAgICAgICAgICAgICAgICAg ICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfREVRX0koaGVhZCwgYnVmLCBzaXpl LCBtb3ZlLCB1cGRhdGUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYoTUlESVFfRlVMTChoZWFkKSkgKGhl YWQpLmg9KGhlYWQpLnQ7IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAgICAgIAlw cmludGYoIiMxICVwICVwIGJ5dGVzIGNvcGllZCAlamQgdHJhbiByZXEgcyAlZCBoICVkIHQgJWRc biIsICYoaGVhZCkuYlsoaGVhZCkudF0sIChidWYpLCAoaW50bWF4X3Qpc2l6ZW9mKCooaGVhZCku YikgKiBNSU4oKHNpemUpLCAoaGVhZCkucyAtIChoZWFkKS50KSwgKHNpemUpLCAoaGVhZCkuaCwg KGhlYWQpLnQpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICht b3ZlKSBNSURJUV9NT1ZFKChidWYpLCAmKGhlYWQpLmJbKGhlYWQpLnRdLCBzaXplb2YoKihoZWFk KS5iKSAqIE1JTigoc2l6ZSksIChoZWFkKS5zIC0gKGhlYWQpLnQpKTsgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiggKGhlYWQpLnMgLSAoaGVhZCkudCA8IChzaXpl KSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCQkJaWYoTUlESVFfREVCVUcpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIAlwcmludGYo IiMyICVwICVwIGJ5dGVzIGNvcGllZCAlamRcbiIsICAoaGVhZCkuYiwgKGJ1ZikgKyAoaGVhZCku cyAtIChoZWFkKS50LCAoaW50bWF4X3Qpc2l6ZW9mKCooaGVhZCkuYikgKiAoKHNpemUpIC0gKGhl YWQpLnMgKyAoaGVhZCkudCkgKTsgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bW92ZSkgTUlESVFfTU9WRSgoYnVmKSArIChoZWFkKS5zIC0gKGhlYWQpLnQsIChoZWFkKS5iLCBz aXplb2YoKihoZWFkKS5iKSAqICgoc2l6ZSkgLSAoaGVhZCkucyArIChoZWFkKS50KSApOyAgICAg IFwKKwkJfSBcCisJCWlmICh1cGRhdGUpIHsgXAorICAgICAgICAgICAgICAgIChoZWFkKS50Kz0o c2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoaGVhZCkudCU9KGhlYWQp LnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorCQl9IGVsc2UgeyBcCisJCSAgaWYgKE1JRElRX0VNUFRZKGhlYWQp KSAoaGVhZCkuaD0tMTsgXAorCQl9IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAg ICAgIAlwcmludGYoIiNFIGggJWQgdCAlZFxuIiwgKGhlYWQpLmgsIChoZWFkKS50KTsgICAgICAg ICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfU0laRShoZWFk KSAoKGhlYWQpLnMpCisjZGVmaW5lIE1JRElRX0NMRUFSKGhlYWQpICgoaGVhZCkuaCA9IChoZWFk KS50ID0gMCkKKyNkZWZpbmUgTUlESVFfQlVGKGhlYWQpICgoaGVhZCkuYikKKyNkZWZpbmUgTUlE SVFfREVRKGhlYWQsIGJ1Ziwgc2l6ZSkgTUlESVFfREVRX0koaGVhZCwgYnVmLCBzaXplLCAxLCAx KQorI2RlZmluZSBNSURJUV9QRUVLKGhlYWQsIGJ1Ziwgc2l6ZSkgTUlESVFfREVRX0koaGVhZCwg YnVmLCBzaXplLCAxLCAwKQorI2RlZmluZSBNSURJUV9QT1AoaGVhZCwgc2l6ZSkgTUlESVFfREVR X0koaGVhZCwgJmhlYWQsIHNpemUsIDAsIDEpCisKKyNlbmRpZgpJbmRleDogc3lzL2Rldi9zb3Vu ZC9taWRpL21wdTQwMS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9t cHU0MDEuYwpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuYwotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEu Ywk1IE1hciAyMDA1IDE2OjU1OjU4IC0wMDAwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogKGMp IDIwMDMgTWF0aGV3IEthbm5lcgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK KyAqIG1ldDogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl IGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB TUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgor I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUg PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Rt Lmg+CisjaW5jbHVkZSA8c3lzL2tvYmouaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5j bHVkZSA8c3lzL2J1cy5oPiAvKiB0byBnZXQgZHJpdmVyX2ludHJfdCAqLworCisjaW5jbHVkZSA8 ZGV2L3NvdW5kL21pZGkvbXB1NDAxLmg+CisjaW5jbHVkZSA8ZGV2L3NvdW5kL21pZGkvbWlkaS5o PgorCisjaW5jbHVkZSAibXB1X2lmLmgiCisjaW5jbHVkZSAibXB1Zm9pX2lmLmgiCisKKyNkZWZp bmUgTVBVX0RBVEFQT1JUICAgMAorI2RlZmluZSBNUFVfQ01EUE9SVCAgICAxCisjZGVmaW5lIE1Q VV9TVEFUUE9SVCAgIDEKKyNkZWZpbmUgTVBVX1JFU0VUICAgICAgMHhmZgorI2RlZmluZSBNUFVf VUFSVCAgICAgICAweDNmCisjZGVmaW5lIE1QVV9BQ0sgICAgICAgIDB4ZmUKKyNkZWZpbmUgTVBV X1NUQVRNQVNLICAgMHhjMAorI2RlZmluZSBNUFVfT1VUUFVUQlVTWSAweDQwCisjZGVmaW5lIE1Q VV9JTlBVVEJVU1kgIDB4ODAKKyNkZWZpbmUgTVBVX1RSWURBVEEgNTAKKyNkZWZpbmUgTVBVX0RF TEFZICAgMjUwMAorCisjZGVmaW5lIENNRChtLGQpCU1QVUZPSV9XUklURShtLCBtLT5jb29raWUs IE1QVV9DTURQT1JULGQpCisjZGVmaW5lIFNUQVRVUyhtKQlNUFVGT0lfUkVBRChtLCBtLT5jb29r aWUsIE1QVV9TVEFUUE9SVCkKKyNkZWZpbmUgUkVBRChtKQkJTVBVRk9JX1JFQUQobSwgbS0+Y29v a2llLCBNUFVfREFUQVBPUlQpCisjZGVmaW5lIFdSSVRFKG0sZCkJTVBVRk9JX1dSSVRFKG0sIG0t PmNvb2tpZSwgTVBVX0RBVEFQT1JULGQpCisKK3N0cnVjdCBtcHU0MDEgeworCUtPQkpfRklFTERT OworCXN0cnVjdCBzbmRfbWlkaSAqbWlkOworCWludCBmbGFnczsKKwlkcml2ZXJfaW50cl90ICpz aTsKKwl2b2lkICpjb29raWU7CisJc3RydWN0IGNhbGxvdXQgdGltZXI7Cit9OworCitzdGF0aWMg dm9pZCBtcHU0MDFfdGltZW91dCh2b2lkICptKSA7CitzdGF0aWMgbXB1NDAxX2ludHJfdCBtcHU0 MDFfaW50cjsKKworc3RhdGljIGludCBtcHU0MDFfbWluaXQoa29ial90IG9iaiwgc3RydWN0IG1w dTQwMSAqbSk7CitzdGF0aWMgaW50IG1wdTQwMV9tdW5pbml0KGtvYmpfdCBvYmosIHN0cnVjdCBt cHU0MDEgKm0pOworc3RhdGljIGludCBtcHU0MDFfbWlucXNpemUoa29ial90IG9iaiwgc3RydWN0 IG1wdTQwMSAqbSk7CitzdGF0aWMgaW50IG1wdTQwMV9tb3V0cXNpemUoa29ial90IG9iaiwgc3Ry dWN0IG1wdTQwMSAqbSk7CitzdGF0aWMgdm9pZCBtcHU0MDFfbWNhbGxiYWNrKGtvYmpfdCBvYmos IHN0cnVjdCBtcHU0MDEgKm0sIGludCBmbGFncyk7CitzdGF0aWMgdm9pZCBtcHU0MDFfbWNhbGxi YWNrcChrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptLCBpbnQgZmxhZ3MpOworc3RhdGljIGNv bnN0IGNoYXIgKm1wdTQwMV9tZGVzY3Ioa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSwgaW50 IHZlcmJvc2l0eSk7CitzdGF0aWMgY29uc3QgY2hhciAqbXB1NDAxX21wcm92aWRlcihrb2JqX3Qg b2JqLCBzdHJ1Y3QgbXB1NDAxICptKTsKKworc3RhdGljIGtvYmpfbWV0aG9kX3QgbXB1NDAxX21l dGhvZHNbXSA9IHsKKwlLT0JKTUVUSE9EKG1wdV9pbml0LG1wdTQwMV9taW5pdCksCisJS09CSk1F VEhPRChtcHVfdW5pbml0LG1wdTQwMV9tdW5pbml0KSwKKwlLT0JKTUVUSE9EKG1wdV9pbnFzaXpl LG1wdTQwMV9taW5xc2l6ZSksCisJS09CSk1FVEhPRChtcHVfb3V0cXNpemUsbXB1NDAxX21vdXRx c2l6ZSksCisJS09CSk1FVEhPRChtcHVfY2FsbGJhY2ssbXB1NDAxX21jYWxsYmFjayksCisJS09C Sk1FVEhPRChtcHVfY2FsbGJhY2twLG1wdTQwMV9tY2FsbGJhY2twKSwKKwlLT0JKTUVUSE9EKG1w dV9kZXNjcixtcHU0MDFfbWRlc2NyKSwKKwlLT0JKTUVUSE9EKG1wdV9wcm92aWRlcixtcHU0MDFf bXByb3ZpZGVyKSwKKyAgICAgICAgeyAwLCAwIH0KK307CisKK0RFRklORV9DTEFTUyhtcHU0MDEs IG1wdTQwMV9tZXRob2RzLCAwKTsKKwordm9pZAorbXB1NDAxX3RpbWVvdXQodm9pZCAqYSkgCit7 CXN0cnVjdCBtcHU0MDEgKm09KHN0cnVjdCBtcHU0MDEgKilhOworCisJaWYgKG0tPnNpKQorCQko bS0+c2kpKG0tPmNvb2tpZSk7CisKK30KK3N0YXRpYyBpbnQKK21wdTQwMV9pbnRyKHN0cnVjdCBt cHU0MDEgKm0pCit7CisjZGVmaW5lIE1QVV9JTlRSX0JVRgkxNgorCU1JRElfVFlQRSBiW01QVV9J TlRSX0JVRl07CisJaW50IGk7CisJaW50IHM7CisvKgorCXByaW50ZigibXB1NDAxX2ludHJcbiIp OworKi8KKyNkZWZpbmUgUlhSRFkobSkgKCAoU1RBVFVTKG0pICYgTVBVX0lOUFVUQlVTWSkgPT0g MCkKKyNkZWZpbmUgVFhSRFkobSkgKCAoU1RBVFVTKG0pICYgTVBVX09VVFBVVEJVU1kpID09IDAp CisjaWYgMAorI2RlZmluZSBEKHgsbCkgcHJpbnRmKCJtcHU0MDFfaW50ciAlZCAleCAlcyAlc1xu IixsLCB4LCB4Jk1QVV9JTlBVVEJVU1k/IlJYIjoiIiwgeCZNUFVfT1VUUFVUQlVTWT8iVFgiOiIi KQorI2Vsc2UKKyNkZWZpbmUgRCh4LGwpCisjZW5kaWYKKwlpPTA7CisJcyA9IFNUQVRVUyhtKTsK KwlEKHMsMSk7CisJd2hpbGUgKCAocyZNUFVfSU5QVVRCVVNZKSA9PSAwICYmIGk8TVBVX0lOVFJf QlVGKSB7CisJCWJbaV09UkVBRChtKTsKKy8qCisJCXByaW50ZigibXB1NDAxX2ludHIgaW4gaSAl ZCBkICVkXG4iLCBpLCBiW2ldKTsKKyovCisJCWkrKzsKKwlzID0gU1RBVFVTKG0pOworCX0KKwlp ZiAoaSkgbWlkaV9pbihtLT5taWQsIGIsIGkpOworCWk9MDsKKwl3aGlsZSAoICEocyZNUFVfT1VU UFVUQlVTWSkgJiYgaTxNUFVfSU5UUl9CVUYpIHsKKwkJaWYobWlkaV9vdXQobS0+bWlkLCBiLCAx KSkgeyAKKy8qCisJCQlwcmludGYoIm1wdTQwMV9pbnRyIG91dCBpICVkIGQgJWRcbiIsIGksIGJb MF0pOworKi8KKwkKKwkJCVdSSVRFKG0sICpiKTsKKwkJfQorCQllbHNlIHsKKy8qCisJCQlwcmlu dGYoIm1wdTQwMV9pbnRyIHdyaXRlOiBubyBvdXRwdXRcbiIpOworKi8KKwkJCXJldHVybiAwOwor CQl9CisJCWkrKzsKKwkvKiBERUxBWSgxMDApOyAqLworCXMgPSBTVEFUVVMobSk7CisJfQorCisJ aWYgKChtLT5mbGFncyAmIE1fVFhFTikgJiYgKG0tPnNpKSApIHsKKwkgICAgY2FsbG91dF9yZXNl dCgmbS0+dGltZXIsIDEsIG1wdTQwMV90aW1lb3V0LCBtKTsKKwl9CisKKwlyZXR1cm4gKG0tPmZs YWdzICYgTV9UWEVOKSA9PSBNX1RYRU47Cit9CisKK3N0cnVjdCBtcHU0MDEgKgorbXB1NDAxX2lu aXQoa29ial9jbGFzc190IGNscywgdm9pZCAqY29va2llLGRyaXZlcl9pbnRyX3Qgc29mdGludHIs IG1wdTQwMV9pbnRyX3QgKipjYikKK3sKKwlzdHJ1Y3QgbXB1NDAxICptOworCisJKmNiID0gTlVM TDsKKwltID0gbWFsbG9jKHNpemVvZigqbSksIE1fTUlESSwgTV9OT1dBSVQgfCBNX1pFUk8pOwor CisJaWYoIW0pCisJCXJldHVybiBOVUxMOworCisJa29ial9pbml0KChrb2JqX3QpbSwgY2xzKTsK KworCWNhbGxvdXRfaW5pdCgmbS0+dGltZXIsIDEpOworCisJbS0+c2kgPSBzb2Z0aW50cjsKKwlt LT5jb29raWUgPSBjb29raWU7CisJbS0+ZmxhZ3MgPSAwOworCisJbS0+bWlkID0gbWlkaV9pbml0 KCZtcHU0MDFfY2xhc3MsMCwwLG0pOworCWlmICghbS0+bWlkKQorCQlnb3RvIGVycjsKKwkqY2Ig PSBtcHU0MDFfaW50cjsKKwlyZXR1cm4gbTsKK2VycjoKKwlwcmludGYoIm1wdTQwMV9pbml0IGVy cm9yXG4iKTsKKwlmcmVlKG0sIE1fTUlESSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludAorbXB1 NDAxX3VuaW5pdChzdHJ1Y3QgbXB1NDAxICptKQoreworCWludCByZXR2YWw7CisKKwlDTUQobSwg TVBVX1JFU0VUKTsKKwlyZXR2YWwgPSBtaWRpX3VuaW5pdChtLT5taWQpOworCWlmIChyZXR2YWwp CisJCXJldHVybiByZXR2YWw7CisJZnJlZShtLCBNX01JREkpOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50CittcHU0MDFfbWluaXQoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sK KwlpbnQgaTsKKworCUNNRChtLCBNUFVfUkVTRVQpOworCUNNRChtLCBNUFVfVUFSVCk7CisJcmV0 dXJuIDA7CisJaT0wOworCXdoaWxlKCsraTwyMDAwKSB7CisJCWlmKFJYUkRZKG0pKQorCQkJaWYo UkVBRChtKSA9PSBNUFVfQUNLKQorCQkJCWJyZWFrOworCX0KKworCWlmKCBpIDwgMjAwMCApIHsK KwkJQ01EKG0sIE1QVV9VQVJUKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ZigibXB1NDAxX21p bml0IGZhaWxlZCBhY3RpdmUgc2Vuc2luZ1xuIik7CisJcmV0dXJuIDE7Cit9CisKKworaW50Citt cHU0MDFfbXVuaW5pdChrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptKQoreworCisJcmV0dXJu IE1QVUZPSV9VTklOSVQobSwgbS0+Y29va2llKTsKK30KKworaW50CittcHU0MDFfbWlucXNpemUo a29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sKKwlyZXR1cm4gMTI4OworfQorCitpbnQK K21wdTQwMV9tb3V0cXNpemUoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sKKwlyZXR1 cm4gMTI4OworfQorCitzdGF0aWMgdm9pZAorbXB1NDAxX21jYWxsYmFjayhrb2JqX3Qgb2JqLCBz dHJ1Y3QgbXB1NDAxICptLCBpbnQgZmxhZ3MpCit7CisjaWYgMAorCXByaW50ZigibXB1NDAxX2Nh bGxiYWNrICVzICVzICVzICVzXG4iLCAKKwkJZmxhZ3MgJiBNX1JYID8gIk1fUlgiIDogIiIsCisJ CWZsYWdzICYgTV9UWCA/ICJNX1RYIiA6ICIiLAorCQlmbGFncyAmIE1fUlhFTiA/ICJNX1JYRU4i IDogIiIsCisJCWZsYWdzICYgTV9UWEVOID8gIk1fVFhFTiIgOiAiIiApOworI2VuZGlmCisJaWYg KGZsYWdzICYgTV9UWEVOICYmIG0tPnNpKSB7CisJCWNhbGxvdXRfcmVzZXQoJm0tPnRpbWVyLCAx LCBtcHU0MDFfdGltZW91dCwgbSk7CisJfQorCisJbS0+ZmxhZ3MgPSBmbGFnczsKK30KKworc3Rh dGljIHZvaWQKK21wdTQwMV9tY2FsbGJhY2twKGtvYmpfdCBvYmosIHN0cnVjdCBtcHU0MDEgKm0s IGludCBmbGFncykKK3sKKy8qCXByaW50ZigibXB1NDAxX2NhbGxiYWNrcFxuIik7ICovCisJbXB1 NDAxX21jYWxsYmFjayhvYmosIG0sIGZsYWdzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor bXB1NDAxX21kZXNjcihrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptLCBpbnQgdmVyYm9zaXR5 KQoreworCisJcmV0dXJuICJkZXNjciBtcHU0MDEiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAq CittcHU0MDFfbXByb3ZpZGVyKGtvYmpfdCBvYmosIHN0cnVjdCBtcHU0MDEgKm0pCit7CisJcmV0 dXJuICJwcm92aWRlciBtcHU0MDEiOworfQpJbmRleDogc3lzL2Rldi9zb3VuZC9taWRpL21wdTQw MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaApkaWZm IC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg MDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaAk1IE1hciAyMDA1 IDE2OjI3OjA3IC0wMDAwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAoYykgMjAwMyBNYXRoZXcg S2FubmVyCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAyLgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv bgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq LworCisjaWZuZGVmIE1QVTQwMV9ICisjZGVmaW5lIE1QVTQwMV9ICisKK3N0cnVjdCBtcHU0MDE7 CisKK3R5cGVkZWYgaW50IG1wdTQwMV9pbnRyX3Qoc3RydWN0IG1wdTQwMSAqIF9vYmopOworCitl eHRlcm4gc3RydWN0IG1wdTQwMSAqbXB1NDAxX2luaXQoa29ial9jbGFzc190IF9jbHMsIHZvaWQg KmNvb2tpZSwgCisJCQlkcml2ZXJfaW50cl90ICpfc29mdGludHIsbXB1NDAxX2ludHJfdCAqKl9j Yik7CitleHRlcm4gaW50IG1wdTQwMV91bmluaXQoc3RydWN0IG1wdTQwMSAqIF9vYmopOworI2Vu ZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbXB1X2lmLm0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogc3lzL2Rldi9zb3VuZC9taWRpL21wdV9pZi5tCmRpZmYgLU4gc3lzL2Rldi9zb3VuZC9taWRp L21wdV9pZi5tCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lz L2Rldi9zb3VuZC9taWRpL21wdV9pZi5tCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAgLTAs MCArMSw0NiBAQAorI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGkuaD4KKworSU5URVJGQUNF IG1wdTsKKworTUVUSE9EIGludCBpbnFzaXpleworCXN0cnVjdCBzbmRfbWlkaSAqIF9rb2JqOwor CXZvaWQgKl9jb29raWU7Cit9OworCitNRVRIT0QgaW50IG91dHFzaXplIHsKKwlzdHJ1Y3Qgc25k X21pZGkgKiBfa29iajsKKwl2b2lkICpfY29va2llOworfTsKKworTUVUSE9EIGludCBpbml0IHsK KwlzdHJ1Y3Qgc25kX21pZGkgKiBfa29iajsKKwl2b2lkICpfY29va2llOworfTsKKworTUVUSE9E IHZvaWQgY2FsbGJhY2twIHsKKwlzdHJ1Y3Qgc25kX21pZGkgKiBfa29iajsKKwl2b2lkICpfY29v a2llOworCWludCBfZmxhZ3M7Cit9OworCitNRVRIT0Qgdm9pZCBjYWxsYmFjayB7IAorCXN0cnVj dCBzbmRfbWlkaSAqIF9rb2JqOworCXZvaWQgKl9jb29raWU7CisJaW50IF9mbGFnczsKK307CisK K01FVEhPRCBjb25zdCBjaGFyICogcHJvdmlkZXJ7CisJc3RydWN0IHNuZF9taWRpICogX2tvYmo7 CisJdm9pZCAqX2Nvb2tpZTsKK307CisKK01FVEhPRCBjb25zdCBjaGFyICogZGVzY3IgeyAKKwlz dHJ1Y3Qgc25kX21pZGkgKiBfa29iajsgCisJdm9pZCAqX2Nvb2tpZTsKKwlpbnQgX3ZlcmJvc2l0 eTsKK307CisKK01FVEhPRCBpbnQgdW5pbml0IHsgCisJc3RydWN0IHNuZF9taWRpICogX2tvYmo7 IAorCXZvaWQgKl9jb29raWU7Cit9OwpJbmRleDogc3lzL2Rldi9zb3VuZC9taWRpL21wdWZvaV9p Zi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQpk aWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQotLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQk1 IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlIDxzeXMv YnVzLmg+CisjaW5jbHVkZSA8ZGV2L3NvdW5kL21pZGkvbXB1NDAxLmg+CisKK0lOVEVSRkFDRSBt cHVmb2k7CisKK01FVEhPRCB1bnNpZ25lZCBjaGFyIHJlYWQgeworCXN0cnVjdCBtcHU0MDEgKl9r b2JqOworCXZvaWQgKl9jb29raWU7CisJaW50IF9yZWc7Cit9OworCitNRVRIT0Qgdm9pZCB3cml0 ZSB7CisJc3RydWN0IG1wdTQwMSAqX2tvYmo7CisJdm9pZCAqX2Nvb2tpZTsKKwlpbnQgX3JlZzsK Kwl1bnNpZ25lZCBjaGFyIF9kOworfTsKKworTUVUSE9EIGludCB1bmluaXQgeworCXN0cnVjdCBt cHU0MDEgKl9rb2JqOworCXZvaWQgKl9jb29raWU7Cit9OwpJbmRleDogc3lzL2Rldi9zb3VuZC9t aWRpL3NlcXVlbmNlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9z ZXF1ZW5jZXIuYwpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9zZXF1ZW5jZXIuYwotLS0gL2Rl di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9z ZXF1ZW5jZXIuYwk1IE1hciAyMDA1IDE2OjU3OjQ4IC0wMDAwCkBAIC0wLDAgKzEsMjA0NiBAQAor LyoKKyAqIFRoZSBzZXF1ZW5jZXIgcGVyc29uYWxpdHkgbWFuYWdlci4KKyAqIChjKSAyMDAzIE1h dGhldyBLYW5uZXIKKyAqIENvcHlyaWdodCBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMKKyAqIAor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6IDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IDIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK KyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNy Yy9zeXMvZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmMsdiAxLjE1IDIwMDMvMDMvMDMgMTI6MTU6 NDYgcGhrIEV4cCAkCisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl IDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvaW9jY29tLmg+CisKKyNpbmNsdWRlIDxzeXMv ZmlsaW8uaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4K KyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHR5Lmg+CisjaW5jbHVkZSA8 c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxzeXMva2Vy bmVsLmg+IC8qIGZvciBEQVRBX1NFVCAqLworCisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu Y2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMv dWlvLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1ZGUgPHN5cy9lcnJuby5oPgor I2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8 bWFjaGluZS9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzX21lbWlvLmg+CisjaW5j bHVkZSA8bWFjaGluZS9idXNfcGlvLmg+CisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL2Nsb2NrLmg+ICAgICAgLyogZm9yIERFTEFZICovCisjaW5jbHVkZSA8c3lz L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL21tYW4u aD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1 ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxz eXMvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKworCisjaW5jbHVkZSA8ZGV2 L3NvdW5kL21pZGkvbWlkaS5oPgorI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGlxLmg+Cisj aW5jbHVkZSAic3ludGhfaWYuaCIKKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL3NlcXVlbmNl ci5oPgorCisjZGVmaW5lIFRNUl9USU1FUkJBU0UgMTMKKworI2RlZmluZSBTTkRfREVWX1NFUQkx CS8qIFNlcXVlbmNlciBvdXRwdXQgL2Rldi9zZXF1ZW5jZXIgKEZNCisJCQkJICAgc3ludGhlc2l6 ZXIgYW5kIE1JREkgb3V0cHV0KSAqLworI2RlZmluZSBTTkRfREVWX01VU0lDCTgJLyogL2Rldi9t dXNpYywgbGV2ZWwgMiBpbnRlcmZhY2UgKi8KKworLyogTGVuZ3RoIG9mIGEgc2VxdWVuY2VyIGV2 ZW50LiAqLworI2RlZmluZSBFVl9TWiA4CisjZGVmaW5lIElFVl9TWiA4CisKKy8qIExvb2t1cCBt b2RlcyAqLworI2RlZmluZSBMT09LVVBfRVhJU1QJKDApCisjZGVmaW5lIExPT0tVUF9PUEVOCSgx KQorI2RlZmluZSBMT09LVVBfQ0xPU0UJKDIpCisKKyNkZWZpbmUgUENNTUtNSU5PUih1LCBkLCBj KSBcCisJICAgICgoKChjKSAmIDB4ZmYpIDw8IDE2KSB8ICgoKHUpICYgMHgwZikgPDwgNCkgfCAo KGQpICYgMHgwZikpCisjZGVmaW5lIE1JRElNS01JTk9SKHUsIGQsIGMpIFBDTU1LTUlOT1IodSwg ZCwgYykKKyNkZWZpbmUgTUlESVVOSVQoeSkgKChtaW5vcih5KSA+PiA0KSAmIDB4MGYpCisjZGVm aW5lIE1JRElERVYoeSkgKG1pbm9yKHkpICYgMHgwZikKKworLyogVGhlc2UgYXJlIHRoZSBlbnRy aWVzIHRvIHRoZSBzZXF1ZW5jZXIgZHJpdmVyLiAqLworc3RhdGljIGRfb3Blbl90IHNlcV9vcGVu Oworc3RhdGljIGRfY2xvc2VfdCBzZXFfY2xvc2U7CitzdGF0aWMgZF9pb2N0bF90IHNlcV9pb2N0 bDsKK3N0YXRpYyBkX3JlYWRfdCBzZXFfcmVhZDsKK3N0YXRpYyBkX3dyaXRlX3Qgc2VxX3dyaXRl Oworc3RhdGljIGRfcG9sbF90IHNlcV9wb2xsOworI2RlZmluZSBNSURJX01BSk9SIDMwCisKK3N0 YXRpYyBzdHJ1Y3QgY2RldnN3IHNlcV9jZGV2c3cgPSB7CisJLmRfdmVyc2lvbiA9IERfVkVSU0lP TiwKKwkuZF9vcGVuID0Jc2VxX29wZW4sCisJLmRfY2xvc2UgPQlzZXFfY2xvc2UsCisJLmRfcmVh ZCA9CXNlcV9yZWFkLAorCS5kX3dyaXRlID0Jc2VxX3dyaXRlLAorCS5kX2lvY3RsID0Jc2VxX2lv Y3RsLAorCS5kX3BvbGwgPQlzZXFfcG9sbCwKKwkuZF9uYW1lID0JInNlcXVlbmNlciIsCisJLmRf bWFqID0JTUlESV9NQUpPUiwKK307CisKK3N0cnVjdCBzZXFfc29mdGMgeworCUtPQkpfRklFTERT OworCisJc3RydWN0IG10eCBzZXFfbG9jaywgcV9sb2NrOworCXN0cnVjdCBjdiBlbXB0eV9jdiwg cmVzZXRfY3YsIGluX2N2LCBvdXRfY3YsIHN0YXRlX2N2LCB0aF9jdjsKKworCU1JRElRX0hFQUQo LCB1X2NoYXIpIGluX3EsIG91dF9xOworCisJdV9sb25nICBmbGFnczsKKwkvKiBGbGFncyAocHJv dGVjdGVkIGJ5IGZsYWdfbXR4IG9mIG1pZGlkZXZfaW5mbykgKi8KKwlpbnQJCWZmbGFnczsJCSAg LyogQWNjZXNzIG1vZGUgKi8KKwlpbnQJCW11c2ljOworCisJaW50CQlvdXRfd2F0ZXI7CS8qIFNl cXVlbmNlIG91dHB1dCB0aHJlc2hvdWxkICovCisJc25kX3N5bmNfcGFybQlzeW5jX3Bhcm07CQkv KiBBSU9TWU5DIHBhcmFtZXRlciBzZXQgKi8KKwlzdHJ1Y3QgdGhyZWFkCSpzeW5jX3RocmVhZDsJ CS8qIEFJT1NZTkNpbmcgdGhyZWFkICovCisJc3RydWN0IHNlbGluZm8gaW5fc2VsLCBvdXRfc2Vs OworCWludCBtaWRpX251bWJlcjsKKwlzdHJ1Y3QgY2RldiAqc2VxZGV2LCAqbXVzaWNkZXY7CisJ aW50IHVuaXQ7CisJaW50IG1heHVuaXRzOworCWtvYmpfdCAqbWlkaXM7CisJaW50ICptaWRpX2Zs YWdzOworCWtvYmpfdCBtYXBwZXI7CisJdm9pZCAqbWFwcGVyX2Nvb2tpZTsKKwlzdHJ1Y3QgdGlt ZXZhbCB0aW1lcnN0b3AsIHRpbWVyc3ViOworCWludCB0aW1lcmJhc2UsIHRlbXBvOworCWludCB0 aW1lcnJ1bjsKKwlpbnQgZG9uZTsKKwlpbnQgcGxheWluZzsKKwlpbnQgcmVjb3JkaW5nOworCWlu dCBidXN5OworCWludCBwcmVfZXZlbnRfdGltZW91dDsKKwlpbnQgd2FpdGluZzsKK307CisKKy8q CisgKiBNb2R1bGUgc3BlY2lmaWMgc3R1ZmYsIGluY2x1ZGluZyBob3cgbWFueSBzZXF1ZWNlcnMK KyAqIHdlIGN1cnJlbnRseSBvd24uCisgKi8KKworU1lTQ1RMX05PREUoX2h3X21pZGksIE9JRF9B VVRPLCBzZXEsIENUTEZMQUdfUkQsIDAsICJNaWRpIHNlcXVlbmNlciIpOworCitpbnQJCQkJCXNl cV9kZWJ1ZzsKK1NZU0NUTF9JTlQoX2h3X21pZGlfc2VxLCBPSURfQVVUTywgZGVidWcsIENUTEZM QUdfUlcsICZzZXFfZGVidWcsIDAsICIiKTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3NlcWV2ZW50 W10gPSB7CisJe1NFUV9OT1RFT0ZGLAkJIlNFUV9OT1RFT0ZGIn0sCisJe1NFUV9OT1RFT04sCQki U0VRX05PVEVPTiJ9LAorCXtTRVFfV0FJVCwJCSJTRVFfV0FJVCJ9LAorCXtTRVFfUEdNQ0hBTkdF LAkJIlNFUV9QR01DSEFOR0UifSwKKwl7U0VRX1NZTkNUSU1FUiwJCSJTRVFfU1lOQ1RJTUVSIn0s CisJe1NFUV9NSURJUFVUQywJCSJTRVFfTUlESVBVVEMifSwKKwl7U0VRX0RSVU1PTiwJCSJTRVFf RFJVTU9OIn0sCisJe1NFUV9EUlVNT0ZGLAkJIlNFUV9EUlVNT0ZGIn0sCisJe1NFUV9FQ0hPLAkJ IlNFUV9FQ0hPIn0sCisJe1NFUV9BRlRFUlRPVUNILAkiU0VRX0FGVEVSVE9VQ0gifSwKKwl7U0VR X0NPTlRST0xMRVIsCSJTRVFfQ09OVFJPTExFUiJ9LAorCXtTRVFfQkFMQU5DRSwJCSJTRVFfQkFM QU5DRSJ9LAorCXtTRVFfVk9MTU9ERSwJCSJTRVFfVk9MTU9ERSJ9LAorCXtTRVFfRlVMTFNJWkUs CQkiU0VRX0ZVTExTSVpFIn0sCisJe1NFUV9QUklWQVRFLAkJIlNFUV9QUklWQVRFIn0sCisJe1NF UV9FWFRFTkRFRCwJCSJTRVFfRVhURU5ERUQifSwKKwl7RVZfU0VRX0xPQ0FMLAkJIkVWX1NFUV9M T0NBTCJ9LAorCXtFVl9USU1JTkcsCQkiRVZfVElNSU5HIn0sCisJe0VWX0NITl9DT01NT04sCQki RVZfQ0hOX0NPTU1PTiJ9LAorCXtFVl9DSE5fVk9JQ0UsCQkiRVZfQ0hOX1ZPSUNFIn0sCisJe0VW X1NZU0VYLAkJIkVWX1NZU0VYIn0sCisJey0xLAkJCU5VTEx9LAorfTsKKworbWlkaV9jbWR0YWIJ Y21kdGFiX3NlcWlvY3RsW10gPSB7CisJe1NORENUTF9TRVFfUkVTRVQsCSJTTkRDVExfU0VRX1JF U0VUIn0sCisJe1NORENUTF9TRVFfU1lOQywJIlNORENUTF9TRVFfU1lOQyJ9LAorCXtTTkRDVExf U1lOVEhfSU5GTywJIlNORENUTF9TWU5USF9JTkZPIn0sCisJe1NORENUTF9TRVFfQ1RSTFJBVEUs CSJTTkRDVExfU0VRX0NUUkxSQVRFIn0sCisJe1NORENUTF9TRVFfR0VUT1VUQ09VTlQsCSJTTkRD VExfU0VRX0dFVE9VVENPVU5UIn0sCisJe1NORENUTF9TRVFfR0VUSU5DT1VOVCwJIlNORENUTF9T RVFfR0VUSU5DT1VOVCJ9LAorCXtTTkRDVExfU0VRX1BFUkNNT0RFLAkiU05EQ1RMX1NFUV9QRVJD TU9ERSJ9LAorCXtTTkRDVExfRk1fTE9BRF9JTlNUUiwJIlNORENUTF9GTV9MT0FEX0lOU1RSIn0s CisJe1NORENUTF9TRVFfVEVTVE1JREksCSJTTkRDVExfU0VRX1RFU1RNSURJIn0sCisJe1NORENU TF9TRVFfUkVTRVRTQU1QTEVTLAkiU05EQ1RMX1NFUV9SRVNFVFNBTVBMRVMifSwKKwl7U05EQ1RM X1NFUV9OUlNZTlRIUywJIlNORENUTF9TRVFfTlJTWU5USFMifSwKKwl7U05EQ1RMX1NFUV9OUk1J RElTLAkiU05EQ1RMX1NFUV9OUk1JRElTIn0sCisJe1NORENUTF9TRVFfR0VUVElNRSwJIlNORENU TF9TRVFfR0VUVElNRSJ9LAorCXtTTkRDVExfTUlESV9JTkZPLAkiU05EQ1RMX01JRElfSU5GTyJ9 LAorCXtTTkRDVExfU0VRX1RIUkVTSE9MRCwJIlNORENUTF9TRVFfVEhSRVNIT0xEIn0sCisJe1NO RENUTF9TWU5USF9NRU1BVkwsCSJTTkRDVExfU1lOVEhfTUVNQVZMIn0sCisJe1NORENUTF9GTV80 T1BfRU5BQkxFLAkiU05EQ1RMX0ZNXzRPUF9FTkFCTEUifSwKKwl7U05EQ1RMX1BNR1JfQUNDRVNT LAkiU05EQ1RMX1BNR1JfQUNDRVNTIn0sCisJe1NORENUTF9TRVFfUEFOSUMsCSJTTkRDVExfU0VR X1BBTklDIn0sCisJe1NORENUTF9TRVFfT1VUT0ZCQU5ELAkiU05EQ1RMX1NFUV9PVVRPRkJBTkQi fSwKKwl7U05EQ1RMX1RNUl9USU1FQkFTRSwJIlNORENUTF9UTVJfVElNRUJBU0UifSwKKwl7U05E Q1RMX1RNUl9TVEFSVCwJIlNORENUTF9UTVJfU1RBUlQifSwKKwl7U05EQ1RMX1RNUl9TVE9QLAki U05EQ1RMX1RNUl9TVE9QIn0sCisJe1NORENUTF9UTVJfQ09OVElOVUUsCSJTTkRDVExfVE1SX0NP TlRJTlVFIn0sCisJe1NORENUTF9UTVJfVEVNUE8sCSJTTkRDVExfVE1SX1RFTVBPIn0sCisJe1NO RENUTF9UTVJfU09VUkNFLAkiU05EQ1RMX1RNUl9TT1VSQ0UifSwKKwl7U05EQ1RMX1RNUl9NRVRS T05PTUUsCSJTTkRDVExfVE1SX01FVFJPTk9NRSJ9LAorCXtTTkRDVExfVE1SX1NFTEVDVCwJIlNO RENUTF9UTVJfU0VMRUNUIn0sCisJe1NORENUTF9NSURJX1BSRVRJTUUsCSJTTkRDVExfTUlESV9Q UkVUSU1FIn0sCisJe0FJT05XUklURSwJCSJBSU9OV1JJVEUifSwKKwl7QUlPR1NJWkUsCQkiQUlP R1NJWkUifSwKKwl7QUlPU1NJWkUsCQkiQUlPU1NJWkUifSwKKwl7QUlPR0ZNVCwJCSJBSU9HRk1U In0sCisJe0FJT1NGTVQsCQkiQUlPU0ZNVCJ9LAorCXtBSU9HTUlYLAkJIkFJT0dNSVgifSwKKwl7 QUlPU01JWCwJCSJBSU9TTUlYIn0sCisJe0FJT1NUT1AsCQkiQUlPU1RPUCJ9LAorCXtBSU9TWU5D LAkJIkFJT1NZTkMifSwKKwl7QUlPR0NBUCwJCSJBSU9HQ0FQIn0sCisJey0xLAkJCU5VTEx9LAor fTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3RpbWVyW10gPSB7CisJe1RNUl9XQUlUX1JFTCwJIlRN Ul9XQUlUX1JFTCJ9LAorCXtUTVJfV0FJVF9BQlMsCSJUTVJfV0FJVF9BQlMifSwKKwl7VE1SX1NU T1AsCSJUTVJfU1RPUCJ9LAorCXtUTVJfU1RBUlQsCSJUTVJfU1RBUlQifSwKKwl7VE1SX0NPTlRJ TlVFLAkiVE1SX0NPTlRJTlVFIn0sCisJe1RNUl9URU1QTywJIlRNUl9URU1QTyJ9LAorCXtUTVJf RUNITywJIlRNUl9FQ0hPIn0sCisJe1RNUl9DTE9DSywJIlRNUl9DTE9DSyJ9LAorCXtUTVJfU1BQ LAkiVE1SX1NQUCJ9LAorCXtUTVJfVElNRVNJRywJIlRNUl9USU1FU0lHIn0sCisJey0xLAkJTlVM TH0sCit9OworCittaWRpX2NtZHRhYgljbWR0YWJfc2VxY3ZbXSA9IHsKKwl7TUlESV9OT1RFT0ZG LAkJIk1JRElfTk9URU9GRiJ9LAorCXtNSURJX05PVEVPTiwJCSJNSURJX05PVEVPTiJ9LAorCXtN SURJX0tFWV9QUkVTU1VSRSwJIk1JRElfS0VZX1BSRVNTVVJFIn0sCisJey0xLAkJCU5VTEx9LAor fTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3NlcWNjbW5bXSA9IHsKKwl7TUlESV9DVExfQ0hBTkdF LAkiTUlESV9DVExfQ0hBTkdFIn0sCisJe01JRElfUEdNX0NIQU5HRSwJIk1JRElfUEdNX0NIQU5H RSJ9LAorCXtNSURJX0NITl9QUkVTU1VSRSwJIk1JRElfQ0hOX1BSRVNTVVJFIn0sCisJe01JRElf UElUQ0hfQkVORCwJIk1JRElfUElUQ0hfQkVORCJ9LAorCXtNSURJX1NZU1RFTV9QUkVGSVgsCSJN SURJX1NZU1RFTV9QUkVGSVgifSwKKwl7LTEsCQkJTlVMTH0sCit9OworCisvKgorICogc3RhdGlj IGNvbnN0IGNoYXIgKm1wdTQwMV9tcHJvdmlkZXIoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAq bSk7CisgKi8KKworc3RhdGljIGtvYmpfbWV0aG9kX3Qgc2VxX21ldGhvZHNbXSA9IHsKKwkvKiBL T0JKTUVUSE9EKG1wdV9wcm92aWRlcixtcHU0MDFfbXByb3ZpZGVyKSwgKi8KKyAgICAgICAgeyAw LCAwIH0KK307CitERUZJTkVfQ0xBU1Moc2VxdWVuY2VyLCBzZXFfbWV0aG9kcywgMCk7CisKKy8q IFRoZSBmb2xsb3dpbmdzIGFyZSB0aGUgbG9jYWwgZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHNl cV9jb252ZXJ0b2xkKHVfY2hhciAqZXZlbnQsIHVfY2hhciAqb3V0KTsKKy8qCisgKiBzdGF0aWMg dm9pZCBzZXFfbWlkaWlucHV0KHN0cnVjdCBzZXFfc29mdGMgKiBzY3AsIHZvaWQgKm1kKTsKKyAq Lworc3RhdGljIHZvaWQgc2VxX3Jlc2V0KHN0cnVjdCBzZXFfc29mdGMgKiBzY3ApOworc3RhdGlj IGludCBzZXFfc3luYyhzdHJ1Y3Qgc2VxX3NvZnRjICogc2NwKTsKKworc3RhdGljIGludCBzZXFf cHJvY2Vzc2V2ZW50KHN0cnVjdCBzZXFfc29mdGMgKiBzY3AsIHVfY2hhciAqZXZlbnQpOworCitz dGF0aWMgaW50IHNlcV90aW1pbmcoc3RydWN0IHNlcV9zb2Z0YyAqIHNjcCwgdV9jaGFyICpldmVu dCk7CitzdGF0aWMgaW50IHNlcV9sb2NhbChzdHJ1Y3Qgc2VxX3NvZnRjICogc2NwLCB1X2NoYXIg KmV2ZW50KTsKKworc3RhdGljIGludCBzZXFfY2hudm9pY2Uoc3RydWN0IHNlcV9zb2Z0YyAqIHNj cCwga29ial90IG1kLCB1X2NoYXIgKmV2ZW50KTsKK3N0YXRpYyBpbnQgc2VxX2NobmNvbW1vbihz dHJ1Y3Qgc2VxX3NvZnRjICogc2NwLCBrb2JqX3QgbWQsIHVfY2hhciAqZXZlbnQpOworc3RhdGlj IGludCBzZXFfc3lzZXgoc3RydWN0IHNlcV9zb2Z0YyAqIHNjcCwga29ial90IG1kLCB1X2NoYXIg KmV2ZW50KTsKKworc3RhdGljIGludCBzZXFfZmV0Y2hfbWlkKHN0cnVjdCBzZXFfc29mdGMgKnNj cCwgaW50IHVuaXQsIGtvYmpfdCAqbWQpOwordm9pZCBzZXFfY29weXRvaW5wdXQoc3RydWN0IHNl cV9zb2Z0YyAqc2NwLCB1X2NoYXIgKmV2ZW50LCBpbnQgbGVuKTsKK2ludCBzZXFfbW9kZXZlbnQo bW9kdWxlX3QgbW9kLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7CitzdHJ1Y3Qgc2VxX3NvZnRjICpz ZXFzWzEwXTsKK3N0YXRpYyBzdHJ1Y3QgbXR4CQkJc2VxaW5mb19tdHg7CitzdGF0aWMgdV9sb25n CQkJCW5zZXEgPSAwOworCitzdGF0aWMgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3Qgc2VxX3NvZnRj ICp0KTsKK3N0YXRpYyB2b2lkIHRpbWVyX3N0b3Aoc3RydWN0IHNlcV9zb2Z0YyAqdCk7CitzdGF0 aWMgdm9pZCB0aW1lcl9zZXR2YWxzKHN0cnVjdCBzZXFfc29mdGMgKnQsIGludCB0ZW1wbywgaW50 IHRpbWVyYmFzZSk7CitzdGF0aWMgdm9pZCB0aW1lcl93YWl0KHN0cnVjdCBzZXFfc29mdGMgKnQs IGludCB0aWNrcywgaW50IHdhaXRfYWJzKTsKK3N0YXRpYyBpbnQgdGltZXJfbm93KHN0cnVjdCBz ZXFfc29mdGMgKnQpOworCisKK3N0YXRpYyB2b2lkCit0aW1lcl9zdGFydChzdHJ1Y3Qgc2VxX3Nv ZnRjICp0KQoreworCXQtPnRpbWVycnVuID0gMTsKKwlnZXRtaWNyb3RpbWUoJnQtPnRpbWVyc3Vi KTsKK30KKworc3RhdGljIHZvaWQKK3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBzZXFfc29mdGMgKnQp Cit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJaWYgKHQtPnRpbWVycnVuID09IDEpCisJICAg IHJldHVybjsKKwl0LT50aW1lcnJ1biA9IDE7CisJZ2V0bWljcm90aW1lKCZub3cpOworCXRpbWV2 YWxzdWIoJm5vdywgJnQtPnRpbWVyc3RvcCk7CisJdGltZXZhbGFkZCgmdC0+dGltZXJzdWIsICZu b3cpOworfQorCitzdGF0aWMgdm9pZAordGltZXJfc3RvcChzdHJ1Y3Qgc2VxX3NvZnRjICp0KQor eworCXQtPnRpbWVycnVuID0gMDsKKwlnZXRtaWNyb3RpbWUoJnQtPnRpbWVyc3RvcCk7Cit9CisK K3N0YXRpYyB2b2lkCit0aW1lcl9zZXR2YWxzKHN0cnVjdCBzZXFfc29mdGMgKnQsIGludCB0ZW1w bywgaW50IHRpbWVyYmFzZSkKK3sKKwl0LT50ZW1wbyA9IHRlbXBvOworCXQtPnRpbWVyYmFzZSA9 IHRpbWVyYmFzZTsKK30KKworc3RhdGljIHZvaWQKK3RpbWVyX3dhaXQoc3RydWN0IHNlcV9zb2Z0 YyAqdCwgaW50IHRpY2tzLCBpbnQgd2FpdF9hYnMpCit7CisJc3RydWN0IHRpbWV2YWwgbm93LCB3 aGVuOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGk7CisKKwl3aGlsZSAodC0+dGlt ZXJydW4gPT0gMCkgeworCSAgICBTRVFfREVCVUcoMixwcmludGYoIlRpbWVyIHdhaXQgd2hlbiB0 aW1lciBpc24ndCBydW5uaW5nXG4iKSk7CisJICAgIC8qCisJICAgICAqIFRoZSBvbGQgc2VxdWVu Y2VyIHVzZWQgdGltZW91dHMgdGhhdCBvbmx5IGluY3JlYXNlZAorCSAgICAgKiB0aGUgdGltZXIg d2hlbiB0aGUgdGltZXIgd2FzIHJ1bm5pbmcuCisJICAgICAqIEhlbmNlIHRoZSBzZXF1ZW5jZXIg d291bGQgc3RpY2sgKD8pIGlmIHRoZQorCSAgICAgKiB0aW1lciB3YXMgZGlzYWJsZWQuCisJICAg ICAqLworCSAgICBjdl93YWl0KCZ0LT5yZXNldF9jdiwgJnQtPnNlcV9sb2NrKTsKKwkgICAgaWYg KHQtPnBsYXlpbmcgPT0gMCkKKwkJcmV0dXJuOworCX0KKworCWkgPSB0aWNrcyAqIDYwdWxsICog MTAwMDAwMHVsbCAvICh0LT50ZW1wbyAqIHQtPnRpbWVyYmFzZSk7CisKKwl3aGVuLnR2X3NlYyA9 IGkgLyAxMDAwMDAwOworCXdoZW4udHZfdXNlYyA9IGkgJSAxMDAwMDAwOworCisjaWYgMAorCXBy aW50ZigidGltZXJfd2FpdCB0ZW1wbyAlZCB0aW1lcmJhc2UgJWQgdGlja3MgJWQgYWJzICVkIHVf c2VjICVsbHVcbiIsIHQtPnRlbXBvLCB0LT50aW1lcmJhc2UsIHRpY2tzLCB3YWl0X2FicywgaSk7 CisjZW5kaWYKKworCWlmICh3YWl0X2FicyAhPSAwKSB7CisJICAgIGdldG1pY3JvdGltZSgmbm93 KTsKKwkgICAgdGltZXZhbHN1Yigmbm93LCAmdC0+dGltZXJzdWIpOworCSAgICB0aW1ldmFsc3Vi KCZ3aGVuLCAmbm93KTsKKwl9CisKKwlpZiAod2hlbi50dl9zZWMgPCAwIHx8IHdoZW4udHZfdXNl YyA8IDApIHsKKwkgICAgU0VRX0RFQlVHKDMscHJpbnRmKCJzZXFfdGltZXIgZXJyb3IgbmVnYXRp dmUgdGltZSAlbGQuJTA2bGRcbiIsIAorCQkgICAgd2hlbi50dl9zZWMsd2hlbi50dl91c2VjKSk7 CisJICAgIHJldHVybjsKKwl9CisKKwlpID0gd2hlbi50dl9zZWMgKiAxMDAwMDAwdWxsOworCWkg Kz0gd2hlbi50dl91c2VjOworCWkgKj0gaHo7CisJaSAvPSAxMDAwMDAwdWxsOworI2lmIDAKKwlw cmludGYoInNlcV90aW1lciB1c2VjICVsbHUgdGlja3MgJWxsdVxuIiwgd2hlbi50dl9zZWMgKiAx MDAwMDAwdWxsICsgd2hlbi50dl91c2VjLCBpKTsKKyNlbmRpZgorCXQtPndhaXRpbmcgPSAxOwor CXJldCA9IGN2X3RpbWVkd2FpdCgmdC0+cmVzZXRfY3YsICZ0LT5zZXFfbG9jaywgaSArIDEpOwor CXQtPndhaXRpbmcgPSAwOworCisJaWYgKHJldCAhPSBFV09VTERCTE9DSykKKwkgICAgU0VRX0RF QlVHKDMscHJpbnRmKCJzZXFfdGltZXIgZGlkbid0IHRpbWVvdXRcbiIpKTsKKworfQorCitzdGF0 aWMgaW50Cit0aW1lcl9ub3coc3RydWN0IHNlcV9zb2Z0YyAqdCkKK3sKKwlzdHJ1Y3QgdGltZXZh bCBub3c7CisJdW5zaWduZWQgbG9uZyBsb25nIGk7CisJaW50IHJldDsKKworCWlmICh0LT50aW1l cnJ1biA9PSAwKQorCSAgICBub3cgPSB0LT50aW1lcnN0b3A7CisJZWxzZQorCSAgICBnZXRtaWNy b3RpbWUoJm5vdyk7CisKKwl0aW1ldmFsc3ViKCZub3csICZ0LT50aW1lcnN1Yik7CisKKwlpID0g bm93LnR2X3NlYyAqIDEwMDAwMDB1bGw7CisJaSArPSBub3cudHZfdXNlYzsKKwlpICo9IHQtPnRp bWVyYmFzZTsKKy8qCWkgLz0gdC0+dGVtcG87ICovCisJaSAvPSAxMDAwMDAwdWxsOworCisJcmV0 ID0gaTsKKwkvKgorCSAqIHByaW50ZigidGltZXJfbm93OiAlbGx1ICVkXG4iLCBpLCByZXQpOwor CSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3NlcV9ldmVudHRocmVhZCh2 b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gYXJnOworCWNoYXIgZXZlbnRb RVZfU1pdOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCXByaW50Zigic2VxX2V2ZW50 dGhyZWFkIHN0YXJ0ZWRcbiIpOworCXdoaWxlKHNjcC0+ZG9uZSA9PSAwKSB7CityZXN0YXJ0Ogor CSAgICB3aGlsZSAoc2NwLT5wbGF5aW5nID09IDApIHsKKwkJY3Zfd2FpdCgmc2NwLT5zdGF0ZV9j diwgJnNjcC0+c2VxX2xvY2spOworCQkgICAgaWYgKHNjcC0+ZG9uZSkKKwkJCWdvdG8gZG9uZTsK KwkgICAgfQorCisJICAgIHdoaWxlIChNSURJUV9FTVBUWShzY3AtPm91dF9xKSkgeworCQljdl9i cm9hZGNhc3QoJnNjcC0+ZW1wdHlfY3YpOworCQljdl93YWl0KCZzY3AtPm91dF9jdiwgJnNjcC0+ c2VxX2xvY2spOworCQlpZiAoc2NwLT5wbGF5aW5nID09IDApCisJCSAgICBnb3RvIHJlc3RhcnQ7 CisJCWlmIChzY3AtPmRvbmUpCisJCSAgICBnb3RvIGRvbmU7CisJICAgIH0KKworCSAgICBNSURJ UV9ERVEoc2NwLT5vdXRfcSwgZXZlbnQsIEVWX1NaKTsKKworCSAgICBpZiAoTUlESVFfQVZBSUwo c2NwLT5vdXRfcSkgPCBzY3AtPm91dF93YXRlcikgeworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0 X2N2KTsKKwkJc2Vsd2FrZXVwKCZzY3AtPm91dF9zZWwpOworCSAgICB9CisKKwkgICAgc2VxX3By b2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwl9CisKK2RvbmU6CisJY3ZfYnJvYWRjYXN0KCZzY3At PnRoX2N2KTsKKwltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwltdHhfbG9jaygmR2lhbnQp OworCXByaW50Zigic2VxX2V2ZW50dGhyZWFkIGZpbmlzaGVkXG4iKTsKKwlrdGhyZWFkX2V4aXQo MCk7Cit9CisKKy8qCisgKiBzZXFfcHJvY2Vzc2V2ZW50OiAgVGhpcyBtYXliZSBjYWxsZWQgYnkg dGhlIGV2ZW50IHRocmVhZCBvciB0aGUgSU9DVEwKKyAqIGhhbmRsZXIgZm9yIHF1ZXVlZCBhbmQg b3V0IG9mIGJhbmQgZXZlbnRzIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGludAorc2VxX3By b2Nlc3NldmVudChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIHVfY2hhciAqZXZlbnQpCit7CisJaW50 IHJldDsKKwlrb2JqX3QgbTsKKworCXJldCA9IDA7CisKKwlpZiAoZXZlbnRbMF0gPT0gRVZfU0VR X0xPQ0FMKQorCQlyZXQgPSBzZXFfbG9jYWwoc2NwLCBldmVudCk7CisJZWxzZSBpZiAoZXZlbnRb MF0gPT0gRVZfVElNSU5HKQorCQlyZXQgPSBzZXFfdGltaW5nKHNjcCwgZXZlbnQpOworCWVsc2Ug aWYgKGV2ZW50WzBdICE9IEVWX0NITl9WT0lDRSAmJgorCQkJZXZlbnRbMF0gIT0gRVZfQ0hOX0NP TU1PTiAmJgorCQkJZXZlbnRbMF0gIT0gRVZfU1lTRVggJiYKKwkJCWV2ZW50WzBdICE9IFNFUV9N SURJUFVUQykgeworCQlyZXQgPSAxOworCQlTRVFfREVCVUcoMixwcmludGYoInNlcV9wcm9jZXNz ZXZlbnQgbm90IGtub3duICVkXG4iLCBldmVudFswXSkpOworCX0gZWxzZSBpZiAoc2VxX2ZldGNo X21pZChzY3AsIGV2ZW50WzFdLCAmbSkgIT0gMCkgeworCQlyZXQgPSAxOworCQlTRVFfREVCVUco MixwcmludGYoInNlcV9wcm9jZXNzZXZlbnQgbWlkaSB1bml0IG5vdCBmb3VuZCAlZFxuIiwgZXZl bnRbMV0pKTsKKwl9IGVsc2Ugc3dpdGNoKGV2ZW50WzBdKSB7CisJCWNhc2UgRVZfQ0hOX1ZPSUNF OiAKKwkJCXJldCA9IHNlcV9jaG52b2ljZShzY3AsIG0sIGV2ZW50KTsKKwkJCWJyZWFrOworCQlj YXNlIEVWX0NITl9DT01NT046CisJCQlyZXQgPSBzZXFfY2huY29tbW9uKHNjcCwgbSwgZXZlbnQp OworCQkJYnJlYWs7CisJCWNhc2UgRVZfU1lTRVg6CisJCQlyZXQgPSBzZXFfc3lzZXgoc2NwLCBt LCBldmVudCk7CisJCQlicmVhazsKKwkJY2FzZSBTRVFfTUlESVBVVEM6CisJCQltdHhfdW5sb2Nr KCZzY3AtPnNlcV9sb2NrKTsKKwkJCXJldCA9IFNZTlRIX1dSSVRFUkFXKG0sICZldmVudFsyXSwg MSk7CisJCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQlicmVhazsKKwl9CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludAorc2VxX2FkZHVuaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc2Vx X3NvZnRjICpzY3A7CisJaW50IHJldDsKKwl1X2NoYXIgKmJ1ZjsKKworCS8qIEFsbG9jYXRlIHRo ZSBzb2Z0Yy4gKi8KKwlyZXQgPSBFTk9NRU07CisJc2NwID0gbWFsbG9jKHNpemVvZigqc2NwKSwg TV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAoc2NwID09IE5VTEwpIHsKKwkJU0VR X0RFQlVHKDEscHJpbnRmKCJzZXFfYWRkdW5pdDogc29mdGMgYWxsb2NhdGlvbiBmYWlsZWQuXG4i KSk7CisJCWdvdG8gZXJyOworCX0KKwlrb2JqX2luaXQoKGtvYmpfdCkgc2NwLCAmc2VxdWVuY2Vy X2NsYXNzKTsKKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikgKiBFVl9TWiAqIDEwMjQsIE1f VEVNUCwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgZ290byBl cnI7CisJTUlESVFfSU5JVChzY3AtPmluX3EsIGJ1ZiwgRVZfU1ogKiAxMDI0KTsKKwlidWYgPSBt YWxsb2Moc2l6ZW9mKCpidWYpICogRVZfU1ogKiAxMDI0LCBNX1RFTVAsIE1fTk9XQUlUIHwgTV9a RVJPKTsKKwlpZiAoYnVmID09IE5VTEwpCisJICAgIGdvdG8gZXJyOworCU1JRElRX0lOSVQoc2Nw LT5vdXRfcSwgYnVmLCBFVl9TWiAqIDEwMjQpOworCXJldCA9IEVJTlZBTDsKKworCXNjcC0+bWlk aXMgPSBtYWxsb2Moc2l6ZW9mKGtvYmpfdCkgKiAzMiwgTV9URU1QLCBNX05PV0FJVCB8IE1fWkVS Tyk7CisJc2NwLT5taWRpX2ZsYWdzID0gbWFsbG9jKHNpemVvZigqc2NwLT5taWRpX2ZsYWdzKSAq IDMyLCBNX1RFTVAsCisJCU1fTk9XQUlUIHwgTV9aRVJPKTsKKworCWlmICggc2NwLT5taWRpcyA9 PSBOVUxMIHx8IHNjcC0+bWlkaV9mbGFncyA9PSBOVUxMKQorCSAgICBnb3RvIGVycjsKKworCXNj cC0+ZmxhZ3MgPSAwOworCisJbXR4X2luaXQoJnNjcC0+c2VxX2xvY2ssICJzZXFmbHEiLCAwLCAw KTsKKwljdl9pbml0KCZzY3AtPnN0YXRlX2N2LCAic2Vxc3RhdGUiKTsKKwljdl9pbml0KCZzY3At PmVtcHR5X2N2LCAic2VxZW1wdHkiKTsKKwljdl9pbml0KCZzY3AtPnJlc2V0X2N2LCAic2VxdGlt ZXIiKTsKKwljdl9pbml0KCZzY3AtPm91dF9jdiwgInNlcXFvdXQiKTsKKwljdl9pbml0KCZzY3At PmluX2N2LCAic2VxcWluIik7CisJY3ZfaW5pdCgmc2NwLT50aF9jdiwgInNlcXN0YXJ0Iik7CisK KwkvKgorCSAqIEluaXQgdGhlIGRhbW4gdGltZXIKKwkgKi8KKworCXNjcC0+bWFwcGVyID0gbWlk aW1hcHBlcl9hZGRzZXEoc2NwLCAmc2NwLT51bml0LCAmc2NwLT5tYXBwZXJfY29va2llKTsKKwlp ZiAoc2NwLT5tYXBwZXIgPT0gTlVMTCkKKwkgICAgZ290byBlcnI7CisKKwlzY3AtPnNlcWRldiA9 IG1ha2VfZGV2KCZzZXFfY2RldnN3LAorCQlNSURJTUtNSU5PUihzY3AtPnVuaXQsIFNORF9ERVZf U0VRLDApLCBVSURfUk9PVCwgCisJCUdJRF9XSEVFTCwgMDY2NiwgInNlcXVlbmNlciVkIiwgc2Nw LT51bml0KTsKKworCXNjcC0+bXVzaWNkZXYgPSBtYWtlX2Rldigmc2VxX2NkZXZzdywKKwkJTUlE SU1LTUlOT1Ioc2NwLT51bml0LCBTTkRfREVWX01VU0lDLDApLCBVSURfUk9PVCwgCisJCUdJRF9X SEVFTCwgMDY2NiwgIm11c2ljJWQiLCBzY3AtPnVuaXQpOworCisJaWYgKHNjcC0+c2VxZGV2ID09 IE5VTEwgfHwgc2NwLT5tdXNpY2RldiA9PSBOVUxMKQorCSAgICBnb3RvIGVycjsKKwkvKgorCSAq IFRPRE86IEFkZCB0byBsaXN0IG9mIHNlcXVlbmNlcnMgdGhpcyBtb2R1bGUgcHJvdmlkZXMKKwkg Ki8KKworCXJldCA9IGt0aHJlYWRfY3JlYXRlKHNlcV9ldmVudHRocmVhZCwgc2NwLCBOVUxMLCBS RkhJR0hQSUQsIDAsICJzZXF1ZW5jZXIgJTAyZCIsIHNjcC0+dW5pdCk7CisKKwlpZiAocmV0KQor CSAgICBnb3RvIGVycjsKKworCXNjcC0+c2VxZGV2LT5zaV9kcnYxID0gc2NwLT5tdXNpY2Rldi0+ c2lfZHJ2MSA9IHNjcDsKKworCXByaW50Zigic2VxdWVuY2VyICVkIGNyZWF0ZWQgc2NwICVwXG4i LCBzY3AtPnVuaXQsIHNjcCk7CisKKwlyZXQgPSAwOworCisJbXR4X2xvY2soJnNlcWluZm9fbXR4 KTsKKwlzZXFzW25zZXErK109c2NwOworCW10eF91bmxvY2soJnNlcWluZm9fbXR4KTsKKworCWdv dG8gb2s7CisKK2VycjoKKwlpZiAoc2NwICE9IE5VTEwpIHsKKwkgICAgaWYgKHNjcC0+c2VxZGV2 ICE9IE5VTEwpCisJCWRlc3Ryb3lfZGV2KHNjcC0+c2VxZGV2KTsKKwkgICAgaWYgKHNjcC0+bXVz aWNkZXYgIT0gTlVMTCkKKwkJZGVzdHJveV9kZXYoc2NwLT5tdXNpY2Rldik7CisJICAgIC8qCisJ ICAgICAqIFRPRE86IERlc3Ryb3kgbXV0ZXggYW5kIGN2CisJICAgICAqLworCSAgICBpZiAoc2Nw LT5taWRpcyAhPSBOVUxMKQorCQlmcmVlKHNjcC0+bWlkaXMsIE1fVEVNUCk7CisJICAgIGlmIChz Y3AtPm1pZGlfZmxhZ3MgIT0gTlVMTCkKKwkJZnJlZShzY3AtPm1pZGlfZmxhZ3MsIE1fVEVNUCk7 CisJICAgIGlmIChzY3AtPm91dF9xLmIpCisJCWZyZWUoc2NwLT5vdXRfcS5iLCBNX1RFTVApOwor CSAgICBpZiAoc2NwLT5pbl9xLmIpCisJCWZyZWUoc2NwLT5pbl9xLmIsIE1fVEVNUCk7CisJICAg IGZyZWUoc2NwLCBNX0RFVkJVRik7CisJfQorb2s6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludAorc2VxX2RlbHVuaXQoaW50IHVuaXQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0g c2Vxc1t1bml0XTsKKwlpbnQgaTsKKworCS8vU0VRX0RFQlVHKDQscHJpbnRmKCJzZXFfZGVsdW5p dDogJWRcbiIsIHVuaXQpKTsKKwlwcmludGYoInNlcV9kZWx1bml0OiAxIFxuIik7CisJbXR4X2xv Y2soJnNjcC0+c2VxX2xvY2spOworCisJc2NwLT5wbGF5aW5nID0gMDsKKwlzY3AtPmRvbmUgPSAx OworCWN2X2Jyb2FkY2FzdCgmc2NwLT5vdXRfY3YpOworCWN2X2Jyb2FkY2FzdCgmc2NwLT5zdGF0 ZV9jdik7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnJlc2V0X2N2KTsKKwlwcmludGYoInNlcV9kZWx1 bml0OiAyIFxuIik7CisJY3Zfd2FpdCgmc2NwLT50aF9jdiwgJnNjcC0+c2VxX2xvY2spOworCXBy aW50Zigic2VxX2RlbHVuaXQ6IDMuMCBcbiIpOworCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2sp OworCXByaW50Zigic2VxX2RlbHVuaXQ6IDMuMSBcbiIpOworCisJY3ZfZGVzdHJveSgmc2NwLT5z dGF0ZV9jdik7CisJcHJpbnRmKCJzZXFfZGVsdW5pdDogNCBcbiIpOworCWN2X2Rlc3Ryb3koJnNj cC0+ZW1wdHlfY3YpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDUgXG4iKTsKKwljdl9kZXN0cm95 KCZzY3AtPnJlc2V0X2N2KTsKKwlwcmludGYoInNlcV9kZWx1bml0OiA2IFxuIik7CisJY3ZfZGVz dHJveSgmc2NwLT5vdXRfY3YpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDcgXG4iKTsKKwljdl9k ZXN0cm95KCZzY3AtPmluX2N2KTsKKwlwcmludGYoInNlcV9kZWx1bml0OiA4IFxuIik7CisJY3Zf ZGVzdHJveSgmc2NwLT50aF9jdik7CisKKwlwcmludGYoInNlcV9kZWx1bml0OiAxMCBcbiIpOwor CWlmIChzY3AtPnNlcWRldikKKwkgICAgZGVzdHJveV9kZXYoc2NwLT5zZXFkZXYpOworCXByaW50 Zigic2VxX2RlbHVuaXQ6IDExIFxuIik7CisJaWYgKHNjcC0+bXVzaWNkZXYpCisJICAgIGRlc3Ry b3lfZGV2KHNjcC0+bXVzaWNkZXYpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDEyIFxuIik7CisJ c2NwLT5zZXFkZXYgPSBzY3AtPm11c2ljZGV2ID0gTlVMTDsKKwlpZiAoc2NwLT5taWRpcyAhPSBO VUxMKQorCSAgICBmcmVlKHNjcC0+bWlkaXMsIE1fVEVNUCk7CisJcHJpbnRmKCJzZXFfZGVsdW5p dDogMTMgXG4iKTsKKwlpZiAoc2NwLT5taWRpX2ZsYWdzICE9IE5VTEwpCisJICAgIGZyZWUoc2Nw LT5taWRpX2ZsYWdzLCBNX1RFTVApOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDE0IFxuIik7CisJ ZnJlZShzY3AtPm91dF9xLmIsIE1fVEVNUCk7CisJcHJpbnRmKCJzZXFfZGVsdW5pdDogMTUgXG4i KTsKKwlmcmVlKHNjcC0+aW5fcS5iLCBNX1RFTVApOworCisJcHJpbnRmKCJzZXFfZGVsdW5pdDog MTYgXG4iKTsKKworCW10eF9kZXN0cm95KCZzY3AtPnNlcV9sb2NrKTsKKwlwcmludGYoInNlcV9k ZWx1bml0OiAxNyBcbiIpOworCWZyZWUoc2NwLCBNX0RFVkJVRik7CisKKwltdHhfbG9jaygmc2Vx aW5mb19tdHgpOworCWZvciAoIGkgPSB1bml0IDsgaSA8IChuc2VxIC0gMSkgOyBpKysgKQorCSAg ICBzZXFzW2ldID0gc2Vxc1tpKzFdOworCW5zZXEtLTsKKwltdHhfdW5sb2NrKCZzZXFpbmZvX210 eCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitzZXFfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBp bnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsLCByOworCisJcmV0dmFsID0gMDsK KworCXN3aXRjaCAodHlwZSkgeworCSAgICBjYXNlIE1PRF9MT0FEOgorCQltdHhfaW5pdCgmc2Vx aW5mb19tdHgsICJzZXFtb2QiLCAwLCAwKTsKKwkJcmV0dmFsID0gc2VxX2FkZHVuaXQoKTsKKwkJ YnJlYWs7CisKKwkgICAgY2FzZSBNT0RfVU5MT0FEOgorCQl3aGlsZSAobnNlcSkgeworCQkJcj1z ZXFfZGVsdW5pdChuc2VxLTEpOworCQkJaWYgKHIpIHsKKwkJCQlyZXR2YWwgPSByOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisJCWlmKG5zZXEgPT0gMCkgeworCQkJcmV0dmFsID0gMDsKKwkJCW10 eF9kZXN0cm95KCZzZXFpbmZvX210eCk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoK KwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorc2VxX2Zl dGNoX21pZChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIGludCB1bml0LCBrb2JqX3QgKm1kKQorewor CisJaWYgKHVuaXQgPiBzY3AtPm1pZGlfbnVtYmVyIHx8IHVuaXQgPCAwKQorCSAgICByZXR1cm4g RUlOVkFMOworCisJKm1kID0gc2NwLT5taWRpc1t1bml0XTsKKworCXJldHVybiAwOworfQorCitp bnQKK3NlcV9vcGVuKHN0cnVjdCBjZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3Ry dWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2Ry djE7CisJaW50IGk7CisKKwlpZiAoc2NwID09IE5VTEwpCisJICAgIHJldHVybiBFTlhJTzsKKwor CVNFUV9ERUJVRygzLHByaW50Zigic2VxX29wZW46IHNjcCAlcCB1bml0ICVkLCBmbGFncyAweCV4 LlxuIiwKKwkJICAgIHNjcCwgc2NwLT51bml0LCBmbGFncykpOworCisJLyoKKwkgKiBNYXJrIHRo aXMgZGV2aWNlIGJ1c3kuIAorCSAqLworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCWlm IChzY3AtPmJ1c3kpIHsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJV RygyLHByaW50Zigic2VxX29wZW46IHVuaXQgJWQgaXMgYnVzeS5cbiIsIHNjcC0+dW5pdCkpOwor CQlyZXR1cm4gRUJVU1k7CisJfQorCXNjcC0+ZmZsYWdzID0gZmxhZ3M7CisJLyoKKwlpZiAoKHNj cC0+ZmZsYWdzICYgT19OT05CTE9DSykgIT0gMCkKKwkJc2NwLT5mbGFncyB8PSBTRVFfRl9OQklP OworCQkqLworCXNjcC0+bXVzaWMgPSBNSURJREVWKGlfZGV2KSA9PSBTTkRfREVWX01VU0lDOwor CisJLyoKKwkgKiBFbnVtZXJhdGUgdGhlIGF2YWlsYWJsZSBtaWRpIGRldmljZXMKKwkgKi8KKwlz Y3AtPm1pZGlfbnVtYmVyID0gMDsKKwlzY3AtPm1heHVuaXRzID0gbWlkaW1hcHBlcl9vcGVuKHNj cC0+bWFwcGVyLCAmc2NwLT5tYXBwZXJfY29va2llKTsKKworCWlmIChzY3AtPm1heHVuaXRzID09 IDApCisJICAgIFNFUV9ERUJVRygyLHByaW50Zigic2VxX29wZW46IG5vIG1pZGkgZGV2aWNlc1xu IikpOworCisJZm9yIChpID0gMCA7IGkgPCBzY3AtPm1heHVuaXRzOyBpKyspIHsKKwkgICAgc2Nw LT5taWRpc1tzY3AtPm1pZGlfbnVtYmVyXSA9CisJCW1pZGltYXBwZXJfZmV0Y2hfc3ludGgoc2Nw LT5tYXBwZXIsIHNjcC0+bWFwcGVyX2Nvb2tpZSwgaSk7CisJICAgIGlmIChzY3AtPm1pZGlzW3Nj cC0+bWlkaV9udW1iZXJdKSB7CisJCWlmICggU1lOVEhfT1BFTihzY3AtPm1pZGlzW3NjcC0+bWlk aV9udW1iZXJdLCBzY3AsIHNjcC0+ZmZsYWdzKQorCQkJIT0gMCApCisJCSAgICBzY3AtPm1pZGlz W3NjcC0+bWlkaV9udW1iZXJdID0gTlVMTDsKKwkJZWxzZSB7CisJCSAgICBzY3AtPm1pZGlfZmxh Z3Nbc2NwLT5taWRpX251bWJlcl0gPQorCQkJU1lOVEhfUVVFUlkoc2NwLT5taWRpc1tzY3AtPm1p ZGlfbnVtYmVyXSk7CisJCSAgICBzY3AtPm1pZGlfbnVtYmVyKys7CisJCX0KKwkgICAgfQorCX0K KworCXRpbWVyX3NldHZhbHMoc2NwLCA2MCwgMTAwKTsKKworCXRpbWVyX3N0YXJ0KHNjcCk7CisJ dGltZXJfc3RvcChzY3ApOworCS8qCisJICogYWN0dWFsbHksIGlmIHdlJ3JlIGluIHJkb25seSBt b2RlLCB3ZSBzaG91bGQgc3RhcnQgdGhlIHRpbWVyCisJICovCisJLyoKKwkgKiBUT0RPOiBIYW5k bGUgcmVjb3JkaW5nIG5vdworCSAqLworCisJc2NwLT5vdXRfd2F0ZXIgPSBNSURJUV9TSVpFKHNj cC0+b3V0X3EpIC8gMjsKKworCXNjcC0+YnVzeSA9IDE7CisJbXR4X3VubG9jaygmc2NwLT5zZXFf bG9jayk7CisKKwlTRVFfREVCVUcoMixwcmludGYoInNlcV9vcGVuOiBvcGVuZWQsIG1vZGUgJXMu XG4iLAorCQkgICAgc2NwLT5tdXNpYyA/ICJtdXNpYyIgOiAic2VxdWVuY2VyIikpOworCVNFUV9E RUJVRygyLHByaW50ZigiU2VxdWVuY2VyICVkICVwIG9wZW5lZCBtYXh1bml0cyAlZCBtaWRpX251 bWJlciAlZDpcbiIsIHNjcC0+dW5pdCwgc2NwLCBzY3AtPm1heHVuaXRzLCBzY3AtPm1pZGlfbnVt YmVyKSk7CisJZm9yIChpPTA7aTxzY3AtPm1pZGlfbnVtYmVyO2krKykKKwkJU0VRX0RFQlVHKDMs cHJpbnRmKCIgIG1pZGkgJWQgJXBcbiIsIGksIHNjcC0+bWlkaXNbaV0pKTsKKworCXJldHVybiAw OworfQorCisvKgorICogc2VxX2Nsb3NlCisgKi8KK2ludAorc2VxX2Nsb3NlKHN0cnVjdCBjZGV2 ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJaW50 IGk7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisJaW50IHJldDsK KworCWlmIChzY3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOworCisJU0VRX0RFQlVHKDIs cHJpbnRmKCJzZXFfY2xvc2U6IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpKTsKKworCW10eF9sb2Nr KCZzY3AtPnNlcV9sb2NrKTsKKworCXJldCA9IEVOWElPOworCWlmIChzY3AtPmJ1c3kgPT0gMCkK KwkgICAgZ290byBlcnI7CisKKwlzZXFfcmVzZXQoc2NwKTsKKwlzZXFfc3luYyhzY3ApOworCisJ Zm9yIChpID0gMCA7IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBpKyspCisJICAgIGlmIChzY3AtPm1p ZGlzW2ldKQorCQlTWU5USF9DTE9TRShzY3AtPm1pZGlzW2ldKTsKKworCW1pZGltYXBwZXJfY2xv c2Uoc2NwLT5tYXBwZXIsIHNjcC0+bWFwcGVyX2Nvb2tpZSk7CisKKwl0aW1lcl9zdG9wKHNjcCk7 CisKKwlzY3AtPmJ1c3kgPSAwOworCXJldCA9IDA7CisKK2VycjoKKwlTRVFfREVCVUcoMyxwcmlu dGYoInNlcV9jbG9zZTogY2xvc2VkIHJldCA9ICVkLlxuIiwgcmV0KSk7CisJbXR4X3VubG9jaygm c2NwLT5zZXFfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitzZXFfcmVhZChzdHJ1Y3Qg Y2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKnVpbywgaW50IGlvZmxhZykKK3sKKwlpbnQgcmV0dmFs LCB1c2VkOworCXN0cnVjdCBzZXFfc29mdGMgKnNjcCA9IGlfZGV2LT5zaV9kcnYxOworI2RlZmlu ZSBTRVFfUlNJWkUgMzIKKwl1X2NoYXIgYnVmW1NFUV9SU0laRV07CisKKwlpZiAoc2NwID09IE5V TEwpCisJICAgIHJldHVybiBFTlhJTzsKKworCVNFUV9ERUJVRyg3LHByaW50Zigic2VxX3JlYWQ6 IHVuaXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHNjcC0+dW5pdCwgdWlvLT51aW9fcmVzaWQp KTsKKworCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlpZiAoKHNjcC0+ZmZsYWdzICYgRlJF QUQpID09IDApIHsKKwkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfcmVhZDogdW5pdCAlZCBp cyBub3QgZm9yIHJlYWRpbmcuXG4iLAorCQkJc2NwLT51bml0KSk7CisJICAgIHJldHZhbCA9IEVJ TzsKKwkgICAgZ290byBlcnIxOworCX0KKworCS8qCisJICogQmVnaW4gcmVjb3JkaW5nLgorCSAq LworCS8qCisJICogaWYgKChzY3AtPmZsYWdzICYgU0VRX0ZfUkVBRElORykgPT0gMCkKKwkgKi8K KwkvKgorCSAqIFRPRE8sIHN0YXJ0IHJlY29yZGluZyBpZiBub3QgYWxyZWFkCisJICovCisKKwkv KgorCSAqIEkgdGhpbmsgdGhlIHNlbWFudGljcyBhcmUgdG8gcmV0dXJuIGFzIHNvb24KKwkgKiBh cyBwb3NzaWJsZS4KKwkgKiBTZWNvbmQgdGhvdWdodCwgaXQgZG9lbnMndCBzZWVtIGxpa2UgbWlk aW1vdXRhaW4KKwkgKiBleHBlY3RzIHRoYXQgYXQgYWxsLgorCSAqIFRPRE86IExvb2sgdXAgaW4g c29tZSBzb3J0IG9mIHNwZWMKKwkgKi8KKworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsK KwkgICAgd2hpbGUgKE1JRElRX0VNUFRZKHNjcC0+aW5fcSkpIHsKKwkJcmV0dmFsID0gRVdPVUxE QkxPQ0s7CisJCS8qCisJCSAqIEkgd2lzaCBJIGtuZXcgd2hpY2ggb25lIHRvIGNhcmUgYWJvdXQK KwkJICovCisKKwkJaWYgKHNjcC0+ZmZsYWdzICYgT19OT05CTE9DSykKKwkJICAgIGdvdG8gZXJy MTsKKwkJaWYgKGlvZmxhZyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3RvIGVycjE7CisKKwkJcmV0 dmFsID0gY3Zfd2FpdF9zaWcoJnNjcC0+aW5fY3YsICZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHJl dHZhbCA9PSBFSU5UUikKKwkJICAgIGdvdG8gZXJyMTsKKwkgICAgfQorCisJICAgIHVzZWQgPSBN SU4oTUlESVFfTEVOKHNjcC0+aW5fcSksIHVpby0+dWlvX3Jlc2lkKTsKKwkgICAgdXNlZCA9IE1J Tih1c2VkLCBTRVFfUlNJWkUpOworCisJICAgIFNFUV9ERUJVRyg4LHByaW50ZigibWlkaXJlYWQ6 IHVpb21vdmUgY2M9JWRcbiIsIHVzZWQpKTsKKwkgICAgTUlESVFfREVRKHNjcC0+aW5fcSwgYnVm LCB1c2VkKTsKKwkgICAgcmV0dmFsID0gdWlvbW92ZShidWYsIHVzZWQsIHVpbyk7CisJICAgIGlm IChyZXR2YWwpCisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR2YWwgPSAwOworZXJyMToKKwltdHhf dW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlTRVFfREVCVUcoNixwcmludGYoInNlcV9yZWFkOiBy ZXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHJldHZhbCwgdWlvLT51aW9fcmVzaWQpKTsKKwor CXJldHVybiByZXR2YWw7Cit9CisKK2ludAorc2VxX3dyaXRlKHN0cnVjdCBjZGV2ICppX2Rldiwg c3RydWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQoreworCXVfY2hhciBldmVudFtFVl9TWl0sIG5l d2V2ZW50W0VWX1NaXSwgZXZfY29kZTsKKwlzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AgPSBpX2Rldi0+ c2lfZHJ2MTsKKwlpbnQgcmV0dmFsOworCWludCB1c2VkOworCisJU0VRX0RFQlVHKDcscHJpbnRm KCJzZXFfd3JpdGU6IHVuaXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHNjcC0+dW5pdCwgdWlv LT51aW9fcmVzaWQpKTsKKworCWlmIChzY3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOwor CisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCisJaWYgKChzY3AtPmZmbGFncyAmIEZXUklU RSkgPT0gMCkgeworCSAgICBTRVFfREVCVUcoMixwcmludGYoInNlcV93cml0ZTogdW5pdCAlZCBp cyBub3QgZm9yIHdyaXRpbmcuXG4iLAorCQkJc2NwLT51bml0KSk7CisJICAgIHJldHZhbCA9IEVJ TzsKKwkgICAgZ290byBlcnIwOworCX0KKworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsK KwkgICAgd2hpbGUgKE1JRElRX0FWQUlMKHNjcC0+b3V0X3EpID09IDApIHsKKwkJcmV0dmFsID0g RVdPVUxEQkxPQ0s7CisJCWlmIChzY3AtPmZmbGFncyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3Rv IGVycjA7CisJCWlmIChpb2ZsYWcgJiBPX05PTkJMT0NLKQorCQkgICAgZ290byBlcnIwOworCQlT RVFfREVCVUcoOCxwcmludGYoInNlcV93cml0ZSBjdndhaXRcbiIpKTsKKworCQlzY3AtPnBsYXlp bmcgPSAxOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwkJY3ZfYnJvYWRjYXN0KCZz Y3AtPnN0YXRlX2N2KTsKKworCQlyZXR2YWwgPSBjdl93YWl0X3NpZygmc2NwLT5vdXRfY3YsICZz Y3AtPnNlcV9sb2NrKTsKKwkJICAgIC8qCisJCSAgICAgKiBXZSBzbGVwdCwgbWF5YmUgdGhpbmdz IGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0CisJCSAgICAgKiBkeWluZyBjaGVjaworCQkgICAgICov CisJCWlmIChyZXR2YWwgPT0gRUlOVFIpCisJCSAgICBnb3RvIGVycjA7CisjaWYgMAorCQkgICAg LyoKKwkJICAgICAqIFVzZWxlc3MgdGVzdAorCQkgICAgICovCisJCWlmIChzY3AgIT0gaV9kZXYt PnNpX2RydjEpCisJCSAgICByZXR2YWwgPSBFTlhJTzsKKyNlbmRpZgorCSAgICB9CisKKwkgICAg dXNlZCA9IE1JTih1aW8tPnVpb19yZXNpZCwgNCk7CisKKwkgICAgU0VRX0RFQlVHKDgscHJpbnRm KCJzZXFvdXQ6IHJlc2lkICVkIGxlbiAlamQgYXZhaWwgJWpkXG4iLAorCQkJdWlvLT51aW9fcmVz aWQsIChpbnRtYXhfdClNSURJUV9MRU4oc2NwLT5vdXRfcSksCisJCQkoaW50bWF4X3QpTUlESVFf QVZBSUwoc2NwLT5vdXRfcSkpKTsKKworCSAgICBpZiAodXNlZCAhPSA0KSB7CisJCXJldHZhbCA9 IEVOWElPOworCQlnb3RvIGVycjA7CisJICAgIH0KKworCSAgICByZXR2YWwgPSB1aW9tb3ZlKGV2 ZW50LCB1c2VkLCB1aW8pOworCSAgICBpZiAocmV0dmFsKQorCQlnb3RvIGVycjA7CisKKwkgICAg ZXZfY29kZSA9IGV2ZW50WzBdOworCSAgICBTRVFfREVCVUcoOCxwcmludGYoInNlcV93cml0ZTog dW5pdCAlZCwgZXZlbnQgJXMuXG4iLAorCQkJc2NwLT51bml0LCBtaWRpX2NtZG5hbWUoZXZfY29k ZSwgY21kdGFiX3NlcWV2ZW50KSkpOworCisJICAgIC8qIEhhdmUgYSBsb29rIGF0IHRoZSBldmVu dCBjb2RlLiAqLworCSAgICBpZiAoZXZfY29kZSA9PSBTRVFfRlVMTFNJWkUpIHsKKworCQkvKgor CQkgKiBUT0RPOiByZXN0b3JlIGNvZGUgZm9yIFNFUV9GVUxMU0laRQorCQkgKi8KKyNpZiAwCisJ CS8qIEEgbG9uZyBldmVudCwgdGhlc2UgYXJlIHRoZSBwYXRjaGVzL3NhbXBsZXMgZm9yIGEgc3lu dGhlc2l6ZXIuICovCisJCW1pZGl1bml0ID0gKih1X3Nob3J0ICopJmV2ZW50WzJdOworCQltdHhf bG9jaygmc2QtPnNlcV9sb2NrKTsKKwkJcmV0ID0gbG9va3VwX21pZGlkZXYoc2NwLCBtaWRpdW5p dCwgTE9PS1VQX09QRU4sICZtZCk7CisJCW10eF91bmxvY2soJnNkLT5zZXFfbG9jayk7CisJCWlm IChyZXQgIT0gMCkKKwkJICAgIHJldHVybiAocmV0KTsKKworCQlTRVFfREVCVUcocHJpbnRmKCJz ZXFfd3JpdGU6IGxvYWRpbmcgYSBwYXRjaCB0byB0aGUgdW5pdCAlZC5cbiIsIG1pZGl1bml0KSk7 CisKKwkJcmV0ID0gbWQtPnN5bnRoLmxvYWRwYXRjaChtZCwgKihzaG9ydCAqKSZldmVudFswXSwg YnVmLCBwICsgNCwgY291bnQsIDApOworCQlyZXR1cm4gKHJldCk7CisjZWxzZQorCQkvKgorCQkg KiBGb3Igbm93LCBqdXN0IGZsdXNoIHRoZSBkYXJuIGJ1ZmZlcgorCQkgKi8KKwkJU0VRX0RFQlVH KDIscHJpbnRmKCJzZXFfd3JpdGU6IFNFUV9GVUxMU0laRSBmbHVzaW5nIGJ1ZmZlci5cbiIpKTsK KwkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCkgeworCQkgICAgcmV0dmFsID0gdWlvbW92ZShl dmVudCwgRVZfU1osIHVpbyk7CisJCSAgICBpZiAocmV0dmFsKQorCQkJZ290byBlcnIwOworCisJ CX0KKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnIwOworI2VuZGlmCisJICAgIH0KKworCSAgICBy ZXR2YWwgPSBFSU5WQUw7CisJICAgIGlmIChldl9jb2RlID49IDEyOCkgeworCisJCS8qCisJCSAq IFNvbWUgc29ydCBvZiBhbiBleHRlbmRlZCBldmVudC4gVGhlIHNpemUgaXMgZWlnaHQgYnl0ZXMu CisJCSAqIHNjb29wIGV4dHJhIGluZm8uCisJCSAqLworCQlpZiAoc2NwLT5tdXNpYyAmJiBldl9j b2RlID09IFNFUV9FWFRFTkRFRCkgeworCQkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfd3Jp dGU6IGludmFsaWQgbGV2ZWwgdHdvIGV2ZW50ICV4LlxuIiwgZXZfY29kZSkpOworCQkgICAgZ290 byBlcnIwOworCQl9CisJCWlmICh1aW9tb3ZlKChjYWRkcl90KSZldmVudFs0XSwgNCwgdWlvKSkg eworCQkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfd3JpdGU6IHVzZXIgbWVtb3J5IG1hbmds ZWQ/XG4iKSk7CisJCSAgICBnb3RvIGVycjA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJLyoKKwkJ ICogU2l6ZSBmb3VyIGV2ZW50LgorCQkgKi8KKwkJaWYgKHNjcC0+bXVzaWMpIHsKKwkJICAgIFNF UV9ERUJVRygyLHByaW50Zigic2VxX3dyaXRlOiBmb3VyIGJ5dGUgZXZlbnQgaW4gbXVzaWMgbW9k ZS5cbiIpKTsKKwkJICAgIGdvdG8gZXJyMDsKKwkJfQorCSAgICB9CisJICAgIGlmIChldl9jb2Rl ID09IFNFUV9NSURJUFVUQykgeworCQkvKgorCQkgKiBUT0RPOiBldmVudFsyXSBpcyB1bml0IG51 bWJlciB0byByZWNlaXZlIGNoYXIuICBSYW5nZSBjaGVjaworCQkgKiBpdAorCQkgKi8KKwkgICAg fQorCisJICAgIGlmIChzY3AtPm11c2ljKSB7CisjaWYgbm90X2V2ZXJfZXZlcgorCQlpZiAoZXZl bnRbMF0gPT0gRVZfVElNSU5HICYmIAorCQkJKGV2ZW50WzFdID09IFRNUl9TVEFSVCB8fCBldmVu dFsxXSA9PSBUTVJfU1RPUCkgKSB7CisJCSAgICAvKgorCQkgICAgICogRm9yIG5vdywgdHJ5IHRv IG1ha2UgbWlkaW1vdXRhaW4gd29yayBieQorCQkgICAgICogZm9yY2luZyB0aGVzZSBldmVudHMg dG8gYmUgcHJvY2Vzc2VkIGltbWVkaWF0bHkKKwkJICAgICAqLworCQkgICAgc2VxX3Byb2Nlc3Nl dmVudChzY3AsIGV2ZW50KTsKKwkJfQorCQllbHNlCisJCSAgICBNSURJUV9FTlEoc2NwLT5vdXRf cSwgZXZlbnQsIEVWX1NaKTsKKyNlbHNlCisJCU1JRElRX0VOUShzY3AtPm91dF9xLCBldmVudCwg RVZfU1opOworI2VuZGlmCisJICAgIH0gZWxzZSB7CisJCWlmIChzZXFfY29udmVydG9sZChldmVu dCwgbmV3ZXZlbnQpID4gMCkKKwkJICAgIE1JRElRX0VOUShzY3AtPm91dF9xLCBuZXdldmVudCwg RVZfU1opOworI2lmIDAKKwkJZWxzZQorCQkgICAgZ290byBlcnIwOworI2VuZGlmCisJICAgIH0K KworCX0KKworCXNjcC0+cGxheWluZyA9IDE7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2 KTsKKwljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKworCXJldHZhbCA9IDA7CisKK2VycjA6 CisJU0VRX0RFQlVHKDYscHJpbnRmKCJzZXFfd3JpdGUgZG9uZTogbGVmdG92ZXIgYnVmZmVyIGxl bmd0aCAlZCByZXR2YWwgJWRcbiIsCisJCSAgICB1aW8tPnVpb19yZXNpZCwgcmV0dmFsKSk7CisJ bXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50Citz ZXFfaW9jdGwoc3RydWN0IGNkZXYgKmlfZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGFyZywgaW50 IG1vZGUsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBtaWRpdW5pdCwgcmV0LCB0bXA7CisJ c3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisJc3RydWN0IHN5bnRoX2lu Zm8gKnN5bnRoaW5mbzsKKwlzdHJ1Y3QgbWlkaV9pbmZvICptaWRpaW5mbzsKKwl1X2NoYXIgZXZl bnRbRVZfU1pdOworCXVfY2hhciBuZXdldmVudFtFVl9TWl07CisKKwlrb2JqX3QgbWQ7CisJLyoK KwkgKiBzdHJ1Y3Qgc25kX3NpemUgKnNuZHNpemU7CisJICovCisKKwlpZiAoc2NwID09IE5VTEwp CisJICAgIHJldHVybiBFTlhJTzsKKworCVNFUV9ERUJVRyg2LHByaW50Zigic2VxX2lvY3RsOiB1 bml0ICVkLCBjbWQgJXMuXG4iLAorCQkgICAgc2NwLT51bml0LCBtaWRpX2NtZG5hbWUoY21kLCBj bWR0YWJfc2VxaW9jdGwpKSk7CisKKwlyZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwkgICAg Y2FzZSBTTkRDVExfU0VRX0dFVFRJTUU6CisJCS8qCisJCSAqIGlvY3RsIG5lZWRlZCBieSBsaWJ0 c2UKKwkJICovCisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJKihpbnQgKilhcmcgPSB0 aW1lcl9ub3coc2NwKTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJV Ryg2LHByaW50Zigic2VxX2lvY3RsOiBnZXR0aW1lICVkLlxuIiwgKihpbnQgKilhcmcpKTsKKwkJ cmV0ID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2UgU05EQ1RMX1RNUl9NRVRST05PTUU6CisJCS8q IGZhbGx0aHJvdWdoICovCisJICAgIGNhc2UgU05EQ1RMX1RNUl9TT1VSQ0U6CisJCS8qCisJCSAq IE5vdCBpbXBsZW1lbnRlZAorCQkgKi8KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2Ug U05EQ1RMX1RNUl9URU1QTzoKKwkJZXZlbnRbMV0gPSBUTVJfVEVNUE87CisJCWdvdG8gdGltZXJl dmVudDsKKwkgICAgY2FzZSBTTkRDVExfVE1SX1RJTUVCQVNFOgorCQlldmVudFsxXSA9IFRNUl9U SU1FUkJBU0U7CisJCWdvdG8gdGltZXJldmVudDsKKwkgICAgY2FzZSBTTkRDVExfVE1SX1NUQVJU OgorCQlldmVudFsxXSA9IFRNUl9TVEFSVDsKKwkJZ290byB0aW1lcmV2ZW50OworCSAgICBjYXNl IFNORENUTF9UTVJfU1RPUDoKKwkJZXZlbnRbMV0gPSBUTVJfU1RPUDsKKwkJZ290byB0aW1lcmV2 ZW50OworCSAgICBjYXNlIFNORENUTF9UTVJfQ09OVElOVUU6CisJCWV2ZW50WzFdID0gVE1SX0NP TlRJTlVFOworCSAgICB0aW1lcmV2ZW50OgorCQlldmVudFswXSA9IEVWX1RJTUlORzsKKwkJZXZl bnRbNF0gPSAqKGludCAqKWFyZyAmIDB4RkY7CisJCWV2ZW50WzVdID0gKCooaW50ICopYXJnID4+ IDgpICYgMHhGRjsKKwkJZXZlbnRbNl0gPSAoKihpbnQgKilhcmcgPj4gMTYpICYgMHhGRjsKKwkJ ZXZlbnRbN10gPSAoKihpbnQgKilhcmcgPj4gMjQpICYgMHhGRjsKKwkJbXR4X2xvY2soJnNjcC0+ c2VxX2xvY2spOworCQlpZiAoIXNjcC0+bXVzaWMpIHsKKwkJICAgIHJldCA9IEVJTlZBTDsKKwkJ ICAgIG10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkgICAgYnJlYWs7CisJCX0KKwkJc2Vx X3Byb2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7 CisJCWJyZWFrOworCSAgICBjYXNlIFNORENUTF9UTVJfU0VMRUNUOgorCQlTRVFfREVCVUcoMixw cmludGYoInNlcV9pb2N0bDogU05EQ1RMX1RNUl9TRUxFQ1Qgbm90IHN1cHBvcnRlZFxuIikpOwor CQlyZXQgPSBFSU5WQUw7CisJCWJyZWFrOworCSAgICBjYXNlIFNORENUTF9TRVFfU1lOQzoKKwkJ aWYgKG1vZGUgPT0gT19SRE9OTFkpIHsKKwkJICAgIHJldCA9IDA7CisJCSAgICBicmVhazsKKwkJ fQorCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCXJldCA9IHNlcV9zeW5jKHNjcCk7CisJ CW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExf U0VRX1BBTklDOgorCQkvKiBmYWxsdGhyb3VnaCAqLworCSAgICBjYXNlIFNORENUTF9TRVFfUkVT RVQ6CisJCS8qCisJCSAqIFNORENUTF9TRVFfUEFOSUMgPT0gU05EQ1RMX1NFUV9SRVNFVAorCQkg Ki8KKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQlzZXFfcmVzZXQoc2NwKTsKKwkJbXR4 X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNl IFNORENUTF9TRVFfVEVTVE1JREk6CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJLyoK KwkJICogVE9ETzogU05EQ1RMX1NFUV9URVNUTUlESSBub3cgbWVhbnMgImNhbiBJIHdyaXRlIHRv IHRoZQorCQkgKiBkZXZpY2U/Ii4KKwkJICovCisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2sp OworCQlicmVhazsKKyNpZiAwCisJICAgIGNhc2UgU05EQ1RMX1NFUV9HRVRJTkNPVU5UOgorCQlp ZiAobW9kZSA9PSBPX1dST05MWSkKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxzZSB7CisJ CSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCSAgICAqKGludCAqKWFyZyA9IHNjcC0+ aW5fcS5ybDsKKwkJICAgIG10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkgICAgU0VRX0RF QlVHKHByaW50Zigic2VxX2lvY3RsOiBpbmNvdW50ICVkLlxuIiwgKihpbnQgKilhcmcpKTsKKwkJ fQorCQlyZXQgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExfU0VRX0dFVE9VVENPVU5U OgorCQlpZiAobW9kZSA9PSBPX1JET05MWSkKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxz ZSB7CisJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCSAgICAqKGludCAqKWFyZyA9 IHNjcC0+b3V0X3EuZmw7CisJCSAgICBtdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJICAg IFNFUV9ERUJVRyhwcmludGYoInNlcV9pb2N0bDogb3V0Y291bnQgJWQuXG4iLCAqKGludCAqKWFy ZykpOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgU05EQ1RM X1NFUV9DVFJMUkFURToKKwkJaWYgKCooaW50ICopYXJnICE9IDApIHsKKwkJICAgIHJldCA9IEVJ TlZBTDsKKwkJICAgIGJyZWFrOworCQl9CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJ KihpbnQgKilhcmcgPSBzY3AtPnRpbWVyYmFzZTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9j ayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2VxX2lvY3RsOiBjdHJscmF0ZSAlZC5cbiIsICoo aW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCQkvKgorCQkgKiBUT0RPOiBpb2N0 bCBTTkRDVExfU0VRX1JFU0VUU0FNUExFUworCQkgKi8KKyNpZiAwCisJICAgIGNhc2UgU05EQ1RM X1NFUV9SRVNFVFNBTVBMRVM6CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJcmV0ID0g bG9va3VwX21pZGlkZXYoc2NwLCAqKGludCAqKWFyZywgTE9PS1VQX09QRU4sICZtZCk7CisJCW10 eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlpZiAocmV0ICE9IDApCisJCSAgICBicmVhazsK KwkJcmV0ID0gbWlkaV9pb2N0bChNSURJTUtERVYobWFqb3IoaV9kZXYpLCAqKGludCAqKWFyZywg U05EX0RFVl9NSURJTiksIGNtZCwgYXJnLCBtb2RlLCB0ZCk7CisJCWJyZWFrOworI2VuZGlmCisJ ICAgIGNhc2UgU05EQ1RMX1NFUV9OUlNZTlRIUzoKKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2sp OworCQkgICAgKihpbnQgKilhcmcgPSBzY3AtPm1pZGlfbnVtYmVyOworCQltdHhfdW5sb2NrKCZz Y3AtPnNlcV9sb2NrKTsKKwkJU0VRX0RFQlVHKDMscHJpbnRmKCJzZXFfaW9jdGw6IHN5bnRocyAl ZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlIFNO RENUTF9TRVFfTlJNSURJUzoKKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQlpZiAoc2Nw LT5tdXNpYykKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxzZSB7CisJCSAgICAvKgorCQkg ICAgICogVE9ETzogY291bnQgdGhlIG51bWJkZXIgb2YgZGV2aWNlcyB0aGF0IGNhbiBXUklURVJB VworCQkgICAgICovCisJCSAgICAqKGludCAqKWFyZyA9IHNjcC0+bWlkaV9udW1iZXI7CisJCX0K KwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2Vx X2lvY3RsOiBtaWRpcyAlZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFr OworCQkvKgorCQkgKiBUT0RPOiBpb2N0bCBTTkRDVExfU1lOVEhfTUVNQVZMCisJCSAqLworI2lm IDAKKwkgICAgY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgorCQltdHhfbG9jaygmc2NwLT5zZXFf bG9jayk7CisJCXJldCA9IGxvb2t1cF9taWRpZGV2KHNjcCwgKihpbnQgKilhcmcsIExPT0tVUF9P UEVOLCAmbWQpOworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHJldCAhPSAw KQorCQkgICAgYnJlYWs7CisJCXJldCA9IG1pZGlfaW9jdGwoTUlESU1LREVWKG1ham9yKGlfZGV2 KSwgKihpbnQgKilhcmcsIFNORF9ERVZfTUlESU4pLCBjbWQsIGFyZywgbW9kZSwgdGQpOworCQli cmVhazsKKyNlbmRpZgorCSAgICBjYXNlIFNORENUTF9TRVFfT1VUT0ZCQU5EOgorCQlmb3IgKHJl dCA9IDA7IHJldCA8IEVWX1NaOyByZXQrKykKKwkJICAgIGV2ZW50W3JldF0gPSAodV9jaGFyKWFy Z1swXTsKKworCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCWlmIChzY3AtPm11c2ljKQor CQkgICAgcmV0ID0gc2VxX3Byb2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwkJZWxzZSB7CisJCSAg ICBpZiAoc2VxX2NvbnZlcnRvbGQoZXZlbnQsIG5ld2V2ZW50KSA+IDApCisJCQlyZXQgPSBzZXFf cHJvY2Vzc2V2ZW50KHNjcCwgbmV3ZXZlbnQpOworCQkgICAgZWxzZSByZXQgPSBFSU5WQUw7CisJ CX0KKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCWJyZWFrOworCSAgICBjYXNlIFNO RENUTF9TWU5USF9JTkZPOgorCQlzeW50aGluZm8gPSAoc3RydWN0IHN5bnRoX2luZm8gKilhcmc7 CisJCW1pZGl1bml0ID0gc3ludGhpbmZvLT5kZXZpY2U7CisJCW10eF9sb2NrKCZzY3AtPnNlcV9s b2NrKTsKKwkJaWYgKHNlcV9mZXRjaF9taWQoc2NwLCBtaWRpdW5pdCwgJm1kKSA9PSAwKSB7CisJ CSAgICBiemVybyhzeW50aGluZm8sIHNpemVvZigqc3ludGhpbmZvKSk7CisJCSAgICBzeW50aGlu Zm8tPm5hbWVbMF0gPSAnZic7CisJCSAgICBzeW50aGluZm8tPm5hbWVbMV0gPSAnYSc7CisJCSAg ICBzeW50aGluZm8tPm5hbWVbMl0gPSAnayc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbM10gPSAn ZSc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbNF0gPSAncyc7CisJCSAgICBzeW50aGluZm8tPm5h bWVbNV0gPSAneSc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbNl0gPSAnbic7CisJCSAgICBzeW50 aGluZm8tPm5hbWVbN10gPSAndCc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbOF0gPSAnaCc7CisJ CSAgICBzeW50aGluZm8tPmRldmljZSA9IG1pZGl1bml0OworCQkgICAgc3ludGhpbmZvLT5zeW50 aF90eXBlID0gU1lOVEhfVFlQRV9NSURJOworCQkgICAgc3ludGhpbmZvLT5jYXBhYmlsaXRpZXMg PSBzY3AtPm1pZGlfZmxhZ3NbbWlkaXVuaXRdOworCQkgICAgcmV0ID0gMDsKKwkJfSBlbHNlCisJ CSAgICByZXQgPSBFSU5WQUw7CisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlicmVh azsKKwkgICAgY2FzZSBTTkRDVExfTUlESV9JTkZPOgorCQltaWRpaW5mbyA9IChzdHJ1Y3QgbWlk aV9pbmZvICopYXJnOworCQltaWRpdW5pdCA9IG1pZGlpbmZvLT5kZXZpY2U7CisJCW10eF9sb2Nr KCZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHNlcV9mZXRjaF9taWQoc2NwLCBtaWRpdW5pdCwgJm1k KSA9PSAwKSB7CisJCSAgICBiemVybyhtaWRpaW5mbywgc2l6ZW9mKCptaWRpaW5mbykpOworCQkg ICAgbWlkaWluZm8tPm5hbWVbMF0gPSAnZic7CisJCSAgICBtaWRpaW5mby0+bmFtZVsxXSA9ICdh JzsKKwkJICAgIG1pZGlpbmZvLT5uYW1lWzJdID0gJ2snOworCQkgICAgbWlkaWluZm8tPm5hbWVb M10gPSAnZSc7CisJCSAgICBtaWRpaW5mby0+bmFtZVs0XSA9ICdtJzsKKwkJICAgIG1pZGlpbmZv LT5uYW1lWzVdID0gJ2knOworCQkgICAgbWlkaWluZm8tPm5hbWVbNl0gPSAnZCc7CisJCSAgICBt aWRpaW5mby0+bmFtZVs3XSA9ICdpJzsKKwkJICAgIG1pZGlpbmZvLT5kZXZpY2UgPSBtaWRpdW5p dDsKKwkJICAgIG1pZGlpbmZvLT5jYXBhYmlsaXRpZXMgPSBzY3AtPm1pZGlfZmxhZ3NbbWlkaXVu aXRdOworCQkgICAgLyoKKwkJICAgICAqIFRPRE86IFdoYXQgZGV2dHlwZT8KKwkJICAgICAqLwor CQkgICAgbWlkaWluZm8tPmRldl90eXBlID0gMHgwMTsKKwkJICAgIHJldCA9IDA7CisJCX0gZWxz ZQorCQkgICAgcmV0ID0gRUlOVkFMOworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJ YnJlYWs7CisJICAgIGNhc2UgU05EQ1RMX1NFUV9USFJFU0hPTEQ6CisJCW10eF9sb2NrKCZzY3At PnNlcV9sb2NrKTsKKwkJUkFOR0UoKihpbnQgKilhcmcsIDEsIE1JRElRX1NJWkUoc2NwLT5vdXRf cSkgLSAxKTsKKwkJc2NwLT5vdXRfd2F0ZXIgPSAqKGludCAqKWFyZzsKKwkJbXR4X3VubG9jaygm c2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2VxX2lvY3RsOiB3YXRlciAl ZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlIFNO RENUTF9NSURJX1BSRVRJTUU6CisJCXRtcCA9ICooaW50ICopYXJnOworCQlpZiAodG1wIDwgMCkK KwkJICAgIHRtcCA9IDA7CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJc2NwLT5wcmVf ZXZlbnRfdGltZW91dCA9IChoeiAqIHRtcCkgLyAxMDsKKwkJKihpbnQgKilhcmcgPSBzY3AtPnBy ZV9ldmVudF90aW1lb3V0OworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJU0VRX0RF QlVHKDMscHJpbnRmKCJzZXFfaW9jdGw6IHByZXRpbWUgJWQuXG4iLCAqKGludCAqKWFyZykpOwor CQlyZXQgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExfRk1fNE9QX0VOQUJMRToKKwkg ICAgY2FzZSBTTkRDVExfUE1HUl9JRkFDRToKKwkgICAgY2FzZSBTTkRDVExfUE1HUl9BQ0NFU1M6 CisJCS8qCisJCSAqIFBhdGNoIG1hbmFnZXIgYW5kIGZtIGFyZSBkZWQsIGRlZCwgZGVkLgorCQkg Ki8KKwkJLyogZmFsbHRocm91Z2ggKi8KKwkgICAgZGVmYXVsdDoKKwkJLyoKKwkJICogVE9ETzog Q29uc2lkZXIgaW9jdGwgZGVmYXVsdCBjYXNlLgorCQkgKiBPbGQgY29kZSB1c2VkIHRvCisJCSAq IGlmICgoc2NwLT5mZmxhZ3MgJiBPX0FDQ01PREUpID09IEZSRUFEKSB7CisJCSAqCXJldCA9IEVJ TzsKKwkJICoJYnJlYWs7CisJCSAqIH0KKwkJICogVGhlbiBwYXNzIG9uIHRoZSBpb2N0bCB0byBk ZXZpY2UgMAorCQkgKi8KKwkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfaW9jdGw6IHVuc3VwcG9y dGVkIElPQ1RMICVsZC5cbiIsIGNtZCkpOworCQlyZXQgPSBFSU5WQUw7CisJCWJyZWFrOworCX0K KworCXJldHVybiByZXQ7Cit9CisKK2ludAorc2VxX3BvbGwoc3RydWN0IGNkZXYgKmlfZGV2LCBp bnQgZXZlbnRzLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgcmV0LCBsaW07CisJc3RydWN0 IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisKKwlTRVFfREVCVUcoMywgcHJpbnRm KCJzZXFfcG9sbDogdW5pdCAlZC5cbiIsIHNjcC0+dW5pdCkpOworCXByaW50Zigic2VxX3BvbGw6 IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOwor CisJcmV0ID0gMDsKKworCS8qIExvb2sgdXAgdGhlIGFwcm9wcmlhdGUgcXVldWUgYW5kIHNlbGVj dCBpdC4gKi8KKwlpZiAoKGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSkpICE9IDApIHsK KwkgICAgLyogU3RhcnQgcGxheWluZy4gKi8KKwkgICAgc2NwLT5wbGF5aW5nID0gMTsKKwkgICAg Y3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2KTsKKwkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPm91 dF9jdik7CisKKwkgICAgbGltID0gc2NwLT5vdXRfd2F0ZXI7CisKKwkgICAgaWYgKE1JRElRX0FW QUlMKHNjcC0+b3V0X3EpIDwgbGltKQorCQkvKiBObyBlbm91Z2ggc3BhY2UsIHJlY29yZCBzZWxl Y3QuICovCisJCXNlbHJlY29yZCh0ZCwgJnNjcC0+b3V0X3NlbCk7CisJICAgIGVsc2UKKwkJLyog V2UgY2FuIHdyaXRlIG5vdy4gKi8KKwkJcmV0IHw9IGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdS Tk9STSk7CisJfQorCisJaWYgKChldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpICE9IDAp IHsKKwkgICAgLyogVE9ETzogU3RhcnQgcmVjb3JkaW5nLiAqLworCisJICAgIC8qIEZpbmQgb3V0 IHRoZSBib3VuZGFyeS4gKi8KKwkgICAgbGltID0gMTsKKwkgICAgaWYgKE1JRElRX0xFTihzY3At PmluX3EpIDwgbGltKQorCQkvKiBObyBkYXRhIHJlYWR5LCByZWNvcmQgc2VsZWN0LiAqLworCQlz ZWxyZWNvcmQodGQsICZzY3AtPmluX3NlbCk7CisJICAgIGVsc2UKKwkJLyogV2UgY2FuIHJlYWQg bm93LiAqLworCQlyZXQgfD0gZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pOworCX0KKwor CW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCisJcmV0dXJuIChyZXQpOworfQorI2lmIDAK K3N0YXRpYyB2b2lkCitzZWluX3F0cih2b2lkICpwLCB2b2lkIC8qIG1pZGlkZXZfaW5mbyAqLyAq bWQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwOworCisJc2NwID0gKHN0cnVjdCBzZXFfc29m dGMgKilwOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCisJLyogUmVzdGFydCBwbGF5 aW5nIGlmIHdlIGhhdmUgdGhlIGRhdGEgdG8gb3V0cHV0LiAqLworCWlmIChzY3AtPnF1ZXVlb3V0 X3BlbmRpbmcpCisJCXNlcV9jYWxsYmFjayhzY3AsIFNFUV9DQl9TVEFSVCB8IFNFUV9DQl9XUik7 CisJLyogQ2hlY2sgdGhlIG1pZGkgZGV2aWNlIGlmIHdlIGFyZSByZWFkaW5nLiAqLworCWlmICgo c2NwLT5mbGFncyAmIFNFUV9GX1JFQURJTkcpICE9IDApCisJCXNlcV9taWRpaW5wdXQoc2NwLCBt ZCk7CisKKwltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKK30KKyNlbmRpZgorLyoKKyAqIHNl cV9jb252ZXJ0b2xkCisgKiBXYXMgdGhlIG9sZCBwbGF5ZXZlbnQuICBVc2UgdGhpcyB0byBjb252 ZXJ0IGFuZCBvbGQKKyAqIHN0eWxlIC9kZXYvc2VxdWVuY2VyIGV2ZW50IHRvIGEgL2Rldi9tdXNp YyBldmVudCAKKyAqLworc3RhdGljIGludAorc2VxX2NvbnZlcnRvbGQodV9jaGFyICpldmVudCwg dV9jaGFyICpvdXQpCit7CisJaW50IHVzZWQ7CisJdV9jaGFyIGRldiwgY2huLCBub3RlLCB2ZWw7 CisKKwlvdXRbMF0gPSBvdXRbMV0gPSBvdXRbMl0gPSBvdXRbM10gPSBvdXRbNF0gID0gb3V0WzVd ICA9IG91dFs2XSAgPSBvdXRbN10gICA9IDA7CisKKwlkZXYgPSAwOworCWNobiA9IGV2ZW50WzFd OworCW5vdGUgPSBldmVudFsyXTsKKwl2ZWwgPSBldmVudFszXTsKKworCXVzZWQgPSAwOworCity ZXN0YXJ0OgorCS8qCisJICogVE9ETzogRGVidWcgc3RhdGVtZW50CisJICovCisJc3dpdGNoKGV2 ZW50WzBdKSB7CisJICAgIGNhc2UgRVZfVElNSU5HOgorCSAgICBjYXNlIEVWX0NITl9WT0lDRToK KwkgICAgY2FzZSBFVl9DSE5fQ09NTU9OOgorY2FzZSBFVl9TWVNFWDoKK2Nhc2UgRVZfU0VRX0xP Q0FMOgorCQlvdXRbMF0gPSBldmVudFswXTsKKwkJb3V0WzFdID0gZXZlbnRbMV07CisJCW91dFsy XSA9IGV2ZW50WzJdOworCQlvdXRbM10gPSBldmVudFszXTsKKwkJb3V0WzRdID0gZXZlbnRbNF07 CisJCW91dFs1XSA9IGV2ZW50WzVdOworCQlvdXRbNl0gPSBldmVudFs2XTsKKwkJb3V0WzddID0g ZXZlbnRbN107CisJCXVzZWQgKz0gODsKKwkJYnJlYWs7CisJICAgIGNhc2UgU0VRX05PVEVPRkY6 CisJCW91dFswXSA9IEVWX0NITl9WT0lDRTsKKwkJb3V0WzFdID0gZGV2OworCQlvdXRbMl0gPSBN SURJX05PVEVPRkY7CisJCW91dFszXSA9IGNobjsKKwkJb3V0WzRdID0gbm90ZTsKKwkJb3V0WzVd ID0gMjU1OworCXVzZWQgKz0gNDsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTRVFfTk9URU9OOgor CQlvdXRbMF0gPSBFVl9DSE5fVk9JQ0U7CisJCW91dFsxXSA9IGRldjsKKwkJb3V0WzJdID0gTUlE SV9OT1RFT047CisJCW91dFszXSA9IGNobjsKKwkJb3V0WzRdID0gbm90ZTsKKwkJb3V0WzVdID0g dmVsOworCXVzZWQgKz0gNDsKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogd2FpdCBkZWxheSA9IChl dmVudFsyXSA8PCAxNikgKyAoZXZlbnRbM10gPDwgOCkgKyBldmVudFs0XQorCQkgKi8KKworCSAg ICBjYXNlIFNFUV9QR01DSEFOR0U6CisJCW91dFswXSA9IEVWX0NITl9DT01NT047CisJCW91dFsx XSA9IGRldjsKKwkJb3V0WzJdID0gTUlESV9QR01fQ0hBTkdFOworCQlvdXRbM10gPSBjaG47CisJ CW91dFs0XSA9IG5vdGU7CisJCW91dFs1XSA9IHZlbDsKKwl1c2VkICs9IDQ7CisJCWJyZWFrOwor LyoKKwkJb3V0WzBdID0gRVZfVElNSU5HOworCQlvdXRbMV0gPSBkZXY7CisJCW91dFsyXSA9IE1J RElfUEdNX0NIQU5HRTsKKwkJb3V0WzNdID0gY2huOworCQlvdXRbNF0gPSBub3RlOworCQlvdXRb NV0gPSB2ZWw7CisJCVNFUV9ERUJVRyg0LHByaW50Zigic2VxX3BsYXlldmVudDogc3luY3RpbWVy XG4iKSk7CisJCWJyZWFrOworKi8KKworCSAgICBjYXNlIFNFUV9NSURJUFVUQzoKKwkJU0VRX0RF QlVHKDQscHJpbnRmKCJzZXFfcGxheWV2ZW50OiBwdXQgZGF0YSAweCUwMngsIHVuaXQgJWQuXG4i LAorCQkJICAgIGV2ZW50WzFdLCBldmVudFsyXSkpOworCQkvKgorCQkgKiBQYXNzIHRocm91Z2gg dG8gdGhlIG1pZGkgZGV2aWNlLgorCQkgKiBkZXZpY2UgPSBldmVudFsyXQorCQkgKiBkYXRhID0g ZXZlbnRbMV0KKwkJICovCisJCW91dFswXSA9IFNFUV9NSURJUFVUQzsKKwkJb3V0WzFdID0gZGV2 OworCQlvdXRbMl0gPSBjaG47CisJdXNlZCArPSA0OworCQlicmVhazsKKyNpZiBub3R5ZXQKKwkg ICAgY2FzZSBTRVFfRUNITzoKKwkJLyoKKwkJICogVGhpcyBpc24ndCBoYW5kbGVkIGhlcmUgeWV0 IGJlY2F1c2UgSSBkb24ndCBrbm93IGlmIEkgY2FuCisJCSAqIGp1c3QgdXNlIGZvdXIgYnl0ZXMg ZXZlbnRzLiAgVGhlcmUgbWlnaHQgYmUgY29uc2VxdWVuY2VzIAorCQkgKiBpbiB0aGUgX3JlYWQg cm91dGluZworCQkgKi8KKwkJaWYgKHNlcV9jb3B5dG9pbnB1dChzY3AsIGV2ZW50LCA0KSA9PSBF QUdBSU4pIHsKKwkJICAgIHJldCA9IFFVRVVFRlVMTDsKKwkJICAgIGJyZWFrOworCQl9CisJCXJl dCA9IE1PUkU7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgU0VRX0VYVEVOREVEOgorCQlz d2l0Y2ggKGV2ZW50WzFdKSB7CisJCSAgICBjYXNlIFNFUV9OT1RFT0ZGOgorCQkgICAgY2FzZSBT RVFfTk9URU9OOgorCQkgICAgY2FzZSBTRVFfUEdNQ0hBTkdFOgorCQkJZXZlbnQrKzsKKwkJCXVz ZWQgPSA0OworCQkJZ290byByZXN0YXJ0OworCQkJYnJlYWs7CisJCSAgICBjYXNlIFNFUV9BRlRF UlRPVUNIOgorCQkJLyoKKwkJCSAqIFNZTlRIX0FGVEVSVE9VQ0gobWQsIGV2ZW50WzNdLCBldmVu dFs0XSkKKwkJCSAqLworCQkgICAgY2FzZSBTRVFfQkFMQU5DRToKKwkJCS8qCisJCQkgKiBTWU5U SF9QQU5OSU5HKG1kLCBldmVudFszXSwgKGNoYXIpZXZlbnRbNF0pCisJCQkgKi8KKwkJICAgIGNh c2UgU0VRX0NPTlRST0xMRVI6CisJCQkvKgorCQkJICogU1lOVEhfQ09OVFJPTExFUihtZCwgZXZl bnRbM10sIGV2ZW50WzRdLCAqKHNob3J0ICopJmV2ZW50WzVdKQorCQkJICovCisJCSAgICBjYXNl IFNFUV9WT0xNT0RFOgorCQkJLyoKKwkJCSAqIFNZTlRIX1ZPTFVNRU1FVEhPRChtZCwgZXZlbnRb M10pIAorCQkJICovCisJCSAgICBkZWZhdWx0OgorCQkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFf Y29udmVydG9sZDogU0VRX0VYVEVOREVEIHR5cGUgJWQiCisJCQkJIm5vdCBoYW5kbGVkXG4iLCBl dmVudFsxXSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgU0VRX1dBSVQ6 CisJCW91dFswXSA9IEVWX1RJTUlORzsKKwkJb3V0WzFdID0gVE1SX1dBSVRfUkVMOworCQlvdXRb NF0gPSBldmVudFsyXTsKKwkJb3V0WzVdID0gZXZlbnRbM107CisJCW91dFs2XSA9IGV2ZW50WzRd OworCisJCVNFUV9ERUJVRyg1LHByaW50ZigiU0VRX1dBSVQgJWQiLCBldmVudFsyXSArIChldmVu dFszXSA8PCA4KSArIChldmVudFs0XSA8PCAyNCkpKTsKKworCQl1c2VkKz0gNDsKKwkJYnJlYWs7 CisKKwkgICAgY2FzZSBTRVFfRUNITzoKKwkgICAgY2FzZSBTRVFfU1lOQ1RJTUVSOgorCSAgICBj YXNlIFNFUV9QUklWQVRFOgorCSAgICBkZWZhdWx0OgorCQlTRVFfREVCVUcoMixwcmludGYoInNl cV9jb252ZXJ0b2xkOiBldmVudCB0eXBlICVkIG5vdCBoYW5kbGVkICVkICVkICVkXG4iLCBldmVu dFswXSwgZXZlbnRbMV0sIGV2ZW50WzJdLCBldmVudFszXSkpOworCQlicmVhazsKKwl9CisJcmV0 dXJuIHVzZWQ7Cit9CisKKy8qCisgKiBXcml0dGluZyB0byB0aGUgc2VxdWVuY2VyIGJ1ZmZlciBu ZXZlciBibG9ja3MgYW5kIGRyb3BzCisgKiBpbnB1dCB3aGljaCBjYW5ub3QgYmUgcXVldWVkCisg Ki8KK3ZvaWQKK3NlcV9jb3B5dG9pbnB1dChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIHVfY2hhciAq ZXZlbnQsIGludCBsZW4pCit7CisKKwltdHhfYXNzZXJ0KCZzY3AtPnNlcV9sb2NrLCBNQV9PV05F RCk7CisKKwlpZiAoTUlESVFfQVZBSUwoc2NwLT5pbl9xKSA8IGxlbikgeworCSAgICAvKgorCSAg ICAgKiBFTk9ST09NPyAgRUlOUFVURFJPUFBFRD8gRVRPVUdITFVDSz8KKwkgICAgICovCisJICBT RVFfREVCVUcoMixwcmludGYoInNlcV9jb3B5dG9pbnB1dDogcXVldWUgZnVsbFxuIikpOworCX0g ZWxzZSB7CisJICAgIE1JRElRX0VOUShzY3AtPmluX3EsIGV2ZW50LCBsZW4pOworCSAgICBzZWx3 YWtldXAoJnNjcC0+aW5fc2VsKTsKKwkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPmluX2N2KTsKKwl9 CisKK30KKworc3RhdGljIGludAorc2VxX2NobnZvaWNlKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwg a29ial90IG1kLCB1X2NoYXIgKmV2ZW50KQoreworCWludCByZXQsIHZvaWNlOworCXVfY2hhciBj bWQsIGNobiwgbm90ZSwgcGFybTsKKworCXJldCA9IDA7CisJY21kID0gZXZlbnRbMl07CisJY2hu ID0gZXZlbnRbM107CisJbm90ZSA9IGV2ZW50WzRdOworCXBhcm0gPSBldmVudFs1XTsKKworCW10 eF9hc3NlcnQoJnNjcC0+c2VxX2xvY2ssIE1BX09XTkVEKTsKKworCVNFUV9ERUJVRyg1LHByaW50 Zigic2VxX2NobnZvaWNlOiB1bml0ICVkLCBkZXYgJWQsIGNtZCAlcywiCisJCSAgICIgY2huICVk LCBub3RlICVkLCBwYXJtICVkLlxuIiwgc2NwLT51bml0LCBldmVudFsxXSwgCisJCSAgIG1pZGlf Y21kbmFtZShjbWQsIGNtZHRhYl9zZXFjdiksIGNobiwgbm90ZSwgcGFybSkpOworCisJdm9pY2Ug PSBTWU5USF9BTExPQyhtZCwgY2huLCBub3RlKTsKKworCW10eF91bmxvY2soJnNjcC0+c2VxX2xv Y2spOworCisJc3dpdGNoIChjbWQpIHsKKwkgICAgY2FzZSBNSURJX05PVEVPTjoKKwkJaWYgKG5v dGUgPCAxMjggfHwgbm90ZSA9PSAyNTUpIHsKKyNpZiAwCisJCSAgICBpZiAoc2NwLT5tdXNpYyAm JiBjaG4gPT0gOSkgeworCQkJLyoKKwkJCSAqIFRoaXMgY2hhbm5lbCBpcyBhIHBlcmN1c3Npb24u IFRoZSBub3RlIG51bWJlciBpcyB0aGUKKwkJCSAqIHBhdGNoIG51bWJlci4gCisJCQkgKi8KKwkJ CS8qCisJCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJCWlmIChTWU5USF9TRVRJTlNU UihtZCwgdm9pY2UsIDEyOCArIG5vdGUpID09IEVBR0FJTikgeworCQkJICAgIG10eF9sb2NrKCZz Y3AtPnNlcV9sb2NrKTsKKwkJCSAgICByZXR1cm4gKFFVRVVFRlVMTCk7CisJCQl9CisJCQltdHhf bG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQkqLworCQkJbm90ZSA9IDYwOyAvKiBNaWRkbGUgQy4g Ki8KKwkJICAgIH0KKyNlbmRpZgorCQkgICAgaWYgKHNjcC0+bXVzaWMpIHsKKwkJCS8qCisJCQlt dHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJCWlmIChTWU5USF9TRVRVUFZPSUNFKG1kLCB2 b2ljZSwgY2huKSA9PSBFQUdBSU4pIHsKKwkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7 CisJCQkgICAgcmV0dXJuIChRVUVVRUZVTEwpOworCQkJfQorCQkJbXR4X2xvY2soJnNjcC0+c2Vx X2xvY2spOworCQkJKi8KKwkJICAgIH0KKwkJICAgIFNZTlRIX1NUQVJUTk9URShtZCwgdm9pY2Us IG5vdGUsIHBhcm0pOworCQl9CisJCWJyZWFrOworCWNhc2UgTUlESV9OT1RFT0ZGOgorCQlTWU5U SF9LSUxMTk9URShtZCwgdm9pY2UsIG5vdGUsIHBhcm0pOworCQlicmVhazsKKwljYXNlIE1JRElf S0VZX1BSRVNTVVJFOgorCQlTWU5USF9BRlRFUlRPVUNIKG1kLCB2b2ljZSwgcGFybSk7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDE7CisJCVNFUV9ERUJVRygyLHByaW50Zigic2VxX2No bnZvaWNlIGV2ZW50IHR5cGUgJWQgbm90IGhhbmRsZWRcbiIsIGV2ZW50WzFdKSk7CisJCWJyZWFr OworCX0KKworCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50CitzZXFfY2huY29tbW9uKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwga29ial90IG1k LCB1X2NoYXIgKmV2ZW50KQoreworCWludCByZXQ7CisJdV9zaG9ydCB3MTQ7CisJdV9jaGFyIGNt ZCwgY2huLCBwMTsKKworCXJldCA9IDA7CisJY21kID0gZXZlbnRbMl07CisJY2huID0gZXZlbnRb M107CisJcDEgPSBldmVudFs0XTsKKwl3MTQgPSAqKHVfc2hvcnQgKikmZXZlbnRbNl07CisKKwlT RVFfREVCVUcoNSxwcmludGYoInNlcV9jaG5jb21tb246IHVuaXQgJWQsIGRldiAlZCwgY21kICVz LCBjaG4gJWQsIgorCQkgICAgIiBwMSAlZCwgdzE0ICVkLlxuIiwgc2NwLT51bml0LCBldmVudFsx XSwKKwkJICAgIG1pZGlfY21kbmFtZShjbWQsIGNtZHRhYl9zZXFjY21uKSwgY2huLCBwMSwgdzE0 KSk7CisJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJc3dpdGNoIChjbWQpIHsKKwkgICAg Y2FzZSBNSURJX1BHTV9DSEFOR0U6CisJCSAgICBTRVFfREVCVUcoNCxwcmludGYoInNlcV9jaG5j b21tb24gcGdtY2huIGNobiAlZCBwZyAlZFxuIiwKKwkJCQljaG4sIHAxKSk7CisJCSAgICBTWU5U SF9TRVRJTlNUUihtZCwgY2huLCBwMSk7CisJCWJyZWFrOworCSAgICBjYXNlIE1JRElfQ1RMX0NI QU5HRToKKwkJU0VRX0RFQlVHKDQscHJpbnRmKCJzZXFfY2huY29tbW9uIGN0bGNoIGNobiAlZCBw ZyAlZCAlZFxuIiwKKwkJCSAgICBjaG4sIHAxLCB3MTQpKTsKKwkJU1lOVEhfQ09OVFJPTExFUiht ZCwgY2huLCBwMSwgdzE0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUlESV9QSVRDSF9CRU5EOgor CQlpZiAoc2NwLT5tdXNpYykgeworCQkgICAgLyoKKwkJICAgICAqIFRPRE86IE1JRElfUElUQ0hf QkVORAorCQkgICAgICovCisjaWYgMAorCQkgICAgbXR4X2xvY2soJm1kLT5zeW50aC52Y19tdHgp OworCQkgICAgbWQtPnN5bnRoLmNobl9pbmZvW2Nobl0uYmVuZGVyX3ZhbHVlID0gdzE0OworCQkg ICAgaWYgKG1kLT5taWRpdW5pdCA+PSAwKSB7CisJCQkvKiBIYW5kbGUgYWxsIG9mIHRoZSBub3Rl cyBwbGF5aW5nIG9uIHRoaXMgY2hhbm5lbC4gKi8KKwkJCWtleSA9ICgoaW50KWNobiA8PCA4KTsK KwkJCWZvciAoaSA9IDAgOyBpIDwgbWQtPnN5bnRoLmFsbG9jLm1heF92b2ljZSA7IGkrKykKKwkJ CSAgICBpZiAoKG1kLT5zeW50aC5hbGxvYy5tYXBbaV0gJiAweGZmMDApID09IGtleSkgeworCQkJ CW10eF91bmxvY2soJm1kLT5zeW50aC52Y19tdHgpOworCQkJCW10eF91bmxvY2soJnNjcC0+c2Vx X2xvY2spOworCQkJCWlmIChtZC0+c3ludGguYmVuZGVyKG1kLCBpLCB3MTQpID09IEVBR0FJTikg eworCQkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQkJICAgIHJldHVybiAoUVVF VUVGVUxMKTsKKwkJCQl9CisJCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQkJICAgIH0K KwkJICAgIH0gZWxzZSB7CisJCQltdHhfdW5sb2NrKCZtZC0+c3ludGgudmNfbXR4KTsKKwkJCW10 eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkJaWYgKG1kLT5zeW50aC5iZW5kZXIobWQsIGNo biwgdzE0KSA9PSBFQUdBSU4pIHsKKwkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJ CQkgICAgcmV0dXJuIChRVUVVRUZVTEwpOworCQkJfQorCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xv Y2spOworCQkgICAgfQorI2VuZGlmCisJCX0gZWxzZQorCQkgICAgU1lOVEhfQkVOREVSKG1kLCBj aG4sIHcxNCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlyZXQgPSAxOworCQlTRVFfREVC VUcoMixwcmludGYoInNlcV9jaG5jb21tb24gZXZlbnQgdHlwZSAlZCBub3QgaGFuZGxlZC5cbiIs IGV2ZW50WzFdKSk7CisJCWJyZWFrOworCisJfQorCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzZXFfdGltaW5nKHN0cnVjdCBzZXFfc29m dGMgKnNjcCwgdV9jaGFyICpldmVudCkKK3sKKwlpbnQgcGFyYW07CisJaW50IHJldDsKKworCXJl dCA9IDA7CisJcGFyYW0gPSBldmVudFs0XSArIChldmVudFs1XSA8PCA4KSArCisJICAgIChldmVu dFs2XSA8PCAxNikgKyAoZXZlbnRbN10gPDwgMjQpOworCisJU0VRX0RFQlVHKDUscHJpbnRmKCJz ZXFfdGltaW5nOiB1bml0ICVkLCBjbWQgJWQsIHBhcmFtICVkLlxuIiwKKwkJICAgIHNjcC0+dW5p dCwgZXZlbnRbMV0sIHBhcmFtKSk7CisJc3dpdGNoIChldmVudFsxXSkgeworCWNhc2UgVE1SX1dB SVRfUkVMOgorCSAgICB0aW1lcl93YWl0KHNjcCwgcGFyYW0sIDApOworCQlicmVhazsKKwljYXNl IFRNUl9XQUlUX0FCUzoKKwkgICAgdGltZXJfd2FpdChzY3AsIHBhcmFtLCAxKTsKKwkJYnJlYWs7 CisJY2FzZSBUTVJfU1RBUlQ6CisJCXRpbWVyX3N0YXJ0KHNjcCk7CisJCWN2X2Jyb2FkY2FzdCgm c2NwLT5yZXNldF9jdik7CisJCWJyZWFrOworCWNhc2UgVE1SX1NUT1A6CisJCXRpbWVyX3N0b3Ao c2NwKTsKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBjdl9icm9hZGNhc3QgaXNuJ3QgbmVlZGVk IHNpbmNlIHdlIG9ubHkKKwkJICogd2FpdCBmb3IgMC0+MSB0cmFuc2l0aW9ucy4gIEl0IHByb2Jh Ymx5IHdvbid0IGh1cnQKKwkJICovCisJCWN2X2Jyb2FkY2FzdCgmc2NwLT5yZXNldF9jdik7CisJ CWJyZWFrOworCWNhc2UgVE1SX0NPTlRJTlVFOgorCQl0aW1lcl9jb250aW51ZShzY3ApOworCQlj dl9icm9hZGNhc3QoJnNjcC0+cmVzZXRfY3YpOworCQlicmVhazsKKwljYXNlIFRNUl9URU1QTzoK KwkJaWYgKHBhcmFtIDwgOCkKKwkJICAgIHBhcmFtID0gODsKKwkJaWYgKHBhcmFtID4gMzYwKQor CQkgICAgcGFyYW0gPSAzNjA7CisJCVNFUV9ERUJVRyg0LHByaW50ZigiVGltZXIgc2V0IHRlbXBv ICVkXG4iLCBwYXJhbSkpOworCQl0aW1lcl9zZXR2YWxzKHNjcCwgcGFyYW0sIHNjcC0+dGltZXJi YXNlKTsKKwkJYnJlYWs7CisJY2FzZSBUTVJfVElNRVJCQVNFOgorCQlpZiAocGFyYW0gPCAxKQor CQkgICAgcGFyYW0gPSAxOworCQlpZiAocGFyYW0gPiAxMDAwKQorCQkgICAgcGFyYW0gPSAxMDAw OworCQlTRVFfREVCVUcoNCxwcmludGYoIlRpbWVyIHNldCB0aW1lcmJhc2UgJWRcbiIsIHBhcmFt KSk7CisJCXRpbWVyX3NldHZhbHMoc2NwLCBzY3AtPnRlbXBvLCBwYXJhbSk7CisJCWJyZWFrOwor CWNhc2UgVE1SX0VDSE86CisJCS8qCisJCSAqIFRPRE86IENvbnNpZGVyIG1ha2luZyA0LWJ5dGUg ZXZlbnRzIGZvciAvZGV2L3NlcXVlbmNlcgorCQkgKiBQUk86IE1heWJlIG5lZWRlZCBieSBsZWdh Y3kgYXBwcworCQkgKiBDT046IHNvdW5kY2FyZC5oIGhhcyBiZWVuIHdhcm5pbmcgZm9yIGEgd2hp bGUgbWFueSB5ZWFycworCQkgKiB0byBleHBlY3QgOCBieXRlIGV2ZW50cy4KKwkJICovCisjaWYg MAorCQlpZiAoc2NwLT5tdXNpYykKKwkJCXNlcV9jb3B5dG9pbnB1dChzY3AsIGV2ZW50LCA4KTsK KwkJZWxzZSB7CisJCQlwYXJhbSA9IChwYXJhbSA8PCA4IHwgU0VRX0VDSE8pOworCQkJc2VxX2Nv cHl0b2lucHV0KHNjcCwgKHVfY2hhciAqKSZwYXJhbSwgNCk7CisJCX0KKyNlbHNlCisJCXNlcV9j b3B5dG9pbnB1dChzY3AsIGV2ZW50LCA4KTsKKyNlbmRpZgorCQlicmVhazsKKwkgICAgZGVmYXVs dDoKKwkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfdGltaW5nIGV2ZW50IHR5cGUgJWQgbm90IGhh bmRsZWQuXG4iLCBldmVudFsxXSkpOworCQlyZXQgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludAorc2VxX2xvY2FsKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwg dV9jaGFyICpldmVudCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKwltdHhfYXNzZXJ0KCZz Y3AtPnNlcV9sb2NrLCBNQV9PV05FRCk7CisKKwlTRVFfREVCVUcoNSxwcmludGYoInNlcV9sb2Nh bDogdW5pdCAlZCwgY21kICVkXG4iLCBzY3AtPnVuaXQsIGV2ZW50WzFdKSk7CisJc3dpdGNoIChl dmVudFsxXSkgeworCSAgICBkZWZhdWx0OgorCQlwcmludGYoInNlcV9sb2NhbCBldmVudCB0eXBl ICVkIG5vdCBoYW5kbGVkXG4iLCBldmVudFsxXSk7CisJCXJldCA9IDE7CisJCWJyZWFrOworCX0K KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzZXFfc3lzZXgoc3RydWN0IHNlcV9zb2Z0 YyAqc2NwLCBrb2JqX3QgbWQsIHVfY2hhciAqZXZlbnQpCit7CisJaW50IGksIGw7CisKKwltdHhf YXNzZXJ0KCZzY3AtPnNlcV9sb2NrLCBNQV9PV05FRCk7CisJU0VRX0RFQlVHKDUscHJpbnRmKCJz ZXFfc3lzZXg6IHVuaXQgJWQgZGV2aWNlICVkXG4iLCBzY3AtPnVuaXQsIGV2ZW50WzFdKSk7CisJ bCA9IDA7CisJZm9yIChpID0gMCA7IGkgPCA2ICYmIGV2ZW50W2kgKyAyXSAhPSAweGZmIDsgaSsr KQorCQlsID0gaSArIDE7CisJaWYgKGwgPiAwKSB7CisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xv Y2spOworCQlpZiAoU1lOVEhfU0VORFNZU0VYKG1kLCAmZXZlbnRbMl0sIGwpID09IEVBR0FJTikg eworCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbXR4 X2xvY2soJnNjcC0+c2VxX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlc2V0 IG5vIGxvbmdlciBjbG9zZXMgdGhlIHJhdyBkZXZpY2VzIG5vciBzZXFfc3luYydzCisgKiBDYWxs ZXJzIGFyZSBJT0NUTCBhbmQgc2VxX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkCitzZXFfcmVzZXQo c3RydWN0IHNlcV9zb2Z0YyAqc2NwKQoreworCWludCBjaG4sICBpOworCWtvYmpfdCBtOworCisJ bXR4X2Fzc2VydCgmc2NwLT5zZXFfbG9jaywgTUFfT1dORUQpOworCisJU0VRX0RFQlVHKDUscHJp bnRmKCJzZXFfcmVzZXQ6IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpKTsKKworCS8qCisJICogU3Rv cCByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqLworCisJLyogc2NwLT5yZWNvcmRpbmcgPSAwOyAq LworCXNjcC0+cGxheWluZyA9IDA7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2KTsKKwlj dl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwljdl9icm9hZGNhc3QoJnNjcC0+cmVzZXRfY3Yp OworCisJLyoKKwkgKiBGb3Igbm93LCBkb24ndCByZXNldCB0aGUgdGltZXJzLgorCSAqLworCU1J RElRX0NMRUFSKHNjcC0+aW5fcSk7CisJTUlESVFfQ0xFQVIoc2NwLT5vdXRfcSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgc2NwLT5taWRpX251bWJlcjsgaSsrKSB7CisJICAgIG0gPSBzY3AtPm1pZGlz W2ldOworCSAgICBtdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkgICAgU1lOVEhfUkVTRVQo bSk7CisJICAgIGZvciAoY2huID0gMCA7IGNobiA8IDE2IDsgY2huKyspIHsKKwkJU1lOVEhfQ09O VFJPTExFUihtLCBjaG4sIDEyMywgMCkgOworCQlTWU5USF9DT05UUk9MTEVSKG0sIGNobiwgMTIx LCAwKTsKKwkJU1lOVEhfQkVOREVSKG0sIGNobiwgMSA8PCAxMyk7CisJICAgIH0KKwkgICAgbXR4 X2xvY2soJnNjcC0+c2VxX2xvY2spOworCX0KK30KKworLyoKKyAqIHNlcV9zeW5jCisgKiAqcmVh bGx5KiBmbHVzaCB0aGUgb3V0cHV0IHF1ZXVlCisgKiBmbHVzaCB0aGUgZXZlbnQgcXVldWUsIHRo ZW4gZmx1c2ggdGhlIHN5bnRoc2lzZXJzLgorICogQ2FsbGVycyBhcmUgSU9DVEwgYW5kIGNsb3Nl CisgKi8KKworI2RlZmluZSBTRVFfU1lOQ19USU1FT1VUIDgKK3N0YXRpYyBpbnQKK3NlcV9zeW5j KHN0cnVjdCBzZXFfc29mdGMgKnNjcCkKK3sKKwlpbnQgaSwgcmwsIHN5bmNbMTZdLCBkb25lOwor CisJbXR4X2Fzc2VydCgmc2NwLT5zZXFfbG9jaywgTUFfT1dORUQpOworCisJU0VRX0RFQlVHKDQs cHJpbnRmKCJzZXFfc3luYzogdW5pdCAlZC5cbiIsIHNjcC0+dW5pdCkpOworCisJLyoKKwkgKiBX YWl0IHVudGlsIG91dHB1dCBxdWV1ZSBpcyBlbXB0eS4gIENoZWNrIGV2ZXJ5IHNvIG9mdGVuIHRv IHNlZSBpZgorCSAqIHRoZSBxdWV1ZSBpcyBtb3ZpbmcgYWxvbmcuICBJZiBpdCBpc24ndCBqdXN0 IGFib3J0LgorCSAqLworCXdoaWxlICghTUlESVFfRU1QVFkoc2NwLT5vdXRfcSkpIHsKKworCSAg ICBpZiAoIXNjcC0+cGxheWluZykgeworCQlzY3AtPnBsYXlpbmcgPSAxOworCQljdl9icm9hZGNh c3QoJnNjcC0+c3RhdGVfY3YpOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwkgICAg fQorCisJICAgIHJsID0gTUlESVFfTEVOKHNjcC0+b3V0X3EpOworCisJICAgIGkgPSBjdl90aW1l ZHdhaXRfc2lnKCZzY3AtPm91dF9jdiwgCisJCSAgICAmc2NwLT5zZXFfbG9jaywgU0VRX1NZTkNf VElNRU9VVCAqIGh6KTsKKworCSAgICBpZiAoaSA9PSBFSU5UUiB8fCBpID09IEVSRVNUQVJUKSB7 CisJCWlmIChpID09IEVJTlRSKSB7CisJCSAgICAvKgorCQkgICAgICogWFhYOiBJIGRvbid0IGtu b3cgd2h5IHdlIHN0b3AgcGxheWluZworCQkgICAgICovCisJCSAgICBzY3AtPnBsYXlpbmcgPSAw OworCQkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPm91dF9jdik7CisJCX0KKwkJcmV0dXJuIGk7CisJ ICAgIH0KKworCSAgICBpZiAoaSA9PSBFV09VTERCTE9DSyAmJiBybCA9PSBNSURJUV9MRU4oc2Nw LT5vdXRfcSkgJiYKKwkJICAgIHNjcC0+d2FpdGluZyA9PSAwKSB7CisJCS8qCisJCSAqIEEgcXVl dWUgc2VlbXMgdG8gYmUgc3R1Y2sgdXAuIEdpdmUgdXAgYW5kIGNsZWFyIHF1ZXVlcy4KKwkJICov CisJCU1JRElRX0NMRUFSKHNjcC0+b3V0X3EpOworCQlzY3AtPnBsYXlpbmcgPSAwOworCQljdl9i cm9hZGNhc3QoJnNjcC0+c3RhdGVfY3YpOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsK KwkJY3ZfYnJvYWRjYXN0KCZzY3AtPnJlc2V0X2N2KTsKKworCQkvKgorCQkgKiBUT0RPOiBDb25z aWRlciBpZiB0aGUgcmF3IGRldmljZXMgbmVlZCB0byBiZSBmbHVzaGVkCisJCSAqLworCisJCVNF UV9ERUJVRygxLHByaW50Zigic2VxX3N5bmMgcXVldWUgc3R1Y2ssIGFib3J0aW5nXG4iKSk7CisK KwkJcmV0dXJuIGk7CisJICAgIH0KKwl9CisKKwlzY3AtPnBsYXlpbmcgPSAwOworCS8qCisJICog U2luY2Ugc3luY2luZyBhIG1pZGkgZGV2aWNlIG1pZ2h0IGJsb2NrLCB1bmxvY2sgc2NwLT5zZXFf bG9jay4KKwkgKi8KKworCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCWZvcihpID0gMCA7 IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBpKyspCisJICAgIHN5bmNbaV0gPSAxOworCisJZG8gewor CSAgICBkb25lID0gMTsKKwkgICAgZm9yIChpID0gMCA7IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBp KyspCisJCWlmIChzeW5jW2ldKSB7CisJCSAgICBpZiAoU1lOVEhfSU5TWU5DKHNjcC0+bWlkaXNb aV0pID09IDApCisJCQlzeW5jW2ldID0gMDsKKwkJICAgIGVsc2UKKwkJCWRvbmUgPSAwOworCQl9 CisKKwkgICBpZiAoIWRvbmUpCisJCURFTEFZKDUwMDApOworCisJfSB3aGlsZSAoIWRvbmUpOwor CisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCXJldHVybiAwOworfQorCitjaGFyICoKK21p ZGlfY21kbmFtZShpbnQgY21kLCBtaWRpX2NtZHRhYiAqdGFiKQoreworCXdoaWxlICh0YWItPm5h bWUgIT0gTlVMTCkgeworCQlpZiAoY21kID09IHRhYi0+Y21kKQorCQkJcmV0dXJuICh0YWItPm5h bWUpOworCQl0YWIrKzsKKwl9CisKKwlyZXR1cm4gKCJ1bmtub3duIik7Cit9CkluZGV4OiBzeXMv ZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogc3lzL2Rldi9z b3VuZC9taWRpL3NlcXVlbmNlci5oCmRpZmYgLU4gc3lzL2Rldi9zb3VuZC9taWRpL3NlcXVlbmNl ci5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9z b3VuZC9taWRpL3NlcXVlbmNlci5oCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAgLTAsMCAr MSw4OCBAQAorLyoKKyAqIEluY2x1ZGUgZmlsZSBmb3IgbWlkaSBzZXF1ZW5jZXIgZHJpdmVyLgor ICogKGMpIDIwMDMgTWF0aGV3IEthbm5lcgorICogQ29weXJpZ2h0IGJ5IFNlaWdvIFRhbmltdXJh IDE5OTkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9zeXMvZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmgs diAxLjUgMjAwMi8wMS8wNCAwMToxMzo0NyB0YW5pbXVyYSBFeHAgJAorICoKKyAqLworCisjaWZu ZGVmIF9TRVFVRU5DRVJfSF8KKyNkZWZpbmUgX1NFUVVFTkNFUl9IXworCisKKyNkZWZpbmUgU0VR X0NERVZfTUFKT1IgTUlESV9DREVWX01BSk9SCisKKyNkZWZpbmUgTlNFUV9NQVgJMTYKKworLyoK KyAqIG1hbnkgdmFyaWFibGVzIHNob3VsZCBiZSByZWR1Y2VkIHRvIGEgcmFuZ2UuIEhlcmUgZGVm aW5lIGEgbWFjcm8KKyAqLworCisjZGVmaW5lIFJBTkdFKHZhciwgbG93LCBoaWdoKSAodmFyKSA9 IFwKKygodmFyKTwobG93KT8obG93KSA6ICh2YXIpPihoaWdoKT8oaGlnaCkgOiAodmFyKSkKKwor I2lmZGVmIF9LRVJORUwKKwordm9pZAlzZXFfdGltZXIodm9pZCAqYXJnKTsKKworU1lTQ1RMX0RF Q0woX2h3X21pZGlfc2VxKTsKKworZXh0ZXJuIGludAlzZXFfZGVidWc7CisjZGVmaW5lIFNFUV9E RUJVRyh5LCB4KQkJCVwKKwlkbyB7CQkJCVwKKwkJaWYgKHNlcV9kZWJ1ZyA+PSB5KSB7CVwKKwkJ CSh4KTsJCVwKKwkJfQkJCVwKKwl9IHdoaWxlKDApCisKK1NZU0NUTF9ERUNMKF9od19taWRpKTsK KworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2RlZmluZSBTWU5USFBST1BfTUlESQkJMQorI2Rl ZmluZSBTWU5USFBST1BfU1lOVEgJCTIKKyNkZWZpbmUgU1lOVEhQUk9QX1JYCQk0CisjZGVmaW5l IFNZTlRIUFJPUF9UWAkJOAorCitzdHJ1Y3QgX21pZGlfY21kdGFiIHsKKyAgICBpbnQgICAgIGNt ZDsKKyAgICBjaGFyICogIG5hbWU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX21pZGlfY21kdGFiICAg ICAgbWlkaV9jbWR0YWI7CitleHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWV2ZW50W107Citl eHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWlvY3RsW107CitleHRlcm4gbWlkaV9jbWR0YWIg Y21kdGFiX3RpbWVyW107CitleHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWN2W107CitleHRl cm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWNjbW5bXTsKKworY2hhciAgICAgKm1pZGlfY21kbmFt ZShpbnQgY21kLCBtaWRpX2NtZHRhYiAqdGFiKTsKKworZW51bSB7CisJTU9SRSwKKwlUSU1FUkFS TUVELAorCVFVRVVFRlVMTAorfTsKKworI2VuZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkv c3ludGhfaWYubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBzeXMvZGV2L3NvdW5kL21pZGkvc3ludGhf aWYubQpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9zeW50aF9pZi5tCi0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9zb3VuZC9taWRpL3N5bnRoX2lm Lm0JNSBNYXIgMjAwNSAxNjoyNzowNyAtMDAwMApAQCAtMCwwICsxLDI4NSBAQAorSU5URVJGQUNF IHN5bnRoOworCisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKK0NPREUgeworCitzeW50aF9raWxs bm90ZV90IG5va2lsbG5vdGU7CitzeW50aF9zdGFydG5vdGVfdCBub3N0YXJ0bm90ZTsKK3N5bnRo X3NldGluc3RyX3Qgbm9zZXRpbnN0cjsKK3N5bnRoX2h3Y29udHJvbF90IG5vaHdjb250cm9sOwor c3ludGhfYWZ0ZXJ0b3VjaF90IG5vYWZ0ZXJ0b3VjaDsKK3N5bnRoX3Bhbm5pbmdfdCBub3Bhbm5p bmc7CitzeW50aF9jb250cm9sbGVyX3Qgbm9jb250cm9sbGVyOworc3ludGhfdm9sdW1lbWV0aG9k X3Qgbm92b2x1bWVtZXRob2Q7CitzeW50aF9iZW5kZXJfdCBub2JlbmRlcjsKK3N5bnRoX3NldHVw dm9pY2VfdCBub3NldHVwdm9pY2U7CitzeW50aF9zZW5kc3lzZXhfdCBub3NlbmRzeXNleDsKK3N5 bnRoX2FsbG9jdm9pY2VfdCBub2FsbG9jdm9pY2U7CitzeW50aF93cml0ZXJhd190IG5vd3JpdGVy YXc7CitzeW50aF9yZXNldF90IG5vcmVzZXQ7CitzeW50aF9zaG9ydG5hbWVfdCBub3Nob3J0bmFt ZTsKK3N5bnRoX29wZW5fdCBub29wZW47CitzeW50aF9jbG9zZV90IG5vY2xvc2U7CitzeW50aF9x dWVyeV90IG5vcXVlcnk7CitzeW50aF9pbnN5bmNfdCBub2luc3luYzsKK3N5bnRoX2FsbG9jX3Qg bm9hbGxvYzsKKworICAgIGludAorCW5va2lsbG5vdGUodm9pZCAqX2tvYmosIHVpbnQ4X3QgX2No biwgdWludDhfdCBfbm90ZSwgdWludDhfdCBfdmVsKQorCXsKKwkgICAgcHJpbnRmKCJub2tpbGxu b3RlXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9vcGVuKHZvaWQgKl9r b2JqLCB2b2lkICpfYXJnLCBpbnQgbW9kZSkKKwl7CisJICAgIHByaW50Zigibm9vcGVuXG4iKTsK KwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9xdWVyeSh2b2lkICpfa2JvaikKKwl7 CisJICAgIHByaW50Zigibm9xdWVyeVxuIik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGlu dAorCW5vc3RhcnRub3RlKHZvaWQgKl9rYiwgdWludDhfdCBfdm9pY2UsIHVpbnQ4X3QgX25vdGUs IHVpbnQ4X3QgX3Bhcm0pCisJeworCSAgICBwcmludGYoIm5vc3RhcnRub3RlXG4iKTsKKwkgICAg cmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9zZXRpbnN0cih2b2lkICpfa2IsIHVpbnQ4X3Qg X2NobiwgdWludDE2X3QgX3BhdGNobm8pCisJeworCSAgICBwcmludGYoIm5vc2V0aW5zdHJcbiIp OworCSAgICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQKKwlub2h3Y29udHJvbCh2b2lkICpfa2Is IHVpbnQ4X3QgKl9ldmVudCkKKwl7CisJICAgIHByaW50Zigibm9od2NvbnRyb2xcbiIpOworCSAg ICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQgCisJbm9hZnRlcnRvdWNoICggdm9pZCAvKiBYICov ICogX2tvYmosIHVpbnQ4X3QgX3gxLCB1aW50OF90IF94MikKKwl7CisJICAgIHByaW50Zigibm9h ZnRlcnRvdWNoXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9wYW5uaW5n ICggdm9pZCAvKiBYICovICogX2tvYmosIHVpbnQ4X3QgX3gxLCB1aW50OF90IF94MikKKwl7CisJ ICAgIHByaW50Zigibm9wYW5uaW5nXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50 IAorCW5vY29udHJvbGxlciAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF94MSwgdWlu dDhfdCBfeDIsIHVpbnQxNl90IF94MykKKwl7CisJICAgIHByaW50Zigibm9jb250cm9sbGVyXG4i KTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50IAorCW5vdm9sdW1lbWV0aG9kICgKKwkJ dm9pZCAvKiBYICovICogX2tvYmosCisJCXVpbnQ4X3QgX3gxKQorCXsKKwkgICAgcHJpbnRmKCJu b3ZvbHVtZW1ldGhvZFxuIik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGludCAKKwlub2Jl bmRlciAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF92b2ljZSwgdWludDE2X3QgX2Jl bmQpCisJeworCSAgICBwcmludGYoIm5vYmVuZGVyXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQor CisgICAgaW50IAorCW5vc2V0dXB2b2ljZSAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90 IF92b2ljZSwgdWludDhfdCBfY2huKQorCXsKKworCSAgICBwcmludGYoIm5vc2V0dXB2b2ljZVxu Iik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGludCAKKwlub3NlbmRzeXNleCAoIHZvaWQg LyogWCAqLyAqIF9rb2JqLCB2b2lkICogX2J1Ziwgc2l6ZV90IF9sZW4pCisJeworCSAgICBwcmlu dGYoIm5vc2VuZHN5c2V4XG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50IAorCW5v YWxsb2N2b2ljZSAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF9jaG4sIHVpbnQ4X3Qg X25vdGUsIHZvaWQgKl94KQorCXsKKwkgICAgcHJpbnRmKCJub2FsbG9jdm9pY2VcbiIpOworCSAg ICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQgCisJbm93cml0ZXJhdyAoIHZvaWQgLyogWCAqLyAq IF9rb2JqdCwgdWludDhfdCAqIF9idWYsIHNpemVfdCBfbGVuKQorCXsKKwkgICAgcHJpbnRmKCJu b3dyaXRlcmF3XG4iKTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisgICAgaW50IAorCW5vcmVzZXQg KCB2b2lkIC8qIFggKi8gKiBfa29ianQpCisJeworCisJICAgIHByaW50Zigibm9yZXNldFxuIik7 CisJICAgIHJldHVybiAwOworCX0KKworICAgIGNoYXIgKgorCW5vc2hvcnRuYW1lICh2b2lkIC8q IFggKi8gKiBfa29ianQpCisJeworCSAgICBwcmludGYoIm5vc2hvcnRuYW1lXG4iKTsKKwkgICAg cmV0dXJuICJub3Nob3J0bmFtZSI7CisJfQorCisgICAgaW50IAorCW5vY2xvc2UgKCB2b2lkIC8q IFggKi8gKiBfa29ianQpCisJeworCisJICAgIHByaW50Zigibm9jbG9zZVxuIik7CisJICAgIHJl dHVybiAwOworCX0KKworICAgIGludAorCW5vaW5zeW5jICh2b2lkIC8qIFggKi8gKiBfa29ianQp CisJeworCisJICAgIHByaW50Zigibm9pbnN5bmNcbiIpOworCSAgICByZXR1cm4gMDsKKwl9CisK KyAgICBpbnQgCisJbm9hbGxvYyAoIHZvaWQgLyogeCAqLyAqIF9rYm9qdCwgdWludDhfdCBfY2hu LCB1aW50OF90IF9ub3RlKQorCXsKKwkgICAgcHJpbnRmKCJub2FsbG9jXG4iKTsKKwkgICAgcmV0 dXJuIDA7CisJfQorfQorCitNRVRIT0QgaW50IGtpbGxub3RlIHsKKyAgICB2b2lkIC8qIFggKi8g KiBfa29iajsKKyAgICB1aW50OF90IF9jaGFuOworICAgIHVpbnQ4X3QgX25vdGU7CisgICAgdWlu dDhfdCBfdmVsOworfSBERUZBVUxUIG5va2lsbG5vdGU7CisKK01FVEhPRCBpbnQgc3RhcnRub3Rl IHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAgICB1aW50OF90IF92b2ljZTsKKyAgICB1 aW50OF90IF9ub3RlOworICAgIHVpbnQ4X3QgX3Bhcm07Cit9IERFRkFVTFQgbm9zdGFydG5vdGU7 CisKK01FVEhPRCBpbnQgc2V0aW5zdHIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAg IHVpbnQ4X3QgX2NobjsKKyAgICB1aW50MTZfdCBfcGF0Y2hubzsKK30gREVGQVVMVCBub3NldGlu c3RyOworCitNRVRIT0QgaW50IGh3Y29udHJvbCB7CisgICAgdm9pZCAvKiBYICovICogX2tvYmo7 CisgICAgdWludDhfdCAqX2V2ZW50OworfSBERUZBVUxUIG5vaHdjb250cm9sOworCitNRVRIT0Qg aW50IGFmdGVydG91Y2ggeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4X3Qg X3gxOworICAgIHVpbnQ4X3QgX3gyOworfSBERUZBVUxUIG5vYWZ0ZXJ0b3VjaDsKKworTUVUSE9E IGludCBwYW5uaW5nIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAgICB1aW50OF90IF94 MTsKKyAgICAgICAgdWludDhfdCBfeDI7Cit9IERFRkFVTFQgbm9wYW5uaW5nOworCitNRVRIT0Qg aW50IGNvbnRyb2xsZXIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4X3Qg X3gxOworICAgIHVpbnQ4X3QgX3gyOworICAgIHVpbnQxNl90IF94MzsKK30gREVGQVVMVCBub2Nv bnRyb2xsZXI7CisKK01FVEhPRCBpbnQgdm9sdW1lbWV0aG9kIHsKKyAgICB2b2lkIC8qIFggKi8g KiBfa29iajsKKyAgICB1aW50OF90IF94MTsKK30gREVGQVVMVCBub3ZvbHVtZW1ldGhvZDsKKwor TUVUSE9EIGludCBiZW5kZXIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4 X3QgX3ZvaWNlOworICAgIHVpbnQxNl90IF9iZW5kOworfSBERUZBVUxUIG5vYmVuZGVyOworCitN RVRIT0QgaW50IHNldHVwdm9pY2UgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVp bnQ4X3QgX3ZvaWNlOworICAgIHVpbnQ4X3QgX2NobjsKK30gREVGQVVMVCBub3NldHVwdm9pY2U7 CisKK01FVEhPRCBpbnQgc2VuZHN5c2V4IHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAg ICB2b2lkICogX2J1ZjsKKyAgICBzaXplX3QgX2xlbjsKK30gREVGQVVMVCBub3NlbmRzeXNleDsK KworTUVUSE9EIGludCBhbGxvY3ZvaWNlIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAg ICB1aW50OF90IF9jaG47CisgICAgdWludDhfdCBfbm90ZTsKKyAgICB2b2lkICpfeDsKK30gREVG QVVMVCBub2FsbG9jdm9pY2U7CisKK01FVEhPRCBpbnQgd3JpdGVyYXcgeworICAgIHZvaWQgLyog WCAqLyAqIF9rb2JqdDsKKyAgICB1aW50OF90ICogX2J1ZjsKKyAgICBzaXplX3QgX2xlbjsKK30g REVGQVVMVCBub3dyaXRlcmF3OworCitNRVRIT0QgaW50IHJlc2V0IHsKKyAgICB2b2lkIC8qIFgg Ki8gKiBfa29ianQ7Cit9IERFRkFVTFQgbm9yZXNldDsKKworTUVUSE9EIGNoYXIgKiBzaG9ydG5h bWUgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqdDsKK30gREVGQVVMVCBub3Nob3J0bmFtZTsK KworTUVUSE9EIGludCBvcGVuIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29ianQ7CisgICAgdm9p ZCAqIF9zeXRobjsKKyAgICBpbnQgX21vZGU7Cit9IERFRkFVTFQgbm9vcGVuOworCitNRVRIT0Qg aW50IGNsb3NlIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29ianQ7Cit9IERFRkFVTFQgbm9jbG9z ZTsKKworTUVUSE9EIGludCBxdWVyeSB7CisgICAgdm9pZCAvKiBYICovICogX2tvYmp0OworfSBE RUZBVUxUIG5vcXVlcnk7CisKK01FVEhPRCBpbnQgaW5zeW5jIHsKKyAgICB2b2lkIC8qIFggKi8g KiBfa29ianQ7Cit9IERFRkFVTFQgbm9pbnN5bmM7CisKK01FVEhPRCBpbnQgYWxsb2MgeworICAg IHZvaWQgLyogeCAqLyAqIF9rYm9qdDsKKyAgICB1aW50OF90IF9jaG47CisgICAgdWludDhfdCBf bm90ZTsKK30gREVGQVVMVCBub2FsbG9jOwpJbmRleDogc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2Rldi9zb3VuZC9wY2kvY21p LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkuMi4xCmRpZmYgLXUgLXIxLjI5LjIuMSBjbWku YwotLS0gc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMJMzAgSmFuIDIwMDUgMDE6MDA6MDMgLTAwMDAJ MS4yOS4yLjEKKysrIHN5cy9kZXYvc291bmQvcGNpL2NtaS5jCTUgTWFyIDIwMDUgMTY6Mjc6MDcg LTAwMDAKQEAgLTQ4LDggKzQ4LDEwIEBACiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KIAog I2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxkZXYvc291bmQvbWlkaS9tcHU0MDEu aD4KIAogI2luY2x1ZGUgIm1peGVyX2lmLmgiCisjaW5jbHVkZSAibXB1Zm9pX2lmLmgiCiAKIFNO RF9ERUNMQVJFX0ZJTEUoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMsdiAx LjI5LjIuMSAyMDA1LzAxLzMwIDAxOjAwOjAzIGltcCBFeHAgJCIpOwogCkBAIC0xMTIsNiArMTE0 LDEzIEBACiAJaW50CQkJc3BkaWZfZW5hYmxlZDsKIAl1bnNpZ25lZCBpbnQJCWJ1ZnN6OwogCXN0 cnVjdCBzY19jaGluZm8gCXBjaCwgcmNoOworCisJc3RydWN0IG1wdTQwMQkqbXB1OworCW1wdTQw MV9pbnRyX3QJCSptcHVfaW50cjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1wdV9yZWc7CisJaW50IG1w dV9yZWdpZDsKKwlidXNfc3BhY2VfdGFnX3QJbXB1X2J0OworCWJ1c19zcGFjZV9oYW5kbGVfdAlt cHVfYmg7CiB9OwogCiAvKiBDaGFubmVsIGNhcHMgKi8KQEAgLTU1MSw2ICs1NjAsOSBAQAogCiAJ CX0KIAl9CisJaWYoc2MtPm1wdV9pbnRyKSB7CisJCShzYy0+bXB1X2ludHIpKHNjLT5tcHUpOwor CX0KIAlzbmRfbXR4dW5sb2NrKHNjLT5sb2NrKTsKIAlyZXR1cm47CiB9CkBAIC03NDcsNiArNzU5 LDc0IEBACiB9OwogTUlYRVJfREVDTEFSRShjbWlfbWl4ZXIpOwogCisvKgorICogbXB1NDAxIGZ1 bmN0aW9ucworICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitjbWlfbXJlYWQodm9pZCAqYXJn LCBzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCByZWcpCit7CQorCXVuc2lnbmVkIGludCBkOworCisJ CWQgPSBidXNfc3BhY2VfcmVhZF8xKDAsMCwgMHgzMzAgKyByZWcpOyAKKwkvKglwcmludGYoImNt aV9tcmVhZDogcmVnICV4ICV4XG4iLHJlZywgZCk7CisJKi8KKwlyZXR1cm4gZDsKK30KKworc3Rh dGljIHZvaWQKK2NtaV9td3JpdGUodm9pZCAqYXJnLCBzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCBy ZWcsIHVuc2lnbmVkIGNoYXIgYikKK3sKKworCWJ1c19zcGFjZV93cml0ZV8xKDAsMCwweDMzMCAr IHJlZyAsIGIpOworfQorCitzdGF0aWMgaW50CitjbWlfbXVuaW5pdCh2b2lkICphcmcsIHN0cnVj dCBzY19pbmZvICpzYykKK3sKKworCXNuZF9tdHhsb2NrKHNjLT5sb2NrKTsKKwlzYy0+bXB1X2lu dHIgPSAwOworCXNjLT5tcHUgPSAwOworCXNuZF9tdHh1bmxvY2soc2MtPmxvY2spOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBrb2JqX21ldGhvZF90IGNtaV9tcHVfbWV0aG9kc1tdID0gewor ICAgIAlLT0JKTUVUSE9EKG1wdWZvaV9yZWFkLAkJY21pX21yZWFkKSwKKyAgICAJS09CSk1FVEhP RChtcHVmb2lfd3JpdGUsCWNtaV9td3JpdGUpLAorICAgIAlLT0JKTUVUSE9EKG1wdWZvaV91bmlu aXQsCWNtaV9tdW5pbml0KSwKKwl7IDAsIDAgfQorfTsKKworREVGSU5FX0NMQVNTKGNtaV9tcHUs IGNtaV9tcHVfbWV0aG9kcywgMCk7CisKK3N0YXRpYyB2b2lkCitjbWlfbWlkaWF0dGFjaChzdHJ1 Y3Qgc2NfaW5mbyAqc2MpIHsKKy8qCisJY29uc3Qgc3RydWN0IHsKKwkJaW50IHBvcnQsYml0czsK Kwl9ICpwLCBwb3J0c1tdID0geyAKKwkJezB4MzMwLDB9LCAKKwkJezB4MzIwLDF9LCAKKwkJezB4 MzEwLDJ9LCAKKwkJezB4MzAwLDN9LCAKKwkJezAsMH0gfSA7CisJTm90ZXMsIENNUENJX1JFR19W TVBVU0VMIHNldHMgdGhlIGlvIHBvcnQgZm9yIHRoZSBtcHUuICBEb2VzCisJYW55b25lIGtub3cg aG93IHRvIGJ1c19zcGFjZSB0YWc/CisqLworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfRlVOQ18x LCBDTVBDSV9SRUdfVUFSVF9FTkFCTEUpOworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfTEVHQUNZ X0NUUkwsIAorCQkJQ01QQ0lfUkVHX1ZNUFVTRUxfTUFTSyA8PCBDTVBDSV9SRUdfVk1QVVNFTF9T SElGVCk7CisJY21pX3NldDQoc2MsIENNUENJX1JFR19MRUdBQ1lfQ1RSTCwgCisJCQkwIDw8IENN UENJX1JFR19WTVBVU0VMX1NISUZUICk7CisJY21pX3NldDQoc2MsIENNUENJX1JFR19GVU5DXzEs IENNUENJX1JFR19VQVJUX0VOQUJMRSk7CisJc2MtPm1wdSA9IG1wdTQwMV9pbml0KCZjbWlfbXB1 X2NsYXNzLCBzYywgY21pX2ludHIsICZzYy0+bXB1X2ludHIpOworfQorCisKKwogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLwogLyogUG93ZXIgYW5kIHJlc2V0ICovCiAKQEAgLTgwMiw2ICs4ODIsMTAg QEAKIAkJIENNUENJX1JFR19URE1BX0lOVFJfRU5BQkxFKTsKIAljbWlfY2xyNChzYywgQ01QQ0lf UkVHX0ZVTkNfMCwKIAkJIENNUENJX1JFR19DSDBfRU5BQkxFIHwgQ01QQ0lfUkVHX0NIMV9FTkFC TEUpOworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfRlVOQ18xLCBDTVBDSV9SRUdfVUFSVF9FTkFC TEUpOworCisJaWYoIHNjLT5tcHUgKQorCQlzYy0+bXB1X2ludHIgPSAwOwogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCkBAIC04NTksNiArOTQzLDggQEAKIAlzYy0+c3QgPSBybWFuX2dldF9i dXN0YWcoc2MtPnJlZyk7CiAJc2MtPnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5yZWcpOwog CisJY21pX21pZGlhdHRhY2goc2MpOworCiAJc2MtPmlycWlkID0gMDsKIAlzYy0+aXJxICAgPSBi dXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZzYy0+aXJxaWQsCiAJCQkJ CSAgIFJGX0FDVElWRSB8IFJGX1NIQVJFQUJMRSk7CkBAIC05MzgsNyArMTAyNCwxMiBAQAogCWJ1 c19kbWFfdGFnX2Rlc3Ryb3koc2MtPnBhcmVudF9kbWF0KTsKIAlidXNfdGVhcmRvd25faW50cihk ZXYsIHNjLT5pcnEsIHNjLT5paCk7CiAJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVT X0lSUSwgc2MtPmlycWlkLCBzYy0+aXJxKTsKKwlpZihzYy0+bXB1KQorCQltcHU0MDFfdW5pbml0 KHNjLT5tcHUpOwogCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsIHNj LT5yZWdpZCwgc2MtPnJlZyk7CisJaWYgKHNjLT5tcHVfcmVnKQorCSAgICBidXNfcmVsZWFzZV9y ZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULCBzYy0+bXB1X3JlZ2lkLCBzYy0+bXB1X3JlZyk7 CisKIAlzbmRfbXR4ZnJlZShzYy0+bG9jayk7CiAJZnJlZShzYywgTV9ERVZCVUYpOwogCkBAIC0x MDA5LDQgKzExMDAsNSBAQAogCiBEUklWRVJfTU9EVUxFKHNuZF9jbWksIHBjaSwgY21pX2RyaXZl ciwgcGNtX2RldmNsYXNzLCAwLCAwKTsKIE1PRFVMRV9ERVBFTkQoc25kX2NtaSwgc291bmQsIFNP VU5EX01JTlZFUiwgU09VTkRfUFJFRlZFUiwgU09VTkRfTUFYVkVSKTsKK01PRFVMRV9ERVBFTkQo c25kX2NtaSwgbWlkaSwgMSwxLDEpOwogTU9EVUxFX1ZFUlNJT04oc25kX2NtaSwgMSk7CkluZGV4 OiBzeXMvZGV2L3NvdW5kL3BjaS9lbXUxMGsxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv bmN2cy9zcmMvc3lzL2Rldi9zb3VuZC9wY2kvZW11MTBrMS5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjUyLjIuMgpkaWZmIC11IC1yMS41Mi4yLjIgZW11MTBrMS5jCi0tLSBzeXMvZGV2L3NvdW5k L3BjaS9lbXUxMGsxLmMJMzAgSmFuIDIwMDUgMDE6MDA6MDQgLTAwMDAJMS41Mi4yLjIKKysrIHN5 cy9kZXYvc291bmQvcGNpL2VtdTEwazEuYwk1IE1hciAyMDA1IDE2OjMyOjQwIC0wMDAwCkBAIC0z NSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+CiAjaW5jbHVkZSA8c3lz L3F1ZXVlLmg+CiAKKyNpbmNsdWRlIDxkZXYvc291bmQvbWlkaS9tcHU0MDEuaD4KKyNpbmNsdWRl ICJtcHVmb2lfaWYuaCIKKworCiBTTkRfREVDTEFSRV9GSUxFKCIkRnJlZUJTRDogc3JjL3N5cy9k ZXYvc291bmQvcGNpL2VtdTEwazEuYyx2IDEuNTIuMi4yIDIwMDUvMDEvMzAgMDE6MDA6MDQgaW1w IEV4cCAkIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzYsNiArMTQwLDkgQEAKIAlzdHJ1 Y3QgZW11X3ZvaWNlIHZvaWNlWzY0XTsKIAlzdHJ1Y3Qgc2NfcGNoaW5mbyBwY2hbRU1VX01BWF9D SEFOU107CiAJc3RydWN0IHNjX3JjaGluZm8gcmNoWzNdOworCXN0cnVjdCBtcHU0MDEgICAqbXB1 OworCW1wdTQwMV9pbnRyX3QgICAgICAgICAgICptcHVfaW50cjsKKwlpbnQgbXB1dHg7CiB9Owog CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTA1OCw4ICsxMDY1LDY1IEBACiB9OwogQ0hBTk5FTF9E RUNMQVJFKGVtdXJjaGFuKTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIKK2VtdV9tcmVhZCh2b2lk ICphcmcsIHN0cnVjdCBzY19pbmZvICpzYywgaW50IHJlZykKK3sJCisJdW5zaWduZWQgaW50IGQ7 CisKKwlkID0gZW11X3JkKHNjLCAweDE4ICsgcmVnLCAxKTsgCisJcmV0dXJuIGQ7Cit9CisKK3N0 YXRpYyB2b2lkCitlbXVfbXdyaXRlKHZvaWQgKmFyZywgc3RydWN0IHNjX2luZm8gKnNjLCBpbnQg cmVnLCB1bnNpZ25lZCBjaGFyIGIpCit7CisKKwllbXVfd3Ioc2MsIDB4MTggKyByZWcsIGIsIDEp OworfQorCitzdGF0aWMgaW50CitlbXVfbXVuaW5pdCh2b2lkICphcmcsIHN0cnVjdCBzY19pbmZv ICpzYykKK3sKKworCXNuZF9tdHhsb2NrKHNjLT5sb2NrKTsKKwlzYy0+bXB1X2ludHIgPSAwOwor CXNuZF9tdHh1bmxvY2soc2MtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBrb2Jq X21ldGhvZF90IGVtdV9tcHVfbWV0aG9kc1tdID0geworICAgIAlLT0JKTUVUSE9EKG1wdWZvaV9y ZWFkLAkJZW11X21yZWFkKSwKKyAgICAJS09CSk1FVEhPRChtcHVmb2lfd3JpdGUsCWVtdV9td3Jp dGUpLAorICAgIAlLT0JKTUVUSE9EKG1wdWZvaV91bmluaXQsCWVtdV9tdW5pbml0KSwKKwl7IDAs IDAgfQorfTsKKworREVGSU5FX0NMQVNTKGVtdV9tcHUsIGVtdV9tcHVfbWV0aG9kcywgMCk7CisK K3N0YXRpYyB2b2lkCitlbXVfaW50cjIodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc2NfaW5mbyAqc2Mg PSAoc3RydWN0IHNjX2luZm8gKilwOworCisJaWYgKHNjLT5tcHVfaW50cikKKwkgICAgKHNjLT5t cHVfaW50cikoc2MtPm1wdSk7Cit9CisKK3N0YXRpYyB2b2lkCitlbXVfbWlkaWF0dGFjaChzdHJ1 Y3Qgc2NfaW5mbyAqc2MpCit7CisJaW50IGk7CisKKwlpID0gZW11X3JkKHNjLCBJTlRFLCA0KTsK KwlpIHw9IElOVEVfTUlESVJYRU5BQkxFOworCWVtdV93cihzYywgSU5URSwgaSwgNCk7CisKKwlz Yy0+bXB1ID0gbXB1NDAxX2luaXQoJmVtdV9tcHVfY2xhc3MsIHNjLCBlbXVfaW50cjIsICZzYy0+ bXB1X2ludHIpOworfQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxl ciAqLworCiBzdGF0aWMgdm9pZAogZW11X2ludHIodm9pZCAqZGF0YSkKIHsKQEAgLTEwOTksNiAr MTE2MywxMSBAQAogI2VuZGlmCiAJCX0KIAorCSAgICBpZiAoc3RhdCAmIElQUl9NSURJUkVDVkJV RkVNUFRZKQorCQlpZiAoc2MtPm1wdV9pbnRyKSB7CisJCSAgICAoc2MtPm1wdV9pbnRyKShzYy0+ bXB1KTsKKwkJICAgIGFjayB8PSBJUFJfTUlESVJFQ1ZCVUZFTVBUWSB8IElQUl9NSURJVFJBTlNC VUZFTVBUWTsKKyAJCX0KIAkJaWYgKHN0YXQgJiB+YWNrKQogCQkJZGV2aWNlX3ByaW50ZihzYy0+ ZGV2LCAiZG9kZ3kgaXJxOiAleCAoaGFybWxlc3MpXG4iLAogCQkJICAgIHN0YXQgJiB+YWNrKTsK QEAgLTE4MTgsNyArMTg4Nyw2IEBACiAJCQl9CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApA QCAtMTg3MCw2ICsxOTM4LDggQEAKIAllbXVfZnJlZShzYywgc2MtPm1lbS5wdGJfcGFnZXMpOwog CWVtdV9mcmVlKHNjLCBzYy0+bWVtLnNpbGVudF9wYWdlKTsKIAorCWlmKHNjLT5tcHUpCisJICAg IG1wdTQwMV91bmluaXQoc2MtPm1wdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NTgsNiArMjAy OCw4IEBACiAJZ290bWljID0gKGFjOTdfZ2V0Y2Fwcyhjb2RlYykgJiBBQzk3X0NBUF9NSUNDSEFO TkVMKSA/IDEgOiAwOwogCWlmIChtaXhlcl9pbml0KGRldiwgYWM5N19nZXRtaXhlcmNsYXNzKCks IGNvZGVjKSA9PSAtMSkgZ290byBiYWQ7CiAKKwllbXVfbWlkaWF0dGFjaChzYyk7CisKIAlpID0g MDsKIAlzYy0+aXJxID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAm aSwKIAkgICAgUkZfQUNUSVZFIHwgUkZfU0hBUkVBQkxFKTsKQEAgLTIwMzUsNiArMjEwNyw3IEBA CiBEUklWRVJfTU9EVUxFKHNuZF9lbXUxMGsxLCBwY2ksIGVtdV9kcml2ZXIsIHBjbV9kZXZjbGFz cywgMCwgMCk7CiBNT0RVTEVfREVQRU5EKHNuZF9lbXUxMGsxLCBzb3VuZCwgU09VTkRfTUlOVkVS LCBTT1VORF9QUkVGVkVSLCBTT1VORF9NQVhWRVIpOwogTU9EVUxFX1ZFUlNJT04oc25kX2VtdTEw azEsIDEpOworTU9EVUxFX0RFUEVORChzbmRfZW11MTBrMSwgbWlkaSwgMSwgMSwgMSk7CiAKIC8q IGR1bW15IGRyaXZlciB0byBzaWxlbmNlIHRoZSBqb3lzdGljayBkZXZpY2UgKi8KIHN0YXRpYyBp bnQKSW5kZXg6IHN5cy9tb2R1bGVzL3NvdW5kL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9ob21lL25jdnMvc3JjL3N5cy9tb2R1bGVzL3NvdW5kL01ha2VmaWxlLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjIKZGlmZiAtdSAtcjEuMiBNYWtlZmlsZQotLS0gc3lzL21vZHVsZXMvc291bmQv TWFrZWZpbGUJMTYgSnVsIDIwMDQgMDM6NTg6NDYgLTAwMDAJMS4yCisrKyBzeXMvbW9kdWxlcy9z b3VuZC9NYWtlZmlsZQk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBAIC0zLDUgKzMsNiBAQAog U1VCRElSID0KIFNVQkRJUiArPSBzb3VuZAogU1VCRElSICs9IGRyaXZlcgorU1VCRElSICs9IG1p ZGkKIAogLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+CkluZGV4OiBzeXMvbW9kdWxlcy9zb3VuZC9k cml2ZXIvY21pL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5 cy9tb2R1bGVzL3NvdW5kL2RyaXZlci9jbWkvTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMwpkaWZmIC11IC1yMS4zIE1ha2VmaWxlCi0tLSBzeXMvbW9kdWxlcy9zb3VuZC9kcml2ZXIv Y21pL01ha2VmaWxlCTcgRmViIDIwMDMgMTM6NTY6MzEgLTAwMDAJMS4zCisrKyBzeXMvbW9kdWxl cy9zb3VuZC9kcml2ZXIvY21pL01ha2VmaWxlCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAg LTQsNiArNCw3IEBACiAKIEtNT0Q9CXNuZF9jbWkKIFNSQ1M9CWRldmljZV9pZi5oIGJ1c19pZi5o IHBjaV9pZi5oCitTUkNTKz0gbXB1Zm9pX2lmLmgKIFNSQ1MrPQljbWkuYwogCiAuaW5jbHVkZSA8 YnNkLmttb2QubWs+CkluZGV4OiBzeXMvbW9kdWxlcy9zb3VuZC9kcml2ZXIvZW11MTBrMS9NYWtl ZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMvbW9kdWxlcy9zb3Vu ZC9kcml2ZXIvZW11MTBrMS9NYWtlZmlsZSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYg LXUgLXIxLjQgTWFrZWZpbGUKLS0tIHN5cy9tb2R1bGVzL3NvdW5kL2RyaXZlci9lbXUxMGsxL01h a2VmaWxlCTExIEphbiAyMDA0IDEwOjMwOjU2IC0wMDAwCTEuNAorKysgc3lzL21vZHVsZXMvc291 bmQvZHJpdmVyL2VtdTEwazEvTWFrZWZpbGUJNSBNYXIgMjAwNSAxNjoyNzowNyAtMDAwMApAQCAt NSw2ICs1LDcgQEAKIAogS01PRD0Jc25kX2VtdTEwazEKIFNSQ1M9CWRldmljZV9pZi5oIGJ1c19p Zi5oIHBjaV9pZi5oIGVtdTEwazEtYWxzYSVkaWtlZC5oCitTUkNTKz0gbXB1Zm9pX2lmLmgKIFNS Q1MrPQllbXUxMGsxLmMKIAogQ0xFQU5GSUxFUys9IGVtdTEwazEtYWxzYSVkaWtlZC5oCkluZGV4 OiBzeXMvbW9kdWxlcy9zb3VuZC9taWRpL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5 cy9tb2R1bGVzL3NvdW5kL21pZGkvTWFrZWZpbGUKZGlmZiAtTiBzeXMvbW9kdWxlcy9zb3VuZC9t aWRpL01ha2VmaWxlCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg c3lzL21vZHVsZXMvc291bmQvbWlkaS9NYWtlZmlsZQk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAw CkBAIC0wLDAgKzEsMTMgQEAKKyMgJEZyZWVCU0QkCisKKy5QQVRIOiAkey5DVVJESVJ9Ly4uLy4u Ly4uL2Rldi9zb3VuZC9taWRpCisKK0tNT0Q9CW1pZGkKKworU1JDUz0JbWlkaS5jIG1wdTQwMS5j IHNlcXVlbmNlci5jCitTUkNTKz0JZGV2aWNlX2lmLmggYnVzX2lmLmggbXB1X2lmLmggbXB1Zm9p X2lmLmggc3ludGhfaWYuaAorU1JDUys9CW1wdV9pZi5jIG1wdWZvaV9pZi5jIHN5bnRoX2lmLmMK KworRVhQT1JUX1NZTVM9CVlFUwkjIFhYWCBldmFsdWF0ZQorCisuaW5jbHVkZSA8YnNkLmttb2Qu bWs+Cg== --Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY--