From owner-freebsd-bluetooth@FreeBSD.ORG Thu Apr 9 22:37:01 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C03BF1065670 for ; Thu, 9 Apr 2009 22:37:01 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from mail-gx0-f176.google.com (mail-gx0-f176.google.com [209.85.217.176]) by mx1.freebsd.org (Postfix) with ESMTP id 612918FC13 for ; Thu, 9 Apr 2009 22:37:01 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by gxk24 with SMTP id 24so2419126gxk.19 for ; Thu, 09 Apr 2009 15:37:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=fzHYgC9wvP5OPNgODx1BGs3YEjdllX3Z6lPpelflkBM=; b=n6Z7vInPDdxgFfrMGIl02Okj/VIbU5HabU1js73Z6BHhxuI2UcfQpHfpnlmVSs5BKH lPUo/DKgyMWKBRmEbFvgNuGGsXy5FJR92N/gpBJ4nTCMC6bkmQy2l7q647GSmJ5qMKht udiXFOsVrKidLvNquFDsx5QYU9aZyhpneahMA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=XzK7TA3i4egU0h/fi7+zYu4MIqHK6LJiSDDJWV39xGPKwG3hzXjYTNBrJUHVz9I+sk 5Gu+7c3fnktm8LQm8IfAzsxRmhm9YaMpuHBVpfaW8tjf5SBZKA84JS3+ih36YaktvlSC 5j8B/2Z6+YjknpPMT4Df8BqPF1m0ItEyMYhOE= MIME-Version: 1.0 Received: by 10.90.31.8 with SMTP id e8mr3570162age.102.1239316620542; Thu, 09 Apr 2009 15:37:00 -0700 (PDT) In-Reply-To: <49DE6D42.6000004@incunabulum.net> References: <49D92E26.2030508@incunabulum.net> <49DD40E2.5030403@incunabulum.net> <1239264003.862926.638.nullmailer@galant.ukfsn.org> <49DE4E2F.2000805@incunabulum.net> <49DE6D42.6000004@incunabulum.net> Date: Thu, 9 Apr 2009 14:37:00 -0800 Message-ID: From: Maksim Yevmenkin To: Bruce Simpson Content-Type: multipart/mixed; boundary=001636164aa7ee85e0046726e214 Cc: "freebsd-bluetooth@freebsd.org" , "alexei@raylab.com" Subject: Re: libhci update X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Apr 2009 22:37:02 -0000 --001636164aa7ee85e0046726e214 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Thu, Apr 9, 2009 at 1:48 PM, Bruce Simpson wrote: [...] >>> I would hope to do the same for libsdp. >> >> well, here is where things might get a bit tricky because of sdpd(8). >> depending on what you want to do, you might need to bring both libsdp >> and sdpd (or whatever it is called these days) from bluez. > > Yup, that's pretty scary because there are significant differences. > > If you look at all the APIs, they all end up building on-the-wire-records to > advertise Bluetooth > services via SDP -- be that L2CAP PSM's, RFCOMM channels, or anything else. oh, no :) please do not open this can of worms :) Iain knows its a very touchy subject with me :) i dislike *intensely* the fact that sdp records have to be built in on-the-wire format. i just dont get why any application has to know about uuid's, sequences and other low level sdp stuff just to register the damn service. that is why i went an extreme route (a bit too extreme perhaps :) and introduced "pre-cooked" sdp records that are constructed on the fly. application only transfers minimum information required to register the service. the downside, of course, is that its not very flexible. in fact, its pretty damn rigid. which means that if you want to introduce new profile, you have to change sdp parts as well. Iain and i beat this horse to death, imo. we think there is really no good way around this and we can only improve api to be more user friendly and require less typing, but the records, unfortunately, would have to be in on-the-wire format (or something pretty damn close to it). > it is irksome that the SDP APIs between OSes differ so radically. > > So I'd make a radical suggestion here: can we change the existing BSD-space > applications > and daemons to use a different name e.g. libbtsdp for the base system? yes, we can. i was actually thinking to merge add the sdp stuff into libbluetooth. and while i'm at it, move bluetooth.h and sdp.h into include/bluetooth/ where it belongs. i just want to get hci stuff out the way first. > That would be a big help for BlueZ compatibility... yes, it sucks, but it's > a hackish fix to the > namespace collision between these two radically different sets of libraries. if we fix our sdp first to be more like bluez (i.e. use on-the-wire format) then we can add compat bluez sdp library that would simply translate bluez call to bsd calls. same route as with libhci. [....] >> i will try to clean up my patches and send them out one more time. i'd >> like to get Iain's comments before putting them into the base. mfc can >> be done quickly as well (if needed). > > OK. That would be great. I can look at such diffs too if need be. :-) > I don't believe an MFC will be too difficult as long as we're in the 7.2 > slush. thanks! i have attached the latest diff. its pretty much the same as previous one, except i added documentation. > [ioctls] >> >> let me know what is missing and i will add it :) > > What's the easiest way to get the unit number? > ... hci nodes do not really have unit numbers. they have names. hci nodes are named as "device+unit+hci". device + unit comes from driver for a particular device. in 99% of the cases it will be "ubtX", i.e. usb dongle, but we also support h4 devices (currently broken due to new tty) and btccc - 3com pccard. so just enumerate all the radios (i.e. list all the hci nodes - there is an ioctl for that) and unit will be the number before "hci" part of the name. however, that will only work if if have devices of the same type in the system (i.e. all the radios are bluetooth dongles). otherwise, if, say, you have 3com pccard and bluetooth dongle, then you will have btccc0hci and ubt0hci nodes both having 0 unit number. >> that is the thing. bd_addr is the only "unique" (it can't be easily >> changed, but it still can be done) thing about bluetooth device. but >> in order to get it, you need to address the device somehow. devname is >> better, but still does not solve the problem as you pointed out it can >> change. > > It would be nice to have a 'device name' registry or be able to > renumber/rename the Bluetooth > dongles in a manner similar to that of what folk end up doing for FreeBSD > using ifconfig(8). i'm not quite follow why is that needed? [....] >> why do you care so much about devid? i assume whatever it is you are >> building, it will have multiple radios, right? are you planning to >> setup different radios in different way? > > Because... (bad English ;o)) > yes we do want to use multiple radios -- inquiry is an expensive operation > -- and also, > BlueCove/JSR-82, PyBlueZ and the other high level language stuff currently > wants to use > dev_id as the unique endpoint identifier. :-( > > They do provide APIs to lookup dev_id from the MAC address, but if that is > used as-is, > any port would still have to maintain the kludge. It is irritating, but that > is what has unfolded. just a stupid idea - "hash" devname into devid? where "hash" does not necessarily means use some real hash function :) could be partitioning function (as in my previously posted code). how wide is devid, you mentioned that it could be as narrow as unit16 and as wide as int? is that correct? thanks, max --001636164aa7ee85e0046726e214 Content-Type: text/plain; charset=US-ASCII; name="bluetooth.hci.diff.txt" Content-Disposition: attachment; filename="bluetooth.hci.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ftc01ckq0 SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTA4NzApCisrKyBo Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDQyMSBAQAogICogJEZyZWVCU0QkCiAg Ki8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgogI2luY2x1 ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj aW5jbHVkZSA8dW5pc3RkLmg+CiAKK3N0YXRpYyBpbnQgICAgYnRfZGV2YW55X2NiKGludCBzLCBz dHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQgKnhkZXZuYW1lKTsKIHN0YXRpYyBjaGFy ICogYnRfZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQg bm5sZW4pOwogCiBpbnQKK2J0X2Rldm9wZW4oY2hhciBjb25zdCAqZGV2bmFtZSkKK3sKKwlzdHJ1 Y3Qgc29ja2FkZHJfaGNpCWhhOworCWJkYWRkcl90CQliYTsKKwlpbnQJCQlzOworCisJaWYgKGRl dm5hbWUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQor CisJbWVtc2V0KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7 CisJaGEuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRldm5hbWUs ICZiYSkpIHsKKwkJaWYgKCFidF9kZXZuYW1lKGhhLmhjaV9ub2RlLCAmYmEpKQorCQkJcmV0dXJu ICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkZXZuYW1lLCBoYS5oY2lfbm9kZSwKKwkJ CQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgeworCQllcnJubyA9IEVOWElPOworCQly ZXR1cm4gKC0xKTsKKwl9CisKKwlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJM VUVUT09USF9QUk9UT19IQ0kpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAo YmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgc2l6ZW9mKGhhKSkgPCAwIHx8CisJICAg IGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCkgewor CQljbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChzKTsKK30KKworaW50 CitidF9kZXZjbG9zZShpbnQgcykKK3sKKwlyZXR1cm4gKGNsb3NlKHMpKTsKK30KKworaW50Citi dF9kZXZzZW5kKGludCBzLCB1aW50MTZfdCBvZ2YsIHVpbnQxNl90IG9jZiwgaW50IHBsZW4sIHZv aWQgKnBhcmFtKQoreworCW5nX2hjaV9jbWRfcGt0X3QJaDsKKwlzdHJ1Y3QgaW92ZWMJCWl2WzJd OworCWludAkJCWl2bjsKKworCWlmIChwbGVuIDwgMCB8fCAocGxlbiA+IDAgJiYgcGFyYW0gPT0g TlVMTCkpIHsgCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpdlsw XS5pb3ZfYmFzZSA9ICZoOworCWl2WzBdLmlvdl9sZW4gPSBzaXplb2YoaCk7CisJaXZuID0gMTsK KworCWgudHlwZSA9IE5HX0hDSV9DTURfUEtUOworCWgub3Bjb2RlID0gaHRvbGUxNihOR19IQ0lf T1BDT0RFKG9nZiwgb2NmKSk7CisJaWYgKHBsZW4gPiAwKSB7CisJCWgubGVuZ3RoID0gcGxlbjsK KworCQlpdlsxXS5pb3ZfYmFzZSA9IHBhcmFtOworCQlpdlsxXS5pb3ZfbGVuID0gcGxlbjsKKwkJ aXZuID0gMjsKKwl9IGVsc2UKKwkJaC5sZW5ndGggPSAwOworCisJd2hpbGUgKHdyaXRldihzLCBp diwgaXZuKSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikK KwkJCWNvbnRpbnVlOworCisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisK K2ludAorYnRfZGV2cmVjdihpbnQgcywgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSwgdGltZV90IHRv KQoreworCWZkX3NldAkJcmZkOworCXN0cnVjdCB0aW1ldmFsCXR2OworCWludAkJbjsKKworCWlm IChidWYgPT0gTlVMTCB8fCBzaXplIDw9IDAgfHwgdG8gPCAwKSB7CisJCWVycm5vID0gRUlOVkFM OworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlGRF9aRVJPKCZyZmQpOworCUZEX1NFVChzLCAmcmZk KTsKKworCXR2LnR2X3NlYyA9IHRvOworCXR2LnR2X3VzZWMgPSAwOworCisJd2hpbGUgKChuID0g c2VsZWN0KHMgKyAxLCAmcmZkLCBOVUxMLCBOVUxMLCAmdHYpKSA8IDApIHsKKwkJaWYgKGVycm5v ID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiAo LTEpOworCX0KKworCWlmIChuID09IDApIHsKKwkJZXJybm8gPSBFVElNRURPVVQ7CisJCXJldHVy biAoLTEpOworCX0KKworCWFzc2VydChGRF9JU1NFVChzLCAmcmZkKSk7CisKKwl3aGlsZSAoKG4g PSByZWFkKHMsIGJ1Ziwgc2l6ZSkpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVy cm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0 dXJuIChuKTsKK30KKworaW50CitidF9kZXZyZXEoaW50IHMsIHN0cnVjdCBidF9kZXZyZXEgKnIs IHRpbWVfdCB0bykKK3sKKwl1aW50OF90CQkJCWJ1ZlszMjBdOyAvKiBtb3JlIHRoYW4gZW5vdWdo ICovCisJbmdfaGNpX2V2ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZlbnRfcGt0X3QgKikgYnVm OworCW5nX2hjaV9jb21tYW5kX2NvbXBsX2VwCQkqY2MgPSAobmdfaGNpX2NvbW1hbmRfY29tcGxf ZXAgKikoZSsxKTsKKwluZ19oY2lfY29tbWFuZF9zdGF0dXNfZXAJKmNzID0gKG5nX2hjaV9jb21t YW5kX3N0YXR1c19lcCopKGUrMSk7CisJdWludDE2X3QJCQlvcGNvZGU7CisJdGltZV90CQkJCXRf ZW5kOworCWludAkJCQluOworCisJaWYgKHMgPCAwIHx8IHIgPT0gTlVMTCB8fCB0byA8IDApIHsK KwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChyLT5ybGVuIDwg MCB8fCAoci0+cmxlbiA+IDAgJiYgci0+cnBhcmFtID09IE5VTEwpKSB7CisJCWVycm5vID0gRUlO VkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwluID0gYnRfZGV2c2VuZChzLCByLT5vZ2YsIHIt Pm9jZiwgci0+Y2xlbiwgci0+Y3BhcmFtKTsKKwlpZiAobiA8IDApCisJCXJldHVybiAoLTEpOwor CisJb3Bjb2RlID0gaHRvbGUxNihOR19IQ0lfT1BDT0RFKHItPm9nZiwgci0+b2NmKSk7CisKKwl0 X2VuZCA9IHRpbWUoTlVMTCkgKyB0bzsKKworCWRvIHsKKwkJdG8gPSB0X2VuZCAtIHRpbWUoTlVM TCk7CisJCWlmICh0byA8IDApCisJCQl0byA9IDA7CisKKwkJbiA9IGJ0X2RldnJlY3YocywgYnVm LCBzaXplb2YoYnVmKSwgdG8pOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKworCQlp ZiAobiA8IHNpemVvZigqZSkpIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0x KTsKKwkJfQorCisJCWlmIChlLT50eXBlICE9IE5HX0hDSV9FVkVOVF9QS1QpIHsKKwkJCWVycm5v ID0gRUlPOworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQluIC09IHNpemVvZigqZSk7CisKKwkJ c3dpdGNoIChlLT5ldmVudCkgeworCQljYXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX0NPTVBMOgor CQkJaWYgKGNjLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQkJbiAtPSBzaXplb2YoKmNjKTsKKwor CQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNweShy LT5ycGFyYW0sIGNjICsgMSwgci0+cmxlbik7CisJCQkJfQorCisJCQkJcmV0dXJuICgwKTsKKwkJ CX0KKwkJCWJyZWFrOworCisJCWNhc2UgTkdfSENJX0VWRU5UX0NPTU1BTkRfU1RBVFVTOgorCQkJ aWYgKGNzLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQkJaWYgKHItPmV2ZW50ICE9IE5HX0hDSV9F VkVOVF9DT01NQU5EX1NUQVRVUykgeworCQkJCQlpZiAoY3MtPnN0YXR1cyAhPSAwKSB7CisJCQkJ CQllcnJubyA9IEVJTzsKKwkJCQkJCXJldHVybiAoLTEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsK KwkJCQkJaWYgKHItPnJsZW4gPj0gbikgeworCQkJCQkJci0+cmxlbiA9IG47CisJCQkJCQltZW1j cHkoci0+cnBhcmFtLCBjcywgci0+cmxlbik7CisJCQkJCX0KKworCQkJCQlyZXR1cm4gKDApOwor CQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpZiAoZS0+ZXZlbnQgPT0g ci0+ZXZlbnQpIHsKKwkJCQlpZiAoci0+cmxlbiA+PSBuKSB7CisJCQkJCXItPnJsZW4gPSBuOwor CQkJCQltZW1jcHkoci0+cnBhcmFtLCBlICsgMSwgci0+cmxlbik7CisJCQkJfQorCisJCQkJcmV0 dXJuICgwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodG8gPiAwKTsKKworCWVy cm5vID0gRVRJTUVET1VUOworCisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVy KGludCBzLCBzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXcsIHN0cnVjdCBidF9kZXZmaWx0 ZXIgKm9sZCkKK3sKKwlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19maWx0ZXIJZjsKKwlzb2Nr bGVuX3QJCQkJbGVuOworCWludAkJCQkJYml0OworCisJaWYgKG5ldyA9PSBOVUxMICYmIG9sZCA9 PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAo b2xkICE9IE5VTEwpIHsKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlpZiAoZ2V0c29ja29wdChzLCBT T0xfSENJX1JBVywgU09fSENJX1JBV19GSUxURVIsICZmLCAmbGVuKSA8IDApCisJCQlyZXR1cm4g KC0xKTsKKworCQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkpOworCisJCWZvciAoYml0ID0g MDsgYml0IDwgTkdfSENJX0VWRU5UX1BLVDsgYml0ICsrKQorCQkJaWYgKGJpdF90ZXN0KGYucGFj a2V0X21hc2ssIGJpdCkpCisJCQkJb2xkLT5wYWNrZXRfbWFzayB8PSAoMSA8PCBiaXQpOworCisJ CWZvciAoYml0ID0gMDsgYml0IDwgTkdfSENJX0VWRU5UX01BU0tfU0laRSAqIDg7IGJpdCArKykK KwkJCWlmIChiaXRfdGVzdChmLmV2ZW50X21hc2ssIGJpdCkpCisJCQkJb2xkLT5ldmVudF9tYXNr IHw9ICgxIDw8IGJpdCk7CisJfQorCisJaWYgKG5ldyAhPSBOVUxMKSB7CisJCW1lbXNldCgmZiwg MCwgc2l6ZW9mKGYpKTsKKworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IE5HX0hDSV9FVkVOVF9QS1Q7 IGJpdCArKykKKwkJCWlmIChuZXctPnBhY2tldF9tYXNrICYgKDEgPDwgYml0KSkKKwkJCQliaXRf c2V0KGYucGFja2V0X21hc2ssIGJpdCk7CisKKwkJZm9yIChiaXQgPSAwOyBiaXQgPCAoTkdfSENJ X0VWRU5UX01BU0tfU0laRSAqIDgpOyBiaXQgKyspCisJCQlpZiAobmV3LT5ldmVudF9tYXNrICYg KDEgPDwgYml0KSkKKwkJCQliaXRfc2V0KGYuZXZlbnRfbWFzaywgYml0KTsKKworCQlsZW4gPSBz aXplb2YoZik7CisJCWlmIChzZXRzb2Nrb3B0KHMsIFNPTF9IQ0lfUkFXLCBTT19IQ0lfUkFXX0ZJ TFRFUiwgJmYsIGxlbikgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuICgwKTsK K30KKworaW50CitidF9kZXZpbnF1aXJ5KGNoYXIgY29uc3QgKmRldm5hbWUsIGludCBsZW5ndGgs IGludCBudW1fcnNwLAorCQl1aW50OF90IGNvbnN0ICpsYXAsIHN0cnVjdCBidF9kZXZpbnF1aXJ5 ICoqaWkpCit7CisJdWludDhfdAkJCQlidWZbMzIwXTsKKwljaGFyCQkJCV9kZXZuYW1lW0hDSV9E RVZOQU1FX1NJWkVdOworCXN0cnVjdCBidF9kZXZmaWx0ZXIJCWY7CisJbmdfaGNpX2lucXVpcnlf Y3AJCSpjcCA9IChuZ19oY2lfaW5xdWlyeV9jcCAqKSBidWY7CisJbmdfaGNpX2V2ZW50X3BrdF90 CQkqZSA9IChuZ19oY2lfZXZlbnRfcGt0X3QgKikgYnVmOworCW5nX2hjaV9pbnF1aXJ5X3Jlc3Vs dF9lcAkqZXAgPSAobmdfaGNpX2lucXVpcnlfcmVzdWx0X2VwICopKGUrMSk7CisJbmdfaGNpX2lu cXVpcnlfcmVzcG9uc2UJCSppcjsKKwlzdHJ1Y3QgYnRfZGV2aW5xdWlyeQkJKmk7CisJaW50CQkJ CXMsIG47CisJdGltZV90CQkJCXRvOworCisJaWYgKGlpID09IE5VTEwpIHsKKwkJZXJybm8gPSBF SU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChkZXZuYW1lID09IE5VTEwpIHsKKwkJ bWVtc2V0KF9kZXZuYW1lLCAwLCBzaXplb2YoX2Rldm5hbWUpKTsKKwkJZGV2bmFtZSA9IF9kZXZu YW1lOworCisJCW4gPSBidF9kZXZlbnVtKGJ0X2RldmFueV9jYiwgX2Rldm5hbWUpOworCQlpZiAo biA8PSAwKSB7CisJCQlpZiAobiA9PSAwKQorCQkJCSppaSA9IE5VTEw7CisKKwkJCXJldHVybiAo bik7CisJCX0KKwl9CisKKwlzID0gYnRfZGV2b3BlbihkZXZuYW1lKTsKKwlpZiAocyA8IDApCisJ CXJldHVybiAoLTEpOworCisJaWYgKGJ0X2RldmZpbHRlcihzLCBOVUxMLCAmZikgPCAwKSB7CisJ CWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlmLmV2ZW50X21hc2sgfD0g KDEgPDwgKE5HX0hDSV9FVkVOVF9JTlFVSVJZX0NPTVBMIC0gMSkpOworCWYuZXZlbnRfbWFzayB8 PSAoMSA8PCAoTkdfSENJX0VWRU5UX0lOUVVJUllfUkVTVUxUIC0gMSkpOworCisJaWYgKGJ0X2Rl dmZpbHRlcihzLCAmZiwgTlVMTCkgPCAwKSB7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4g KC0xKTsKKwl9CisKKwlpZiAobGFwID09IE5VTEwpIHsKKwkJY3AtPmxhcFswXSA9IDB4MzM7CisJ CWNwLT5sYXBbMV0gPSAweDhiOworCQljcC0+bGFwWzJdID0gMHg5ZTsKKwl9IGVsc2UgeworCQlj cC0+bGFwWzBdID0gbGFwWzBdOworCQljcC0+bGFwWzFdID0gbGFwWzFdOworCQljcC0+bGFwWzJd ID0gbGFwWzJdOworCX0KKworCWlmIChsZW5ndGggPD0gMCB8fCBsZW5ndGggPiAyNTUpCisJCWxl bmd0aCA9IDQ7CS8qIDUuMTIgc2Vjb25kcyAqLworCWNwLT5pbnF1aXJ5X2xlbmd0aCA9ICh1aW50 OF90KSBsZW5ndGg7CisKKwl0byA9ICh0aW1lX3QpKChkb3VibGUpIGxlbmd0aCAqIDEuMjgpICsg MTsKKworCWlmIChudW1fcnNwIDw9IDAgfHwgbnVtX3JzcCA+IDI1NSkKKwkJbnVtX3JzcCA9IDg7 CisJY3AtPm51bV9yZXNwb25zZXMgPSAodWludDhfdCkgbnVtX3JzcDsKKworCWkgPSAqaWkgPSBj YWxsb2MobnVtX3JzcCwgc2l6ZW9mKHN0cnVjdCBidF9kZXZpbnF1aXJ5KSk7CisJaWYgKGkgPT0g TlVMTCkgeworCQlidF9kZXZjbG9zZShzKTsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAo LTEpOworCX0KKworCWlmIChidF9kZXZzZW5kKHMsIE5HX0hDSV9PR0ZfTElOS19DT05UUk9MLCBO R19IQ0lfT0NGX0lOUVVJUlksCisJCQlzaXplb2YoKmNwKSwgY3ApIDwgMCkgeworCQlmcmVlKGkp OworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCit3YWl0X2Zvcl9tb3Jl OgorCisJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBzaXplb2YoYnVmKSwgdG8pOworCWlmIChuIDwg MCkgeworCQlmcmVlKGkpOworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQor CisJaWYgKG4gPCBzaXplb2YobmdfaGNpX2V2ZW50X3BrdF90KSkgeworCQlmcmVlKGkpOworCQli dF9kZXZjbG9zZShzKTsKKwkJZXJybm8gPSBFSU87CisJCXJldHVybiAoLTEpOworCX0KKworCXN3 aXRjaCAoZS0+ZXZlbnQpIHsKKwljYXNlIE5HX0hDSV9FVkVOVF9JTlFVSVJZX0NPTVBMOgorCQli cmVhazsKKworCWNhc2UgTkdfSENJX0VWRU5UX0lOUVVJUllfUkVTVUxUOgorCQlpciA9IChuZ19o Y2lfaW5xdWlyeV9yZXNwb25zZSAqKShlcCArIDEpOworCisjdW5kZWYJTUlOCisjZGVmaW5lCU1J TihhLCBiKQkoKChhKSA8IChiKSk/IChhKSA6IChiKSkKKworCQlmb3IgKG4gPSAwOyBuIDwgTUlO KGVwLT5udW1fcmVzcG9uc2VzLCBudW1fcnNwKTsgbiArKykgeworCQkJYmRhZGRyX2NvcHkoJmkt PmJkYWRkciwgJmlyLT5iZGFkZHIpOworCQkJaS0+cHNjYW5fcmVwX21vZGUgPSBpci0+cGFnZV9z Y2FuX3JlcF9tb2RlOworCQkJaS0+cHNjYW5fcGVyaW9kX21vZGUgPSBpci0+cGFnZV9zY2FuX3Bl cmlvZF9tb2RlOworCQkJaS0+cHNjYW5fbW9kZSA9IGlyLT5wYWdlX3NjYW5fbW9kZTsKKwkJCW1l bWNweShpLT5kZXZfY2xhc3MsIGlyLT51Y2xhc3MsIHNpemVvZihpLT5kZXZfY2xhc3MpKTsKKwkJ CWktPmNsb2NrX29mZnNldCA9IGxlMTZ0b2goaXItPmNsb2NrX29mZnNldCk7CisKKwkJCWlyICsr OworCQkJaSArKzsKKwkJCW51bV9yc3AgLS07CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwor CWRlZmF1bHQ6CisJCWdvdG8gd2FpdF9mb3JfbW9yZTsKKwkJLyogTk9UIFJFQUNIRUQgKi8KKwl9 CisKKwlidF9kZXZjbG9zZShzKTsKKwkJCisJcmV0dXJuIChpIC0gKmlpKTsKK30KKworaW50CiBi dF9kZXZpbmZvKHN0cnVjdCBidF9kZXZpbmZvICpkaSkKIHsKIAl1bmlvbiB7CkBAIC01Myw2ICs0 NTksNyBAQAogCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2RlYnVnCQlyODsKIAl9 CQkJCQkJcnA7CiAJc3RydWN0IHNvY2thZGRyX2hjaQkJCQloYTsKKwlzb2NrbGVuX3QJCQkJCWhh bGVuOwogCWludAkJCQkJCXMsIHJ2YWw7CiAKIAlpZiAoZGkgPT0gTlVMTCkgewpAQCAtNjAsMjcg KzQ2NywxNCBAQAogCQlyZXR1cm4gKC0xKTsKIAl9CiAKLQltZW1zZXQoJmhhLCAwLCBzaXplb2Yo aGEpKTsKLQloYS5oY2lfbGVuID0gc2l6ZW9mKGhhKTsKLQloYS5oY2lfZmFtaWx5ID0gQUZfQkxV RVRPT1RIOwotCi0JaWYgKGJ0X2F0b24oZGktPmRldm5hbWUsICZycC5yMS5iZGFkZHIpKSB7Ci0J CWlmICghYnRfZGV2bmFtZShoYS5oY2lfbm9kZSwgJnJwLnIxLmJkYWRkcikpCi0JCQlyZXR1cm4g KC0xKTsKLQl9IGVsc2UgaWYgKGJ0X2RldjJub2RlKGRpLT5kZXZuYW1lLCBoYS5oY2lfbm9kZSwK LQkJCQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgewotCQllcnJubyA9IEVOWElPOwot CQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcs IEJMVUVUT09USF9QUk9UT19IQ0kpOworCXMgPSBidF9kZXZvcGVuKGRpLT5kZXZuYW1lKTsKIAlp ZiAocyA8IDApCiAJCXJldHVybiAoLTEpOwogCiAJcnZhbCA9IC0xOwogCi0JaWYgKGJpbmQocywg KHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAotCSAgICBjb25uZWN0 KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJaGFsZW4gPSBz aXplb2YoaGEpOworCWlmIChnZXRzb2NrbmFtZShzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwg JmhhbGVuKSA8IDApCiAJCWdvdG8gYmFkOwogCXN0cmxjcHkoZGktPmRldm5hbWUsIGhhLmhjaV9u b2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKIApAQCAtMTM4LDcgKzUzMiw3IEBACiAKIAlydmFs ID0gMDsKIGJhZDoKLQljbG9zZShzKTsKKwlidF9kZXZjbG9zZShzKTsKIAogCXJldHVybiAocnZh bCk7CiB9CkBAIC0yMDUsNiArNTk5LDEzIEBACiAJcmV0dXJuIChjb3VudCk7CiB9CiAKK3N0YXRp YyBpbnQKK2J0X2RldmFueV9jYihpbnQgcywgc3RydWN0IGJ0X2RldmluZm8gY29uc3QgKmRpLCB2 b2lkICp4ZGV2bmFtZSkKK3sKKwlzdHJsY3B5KChjaGFyICopIHhkZXZuYW1lLCBkaS0+ZGV2bmFt ZSwgSENJX0RFVk5BTUVfU0laRSk7CisJcmV0dXJuICgxKTsKK30KKwogc3RhdGljIGNoYXIgKgog YnRfZGV2Mm5vZGUoY2hhciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxl bikKIHsKSW5kZXg6IGJsdWV0b290aC4zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC4zCShyZXZp c2lvbiAxOTA4NzApCisrKyBibHVldG9vdGguMwkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs NyBAQAogLlwiICRJZDogYmx1ZXRvb3RoLjMsdiAxLjUgMjAwMy8wNS8yMCAyMzowNDozMCBtYXgg RXhwICQKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEZlYnJ1YXJ5IDEzLCAyMDA5CisuRGQgQXBy aWwgOSwgMjAwOQogLkR0IEJMVUVUT09USCAzCiAuT3MKIC5TaCBOQU1FCkBAIC00MSw2ICs0MSwx NyBAQAogLk5tIGJ0X2VuZHByb3RvZW50ICwKIC5ObSBidF9hdG9uICwKIC5ObSBidF9udG9hICwK Ky5ObSBidF9kZXZhZGRyICwKKy5ObSBidF9kZXZuYW1lICwKKy5ObSBidF9kZXZpbmZvICwKKy5O bSBidF9kZXZlbnVtICwKKy5ObSBidF9kZXZvcGVuICwKKy5ObSBidF9kZXZjbG9zZSAsCisuTm0g YnRfZGV2c2VuZCAsCisuTm0gYnRfZGV2cmVjdiAsCisuTm0gYnRfZGV2cmVxICwKKy5ObSBidF9k ZXZmaWx0ZXIgLAorLk5tIGJ0X2RldmlucXVpcnkgLAogLk5tIGJkYWRkcl9zYW1lICwKIC5ObSBi ZGFkZHJfYW55ICwKIC5ObSBiZGFkZHJfY29weQpAQCAtODQsNiArOTUsMjAgQEAKIC5GdCBpbnQK IC5GbiBidF9kZXZlbnVtICJidF9kZXZlbnVtX2NiX3QgKmNiIiAidm9pZCAqYXJnIgogLkZ0IGlu dAorLkZuIGJ0X2Rldm9wZW4gImNoYXIgY29uc3QgKmRldm5hbWUiCisuRnQgaW50CisuRm4gYnRf ZGV2Y2xvc2UgImludCBzIgorLkZ0IGludAorLkZuIGJ0X2RldnNlbmQgImludCBzIiAidWludDE2 X3Qgb2dmIiAidWludDE2X3Qgb2NmIiAiaW50IHBsZW4iICJ2b2lkICpwYXJhbSIKKy5GdCBpbnQK Ky5GbiBidF9kZXZyZWN2ICJpbnQgcyIgInVpbnQ4X3QgKmJ1ZiIgImludCBzaXplIiAidGltZV90 IHRvIgorLkZ0IGludAorLkZuIGJ0X2RldnJlcSAiaW50IHMiICJzdHJ1Y3QgYnRfZGV2cmVxICpy IiAidGltZV90IHRvIgorLkZ0IGludAorLkZuIGJ0X2RldmZpbHRlciAiaW50IHMiICJzdHJ1Y3Qg YnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXciICJzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpvbGQiCisuRnQg aW50CisuRm4gYnRfZGV2aW5xdWlyeSAiY2hhciBjb25zdCAqZGV2bmFtZSIgImludCBsZW5ndGgi ICJpbnQgbnVtX3JzcCIgInVpbnQ4X3QgY29uc3QgKmxhcCIgInN0cnVjdCBidF9kZXZpbnF1aXJ5 ICoqaWkiCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAiY29u c3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRyX3Qg KmEiCkBAIC0zMTEsNiArMzM2LDIxOSBAQAogb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAu UHAKIFRoZQorLkZuIGJ0X2Rldm9wZW4KK2Z1bmN0aW9uIG9wZW5zIEJsdWV0b290aCBkZXZpY2Ug d2l0aCB0aGUgZ2l2ZW4KKy5GYSBkZXZuYW1lCithbmQgcmV0dXJucyBjb25uZWN0ZWQgYW5kIGJv dW5kCisuRHYgSENJCitzb2NrZXQuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBhbiBlcnJv ciBoYXMgb2NjdXJyZWQuCisuUHAKK1RoZQorLkZuIGJ0X2RldmNsb3NlCitjbG9zZXMgcGFzc2Vk CisuRHYgSENJCitzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0aAorLlhy IGJ0X2Rldm9wZW4gMyAuCisuUHAKK1RoZQorLkZuIGJ0X2RldnNlbmQKK2Z1bmN0aW9uIHNlbmRz IEJsdWV0b290aAorLkR2IEhDSQorY29tbWFuZCB3aXRoIHRoZSBPcENvZGUgR3JvdXAgRmllbGQK Ky5GYSBvZ2YKK2FuZAorT3BDb2RlIENvbW1hbmQgRmllbGQKKy5GYSBvY2YKK3RvIHRoZSBwcm92 aWRlZCBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0aAorLlhyIGJ0X2Rl dm9wZW4gMyAuCitUaGUKKy5GYSBwbGVuCithbmQKKy5GYSBwYXJhbQorcGFyYW1ldGVycyBzcGVj aWZ5IGNvbW1hbmQgcGFyYW1ldGVycy4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vz cywKK29yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBidF9kZXZyZWN2 CitmdW5jdGlvbiByZWNlaXZlcyBvbmUgQmx1ZXRvb3RoCisuRHYgSENJCitldmVudCBwYWNrZXQg ZnJvbSB0aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5YciBi dF9kZXZvcGVuIDMgLgorVGhlIGV2ZW50IHBhY2tldCBpcyBwbGFjZWQgaW50byB0aGUgcHJvdmlk ZWQgYnVmZmVyCisuRmEgYnVmCitvZiBzaXplCisuRmEgc2l6ZSAuCitUaGUKKy5GYSB0bworcGFy YW1ldGVyIHNwZWNpZmllcyByZWNlaXZlIHRpbWVvdXQgaW4gc2Vjb25kcy4KK1RoZSBmdW5jdGlv biByZXR1cm5zIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWNldmllZCwKK29yIC0xIGlmIGFuIGVy cm9yIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBidF9kZXZyZXEKK2Z1bmN0aW9uIG1ha2VzIEJs dWV0b290aAorLkR2IEhDSQorcmVxdWVzdCB0byB0aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91 c2x5IG9idGFpbmVkIHdpdGgKKy5YciBidF9kZXZvcGVuIDMgLgorVGhlIGZ1bmN0aW9uIHdpbGwg c2VuZCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgYW5kIHdpbGwgd2FpdCBmb3IgdGhlIHNwZWNpZmll ZAorZXZlbnQsCitvciB0aW1lb3V0CisuRmEgdG8KK3NlY29uZHMgdG8gb2NjdXIuCitUaGUKKy5W dCBidF9kZXZyZXEKK3N0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3MKKy5CZCAtbGl0ZXJh bCAtb2Zmc2V0IGluZGVudAorc3RydWN0IGJ0X2RldnJlcQoreworICAgICAgICB1aW50MTZfdCAg ICAgICAgb2dmOworICAgICAgICB1aW50MTZfdCAgICAgICAgb2NmOworICAgICAgICBpbnQgICAg ICAgICAgICAgZXZlbnQ7CisgICAgICAgIHZvaWQgICAgICAgICAgICAqY3BhcmFtOworICAgICAg ICBpbnQgICAgICAgICAgICAgY2xlbjsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpycGFyYW07 CisgICAgICAgIGludCAgICAgICAgICAgICBybGVuOworfTsKKy5FZAorLlBwCitUaGUKKy5GYSBv Z2YKK2FuZAorLkZhIG9jZgorZmllbGRzIHNwZWNpZnkgT3BDb2RlIEdyb3VwIGFuZCBDb21tYW5k IEZpZWxkIHJlc3BlY3RpdmVseS4KK1RoZQorLkZhIGNwYXJhbQorYW5kCisuRmEgY2xlbgorZmll bGRzIHNwZWNpZnkgY29tbWFuZCBwYXJhbWV0ZXJzIGRhdGEgYW5kIGNvbW1hbmQgcGFyYW1ldGVy cyBkYXRhIHNpemUKK3Jlc3BlY3RpdmVseS4KK1RoZQorLkZhIGV2ZW50CitmaWVsZCBzcGVjaWZp ZXMgd2hpY2ggQmx1ZXRvb3RoCisuRHYgSENJCitldmVudCBJRCB0aGUgZnVuY3Rpb24gc2hvdWxk IHdhaXQgZm9yLgorVGhlCisuRmEgcnBhcmFtCithbmQKKy5GYSBybGVuCitwYXJhbWV0ZXJzIHNw ZWNpZnkgYnVmZmVyIGFuZCBidWZmZXIgc2l6ZSByZXNwZWN0aXZlbHkgd2hlcmUgcmV0dXJuCitw YXJhbWV0ZXJzIHNob3VsZCBiZSBwbGFjZWQuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1 Y2Nlc3MsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBidF9kZXZm aWx0ZXIKK2NvbnRyb2xzIHRoZSBsb2NhbAorLkR2IEhDSQorZmlsdGVyIGFzc29jaWF0ZWQgd2l0 aCB0aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5YciBidF9k ZXZvcGVuIDMgLgorRmlsdGVyaW5nIGNhbiBiZSBkb25lIG9uIHBhY2tldCB0eXBlcywgaS5lLgor LkR2IEFDTCAsCisuRHYgU0NPIG9yCisuRHYgSENJCitldmVudCBwYWNrZXRzLCBhbmQsIGluIGFk ZGl0aW9uLCBvbgorLkR2IEhDSQorZXZlbnQgSURzLgorQmVmb3JlIGFwcGx5aW5nCisuRmEgbmV3 CitmaWx0ZXIgKGlmIHByb3ZpZGVkKSB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gb2J0YWluIGN1 cnJlbnQgZmlsdGVyCitmcm9tIHRoZSBzb2NrZXQKKy5GYSBzCithbmQgcGxhY2UgaXQgaW50byB0 aGUKKy5GYSBvbGQKK3BhcmFtZXRlciAoaWYgcHJvdmlkZWQpLgorVGhlCisuVnQgYnRfZGV2Zmls dGVyCitzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNl dCBpbmRlbnQKK3N0cnVjdCBidF9kZXZmaWx0ZXIgeworICAgICAgICB1aW50NjRfdCAgICAgICAg ZXZlbnRfbWFzazsKKyAgICAgICAgdWludDhfdCAgICAgICAgIHBhY2tldF9tYXNrOworfTsKKy5F ZAorLlBwCitCb3RoCisuRmEgZXZlbnRfbWFzaworYW5kCisuRmEgcGFja2V0X21hc2sKK2ZpZWxk cyBhcmUgYml0IG1hc2tzLgorSWYgYSBiaXQKKy5GYSBOCitpcyBjbGVhcmVkIGluIHRoZQorLkZh IGV2ZW50X21hc2sKK3RoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQmx1ZXRvb3RoCisuRHYgSENJCitl dmVudCBJRAorLkZhIE4KK2lzIGZpbHRlcmVkIG91dC4KK0lmIGEgYml0CisuRmEgTgoraXMgY2xl YXJlZCBpbiB0aGUKKy5GYSBwYWNrZXRfbWFzawordGhlbiBhbGwgdGhlIHBhY2tldHMgd2l0aCB0 aGUgY29ycmVzcG9uZGluZyBwYWNrZXQgaW5kaWNhdG9yIGFyZSBmaWx0ZXJlZCBvdXQuCitUaGUg ZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVk LgorLlBwCitUaGUKKy5GbiBidF9kZXZpbnF1aXJ5CitmdW5jdGlvbiBwZXJmb3JtcyBCbHVldG9v dGggaW5xdWlyeS4KK1RoZQorLkZhIGRldm5hbWUKK3BhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2gg bG9jYWwgQmx1ZXRvb3RoIGRldmljZSBzaG91bGQgcGVyZm9ybSBhbiBpbnF1aXJ5LgorSWYgbm90 IHNlY2lmaWVkLCBpLmUuCisuRHYgTlVMTCAsCit0aGVuIGZpcnN0IGF2YWlsYWJsZSBkZXZpY2Ug d2lsbCBiZSB1c2VkLgorVGhlCisuRmEgbGVuZ3RoCitwYXJhbWV0ZXJzIHNwZWNpZmllcyB0aGUg dG90YWwgbGVuZ3RoIG9mIGFuIGlucXVpcnkgaW4gMS4yOCBzZWNvbmQgdW5pdHMuCitJZiBub3Qg c3BlY2lmaWVkLCBpLmUuIDAsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgorVGhlCisuRmEg bnVtX3JzcAorcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0 IGNhbiBiZSByZWNlaXZlZCBiZWZvcmUKK3RoZSBpbnF1aXJ5IGlzIGhhbHRlZC4KK0lmIG5vdCBz cGVjaWZpZWQsIGkuZS4gMCwgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCitUaGUKKy5GYSBs YXAKK3BhcmFtZXRlciBjb250YWlucyB0aGUgTEFQIGZyb20gd2hpY2ggdGhlIGlucXVpcnkgYWNj ZXNzIGNvZGUgd2lsbCBiZQorYmUgZGVyaXZlZCB3aGVuIHRoZSBpbnF1aXJ5IHByb2NlZHVyZSBp cyBtYWRlLgorSWYgbm90IHNwZWNpZmllZCwgaS5lLgorLkR2IE5VTEwgLAordGhlbiBHSUFDIExB UCA5ZTo4YjozMyB3aWxsIGJlIHVzZWQuCitUaGUKKy5GYSBpaQorcGFyYW1ldGVyIHNwZWNpZmll cyB3aGVyZSB0byBwbGFjZSBpbnF1aXJ5IHJlc3VsdHMuCitPbiBzdWNjZXNzLCB0aGUgZnVuY3Rp b24gd2lsbCByZXR1cm4gdG90YWwgbnVtYmVyIG9mIGlucXVpcnkgcmVzdWx0cywKK3dpbGwgYWxs b2NhdGUgYnVmZmVyIHRvIHN0b3JlIGFsbCB0aGUgaW5xdWlyeSByZXN1bHRzIGFuZAord2lsbCBy ZXR1cm4gcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBpbiB0aGUKKy5GYSBpaQorcGFy YW1ldGVyLgorSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgZnVuY3Rpb24gdG8gZGlzcG9z ZSBvZiB0aGUgYnVmZmVyLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgYW4gZXJyb3IgaGFz IG9jY3VycmVkLgorVGhlCisuVnQgYnRfZGV2aW5xdWlyeQorc3RydWN0dXJlIGlzIGRlZmluZWQg YXMgZm9sbG93cworLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50CitzdHJ1Y3QgYnRfZGV2aW5x dWlyeSB7CisgICAgICAgIGJkYWRkcl90ICAgICAgICBiZGFkZHI7CisgICAgICAgIHVpbnQ4X3Qg ICAgICAgICBwc2Nhbl9yZXBfbW9kZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgIHBzY2FuX3Bl cmlvZF9tb2RlOworICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5fbW9kZTsKKyAgICAgICAg dWludDhfdCAgICAgICAgIGRldl9jbGFzc1szXTsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGNs b2NrX29mZnNldDsKK307CisuRWQKKy5QcAorVGhlCiAuRm4gYmRhZGRyX3NhbWUgLAogLkZuIGJk YWRkcl9hbnkKIGFuZApJbmRleDogYmx1ZXRvb3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3Ro LmgJKHJldmlzaW9uIDE5MDg3MCkKKysrIGJsdWV0b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z OSw2ICszOSw3IEBACiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgogI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5j bHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgpA QCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25n X2hjaS5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2wyY2FwLmg+ CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfYnRzb2NrZXQuaD4KKyNp bmNsdWRlIDx0aW1lLmg+CiAKIF9fQkVHSU5fREVDTFMKIApAQCAtMTI5LDggKzEzMSw0MiBAQAog CXVpbnQ4X3QJCV9wYWRkaW5nWzIwXTsJLyogbGVhdmUgc3BhY2UgZm9yIGZ1dHVyZSBhZGRpdGlv bnMgKi8KIH07CiAKK3N0cnVjdCBidF9kZXZyZXEKK3sKKwl1aW50MTZfdAlvZ2Y7CisJdWludDE2 X3QJb2NmOworCWludAkJZXZlbnQ7CisJdm9pZAkJKmNwYXJhbTsKKwlpbnQJCWNsZW47CisJdm9p ZAkJKnJwYXJhbTsKKwlpbnQJCXJsZW47Cit9OworCitzdHJ1Y3QgYnRfZGV2ZmlsdGVyIHsKKwl1 aW50NjRfdAlldmVudF9tYXNrOworCXVpbnQ4X3QJCXBhY2tldF9tYXNrOworfTsKKworc3RydWN0 IGJ0X2RldmlucXVpcnkgeworCWJkYWRkcl90CWJkYWRkcjsKKwl1aW50OF90CQlwc2Nhbl9yZXBf bW9kZTsKKwl1aW50OF90CQlwc2Nhbl9wZXJpb2RfbW9kZTsKKwl1aW50OF90CQlwc2Nhbl9tb2Rl OworCXVpbnQ4X3QJCWRldl9jbGFzc1szXTsKKwl1aW50MTZfdAljbG9ja19vZmZzZXQ7Cit9Owor CiB0eXBlZGVmIGludAkoYnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZpbmZvIGNv bnN0ICosIHZvaWQgKik7CiAKK2ludAkJYnRfZGV2b3BlbiAoY2hhciBjb25zdCAqZGV2bmFtZSk7 CitpbnQJCWJ0X2RldmNsb3NlKGludCBzKTsKK2ludAkJYnRfZGV2c2VuZCAoaW50IHMsIHVpbnQx Nl90IG9nZiwgdWludDE2X3Qgb2NmLCBpbnQgcGxlbiwgdm9pZCAqcGFyYW0pOworaW50CQlidF9k ZXZyZWN2IChpbnQgcywgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSwgdGltZV90IHRvKTsKK2ludAkJ YnRfZGV2cmVxICAoaW50IHMsIHN0cnVjdCBidF9kZXZyZXEgKnIsIHRpbWVfdCB0byk7CitpbnQJ CWJ0X2RldmZpbHRlcihpbnQgcywgc3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqbmV3LAorCQkJ ICAgICBzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpvbGQpOworaW50CQlidF9kZXZpbnF1aXJ5KGNoYXIg Y29uc3QgKmRldm5hbWUsIGludCBsZW5ndGgsIGludCBudW1fcnNwLAorCQkJICAgICAgdWludDhf dCBjb25zdCAqbGFwLCBzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKTsKIGludAkJYnRfZGV2aW5m byAoc3RydWN0IGJ0X2RldmluZm8gKmRpKTsKIGludAkJYnRfZGV2ZW51bSAoYnRfZGV2ZW51bV9j Yl90ICpjYiwgdm9pZCAqYXJnKTsKIApJbmRleDogTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFr ZWZpbGUJKHJldmlzaW9uIDE5MDg3MCkKKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0z Myw2ICszMywxMyBAQAogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5mby4zCiBNTElOS1Mr PQlibHVldG9vdGguMyBidF9kZXZlbnVtLjMKIAorTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2 b3Blbi4zCitNTElOS1MrPQlibHVldG9vdGguMyBidF9kZXZjbG9zZS4zCitNTElOS1MrPQlibHVl dG9vdGguMyBidF9kZXZzZW5kLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldnJlcS4zCitN TElOS1MrPQlibHVldG9vdGguMyBidF9kZXZmaWx0ZXIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMg YnRfZGV2aW5xdWlyeS4zCisKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1M SU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9hbnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRh ZGRyX2NvcHkuMwo= --001636164aa7ee85e0046726e214--