Return-Path: Message-ID: From: hariharan veerappan To: bluez-users@lists.sourceforge.net Subject: Re: [Bluez-users] H5 3 wire UART connect problem In-Reply-To: <1120551220.10273.202.camel@pegasus> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_108_18503818.1120641631152" References: <1120213256.15397.187.camel@pegasus> <1120224082.15397.197.camel@pegasus> <1120482028.10273.154.camel@pegasus> <1120551220.10273.202.camel@pegasus> Sender: bluez-users-admin@lists.sourceforge.net Errors-To: bluez-users-admin@lists.sourceforge.net Reply-To: bluez-users@lists.sourceforge.net List-Unsubscribe: , List-Id: BlueZ users List-Post: List-Help: List-Subscribe: , List-Archive: Date: Wed, 6 Jul 2005 14:50:31 +0530 ------=_Part_108_18503818.1120641631152 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Dear Marcel, Thanks for your support. Please find her with the source modified for the H:5 3 WIRE UART Silicon wave dongle implementation in Bluez stack. Advise us if you find anything wrong Thanks and regards Hariharan.V On 7/5/05, Marcel Holtmann wrote: > Hi Hariharan, >=20 > > We have changed the hciattach.c and hci_h5.c (H5 3 WIRE UART Bluetooth = driver). > > The Bluetooth module is up. We could read the Bluetooth device address > > and scan the > > bluetooth network. >=20 > I think it is time to show us the source code for the 3-Wire UART > support, before we discuss any other things. >=20 > Regards >=20 > Marcel >=20 >=20 >=20 >=20 > ------------------------------------------------------- > SF.Net email is sponsored by: Discover Easy Linux Migration Strategies > from IBM. Find simple to follow Roadmaps, straightforward articles, > informative Webcasts and more! Get everything you need to get up to > speed, fast. http://ads.osdn.com/?ad_id=3D7477&alloc_id=3D16492&op=3Dclic= k > _______________________________________________ > Bluez-users mailing list > Bluez-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bluez-users > ------=_Part_108_18503818.1120641631152 Content-Type: application/octet-stream; name="hci_h5.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hci_h5.c" LyogCiAgIEJsdWVDb3JlIFNlcmlhbCBQcm90b2NvbCAoQkNTUCkgZm9yIExpbnV4IEJsdWV0b290 aCBzdGFjayAoQmx1ZVopLgogICBDb3B5cmlnaHQgMjAwMiBieSBGYWJyaXppbyBHZW5uYXJpIDxm YWJyaXppby5nZW5uYXJpQHBoaWxpcHMuY29tPgoKICAgQmFzZWQgb24KICAgICAgIGhjaV9oNC5j ICBieSBNYXhpbSBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29tbS5jb20+CiAgICAgICBBQkNTUCAg ICAgYnkgQ2FybCBPcnNib3JuIDxjam9AY3NyLmNvbT4KCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwoKICAgVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MKICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgog ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMp IEJFIExJQUJMRSBGT1IgQU5ZCiAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAogICBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCiAg IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s IEFSSVNJTkcgT1VUIE9GIAogICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgoKICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJ QUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKICAgQ09QWVJJR0hUUywg VFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAogICBT T0ZUV0FSRSBJUyBESVNDTEFJTUVELgoqLwoKLyoKICogJElkOiBoY2lfYmNzcC5jLHYgMS4yIDIw MDIvMDkvMjYgMDU6MDU6MTQgbWF4ayBFeHAgJAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogU2lsaWNv biB3YXZlIEg6NSAzIFdJUkUgVUFSVCAtIEdEQSBUZWNobm9sb2dpZXMgTHRkIENoZW5uYWkgSU5E SUEqLwovKiBtb2RpZmllZCBmb3IgSDUgMyBXSVJFIFVBUlQgIGJ5IFYuSGFyaWhhcmFuICh2Lmhh cmloYXJhbkBnZGF0ZWNoLmNvLmluKSAqLwovKiBNb2RpZmljYXRpb24gaGlzdG9yeSAqLwovKiBC Q1NQIGFuZCBINSAoMyBXSVJFIFVBUlQgZGlmZmVycyBvbmx5IHdpdGggdGhlIHBvcnRvY29sIG51 bWJlciBkZWZpbml0aW9ucyovCi8qVGhlIHByb3RvY29sIGRlZmluaXRpb25zIHdlcmUgY2hhbmdl ZCBpbiB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgKi8KLypzdGF0aWMgaW5saW5lIHZvaWQg YmNzcF9jb21wbGV0ZV9yeF9wa3Qoc3RydWN0IGhjaV91YXJ0ICpodSkKc3RhdGljIHN0cnVjdCBz a19idWZmICpiY3NwX3ByZXBhcmVfcGt0KHN0cnVjdCBiY3NwX3N0cnVjdCAqYmNzcCwgdTggKmRh dGEsCgkJaW50IGxlbiwgaW50IHBrdF90eXBlKQoKKi8KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBW RVJTSU9OICIwLjEiCgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KCiNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiNpbmNsdWRlIDxsaW51eC9jb25m aWcuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgoj aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRl IDxsaW51eC9mY250bC5oPgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRlIDxs aW51eC9wdHJhY2UuaD4KI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KCiNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CiNpbmNsdWRlIDxsaW51eC90dHkuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNp bmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgojaW5jbHVk ZSA8bGludXgvaW9jdGwuaD4KI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgoKI2luY2x1ZGUgPG5l dC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3Jl Lmg+CiNpbmNsdWRlICJoY2lfdWFydC5oIgojaW5jbHVkZSAiaGNpX2g1LmgiCgovLyN1bmRlZiBD T05GSUdfQkxVRVpfSENJVUFSVF9CQ1NQX1RYQ1JDCgovLyNkZWZpbmUgSENJX1VBUlRfREVCVUcK CiNpZm5kZWYgSENJX1VBUlRfREVCVUcKI3VuZGVmICBCVF9EQkcKI2RlZmluZSBCVF9EQkcoIEEu Li4gKSAKI3VuZGVmICBCVF9ETVAKI2RlZmluZSBCVF9ETVAoIEEuLi4gKSAKI2VuZGlmCgovKiAt LS0tIEJDU1AgQ1JDIGNhbGN1bGF0aW9uIC0tLS0gKi8KCi8qIFRhYmxlIGZvciBjYWxjdWxhdGlu ZyBDUkMgZm9yIHBvbHlub21pYWwgMHgxMDIxLCBMU0IgcHJvY2Vzc2VkIGZpcnN0LAppbml0aWFs IHZhbHVlIDB4ZmZmZiwgYml0cyBzaGlmdGVkIGluIHJldmVyc2Ugb3JkZXIuICovCgpzdGF0aWMg Y29uc3QgdTE2IGNyY190YWJsZVtdID0gewoJMHgwMDAwLCAweDEwODEsIDB4MjEwMiwgMHgzMTgz LAoJMHg0MjA0LCAweDUyODUsIDB4NjMwNiwgMHg3Mzg3LAoJMHg4NDA4LCAweDk0ODksIDB4YTUw YSwgMHhiNThiLAoJMHhjNjBjLCAweGQ2OGQsIDB4ZTcwZSwgMHhmNzhmCn07CgovKiBJbml0aWFs aXNlIHRoZSBjcmMgY2FsY3VsYXRvciAqLwojZGVmaW5lIEJDU1BfQ1JDX0lOSVQoeCkgeCA9IDB4 ZmZmZgoKLyoKICAgVXBkYXRlIGNyYyB3aXRoIG5leHQgZGF0YSBieXRlCgogICBJbXBsZW1lbnRh dGlvbiBub3RlCiAgICAgICAgVGhlIGRhdGEgYnl0ZSBpcyB0cmVhdGVkIGFzIHR3byBuaWJibGVz LiAgVGhlIGNyYyBpcyBnZW5lcmF0ZWQKICAgICAgICBpbiByZXZlcnNlLCBpLmUuLCBiaXRzIGFy ZSBmZWQgaW50byB0aGUgcmVnaXN0ZXIgZnJvbSB0aGUgdG9wLgoqLwpzdGF0aWMgdm9pZCBiY3Nw X2NyY191cGRhdGUodTE2ICpjcmMsIHU4IGQpCnsKCXUxNiByZWcgPSAqY3JjOwoKCXJlZyA9IChy ZWcgPj4gNCkgXiBjcmNfdGFibGVbKHJlZyBeIGQpICYgMHgwMDBmXTsKCXJlZyA9IChyZWcgPj4g NCkgXiBjcmNfdGFibGVbKHJlZyBeIChkID4+IDQpKSAmIDB4MDAwZl07CgoJKmNyYyA9IHJlZzsK fQoKLyoKICAgR2V0IHJldmVyc2Ugb2YgZ2VuZXJhdGVkIGNyYwoKICAgSW1wbGVtZW50YXRpb24g bm90ZQogICAgICAgIFRoZSBjcmMgZ2VuZXJhdG9yIChiY3NwX2NyY19pbml0KCkgYW5kIGJjc3Bf Y3JjX3VwZGF0ZSgpKQogICAgICAgIGNyZWF0ZXMgYSByZXZlcnNlZCBjcmMsIHNvIGl0IG5lZWRz IHRvIGJlIHN3YXBwZWQgYmFjayBiZWZvcmUKICAgICAgICBiZWluZyBwYXNzZWQgb24uCiovCnN0 YXRpYyB1MTYgYmNzcF9jcmNfcmV2ZXJzZSh1MTYgY3JjKQp7Cgl1MTYgYiwgcmV2OwoKCWZvciAo YiA9IDAsIHJldiA9IDA7IGIgPCAxNjsgYisrKSB7CgkJcmV2ID0gcmV2IDw8IDE7CgkJcmV2IHw9 IChjcmMgJiAxKTsKCQljcmMgPSBjcmMgPj4gMTsKCX0KCXJldHVybiAocmV2KTsKfQoKLyogLS0t LSBCQ1NQIGNvcmUgLS0tLSAqLwoKc3RhdGljIHZvaWQgYmNzcF9zbGlwX21zZ2RlbGltKHN0cnVj dCBza19idWZmICpza2IpCnsKCWNvbnN0IGNoYXIgcGt0X2RlbGltID0gMHhjMDsKCW1lbWNweShz a2JfcHV0KHNrYiwgMSksICZwa3RfZGVsaW0sIDEpOwp9CgpzdGF0aWMgdm9pZCBiY3NwX3NsaXBf b25lX2J5dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggYykKewoJY29uc3QgY2hhciBlc2NfYzBb Ml0gPSB7IDB4ZGIsIDB4ZGMgfTsKCWNvbnN0IGNoYXIgZXNjX2RiWzJdID0geyAweGRiLCAweGRk IH07CgoJc3dpdGNoIChjKSB7CgljYXNlIDB4YzA6CgkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwg JmVzY19jMCwgMik7CgkJYnJlYWs7CgljYXNlIDB4ZGI6CgkJbWVtY3B5KHNrYl9wdXQoc2tiLCAy KSwgJmVzY19kYiwgMik7CgkJYnJlYWs7CglkZWZhdWx0OgoJCW1lbWNweShza2JfcHV0KHNrYiwg MSksICZjLCAxKTsKCX0KfQoKc3RhdGljIGludCBiY3NwX2VucXVldWUoc3RydWN0IGhjaV91YXJ0 ICpodSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJc3RydWN0IGJjc3Bfc3RydWN0ICpiY3NwID0g aHUtPnByaXY7CgoJaWYgKHNrYi0+bGVuID4gMHhGRkYpIHsKCQlCVF9FUlIoIlBhY2tldCB0b28g bG9uZyIpOwoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybiAwOwoJfQoKCXN3aXRjaCAoc2tiLT5w a3RfdHlwZSkgewoJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CgljYXNlIEhDSV9DT01NQU5EX1BLVDoK CQlza2JfcXVldWVfdGFpbCgmYmNzcC0+cmVsLCBza2IpOwoJCWJyZWFrOwoKCWNhc2UgSENJX1ND T0RBVEFfUEtUOgoJCXNrYl9xdWV1ZV90YWlsKCZiY3NwLT51bnJlbCwgc2tiKTsKCQlicmVhazsK CQkKCWRlZmF1bHQ6CgkJQlRfRVJSKCJVbmtub3duIHBhY2tldCB0eXBlIik7CgkJa2ZyZWVfc2ti KHNrYik7CgkJYnJlYWs7Cgl9CglyZXR1cm4gMDsKfQoKLyogU2lsaWNvbiB3YXZlIEg6NSAzIFdJ UkUgVUFSVCAtIEdEQSBUZWNobm9sb2dpZXMgTHRkIENoZW5uYWkgSU5ESUEqLwovKiBtb2RpZmll ZCBmb3IgSDUgMyBXSVJFIFVBUlQgIGJ5IFYuSGFyaWhhcmFuICh2LmhhcmloYXJhbkBnZGF0ZWNo LmNvLmluKSAqLwoKc3RhdGljIHN0cnVjdCBza19idWZmICpiY3NwX3ByZXBhcmVfcGt0KHN0cnVj dCBiY3NwX3N0cnVjdCAqYmNzcCwgdTggKmRhdGEsCgkJaW50IGxlbiwgaW50IHBrdF90eXBlKQp7 CglzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKCXU4ICBoZHJbNF0sIGNoYW47CglpbnQgcmVsLCBpOwoK I2lmZGVmIENPTkZJR19CTFVFWl9IQ0lVQVJUX0JDU1BfVFhDUkMKCXUxNiBCQ1NQX0NSQ19JTklU KGJjc3BfdHhtc2dfY3JjKTsKI2VuZGlmCgoJc3dpdGNoIChwa3RfdHlwZSkgewoJY2FzZSBIQ0lf QUNMREFUQV9QS1Q6CgkJY2hhbiA9MjsgLypjaGFuID0gNjsqLwkvKiBCQ1NQIEFDTCBjaGFubmVs ICovCgkJcmVsID0gMTsJLyogcmVsaWFibGUgY2hhbm5lbCAqLwoJCWJyZWFrOwoJY2FzZSBIQ0lf Q09NTUFORF9QS1Q6CgkJY2hhbiA9MTsgLypjaGFuID0gNTsqLwkvKiBCQ1NQIGNtZC9ldnQgY2hh bm5lbCAqLwoJCXJlbCA9IDE7CS8qIHJlbGlhYmxlIGNoYW5uZWwgKi8KCQlicmVhazsKCWNhc2Ug SENJX1NDT0RBVEFfUEtUOgoJCWNoYW4gPTM7IC8qY2hhbiA9IDc7Ki8JLyogQkNTUCBTQ08gY2hh bm5lbCAqLwoJCXJlbCA9IDA7CS8qIHVucmVsaWFibGUgY2hhbm5lbCAqLwoJCWJyZWFrOwoJY2Fz ZSBCQ1NQX0xFX1BLVDoKCQljaGFuID0xNTsgLypjaGFuID0gMTsqLwkvKiBCQ1NQIExFIGNoYW5u ZWwgKi8KCQlyZWwgPSAwOwkvKiB1bnJlbGlhYmxlIGNoYW5uZWwgKi8KCQlicmVhazsKCWNhc2Ug QkNTUF9BQ0tfUEtUOgoJCWNoYW4gPSAwOwkvKiBCQ1NQIGludGVybmFsIGNoYW5uZWwgKi8KCQly ZWwgPSAwOwkvKiB1bnJlbGlhYmxlIGNoYW5uZWwgKi8KCQlicmVhazsKCWRlZmF1bHQ6CgkJQlRf RVJSKCJVbmtub3duIHBhY2tldCB0eXBlIik7CgkJcmV0dXJuIE5VTEw7Cgl9CgoJLyogTWF4IGxl biBvZiBwYWNrZXQ6IChvcmlnaW5hbCBsZW4gKzQoYmNzcCBoZHIpICsyKGNyYykpKjIKCSAgIChi ZWNhdXNlIGJ5dGVzIDB4YzAgYW5kIDB4ZGIgYXJlIGVzY2FwZWQsIHdvcnN0IGNhc2UgaXMKCSAg IHdoZW4gdGhlIHBhY2tldCBpcyBhbGwgbWFkZSBvZiAweGMwIGFuZCAweGRiIDopICkKCSAgICsg MiAoMHhjMCBkZWxpbWl0ZXJzIGF0IHN0YXJ0IGFuZCBlbmQpLiAqLwoKCW5za2IgPSBhbGxvY19z a2IoKGxlbiArIDYpICogMiArIDIsIEdGUF9BVE9NSUMpOwoJaWYgKCFuc2tiKQoJCXJldHVybiBO VUxMOwoKCW5za2ItPnBrdF90eXBlID0gcGt0X3R5cGU7CgoJYmNzcF9zbGlwX21zZ2RlbGltKG5z a2IpOwoKCWhkclswXSA9IGJjc3AtPnJ4c2VxX3R4YWNrIDw8IDM7CgliY3NwLT50eGFja19yZXEg PSAwOwoJQlRfREJHKCJXZSByZXF1ZXN0IHBhY2tldCBubyAldSB0byBjYXJkIiwgYmNzcC0+cnhz ZXFfdHhhY2spOwoKCWlmIChyZWwpIHsKCQloZHJbMF0gfD0gMHg4MCArIGJjc3AtPm1zZ3FfdHhz ZXE7CgkJQlRfREJHKCJTZW5kaW5nIHBhY2tldCB3aXRoIHNlcW5vICV1IiwgYmNzcC0+bXNncV90 eHNlcSk7CgkJYmNzcC0+bXNncV90eHNlcSA9ICsrKGJjc3AtPm1zZ3FfdHhzZXEpICYgMHgwNzsK CX0KI2lmZGVmICBDT05GSUdfQkxVRVpfSENJVUFSVF9CQ1NQX1RYQ1JDCgloZHJbMF0gfD0gMHg0 MDsKI2VuZGlmCgoJaGRyWzFdICA9IChsZW4gPDwgNCkgJiAweEZGOwoJaGRyWzFdIHw9IGNoYW47 CgloZHJbMl0gID0gbGVuID4+IDQ7CgloZHJbM10gID0gfihoZHJbMF0gKyBoZHJbMV0gKyBoZHJb Ml0pOwoKCS8qIFB1dCBCQ1NQIGhlYWRlciAqLwoJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewoJ CWJjc3Bfc2xpcF9vbmVfYnl0ZShuc2tiLCBoZHJbaV0pOwojaWZkZWYgIENPTkZJR19CTFVFWl9I Q0lVQVJUX0JDU1BfVFhDUkMKCQliY3NwX2NyY191cGRhdGUoJmJjc3BfdHhtc2dfY3JjLCBoZHJb aV0pOwojZW5kaWYKCX0KCgkvKiBQdXQgcGF5bG9hZCAqLwoJZm9yIChpID0gMDsgaSA8IGxlbjsg aSsrKSB7CgkJYmNzcF9zbGlwX29uZV9ieXRlKG5za2IsIGRhdGFbaV0pOwojaWZkZWYgIENPTkZJ R19CTFVFWl9IQ0lVQVJUX0JDU1BfVFhDUkMKCQliY3NwX2NyY191cGRhdGUoJmJjc3BfdHhtc2df Y3JjLCBkYXRhW2ldKTsKI2VuZGlmCgl9CgojaWZkZWYgQ09ORklHX0JMVUVaX0hDSVVBUlRfQkNT UF9UWENSQwoJLyogUHV0IENSQyAqLwoJYmNzcF90eG1zZ19jcmMgPSBiY3NwX2NyY19yZXZlcnNl KGJjc3BfdHhtc2dfY3JjKTsKCWJjc3Bfc2xpcF9vbmVfYnl0ZShuc2tiLCAodTgpICgoYmNzcF90 eG1zZ19jcmMgPj4gOCkgJiAweDAwZmYpKTsKCWJjc3Bfc2xpcF9vbmVfYnl0ZShuc2tiLCAodTgp IChiY3NwX3R4bXNnX2NyYyAmIDB4MDBmZikpOwojZW5kaWYKCgliY3NwX3NsaXBfbXNnZGVsaW0o bnNrYik7CglyZXR1cm4gbnNrYjsKfQoKLyogVGhpcyBpcyBhIHJld3JpdGUgb2YgcGt0X2F2YWls IGluIEFCQ1NQICovCnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYmNzcF9kZXF1ZXVlKHN0cnVjdCBo Y2lfdWFydCAqaHUpCnsKCXN0cnVjdCBiY3NwX3N0cnVjdCAqYmNzcCA9IChzdHJ1Y3QgYmNzcF9z dHJ1Y3QgKikgaHUtPnByaXY7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJc3RydWN0IHNrX2J1ZmYg KnNrYjsKCQoJLyogRmlyc3Qgb2YgYWxsLCBjaGVjayBmb3IgdW5yZWxpYWJsZSBtZXNzYWdlcyBp biB0aGUgcXVldWUsCgkgICBzaW5jZSB0aGV5IGhhdmUgcHJpb3JpdHkgKi8KCglpZiAoKHNrYiA9 IHNrYl9kZXF1ZXVlKCZiY3NwLT51bnJlbCkpICE9IE5VTEwpIHsKCQlzdHJ1Y3Qgc2tfYnVmZiAq bnNrYiA9IGJjc3BfcHJlcGFyZV9wa3QoYmNzcCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgc2tiLT5w a3RfdHlwZSk7CgkJaWYgKG5za2IpIHsKCQkJa2ZyZWVfc2tiKHNrYik7CgkJCXJldHVybiBuc2ti OwoJCX0gZWxzZSB7CgkJCXNrYl9xdWV1ZV9oZWFkKCZiY3NwLT51bnJlbCwgc2tiKTsKCQkJQlRf RVJSKCJDb3VsZCBub3QgZGVxdWV1ZSBwa3QgYmVjYXVzZSBhbGxvY19za2IgZmFpbGVkIik7CgkJ fQoJfQoKCS8qIE5vdywgdHJ5IHRvIHNlbmQgYSByZWxpYWJsZSBwa3QuIFdlIGNhbiBvbmx5IHNl bmQgYQoJICAgcmVsaWFibGUgcGFja2V0IGlmIHRoZSBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ1 dCBub3QgeWV0IGFjaydlZAoJICAgaXMgPCB0aGFuIHRoZSB3aW5zaXplICovCgoJc3Bpbl9sb2Nr X2lycXNhdmUoJmJjc3AtPnVuYWNrLmxvY2ssIGZsYWdzKTsKCglpZiAoYmNzcC0+dW5hY2sucWxl biA8IEJDU1BfVFhXSU5TSVpFICYmIChza2IgPSBza2JfZGVxdWV1ZSgmYmNzcC0+cmVsKSkgIT0g TlVMTCkgewoJCXN0cnVjdCBza19idWZmICpuc2tiID0gYmNzcF9wcmVwYXJlX3BrdChiY3NwLCBz a2ItPmRhdGEsIHNrYi0+bGVuLCBza2ItPnBrdF90eXBlKTsKCQlpZiAobnNrYikgewoJCQlfX3Nr Yl9xdWV1ZV90YWlsKCZiY3NwLT51bmFjaywgc2tiKTsKCQkJbW9kX3RpbWVyKCZiY3NwLT50YmNz cCwgamlmZmllcyArIEhaIC8gNCk7CgkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjc3AtPnVu YWNrLmxvY2ssIGZsYWdzKTsKCQkJcmV0dXJuIG5za2I7CgkJfSBlbHNlIHsKCQkJc2tiX3F1ZXVl X2hlYWQoJmJjc3AtPnJlbCwgc2tiKTsKCQkJQlRfRVJSKCJDb3VsZCBub3QgZGVxdWV1ZSBwa3Qg YmVjYXVzZSBhbGxvY19za2IgZmFpbGVkIik7CgkJfQoJfQoKCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmJjc3AtPnVuYWNrLmxvY2ssIGZsYWdzKTsKCgoJLyogV2UgY291bGQgbm90IHNlbmQgYSBy ZWxpYWJsZSBwYWNrZXQsIGVpdGhlciBiZWNhdXNlIHRoZXJlIGFyZQoJICAgbm9uZSBvciBiZWNh dXNlIHRoZXJlIGFyZSB0b28gbWFueSB1bmFjaydlZCBwa3RzLiBEaWQgd2UgcmVjZWl2ZQoJICAg YW55IHBhY2tldHMgd2UgaGF2ZSBub3QgYWNrbm93bGVkZ2VkIHlldCA/ICovCgoJaWYgKGJjc3At PnR4YWNrX3JlcSkgewoJCS8qIGlmIHNvLCBjcmFmdCBhbiBlbXB0eSBBQ0sgcGt0IGFuZCBzZW5k IGl0IG9uIEJDU1AgdW5yZWxpYWJsZQoJCSAgIGNoYW5uZWwgMCAqLwoJCXN0cnVjdCBza19idWZm ICpuc2tiID0gYmNzcF9wcmVwYXJlX3BrdChiY3NwLCBOVUxMLCAwLCBCQ1NQX0FDS19QS1QpOwoJ CXJldHVybiBuc2tiOwoJfQoKCS8qIFdlIGhhdmUgbm90aGluZyB0byBzZW5kICovCglyZXR1cm4g TlVMTDsKfQoKc3RhdGljIGludCBiY3NwX2ZsdXNoKHN0cnVjdCBoY2lfdWFydCAqaHUpCnsKCUJU X0RCRygiaHUgJXAiLCBodSk7CglyZXR1cm4gMDsKfQoKLyogUmVtb3ZlIGFjaydlZCBwYWNrZXRz ICovCnN0YXRpYyB2b2lkIGJjc3BfcGt0X2N1bGwoc3RydWN0IGJjc3Bfc3RydWN0ICpiY3NwKQp7 Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCWludCBpLCBwa3Rz X3RvX2JlX3JlbW92ZWQ7Cgl1OCBzZXFubzsKCglzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcC0+dW5h Y2subG9jaywgZmxhZ3MpOwoKCXBrdHNfdG9fYmVfcmVtb3ZlZCA9IGJjc3AtPnVuYWNrLnFsZW47 CglzZXFubyA9IGJjc3AtPm1zZ3FfdHhzZXE7CgoJd2hpbGUgKHBrdHNfdG9fYmVfcmVtb3ZlZCkg ewoJCWlmIChiY3NwLT5yeGFjayA9PSBzZXFubykKCQkJYnJlYWs7CgkJcGt0c190b19iZV9yZW1v dmVkLS07CgkJc2Vxbm8gPSAoc2Vxbm8gLSAxKSAmIDB4MDc7Cgl9CgoJaWYgKGJjc3AtPnJ4YWNr ICE9IHNlcW5vKQoJCUJUX0VSUigiUGVlciBhY2tlZCBpbnZhbGlkIHBhY2tldCIpOwoKCUJUX0RC RygiUmVtb3ZpbmcgJXUgcGt0cyBvdXQgb2YgJXUsIHVwIHRvIHNlcW5vICV1IiwKCSAgICAgICBw a3RzX3RvX2JlX3JlbW92ZWQsIGJjc3AtPnVuYWNrLnFsZW4sIChzZXFubyAtIDEpICYgMHgwNyk7 CgoJZm9yIChpID0gMCwgc2tiID0gKChzdHJ1Y3Qgc2tfYnVmZiAqKSAmYmNzcC0+dW5hY2spLT5u ZXh0OyBpIDwgcGt0c190b19iZV9yZW1vdmVkCgkJCSYmIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYg KikgJmJjc3AtPnVuYWNrOyBpKyspIHsKCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKCgkJbnNrYiA9 IHNrYi0+bmV4dDsKCQlfX3NrYl91bmxpbmsoc2tiLCAmYmNzcC0+dW5hY2spOwoJCWtmcmVlX3Nr Yihza2IpOwoJCXNrYiA9IG5za2I7Cgl9CglpZiAoYmNzcC0+dW5hY2sucWxlbiA9PSAwKQoJCWRl bF90aW1lcigmYmNzcC0+dGJjc3ApOwoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzcC0+dW5h Y2subG9jaywgZmxhZ3MpOwoKCWlmIChpICE9IHBrdHNfdG9fYmVfcmVtb3ZlZCkKCQlCVF9FUlIo IlJlbW92ZWQgb25seSAldSBvdXQgb2YgJXUgcGt0cyIsIGksIHBrdHNfdG9fYmVfcmVtb3ZlZCk7 Cn0KCi8qIEhhbmRsZSBCQ1NQIGxpbmstZXN0YWJsaXNobWVudCBwYWNrZXRzLiBXaGVuIHdlCiAg IGRldGVjdCBhICJzeW5jIiBwYWNrZXQsIHN5bXB0b20gdGhhdCB0aGUgQlQgbW9kdWxlIGhhcyBy ZXNldCwKICAgd2UgZG8gbm90aGluZyA6KSAoeWV0KSAqLwpzdGF0aWMgdm9pZCBiY3NwX2hhbmRs ZV9sZV9wa3Qoc3RydWN0IGhjaV91YXJ0ICpodSkKewoJc3RydWN0IGJjc3Bfc3RydWN0ICpiY3Nw ID0gaHUtPnByaXY7Cgl1OCBjb25mX3BrdFs0XSAgICAgPSB7IDB4YWQsIDB4ZWYsIDB4YWMsIDB4 ZWQgfTsKCXU4IGNvbmZfcnNwX3BrdFs0XSA9IHsgMHhkZSwgMHhhZCwgMHhkMCwgMHhkMCB9OwoJ dTggc3luY19wa3RbNF0gICAgID0geyAweGRhLCAweGRjLCAweGVkLCAweGVkIH07CgoJLyogc3Bv dCAiY29uZiIgcGt0cyBhbmQgcmVwbHkgd2l0aCBhICJjb25mIHJzcCIgcGt0ICovCglpZiAoYmNz cC0+cnhfc2tiLT5kYXRhWzFdID4+IDQgPT0gNCAmJiBiY3NwLT5yeF9za2ItPmRhdGFbMl0gPT0g MCAmJgoJCQkhbWVtY21wKCZiY3NwLT5yeF9za2ItPmRhdGFbNF0sIGNvbmZfcGt0LCA0KSkgewoJ CXN0cnVjdCBza19idWZmICpuc2tiID0gYWxsb2Nfc2tiKDQsIEdGUF9BVE9NSUMpOwoKCQlCVF9E QkcoIkZvdW5kIGEgTEUgY29uZiBwa3QiKTsKCQlpZiAoIW5za2IpCgkJCXJldHVybjsKCQltZW1j cHkoc2tiX3B1dChuc2tiLCA0KSwgY29uZl9yc3BfcGt0LCA0KTsKCQluc2tiLT5wa3RfdHlwZSA9 IEJDU1BfTEVfUEtUOwoKCQlza2JfcXVldWVfaGVhZCgmYmNzcC0+dW5yZWwsIG5za2IpOwoJCWhj aV91YXJ0X3R4X3dha2V1cChodSk7Cgl9CgkvKiBTcG90ICJzeW5jIiBwa3RzLiBJZiB3ZSBmaW5k IG9uZS4uLmRpc2FzdGVyISAqLwoJZWxzZSBpZiAoYmNzcC0+cnhfc2tiLT5kYXRhWzFdID4+IDQg PT0gNCAmJiBiY3NwLT5yeF9za2ItPmRhdGFbMl0gPT0gMCAmJgoJCQkhbWVtY21wKCZiY3NwLT5y eF9za2ItPmRhdGFbNF0sIHN5bmNfcGt0LCA0KSkgewoJCUJUX0VSUigiRm91bmQgYSBMRSBzeW5j IHBrdCwgY2FyZCBoYXMgcmVzZXQiKTsKCX0KfQoKc3RhdGljIGlubGluZSB2b2lkIGJjc3BfdW5z bGlwX29uZV9ieXRlKHN0cnVjdCBiY3NwX3N0cnVjdCAqYmNzcCwgdW5zaWduZWQgY2hhciBieXRl KQp7Cgljb25zdCB1OCBjMCA9IDB4YzAsIGRiID0gMHhkYjsKCglzd2l0Y2ggKGJjc3AtPnJ4X2Vz Y19zdGF0ZSkgewoJY2FzZSBCQ1NQX0VTQ1NUQVRFX05PRVNDOgoJCXN3aXRjaCAoYnl0ZSkgewoJ CWNhc2UgMHhkYjoKCQkJYmNzcC0+cnhfZXNjX3N0YXRlID0gQkNTUF9FU0NTVEFURV9FU0M7CgkJ CWJyZWFrOwoJCWRlZmF1bHQ6CgkJCW1lbWNweShza2JfcHV0KGJjc3AtPnJ4X3NrYiwgMSksICZi eXRlLCAxKTsKCQkJaWYgKChiY3NwLT5yeF9za2ItPiBkYXRhWzBdICYgMHg0MCkgIT0gMCAmJiAK CQkJCQliY3NwLT5yeF9zdGF0ZSAhPSBCQ1NQX1c0X0NSQykKCQkJCWJjc3BfY3JjX3VwZGF0ZSgm YmNzcC0+bWVzc2FnZV9jcmMsIGJ5dGUpOwoJCQliY3NwLT5yeF9jb3VudC0tOwoJCX0KCQlicmVh azsKCgljYXNlIEJDU1BfRVNDU1RBVEVfRVNDOgoJCXN3aXRjaCAoYnl0ZSkgewoJCWNhc2UgMHhk YzoKCQkJbWVtY3B5KHNrYl9wdXQoYmNzcC0+cnhfc2tiLCAxKSwgJmMwLCAxKTsKCQkJaWYgKChi Y3NwLT5yeF9za2ItPiBkYXRhWzBdICYgMHg0MCkgIT0gMCAmJiAKCQkJCQliY3NwLT5yeF9zdGF0 ZSAhPSBCQ1NQX1c0X0NSQykKCQkJCWJjc3BfY3JjX3VwZGF0ZSgmYmNzcC0+IG1lc3NhZ2VfY3Jj LCAweGMwKTsKCQkJYmNzcC0+cnhfZXNjX3N0YXRlID0gQkNTUF9FU0NTVEFURV9OT0VTQzsKCQkJ YmNzcC0+cnhfY291bnQtLTsKCQkJYnJlYWs7CgoJCWNhc2UgMHhkZDoKCQkJbWVtY3B5KHNrYl9w dXQoYmNzcC0+cnhfc2tiLCAxKSwgJmRiLCAxKTsKCQkJaWYgKChiY3NwLT5yeF9za2ItPiBkYXRh WzBdICYgMHg0MCkgIT0gMCAmJiAKCQkJCQliY3NwLT5yeF9zdGF0ZSAhPSBCQ1NQX1c0X0NSQykg CgkJCQliY3NwX2NyY191cGRhdGUoJmJjc3AtPiBtZXNzYWdlX2NyYywgMHhkYik7CgkJCWJjc3At PnJ4X2VzY19zdGF0ZSA9IEJDU1BfRVNDU1RBVEVfTk9FU0M7CgkJCWJjc3AtPnJ4X2NvdW50LS07 CgkJCWJyZWFrOwoKCQlkZWZhdWx0OgoJCQlCVF9FUlIgKCJJbnZhbGlkIGJ5dGUgJTAyeCBhZnRl ciBlc2MgYnl0ZSIsIGJ5dGUpOwoJCQlrZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKCQkJYmNzcC0+ cnhfc2tiID0gTlVMTDsKCQkJYmNzcC0+cnhfc3RhdGUgPSBCQ1NQX1c0X1BLVF9ERUxJTUlURVI7 CgkJCWJjc3AtPnJ4X2NvdW50ID0gMDsKCQl9Cgl9Cn0KCi8qIFNpbGljb24gd2F2ZSBIOjUgMyBX SVJFIFVBUlQgLSBHREEgVGVjaG5vbG9naWVzIEx0ZCBDaGVubmFpIElORElBKi8KLyogbW9kaWZp ZWQgZm9yIEg1IDMgV0lSRSBVQVJUICBieSBWLkhhcmloYXJhbiAodi5oYXJpaGFyYW5AZ2RhdGVj aC5jby5pbikgKi8KCnN0YXRpYyBpbmxpbmUgdm9pZCBiY3NwX2NvbXBsZXRlX3J4X3BrdChzdHJ1 Y3QgaGNpX3VhcnQgKmh1KQp7CglzdHJ1Y3QgYmNzcF9zdHJ1Y3QgKmJjc3AgPSBodS0+cHJpdjsK CWludCBwYXNzX3VwOwoKCWlmIChiY3NwLT5yeF9za2ItPmRhdGFbMF0gJiAweDgwKSB7CS8qIHJl bGlhYmxlIHBrdCAqLwoJCUJUX0RCRygiUmVjZWl2ZWQgc2Vxbm8gJXUgZnJvbSBjYXJkIiwgYmNz cC0+cnhzZXFfdHhhY2spOwoJCWJjc3AtPnJ4c2VxX3R4YWNrKys7CgkJYmNzcC0+cnhzZXFfdHhh Y2sgJT0gMHg4OwoJCWJjc3AtPnR4YWNrX3JlcSAgICA9IDE7CgoJCS8qIElmIG5lZWRlZCwgdHJh bnNtaXQgYW4gYWNrIHBrdCAqLwoJCWhjaV91YXJ0X3R4X3dha2V1cChodSk7Cgl9CgoJYmNzcC0+ cnhhY2sgPSAoYmNzcC0+cnhfc2tiLT5kYXRhWzBdID4+IDMpICYgMHgwNzsKCUJUX0RCRygiUmVx dWVzdCBmb3IgcGt0ICV1IGZyb20gY2FyZCIsIGJjc3AtPnJ4YWNrKTsKCgliY3NwX3BrdF9jdWxs KGJjc3ApOwoJaWYgKChiY3NwLT5yeF9za2ItPmRhdGFbMV0gJiAweDBmKSA9PSAyIC8qNiovICYm CgkJCWJjc3AtPnJ4X3NrYi0+ZGF0YVswXSAmIDB4ODApIHsKCQliY3NwLT5yeF9za2ItPnBrdF90 eXBlID0gSENJX0FDTERBVEFfUEtUOwoJCXBhc3NfdXAgPSAxOwoJCUJUX0RCRygiR0RBOiBIQ0kg QUNMIFBhY2tldCBcbiIpOwoKCX0gZWxzZSBpZiAoKGJjc3AtPnJ4X3NrYi0+ZGF0YVsxXSAmIDB4 MGYpID09IDQgLyo1Ki8gJiYKCQkJYmNzcC0+cnhfc2tiLT5kYXRhWzBdICYgMHg4MCkgewoJCWJj c3AtPnJ4X3NrYi0+cGt0X3R5cGUgPSBIQ0lfRVZFTlRfUEtUOwoJCXBhc3NfdXAgPSAxOwoKCQlC VF9EQkcoIkdEQTogSENJIEV2ZW50IFBhY2tldCBcbiIpOwoKCX0gZWxzZSBpZiAoKGJjc3AtPnJ4 X3NrYi0+ZGF0YVsxXSAmIDB4MGYpID09IDMgLyo3Ki8gKSB7CgkJYmNzcC0+cnhfc2tiLT5wa3Rf dHlwZSA9IEhDSV9TQ09EQVRBX1BLVDsKCQlwYXNzX3VwID0gMTsKCQkKCQlCVF9EQkcoIlNDbyBk YXRhIHBhY2tldCBcbiIpOwoKCX0gZWxzZSBpZiAoKGJjc3AtPnJ4X3NrYi0+ZGF0YVsxXSAmIDB4 MGYpID09IDE1IC8qMSovICYmCgkJCSEoYmNzcC0+cnhfc2tiLT5kYXRhWzBdICYgMHg4MCkpIHsK CQliY3NwX2hhbmRsZV9sZV9wa3QoaHUpOwoJCXBhc3NfdXAgPSAwOwoKCQlCVF9EQkcoIkdEQSBM aW5lIHBhY2tldCBcbiIpOwoKCX0gZWxzZXsKCQlwYXNzX3VwID0gMDsKCgkJQlRfREJHKCJEZWZh dWx0IHBhY2tldCBcbiIpOwoJfQoKCWlmICghcGFzc191cCkgewoJCWlmICgoYmNzcC0+cnhfc2ti LT5kYXRhWzFdICYgMHgwZikgIT0gMCAmJgoJICAgIAkJKGJjc3AtPnJ4X3NrYi0+ZGF0YVsxXSAm IDB4MGYpICE9IDE1IC8qMSovKSB7CgkJCUJUX0VSUiAoIlBhY2tldCBmb3IgdW5rbm93biBjaGFu bmVsICgldSAlcykiLAoJCQkJYmNzcC0+cnhfc2tiLT5kYXRhWzFdICYgMHgwZiwKCQkJCWJjc3At PnJ4X3NrYi0+ZGF0YVswXSAmIDB4ODAgPyAKCQkJCSJyZWxpYWJsZSIgOiAidW5yZWxpYWJsZSIp OwoJCX0KCQlrZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKCX0gZWxzZSB7CgkJLyogUHVsbCBvdXQg QkNTUCBoZHIgKi8KCQlza2JfcHVsbChiY3NwLT5yeF9za2IsIDQpOwoKCQloY2lfcmVjdl9mcmFt ZShiY3NwLT5yeF9za2IpOwoJfQoJYmNzcC0+cnhfc3RhdGUgPSBCQ1NQX1c0X1BLVF9ERUxJTUlU RVI7CgliY3NwLT5yeF9za2IgPSBOVUxMOwp9CgovKiBSZWN2IGRhdGEgKi8Kc3RhdGljIGludCBi Y3NwX3JlY3Yoc3RydWN0IGhjaV91YXJ0ICpodSwgdm9pZCAqZGF0YSwgaW50IGNvdW50KQp7Cglz dHJ1Y3QgYmNzcF9zdHJ1Y3QgKmJjc3AgPSBodS0+cHJpdjsKCXJlZ2lzdGVyIHVuc2lnbmVkIGNo YXIgKnB0cjsKCglCVF9EQkcoImh1ICVwIGNvdW50ICVkIHJ4X3N0YXRlICVsZCByeF9jb3VudCAl bGQiLCAKCQlodSwgY291bnQsIGJjc3AtPnJ4X3N0YXRlLCBiY3NwLT5yeF9jb3VudCk7CgoJcHRy ID0gZGF0YTsKCXdoaWxlIChjb3VudCkgewoJCWlmIChiY3NwLT5yeF9jb3VudCkgewoJCQlpZiAo KnB0ciA9PSAweGMwKSB7CgkJCQlCVF9FUlIoIlNob3J0IEJDU1AgcGFja2V0Iik7CgkJCQlrZnJl ZV9za2IoYmNzcC0+cnhfc2tiKTsKCQkJCWJjc3AtPnJ4X3N0YXRlID0gQkNTUF9XNF9QS1RfU1RB UlQ7CgkJCQliY3NwLT5yeF9jb3VudCA9IDA7CgkJCX0gZWxzZQoJCQkJYmNzcF91bnNsaXBfb25l X2J5dGUoYmNzcCwgKnB0cik7CgoJCQlwdHIrKzsgY291bnQtLTsKCQkJY29udGludWU7CgkJfQoK CQlzd2l0Y2ggKGJjc3AtPnJ4X3N0YXRlKSB7CgkJY2FzZSBCQ1NQX1c0X0JDU1BfSERSOgoJCQlp ZiAoKDB4ZmYgJiAodTgpIH4gKGJjc3AtPnJ4X3NrYi0+ZGF0YVswXSArIGJjc3AtPnJ4X3NrYi0+ ZGF0YVsxXSArCgkJCQkJYmNzcC0+cnhfc2tiLT5kYXRhWzJdKSkgIT0gYmNzcC0+cnhfc2tiLT5k YXRhWzNdKSB7CgkJCQlCVF9FUlIoIkVycm9yIGluIEJDU1AgaGRyIGNoZWNrc3VtIik7CgkJCQlr ZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKCQkJCWJjc3AtPnJ4X3N0YXRlID0gQkNTUF9XNF9QS1Rf REVMSU1JVEVSOwoJCQkJYmNzcC0+cnhfY291bnQgPSAwOwoJCQkJY29udGludWU7CgkJCX0KCQkJ aWYgKGJjc3AtPnJ4X3NrYi0+ZGF0YVswXSAmIDB4ODAJLyogcmVsaWFibGUgcGt0ICovCgkJCSAg ICAJCSYmIChiY3NwLT5yeF9za2ItPmRhdGFbMF0gJiAweDA3KSAhPSBiY3NwLT5yeHNlcV90eGFj aykgewoJCQkJQlRfRVJSICgiT3V0LW9mLW9yZGVyIHBhY2tldCBhcnJpdmVkLCBnb3QgJXUgZXhw ZWN0ZWQgJXUiLAoJCQkJCWJjc3AtPnJ4X3NrYi0+ZGF0YVswXSAmIDB4MDcsIGJjc3AtPnJ4c2Vx X3R4YWNrKTsKCgkJCQlrZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKCQkJCWJjc3AtPnJ4X3N0YXRl ID0gQkNTUF9XNF9QS1RfREVMSU1JVEVSOwoJCQkJYmNzcC0+cnhfY291bnQgPSAwOwoJCQkJY29u dGludWU7CgkJCX0KCQkJYmNzcC0+cnhfc3RhdGUgPSBCQ1NQX1c0X0RBVEE7CgkJCWJjc3AtPnJ4 X2NvdW50ID0gKGJjc3AtPnJ4X3NrYi0+ZGF0YVsxXSA+PiA0KSArIAoJCQkJCShiY3NwLT5yeF9z a2ItPmRhdGFbMl0gPDwgNCk7CS8qIE1heSBiZSAwICovCgkJCWNvbnRpbnVlOwoKCQljYXNlIEJD U1BfVzRfREFUQToKCQkJaWYgKGJjc3AtPnJ4X3NrYi0+ZGF0YVswXSAmIDB4NDApIHsJLyogcGt0 IHdpdGggY3JjICovCgkJCQliY3NwLT5yeF9zdGF0ZSA9IEJDU1BfVzRfQ1JDOwoJCQkJYmNzcC0+ cnhfY291bnQgPSAyOwoJCQl9IGVsc2UKCQkJCWJjc3BfY29tcGxldGVfcnhfcGt0KGh1KTsKCQkJ Y29udGludWU7CgoJCWNhc2UgQkNTUF9XNF9DUkM6CgkJCWlmIChiY3NwX2NyY19yZXZlcnNlKGJj c3AtPm1lc3NhZ2VfY3JjKSAhPQoJCQkJCShiY3NwLT5yeF9za2ItPmRhdGFbYmNzcC0+cnhfc2ti LT5sZW4gLSAyXSA8PCA4KSArCgkJCQkJYmNzcC0+cnhfc2tiLT5kYXRhW2Jjc3AtPnJ4X3NrYi0+ bGVuIC0gMV0pIHsKCgkJCQlCVF9FUlIgKCJDaGVja3N1bSBmYWlsZWQ6IGNvbXB1dGVkICUwNHgg cmVjZWl2ZWQgJTA0eCIsCgkJCQkJYmNzcF9jcmNfcmV2ZXJzZShiY3NwLT5tZXNzYWdlX2NyYyks CgkJCQkgICAgIAkoYmNzcC0+cnhfc2tiLT4gZGF0YVtiY3NwLT5yeF9za2ItPmxlbiAtIDJdIDw8 IDgpICsKCQkJCSAgICAgCWJjc3AtPnJ4X3NrYi0+ZGF0YVtiY3NwLT5yeF9za2ItPmxlbiAtIDFd KTsKCgkJCQlrZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKCQkJCWJjc3AtPnJ4X3N0YXRlID0gQkNT UF9XNF9QS1RfREVMSU1JVEVSOwoJCQkJYmNzcC0+cnhfY291bnQgPSAwOwoJCQkJY29udGludWU7 CgkJCX0KCQkJc2tiX3RyaW0oYmNzcC0+cnhfc2tiLCBiY3NwLT5yeF9za2ItPmxlbiAtIDIpOwoJ CQliY3NwX2NvbXBsZXRlX3J4X3BrdChodSk7CgkJCWNvbnRpbnVlOwoKCQljYXNlIEJDU1BfVzRf UEtUX0RFTElNSVRFUjoKCQkJc3dpdGNoICgqcHRyKSB7CgkJCWNhc2UgMHhjMDoKCQkJCWJjc3At PnJ4X3N0YXRlID0gQkNTUF9XNF9QS1RfU1RBUlQ7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJ CS8qQlRfRVJSKCJJZ25vcmluZyBieXRlICUwMngiLCAqcHRyKTsqLwoJCQkJYnJlYWs7CgkJCX0K CQkJcHRyKys7IGNvdW50LS07CgkJCWJyZWFrOwoKCQljYXNlIEJDU1BfVzRfUEtUX1NUQVJUOgoJ CQlzd2l0Y2ggKCpwdHIpIHsKCQkJY2FzZSAweGMwOgoJCQkJcHRyKys7IGNvdW50LS07CgkJCQli cmVhazsKCgkJCWRlZmF1bHQ6CgkJCQliY3NwLT5yeF9zdGF0ZSA9IEJDU1BfVzRfQkNTUF9IRFI7 CgkJCQliY3NwLT5yeF9jb3VudCA9IDQ7CgkJCQliY3NwLT5yeF9lc2Nfc3RhdGUgPSBCQ1NQX0VT Q1NUQVRFX05PRVNDOwoJCQkJQkNTUF9DUkNfSU5JVChiY3NwLT5tZXNzYWdlX2NyYyk7CgkJCQkK CQkJCS8qIERvIG5vdCBpbmNyZW1lbnQgcHRyIG9yIGRlY3JlbWVudCBjb3VudAoJCQkJICogQWxs b2NhdGUgcGFja2V0LiBNYXggbGVuIG9mIGEgQkNTUCBwa3Q9IAoJCQkJICogMHhGRkYgKHBheWxv YWQpICs0IChoZWFkZXIpICsyIChjcmMpICovCgoJCQkJYmNzcC0+cnhfc2tiID0gYmx1ZXpfc2ti X2FsbG9jKDB4MTAwNSwgR0ZQX0FUT01JQyk7CgkJCQlpZiAoIWJjc3AtPnJ4X3NrYikgewoJCQkJ CUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtIGZvciBuZXcgcGFja2V0Iik7CgkJCQkJYmNzcC0+ cnhfc3RhdGUgPSBCQ1NQX1c0X1BLVF9ERUxJTUlURVI7CgkJCQkJYmNzcC0+cnhfY291bnQgPSAw OwoJCQkJCXJldHVybiAwOwoJCQkJfQoJCQkJYmNzcC0+cnhfc2tiLT5kZXYgPSAodm9pZCAqKSAm aHUtPmhkZXY7CgkJCQlicmVhazsKCQkJfQoJCQlicmVhazsKCQl9Cgl9CglyZXR1cm4gY291bnQ7 Cn0KCgkvKiBBcnJhbmdlIHRvIHJldHJhbnNtaXQgYWxsIG1lc3NhZ2VzIGluIHRoZSByZWxxLiAq LwpzdGF0aWMgdm9pZCBiY3NwX3RpbWVkX2V2ZW50KHVuc2lnbmVkIGxvbmcgYXJnKQp7CglzdHJ1 Y3QgaGNpX3VhcnQgKmh1ID0gKHN0cnVjdCBoY2lfdWFydCAqKSBhcmc7CglzdHJ1Y3QgYmNzcF9z dHJ1Y3QgKmJjc3AgPSAoc3RydWN0IGJjc3Bfc3RydWN0ICopIGh1LT5wcml2OwoJc3RydWN0IHNr X2J1ZmYgKnNrYjsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJQlRfRVJSKCJUaW1lb3V0LCByZXRy YW5zbWl0dGluZyAldSBwa3RzIiwgYmNzcC0+dW5hY2sucWxlbik7CglzcGluX2xvY2tfaXJxc2F2 ZSgmYmNzcC0+dW5hY2subG9jaywgZmxhZ3MpOwoKCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1 ZV90YWlsKCZiY3NwLT51bmFjaykpICE9IE5VTEwpIHsKCQliY3NwLT5tc2dxX3R4c2VxID0gKGJj c3AtPm1zZ3FfdHhzZXEgLSAxKSAmIDB4MDc7CgkJc2tiX3F1ZXVlX2hlYWQoJmJjc3AtPnJlbCwg c2tiKTsKCX0KCglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NwLT51bmFjay5sb2NrLCBmbGFn cyk7CgoJaGNpX3VhcnRfdHhfd2FrZXVwKGh1KTsKfQoKc3RhdGljIGludCBiY3NwX29wZW4oc3Ry dWN0IGhjaV91YXJ0ICpodSkKewoJc3RydWN0IGJjc3Bfc3RydWN0ICpiY3NwOwoKCUJUX0RCRygi aHUgJXAiLCBodSk7CgoJYmNzcCA9IGttYWxsb2Moc2l6ZW9mKCpiY3NwKSwgR0ZQX0FUT01JQyk7 CglpZiAoIWJjc3ApCgkJcmV0dXJuIC1FTk9NRU07CgltZW1zZXQoYmNzcCwgMCwgc2l6ZW9mKCpi Y3NwKSk7CgoJaHUtPnByaXYgPSBiY3NwOwoJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmNzcC0+dW5h Y2spOwoJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmNzcC0+cmVsKTsKCXNrYl9xdWV1ZV9oZWFkX2lu aXQoJmJjc3AtPnVucmVsKTsKCglpbml0X3RpbWVyKCZiY3NwLT50YmNzcCk7CgliY3NwLT50YmNz cC5mdW5jdGlvbiA9IGJjc3BfdGltZWRfZXZlbnQ7CgliY3NwLT50YmNzcC5kYXRhICAgICA9ICh1 X2xvbmcpIGh1OwoKCWJjc3AtPnJ4X3N0YXRlID0gQkNTUF9XNF9QS1RfREVMSU1JVEVSOwoKCXJl dHVybiAwOwp9CgpzdGF0aWMgaW50IGJjc3BfY2xvc2Uoc3RydWN0IGhjaV91YXJ0ICpodSkKewoJ c3RydWN0IGJjc3Bfc3RydWN0ICpiY3NwID0gaHUtPnByaXY7CglodS0+cHJpdiA9IE5VTEw7CgoJ QlRfREJHKCJodSAlcCIsIGh1KTsKCglza2JfcXVldWVfcHVyZ2UoJmJjc3AtPnVuYWNrKTsKCXNr Yl9xdWV1ZV9wdXJnZSgmYmNzcC0+cmVsKTsKCXNrYl9xdWV1ZV9wdXJnZSgmYmNzcC0+dW5yZWwp OwoJZGVsX3RpbWVyKCZiY3NwLT50YmNzcCk7CgoJa2ZyZWUoYmNzcCk7CglyZXR1cm4gMDsKfQoK c3RhdGljIHN0cnVjdCBoY2lfdWFydF9wcm90byBiY3NwID0gewoJaWQ6ICAgICAgSENJX1VBUlRf QkNTUCwKCW9wZW46ICAgIGJjc3Bfb3BlbiwKCWNsb3NlOiAgIGJjc3BfY2xvc2UsCgllbnF1ZXVl OiBiY3NwX2VucXVldWUsCglkZXF1ZXVlOiBiY3NwX2RlcXVldWUsCglyZWN2OiAgICBiY3NwX3Jl Y3YsCglmbHVzaDogICBiY3NwX2ZsdXNoCn07CgppbnQgYmNzcF9pbml0KHZvaWQpCnsKCXJldHVy biBoY2lfdWFydF9yZWdpc3Rlcl9wcm90bygmYmNzcCk7Cn0KCmludCBiY3NwX2RlaW5pdCh2b2lk KQp7CglyZXR1cm4gaGNpX3VhcnRfdW5yZWdpc3Rlcl9wcm90bygmYmNzcCk7Cn0K ------=_Part_108_18503818.1120641631152 Content-Type: application/octet-stream; name="hciattach.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hciattach.c" LyoKICoKICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAogKgog KiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgIFF1YWxjb21tIEluY29ycG9yYXRlZAogKiAgQ29w eXJpZ2h0IChDKSAyMDAyLTIwMDMgIE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNv bT4KICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA0ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBo b2x0bWFubi5vcmc+CiAqCiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICogIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwogKgogKiAgVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MKICogIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCiAqICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJ QUJMRSBGT1IgQU5ZCiAqICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKICogIFdIQVRTT0VWRVIgUkVTVUxUSU5H IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiAKICogIEFD VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS SVNJTkcgT1VUIE9GIAogKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICoKICogIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBM SUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5UUywgCiAqICBDT1BZUklHSFRT LCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUywgUkVMQVRJTkcgVE8gVVNFIE9GIFRISVMgCiAq ICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKgogKgogKiAgJElkOiBoY2lhdHRhY2guYyx2IDEu MjcgMjAwNC8xMC8xMSAxMzo1OTo1NyBob2x0bWFubiBFeHAgJAogKi8KCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LyogU2lsaWNvbiB3YXZlIEg6NSAzIFdJUkUgVUFSVCAtIEdEQSBUZWNobm9sb2dpZXMgTHRkIENo ZW5uYWkgSU5ESUEqLwovKiBhZGRlZCBmb3IgSDUgMyBXSVJFIFVBUlQgIGJ5IFYuSGFyaWhhcmFu ICh2LmhhcmloYXJhbkBnZGF0ZWNoLmNvLmluKSAqLwovKiBNb2RpZmljYXRpb24gaGlzdG9yeSAq LwovKiBUaGUgc2lsaWNvbiB3YXZlIGg1IHByb3RvY29sIGluaXRpYWxpemF0aW9uIGlzIGRvbmUg dGhvcnVnaCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCnN3YXZlX2g1Ki8KLyogdGhlIG9wdGlvbiwg ImdkYSIgaXMgYWRkZWQgZm9yIFNpbGljb24gd2F2ZSBoNSAzIFdJUkUgVUFSVCBTaXczNTAwKi8K LyogKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwoKI2lmZGVmIEhBVkVfQ09ORklHX0gKI2luY2x1ZGUgPGNvbmZp Zy5oPgojZW5kaWYKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNs dWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNp bmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8c3lzbG9nLmg+CiNpbmNsdWRlIDxlcnJuby5oPgoj aW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8dGVybWlvcy5oPgojaW5jbHVkZSA8ZmNudGwuaD4K CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUg PHN5cy90aW1lLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KCiNpbmNsdWRlIDxibHVldG9vdGgv Ymx1ZXRvb3RoLmg+CiNpbmNsdWRlIDxibHVldG9vdGgvaGNpLmg+CiNpbmNsdWRlIDxibHVldG9v dGgvaGNpX2xpYi5oPgojaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV91YXJ0Lmg+CgpzdHJ1Y3QgdWFy dF90IHsKCWNoYXIgKnR5cGU7CglpbnQgIG1faWQ7CglpbnQgIHBfaWQ7CglpbnQgIHByb3RvOwoJ aW50ICBpbml0X3NwZWVkOwoJaW50ICBzcGVlZDsKCWludCAgZmxhZ3M7CglpbnQgICgqaW5pdCkg KGludCBmZCwgc3RydWN0IHVhcnRfdCAqdSwgc3RydWN0IHRlcm1pb3MgKnRpKTsKfTsKCiNkZWZp bmUgRkxPV19DVEwJMHgwMDAxCgpzdGF0aWMgaW50IHVhcnRfc3BlZWQoaW50IHMpCnsKCXN3aXRj aCAocykgewoJY2FzZSA5NjAwOgoJCXJldHVybiBCOTYwMDsKCWNhc2UgMTkyMDA6CgkJcmV0dXJu IEIxOTIwMDsKCWNhc2UgMzg0MDA6CgkJcmV0dXJuIEIzODQwMDsKCWNhc2UgNTc2MDA6CgkJcmV0 dXJuIEI1NzYwMDsKCWNhc2UgMTE1MjAwOgoJCXJldHVybiBCMTE1MjAwOwoJY2FzZSAyMzA0MDA6 CgkJcmV0dXJuIEIyMzA0MDA7CgljYXNlIDQ2MDgwMDoKCQlyZXR1cm4gQjQ2MDgwMDsKCWNhc2Ug NTAwMDAwOgoJCXJldHVybiBCNTAwMDAwOwoJY2FzZSA1NzYwMDA6CgkJcmV0dXJuIEI1NzYwMDA7 CgljYXNlIDkyMTYwMDoKCQlyZXR1cm4gQjkyMTYwMDsKCWNhc2UgMTAwMDAwMDoKCQlyZXR1cm4g QjEwMDAwMDA7CgljYXNlIDExNTIwMDA6CgkJcmV0dXJuIEIxMTUyMDAwOwoJY2FzZSAxNTAwMDAw OgoJCXJldHVybiBCMTUwMDAwMDsKCWRlZmF1bHQ6CgkJcmV0dXJuIEI1NzYwMDsKCX0KfQoKc3Rh dGljIGludCBzZXRfc3BlZWQoaW50IGZkLCBzdHJ1Y3QgdGVybWlvcyAqdGksIGludCBzcGVlZCkK ewoJY2ZzZXRvc3BlZWQodGksIHVhcnRfc3BlZWQoc3BlZWQpKTsKCXJldHVybiB0Y3NldGF0dHIo ZmQsIFRDU0FOT1csIHRpKTsKfQoKc3RhdGljIHZvaWQgc2lnX2FsYXJtKGludCBzaWcpCnsKCWZw cmludGYoc3RkZXJyLCAiSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0LlxuIik7CglleGl0KDEpOwp9 CgovKiAKICogUmVhZCBhbiBIQ0kgZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9y LgogKi8Kc3RhdGljIGludCByZWFkX2hjaV9ldmVudChpbnQgZmQsIHVuc2lnbmVkIGNoYXIqIGJ1 ZiwgaW50IHNpemUpIAp7CglpbnQgcmVtYWluLCByOwoJaW50IGNvdW50ID0gMDsKCglpZiAoc2l6 ZSA8PSAwKQoJCXJldHVybiAtMTsKCgkvKiBUaGUgZmlyc3QgYnl0ZSBpZGVudGlmaWVzIHRoZSBw YWNrZXQgdHlwZS4gRm9yIEhDSSBldmVudCBwYWNrZXRzLCBpdAoJICogc2hvdWxkIGJlIDB4MDQs IHNvIHdlIHJlYWQgdW50aWwgd2UgZ2V0IHRvIHRoZSAweDA0LiAqLwoJd2hpbGUgKDEpIHsKCQly ID0gcmVhZChmZCwgYnVmLCAxKTsKCQlpZiAociA8PSAwKQoJCQlyZXR1cm4gLTE7CgkJaWYgKGJ1 ZlswXSA9PSAweDA0KQoJCQlicmVhazsKCX0KCWNvdW50Kys7CgoJLyogVGhlIG5leHQgdHdvIGJ5 dGVzIGFyZSB0aGUgZXZlbnQgY29kZSBhbmQgcGFyYW1ldGVyIHRvdGFsIGxlbmd0aC4gKi8KCXdo aWxlIChjb3VudCA8IDMpIHsKCQlyID0gcmVhZChmZCwgYnVmICsgY291bnQsIDMgLSBjb3VudCk7 CgkJaWYgKHIgPD0gMCkKCQkJcmV0dXJuIC0xOwoJCWNvdW50ICs9IHI7Cgl9CgoJLyogTm93IHdl IHJlYWQgdGhlIHBhcmFtZXRlcnMuICovCglpZiAoYnVmWzJdIDwgKHNpemUgLSAzKSkgCgkJcmVt YWluID0gYnVmWzJdOwoJZWxzZSAKCQlyZW1haW4gPSBzaXplIC0gMzsKCgl3aGlsZSAoKGNvdW50 IC0gMykgPCByZW1haW4pIHsKCQlyID0gcmVhZChmZCwgYnVmICsgY291bnQsIHJlbWFpbiAtIChj b3VudCAtIDMpKTsKCQlpZiAociA8PSAwKQoJCQlyZXR1cm4gLTE7CgkJY291bnQgKz0gcjsKCX0K CXJldHVybiBjb3VudDsKfQoKLyogCiAqIEVyaWNzc29uIHNwZWNpZmljIGluaXRpYWxpemF0aW9u IAogKi8Kc3RhdGljIGludCBlcmljc3NvbihpbnQgZmQsIHN0cnVjdCB1YXJ0X3QgKnUsIHN0cnVj dCB0ZXJtaW9zICp0aSkKewoJc3RydWN0IHRpbWVzcGVjIHRtID0gezAsIDUwMDAwfTsKCWNoYXIg Y21kWzVdOwoKCWNtZFswXSA9IEhDSV9DT01NQU5EX1BLVDsKCWNtZFsxXSA9IDB4MDk7CgljbWRb Ml0gPSAweGZjOwoJY21kWzNdID0gMHgwMTsKCglzd2l0Y2ggKHUtPnNwZWVkKSB7CgljYXNlIDU3 NjAwOgoJCWNtZFs0XSA9IDB4MDM7CgkJYnJlYWs7CgljYXNlIDExNTIwMDoKCQljbWRbNF0gPSAw eDAyOwoJCWJyZWFrOwoJY2FzZSAyMzA0MDA6CgkJY21kWzRdID0gMHgwMTsKCQlicmVhazsKCWNh c2UgNDYwODAwOgoJCWNtZFs0XSA9IDB4MDA7CgkJYnJlYWs7CgljYXNlIDkyMTYwMDoKCQljbWRb NF0gPSAweDIwOwoJCWJyZWFrOwoJZGVmYXVsdDoKCQljbWRbNF0gPSAweDAzOwoJCXUtPnNwZWVk ID0gNTc2MDA7CgkJYnJlYWs7Cgl9CgoJLyogU2VuZCBpbml0aWFsaXphdGlvbiBjb21tYW5kICov CglpZiAod3JpdGUoZmQsIGNtZCwgNSkgIT0gNSkgewoJCXBlcnJvcigiRmFpbGVkIHRvIHdyaXRl IGluaXQgY29tbWFuZCIpOwoJCXJldHVybiAtMTsKCX0KCW5hbm9zbGVlcCgmdG0sIE5VTEwpOwoJ cmV0dXJuIDA7Cn0KCi8qIAogKiBEaWdpYW5zd2VyIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIAog Ki8Kc3RhdGljIGludCBkaWdpKGludCBmZCwgc3RydWN0IHVhcnRfdCAqdSwgc3RydWN0IHRlcm1p b3MgKnRpKQp7CglzdHJ1Y3QgdGltZXNwZWMgdG0gPSB7MCwgNTAwMDB9OwoJY2hhciBjbWRbNV07 CgoJLyogRGlnaUFuc3dlciBzZXQgYmF1ZCByYXRlIGNvbW1hbmQgKi8KCWNtZFswXSA9IEhDSV9D T01NQU5EX1BLVDsKCWNtZFsxXSA9IDB4MDc7CgljbWRbMl0gPSAweGZjOwoJY21kWzNdID0gMHgw MTsKCglzd2l0Y2ggKHUtPnNwZWVkKSB7CgljYXNlIDU3NjAwOgoJCWNtZFs0XSA9IDB4MDg7CgkJ YnJlYWs7CgljYXNlIDExNTIwMDoKCQljbWRbNF0gPSAweDA5OwoJCWJyZWFrOwoJZGVmYXVsdDoK CQljbWRbNF0gPSAweDA5OwoJCXUtPnNwZWVkID0gMTE1MjAwOwoJCWJyZWFrOwoJfQoKCS8qIFNl bmQgaW5pdGlhbGl6YXRpb24gY29tbWFuZCAqLwoJaWYgKHdyaXRlKGZkLCBjbWQsIDUpICE9IDUp IHsKCQlwZXJyb3IoIkZhaWxlZCB0byB3cml0ZSBpbml0IGNvbW1hbmQiKTsKCQlyZXR1cm4gLTE7 Cgl9CgluYW5vc2xlZXAoJnRtLCBOVUxMKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHRleGFz KGludCBmZCwgc3RydWN0IHVhcnRfdCAqdSwgc3RydWN0IHRlcm1pb3MgKnRpKQp7CglzdHJ1Y3Qg dGltZXNwZWMgdG0gPSB7MCwgNTAwMDB9OwoJY2hhciBjbWRbNF07Cgl1bnNpZ25lZCBjaGFyIHJl c3BbMTAwXTsJCS8qIFJlc3BvbnNlICovCglpbnQgbjsKCgltZW1zZXQocmVzcCwnXDAnLCAxMDAp OwoKCS8qIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBzb2Z0d2FyZSB2ZXJzaW9uIHdpdGggbWFudWZh Y3R1cmVyIHNwZWNpZmljIAoJICAgSENJIGNvbW1hbmQgSENJX1ZTX1RJX1ZlcnNpb25fTnVtYmVy LiBCdXQgdGhlIG9ubHkgdGhpbmcgeW91IGdldCBtb3JlCgkgICBpcyBpZiB0aGlzIGlzIHBvaW50 LXRvLXBvaW50IG9yIHBvaW50LXRvLW11bHRpcG9pbnQgbW9kdWxlICovCgoJLyogR2V0IE1hbnVm YWN0dXJlciBhbmQgTE1QIHZlcnNpb24gKi8KCWNtZFswXSA9IEhDSV9DT01NQU5EX1BLVDsKCWNt ZFsxXSA9IDB4MDE7CgljbWRbMl0gPSAweDEwOwoJY21kWzNdID0gMHgwMDsKCglkbyB7CgkJbiA9 IHdyaXRlKGZkLCBjbWQsIDQpOwoJCWlmIChuIDwgMCkgewoJCQlwZXJyb3IoIkZhaWxlZCB0byB3 cml0ZSBpbml0IGNvbW1hbmQgKFJFQURfTE9DQUxfVkVSU0lPTl9JTkZPUk1BVElPTikiKTsKCQkJ cmV0dXJuIC0xOwoJCX0KCQlpZiAobiA8IDQpIHsKCQkJZnByaW50ZihzdGRlcnIsICJXYW50ZWQg dG8gd3JpdGUgNCBieXRlcywgY291bGQgb25seSB3cml0ZSAlZC4gU3RvcFxuIiwgbik7CgkJCXJl dHVybiAtMTsKCQl9CgoJCS8qIFJlYWQgcmVwbHkuICovCgkJaWYgKHJlYWRfaGNpX2V2ZW50KGZk LCByZXNwLCAxMDApIDwgMCkgewoJCQlwZXJyb3IoIkZhaWxlZCB0byByZWFkIGluaXQgcmVzcG9u c2UgKFJFQURfTE9DQUxfVkVSU0lPTl9JTkZPUk1BVElPTikiKTsKCQkJcmV0dXJuIC0xOwoJCX0K CgkJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0ZSBldmVudCBmb3Igb3VyIE9wY29kZSAqLwoJ fSB3aGlsZSAocmVzcFs0XSAhPSBjbWRbMV0gJiYgcmVzcFs1XSAhPSBjbWRbMl0pOwoKCS8qIFZl cmlmeSBtYW51ZmFjdHVyZXIgKi8KCWlmICgocmVzcFsxMV0gJiAweEZGKSAhPSAweDBkKQoJCWZw cmludGYoc3RkZXJyLCJXQVJOSU5HIDogbW9kdWxlJ3MgbWFudWZhY3R1cmVyIGlzIG5vdCBUZXhh cyBJbnN0cnVtZW50XG4iKTsKCgkvKiBQcmludCBMTVAgdmVyc2lvbiAqLwoJZnByaW50ZihzdGRl cnIsICJUZXhhcyBtb2R1bGUgTE1QIHZlcnNpb24gOiAweCUwMnhcbiIsIHJlc3BbMTBdICYgMHhG Rik7CgoJLyogUHJpbnQgTE1QIHN1YnZlcnNpb24gKi8KCWZwcmludGYoc3RkZXJyLCAiVGV4YXMg bW9kdWxlIExNUCBzdWItdmVyc2lvbiA6IDB4JTAyeCUwMnhcbiIsIHJlc3BbMTRdICYgMHhGRiwg cmVzcFsxM10gJiAweEZGKTsKCQoJbmFub3NsZWVwKCZ0bSwgTlVMTCk7CglyZXR1cm4gMDsKfQoK c3RhdGljIGludCByZWFkX2NoZWNrKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgY291bnQpCnsKCWlu dCByZXM7CgkKCWRvIHsKCQlyZXMgPSByZWFkKGZkLCBidWYsIGNvdW50KTsKCQlpZiAocmVzICE9 IC0xKSB7CgkJCWJ1ZiArPSByZXM7IAoJCQljb3VudCAtPSByZXM7CgkJfQoJfSB3aGlsZSAoY291 bnQgJiYgKGVycm5vID09IDAgfHwgZXJybm8gPT0gRUlOVFIpKTsKCQoJaWYgKGNvdW50KQoJCXJl dHVybiAtMTsKCQoJcmV0dXJuIDA7Cn0KCi8qCiAqIEJDU1Agc3BlY2lmaWMgaW5pdGlhbGl6YXRp b24KICovCmludCBzZXJpYWxfZmQ7CgpzdGF0aWMgdm9pZCBiY3NwX3RzaHlfc2lnX2FsYXJtKGlu dCBzaWcpCnsKCXN0YXRpYyBpbnQgcmV0cmllcz0wOwoJdW5zaWduZWQgY2hhciBiY3NwX3N5bmNf cGt0WzEwXSA9IHsweGMwLDB4MDAsMHg0MSwweDAwLDB4YmUsMHhkYSwweGRjLDB4ZWQsMHhlZCww eGMwfTsKCQoJaWYgKHJldHJpZXMgPCAxMCkgewoJCXJldHJpZXMrKzsKCQl3cml0ZShzZXJpYWxf ZmQsICZiY3NwX3N5bmNfcGt0LCAxMCk7CgkJYWxhcm0oMSk7CgkJcmV0dXJuOwoJfQoJdGNmbHVz aChzZXJpYWxfZmQsIFRDSU9GTFVTSCk7CglmcHJpbnRmKHN0ZGVyciwgIkJDU1AgaW5pdGlhbGl6 YXRpb24gdGltZWQgb3V0XG4iKTsKCWV4aXQoMSk7Cn0KCnN0YXRpYyB2b2lkIGJjc3BfdGNvbmZf c2lnX2FsYXJtKGludCBzaWcpCnsKCXN0YXRpYyBpbnQgcmV0cmllcz0wOwoJdW5zaWduZWQgY2hh ciBiY3NwX2NvbmZfcGt0WzEwXSA9IHsweGMwLDB4MDAsMHg0MSwweDAwLDB4YmUsMHhhZCwweGVm LDB4YWMsMHhlZCwweGMwfTsKCWlmIChyZXRyaWVzIDwgMTApewoJCXJldHJpZXMrKzsKCQl3cml0 ZShzZXJpYWxfZmQsICZiY3NwX2NvbmZfcGt0LCAxMCk7CgkJYWxhcm0oMSk7CgkJcmV0dXJuOwoJ fQoJdGNmbHVzaChzZXJpYWxfZmQsIFRDSU9GTFVTSCk7CglmcHJpbnRmKHN0ZGVyciwgIkJDU1Ag aW5pdGlhbGl6YXRpb24gdGltZWQgb3V0XG4iKTsKCWV4aXQoMSk7Cn0KCnN0YXRpYyBpbnQgYmNz cChpbnQgZmQsIHN0cnVjdCB1YXJ0X3QgKnUsIHN0cnVjdCB0ZXJtaW9zICp0aSkKewoJdW5zaWdu ZWQgY2hhciBieXRlLCBiY3NwaFs0XSwgYmNzcHBbNF0sCgkJYmNzcF9zeW5jX3Jlc3BfcGt0WzEw XSA9IHsweGMwLDB4MDAsMHg0MSwweDAwLDB4YmUsMHhhYywweGFmLDB4ZWYsMHhlZSwweGMwfSwK CQliY3NwX2NvbmZfcmVzcF9wa3RbMTBdID0gezB4YzAsMHgwMCwweDQxLDB4MDAsMHhiZSwweGRl LDB4YWQsMHhkMCwweGQwLDB4YzB9LAoJCWJjc3BzeW5jWzRdICAgICA9IHsweGRhLCAweGRjLCAw eGVkLCAweGVkfSwKCQliY3Nwc3luY3Jlc3BbNF0gPSB7MHhhYywweGFmLDB4ZWYsMHhlZX0sCgkJ YmNzcGNvbmZbNF0gICAgID0gezB4YWQsMHhlZiwweGFjLDB4ZWR9LAoJCWJjc3Bjb25mcmVzcFs0 XSA9IHsweGRlLDB4YWQsMHhkMCwweGQwfTsKCXN0cnVjdCBzaWdhY3Rpb24gc2E7CgoJaWYgKHNl dF9zcGVlZChmZCwgdGksIHUtPnNwZWVkKSA8IDApIHsKCQlwZXJyb3IoIkNhbid0IHNldCBkZWZh dWx0IGJhdWQgcmF0ZSIpOwoJCXJldHVybiAtMTsKCX0KCgl0aS0+Y19jZmxhZyB8PSBQQVJFTkI7 Cgl0aS0+Y19jZmxhZyAmPSB+KFBBUk9ERCk7CgoJaWYgKHRjc2V0YXR0cihmZCwgVENTQU5PVywg dGkpIDwgMCkgewoJCXBlcnJvcigiQ2FuJ3Qgc2V0IHBvcnQgc2V0dGluZ3MiKTsKCQlyZXR1cm4g LTE7Cgl9CgoJYWxhcm0oMCk7CgoJc2VyaWFsX2ZkID0gZmQ7CgltZW1zZXQoJnNhLCAwLCBzaXpl b2Yoc2EpKTsKCXNhLnNhX2ZsYWdzID0gU0FfTk9DTERTVE9QOwoJc2Euc2FfaGFuZGxlciA9IGJj c3BfdHNoeV9zaWdfYWxhcm07CglzaWdhY3Rpb24oU0lHQUxSTSwgJnNhLCBOVUxMKTsKCgkvKiBT dGF0ZSA9IHNoeSAqLwoKCWJjc3BfdHNoeV9zaWdfYWxhcm0oMCk7Cgl3aGlsZSAoMSkgewoJCWRv IHsKCQkJaWYgKHJlYWRfY2hlY2soZmQsICZieXRlLCAxKSA9PSAtMSl7CgkJCQlwZXJyb3IoIkZh aWxlZCB0byByZWFkIik7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQl9IHdoaWxlIChieXRlICE9IDB4 QzApOwoJCQoJCWRvIHsKCQkJaWYgKCByZWFkX2NoZWNrKGZkLCAmYmNzcGhbMF0sIDEpID09IC0x KXsKCQkJCXBlcnJvcigiRmFpbGVkIHRvIHJlYWQiKTsKCQkJCXJldHVybiAtMTsKCQkJfQoJCSAg CgkJfSB3aGlsZSAoYmNzcGhbMF0gPT0gMHhDMCk7CgkJCgkJaWYgKCByZWFkX2NoZWNrKGZkLCAm YmNzcGhbMV0sIDMpID09IC0xKXsKCQkJcGVycm9yKCJGYWlsZWQgdG8gcmVhZCIpOwoJCQlyZXR1 cm4gLTE7CgkJfQoJCQoJCWlmICgoKGJjc3BoWzBdICsgYmNzcGhbMV0gKyBiY3NwaFsyXSkgJiAw eEZGKSAhPSAodW5zaWduZWQgY2hhcil+YmNzcGhbM10pCgkJCWNvbnRpbnVlOwoJCWlmIChiY3Nw aFsxXSAhPSAweDQxIHx8IGJjc3BoWzJdICE9IDB4MDApCgkJCWNvbnRpbnVlOwoKCQlpZiAocmVh ZF9jaGVjayhmZCwgJmJjc3BwLCA0KSA9PSAtMSl7CgkJCXBlcnJvcigiRmFpbGVkIHRvIHJlYWQi KTsKCQkJcmV0dXJuIC0xOwoJCX0KCgkJaWYgKCFtZW1jbXAoYmNzcHAsIGJjc3BzeW5jLCA0KSkg ewoJCQl3cml0ZShmZCwgJmJjc3Bfc3luY19yZXNwX3BrdCwxMCk7CgkJfSBlbHNlIGlmICghbWVt Y21wKGJjc3BwLCBiY3Nwc3luY3Jlc3AsIDQpKQoJCQlicmVhazsKCX0KCgkvKiBTdGF0ZSA9IGN1 cmlvdXMgKi8KCglhbGFybSgwKTsKCXNhLnNhX2hhbmRsZXIgPSBiY3NwX3Rjb25mX3NpZ19hbGFy bTsKCXNpZ2FjdGlvbihTSUdBTFJNLCAmc2EsIE5VTEwpOwoJYWxhcm0oMSk7CgoJd2hpbGUgKDEp IHsKCQlkbyB7CgkJCWlmIChyZWFkX2NoZWNrKGZkLCAmYnl0ZSwgMSkgPT0gLTEpewoJCQkJcGVy cm9yKCJGYWlsZWQgdG8gcmVhZCIpOwoJCQkJcmV0dXJuIC0xOwoJCQl9CgkJfSB3aGlsZSAoYnl0 ZSAhPSAweEMwKTsKCgkJZG8gewoJCQlpZiAocmVhZF9jaGVjayhmZCwgJmJjc3BoWzBdLCAxKSA9 PSAtMSl7CgkJCSAgICAgIHBlcnJvcigiRmFpbGVkIHRvIHJlYWQiKTsKCQkJICAgICAgcmV0dXJu IC0xOwoJCQl9CgkJfSB3aGlsZSAoYmNzcGhbMF0gPT0gMHhDMCk7CgoJCWlmIChyZWFkX2NoZWNr KGZkLCAmYmNzcGhbMV0sIDMpID09IC0xKXsKCQkJcGVycm9yKCJGYWlsZWQgdG8gcmVhZCIpOwoJ CQlyZXR1cm4gLTE7CgkJfQoJCQoJCWlmICgoKGJjc3BoWzBdICsgYmNzcGhbMV0gKyBiY3NwaFsy XSkgJiAweEZGKSAhPSAodW5zaWduZWQgY2hhcil+YmNzcGhbM10pCgkJCWNvbnRpbnVlOwoKCQlp ZiAoYmNzcGhbMV0gIT0gMHg0MSB8fCBiY3NwaFsyXSAhPSAweDAwKQoJCQljb250aW51ZTsKCgkJ aWYgKHJlYWRfY2hlY2soZmQsICZiY3NwcCwgNCkgPT0gLTEpewoJCQlwZXJyb3IoIkZhaWxlZCB0 byByZWFkIik7CgkJCXJldHVybiAtMTsKCQl9CgoJCWlmICghbWVtY21wKGJjc3BwLCBiY3Nwc3lu YywgNCkpCgkJCXdyaXRlKGZkLCAmYmNzcF9zeW5jX3Jlc3BfcGt0LCAxMCk7CgkJZWxzZSBpZiAo IW1lbWNtcChiY3NwcCwgYmNzcGNvbmYsIDQpKQoJCQl3cml0ZShmZCwgJmJjc3BfY29uZl9yZXNw X3BrdCwgMTApOwoJCWVsc2UgaWYgKCFtZW1jbXAoYmNzcHAsIGJjc3Bjb25mcmVzcCwgIDQpKQoJ CQlicmVhazsKCX0KCgkvKiBTdGF0ZSA9IGdhcnJ1bG91cyAqLwoKCXJldHVybiAwOwp9CgovKiBT aWxpY29uIHdhdmUgSDo1IDMgV0lSRSBVQVJUIC0gR0RBIFRlY2hub2xvZ2llcyBMdGQgQ2hlbm5h aSBJTkRJQSovCi8qIGFkZGVkIGZvciBINSAzIFdJUkUgVUFSVCAgYnkgVi5IYXJpaGFyYW4gKHYu aGFyaWhhcmFuQGdkYXRlY2guY28uaW4pICovCgkKc3RhdGljIGludCBjb21wYXJlX2J5dGUoY2hh ciAqc3JjLGNoYXIgKmRlc3QsaW50IGNvdW50KQp7CglpbnQgaTsKCWludCByZXQ9LTE7CgoJZm9y KGk9MDtpPGNvdW50O2krKyl7CgoJCWlmKHNyY1tpXSA9PSBkZXN0W2ldKXsKCQkJcmV0ID0wOwoJ CX1lbHNlewoJCQlyZXQgPS0xOwoJCQlicmVhazsKCQl9Cgl9CgoJcmV0dXJuIHJldDsKfQovKiBT aWxpY29uIHdhdmUgSDo1IDMgV0lSRSBVQVJUIC0gR0RBIFRlY2hub2xvZ2llcyBMdGQgQ2hlbm5h aSBJTkRJQSovCi8qIEFkZGVkIGZvciBINSAzIFdJUkUgVUFSVCAgYnkgVi5IYXJpaGFyYW4gKHYu aGFyaWhhcmFuQGdkYXRlY2guY28uaW4pICovCgpzdGF0aWMgaW50IHN3YXZlX2g1KGludCBmZCwg c3RydWN0IHVhcnRfdCAqdSwgc3RydWN0IHRlcm1pb3MgKnRpKQp7CgoJY2hhciBjb21tYW5kWzI0 XTsKCQoJaW50IGNudCxpLGoscmV0OwoJY2hhciBidWZbMTBdOwoKCWNoYXIgc3luY19yZXNwX3Br dFs4XT17MHhDMCwweDAwLDB4MkYsMHgwMCwweEQwLDB4MDIsMHhGRCwweEMwfTsKCWNoYXIgc3lu Y19wa3RbOF09ezB4QzAsMHgwMCwweDJGLDB4MDAsMHhEMCwweDAxLDB4RkUsMHhDMH07CgljaGFy IGNvbmZpZ19wa3RbOF09ezB4QzAsMHgwMCwweDJGLDB4MDAsMHhEMCwweDAzLDB4RkMsMHhDMH07 CgoJY2hhciBjb25maWdfcmVzcF9wa3RbOF0gPSB7MHhDMCwweDAwLDB4M0YsMHgwMCwweGRiLDB4 ZGMsMHgwNCwweDdCfTsKCglzdHJ1Y3QgdGltZXZhbCBvbmVTZWNvbmQ7CglmZF9zZXQgZmRTZXQ7 CgoJdGktPmNfY2ZsYWcgfD0gUEFSRU5COwoJdGktPmNfY2ZsYWcgJj0gfihQQVJPREQpOwoKCWlm ICh0Y3NldGF0dHIoZmQsIFRDU0FOT1csIHRpKSA8IDApIHsKCQlwZXJyb3IoIkNhbid0IHNldCBw b3J0IHNldHRpbmdzIik7CgkJcmV0dXJuIC0xOwoJfQoKCWZvcihqPTA7IGogPCAxMCA7IGorKyl7 CgoJCXByaW50Zigic2VuZGluZyBzeW5jIG1lc3NhZ2UgJWRcbiIsaik7CgoJCWNvbW1hbmRbMF0g PSAweEMwOwoJCWNvbW1hbmRbMV0gPSAweDAwOwoJCWNvbW1hbmRbMl0gPSAweDJGOwoJCWNvbW1h bmRbM10gPSAweDAwOwoJCWNvbW1hbmRbNF0gPSAweEQwOwoJCWNvbW1hbmRbNV0gPSAweDAxOwoJ CWNvbW1hbmRbNl0gPSAweDdFOwoJCWNvbW1hbmRbN10gPSAweEMwOwoKCQoKCQlpZih3cml0ZShm ZCxjb21tYW5kLDgpIDwgOCl7CgkJCXByaW50Zigid3JpdGUgZXJyb3IgXG4iKTsKCQl9CgoJCW9u ZVNlY29uZC50dl9zZWMgPSAxOwogICAgCQlvbmVTZWNvbmQudHZfdXNlYyA9IDA7CiAgICAJCUZE X1pFUk8oJmZkU2V0KTsKICAgIAkJRkRfU0VUKGZkLCAmZmRTZXQpOwoKCQkvL2RvewoJCS8vdXNs ZWVwKDEwMDAwMDApOwoKCQkJc3dpdGNoIChyZXQgPSBzZWxlY3QoRkRfU0VUU0laRSwgJmZkU2V0 LCBOVUxMLCBOVUxMLCAmb25lU2Vjb25kKSkKICAgIAkJCXsKCQoJCQljYXNlIDE6CgkJCQljbnQg PSByZWFkKGZkLGJ1Ziw4KTsKCgkJLy99d2hpbGUoY250IDwwKTsKCgkJCQlpZihjbnQgPiAwKXsK CQkJCQlmb3IoaT0wO2k8Y250O2krKykKCQkJCQkJcHJpbnRmKCJUaGUgcmVhZGUgYnl0ZSB2YWx1 eWUgaXMgJXhcbiIsYnVmW2ldKTsKCgkJCQkJaWYoY29tcGFyZV9ieXRlKHN5bmNfcmVzcF9wa3Qs YnVmLDgpID09IDApCgkJCQkJCWo9MTA7CgoJCQkJCWlmKGNvbXBhcmVfYnl0ZShjb25maWdfcGt0 LGJ1Ziw4KSA9PSAwKQoJCQkJCQlqPTEwOwoJCQoJCQoJCQkJfWVsc2V7CgkJCQkJcHJpbnRmKCJy ZWFkIGVycm9yXG4iKTsJCgkJCQkJcmV0dXJuIC0xOwoJCQkJfQoKCQkJCWJyZWFrOwoKCQkJZGVm YXVsdDoKCQkJCWJyZWFrOwoJCQl9Cgl9CgoKCWZvcihqPTA7ajwxMDtqKyspewoKCQlwcmludGYo InNlbmRpbmcgc3luYyByZXNwbnNlIG1lc3NhZ2UgXG4iKTsKCgkJY29tbWFuZFswXSA9IDB4QzA7 CgkJY29tbWFuZFsxXSA9IDB4MDA7CgkJY29tbWFuZFsyXSA9IDB4MkY7CgkJY29tbWFuZFszXSA9 IDB4MDA7CgkJY29tbWFuZFs0XSA9IDB4RDA7CgkJY29tbWFuZFs1XSA9IDB4MDI7CgkJY29tbWFu ZFs2XSA9IDB4N0Q7CgkJY29tbWFuZFs3XSA9IDB4QzA7CgoJCgoJCWlmKHdyaXRlKGZkLGNvbW1h bmQsOCkgPCA4KXsKCQkJcHJpbnRmKCJ3cml0ZSBlcnJvciBcbiIpOwoJCX0KCgkJb25lU2Vjb25k LnR2X3NlYyA9IDE7CiAgICAJCW9uZVNlY29uZC50dl91c2VjID0gMDsKICAgIAkJRkRfWkVSTygm ZmRTZXQpOwogICAgCQlGRF9TRVQoZmQsICZmZFNldCk7CgkKCQkvL2RvewoJCQkvL3VzbGVlcCgx MDAwMDAwKTsKCQlzd2l0Y2ggKHJldCA9IHNlbGVjdChGRF9TRVRTSVpFLCAmZmRTZXQsIE5VTEws IE5VTEwsICZvbmVTZWNvbmQpKQogICAgCQl7CgkKCQkJY2FzZSAxOgoKCQkJCWNudCA9IHJlYWQo ZmQsYnVmLDgpOwoJCS8vfXdoaWxlKGNudCA8MCk7CgoJCgoJCQkJaWYoY250ID4gMCl7CgkJCQkJ Zm9yKGk9MDtpPGNudDtpKyspCgkJCQkJcHJpbnRmKCJUaGUgcmVhZGUgYnl0ZSB2YWx1eWUgaXMg JXhcbiIsYnVmW2ldKTsKCgkJCQlpZihjb21wYXJlX2J5dGUoY29uZmlnX3BrdCxidWYsOCkgPT0g MCkKCQkJCQkJaj0xMDsKCgkJCQl9ZWxzZXsKCQkJCQlwcmludGYoInJlYWQgZXJyb3JcbiIpOwkK CQkJCQlyZXR1cm4gLTE7CgkJCQl9CgkJCQlicmVhazsKCQkKCQkJZGVmYXVsdDoKCQkJCWJyZWFr OwkKCQl9CiAJfQoKCglmb3Ioaj0wO2o8MTA7aisrKXsKCgkJcHJpbnRmKCJzZW5kaW5nIGNvbmZp ZyBtZXNzYWdlICVkXG4iLGopOwoJCgkJY29tbWFuZFswXSA9IDB4QzA7CgkJY29tbWFuZFsxXSA9 IDB4MDA7CgkJY29tbWFuZFsyXSA9IDB4M0Y7IAoJCWNvbW1hbmRbM10gPSAweDAwOwoJCWNvbW1h bmRbNF0gPSAweGRiOyAKCQljb21tYW5kWzVdID0gMHhkYzsKCQljb21tYW5kWzZdID0gMHgwMzsK CQljb21tYW5kWzddID0gMHhGQzsKCQljb21tYW5kWzhdID0gMHgwNzsgCgkJY29tbWFuZFs5XSA9 IDB4QzA7CgoJCWlmKHdyaXRlKGZkLGNvbW1hbmQsMTApIDwgMTApewoJCQlwcmludGYoIndyaXRl IGVycm9yIFxuIik7CgkJfQoKCQkKCQkvL2RvewoJCQkvL3VzbGVlcCgxMDAwMDAwKTsKCgkJb25l U2Vjb25kLnR2X3NlYyA9IDE7CiAgICAJCW9uZVNlY29uZC50dl91c2VjID0gMDsKICAgIAkJRkRf WkVSTygmZmRTZXQpOwogICAgCQlGRF9TRVQoZmQsICZmZFNldCk7CgkJCgkJc3dpdGNoIChyZXQg PSBzZWxlY3QoRkRfU0VUU0laRSwgJmZkU2V0LCBOVUxMLCBOVUxMLCAmb25lU2Vjb25kKSkKICAg IAkJewoJCgkJCWNhc2UgMToKCgkJCQljbnQgPSByZWFkKGZkLGJ1ZiwxMCk7CgkJLy99d2hpbGUo Y250IDwgMCk7CgoJCQkJaWYoY250ID4gMCl7CgkJCQkJZm9yKGk9MDtpPGNudDtpKyspCgkJCQkJ CXByaW50ZigiVGhlIHJlYWRlIGJ5dGUgdmFsdXllIGlzICV4XG4iLGJ1ZltpXSk7CgoJCQkJCWlm KGNvbXBhcmVfYnl0ZShjb25maWdfcmVzcF9wa3QsYnVmLDgpID09IDApCgkJCQkJCWo9MTA7CgkJ CQkJCgkJCQl9ZWxzZXsKCQkJCQlwcmludGYoInJlYWQgZXJyb3JcbiIpOwkgCgkJCQkJcmV0dXJu IC0xOwoJCQkJfQoJCQkJYnJlYWs7CgoJCQlkZWZhdWx0OgoJCQkJYnJlYWs7CgkJfQoJfQoKCglj b21tYW5kWzBdID0gMHhDMDsKCWNvbW1hbmRbMV0gPSAweDAwOwoJY29tbWFuZFsyXSA9IDB4MkY7 Cgljb21tYW5kWzNdID0gMHgwMDsKCWNvbW1hbmRbNF0gPSAweEQwOwoJY29tbWFuZFs1XSA9IDB4 MDQ7Cgljb21tYW5kWzZdID0gMHg3QjsKCWNvbW1hbmRbN10gPSAweEMwOwoKCWlmKHdyaXRlKGZk LGNvbW1hbmQsOCkgPCA4KXsKCQkJcHJpbnRmKCJ3cml0ZSBlcnJvciBcbiIpOwoJCX0KCgkJCgly ZXR1cm4gMDsJCQp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiAKICogQ1NS IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIAogKiBJbnNwaXJlZCBzdHJvbmdseSBieSBjb2RlIGlu IE9wZW5CVCBhbmQgZXhwZXJpbWVudGF0aW9ucyB3aXRoIEJyYWluYm94ZXMKICogUGNtY2lhIGNh cmQuCiAqIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4gLSAxNC4xMS4wMQogKi8Kc3Rh dGljIGludCBjc3IoaW50IGZkLCBzdHJ1Y3QgdWFydF90ICp1LCBzdHJ1Y3QgdGVybWlvcyAqdGkp CnsKCXN0cnVjdCB0aW1lc3BlYyB0bSA9IHswLCAxMDAwMDAwMH07CS8qIDEwbXMgLSBiZSBnZW5l cm91cyAqLwoJdW5zaWduZWQgY2hhciBjbWRbMzBdOwkJLyogQ29tbWFuZCAqLwoJdW5zaWduZWQg Y2hhciByZXNwWzMwXTsJCS8qIFJlc3BvbnNlICovCglpbnQgIGNsZW4gPSAwOwkJLyogQ29tbWFu ZCBsZW4gKi8KCXN0YXRpYyBpbnQgY3NyX3NlcSA9IDA7CS8qIFNlcXVlbmNlIG51bWJlciBvZiBj b21tYW5kICovCglpbnQgIGRpdmlzb3I7CgoJLyogSXQgc2VlbXMgdGhhdCBpZiB3ZSBzZXQgdGhl IENTUiBVQVJUIHNwZWVkIHN0cmFpZ2h0IGF3YXksIGl0CgkgKiB3b24ndCB3b3JrLCB0aGUgQ1NS IFVBUlQgZ2V0cyBpbnRvIGEgc3RhdGUgd2hlcmUgd2UgY2FuJ3QgdGFsawoJICogdG8gaXQgYW55 bW9yZS4KCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBkb2luZyBhIHJlYWQgYmVmb3JlIHNldHRpbmcg dGhlIENTUiBzcGVlZAoJICogc2VlbXMgdG8gYmUgb2suCgkgKiBUaGVyZWZvcmUsIHRoZSBzdHJh dGVneSBpcyB0byByZWFkIHRoZSBidWlsZCBJRCAodXNlZnVsIGZvcgoJICogZGVidWdnaW5nKSBh bmQgb25seSB0aGVuIHNldCB0aGUgQ1NSIFVBUlQgc3BlZWQuIERvaW5nIGxpa2UKCSAqIHRoaXMg aXMgbW9yZSBjb21wbGV4IGJ1dCBhdCBsZWFzdCBpdCB3b3JrcyA7LSkKCSAqIFRoZSBDU1IgVUFS VCBjb250cm9sIG1heSBiZSBzbG93IHRvIHdha2UgdXAgb3Igc29tZXRoaW5nIGJlY2F1c2UKCSAq IGV2ZXJ5IHRpbWUgSSByZWFkIGl0cyBzcGVlZCwgaXRzIGJvZ3VzLi4uCgkgKiBKZWFuIElJICov CgoJLyogVHJ5IHRvIHJlYWQgdGhlIGJ1aWxkIElEIG9mIHRoZSBDU1IgY2hpcCAqLwoJY2xlbiA9 IDUgKyAoNSArIDYpICogMjsKCS8qIEhDSSBoZWFkZXIgKi8KCWNtZFswXSA9IEhDSV9DT01NQU5E X1BLVDsKCWNtZFsxXSA9IDB4MDA7CQkvKiBDU1IgY29tbWFuZCAqLwoJY21kWzJdID0gMHhmYzsJ CS8qIE1BTlVGQUNUVVJFUl9TUEVDICovCgljbWRbM10gPSAxICsgKDUgKyA2KSAqIDI7CS8qIGxl biAqLwoJLyogQ1NSIE1TRyBoZWFkZXIgKi8KCWNtZFs0XSA9IDB4QzI7CQkvKiBmaXJzdCtsYXN0 K2NoYW5uZWw9QkNDICovCgkvKiBDU1IgQkNDIGhlYWRlciAqLwoJY21kWzVdID0gMHgwMDsJCS8q IHR5cGUgPSBHRVQtUkVRICovCgljbWRbNl0gPSAweDAwOwkJLyogLSBtc0IgKi8KCWNtZFs3XSA9 IDUgKyA0OwkJLyogbGVuICovCgljbWRbOF0gPSAweDAwOwkJLyogLSBtc0IgKi8KCWNtZFs5XSA9 IGNzcl9zZXEgJiAweEZGOy8qIHNlcSBudW0gKi8KCWNtZFsxMF0gPSAoY3NyX3NlcSA+PiA4KSAm IDB4RkY7CS8qIC0gbXNCICovCgljc3Jfc2VxKys7CgljbWRbMTFdID0gMHgxOTsJCS8qIHZhcl9p ZCA9IENTUl9DTURfQlVJTERfSUQgKi8KCWNtZFsxMl0gPSAweDI4OwkJLyogLSBtc0IgKi8KCWNt ZFsxM10gPSAweDAwOwkJLyogc3RhdHVzID0gU1RBVFVTX09LICovCgljbWRbMTRdID0gMHgwMDsJ CS8qIC0gbXNCICovCgkvKiBDU1IgQkNDIHBheWxvYWQgKi8KCW1lbXNldChjbWQgKyAxNSwgMCwg NiAqIDIpOwoKCS8qIFNlbmQgY29tbWFuZCAqLwoJZG8gewoJCWlmICh3cml0ZShmZCwgY21kLCBj bGVuKSAhPSBjbGVuKSB7CgkJCXBlcnJvcigiRmFpbGVkIHRvIHdyaXRlIGluaXQgY29tbWFuZCAo R0VUX0JVSUxEX0lEKSIpOwoJCQlyZXR1cm4gLTE7CgkJfQoKCQkvKiBSZWFkIHJlcGx5LiAqLwoJ CWlmIChyZWFkX2hjaV9ldmVudChmZCwgcmVzcCwgMTAwKSA8IDApIHsKCQkJcGVycm9yKCJGYWls ZWQgdG8gcmVhZCBpbml0IHJlc3BvbnNlIChHRVRfQlVJTERfSUQpIik7CgkJCXJldHVybiAtMTsK CQl9CgoJLyogRXZlbnQgY29kZSAweEZGIGlzIGZvciB2ZW5kb3Itc3BlY2lmaWMgZXZlbnRzLCB3 aGljaCBpcyAKCSAqIHdoYXQgd2UncmUgbG9va2luZyBmb3IuICovCgl9IHdoaWxlIChyZXNwWzFd ICE9IDB4RkYpOwoKI2lmZGVmIENTUl9ERUJVRwoJewoJY2hhciB0ZW1wWzUxMl07CglpbnQgaTsK CWZvciAoaT0wOyBpIDwgcmxlbjsgaSsrKQoJCXNwcmludGYodGVtcCArIChpKjMpLCAiLSUwMlgi LCByZXNwW2ldKTsKCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBDU1IgYnVpbGQgSUQgJWQgWyVz XVxuIiwgcmxlbiwgdGVtcCArIDEpOwoJLy8gSW4gdGhlb3J5LCBpdCBzaG91bGQgbG9vayBsaWtl IDoKCS8vIDA0LUZGLTEzLUZGLTAxLTAwLTA5LTAwLTAwLTAwLTE5LTI4LTAwLTAwLTczLTAwLTAw LTAwLTAwLTAwLTAwLTAwCgl9CiNlbmRpZgoJLyogRGlzcGxheSB0aGF0IHRvIHVzZXIgKi8KCWZw cmludGYoc3RkZXJyLCAiQ1NSIGJ1aWxkIElEIDB4JTAyWC0weCUwMlhcbiIsIAoJCXJlc3BbMTVd ICYgMHhGRiwgcmVzcFsxNF0gJiAweEZGKTsKCQoJLyogVHJ5IHRvIHJlYWQgdGhlIGN1cnJlbnQg c3BlZWQgb2YgdGhlIENTUiBjaGlwICovCgljbGVuID0gNSArICg1ICsgNCkqMjsKCS8qIC0tIEhD SSBoZWFkZXIgKi8KCWNtZFszXSA9IDEgKyAoNSArIDQpKjI7CS8qIGxlbiAqLwoJLyogLS0gQ1NS IEJDQyBoZWFkZXIgLS0gKi8KCWNtZFs5XSA9IGNzcl9zZXEgJiAweEZGOwkvKiBzZXEgbnVtICov CgljbWRbMTBdID0gKGNzcl9zZXEgPj4gOCkgJiAweEZGOwkvKiAtIG1zQiAqLwoJY3NyX3NlcSsr OwoJY21kWzExXSA9IDB4MDI7CQkvKiB2YXJfaWQgPSBDT05GSUdfVUFSVCAqLwoJY21kWzEyXSA9 IDB4Njg7CQkvKiAtIG1zQiAqLwoKI2lmZGVmIENTUl9ERUJVRwoJLyogU2VuZCBjb21tYW5kICov CglkbyB7CgkJaWYgKHdyaXRlKGZkLCBjbWQsIGNsZW4pICE9IGNsZW4pIHsKCQkJcGVycm9yKCJG YWlsZWQgdG8gd3JpdGUgaW5pdCBjb21tYW5kIChHRVRfQlVJTERfSUQpIik7CgkJCXJldHVybiAt MTsKCQl9CgoJCS8qIFJlYWQgcmVwbHkuICovCgkJaWYgKHJlYWRfaGNpX2V2ZW50KGZkLCByZXNw LCAxMDApIDwgMCkgewoJCQlwZXJyb3IoIkZhaWxlZCB0byByZWFkIGluaXQgcmVzcG9uc2UgKEdF VF9CVUlMRF9JRCkiKTsKCQkJcmV0dXJuIC0xOwoJCX0KCgkvKiBFdmVudCBjb2RlIDB4RkYgaXMg Zm9yIHZlbmRvci1zcGVjaWZpYyBldmVudHMsIHdoaWNoIGlzIAoJICogd2hhdCB3ZSdyZSBsb29r aW5nIGZvci4gKi8KCX0gd2hpbGUgKHJlc3BbMV0gIT0gMHhGRik7CgoJewoJY2hhciB0ZW1wWzUx Ml07CglpbnQgaTsKCWZvciAoaT0wOyBpIDwgcmxlbjsgaSsrKQoJCXNwcmludGYodGVtcCArIChp KjMpLCAiLSUwMlgiLCByZXNwW2ldKTsKCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBDU1IgVUFS VCBzcGVlZCAlZCBbJXNdXG4iLCBybGVuLCB0ZW1wKzEpOwoJfQojZW5kaWYKCglpZiAodS0+c3Bl ZWQgPiAxNTAwMDAwKSB7CgkJZnByaW50ZihzdGRlcnIsICJTcGVlZCAlZCB0b28gaGlnaC4gUmVt YWluaW5nIGF0ICVkIGJhdWRcbiIsIAoJCQl1LT5zcGVlZCwgdS0+aW5pdF9zcGVlZCk7CgkJdS0+ c3BlZWQgPSB1LT5pbml0X3NwZWVkOwoJfSBlbHNlIGlmICh1LT5zcGVlZCAhPSA1NzYwMCAmJiB1 YXJ0X3NwZWVkKHUtPnNwZWVkKSA9PSBCNTc2MDApIHsKCQkvKiBVbmtub3duIHNwZWVkLiBXaHkg b2ggd2h5IGNhbid0IHdlIGp1c3QgcGFzcyBhbiBpbnQgdG8gdGhlIGtlcm5lbD8gKi8KCQlmcHJp bnRmKHN0ZGVyciwgIlNwZWVkICVkIHVucmVjb2duaXNlZC4gUmVtYWluaW5nIGF0ICVkIGJhdWRc biIsCgkJCXUtPnNwZWVkLCB1LT5pbml0X3NwZWVkKTsKCQl1LT5zcGVlZCA9IHUtPmluaXRfc3Bl ZWQ7Cgl9CglpZiAodS0+c3BlZWQgPT0gdS0+aW5pdF9zcGVlZCkKCQlyZXR1cm4gMDsKCgkvKiBO b3csIGNyZWF0ZSB0aGUgY29tbWFuZCB0aGF0IHdpbGwgc2V0IHRoZSBVQVJUIHNwZWVkICovCgkv KiBDU1IgQkNDIGhlYWRlciAqLwoJY21kWzVdID0gMHgwMjsJCQkvKiB0eXBlID0gU0VULVJFUSAq LwoJY21kWzZdID0gMHgwMDsJCQkvKiAtIG1zQiAqLwoJY21kWzldID0gY3NyX3NlcSAmIDB4RkY7 CS8qIHNlcSBudW0gKi8KCWNtZFsxMF0gPSAoY3NyX3NlcSA+PiA4KSAmIDB4RkY7LyogLSBtc0Ig Ki8KCWNzcl9zZXErKzsKCglkaXZpc29yID0gKHUtPnNwZWVkKjY0Kzc4MTIpLzE1NjI1OwoKCS8q IE5vIHBhcml0eSwgb25lIHN0b3AgYml0IC0+IGRpdmlzb3IgfD0gMHgwMDAwOyAqLwoJY21kWzE1 XSA9IChkaXZpc29yKSAmIDB4RkY7CQkvKiBkaXZpZGVyICovCgljbWRbMTZdID0gKGRpdmlzb3Ig Pj4gOCkgJiAweEZGOwkvKiAtIG1zQiAqLwoJLyogVGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQgd2ls bCBiZSAweDAwICovCgojaWZkZWYgQ1NSX0RFQlVHCgl7CgljaGFyIHRlbXBbNTEyXTsKCWludCBp OwoJZm9yKGkgPSAwOyBpIDwgY2xlbjsgaSsrKQoJCXNwcmludGYodGVtcCArIChpKjMpLCAiLSUw MlgiLCBjbWRbaV0pOwoJZnByaW50ZihzdGRlcnIsICJXcml0aW5nIENTUiBVQVJUIHNwZWVkICVk IFslc11cbiIsIGNsZW4sIHRlbXAgKyAxKTsKCS8vIEluIHRoZW9yeSwgaXQgc2hvdWxkIGxvb2sg bGlrZSA6CgkvLyAwMS0wMC1GQy0xMy1DMi0wMi0wMC0wOS0wMC0wMy0wMC0wMi02OC0wMC0wMC1C Ri0wRS0wMC0wMC0wMC0wMC0wMC0wMAoJLy8gMDEtMDAtRkMtMTMtQzItMDItMDAtMDktMDAtMDEt MDAtMDItNjgtMDAtMDAtRDgtMDEtMDAtMDAtMDAtMDAtMDAtMDAKCX0KI2VuZGlmCgoJLyogU2Vu ZCB0aGUgY29tbWFuZCB0byBzZXQgdGhlIENTUiBVQVJUIHNwZWVkICovCglpZiAod3JpdGUoZmQs IGNtZCwgY2xlbikgIT0gY2xlbikgewoJCXBlcnJvcigiRmFpbGVkIHRvIHdyaXRlIGluaXQgY29t bWFuZCAoU0VUX1VBUlRfU1BFRUQpIik7CgkJcmV0dXJuIC0xOwoJfQoJbmFub3NsZWVwKCZ0bSwg TlVMTCk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBnZGFfYmx1ZXRvb3RoKGludCBmZCwgc3Ry dWN0IHVhcnRfdCAqdSwgc3RydWN0IHRlcm1pb3MgKnRpKQp7CglzdHJ1Y3QgdGltZXNwZWMgdG0g PSB7MCwgNTAwMDAwfTsKCWNoYXIgY21kWzEwXSwgcnNwWzEwMF07CglpbnQgcixpOwoKCXRpLT5j X2NmbGFnIHw9IFBBUkVOQjsKCXRpLT5jX2NmbGFnICY9IH4oUEFST0REKTsKCglpZiAodGNzZXRh dHRyKGZkLCBUQ1NBTk9XLCB0aSkgPCAwKSB7CgkJcGVycm9yKCJDYW4ndCBzZXQgcG9ydCBzZXR0 aW5ncyIpOwoJCXJldHVybiAtMTsKCX0KCgkvLyB3ZSBwcm9iYWJseSBnb3QgdGhlIHJlcGx5LiBO b3cgd2UgbXVzdCBzZW5kIHRoZSAic29mdCByZXNldCI6CgljbWRbMF0gPSBIQ0lfQ09NTUFORF9Q S1Q7CS8vIGl0J3MgYSBjb21tYW5kIHBhY2tldAoJY21kWzFdID0gMHgwQjsJCQkvLyBPQ0YgMHgw Qgk9IHBhcmFtIGFjY2VzcyBzZXQJCgljbWRbMl0gPSAweGZjOwkJCS8vIE9HRiBieDExMTExMSA9 IHZlbmRvciBzcGVjaWZpYwoJY21kWzNdID0gMHgwMTsJCQkvLyAxIGJ5dGUgb2YgZGF0YSBmb2xs b3dpbmcgCgljbWRbNF0gPSAweDAzOwkJCS8vIEhDSSBSZXNldCBTdWJjb21tYW5kCgkJCQoJLy8g U2VuZCBpbml0aWFsaXphdGlvbiBjb21tYW5kCglpZiAod3JpdGUoZmQsIGNtZCwgNSkgIT0gNSkg ewoJCXBlcnJvcigiIEZpcnN0IENhbid0IHdyaXRlIFNpbGljb24gV2F2ZSByZXNldCBjbWQuIik7 CgkJcmV0dXJuIC0xOwoJfQoKCW5hbm9zbGVlcCgmdG0sIE5VTEwpOwoKCS8vIFNpbGljb24gV2F2 ZSBzZXQgYmF1ZCByYXRlIGNvbW1hbmQKCS8vIHNlZSBIQ0kgVmVuZG9yIFNwZWNpZmljIEludGVy ZmFjZSBmcm9tIFNpbGljb24gV2F2ZQoJLy8gZmlyc3Qgc2VuZCBhICJwYXJhbSBhY2Nlc3Mgc2V0 IiBjb21tYW5kIHRvIHNldCB0aGUKCS8vIGFwcHJvcHJpYXRlIGRhdGEgZmllbGRzIGluIFJBTS4g VGhlbiBzZW5kIGEgIkhDSSBSZXNldAoJLy8gU3ViY29tbWFuZCIsIGUuZy4gInNvZnQgcmVzZXQi IHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgoKCWNtZFswXSA9IEhDSV9DT01NQU5EX1BL VDsJLy8gaXQncyBhIGNvbW1hbmQgcGFja2V0CgljbWRbMV0gPSAweDBCOwkJCS8vIE9DRiAweDBC CT0gcGFyYW0gYWNjZXNzIHNldAkKCWNtZFsyXSA9IDB4ZmM7CQkJLy8gT0dGIGJ4MTExMTExID0g dmVuZG9yIHNwZWNpZmljCgljbWRbM10gPSAweDA2OwkJCS8vIDYgYnl0ZXMgb2YgZGF0YSBmb2xs b3dpbmcKCWNtZFs0XSA9IDB4MDE7CQkJLy8gcGFyYW0gc3ViIGNvbW1hbmQKCWNtZFs1XSA9IDB4 MTE7CQkJLy8gdGFnIDE3ID0gMHgxMSA9IEhDSSBUcmFuc3BvcnQgUGFyYW1zCgljbWRbNl0gPSAw eDAzOwkJCS8vIGxlbmd0aCBvZiB0aGUgcGFyYW1ldGVyIGZvbGxvd2luZwoJY21kWzddID0gMHgw NjsgICAvLzE7CQkJLy8gSENJIFRyYW5zcG9ydCBmbG93IGNvbnRyb2wgZW5hYmxlCgljbWRbOF0g PSAweDA0OyAgICAgIC8vMHgwMTsJCQkvLyBIQ0kgVHJhbnNwb3J0IFR5cGUgPSBVQVJUCgoJc3dp dGNoICh1LT5zcGVlZCkgewoJY2FzZSAxOTIwMDoKCQljbWRbOV0gPSAweDAzOwoJCWJyZWFrOwoJ Y2FzZSAzODQwMDoKCQljbWRbOV0gPSAweDAyOwoJCWJyZWFrOwoJY2FzZSA1NzYwMDoKCQljbWRb OV0gPSAweDAxOwoJCWJyZWFrOwoJY2FzZSAxMTUyMDA6CgkJY21kWzldID0gMHgwMDsKCQlicmVh azsKCWRlZmF1bHQ6CgkJdS0+c3BlZWQgPSAxMTUyMDA7CgkJY21kWzldID0gMHgwMDsKCQlicmVh azsKCX0KCgkvKiBTZW5kIGluaXRpYWxpemF0aW9uIGNvbW1hbmQgKi8KCWlmICh3cml0ZShmZCwg Y21kLCAxMCkgIT0gMTApIHsKCQlwZXJyb3IoIkZhaWxlZCB0byB3cml0ZSBpbml0IGNvbW1hbmQi KTsKCQlyZXR1cm4gLTE7Cgl9CgoJLy8gV2Ugc2hvdWxkIHdhaXQgZm9yIGEgIkdFVCBFdmVudCIg dG8gY29uZmlybSB0aGUgc3VjY2VzcyBvZiAKCS8vIHRoZSBiYXVkIHJhdGUgc2V0dGluZy4gV2Fp dCBzb21lIHRpbWUgYmVmb3JlIHJlYWRpbmcuIEJldHRlcjogIAoJLy8gcmVhZCB3aXRoIHRpbWVv dXQsIHBhcnNlIGRhdGEgCgkvLyB1bnRpbCBjb3JyZWN0IGFuc3dlciwgZWxzZSBlcnJvciBoYW5k bGluZyAuLi4gdG9kbyAuLi4KCgluYW5vc2xlZXAoJnRtLCBOVUxMKTsKCglyID0gcmVhZChmZCwg cnNwLCBzaXplb2YocnNwKSk7CglpZiAociA+IDApIHsKCQkvLyBndWVzcyBpdCdzIG9rYXksIGJ1 dCB3ZSBzaG91bGQgcGFyc2UgdGhlIHJlcGx5LiBCdXQgc2luY2UKCQkvLyBJIGRvbid0IHJlYWN0 IG9uIGFuIGVycm9yIGFueXdheSAuLi4gdG9kbwoJCS8vIFJlc3BvbnNlIHBhY2tldCBmb3JtYXQ6 CgkJLy8gIDA0CUV2ZW50CgkJLy8gIEZGCVZlbmRvciBzcGVjaWZpYwoJCS8vICAwNwlQYXJhbWV0 ZXIgbGVuZ3RoCgkJLy8gIDBCCVN1YmNvbW1hbmQKCQkvLyAgMDEJU2V0ZXZlbnQKCQkvLyAgMTEJ VGFnIHNwZWNpZnlpbmcgSENJIFRyYW5zcG9ydCBMYXllciBQYXJhbWV0ZXIKCQkvLyAgMDMJbGVu Z3RoCgkJLy8gIDAxCWZsb3cgb24KCQkvLyAgMDEgCUhjaSBUcmFuc3BvcnQgdHlwZSA9IFVhcnQK CQkvLyAgeHgJQmF1ZCByYXRlIHNldCAoc2VlIGFib3ZlKQoKCQlwcmludGYoIk5vIG9mIGJ5dGVz IHJlYWQgJWRcbiIscik7CgoJCWZvcihpPTA7aTxyO2krKykKCQkJcHJpbnRmKCJUaGUgYnl0ZSBp cyAleFxuIixyc3BbaV0pOwkKCX0gZWxzZSB7CQoJCS8vIHVwcywgZ290IGVycm9yLgoJCXJldHVy biAtMTsKCX0KCgkvLyB3ZSBwcm9iYWJseSBnb3QgdGhlIHJlcGx5LiBOb3cgd2UgbXVzdCBzZW5k IHRoZSAic29mdCByZXNldCI6CgljbWRbMF0gPSBIQ0lfQ09NTUFORF9QS1Q7CS8vIGl0J3MgYSBj b21tYW5kIHBhY2tldAoJY21kWzFdID0gMHgwQjsJCQkvLyBPQ0YgMHgwQgk9IHBhcmFtIGFjY2Vz cyBzZXQJCgljbWRbMl0gPSAweGZjOwkJCS8vIE9HRiBieDExMTExMSA9IHZlbmRvciBzcGVjaWZp YwoJY21kWzNdID0gMHgwMTsJCQkvLyAxIGJ5dGUgb2YgZGF0YSBmb2xsb3dpbmcgCgljbWRbNF0g PSAweDAzOwkJCS8vIEhDSSBSZXNldCBTdWJjb21tYW5kCgkJCQoJLy8gU2VuZCBpbml0aWFsaXph dGlvbiBjb21tYW5kCglpZiAod3JpdGUoZmQsIGNtZCwgNSkgIT0gNSkgewoJCXBlcnJvcigiQ2Fu J3Qgd3JpdGUgU2lsaWNvbiBXYXZlIHJlc2V0IGNtZC4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJbmFu b3NsZWVwKCZ0bSwgTlVMTCk7CgkJCQoJLy8gbm93IHRoZSB1YXJ0IGJhdWQgcmF0ZSBvbiB0aGUg c2lsaWNvbiB3YXZlIG1vZHVsZSBpcyBzZXQgYW5kIGVmZmVjdGl2ZS4KCS8vIGNoYW5nZSBvdXIg b3duIGJhdWQgcmF0ZSBhcyB3ZWxsLiBUaGVuIHRoZXJlIGlzIGEgcmVzZXQgZXZlbnQgY29tbWlu ZyBpbgogCS8vIG9uIHRoZSAqbmV3KiBiYXVkIHJhdGUuIFRoaXMgaXMgKnVuZG9jdW1lbnRlZCoh IFRoZSBwYWNrZXQgbG9va3MgbGlrZSB0aGlzOgoJLy8gMDQgRkYgMDEgMEIgKHdoaWNoIHdvdWxk IG1ha2UgdGhhdCBhIGNvbmZpcm1hdGlvbiBvZiAweDBCID0gIlBhcmFtIAoJLy8gc3ViY29tbWFu ZCBjbGFzcyIuIFNvOiBjaGFuZ2UgdG8gbmV3IGJhdWQgcmF0ZSwgcmVhZCB3aXRoIHRpbWVvdXQs IHBhcnNlCgkvLyBkYXRhLCBlcnJvciBoYW5kbGluZy4gQlRXOiBhbGwgcGFyYW0gYWNjZXNzIGlu IFNpbGljb24gV2F2ZSBpcyBkb25lIHRoaXMgd2F5LgoJLy8gTWF5YmUgdGhpcyBjb2RlIHdvdWxk IGJlbG9uZyBpbiBhIHNlcGVyYXRlIGZpbGUsIG9yIGF0IGxlYXN0IGNvZGUgcmV1c2UuLi4KCgly ZXR1cm4gMDsKCn0KCi8qIAogKiBTaWxpY29uIFdhdmUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24g CiAqIFRob21hcyBNb3NlciA8VGhvbWFzLk1vc2VyQHRtb3Nlci5jaD4KICovCnN0YXRpYyBpbnQg c3dhdmUoaW50IGZkLCBzdHJ1Y3QgdWFydF90ICp1LCBzdHJ1Y3QgdGVybWlvcyAqdGkpCnsKCXN0 cnVjdCB0aW1lc3BlYyB0bSA9IHswLCA1MDAwMDB9OwoJY2hhciBjbWRbMTBdLCByc3BbMTAwXTsK CWludCByOwoJaW50IGk7CgoJCgkvLyB3ZSBwcm9iYWJseSBnb3QgdGhlIHJlcGx5LiBOb3cgd2Ug bXVzdCBzZW5kIHRoZSAic29mdCByZXNldCI6CgljbWRbMF0gPSBIQ0lfQ09NTUFORF9QS1Q7CS8v IGl0J3MgYSBjb21tYW5kIHBhY2tldAoJY21kWzFdID0gMHgwQjsJCQkvLyBPQ0YgMHgwQgk9IHBh cmFtIGFjY2VzcyBzZXQJCgljbWRbMl0gPSAweGZjOwkJCS8vIE9HRiBieDExMTExMSA9IHZlbmRv ciBzcGVjaWZpYwoJY21kWzNdID0gMHgwMTsJCQkvLyAxIGJ5dGUgb2YgZGF0YSBmb2xsb3dpbmcg CgljbWRbNF0gPSAweDAzOwkJCS8vIEhDSSBSZXNldCBTdWJjb21tYW5kCgkJCQoJLy8gU2VuZCBp bml0aWFsaXphdGlvbiBjb21tYW5kCglpZiAod3JpdGUoZmQsIGNtZCwgNSkgIT0gNSkgewoJCXBl cnJvcigiIEZpcnN0IENhbid0IHdyaXRlIFNpbGljb24gV2F2ZSByZXNldCBjbWQuIik7CgkJcmV0 dXJuIC0xOwoJfQoKCW5hbm9zbGVlcCgmdG0sIE5VTEwpOwoKCS8vIFNpbGljb24gV2F2ZSBzZXQg YmF1ZCByYXRlIGNvbW1hbmQKCS8vIHNlZSBIQ0kgVmVuZG9yIFNwZWNpZmljIEludGVyZmFjZSBm cm9tIFNpbGljb24gV2F2ZQoJLy8gZmlyc3Qgc2VuZCBhICJwYXJhbSBhY2Nlc3Mgc2V0IiBjb21t YW5kIHRvIHNldCB0aGUKCS8vIGFwcHJvcHJpYXRlIGRhdGEgZmllbGRzIGluIFJBTS4gVGhlbiBz ZW5kIGEgIkhDSSBSZXNldAoJLy8gU3ViY29tbWFuZCIsIGUuZy4gInNvZnQgcmVzZXQiIHRvIG1h a2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgoKCWNtZFswXSA9IEhDSV9DT01NQU5EX1BLVDsJLy8g aXQncyBhIGNvbW1hbmQgcGFja2V0CgljbWRbMV0gPSAweDBCOwkJCS8vIE9DRiAweDBCCT0gcGFy YW0gYWNjZXNzIHNldAkKCWNtZFsyXSA9IDB4ZmM7CQkJLy8gT0dGIGJ4MTExMTExID0gdmVuZG9y IHNwZWNpZmljCgljbWRbM10gPSAweDA2OwkJCS8vIDYgYnl0ZXMgb2YgZGF0YSBmb2xsb3dpbmcK CWNtZFs0XSA9IDB4MDE7CQkJLy8gcGFyYW0gc3ViIGNvbW1hbmQKCWNtZFs1XSA9IDB4MTE7CQkJ Ly8gdGFnIDE3ID0gMHgxMSA9IEhDSSBUcmFuc3BvcnQgUGFyYW1zCgljbWRbNl0gPSAweDAzOwkJ CS8vIGxlbmd0aCBvZiB0aGUgcGFyYW1ldGVyIGZvbGxvd2luZwoJY21kWzddID0gMHgwMTsJCQkv LyBIQ0kgVHJhbnNwb3J0IGZsb3cgY29udHJvbCBlbmFibGUKCWNtZFs4XSA9IDB4MDE7CQkJLy8g SENJIFRyYW5zcG9ydCBUeXBlID0gVUFSVAoKCXN3aXRjaCAodS0+c3BlZWQpIHsKCWNhc2UgMTky MDA6CgkJY21kWzldID0gMHgwMzsKCQlicmVhazsKCWNhc2UgMzg0MDA6CgkJY21kWzldID0gMHgw MjsKCQlicmVhazsKCWNhc2UgNTc2MDA6CgkJY21kWzldID0gMHgwMTsKCQlicmVhazsKCWNhc2Ug MTE1MjAwOgoJCWNtZFs5XSA9IDB4MDA7CgkJYnJlYWs7CglkZWZhdWx0OgoJCXUtPnNwZWVkID0g MTE1MjAwOwoJCWNtZFs5XSA9IDB4MDA7CgkJYnJlYWs7Cgl9CgoJLyogU2VuZCBpbml0aWFsaXph dGlvbiBjb21tYW5kICovCglpZiAod3JpdGUoZmQsIGNtZCwgOSkgIT0gOSkgewoJCXBlcnJvcigi RmFpbGVkIHRvIHdyaXRlIGluaXQgY29tbWFuZCIpOwoJCXJldHVybiAtMTsKCX0KCgkvLyBXZSBz aG91bGQgd2FpdCBmb3IgYSAiR0VUIEV2ZW50IiB0byBjb25maXJtIHRoZSBzdWNjZXNzIG9mIAoJ Ly8gdGhlIGJhdWQgcmF0ZSBzZXR0aW5nLiBXYWl0IHNvbWUgdGltZSBiZWZvcmUgcmVhZGluZy4g QmV0dGVyOiAgCgkvLyByZWFkIHdpdGggdGltZW91dCwgcGFyc2UgZGF0YSAKCS8vIHVudGlsIGNv cnJlY3QgYW5zd2VyLCBlbHNlIGVycm9yIGhhbmRsaW5nIC4uLiB0b2RvIC4uLgoKCW5hbm9zbGVl cCgmdG0sIE5VTEwpOwoKCXIgPSByZWFkKGZkLCByc3AsIHNpemVvZihyc3ApKTsKCWlmIChyID4g MCkgewoJCS8vIGd1ZXNzIGl0J3Mgb2theSwgYnV0IHdlIHNob3VsZCBwYXJzZSB0aGUgcmVwbHku IEJ1dCBzaW5jZQoJCS8vIEkgZG9uJ3QgcmVhY3Qgb24gYW4gZXJyb3IgYW55d2F5IC4uLiB0b2Rv CgkJLy8gUmVzcG9uc2UgcGFja2V0IGZvcm1hdDoKCQkvLyAgMDQJRXZlbnQKCQkvLyAgRkYJVmVu ZG9yIHNwZWNpZmljCgkJLy8gIDA3CVBhcmFtZXRlciBsZW5ndGgKCQkvLyAgMEIJU3ViY29tbWFu ZAoJCS8vICAwMQlTZXRldmVudAoJCS8vICAxMQlUYWcgc3BlY2lmeWluZyBIQ0kgVHJhbnNwb3J0 IExheWVyIFBhcmFtZXRlcgoJCS8vICAwMwlsZW5ndGgKCQkvLyAgMDEJZmxvdyBvbgoJCS8vICAw MSAJSGNpIFRyYW5zcG9ydCB0eXBlID0gVWFydAoJCS8vICB4eAlCYXVkIHJhdGUgc2V0IChzZWUg YWJvdmUpCgkJcHJpbnRmKCJUaGUgbm8gb2YgYnl0ZXMgcmVhZCAlZCBcbiIscik7CgkKCQlmb3Io aT0wO2k8cjtpKyspCgkJCXByaW50ZigiVGhlIGJ5dGUgaXMgJXhcbiIscnNwW2ldKTsJCgoJfSBl bHNlIHsJCgkJLy8gdXBzLCBnb3QgZXJyb3IuCgkJcmV0dXJuIC0xOwoJfQoKCS8vIHdlIHByb2Jh Ymx5IGdvdCB0aGUgcmVwbHkuIE5vdyB3ZSBtdXN0IHNlbmQgdGhlICJzb2Z0IHJlc2V0IjoKCWNt ZFswXSA9IEhDSV9DT01NQU5EX1BLVDsJLy8gaXQncyBhIGNvbW1hbmQgcGFja2V0CgljbWRbMV0g PSAweDBCOwkJCS8vIE9DRiAweDBCCT0gcGFyYW0gYWNjZXNzIHNldAkKCWNtZFsyXSA9IDB4ZmM7 CQkJLy8gT0dGIGJ4MTExMTExID0gdmVuZG9yIHNwZWNpZmljCgljbWRbM10gPSAweDAxOwkJCS8v IDEgYnl0ZSBvZiBkYXRhIGZvbGxvd2luZyAKCWNtZFs0XSA9IDB4MDM7CQkJLy8gSENJIFJlc2V0 IFN1YmNvbW1hbmQKCQkJCgkvLyBTZW5kIGluaXRpYWxpemF0aW9uIGNvbW1hbmQKCWlmICh3cml0 ZShmZCwgY21kLCA1KSAhPSA1KSB7CgkJcGVycm9yKCJDYW4ndCB3cml0ZSBTaWxpY29uIFdhdmUg cmVzZXQgY21kLiIpOwoJCXJldHVybiAtMTsKCX0KCgluYW5vc2xlZXAoJnRtLCBOVUxMKTsKCQkJ CgkvLyBub3cgdGhlIHVhcnQgYmF1ZCByYXRlIG9uIHRoZSBzaWxpY29uIHdhdmUgbW9kdWxlIGlz IHNldCBhbmQgZWZmZWN0aXZlLgoJLy8gY2hhbmdlIG91ciBvd24gYmF1ZCByYXRlIGFzIHdlbGwu IFRoZW4gdGhlcmUgaXMgYSByZXNldCBldmVudCBjb21taW5nIGluCiAJLy8gb24gdGhlICpuZXcq IGJhdWQgcmF0ZS4gVGhpcyBpcyAqdW5kb2N1bWVudGVkKiEgVGhlIHBhY2tldCBsb29rcyBsaWtl IHRoaXM6CgkvLyAwNCBGRiAwMSAwQiAod2hpY2ggd291bGQgbWFrZSB0aGF0IGEgY29uZmlybWF0 aW9uIG9mIDB4MEIgPSAiUGFyYW0gCgkvLyBzdWJjb21tYW5kIGNsYXNzIi4gU286IGNoYW5nZSB0 byBuZXcgYmF1ZCByYXRlLCByZWFkIHdpdGggdGltZW91dCwgcGFyc2UKCS8vIGRhdGEsIGVycm9y IGhhbmRsaW5nLiBCVFc6IGFsbCBwYXJhbSBhY2Nlc3MgaW4gU2lsaWNvbiBXYXZlIGlzIGRvbmUg dGhpcyB3YXkuCgkvLyBNYXliZSB0aGlzIGNvZGUgd291bGQgYmVsb25nIGluIGEgc2VwZXJhdGUg ZmlsZSwgb3IgYXQgbGVhc3QgY29kZSByZXVzZS4uLgoKCXJldHVybiAwOwp9CgovKgogKiBTVCBN aWNyb2VsZWN0cm9uaWNzIHNwZWNpZmljIGluaXRpYWxpemF0aW9uCiAqIE1hcmNlbCBIb2x0bWFu biA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KICovCnN0YXRpYyBpbnQgc3QoaW50IGZkLCBzdHJ1Y3Qg dWFydF90ICp1LCBzdHJ1Y3QgdGVybWlvcyAqdGkpCnsKCXN0cnVjdCB0aW1lc3BlYyB0bSA9IHsw LCA1MDAwMH07CgljaGFyIGNtZFs1XTsKCgkvKiBTVCBNaWNyb2VsZWN0cm9uaWNzIHNldCBiYXVk IHJhdGUgY29tbWFuZCAqLwoJY21kWzBdID0gSENJX0NPTU1BTkRfUEtUOwoJY21kWzFdID0gMHg0 NjsJCQkvLyBPQ0YgPSBIY2lfQ21kX1NUX1NldF9VYXJ0X0JhdWRfUmF0ZQoJY21kWzJdID0gMHhm YzsJCQkvLyBPR0YgPSBWZW5kb3Igc3BlY2lmaWMKCWNtZFszXSA9IDB4MDE7CgoJc3dpdGNoICh1 LT5zcGVlZCkgewoJY2FzZSA5NjAwOgoJCWNtZFs0XSA9IDB4MDk7CgkJYnJlYWs7CgljYXNlIDE5 MjAwOgoJCWNtZFs0XSA9IDB4MGI7CgkJYnJlYWs7CgljYXNlIDM4NDAwOgoJCWNtZFs0XSA9IDB4 MGQ7CgkJYnJlYWs7CgljYXNlIDU3NjAwOgoJCWNtZFs0XSA9IDB4MGU7CgkJYnJlYWs7CgljYXNl IDExNTIwMDoKCQljbWRbNF0gPSAweDEwOwoJCWJyZWFrOwoJY2FzZSAyMzA0MDA6CgkJY21kWzRd ID0gMHgxMjsKCQlicmVhazsKCWNhc2UgNDYwODAwOgoJCWNtZFs0XSA9IDB4MTM7CgkJYnJlYWs7 CgljYXNlIDkyMTYwMDoKCQljbWRbNF0gPSAweDE0OwoJCWJyZWFrOwoJZGVmYXVsdDoKCQljbWRb NF0gPSAweDEwOwoJCXUtPnNwZWVkID0gMTE1MjAwOwoJCWJyZWFrOwoJfQoKCS8qIFNlbmQgaW5p dGlhbGl6YXRpb24gY29tbWFuZCAqLwoJaWYgKHdyaXRlKGZkLCBjbWQsIDUpICE9IDUpIHsKCQlw ZXJyb3IoIkZhaWxlZCB0byB3cml0ZSBpbml0IGNvbW1hbmQiKTsKCQlyZXR1cm4gLTE7Cgl9Cglu YW5vc2xlZXAoJnRtLCBOVUxMKTsKCXJldHVybiAwOwp9CgpzdHJ1Y3QgdWFydF90IHVhcnRbXSA9 IHsKCXsgImFueSIsICAgICAgMHgwMDAwLCAweDAwMDAsIEhDSV9VQVJUX0g0LCAgIDExNTIwMCwg MTE1MjAwLCBGTE9XX0NUTCwgTlVMTCB9LAoJeyAiZXJpY3Nzb24iLCAweDAwMDAsIDB4MDAwMCwg SENJX1VBUlRfSDQsICAgNTc2MDAsICAxMTUyMDAsIEZMT1dfQ1RMLCBlcmljc3NvbiB9LAoJeyAi ZGlnaSIsICAgICAweDAwMDAsIDB4MDAwMCwgSENJX1VBUlRfSDQsICAgOTYwMCwgICAxMTUyMDAs IEZMT1dfQ1RMLCBkaWdpIH0sCgl7ICJ0ZXhhcyIsICAgIDB4MDAwMCwgMHgwMDAwLCBIQ0lfVUFS VF9INCwgICAxMTUyMDAsIDExNTIwMCwgRkxPV19DVEwsIHRleGFzfSwKCgl7ICJiY3NwIiwgICAg IDB4MDAwMCwgMHgwMDAwLCBIQ0lfVUFSVF9CQ1NQLCAxMTUyMDAsIDExNTIwMCwgMCwgICAgICAg IGJjc3AgfSwKCgkvKiBYaXJjb20gUENNQ0lBIGNhcmRzOiBDcmVkaXQgQ2FyZCBBZGFwdGVyIGFu ZCBSZWFsIFBvcnQgQWRhcHRlciAqLwoJeyAieGlyY29tIiwgICAweDAxMDUsIDB4MDgwYSwgSENJ X1VBUlRfSDQsICAgMTE1MjAwLCAxMTUyMDAsIEZMT1dfQ1RMLCBOVUxMIH0sCgoJLyogQ1NSIENh c2lyYSBzZXJpYWwgYWRhcHRlciBvciBCcmFpbkJveGVzIHNlcmlhbCBkb25nbGUgKEJMNjQyKSAq LwoJeyAiY3NyIiwgICAgICAweDAwMDAsIDB4MDAwMCwgSENJX1VBUlRfSDQsICAgMTE1MjAwLCAx MTUyMDAsIEZMT1dfQ1RMLCBjc3IgfSwKCgkvKiBCcmFpbkJveGVzIFBDTUNJQSBjYXJkIChCTDYy MCkgKi8KCXsgImJib3hlcyIsICAgMHgwMTYwLCAweDAwMDIsIEhDSV9VQVJUX0g0LCAgIDExNTIw MCwgNDYwODAwLCBGTE9XX0NUTCwgY3NyIH0sCgoJLyogU2lsaWNvbiBXYXZlIGtpdHMgKi8KCXsg InN3YXZlIiwgICAgMHgwMDAwLCAweDAwMDAsIEhDSV9VQVJUX0g0LCAgIDExNTIwMCwgMTE1MjAw LCBGTE9XX0NUTCwgc3dhdmUgfSwKCgkvKiBTaWxpY29uIHdhdmUgSDo1IDMgV0lSRSBVQVJUIC0g R0RBIFRlY2hub2xvZ2llcyBMdGQgQ2hlbm5haSBJTkRJQSovCSAKCXsgImdkYSIsIDB4MDAwMCwg MHgwMDAwLCBIQ0lfVUFSVF9CQ1NQLCAxMTUyMDAsIDExNTIwMCwgMCxzd2F2ZV9oNX0sCQoJCQoJ LyogU1QgTWljcm9lbGVjdHJvbmljcyBtaW5pa2l0cyBiYXNlZCBvbiBTVExDMjQxMC9TVExDMjQx NSAqLwoJeyAic3QiLCAgICAgICAweDAwMDAsIDB4MDAwMCwgSENJX1VBUlRfSDQsICAgIDU3NjAw LCAxMTUyMDAsIEZMT1dfQ1RMLCBzdCB9LAoKCS8qIFNwaGlueCBFbGVjdHJvbmljcyBQSUNPIENh cmQgKi8KCXsgInBpY29jYXJkIiwgMHgwMjVlLCAweDEwMDAsIEhDSV9VQVJUX0g0LCAgIDExNTIw MCwgMTE1MjAwLCBGTE9XX0NUTCwgTlVMTCB9LAoKCS8qIEludmVudGVsIEJsdWVCaXJkIE1vZHVs ZSAqLwoJeyAiaW52ZW50ZWwiLCAweDAwMDAsIDB4MDAwMCwgSENJX1VBUlRfSDQsICAgMTE1MjAw LCAxMTUyMDAsIEZMT1dfQ1RMLCBOVUxMIH0sCgoJLyogQ09NIE9uZSBQbGF0aW5pdW0gQmx1ZXRv b3RoIFBDIENhcmQgKi8KCXsgImNvbW9uZSIsICAgMHhmZmZmLCAweDAxMDEsIEhDSV9VQVJUX0JD U1AsIDExNTIwMCwgMTE1MjAwLCAwLCAgICAgICAgYmNzcCB9LAoKCS8qIFRESyBCbHVldG9vdGgg UEMgQ2FyZCBhbmQgSUJNIEJsdWV0b290aCBQQyBDYXJkIElJICovCgl7ICJ0ZGsiLCAgICAgIDB4 MDEwNSwgMHg0MjU0LCBIQ0lfVUFSVF9CQ1NQLCAxMTUyMDAsIDExNTIwMCwgMCwgICAgICAgIGJj c3AgfSwKCgkvKiBTb2NrZXQgQmx1ZXRvb3RoIENGIENhcmQgKFJldiBHKSAqLwoJeyAic29ja2V0 IiwgICAweDAxMDQsIDB4MDA5NiwgSENJX1VBUlRfQkNTUCwgMjMwNDAwLCAyMzA0MDAsIDAsICAg ICAgICBiY3NwIH0sCgoJLyogM0NvbSBCbHVldG9vdGggQ2FyZCAoVmVyc2lvbiAzLjApICovCgl7 ICIzY29tIiwgICAgIDB4MDEwMSwgMHgwMDQxLCBIQ0lfVUFSVF9INCwgICAxMTUyMDAsIDExNTIw MCwgRkxPV19DVEwsIGNzciAgfSwKCgkvKiBBbWJpQ29tIEJUMjAwMEMgQmx1ZXRvb3RoIFBDL0NG IENhcmQgKi8KCXsgImJ0MjAwMGMiLCAgMHgwMjJkLCAweDIwMDAsIEhDSV9VQVJUX0g0LCAgICA1 NzYwMCwgNDYwODAwLCBGTE9XX0NUTCwgY3NyICB9LAoKCS8qIFpvb20gQmx1ZXRvb3RoIFBDTUNJ QSBDYXJkICovCgl7ICJ6b29tIiwgICAgIDB4MDI3OSwgMHg5NTBiLCBIQ0lfVUFSVF9CQ1NQLCAx MTUyMDAsIDExNTIwMCwgMCwgICAgICAgIGJjc3AgIH0sCgoJeyBOVUxMLCAwIH0KfTsKCnN0cnVj dCB1YXJ0X3QgKiBnZXRfYnlfaWQoaW50IG1faWQsIGludCBwX2lkKQp7CglpbnQgaTsKCWZvciAo aSA9IDA7IHVhcnRbaV0udHlwZTsgaSsrKSB7CgkJaWYgKHVhcnRbaV0ubV9pZCA9PSBtX2lkICYm IHVhcnRbaV0ucF9pZCA9PSBwX2lkKQoJCQlyZXR1cm4gJnVhcnRbaV07Cgl9CglyZXR1cm4gTlVM TDsKfQoKc3RydWN0IHVhcnRfdCAqIGdldF9ieV90eXBlKGNoYXIgKnR5cGUpCnsKCWludCBpOwoJ Zm9yIChpID0gMDsgdWFydFtpXS50eXBlOyBpKyspIHsKCQlpZiAoIXN0cmNtcCh1YXJ0W2ldLnR5 cGUsIHR5cGUpKQoJCQlyZXR1cm4gJnVhcnRbaV07Cgl9CglyZXR1cm4gTlVMTDsKfQoKLyogSW5p dGlhbGl6ZSBVQVJUIGRyaXZlciAqLwppbnQgaW5pdF91YXJ0KGNoYXIgKmRldiwgc3RydWN0IHVh cnRfdCAqdSwgaW50IHNlbmRfYnJlYWspCnsKCXN0cnVjdCB0ZXJtaW9zIHRpOwoJaW50ICBmZCwg aTsKCglmZCA9IG9wZW4oZGV2LCBPX1JEV1IgfCBPX05PQ1RUWSk7CglpZiAoZmQgPCAwKSB7CgkJ cGVycm9yKCJDYW4ndCBvcGVuIHNlcmlhbCBwb3J0Iik7CgkJcmV0dXJuIC0xOwoJfQoKCXRjZmx1 c2goZmQsIFRDSU9GTFVTSCk7CgoJaWYgKHRjZ2V0YXR0cihmZCwgJnRpKSA8IDApIHsKCQlwZXJy b3IoIkNhbid0IGdldCBwb3J0IHNldHRpbmdzIik7CgkJcmV0dXJuIC0xOwoJfQoKCWNmbWFrZXJh dygmdGkpOwoKCXRpLmNfY2ZsYWcgfD0gQ0xPQ0FMOwoJaWYgKHUtPmZsYWdzICYgRkxPV19DVEwp CgkJdGkuY19jZmxhZyB8PSBDUlRTQ1RTOwoJZWxzZQoJCXRpLmNfY2ZsYWcgJj0gfkNSVFNDVFM7 CgoJaWYgKHRjc2V0YXR0cihmZCwgVENTQU5PVywgJnRpKSA8IDApIHsKCQlwZXJyb3IoIkNhbid0 IHNldCBwb3J0IHNldHRpbmdzIik7CgkJcmV0dXJuIC0xOwoJfQoKCS8qIFNldCBpbml0aWFsIGJh dWRyYXRlICovCglpZiAoc2V0X3NwZWVkKGZkLCAmdGksIHUtPmluaXRfc3BlZWQpIDwgMCkgewoJ CXBlcnJvcigiQ2FuJ3Qgc2V0IGluaXRpYWwgYmF1ZCByYXRlIik7CgkJcmV0dXJuIC0xOwoJfQoK CXRjZmx1c2goZmQsIFRDSU9GTFVTSCk7CgoJaWYgKHNlbmRfYnJlYWspIHsKCQl0Y3NlbmRicmVh ayhmZCwgMCk7CgkJdXNsZWVwKDUwMDAwMCk7Cgl9CgoJaWYgKHUtPmluaXQgJiYgdS0+aW5pdChm ZCwgdSwgJnRpKSA8IDApCgkJcmV0dXJuIC0xOwoKCXRjZmx1c2goZmQsIFRDSU9GTFVTSCk7CgoJ LyogU2V0IGFjdHVhbCBiYXVkcmF0ZSAqLwoJaWYgKHNldF9zcGVlZChmZCwgJnRpLCB1LT5zcGVl ZCkgPCAwKSB7CgkJcGVycm9yKCJDYW4ndCBzZXQgYmF1ZCByYXRlIik7CgkJcmV0dXJuIC0xOwoJ fQoKCS8qIFNldCBUVFkgdG8gTl9IQ0kgbGluZSBkaXNjaXBsaW5lICovCglpID0gTl9IQ0k7Cglp ZiAoaW9jdGwoZmQsIFRJT0NTRVRELCAmaSkgPCAwKSB7CgkJcGVycm9yKCJDYW4ndCBzZXQgbGlu ZSBkaXNjaXBsaW5lIik7CgkJcmV0dXJuIC0xOwoJfQoKCWlmIChpb2N0bChmZCwgSENJVUFSVFNF VFBST1RPLCB1LT5wcm90bykgPCAwKSB7CgkJcGVycm9yKCJDYW4ndCBzZXQgZGV2aWNlIik7CgkJ cmV0dXJuIC0xOwoJfQoKCXJldHVybiBmZDsKfQoKc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKewoJ cHJpbnRmKCJoY2lhdHRhY2ggLSBIQ0kgVUFSVCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gdXRpbGl0 eVxuIik7CglwcmludGYoIlVzYWdlOlxuIik7CglwcmludGYoIlx0aGNpYXR0YWNoIFstbl0gWy1w XSBbLWJdIFstdCB0aW1lb3V0XSBbLXMgaW5pdGlhbF9zcGVlZF0gPHR0eT4gPHR5cGUgfCBpZD4g W3NwZWVkXSBbZmxvd3xub2Zsb3ddXG4iKTsKCXByaW50ZigiXHRoY2lhdHRhY2ggLWxcbiIpOwp9 CgpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpvcHRhcmc7 CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglzdHJ1Y3QgdWFydF90ICp1ID0g TlVMTDsKCWludCBkZXRhY2gsIHByaW50cGlkLCBvcHQsIGksIG47CglpbnQgdG8gPSA1OyAKCWlu dCBpbml0X3NwZWVkID0gMDsKCWludCBzZW5kX2JyZWFrID0gMDsKCXBpZF90IHBpZDsKCXN0cnVj dCBzaWdhY3Rpb24gc2E7CgljaGFyIGRldlsyMF07CgljaGFyICpwdHI7CgoJZGV0YWNoID0gMTsK CXByaW50cGlkID0gMDsKCgl3aGlsZSAoKG9wdD1nZXRvcHQoYXJnYywgYXJndiwgImJucHQ6czps IikpICE9IEVPRikgewoJCXN3aXRjaChvcHQpIHsKCQljYXNlICdiJzoKCQkJc2VuZF9icmVhayA9 IDE7CgkJCWJyZWFrOwoKCQljYXNlICduJzoKCQkJZGV0YWNoID0gMDsKCQkJYnJlYWs7CgoJCWNh c2UgJ3AnOgoJCQlwcmludHBpZCA9IDE7CgkJCWJyZWFrOwoKCQljYXNlICd0JzoKCQkJdG8gPSBh dG9pKG9wdGFyZyk7CgkJCWJyZWFrOwoKCQljYXNlICdzJzoKCQkJaW5pdF9zcGVlZCA9IGF0b2ko b3B0YXJnKTsKCQkJYnJlYWs7CgoJCWNhc2UgJ2wnOgoJCQlmb3IgKGkgPSAwOyB1YXJ0W2ldLnR5 cGU7IGkrKykgewoJCQkJcHJpbnRmKCIlLTEwczB4JTA0eCwweCUwNHhcbiIsIHVhcnRbaV0udHlw ZSwKCQkJCQkJCXVhcnRbaV0ubV9pZCwgdWFydFtpXS5wX2lkKTsKCQkJfQoJCQlleGl0KDApOwoK CQlkZWZhdWx0OgoJCQl1c2FnZSgpOwoJCQlleGl0KDEpOwoJCX0KCX0KCgluID0gYXJnYyAtIG9w dGluZDsKCWlmIChuIDwgMikgewoJCXVzYWdlKCk7CgkJZXhpdCgxKTsKCX0KCglmb3IgKG4gPSAw OyBvcHRpbmQgPCBhcmdjOyBuKyssIG9wdGluZCsrKSB7CgkJY2hhciAqb3B0OwoJCgkJb3B0ID0g YXJndltvcHRpbmRdOwoJCQoJCXN3aXRjaChuKSB7CgkJY2FzZSAwOgoJCQlkZXZbMF0gPSAwOwoJ CQlpZiAoIXN0cmNocihvcHQsICcvJykpCgkJCQlzdHJjcHkoZGV2LCAiL2Rldi8iKTsKCQkJc3Ry Y2F0KGRldiwgb3B0KTsKCQkJYnJlYWs7CgoJCWNhc2UgMToKCQkJaWYgKHN0cmNocihhcmd2W29w dGluZF0sICcsJykpIHsKCQkJCWludCBtX2lkLCBwX2lkOwoJCQkJc3NjYW5mKGFyZ3Zbb3B0aW5k XSwgIiV4LCV4IiwgJm1faWQsICZwX2lkKTsKCQkJCXUgPSBnZXRfYnlfaWQobV9pZCwgcF9pZCk7 CgkJCX0gZWxzZSB7CgkJCQl1ID0gZ2V0X2J5X3R5cGUob3B0KTsKCQkJfQoKCQkJaWYgKCF1KSB7 CgkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGV2aWNlIHR5cGUgb3IgaWRcbiIpOwoJCQkJ ZXhpdCgxKTsKCQkJfQoJCQkKCQkJYnJlYWs7CgoJCWNhc2UgMjoKCQkJdS0+c3BlZWQgPSBhdG9p KGFyZ3Zbb3B0aW5kXSk7CgkJCWJyZWFrOwoKCQljYXNlIDM6CgkJCWlmICghc3RyY21wKCJmbG93 IiwgYXJndltvcHRpbmRdKSkKCQkJCXUtPmZsYWdzIHw9ICBGTE9XX0NUTDsKCQkJZWxzZQoJCQkJ dS0+ZmxhZ3MgJj0gfkZMT1dfQ1RMOwoJCQlicmVhazsKCQl9Cgl9CgoJaWYgKCF1KSB7CgkJZnBy aW50ZihzdGRlcnIsICJVbmtub3duIGRldmljZSB0eXBlIG9yIGlkXG4iKTsKCQlleGl0KDEpOwoJ fQoKCS8qIElmIHVzZXIgc3BlY2lmaWVkIGEgaW5pdGlhbCBzcGVlZCwgdXNlIHRoYXQgaW5zdGVh ZCBvZgoJICAgdGhlIGhhcmR3YXJlJ3MgZGVmYXVsdCAqLwoJaWYgKGluaXRfc3BlZWQpCgkJdS0+ aW5pdF9zcGVlZCA9IGluaXRfc3BlZWQ7CgoJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7Cglz YS5zYV9mbGFncyA9IFNBX05PQ0xEU1RPUDsKCXNhLnNhX2hhbmRsZXIgPSBzaWdfYWxhcm07Cglz aWdhY3Rpb24oU0lHQUxSTSwgJnNhLCBOVUxMKTsKCgkvKiA1IHNlY29uZHMgc2hvdWxkIGJlIGVu b3VnaCBmb3IgaW5pdGlhbGl6YXRpb24gKi8KCWFsYXJtKHRvKTsKCQoJbiA9IGluaXRfdWFydChk ZXYsIHUsIHNlbmRfYnJlYWspOwoJaWYgKG4gPCAwKSB7CgkJcGVycm9yKCJDYW4ndCBpbml0aWFs aXplIGRldmljZSIpOyAKCQlleGl0KDEpOwoJfQoKCWFsYXJtKDApOwoKCWlmIChkZXRhY2gpIHsK CQlpZiAoKHBpZCA9IGZvcmsoKSkpIHsKCQkJaWYgKHByaW50cGlkKQoJCQkJcHJpbnRmKCIlZFxu IiwgcGlkKTsKCQkJcmV0dXJuIDA7CgkJfQoJCWZvciAoaT0wOyBpPDIwOyBpKyspCgkJCWlmIChp ICE9IG4pIGNsb3NlKGkpOwoJfQoKCXdoaWxlICgxKSBzbGVlcCg5OTk5OTk5OTkpOwoJcmV0dXJu IDA7Cn0K ------=_Part_108_18503818.1120641631152 Content-Type: application/octet-stream; name="hci_h5.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hci_h5.h" LyogCiAgIEJsdWVDb3JlIFNlcmlhbCBQcm90b2NvbCAoQkNTUCkgZm9yIExpbnV4IEJsdWV0b290 aCBzdGFjayAoQmx1ZVopLgogICBDb3B5cmlnaHQgMjAwMiBieSBGYWJyaXppbyBHZW5uYXJpIDxm YWJyaXppby5nZW5uYXJpQHBoaWxpcHMuY29tPgoKICAgQmFzZWQgb24KICAgICAgIGhjaV9oNC5j ICBieSBNYXhpbSBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29tbS5jb20+CiAgICAgICBBQkNTUCAg ICAgYnkgQ2FybCBPcnNib3JuIDxjam9AY3NyLmNvbT4KCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwoKICAgVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MKICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgog ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMp IEJFIExJQUJMRSBGT1IgQU5ZCiAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAogICBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCiAg IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s IEFSSVNJTkcgT1VUIE9GIAogICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgoKICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJ QUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKICAgQ09QWVJJR0hUUywg VFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAogICBT T0ZUV0FSRSBJUyBESVNDTEFJTUVELgoqLwoKLyogCiAqICRJZDogaGNpX2Jjc3AuaCx2IDEuMiAy MDAyLzA5LzI2IDA1OjA1OjE0IG1heGsgRXhwICQKICovCgojaWZuZGVmIF9fSENJX0JDU1BfSF9f CiNkZWZpbmUgX19IQ0lfQkNTUF9IX18KCiNkZWZpbmUgQkNTUF9UWFdJTlNJWkUgIDQKCiNkZWZp bmUgQkNTUF9BQ0tfUEtUICAgIDB4MDUKI2RlZmluZSBCQ1NQX0xFX1BLVCAgICAgMHgwNgoKc3Ry dWN0IGJjc3Bfc3RydWN0IHsKCXN0cnVjdCBza19idWZmX2hlYWQgdW5hY2s7CS8qIFVuYWNrJ2Vk IHBhY2tldHMgcXVldWUgKi8KCXN0cnVjdCBza19idWZmX2hlYWQgcmVsOwkvKiBSZWxpYWJsZSBw YWNrZXRzIHF1ZXVlICovCglzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHVucmVsOwkvKiBVbnJlbGlhYmxl IHBhY2tldHMgcXVldWUgKi8KCgl1bnNpZ25lZCBsb25nIHJ4X2NvdW50OwoJc3RydWN0ICBza19i dWZmICpyeF9za2I7Cgl1OCAgICAgIHJ4c2VxX3R4YWNrOwkJLyogcnhzZXEgPT0gdHhhY2suICov Cgl1OCAgICAgIHJ4YWNrOwkJCS8qIExhc3QgcGFja2V0IHNlbnQgYnkgdXMgdGhhdCB0aGUgcGVl ciBhY2snZWQgKi8KCXN0cnVjdCAgdGltZXJfbGlzdCB0YmNzcDsKCQoJZW51bSB7CgkJQkNTUF9X NF9QS1RfREVMSU1JVEVSLAoJCUJDU1BfVzRfUEtUX1NUQVJULAoJCUJDU1BfVzRfQkNTUF9IRFIs CgkJQkNTUF9XNF9EQVRBLAoJCUJDU1BfVzRfQ1JDCgl9IHJ4X3N0YXRlOwoKCWVudW0gewoJCUJD U1BfRVNDU1RBVEVfTk9FU0MsCgkJQkNTUF9FU0NTVEFURV9FU0MKCX0gcnhfZXNjX3N0YXRlOwoK CXUxNiAgICAgbWVzc2FnZV9jcmM7Cgl1OCAgICAgIHR4YWNrX3JlcTsJCS8qIERvIHdlIG5lZWQg dG8gc2VuZCBhY2sncyB0byB0aGUgcGVlcj8gKi8KCgkvKiBSZWxpYWJsZSBwYWNrZXQgc2VxdWVu Y2UgbnVtYmVyIC0gdXNlZCB0byBhc3NpZ24gc2VxIHRvIGVhY2ggcmVsIHBrdC4gKi8KCXU4ICAg ICAgbXNncV90eHNlcTsKfTsKCiNlbmRpZgkvKiBfX0hDSV9CQ1NQX0hfXyAqLwo= ------=_Part_108_18503818.1120641631152-- ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ Bluez-users mailing list Bluez-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-users