From gstreamer-devel Tue Sep 11 10:47:01 2007 From: Simone Gotti Date: Tue, 11 Sep 2007 10:47:01 +0000 To: gstreamer-devel Subject: [gst-devel] [RFC][PATCH] Fix and add needed features to dvdnavsrc Message-Id: <1189507621.3150.15.camel () localhost> X-MARC-Message: https://marc.info/?l=gstreamer-devel&m=118950766313266 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--===============0590248215==" --===============0590248215== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-JQy0t80HPuGvZaIiV5mK" --=-JQy0t80HPuGvZaIiV5mK Content-Type: multipart/mixed; boundary="=-gMw2cFGbe7wB6ikoIIsl" --=-gMw2cFGbe7wB6ikoIIsl Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi all, I worked in the past days to fix dvdnavsrc as it wasn't working (at least for me) and missing some important features like seeking. I did an initial patch that I'm attaching here and I'll really appreciate any comment. To test all I used this simple pipeline (hadn't tested subpicture again): gst-launch dvdnavsrc ! dvddemux name=3Ddemux .video_00 ! { queue ! mpeg2dec ! xvimagesink } { demux.current_audio ! queue ! a52dec ! audioconvert ! audioresample ! alsasink } I'll try to list all the changes I did plus some problems and questions: *) Add still frame management: It uses gst_clock_new_single_shot_id on the system clock to wait. The user operation works correctly during still frames. *) Add query convert ability. The functions converts between sectors, bytes and time. The sector/bytes to time conversion and the opposite con be done in 2 ways: using the DVD time maps if available (like dvdreadsrc does) or using time/sector interpolation. Looks like there a bug in dvdnav_get_position where the pos and length values aren't correctly calculated. I did a patch that will fix it and I'll submit it for discussion to the dvdnav developers. In the mean time dvdnavsrc does a check and if the max sector reported by the tmaps is less or equal that the one reported by dvdnav_get_position the tmaps aren't used. *) Add seeking ability. *) Also the NAV packets needs to be sended to the demuxer as they carries data. *) Fix chapter number retrieve call (it was using dvdnav_get_number_of_titles instead of dvdnav_get_number_of_parts). *) In gst_dvd_nav_src_tca_seek rename program variable to chapter variable. *) Remove did_seek gboolean as it's not used anymore. TODO: *) Handle seek on title chapter angle: easy to do, I'm waiting to look if what I did until now is right or it simply sucks :D Problems / Questions: 1) I removed a lot of segment events as the seek ones are already managed by the parent basesrc. The other one doesn't do any effect because looks like dvddemux (and it's parent class) prefer to use the SRC/pts times provided by the strean to report newsegments downstream. 2) Now, the use of SCR/pts for syncronization is the unique and right way so no problem. But I don't think that they are the right way when we are doing position queries. The problem is that I have some DVD where the SCR and pts restarts from 0 after some time: t1: 0 ... tX: 342242432 ... tX+Y: 0 (again) As a query on the pipeline is asked starting from the sinks a position query with a time format is reported in the wrong way as the position time will restart from 0. By now the unique right way to get a position is asking directly to the dvdnavsrc. The position will be an aproximation but it will be quite right and continous. Looking at various codes this way to get the position is the same done by other projects like VLC and xine. What do you think about this? The applications that uses dvdnavsrc (but this problem also affects dvdreadsrc) should do the query directly on it instead of the pipeline? But how to handle this with playbin? Thanks! Bye! --=20 Simone Gotti --=-gMw2cFGbe7wB6ikoIIsl Content-Disposition: attachment; filename=dvdnavsrc-megafix-20070911-1227.patch Content-Type: text/x-patch; name=dvdnavsrc-megafix-20070911-1227.patch; charset=UTF-8 Content-Transfer-Encoding: base64 SW5kZXg6IGR2ZG5hdnNyYy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9nc3RyZWFtZXIv Z3N0LXBsdWdpbnMtdWdseS9leHQvZHZkbmF2L2R2ZG5hdnNyYy5jLHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS40OQ0KZGlmZiAtdSAtYiAtQiAtcCAtcjEuNDkgZHZkbmF2c3JjLmMNCi0tLSBkdmRu YXZzcmMuYwkxMyBKdW4gMjAwNyAxNDoyOTozOSAtMDAwMAkxLjQ5DQorKysgZHZkbmF2c3JjLmMJ MTEgU2VwIDIwMDcgMTA6Mjc6MzggLTAwMDANCkBAIC0xMTEsNiArMTExLDcgQEAgZ3N0X2R2ZF9u YXZfc3JjX21ha2VfZHZkX2V2ZW50IChHc3REdmROYQ0KICAgICBHc3RFdmVudCAqIGV2ZW50KTsN CiAgICAgIHN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkX25hdl9zcmNfcXVlcnkgKEdzdEJhc2VTcmMg KiBiYXNlc3JjLA0KICAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsNCisgICAgIHN0YXRpYyBnYm9vbGVh biBnc3RfZHZkX25hdl9zcmNfZG9fc2VlayAoR3N0QmFzZVNyYyAqIHNyYywgR3N0U2VnbWVudCAq IHMpOw0KICAgICAgc3RhdGljIGdib29sZWFuIGdzdF9kdmRfbmF2X3NyY19pc19vcGVuIChHc3RE dmROYXZTcmMgKiBzcmMpOw0KIA0KICNpZiAwDQpAQCAtMTMyLDYgKzEzMywxMSBAQCBnc3RfZHZk X25hdl9zcmNfbWFrZV9kdmRfZXZlbnQgKEdzdER2ZE5hDQogDQogICAgICBzdGF0aWMgdm9pZCBn c3RfZHZkX25hdl9zcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwNCiAgICAg Z3BvaW50ZXIgaWZhY2VfZGF0YSk7DQorICAgICBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2ZF9uYXZf c3JjX3F1ZXJ5X3Bvc2l0aW9uIChHc3REdmROYXZTcmMgKiBzcmMsDQorICAgIEdzdEZvcm1hdCBm b3JtYXQsIGdpbnQ2NCAqIHBfdmFsKTsNCisgICAgIHN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkX25h dl9zcmNfcXVlcnlfZHVyYXRpb24gKEdzdER2ZE5hdlNyYyAqIHNyYywNCisgICAgR3N0Rm9ybWF0 IGZvcm1hdCwgZ2ludDY0ICogcF92YWwpOw0KKw0KIA0KICAgICAgc3RhdGljIGd1aW50IGdzdF9k dmRfbmF2X3NyY19zaWduYWxzW0xBU1RfU0lHTkFMXTsNCiANCkBAIC0xNjIsNiArMTY4LDEzIEBA IEdTVF9CT0lMRVJQTEFURV9GVUxMIChHc3REdmROYXZTcmMsIGdzdF8NCiAgIGdzdF9lbGVtZW50 X2NsYXNzX3NldF9kZXRhaWxzIChlbGVtZW50X2NsYXNzLCAmZ3N0X2R2ZF9uYXZfc3JjX2RldGFp bHMpOw0KIH0NCiANCitzdGF0aWMgZ2Jvb2xlYW4NCitnc3RfZHZkX25hdl9zcmNfaXNfc2Vla2Fi bGUgKEdzdEJhc2VTcmMgKiBzcmMpDQorew0KKyAgcmV0dXJuIFRSVUU7DQorfQ0KKw0KKw0KIHN0 YXRpYyB2b2lkDQogZ3N0X2R2ZF9uYXZfc3JjX2NsYXNzX2luaXQgKEdzdER2ZE5hdlNyY0NsYXNz ICoga2xhc3MpDQogew0KQEAgLTIyOSw3ICsyNDIsOCBAQCBnc3RfZHZkX25hdl9zcmNfY2xhc3Nf aW5pdCAoR3N0RHZkTmF2U3JjDQogICBnc3RiYXNlc3JjX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJV R19GVU5DUFRSIChnc3RfZHZkX25hdl9zcmNfcXVlcnkpOw0KIA0KICAgZ3N0cHVzaHNyY19jbGFz cy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kdmRfbmF2X3NyY19jcmVhdGUpOw0K LQ0KKyAgZ3N0YmFzZXNyY19jbGFzcy0+ZG9fc2VlayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rf ZHZkX25hdl9zcmNfZG9fc2Vlayk7DQorICBnc3RiYXNlc3JjX2NsYXNzLT5pc19zZWVrYWJsZSA9 IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkX25hdl9zcmNfaXNfc2Vla2FibGUpOw0KICNpZiAw DQogICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfY2xvY2sgPSBnc3RfZHZkX25hdl9zcmNfc2V0X2Ns b2NrOw0KICNlbmRpZg0KQEAgLTI0OCwxMCArMjYzLDExIEBAIGdzdF9kdmRfbmF2X3NyY19pbml0 IChHc3REdmROYXZTcmMgKiBzcmMNCiAgIHNyYy0+bGFzdF91cmkgPSBOVUxMOw0KIA0KICAgc3Jj LT5wZW5kaW5nX29mZnNldCA9IC0xOw0KLSAgc3JjLT5kaWRfc2VlayA9IEZBTFNFOw0KICAgc3Jj LT5uZXdfc2VlayA9IEZBTFNFOw0KICAgc3JjLT5zZWVrX3BlbmRpbmcgPSBGQUxTRTsNCiAgIHNy Yy0+bmVlZF9mbHVzaCA9IEZBTFNFOw0KKyAgc3JjLT51c2VfdG1hcHMgPSBGQUxTRTsNCisgIHNy Yy0+c3RpbGxfZnJhbWUgPSBGQUxTRTsNCiANCiAgIC8qIFBhdXNlIG1vZGUgaXMgaW5pdGlhbGx5 IGluYWN0aXZlLiAqLw0KICAgc3JjLT5wYXVzZV9tb2RlID0gR1NUX0RWRF9OQVZfU1JDX1BBVVNF X09GRjsNCkBAIC0yODAsNyArMjk2LDkgQEAgZ3N0X2R2ZF9uYXZfc3JjX2luaXQgKEdzdER2ZE5h dlNyYyAqIHNyYw0KICAgc3JjLT5jZWxsX3N0YXJ0ID0gMDsNCiAgIHNyYy0+cGdfc3RhcnQgPSAw Ow0KIA0KKyAgc3JjLT52bWdfZmlsZSA9IE5VTEw7DQogICBzcmMtPnZ0c19hdHRycyA9IE5VTEw7 DQorICBzcmMtPnZ0c19maWxlID0gTlVMTDsNCiAgIHNyYy0+Y3VyX3Z0cyA9IDA7DQogDQogICAv KiBhdm9pZCB1bm5lY2Vzc2FyeSBzdGFydC9zdG9wIGluIGdzdF9iYXNlX3NyY19jaGVja19nZXRf cmFuZ2UoKSAqLw0KQEAgLTMzNSwxMSArMzUzLDkgQEAgZ3N0X2R2ZF9uYXZfc3JjX3NldF9wcm9w ZXJ0eSAoR09iamVjdCAqIA0KICNpZiAwDQogICAgIGNhc2UgQVJHX1RJVExFOg0KICAgICAgIHNy Yy0+dXJpX3RpdGxlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7DQotICAgICAgc3JjLT5kaWRf c2VlayA9IFRSVUU7DQogICAgICAgYnJlYWs7DQogICAgIGNhc2UgQVJHX0NIQVBURVI6DQogICAg ICAgc3JjLT51cmlfY2hhcHRlciA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOw0KLSAgICAgIHNy Yy0+ZGlkX3NlZWsgPSBUUlVFOw0KICAgICAgIGJyZWFrOw0KICAgICBjYXNlIEFSR19BTkdMRToN CiAgICAgICBzcmMtPnVyaV9hbmdsZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOw0KQEAgLTUx NywxMSArNTMzLDMzOCBAQCBnc3RfZHZkX25hdl9zcmNfc2V0X2Nsb2NrIChHc3RFbGVtZW50ICog DQogfQ0KICNlbmRpZg0KIA0KKy8qIHVwZGF0ZSB0aGUgdGltZSBtYXAgd2hlbiB0aGUgdGl0bGUg Y2hhbmdlICovDQorc3RhdGljIGdpbnQNCitnc3RfZHZkX25hdl9zcmNfdXBkYXRlX3RtYXBzKEdz dER2ZE5hdlNyYyAqIHNyYykNCit7DQorICBpbnQzMl90IHRpdGxlLCBwYXJ0Ow0KKyAgZ2ludCB0 aXRsZV9zZXRfbnI7DQorDQorICAvKiBGSVhNRTogY2hlY2sgaWYgdGhlIHRpdGxlIHJlYWxseSBj aGFuZ2VkLCBieSBub3cgaXQncyBjYWxsZWQgb24gZXZlcnkNCisgICAqIERWRE5BVl9DRUxMX0NI QU5HRSBldmVudC4NCisgICAqLw0KKyAgaWYgKGR2ZG5hdl9jdXJyZW50X3RpdGxlX2luZm8oc3Jj LT5kdmRuYXYsICZ0aXRsZSwgJnBhcnQpICE9IERWRE5BVl9TVEFUVVNfT0spDQorICAgIGdvdG8g Y3VycmVudF90aXRsZV9pbmZvX2ZhaWxlZDsNCisNCisgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJ0 aXRsZSA9ICVkLCBwYXJ0ID0gJWQiLCB0aXRsZSwgcGFydCk7DQorDQorICAvKiBsb2FkIHRoZSBW VFMgaW5mb3JtYXRpb24gZm9yIHRoZSB0aXRsZSBzZXQgb3VyIHRpdGxlIGlzIGluICovDQorDQor ICAvKiBDbG9zZSBvbGQgdnRzIGZpbGUgKi8NCisgIGlmIChzcmMtPnZ0c19maWxlKSB7DQorICAg IGlmb0Nsb3NlIChzcmMtPnZ0c19maWxlKTsNCisgICAgc3JjLT52dHNfZmlsZSA9IE5VTEw7DQor ICB9DQorICAgDQorICAvKiBUaGVyZSBpc24ndCBhIHRpbWVtYXAgZm9yIHRoZSBtZW51cyAqLw0K KyAgaWYgKHRpdGxlIDwgMSkNCisgICAgZ290byBub190bWFwOw0KKw0KKyAgdGl0bGVfc2V0X25y ID0gc3JjLT50dF9zcnB0LT50aXRsZVt0aXRsZS0xXS50aXRsZV9zZXRfbnI7DQorICBHU1RfTE9H X09CSkVDVCAoc3JjLCAidGl0bGVzZXRuciA9ICVkIiwgdGl0bGVfc2V0X25yKTsNCisNCisgIHNy Yy0+dnRzX2ZpbGUgPSBpZm9PcGVuIChzcmMtPmR2ZCwgdGl0bGVfc2V0X25yKTsNCisgIGlmIChz cmMtPnZ0c19maWxlID09IE5VTEwpDQorICAgIGdvdG8gaWZvX29wZW5fZmFpbGVkOw0KKw0KKyAg c3JjLT52dHNfdG1hcHQgPSBzcmMtPnZ0c19maWxlLT52dHNfdG1hcHQ7DQorICBzcmMtPnZ0c19w dHRfc3JwdCA9IHNyYy0+dnRzX2ZpbGUtPnZ0c19wdHRfc3JwdDsNCisNCisgIC8qIENoZWNrIHRo YXQgdGhlIG1heCBtYXAgZW50cnkgc2VjdG9yIHNpemUgaXMgPj0gdGhlbiB0aGUgbGVuZ3RoIHJl cG9ydGVkDQorICAgKiBieSBkdmRuYXZfZ2V0X3Bvc2l0aW9uLCBhcyBsb29rcyBsaWtlIHRoaXMg ZnVuY3Rpb24gZG9lc24ndCBjb21wdXRlIA0KKyAgICogY29ycmVjdGx5IHRoZSBwb3MgYW5kIGxl bmd0aCB2YWx1ZXMuDQorICAgKi8gDQorICBndWludDMyIHBvczsNCisgIGd1aW50MzIgbGVuZ3Ro Ow0KKyAgaWYgKGR2ZG5hdl9nZXRfcG9zaXRpb24gKHNyYy0+ZHZkbmF2LCAmcG9zLCAmbGVuZ3Ro KSAhPSBEVkROQVZfU1RBVFVTX09LKSB7DQorICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAi Q2Fubm90IGdldCBzdHJlYW0gbGVuZ3RoLCAiDQorICAgICAgIndvbid0IGVuYWJsZSB0bWFwcyB1 c2UgYXMgd2UgY2Fubm90IGNoZWNrIGlmIHRoZXkncmUgaW50ZXJhY3Rpb24gd2l0aCBkdmRuYXYg aXMgcmlnaHQiKTsNCisgIH0gZWxzZSB7DQorICAgIGdpbnQgaSwgajsNCisgICAgZm9yIChpID0g MDsgaSA8IHNyYy0+dnRzX3RtYXB0LT5ucl9vZl90bWFwczsgKytpKSB7DQorICAgICAgZm9yIChq ID0gMDsgaiA8IHNyYy0+dnRzX3RtYXB0LT50bWFwW2ldLm5yX29mX2VudHJpZXM7IGorKykgew0K KyAgICAgICAgaWYgKChzcmMtPnZ0c190bWFwdC0+dG1hcFtpXS5tYXBfZW50W2pdICYgMHg3ZmZm ZmZmZikgPj0gbGVuZ3RoKQ0KKyAgICAgICAgICBzcmMtPnVzZV90bWFwcyA9IFRSVUU7DQorICAg ICAgfQ0KKyAgICB9DQorICAgIGlmIChzcmMtPnVzZV90bWFwcykgew0KKyAgICAgIEdTVF9MT0df T0JKRUNUIChzcmMsICJVc2luZyB0aW1lIG1hcHMgZm9yIHNlZWtpbmciKTsNCisgICAgfSBlbHNl IHsNCisgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIlRpbWUgbWFwcyBhcyBtYXggc2Vj dG9yIDwgdGhhbiBsZW5ndGggcmVwb3J0ZWQgYnkgZHZkbmF2OiAiDQorICAgICAgICAidG1hcCBw cm9ibGVtIG9yIGR2ZG5hdiBidWc/Iik7DQorICAgIH0NCisgIH0NCisNCisgIA0KKyAgaWYgKHNy Yy0+dnRzX3RtYXB0KSB7DQorICAgIGdpbnQgaSwgajsNCisNCisgICAgR1NUX0xPR19PQkpFQ1Qg KHNyYywgIm5yX29mX3RtYXBzID0gJWQiLCBzcmMtPnZ0c190bWFwdC0+bnJfb2ZfdG1hcHMpOw0K KyAgICBmb3IgKGkgPSAwOyBpIDwgc3JjLT52dHNfdG1hcHQtPm5yX29mX3RtYXBzOyArK2kpIHsN CisgICAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiPT09PT09PSBUYWJsZSAlZCA9PT09PT09PT09 PT09PT09PT09IiwgaSk7DQorICAgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIk9mZnNldCByZWxh dGl2ZSB0byBWVFNfVE1BUFRJOiAlZCIsDQorICAgICAgICAgIHNyYy0+dnRzX3RtYXB0LT50bWFw X29mZnNldFtpXSk7DQorICAgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIlRpbWUgdW5pdCAoc2Vj b25kcykgICAgICAgICAgOiAlZCIsDQorICAgICAgICAgIHNyYy0+dnRzX3RtYXB0LT50bWFwW2ld LnRtdSk7DQorICAgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIk51bWJlciBvZiBlbnRyaWVzICAg ICAgICAgICAgOiAlZCIsDQorICAgICAgICAgIHNyYy0+dnRzX3RtYXB0LT50bWFwW2ldLm5yX29m X2VudHJpZXMpOw0KKyAgICAgIGZvciAoaiA9IDA7IGogPCBzcmMtPnZ0c190bWFwdC0+dG1hcFtp XS5ucl9vZl9lbnRyaWVzOyBqKyspIHsNCisgICAgICAgIGd1aW50NjQgdGltZTsNCisNCisgICAg ICAgIHRpbWUgPSBzcmMtPnZ0c190bWFwdC0+dG1hcFtpXS50bXUgKiAoaiArIDEpICogR1NUX1NF Q09ORDsNCisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJUaW1lOiAlIiBHU1RfVElNRV9G T1JNQVQgIiBWT0JVICINCisgICAgICAgICAgICAiU2VjdG9yOiAlZCAlcyIsIEdTVF9USU1FX0FS R1MgKHRpbWUpLA0KKyAgICAgICAgICAgIHNyYy0+dnRzX3RtYXB0LT50bWFwW2ldLm1hcF9lbnRb al0gJiAweDdmZmZmZmZmLA0KKyAgICAgICAgICAgIChzcmMtPnZ0c190bWFwdC0+dG1hcFtpXS5t YXBfZW50W2pdID4+IDMxKSA/ICJkaXNjb250aW51aXR5IiA6ICIiKTsNCisgICAgICB9DQorICAg IH0NCisgIH0gZWxzZSB7DQorICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAibm8gdnRzX3Rt YXB0IC0gd2lsbCB1c2UgdGltZSBpbnRlcnBvbGF0aW9uIik7DQorICB9DQorDQorICByZXR1cm4g VFJVRTsNCisNCitpZm9fb3Blbl9mYWlsZWQ6DQorICB7DQorICAgIEdTVF9FTEVNRU5UX0VSUk9S IChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsDQorICAgICAgICAoXygiQ291bGQgbm90IG9wZW4g RFZEIikpLA0KKyAgICAgICAgKCJpZm9PcGVuKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVy cm5vKSkpOw0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorY3VycmVudF90aXRsZV9pbmZv X2ZhaWxlZDoNCisgIHsNCisgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIkZhaWxlZCBnZXR0aW5n IGN1cnJlbnQgdGl0bGUgaW5mb3JtYXRpb25zISIpOw0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9 DQorDQorbm9fdG1hcDoNCisgIHsNCisgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIlRpbWUgbWFw IG5vdCBhdmFpbGFibGUgZm9yIG1lbnVzIik7DQorICAgIHNyYy0+dXNlX3RtYXBzID0gRkFMU0U7 DQorICAgIHJldHVybiBGQUxTRTsNCisgIH0NCit9DQorDQorLyogRmluZCBzZWN0b3IgZnJvbSB0 aW1lIHVzaW5nIHRpbWUgbWFwIGlmIGF2YWlsYWJsZSAqLw0KKy8qIEZJWE1FOiBkbyBpbnRlcnBv bGF0aW9uIGFzIGluIGdzdF9kdmRfbmF2X3NyY19nZXRfdGltZV9mb3Jfc2VjdG9yX3RtYXAgKi8N CitzdGF0aWMgZ2ludA0KK2dzdF9kdmRfbmF2X3NyY19nZXRfc2VjdG9yX2Zyb21fdGltZV90bWFw IChHc3REdmROYXZTcmMgKiBzcmMsIEdzdENsb2NrVGltZSB0cykNCit7DQorICBnaW50IHNlY3Rv ciwgaSwgajsNCisNCisgIGlmIChzcmMtPnZ0c190bWFwdCA9PSBOVUxMIHx8IHNyYy0+dnRzX3Rt YXB0LT5ucl9vZl90bWFwcyA9PSAwKQ0KKyAgICByZXR1cm4gLTE7DQorDQorICBzZWN0b3IgPSAw Ow0KKyAgZm9yIChpID0gMDsgaSA8IHNyYy0+dnRzX3RtYXB0LT5ucl9vZl90bWFwczsgKytpKSB7 DQorICAgIGZvciAoaiA9IDA7IGogPCBzcmMtPnZ0c190bWFwdC0+dG1hcFtpXS5ucl9vZl9lbnRy aWVzOyArK2opIHsNCisgICAgICBHc3RDbG9ja1RpbWUgZW50cnlfdGltZTsNCisNCisgICAgICBl bnRyeV90aW1lID0gc3JjLT52dHNfdG1hcHQtPnRtYXBbaV0udG11ICogKGogKyAxKSAqIEdTVF9T RUNPTkQ7DQorICAgICAgaWYgKGVudHJ5X3RpbWUgPD0gdHMpIHsNCisgICAgICAgIHNlY3RvciA9 IHNyYy0+dnRzX3RtYXB0LT50bWFwW2ldLm1hcF9lbnRbal0gJiAweDdmZmZmZmZmOw0KKyAgICAg IH0NCisgICAgICBpZiAoZW50cnlfdGltZSA+PSB0cykgew0KKyAgICAgICAgcmV0dXJuIHNlY3Rv cjsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIGlmICh0cyA9PSAwKQ0KKyAgICByZXR1 cm4gMDsNCisNCisgIHJldHVybiAtMTsNCit9DQorDQorLyogRmluZCB0aW1lIGZvciBzZWN0b3Ig dXNpbmcgdGltZSBtYXAsIGRvZXMgaW50ZXJwb2xhdGlvbiAqLw0KK3N0YXRpYyBHc3RDbG9ja1Rp bWUNCitnc3RfZHZkX25hdl9zcmNfZ2V0X3RpbWVfZm9yX3NlY3Rvcl90bWFwIChHc3REdmROYXZT cmMgKiBzcmMsIGd1aW50IHNlY3RvcikNCit7DQorICBnaW50IGksIGo7DQorICBndWludCBwcmV2 X3NlY3RvciA9IDA7DQorICBndWludCBjdXJfc2VjdG9yID0gMDsNCisgIEdzdENsb2NrVGltZSB0 YXJnZXQsIGRpZmY7DQorDQorICBpZiAoc3JjLT52dHNfdG1hcHQgPT0gTlVMTCB8fCBzcmMtPnZ0 c190bWFwdC0+bnJfb2ZfdG1hcHMgPT0gMCkgew0KKyAgICByZXR1cm4gR1NUX0NMT0NLX1RJTUVf Tk9ORTsNCisgIH0NCisNCisgIGZvciAoaSA9IDA7IGkgPCBzcmMtPnZ0c190bWFwdC0+bnJfb2Zf dG1hcHM7ICsraSkgew0KKyAgICBmb3IgKGogPSAwOyBqIDwgc3JjLT52dHNfdG1hcHQtPnRtYXBb aV0ubnJfb2ZfZW50cmllczsgKytqKSB7DQorICAgICAgcHJldl9zZWN0b3IgPSBjdXJfc2VjdG9y Ow0KKyAgICAgIGN1cl9zZWN0b3IgPSBzcmMtPnZ0c190bWFwdC0+dG1hcFtpXS5tYXBfZW50W2pd ICYgMHg3ZmZmZmZmZjsNCisgICAgICBpZiAoc2VjdG9yID49IHByZXZfc2VjdG9yICYmIHNlY3Rv ciA8PSBjdXJfc2VjdG9yKSB7DQorICAgICAgICB0YXJnZXQgPSBzcmMtPnZ0c190bWFwdC0+dG1h cFtpXS50bXUgKiBqICogR1NUX1NFQ09ORDsNCisgICAgICAgIGlmIChqIDwgc3JjLT52dHNfdG1h cHQtPnRtYXBbaV0ubnJfb2ZfZW50cmllcyAtIDEpIHsNCisgICAgICAgICAgZGlmZiA9IHNyYy0+ dnRzX3RtYXB0LT50bWFwW2ldLnRtdSAqIEdTVF9TRUNPTkQgKiAoIHNlY3RvciAtIHByZXZfc2Vj dG9yKSAvICggY3VyX3NlY3RvciAtIHByZXZfc2VjdG9yKTsNCisgICAgICAgICAgdGFyZ2V0ICs9 IGRpZmY7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gdGFyZ2V0Ow0KKyAgICAgIH0NCisg ICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKHNlY3RvciA9PSAwKQ0KKyAgICByZXR1cm4gKEdzdENsb2Nr VGltZSkgMDsNCisNCisgIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOw0KK30NCisNCisvKiBG aW5kIHRpbWUgZm9yIHNlY3RvciAqLw0KK3N0YXRpYyBHc3RDbG9ja1RpbWUNCitnc3RfZHZkX25h dl9zcmNfZ2V0X3RpbWVfZm9yX3NlY3RvciAoR3N0RHZkTmF2U3JjICogc3JjLCBndWludCBzZWN0 b3IpDQorew0KKyAgR3N0Q2xvY2tUaW1lIHRpbWU7DQorDQorICBpZiAoc3JjLT51c2VfdG1hcHMp IHsNCisgICAgdGltZSA9IGdzdF9kdmRfbmF2X3NyY19nZXRfdGltZV9mb3Jfc2VjdG9yX3RtYXAg KHNyYywgc2VjdG9yKTsNCisgICAgaWYgKHRpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkNCisg ICAgICByZXR1cm4gdGltZTsNCisgIH0NCisgIC8qIEZhbGxiYWNrIHRvIGF2ZXJhZ2UgdGltZSBj YWxjdWxhdGlvbiAqLw0KKyAgdGltZSA9IChHc3RDbG9ja1RpbWUpKChmbG9hdClzZWN0b3IgLyBz cmMtPnNlY3Rvcl9sZW5ndGggKiBzcmMtPnBnY19sZW5ndGgpOw0KKw0KKyAgcmV0dXJuIHRpbWU7 DQorfQ0KKw0KKy8qIEZpbmQgc2VjdG9yIGZyb20gdGltZSAqLw0KK3N0YXRpYyBHc3RDbG9ja1Rp bWUNCitnc3RfZHZkX25hdl9zcmNfZ2V0X3NlY3Rvcl9mcm9tX3RpbWUgKEdzdER2ZE5hdlNyYyAq IHNyYywgR3N0Q2xvY2tUaW1lIHRpbWUpDQorew0KKyAgZ2ludCBzZWN0b3I7DQorDQorICBpZiAo c3JjLT51c2VfdG1hcHMpIHsNCisgICAgc2VjdG9yID0gZ3N0X2R2ZF9uYXZfc3JjX2dldF9zZWN0 b3JfZnJvbV90aW1lX3RtYXAgKHNyYywgdGltZSk7DQorICAgIGlmIChzZWN0b3IgPj0gMCkNCisg ICAgICByZXR1cm4gc2VjdG9yOw0KKyAgfQ0KKw0KKyAgLyogRmFsbGJhY2sgdG8gYXZlcmFnZSBz ZWN0b3IgY2FsY3VsYXRpb24gKi8NCisgIHNlY3RvciA9IChHc3RDbG9ja1RpbWUpKChmbG9hdCl0 aW1lIC8gc3JjLT5wZ2NfbGVuZ3RoICogc3JjLT5zZWN0b3JfbGVuZ3RoKTsNCisNCisgIHJldHVy biBzZWN0b3I7DQorfQ0KKw0KK3N0YXRpYyBnYm9vbGVhbg0KK2dzdF9kdmRfbmF2X3NyY19kb19j b252ZXJ0X3F1ZXJ5IChHc3REdmROYXZTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpDQorew0K KyAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGRlc3RfZm9ybWF0Ow0KKyAgZ2Jvb2xlYW4gcmV0ID0g RkFMU0U7DQorICBnaW50NjQgc3JjX3ZhbCwgZGVzdF92YWwgPSAtMTsNCisNCisgIGdzdF9xdWVy eV9wYXJzZV9jb252ZXJ0IChxdWVyeSwgJnNyY19mb3JtYXQsICZzcmNfdmFsLCAmZGVzdF9mb3Jt YXQsIE5VTEwpOw0KKw0KKyAgaWYgKHNyY19mb3JtYXQgPT0gZGVzdF9mb3JtYXQpIHsNCisgICAg ZGVzdF92YWwgPSBzcmNfdmFsOw0KKyAgICByZXQgPSBUUlVFOw0KKyAgICBnb3RvIGRvbmU7DQor ICB9DQorICANCisgIC8qIEZJWE1FOiBoYW5kbGUgYWxzbyBjaGFwdGVyIGZvcm1hdCAqLw0KKyAg LyogRm9ybWF0cyB0byBjb25zaWRlcjogVElNRSwgREVGQVVMVCwgQllURVMsIHRpdGxlLCBjaGFw dGVyLCBzZWN0b3IuDQorICAgKiBOb3RlOiB0aXRsZSBhbmQgY2hhcHRlciBhcmUgY291bnRlZCBh cyBzdGFydGluZyBmcm9tIDAgaGVyZSwganVzdCBsaWtlDQorICAgKiBpbiB0aGUgY29udGV4dCBv ZiBzZWVrIGV2ZW50cy4gQW5vdGhlciBub3RlOiBERUZBVUxUIGZvcm1hdCBpcyB1bmRlZmluZWQg Ki8NCisNCisgIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsNCisgICAgc3Jj X2Zvcm1hdCA9IHNlY3Rvcl9mb3JtYXQ7DQorICAgIHNyY192YWwgLz0gRFZEX1NFQ1RPUl9TSVpF Ow0KKyAgfQ0KKw0KKyAgaWYgKHNyY19mb3JtYXQgPT0gc2VjdG9yX2Zvcm1hdCkgew0KKyAgICAv KiBTRUNUT1IgPT4geHl6ICovDQorICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBHU1RfRk9STUFUX1RJ TUUgJiYgc3JjX3ZhbCA8IEdfTUFYVUlOVCkgew0KKyAgICAgIGRlc3RfdmFsID0gZ3N0X2R2ZF9u YXZfc3JjX2dldF90aW1lX2Zvcl9zZWN0b3Ioc3JjLCBzcmNfdmFsKTsNCisgICAgICByZXQgPSAo ZGVzdF92YWwgPj0gMCk7DQorICAgIH0gZWxzZSBpZiAoZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1B VF9CWVRFUykgew0KKyAgICAgIGRlc3RfdmFsID0gc3JjX3ZhbCAqIERWRF9TRUNUT1JfU0laRTsN CisgICAgICByZXQgPSBUUlVFOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIHJldCA9IEZBTFNFOw0K KyAgICB9DQorICB9IGVsc2UgaWYgKHNyY19mb3JtYXQgPT0gdGl0bGVfZm9ybWF0KSB7DQorICAg IC8qIFRJVExFID0+IHh5eiAqLw0KKyAgICBpZiAoZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9U SU1FKSB7DQorICAgICAgLyogbm90IHJlYWxseSB0cnVlLCBidXQgd2UgdXNlIHRoaXMgdG8gdHJp Y2sgdGhlIGJhc2Ugc291cmNlIGludG8NCisgICAgICAgKiBoYW5kbGluZyBzZWVrcyBpbiB0aXRs ZS1mb3JtYXQgZm9yIHVzICh0aGUgc291cmNlIHdvbid0IGtub3cgdGhhdA0KKyAgICAgICAqIHdl IGNoYW5nZWQgdGhlIHRpdGxlIGluIHRoaXMgY2FzZSkgKGNoYW5naW5nIHRpdGxlcyBzaG91bGQg cmVhbGx5DQorICAgICAgICogYmUgZG9uZSB3aXRoIGFuIGludGVyZmFjZSByYXRoZXIgdGhhbiBh IHNlZWssIGJ1dCBmb3Igbm93IHdlJ3JlDQorICAgICAgICogc3R1Y2sgd2l0aCB0aGlzIG1lY2hh bmlzbS4gRml4IGluIDAuMTEpICovDQorICAgICAgZGVzdF92YWwgPSAoR3N0Q2xvY2tUaW1lKSAw Ow0KKyAgICAgIHJldCA9IFRSVUU7DQorICAgIH0gZWxzZSB7DQorICAgICAgcmV0ID0gRkFMU0U7 DQorICAgIH0NCisgIH0gZWxzZSBpZiAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsN CisgICAgLyogVElNRSA9PiBzZWN0b3JzICovDQorICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBzZWN0 b3JfZm9ybWF0IHx8IGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsNCisgICAgICBk ZXN0X3ZhbCA9IGdzdF9kdmRfbmF2X3NyY19nZXRfc2VjdG9yX2Zyb21fdGltZShzcmMsIHNyY192 YWwpOw0KKyAgICAgIHJldCA9IChkZXN0X3ZhbCA+PSAwKTsNCisgICAgICAvKiBUSU1FID0+IGJ5 dGVzICovDQorICAgICAgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsNCisg ICAgICAgIGRlc3RfdmFsICo9IERWRF9WSURFT19MQl9MRU47DQorICAgICAgfQ0KKyAgICB9DQor ICB9IGVsc2Ugew0KKyAgICByZXQgPSBGQUxTRTsNCisgIH0NCisNCitkb25lOg0KKw0KKyAgaWYg KHJldCkgew0KKyAgICBnc3RfcXVlcnlfc2V0X2NvbnZlcnQgKHF1ZXJ5LCBzcmNfZm9ybWF0LCBz cmNfdmFsLCBkZXN0X2Zvcm1hdCwgZGVzdF92YWwpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIHJldDsN Cit9DQorDQorLyogRklYTUU6IGhhbmRsZSBhbHNvIHRpdGxlLCBjaGFwdGVyLCBhbmdsZSBmb3Jt YXQgKi8NCitzdGF0aWMgZ2Jvb2xlYW4NCitnc3RfZHZkX25hdl9zcmNfZG9fc2VlayAoR3N0QmFz ZVNyYyAqIGJhc2VzcmMsIEdzdFNlZ21lbnQgKiBzKQ0KK3sNCisgIEdzdER2ZE5hdlNyYyAqc3Jj Ow0KKw0KKyAgc3JjID0gR1NUX0RWRF9OQVZfU1JDIChiYXNlc3JjKTsNCisNCisgIC8qIE9uIHRo ZSBmaXJzdCBjYWxsIG9mIGRvX3NlZWsgaW4gZ3N0YmFzZXNyYyBkdXJpbmcgZ3N0X2Jhc2Vfc3Jj X2FjdGl2YXRlX3B1c2ggdGhlIGR2ZG5hdiB2bQ0KKyAgICogaXNuJ3QgcnVubmluZy4gUmV0dXJu IFRSVUUgYXMgdGhlIHNlZWsgd2FzIGRvbmUuDQorICAgKi8NCisgIGlmIChzcmMtPmZpcnN0X3Nl ZWsgPT0gVFJVRSkgew0KKyAgICAgIHNyYy0+Zmlyc3Rfc2VlayA9IEZBTFNFOw0KKyAgICAgIHJl dHVybiBUUlVFOw0KKyAgfQ0KKw0KKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU2Vla2luZyB0 byAlczogJTEyIiBHX0dJTlQ2NF9GT1JNQVQsDQorICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAo cy0+Zm9ybWF0KSwgcy0+bGFzdF9zdG9wKTsNCisNCisgIGlmIChzLT5mb3JtYXQgPT0gc2VjdG9y X2Zvcm1hdCB8fCBzLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyB8fCBzLT5mb3JtYXQgPT0g R1NUX0ZPUk1BVF9USU1FKSB7DQorICAgIGdpbnQgc2VjdG9yID0gMDsNCisNCisgICAgLyogQ29u dmVydCBpbiBzZWN0b3IgZm9ybWF0ICovDQorICAgIGlmKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFU X0JZVEVTKSB7DQorICAgICAgc2VjdG9yID0gcy0+bGFzdF9zdG9wIC8gRFZEX1NFQ1RPUl9TSVpF Ow0KKyAgICB9IGVsc2UgaWYgKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsNCisgICAg ICBzZWN0b3IgPSBnc3RfZHZkX25hdl9zcmNfZ2V0X3NlY3Rvcl9mcm9tX3RpbWUgKHNyYywgcy0+ bGFzdF9zdG9wKTsNCisgICAgfSANCisNCisgICAgaWYgKGR2ZG5hdl9zZWN0b3Jfc2VhcmNoIChz cmMtPmR2ZG5hdiwgc2VjdG9yICwgU0VFS19TRVQpICE9IERWRE5BVl9TVEFUVVNfT0spIHsNCisg ICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZWVrIHRvICVzICVkIGZhaWxlZCIsIGdzdF9m b3JtYXRfZ2V0X25hbWUgKHMtPmZvcm1hdCksIHMtPmxhc3Rfc3RvcCk7DQorICAgICAgcmV0dXJu IEZBTFNFOw0KKyAgICB9DQorICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJzZWVrIHRvICVzICVk IG9rIiwgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAocy0+Zm9ybWF0KSwgcy0+bGFzdF9zdG9wKTsNCisg IA0KKyAgICB9IGVsc2Ugew0KKyAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOw0K KyAgfQ0KKyAgcmV0dXJuIFRSVUU7DQorfQ0KKw0KKw0KIHN0YXRpYyBnYm9vbGVhbg0KIGdzdF9k dmRfbmF2X3NyY190Y2Ffc2VlayAoR3N0RHZkTmF2U3JjICogc3JjLCBnaW50IHRpdGxlLCBnaW50 IGNoYXB0ZXIsDQogICAgIGdpbnQgYW5nbGUpDQogew0KLSAgaW50IHRpdGxlcywgcHJvZ3JhbXMs IGN1cmFuZ2xlLCBhbmdsZXM7DQorICBpbnQgdGl0bGVzLCBjaGFwdGVycywgY3VyYW5nbGUsIGFu Z2xlczsNCiANCiAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzcmMgIT0gTlVMTCwgRkFMU0UpOw0K ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNyYy0+ZHZkbmF2ICE9IE5VTEwsIEZBTFNFKTsNCkBA IC01NTQsMTQgKzg5NywxNCBAQCBnc3RfZHZkX25hdl9zcmNfdGNhX3NlZWsgKEdzdER2ZE5hdlNy YyAqDQogICB9DQogDQogICAvKiBNYWtlIHN1cmUgdGhlIGNoYXB0ZXIgbnVtYmVyIGlzIHZhbGlk IGZvciB0aGlzIHRpdGxlICovDQotICBpZiAoZHZkbmF2X2dldF9udW1iZXJfb2ZfdGl0bGVzIChz cmMtPmR2ZG5hdiwgJnByb2dyYW1zKQ0KKyAgaWYgKGR2ZG5hdl9nZXRfbnVtYmVyX29mX3BhcnRz IChzcmMtPmR2ZG5hdiwgdGl0bGUsICZjaGFwdGVycykNCiAgICAgICAhPSBEVkROQVZfU1RBVFVT X09LKSB7DQogICAgIEdTVF9FUlJPUiAoImR2ZG5hdl9nZXRfbnVtYmVyX29mX3Byb2dyYW1zOiAl cyIsDQogICAgICAgICBkdmRuYXZfZXJyX3RvX3N0cmluZyAoc3JjLT5kdmRuYXYpKTsNCiAgICAg cmV0dXJuIEZBTFNFOw0KICAgfQ0KLSAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJ0aGVyZSBhcmUg JWQgY2hhcHRlcnMgaW4gdGhpcyB0aXRsZSIsIHByb2dyYW1zKTsNCi0gIGlmIChjaGFwdGVyIDwg MCB8fCBjaGFwdGVyID4gcHJvZ3JhbXMpIHsNCisgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAidGhl cmUgYXJlICVkIGNoYXB0ZXJzIGluIHRoaXMgdGl0bGUiLCBjaGFwdGVycyk7DQorICBpZiAoY2hh cHRlciA8IDAgfHwgY2hhcHRlciA+IGNoYXB0ZXJzKSB7DQogICAgIEdTVF9FUlJPUl9PQkpFQ1Qg KHNyYywgImludmFsaWQgY2hhcHRlciAlZCIsIGNoYXB0ZXIpOw0KICAgICByZXR1cm4gRkFMU0U7 DQogICB9DQpAQCAtNTk5LDcgKzk0Miw2IEBAIGdzdF9kdmRfbmF2X3NyY190Y2Ffc2VlayAoR3N0 RHZkTmF2U3JjICoNCiAgICAgcmV0dXJuIEZBTFNFOw0KICAgfQ0KIA0KLSAgc3JjLT5kaWRfc2Vl ayA9IFRSVUU7DQogDQogICByZXR1cm4gVFJVRTsNCiB9DQpAQCAtNzQxLDcgKzEwODMsOCBAQCBn c3RfZHZkX25hdl9zcmNfdXBkYXRlX2hpZ2hsaWdodCAoR3N0RHZkDQogICAgIHNyYy0+YnV0dG9u ID0gYnV0dG9uOw0KIA0KICAgICBHU1RfREVCVUcgKCJTZW5kaW5nIGR2ZC1zcHUtaGlnaGxpZ2h0 IGZvciBidXR0b24gJWQiLCBidXR0b24pOw0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9C QVNFX1NSQ19QQUQgKHNyYyksIGV2ZW50KTsNCisgICAgaW50IHJldCA9IGdzdF9wYWRfcHVzaF9l dmVudCAoR1NUX0JBU0VfU1JDX1BBRCAoc3JjKSwgZXZlbnQpOw0KKyAgICBHU1RfREVCVUcgKCJF bmQgU2VuZGluZyBkdmQtc3B1LWhpZ2hsaWdodCBmb3IgYnV0dG9uICVkLCByZXQ6ICVkIiwgYnV0 dG9uLCByZXQpOw0KICAgfQ0KIH0NCiANCkBAIC0xMjUyLDYgKzE1OTUsMTEgQEAgZ3N0X2R2ZF9u YXZfc3JjX3Byb2Nlc3NfbmV4dF9ibG9jayAoR3N0RA0KICAgICByZXR1cm4gR1NUX0ZMT1dfRVJS T1I7DQogICB9DQogDQorICAvKiBJZiB0aGUgbmV4dCBibG9jayBpcyBub3QgRFZETkFWX1NUSUxM X0ZSQU1FIHdlIGNhbiBzZWVrICovDQorICBpZiAoZXZlbnQgIT0gRFZETkFWX1NUSUxMX0ZSQU1F KSB7DQorICAgIHNyYy0+c3RpbGxfZnJhbWUgPSBGQUxTRTsNCisgIH0gDQorDQogICBzd2l0Y2gg KGV2ZW50KSB7DQogICAgIGNhc2UgRFZETkFWX05PUDoNCiAgICAgICBicmVhazsNCkBAIC0xMjYx LDcgKzE2MDksOSBAQCBnc3RfZHZkX25hdl9zcmNfcHJvY2Vzc19uZXh0X2Jsb2NrIChHc3REDQog ICAgICAgYnJlYWs7DQogICAgIH0NCiAgICAgY2FzZSBEVkROQVZfU1RJTExfRlJBTUU6ew0KKyAg ICAgIHNyYy0+c3RpbGxfZnJhbWUgPSBUUlVFOw0KICAgICAgIGR2ZG5hdl9zdGlsbF9ldmVudF90 ICppbmZvID0gKGR2ZG5hdl9zdGlsbF9ldmVudF90ICopIGRhdGE7DQorICAgICAgICBnc3RfZHZk X25hdl9zcmNfcHJpbnRfZXZlbnQgKHNyYywgZGF0YSwgZXZlbnQsIGxlbik7DQogDQogICAgICAg aWYgKHNyYy0+cGF1c2VfbW9kZSA9PSBHU1RfRFZEX05BVl9TUkNfUEFVU0VfT0ZGKSB7DQogICAg ICAgICBnc3RfZHZkX25hdl9zcmNfcHJpbnRfZXZlbnQgKHNyYywgZGF0YSwgZXZlbnQsIGxlbik7 DQpAQCAtMTI3NCwxMiArMTYyNCwxMSBAQCBnc3RfZHZkX25hdl9zcmNfcHJvY2Vzc19uZXh0X2Js b2NrIChHc3REDQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBzcmMtPnBhdXNlX21vZGUg PSBHU1RfRFZEX05BVl9TUkNfUEFVU0VfTElNSVRFRDsNCiAgICAgICAgICAgc3JjLT5wYXVzZV9y ZW1haW4gPSBpbmZvLT5sZW5ndGggKiBHU1RfU0VDT05EOw0KLS8qIEZJWE1FICovDQotI2lmIDAN CisgICAgICAgICAgZ2ludDY0IHZhbDsNCisgICAgICAgICAgZ3N0X2R2ZF9uYXZfc3JjX3F1ZXJ5 X3Bvc2l0aW9uIChzcmMsIEdTVF9GT1JNQVRfVElNRSwgJnZhbCk7DQogICAgICAgICAgIEdTVF9J TkZPX09CSkVDVCAoc3JjLA0KLSAgICAgICAgICAgICAgInN0YXJ0aW5nIGxpbWl0ZWQgcGF1c2U6 ICVkIHNlY29uZHMgYXQgJWxsdSIsDQotICAgICAgICAgICAgICBpbmZvLT5sZW5ndGgsIGdzdF9l bGVtZW50X2dldF90aW1lIChHU1RfRUxFTUVOVCAoc3JjKSkpOw0KLSNlbmRpZg0KKyAgICAgICAg ICAgICAgInN0YXJ0aW5nIGxpbWl0ZWQgcGF1c2U6ICVkIHNlY29uZHMgYXQgJSIgR1NUX1RJTUVf Rk9STUFULA0KKyAgICAgICAgICAgICAgaW5mby0+bGVuZ3RoLCBHU1RfVElNRV9BUkdTKHZhbCkp Ow0KICAgICAgICAgfQ0KIA0KICAgICAgICAgLyogRm9yIHRoZSBtb21lbnQsIHNlbmQgdGhlIGZp cnN0IGVtcHR5IGV2ZW50IHRvIGxldA0KQEAgLTEyOTUsMjIgKzE2NDUsMTUgQEAgZ3N0X2R2ZF9u YXZfc3JjX3Byb2Nlc3NfbmV4dF9ibG9jayAoR3N0RA0KIA0KICAgICAgIGlmIChzcmMtPnBhdXNl X21vZGUgPT0gR1NUX0RWRF9OQVZfU1JDX1BBVVNFX1VOTElNSVRFRCB8fA0KICAgICAgICAgICBz cmMtPnBhdXNlX3JlbWFpbiA+IDApIHsNCi0vKiBGSVhNRSAqLw0KLSNpZiAwDQotICAgICAgICBH c3RFdmVudCAqZXZlbnQ7DQogDQotICAgICAgICAvKiBTZW5kIGEgZmlsbGVyIGV2ZW50IHRvIGtl ZXAgdGhlIHBpcGVsaW5lIGdvaW5nICovDQotICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdf ZmlsbGVyX3N0YW1wZWQgKEdTVF9DTE9DS19USU1FX05PTkUsDQotICAgICAgICAgICAgTUlOIChz cmMtPnBhdXNlX3JlbWFpbiwgRFZEX05BVl9TUkNfUEFVU0VfSU5URVJWQUwpKTsNCi0gICAgICAg IHNlbmRfZGF0YSA9IEdTVF9EQVRBIChldmVudCk7DQorICAgICAgICBHU1RfREVCVUdfT0JKRUNU IChzcmMsICJzbGVlcGluZyAlZCBkdXJpbmcgc3RpbGwgZnJhbWUiLCBHU1RfRFZEX05BVl9TUkNf UEFVU0VfSU5URVJWQUwpOw0KKyAgICAgICAgR3N0Q2xvY2sqIHN5c3RlbV9jbG9jayA9IGdzdF9z eXN0ZW1fY2xvY2tfb2J0YWluKCk7DQorICAgICAgICBHc3RDbG9ja1RpbWUgY3VyX3RpbWUgPSBn c3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUoc3lzdGVtX2Nsb2NrKTsNCisgICAgICAgIEdzdENs b2NrSUQgaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChzeXN0ZW1fY2xvY2ssIGN1 cl90aW1lICsgR1NUX0RWRF9OQVZfU1JDX1BBVVNFX0lOVEVSVkFMKTsNCisgICAgICAgIGdzdF9j bG9ja19pZF93YWl0IChpZCwgTlVMTCk7DQorICAgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlk KTsNCisgICAgICAgIA0KIA0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLA0KLSAgICAg ICAgICAgICJQYXVzZSBtb2RlICVkLCBTZW5kaW5nIGZpbGxlciBhdCAlIiBHX0dVSU5UNjRfRk9S TUFUDQotICAgICAgICAgICAgIiwgZHVyICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCByZW1haW4gJSIg R19HSU5UNjRfRk9STUFULA0KLSAgICAgICAgICAgIHNyYy0+cGF1c2VfbW9kZSwgZ3N0X2VsZW1l bnRfZ2V0X3RpbWUgKEdTVF9FTEVNRU5UIChzcmMpKSwNCi0gICAgICAgICAgICBNSU4gKHNyYy0+ cGF1c2VfcmVtYWluLCBEVkRfTkFWX1NSQ19QQVVTRV9JTlRFUlZBTCksDQotICAgICAgICAgICAg c3JjLT5wYXVzZV9yZW1haW4pOw0KLSNlbmRpZg0KICAgICAgICAgaWYgKHNyYy0+cGF1c2VfbW9k ZSA9PSBHU1RfRFZEX05BVl9TUkNfUEFVU0VfTElNSVRFRCkgew0KICAgICAgICAgICBpZiAoc3Jj LT5wYXVzZV9yZW1haW4gPCBHU1RfRFZEX05BVl9TUkNfUEFVU0VfSU5URVJWQUwpDQogICAgICAg ICAgICAgc3JjLT5wYXVzZV9yZW1haW4gPSAwOw0KQEAgLTEzMjIsNyArMTY2NSw2IEBAIGdzdF9k dmRfbmF2X3NyY19wcm9jZXNzX25leHRfYmxvY2sgKEdzdEQNCiAgICAgICAgICAqIGFkdmFuY2lu ZyAqLw0KICAgICAgICAgaWYgKHNyYy0+cGF1c2VfbW9kZSA9PSBHU1RfRFZEX05BVl9TUkNfUEFV U0VfVU5MSU1JVEVEIHx8DQogICAgICAgICAgICAgc3JjLT5wYXVzZV9yZW1haW4gPiAwKQ0KLSAg ICAgICAgICBzcmMtPmRpZF9zZWVrID0gVFJVRTsNCiANCiAgICAgICAgIGJyZWFrOw0KICAgICAg IH0gZWxzZSB7DQpAQCAtMTMzMiw4ICsxNjc0LDggQEAgZ3N0X2R2ZF9uYXZfc3JjX3Byb2Nlc3Nf bmV4dF9ibG9jayAoR3N0RA0KICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgImR2 ZG5hdl9zdGlsbF9za2lwIGZhaWxlZDogJXMiLA0KICAgICAgICAgICAgICAgZHZkbmF2X2Vycl90 b19zdHJpbmcgKHNyYy0+ZHZkbmF2KSk7DQogICAgICAgICB9DQotICAgICAgICAvKiBTY2hlZHVs ZSBhIGRpc2NvbnQgdG8gcmVzZXQgdGhlIHRpbWUgKi8NCi0gICAgICAgIHNyYy0+ZGlkX3NlZWsg PSBUUlVFOw0KKyAgICAgICAgLyogRmx1c2ggdG8gZW5zdXJlIHRoYXQgZGF0YSBhZnRlciB0aGUg d2FpdCBpcyBwbGF5ZWQgY29ycmVjdGx5ICovDQorICAgICAgICBzcmMtPm5lZWRfZmx1c2ggPSBU UlVFOw0KICAgICAgIH0NCiAgICAgICBicmVhazsNCiAgICAgfQ0KQEAgLTEzNzgsNyArMTcyMCwx NyBAQCBnc3RfZHZkX25hdl9zcmNfcHJvY2Vzc19uZXh0X2Jsb2NrIChHc3REDQogICAgICAgICAg ICIgY2VsbF9zdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcGdfc3RhcnQgJSIgR1NUX1RJTUVf Rk9STUFULA0KICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzcmMtPnBnY19sZW5ndGgpLA0KICAg ICAgICAgICBHU1RfVElNRV9BUkdTIChzcmMtPmNlbGxfc3RhcnQpLCBHU1RfVElNRV9BUkdTIChz cmMtPnBnX3N0YXJ0KSk7DQorDQorICAgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGxlbmd0aCBp biBzZWN0b3JzICovDQorICAgICAgZ3VpbnQzMiBwb3M7DQorICAgICAgaWYgKGR2ZG5hdl9nZXRf cG9zaXRpb24gKHNyYy0+ZHZkbmF2LCAmcG9zLCAmc3JjLT5zZWN0b3JfbGVuZ3RoKSAhPSBEVkRO QVZfU1RBVFVTX09LKSANCisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiQ2Fubm90 IGdldCBuZXcgc3RyZWFtIGxlbmd0aCBhZnRlciBEVkROQVZfQ0VMTF9DSEFOR0UiKTsNCisNCisg ICAgICAvKiBVcGRhdGUgdGhlIHRpbWUgbWFwcyAqLw0KKyAgICAgIGdzdF9kdmRfbmF2X3NyY191 cGRhdGVfdG1hcHMgKHNyYyk7DQorDQogICAgICAgZ3N0X2R2ZF9uYXZfc3JjX3VwZGF0ZV9zdHJl YW1pbmZvIChzcmMpOw0KKw0KICAgICAgIGJyZWFrOw0KICAgICB9DQogICAgIGNhc2UgRFZETkFW X05BVl9QQUNLRVQ6ew0KQEAgLTEzOTcsMTEgKzE3NDksMTUgQEAgZ3N0X2R2ZF9uYXZfc3JjX3By b2Nlc3NfbmV4dF9ibG9jayAoR3N0RA0KIA0KICAgICAgIC8qIFNlbmQgYSBkdmQgbmF2IHBhY2tl dCBldmVudC4gKi8NCiAgICAgICBnc3RfZHZkX25hdl9zcmNfcHVzaF9kdmRfbmF2X3BhY2tldF9l dmVudCAoc3JjLCBwY2kpOw0KKw0KKyAgICAgIC8qIFRoZSBOQVYgcGFja2V0IGNvbnRhaW5zIGFs c28gZGF0YSwgc28gc2VuZCBpdCAqLw0KKyAgICAgICpwX2J1ZiA9IHNyYy0+Y3VyX2J1ZjsNCisg ICAgICBzcmMtPmN1cl9idWYgPSBOVUxMOw0KICAgICAgIGJyZWFrOw0KICAgICB9DQogICAgIGNh c2UgRFZETkFWX1NQVV9DTFVUX0NIQU5HRTp7DQogICAgICAgLyogRklYTUU6IGRvZXMgdGhpcyB3 b3JrIG9uIDY0LWJpdC9iaWctZW5kaWFuIG1hY2hpbmVzPyAodHBtKSAqLw0KLSAgICAgIGdzdF9k dmRfbmF2X3NyY19wdXNoX2NsdXRfY2hhbmdlX2V2ZW50IChzcmMsIChndWludCAqKSBkYXRhKTsN CisgICAgICAvL2dzdF9kdmRfbmF2X3NyY19wdXNoX2NsdXRfY2hhbmdlX2V2ZW50IChzcmMsIChn dWludCAqKSBkYXRhKTsNCiAgICAgICBicmVhazsNCiAgICAgfQ0KICAgICBjYXNlIERWRE5BVl9W VFNfQ0hBTkdFOnsNCkBAIC0xNTA0LDYgKzE4NjEsOCBAQCBnc3RfZHZkX25hdl9zcmNfcHJvY2Vz c19uZXh0X2Jsb2NrIChHc3REDQogDQogICAgICAgc3JjLT5idXR0b24gPSAwOw0KICAgICAgIHNy Yy0+cGF1c2VfbW9kZSA9IEdTVF9EVkRfTkFWX1NSQ19QQVVTRV9PRkY7DQorICAgICAgLyogSWYg c2Vla2luZyB0aGUgZmx1c2ggaXMgYWxyZWFkeSBzZW50IGJ5IHRoZSBiYXNlc3JjIHBhcmVudCBj bGFzcyAqLw0KKyAgICAgIGlmICghc3JjLT5zZWVrX3BlbmRpbmcpDQogICAgICAgc3JjLT5uZWVk X2ZsdXNoID0gVFJVRTsNCiAgICAgICAvKiB3YXMgY29tbWVudGVkIG91dCBhbHJlYWR5OiAqLw0K ICAgICAgIC8qIHNlbmRfZGF0YSA9IEdTVF9EQVRBIChnc3RfZXZlbnRfbmV3X2ZsdXNoICgpKTsg Ki8NCkBAIC0xNTQ4LDM2ICsxOTA3LDEwIEBAIGdzdF9kdmRfbmF2X3NyY19jcmVhdGUgKEdzdFB1 c2hTcmMgKiBwdXMNCiAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInNlbmRpbmcgZmx1c2gi KTsNCiAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9CQVNFX1NSQ19QQUQgKHNyYyksIGdz dF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOw0KICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAo R1NUX0JBU0VfU1JDX1BBRCAoc3JjKSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICgpKTsNCi0g ICAgICBnc3RfZHZkX25hdl9zcmNfdXBkYXRlX2hpZ2hsaWdodCAoc3JjLCBUUlVFKTsNCi0gICAg fQ0KLQ0KLSAgICBpZiAoc3JjLT5wYXVzZV9tb2RlID09IEdTVF9EVkRfTkFWX1NSQ19QQVVTRV9P RkYpIHsNCi0vKiBGSVhNRSAqLw0KLSAgICAgIGlmIChzcmMtPmRpZF9zZWVrKSB7DQotICAgICAg ICBHc3RFdmVudCAqZXZlbnQ7DQotDQotICAgICAgICBzcmMtPmRpZF9zZWVrID0gRkFMU0U7DQot ICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInNlbmRpbmcgbmV3c2VnbWVudCBldmVudCB3 aXRoIG9mZnNldCAlIg0KLSAgICAgICAgICAgIEdfR0lOVDY0X0ZPUk1BVCwgc3JjLT5wZW5kaW5n X29mZnNldCk7DQotDQotICAgICAgICBpZiAoc3JjLT5wZW5kaW5nX29mZnNldCAhPSAtMSkgew0K LSAgICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCAxLjAs IEdTVF9GT1JNQVRfQllURVMsDQotICAgICAgICAgICAgICBzcmMtPnBlbmRpbmdfb2Zmc2V0LCAt MSwgc3JjLT5wZW5kaW5nX29mZnNldCk7DQotICAgICAgICAgIHNyYy0+cGVuZGluZ19vZmZzZXQg PSAtMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgIC8qIGdfd2FybmluZyAoImR2ZG5h djogRklYTUUgLSB3aGF0IG5ld3NlZ21lbnQgdG8gc2VuZCBoZXJlPyIpOyAqLw0KLSAgICAgICAg ICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCAxLjAsIEdTVF9GT1JN QVRfQllURVMsDQotICAgICAgICAgICAgICAwLCAtMSwgMCk7DQotICAgICAgICAgIC8qIHdhczog Z3N0X2V2ZW50X25ld19kaXNjb250aW51b3VzIChGQUxTRSwgR1NUX0ZPUk1BVF9VTkRFRklORUQp OyAqLw0KLSAgICAgICAgfQ0KIA0KLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFT RV9TUkNfUEFEIChzcmMpLCBldmVudCk7DQotDQotICAgICAgICAvKiBTZW50IGEgZGlzY29udCwg bWFrZSBzdXJlIHRvIGVuYWJsZSBoaWdobGlnaHQgKi8NCi0gICAgICAgIHNyYy0+YnV0dG9uID0g MDsNCiAgICAgICAgIGdzdF9kdmRfbmF2X3NyY191cGRhdGVfaGlnaGxpZ2h0IChzcmMsIFRSVUUp Ow0KICAgICAgIH0NCi0gICAgfQ0KKw0KICAgICByZXQgPSBnc3RfZHZkX25hdl9zcmNfcHJvY2Vz c19uZXh0X2Jsb2NrIChzcmMsIHBfYnVmKTsNCiAgIH0NCiAgIHdoaWxlIChyZXQgPT0gR1NUX0ZM T1dfT0sgJiYgKnBfYnVmID09IE5VTEwpOw0KQEAgLTE1OTksNiArMTkzMiwyMyBAQCBnc3RfZHZk X25hdl9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlDQogICAgIHJldHVybiBGQUxTRTsNCiAg IH0NCiANCisgIC8qIExvYWQgdGhlIHZpZGVvIG1hbmFnZXIgdG8gZmluZCBvdXQgdGhlIGluZm9y bWF0aW9uIGFib3V0IHRoZSB0aXRsZXMgKi8NCisgIHNyYy0+ZHZkID0gRFZET3BlbiAoc3JjLT5k ZXZpY2UpOw0KKyAgaWYgKCFzcmMtPmR2ZCkNCisgICAgcmV0dXJuIEZBTFNFOw0KKyANCisgIEdT VF9ERUJVR19PQkpFQ1QgKHNyYywgIkxvYWRpbmcgVk1HIGluZm8iKTsNCisNCisgIGlmICghKHNy Yy0+dm1nX2ZpbGUgPSBpZm9PcGVuIChzcmMtPmR2ZCwgMCkpKQ0KKyAgew0KKyAgICBHU1RfRUxF TUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELA0KKyAgICAgICAgKF8oIkNvdWxk IG5vdCBvcGVuIERWRCIpKSwNCisgICAgICAgICgiaWZvT3BlbigpIGZhaWxlZDogJXMiLCBnX3N0 cmVycm9yIChlcnJubykpKTsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgc3JjLT50 dF9zcnB0ID0gc3JjLT52bWdfZmlsZS0+dHRfc3JwdDsNCisNCiAgIGlmIChkdmRuYXZfb3BlbiAo JnNyYy0+ZHZkbmF2LCBzcmMtPmRldmljZSkgIT0gRFZETkFWX1NUQVRVU19PSykgew0KICAgICBH U1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoTlVMTCksDQogICAg ICAgICAoXygiRmFpbGVkIHRvIG9wZW4gRFZEIGRldmljZSAnJXMnLiIpLCBzcmMtPmRldmljZSkp Ow0KQEAgLTE2NjIsNyArMjAxMiw4IEBAIGdzdF9kdmRfbmF2X3NyY19zdGFydCAoR3N0QmFzZVNy YyAqIGJhc2UNCiAgIH0NCiANCiAgIHNyYy0+c3RyZWFtaW5mbyA9IE5VTEw7DQotICBzcmMtPmRp ZF9zZWVrID0gVFJVRTsNCisgIHNyYy0+dXNlX3RtYXBzID0gRkFMU0U7DQorICBzcmMtPmZpcnN0 X3NlZWsgPSBUUlVFOw0KIA0KICAgcmV0dXJuIFRSVUU7DQogfQ0KQEAgLTE2NzgsNiArMjAyOSwx NSBAQCBnc3RfZHZkX25hdl9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJhc2VzDQogICAgIHJldHVy biBGQUxTRTsNCiAgIH0NCiANCisgIC8qIENsb3NlIG9sZCB2dHMgZmlsZSBpZiBvcGVuZWQgKi8N CisgIGlmIChzcmMtPnZ0c19maWxlKQ0KKyAgICBpZm9DbG9zZSAoc3JjLT52dHNfZmlsZSk7DQor DQorICAvKiBDbG9zZSB0aGUgdmlkZW8gbWFuYWdlciAqLw0KKyAgaWZvQ2xvc2UgKHNyYy0+dm1n X2ZpbGUpOw0KKw0KKyAgRFZEQ2xvc2UgKHNyYy0+ZHZkKTsNCisNCiAgIHJldHVybiBUUlVFOw0K IH0NCiANCkBAIC0xNzI0LDcgKzIwODQsNiBAQCBnc3RfZHZkX25hdl9zcmNfaGFuZGxlX25hdmln YXRpb25fZXZlbnQgDQogICAgICAgaWYgKGR2ZG5hdl9jdXJyZW50X3RpdGxlX2luZm8gKHNyYy0+ ZHZkbmF2LCAmdGl0bGUsICZwYXJ0KSAmJiB0aXRsZSA+IDANCiAgICAgICAgICAgJiYgcGFydCA+ IDEpIHsNCiAgICAgICAgIGR2ZG5hdl9wYXJ0X3BsYXkgKHNyYy0+ZHZkbmF2LCB0aXRsZSwgcGFy dCAtIDEpOw0KLSAgICAgICAgc3JjLT5kaWRfc2VlayA9IFRSVUU7DQogICAgICAgfQ0KICAgICB9 IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChrZXksICJwZXJpb2QiKSkgew0KICAgICAgIGdpbnQgdGl0 bGUgPSAwOw0KQEAgLTE3MzIsNyArMjA5MSw2IEBAIGdzdF9kdmRfbmF2X3NyY19oYW5kbGVfbmF2 aWdhdGlvbl9ldmVudCANCiANCiAgICAgICBpZiAoZHZkbmF2X2N1cnJlbnRfdGl0bGVfaW5mbyAo c3JjLT5kdmRuYXYsICZ0aXRsZSwgJnBhcnQpICYmIHRpdGxlID4gMCkgew0KICAgICAgICAgZHZk bmF2X3BhcnRfcGxheSAoc3JjLT5kdmRuYXYsIHRpdGxlLCBwYXJ0ICsgMSk7DQotICAgICAgICBz cmMtPmRpZF9zZWVrID0gVFJVRTsNCiAgICAgICB9DQogICAgIH0NCiANCkBAIC0xNzYxLDExICsy MTE5LDczIEBAIGdzdF9kdmRfbmF2X3NyY19oYW5kbGVfbmF2aWdhdGlvbl9ldmVudCANCiAgIHJl dHVybiBUUlVFOw0KIH0NCiANCisvKiBGSVhNRTogaGFuZGxlIGFsc28gYW5nbGUgZm9ybWF0ICov DQogc3RhdGljIGdib29sZWFuDQogZ3N0X2R2ZF9uYXZfc3JjX2hhbmRsZV9zZWVrX2V2ZW50IChH c3REdmROYXZTcmMgKiBzcmMsIEdzdEV2ZW50ICogZXZlbnQpDQogew0KLS8qIEZJWE1FOiAqLw0K KyAgR3N0U2Vla0ZsYWdzIGZsYWdzOw0KKyAgR3N0U2Vla1R5cGUgY3VyX3R5cGUsIGVuZF90eXBl Ow0KKyAgZ2ludDY0IG5ld19vZmY7DQorICBHc3RGb3JtYXQgZm9ybWF0Ow0KKyAgZ2RvdWJsZSBy YXRlOw0KKw0KKyAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwg JmZsYWdzLCAmY3VyX3R5cGUsICZuZXdfb2ZmLA0KKyAgICAgICZlbmRfdHlwZSwgTlVMTCk7DQor DQorICAvKiBDYW5ub3Qgc2VlayBkdXJpbmcgYW5vdGhlciBzZWVrICovDQorICBpZiAoc3JjLT5z ZWVrX3BlbmRpbmcpIHsNCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHNyYywgIkNhbm5vdCBzZWVr IGR1cmluZyBhbm90aGVyIHNlZWsiKTsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAg LyogSWYgd2UgYXJlIGluIGEgc3RpbGwgZnJhbWUgd2UgY2Fubm90IHNlZWsgKi8NCisgIGlmIChz cmMtPnN0aWxsX2ZyYW1lKSB7DQorICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJDYW5ub3Qg c2VlayBkdXJpbmcgYSBzdGlsbCBmcmFtZSIpOw0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQor IA0KKyAgaWYgKHJhdGUgPD0gMC4wKSB7DQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNh bm5vdCBkbyBiYWNrd2FyZHMgcGxheWJhY2sgeWV0Iik7DQorICAgIHJldHVybiBGQUxTRTsNCisg IH0NCisNCisgIGlmICgoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpICE9IDApIHsNCisg ICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VnbWVudCBzZWVrIG5vdCBzdXBwb3J0ZWQiKTsN CisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgaWYgKChmbGFncyAmIEdTVF9TRUVLX0ZM QUdfRkxVU0gpID09IDApIHsNCisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2FuIG9ubHkg ZG8gZmx1c2hpbmcgc2Vla3MgYXQgdGhlIG1vbWVudCIpOw0KKyAgICByZXR1cm4gRkFMU0U7DQor ICB9DQorDQorICBpZiAoZW5kX3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSB7DQorICAgIEdT VF9ERUJVR19PQkpFQ1QgKHNyYywgImVuZCBzZWVrIHR5cGUgbm90IHN1cHBvcnRlZCIpOw0KKyAg ICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorICBpZiAoY3VyX3R5cGUgIT0gR1NUX1NFRUtfVFlQ RV9TRVQpIHsNCisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAib25seSBTRUVLX1RZUEVfU0VU IGlzIHN1cHBvcnRlZCIpOw0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorICBpZiAoZm9y bWF0ICE9IGNoYXB0ZXJfZm9ybWF0ICYmIGZvcm1hdCAhPSB0aXRsZV9mb3JtYXQgJiYNCisgICAg ICBmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUyAmJiBmb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1F KSB7DQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVuc3VwcG9ydGVkIHNlZWsgZm9ybWF0 ICVkICglcykiLCBmb3JtYXQsDQorICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQp KTsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgc3JjLT5zZWVrX3BlbmRpbmcgPSBU UlVFOw0KKw0KKyAgcmV0dXJuIEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZl bnQgKEdTVF9CQVNFX1NSQyAoc3JjKSwgZXZlbnQpOw0KK30NCisNCisvKiBGSVhNRTogcGxlYXNl IHJlbW92ZSBtZSwgSSB1c2UgZGlzayBzcGFjZSB3aXRob3V0IGEgcmVhc29uLiB0aGFua3MuICov DQogI2lmIDANCitzdGF0aWMgZ2Jvb2xlYW4NCitnc3RfZHZkX25hdl9zcmNfaGFuZGxlX3NlZWtf ZXZlbnQgKEdzdER2ZE5hdlNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCkNCit7DQogICBnaW50 NjQgb2Zmc2V0Ow0KICAgZ2ludCBmb3JtYXQ7DQogICBpbnQgdGl0bGVzLCB0aXRsZSwgbmV3X3Rp dGxlOw0KQEAgLTE5MTIsOSArMjMzMiw5IEBAIGdzdF9kdmRfbmF2X3NyY19oYW5kbGVfc2Vla19l dmVudCAoR3N0RHYNCiBlcnJvcjoNCiANCiAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNlZWsg ZmFpbGVkIik7DQotI2VuZGlmDQogICByZXR1cm4gRkFMU0U7DQogfQ0KKyNlbmRpZg0KIA0KIHN0 YXRpYyBnYm9vbGVhbg0KIGdzdF9kdmRfbmF2X3NyY19zcmNfZXZlbnQgKEdzdEJhc2VTcmMgKiBi YXNlc3JjLCBHc3RFdmVudCAqIGV2ZW50KQ0KQEAgLTE5NjIsNiArMjM4MiwxNiBAQCBnc3RfZHZk X25hdl9zcmNfcXVlcnlfcG9zaXRpb24gKEdzdER2ZE5hDQogICB9IGVsc2UgaWYgKGZvcm1hdCA9 PSBHU1RfRk9STUFUX0JZVEVTKSB7DQogICAgIGlmIChkdmRuYXZfZ2V0X3Bvc2l0aW9uIChzcmMt PmR2ZG5hdiwgJnBvcywgJmxlbikgPT0gRFZETkFWX1NUQVRVU19PSykNCiAgICAgICAqcF92YWwg PSAoZ2ludDY0KSBwb3MgKkRWRF9TRUNUT1JfU0laRTsNCisgIH0gZWxzZSBpZiAoZm9ybWF0ID09 IEdTVF9GT1JNQVRfVElNRSkgew0KKyAgICBpZiAoZHZkbmF2X2dldF9wb3NpdGlvbiAoc3JjLT5k dmRuYXYsICZwb3MsICZsZW4pID09IERWRE5BVl9TVEFUVVNfT0spDQorICAgICAgKnBfdmFsID0g KGdpbnQ2NCkgZ3N0X2R2ZF9uYXZfc3JjX2dldF90aW1lX2Zvcl9zZWN0b3Ioc3JjLCBwb3MpOw0K KyAgICAgIC8qIGxpYmR2bmF2IGZyb20gc3ZuIGF0IGF0IGxlYXN0IDIwMDcwNTAzIHByb3ZpZGUg dGhpcyBuZXcgZnVuY3Rpb24NCisgICAgICAgKiBkdmRuYXZfZ2V0X2N1cnJlbnRfdGltZSwgSSB1 c2VkIGl0IGp1c3QgdG8gdGVzdCB0aGF0IHRoZSB2YWx1ZXMNCisgICAgICAgKiBwcm92aWRlZCBi eSB0aGUgdGltZW1hcCB3ZXJlIHJpZ2h0cyBidXQgSSB3b24ndCB1c2UgaXQgYXMgdGhlIHZhbHVl cw0KKyAgICAgICAqIGl0IHJldHVybiBjaGFuZ2VzIG9ubHkgZXZlcnkgfjAuNSBzZWNvbmRzIG9y IGxlc3MgZGVwZW5kaW5nIG9uIGhvdw0KKyAgICAgICAqIG11Y2ggc2VjdG9ycyBhcmUgY29udGFp bmVkIGluIGEgY2VsbC4NCisgICAgICAgKnBfdmFsID0gZHZkbmF2X2dldF9jdXJyZW50X3RpbWUo c3JjLT5kdmRuYXYpICogR1NUX1NFQ09ORCAvIDkwMDAwOw0KKyAgICAgICAqLw0KICAgfSBlbHNl IGlmIChmb3JtYXQgPT0gdGl0bGVfZm9ybWF0KSB7DQogICAgIGlmIChkdmRuYXZfY3VycmVudF90 aXRsZV9pbmZvIChzcmMtPmR2ZG5hdiwgJnRpdGxlLCAmeCkgPT0gRFZETkFWX1NUQVRVU19PSykN CiAgICAgICAqcF92YWwgPSB0aXRsZTsNCkBAIC0yMDM5LDYgKzI0NjksMTAgQEAgZ3N0X2R2ZF9u YXZfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYmFzZQ0KICAgICAgIH0NCiAgICAgICBicmVhazsN CiAgICAgfQ0KKyAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOnsNCisgICAgICByZXMgPSBnc3Rf ZHZkX25hdl9zcmNfZG9fY29udmVydF9xdWVyeSAoc3JjLCBxdWVyeSk7DQorICAgICAgYnJlYWs7 DQorICAgIH0NCiAgICAgZGVmYXVsdDp7DQogICAgICAgcmVzID0gR1NUX0JBU0VfU1JDX0NMQVNT IChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoYmFzZXNyYywgcXVlcnkpOw0KICAgICAgIGJyZWFrOw0K QEAgLTIxNzQsNyArMjYwOCw3IEBAIGdzdF9kdmRfbmF2X3NyY19kb19pbml0IChHVHlwZSBkdmRu YXZzcmMNCiBzdGF0aWMgZ2Jvb2xlYW4NCiBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2lu KQ0KIHsNCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImR2ZG5hdnNyYyIs IEdTVF9SQU5LX05PTkUsDQorICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJk dmRuYXZzcmMiLCBHU1RfUkFOS19QUklNQVJZLA0KICAgICAgICAgICAvKiBHU1RfUkFOS19QUklN QVJZICsgMSwgKi8gR1NUX1RZUEVfRFZEX05BVl9TUkMpKSB7DQogICAgIHJldHVybiBGQUxTRTsN CiAgIH0NCkluZGV4OiBkdmRuYXZzcmMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvZ3N0 cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHkvZXh0L2R2ZG5hdi9kdmRuYXZzcmMuaCx2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMw0KZGlmZiAtdSAtYiAtQiAtcCAtcjEuMyBkdmRuYXZzcmMuaA0KLS0t IGR2ZG5hdnNyYy5oCTI2IEZlYiAyMDA2IDIyOjMzOjMzIC0wMDAwCTEuMw0KKysrIGR2ZG5hdnNy Yy5oCTExIFNlcCAyMDA3IDEwOjI3OjM5IC0wMDAwDQpAQCAtNjYsMTAgKzY2LDEyIEBAIHN0cnVj dCBfR3N0RHZkTmF2U3JjDQogICBnY2hhciAgICAgICAgICAgICAgICAgICAqbGFzdF91cmk7DQog DQogICBnaW50NjQgICAgICAgICAgICAgICAgICAgcGVuZGluZ19vZmZzZXQ7ICAvKiBOZXh0IG5l d3NlZ21lbnQgZXZlbnQgb2Zmc2V0ICovDQotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgZGlk X3NlZWs7DQogICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgbmV3X3NlZWs7DQogICBnYm9vbGVh biAgICAgICAgICAgICAgICAgc2Vla19wZW5kaW5nOw0KICAgZ2Jvb2xlYW4gICAgICAgICAgICAg ICAgIG5lZWRfZmx1c2g7DQorICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgZmlyc3Rfc2VlazsN CisgIGdib29sZWFuICAgICAgICAgICAgICAgICB1c2VfdG1hcHM7DQorICBnYm9vbGVhbiAgICAg ICAgICAgICAgICAgc3RpbGxfZnJhbWU7DQogDQogICAvKiBUaW1pbmcgKi8NCiAjaWYgMA0KQEAg LTEyMyw2ICsxMjUsMTQgQEAgc3RydWN0IF9Hc3REdmROYXZTcmMNCiAgIEdBcnJheSAgICAgICAg ICAgICAgICAgICAqdnRzX2F0dHJzOyAgICAgICAvKiBBcnJheSBvZiB2dHNfYXR0cmlidXRlc190 ICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBz dHJ1Y3R1cmVzICBjYWNoZWQgZnJvbSAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiB0aGUgVk1HIGlmbyAgICAgICAgICAgICAgICAgICovDQor ICBndWludDMyICAgICAgICAgICAgICAgICAgIHNlY3Rvcl9sZW5ndGg7DQorDQorICBkdmRfcmVh ZGVyX3QgICAgICAgICAgICAgICpkdmQ7DQorICBpZm9faGFuZGxlX3QgICAgICAgICAgICAgICp2 bWdfZmlsZTsNCisgIHR0X3NycHRfdCAgICAgICAgICAgICAgICAgKnR0X3NycHQ7DQorICB2dHNf cHR0X3NycHRfdCAgICAgICAgICAgICp2dHNfcHR0X3NycHQ7DQorICBpZm9faGFuZGxlX3QgICAg ICAgICAgICAgICp2dHNfZmlsZTsNCisgIHZ0c190bWFwdF90ICAgICAgICAgICAgICAgKnZ0c190 bWFwdDsNCiB9Ow0KIA0KIHN0cnVjdCBfR3N0RHZkTmF2U3JjQ2xhc3MNCk== --=-gMw2cFGbe7wB6ikoIIsl-- --=-JQy0t80HPuGvZaIiV5mK Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) iD8DBQBG5nIhl0ZU7uYHW3kRAo+IAKCsddDqUooAGFugf9kQJCh6W5LLUQCePsQ5 +CCfLphTfqLqKrj2qJhQwtg= =tita -----END PGP SIGNATURE----- --=-JQy0t80HPuGvZaIiV5mK-- --===============0590248215== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ --===============0590248215== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gstreamer-devel mailing list gstreamer-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gstreamer-devel --===============0590248215==--