From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: Adaptive backlight support Date: Thu, 21 Jun 2012 11:21:55 +0300 Message-ID: <87wr31vzvg.fsf@intel.com> References: <1340230355-31301-1-git-send-email-marcheu@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [143.182.124.37]) by gabe.freedesktop.org (Postfix) with ESMTP id F0988A0A6E for ; Thu, 21 Jun 2012 01:28:53 -0700 (PDT) In-Reply-To: <1340230355-31301-1-git-send-email-marcheu@chromium.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: =?utf-8?Q?St=C3=A9phane?= Marchesin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMSBKdW4gMjAxMiwgU3TDqXBoYW5lIE1hcmNoZXNpbiA8bWFyY2hldUBjaHJvbWl1 bS5vcmc+IHdyb3RlOgo+IFRoaXMgaXMgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBpOTE1 IGFkYXB0aXZlIGJhY2tsaWdodCBzdXBwb3J0Lgo+IFRoZSBpbnRlbmRlZCB1c2UgZm9yIHRoZSBh ZGFwdGl2ZSBiYWNrbGlnaHQgaXMgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cwo+IHdoZW5ldmVyIHRo ZSBsdW1pbmFuY2Ugb2YgdGhlIHNjcmVlbiBjaGFuZ2VzIGJ5IHNvbWUgdGhyZXNob2xkcy4gVGhl Cj4gbWFpbiBjYXZlYXQgd2l0aCB0aGF0IGltcGxlbWVudGF0aW9uIGlzIHRoYXQgdGhvc2UgYWRk aXRpb25hbAo+IGludGVycnVwdHMgd2lsbCB3YWtlIHVwIHRoZSBDUFUgYW5kIGNvbnN1bWUgbW9y ZSBwb3dlci4gSW5zdGVhZCwgd2UKPiBob29rIGludG8gdGhlIHZibGFuayBoYW5kbGVyIGFuZCBo YW5kbGUgaXQgZnJvbSB0aGVyZS4gVGhpcyBtYWtlcyB0aGUKPiBpbXBsZW1lbnRhdGlvbiBhIGxp dHRsZSBsZXNzIGludHVpdGl2ZSBidXQgYSBsb3QgbW9yZSBlZmZpY2llbnQuCj4gV2UgYWxzbyBu ZWVkIHRvIGNvbXB1dGUgdGhlIGdhbW1hIGNvcnJlY3Rpb24gZnJvbSB0aGUgaW50ZXJydXB0Cj4g aGFuZGxlciBzbyB3ZSBkbyB0aGlzIHdpdGggYSAobmV3KSBmaXhlZCBwb2ludCBtb2R1bGUuCgpI aSBTdMOpcGhhbmUsIGludGVyZXN0aW5nIHdvcmsuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQg Y29udGVudCBhZGFwdGl2ZSBiYWNrbGlnaHQgY29udHJvbCBpcyBiYXNpY2FsbHkKYSBmdW5jdGlv biB0aGF0IHRyaWVzIHRvIHJlZHVjZSBiYWNrbGlnaHQgYnJpZ2h0bmVzcyB0byBzYXZlIHBvd2Vy IHdoaWxlCmFkanVzdGluZyBnYW1tYSB0byBlbnN1cmUgdGhlcmUgaXMgbm8gdXNlciBkZXRlY3Rh YmxlIGNoYW5nZSBpbgppbWFnZS4gTGlrZSB0aGlzOgoKICAgIChyZWR1Y2VkX2JyaWdodG5lc3Ms IGdhbW1hKSA9IGYoYnJpZ2h0bmVzcywgbHVtaW5hbmNlKQoKSW4gbXkgdmlldywgdGhlIGhpc3Rv Z3JhbSBpbmZvcm1hdGlvbiwgaW50ZXJydXB0IG9uIGl0cyBtZWFuaW5nZnVsCmNoYW5nZSwgYnJp Z2h0bmVzcyBhbmQgZ2FtbWEgc2V0dGluZyBhcmUgY2xlYXJseSBtZWNoYW5pc21zIHRoZSBkcml2 ZXIKc2hvdWxkIHByb3ZpZGUuIEknbSBub3QgYXQgYWxsIHN1cmUgaWYgdGhlIGZ1bmN0aW9uIHRo YXQgZGVmaW5lcyB0aGUKcG9saWN5IGZvciBicmlnaHRuZXNzIGFuZCBnYW1tYSBjaGFuZ2VzIHNo b3VsZCBiZSBwYXJ0IG9mIHRoZSBkcml2ZXIuCgpJbiBmYWN0LCBsb29raW5nIGF0IHRoZSBoaXN0 b2dyYW1fZmluZF9jb3JyZWN0aW9uX2xldmVsKCkgYW5kCmFkYXB0aXZlX2JhY2tsaWdodF9jb21w dXRlX2NvcnJlY3Rpb24oKSBmdW5jdGlvbnMgYmVsb3csIHRoZXkgYXJlIGZpbGxlZAp3aXRoIHBv bGljeSBjb25kaXRpb25zLiBVc3VhbGx5IGl0J3MgcHJlZmVycmVkIHRvIGhhdmUgdGhlIHBvbGlj eSBpbgp1c2VyIHNwYWNlLiBUaGUgZml4ZWQgcG9pbnQgdHJvdWJsZXMgd291bGQgYWxsIGdvIGF3 YXkgYXMgd2VsbCBpbiB1c2VyCnNwYWNlLiBBbmQgdGhlcmUncyB0aGUgYWRkZWQgYmVuZWZpdCBv ZiBiZWluZyBhYmxlIHRvIGhhbmRsZSB0aGUgdXNlcidzCmRlc2lyZWQgYnJpZ2h0bmVzcyBhbmQg cG9zc2libGUgYW1iaWVudCBsaWdodCBzZW5zb3IgYmFzZWQgYWRqdXN0bWVudCB0bwpicmlnaHRu ZXNzIGluIGEgc2luZ2xlIHBvaW50IG9mIHRydXRoLgoKSSBndWVzcyB0aGUgcXVlc3Rpb24gaXMg aG93IHRvIGRlZmluZSBzZW5zaWJsZSBpbnRlcmZhY2VzIHRvIHRoZQptZWNoYW5pc21zIGluIGEg d2F5IHRoYXQgdGhlIGFkYXB0aXZlIGJhY2tsaWdodCBmdW5jdGlvbiBpcyBmZWFzaWJsZSB0bwpp bXBsZW1lbnQgaW4gdXNlciBzcGFjZSwgYW5kIHRoZSBwb3dlciBzYXZpbmcgZ29hbCBjb3VsZCBz dGlsbCBiZQpyZWFjaGVkLiBJIHdvdWxkIGF0IGxlYXN0IGxpa2UgdGhpcyB0byBiZSBsb29rZWQg aW50byBmaXJzdC4KCgpCUiwKSmFuaS4KCgoKCj4KPiBDaGFuZ2UtSWQ6IEk5Yjk2MzFjYWNjN2Q5 MGUyODAxYTU0MmEzNzg5MTE4NTIxYmMyNWYwCj4gU2lnbmVkLW9mZi1ieTogU3TDqXBoYW5lIE1h cmNoZXNpbiA8bWFyY2hldUBjaHJvbWl1bS5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZG1hLmMgICAgICAgICAgICAgICAgIHwgICAxNiArKwo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgICB8ICAgMTAgKwo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgICB8ICAgIDggKy0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgICAgICAgICAgfCAgIDIyICsrCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2FkYXB0aXZlX2JhY2tsaWdodC5jIHwgIDI2NiAr KysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9maXhl ZHBvaW50LmggICAgICAgICB8ICAxNDAgKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BhbmVsLmMgICAgICAgICAgICAgIHwgICAgNiArCj4gIGluY2x1ZGUvZHJtL2k5 MTVfZHJtLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCj4gIDkgZmlsZXMgY2hh bmdlZCwgNDY5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hZGFwdGl2ZV9iYWNrbGlnaHQuYwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZml4ZWRwb2ludC5o Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IGNlN2ZjNzcuLjVjMTI1YzMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0xMyw2ICsxMyw3IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5v IGk5MTVfZG1hLm8gaTkxNV9pcnEubyBcCj4gIAkgIGk5MTVfZ2VtX2d0dC5vIFwKPiAgCSAgaTkx NV9nZW1fdGlsaW5nLm8gXAo+ICAJICBpOTE1X3RyYWNlX3BvaW50cy5vIFwKPiArCSAgaW50ZWxf YWRhcHRpdmVfYmFja2xpZ2h0Lm8gXAo+ICAJICBpbnRlbF9kaXNwbGF5Lm8gXAo+ICAJICBpbnRl bF9jcnQubyBcCj4gIAkgIGludGVsX2x2ZHMubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4g aW5kZXggYmE2MGYzYy4uYzI2MjZkNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBA IC04MjgsNiArODI4LDIyIEBAIHN0YXRpYyBpbnQgaTkxNV9zZXRwYXJhbShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAJCS8qIFVzZXJzcGFjZSBjYW4gdXNlIGZpcnN0IE4g cmVncyAqLwo+ICAJCWRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQgPSBwYXJhbS0+dmFsdWU7Cj4g IAkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfU0VUUEFSQU1fQURBUFRJVkVfQkFDS0xJR0hUX0VOQUJM RToKPiArCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gNikgewo+ICsJCQlkZXZfcHJpdi0+ YWRhcHRpdmVfYmFja2xpZ2h0X2VuYWJsZWQgPSBwYXJhbS0+dmFsdWU7Cj4gKwkJfSBlbHNlIHsK PiArCQkJRFJNX0VSUk9SKCJObyBhZGFwdGl2ZSBiYWNrbGlnaHQgb24gIUdFTjZcbiIpOwo+ICsJ CQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfU0VUUEFS QU1fUEFORUxfR0FNTUE6Cj4gKwkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDYpIHsKPiAr CQkJZGV2X3ByaXYtPmFkYXB0aXZlX2JhY2tsaWdodF9wYW5lbF9nYW1tYSA9IHBhcmFtLT52YWx1 ZTsKPiArCQl9IGVsc2Ugewo+ICsJCQlEUk1fRVJST1IoIk5vIGFkYXB0aXZlIGJhY2tsaWdodCBv biAhR0VONlxuIik7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlicmVhazsKPiAg CWRlZmF1bHQ6Cj4gIAkJRFJNX0RFQlVHX0RSSVZFUigidW5rbm93biBwYXJhbWV0ZXIgJWRcbiIs Cj4gIAkJCQkJcGFyYW0tPnBhcmFtKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBk ODlmNTg1Li5mNzc4ZjkzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTQwMSw2 ICs0MDEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbGZwX2x2ZHNfdmJ0X21vZGU7IC8qIGlmIGFueSAqLwo+ICAJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKnNkdm9fbHZkc192YnRfbW9kZTsgLyogaWYgYW55ICovCj4g IAo+ICsJLyogQWRhcHRpdmUgYmFja2xpZ2h0ICovCj4gKwlib29sIGFkYXB0aXZlX2JhY2tsaWdo dF9lbmFibGVkOwo+ICsJaW50IGJhY2tsaWdodF9jb3JyZWN0aW9uX2xldmVsOwo+ICsJaW50IGJh Y2tsaWdodF9jb3JyZWN0aW9uX2NvdW50Owo+ICsJaW50IGJhY2tsaWdodF9jb3JyZWN0aW9uX2Rp cmVjdGlvbjsKPiArCWludCBhZGFwdGl2ZV9iYWNrbGlnaHRfcGFuZWxfZ2FtbWE7Cj4gKwo+ICAJ LyogRmVhdHVyZSBiaXRzIGZyb20gdGhlIFZCSU9TICovCj4gIAl1bnNpZ25lZCBpbnQgaW50X3R2 X3N1cHBvcnQ6MTsKPiAgCXVuc2lnbmVkIGludCBsdmRzX2RpdGhlcjoxOwo+IEBAIC0xMzU4LDYg KzEzNjUsOSBAQCBleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiAgZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICAKPiArLyogaW50ZWxfYWRhcHRpdmVfYmFja2xpZ2h0LmMgKi8KPiArZXh0ZXJu IHZvaWQgaW50ZWxfYWRhcHRpdmVfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGlu dCBwaXBlKTsKPiArCj4gIC8qIGludGVsX2kyYy5jICovCj4gIGV4dGVybiBpbnQgaW50ZWxfc2V0 dXBfZ21idXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIGV4dGVybiB2b2lkIGludGVsX3Rl YXJkb3duX2dtYnVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9p cnEuYwo+IGluZGV4IGFmZDRlMDMuLjk0OGRhNmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJx LmMKPiBAQCAtNjE5LDExICs2MTksMTUgQEAgc3RhdGljIGlycXJldHVybl90IGlyb25sYWtlX2ly cV9oYW5kbGVyKERSTV9JUlFfQVJHUykKPiAgCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwX3BsYW5l KGRldiwgMSk7Cj4gIAl9Cj4gIAo+IC0JaWYgKGRlX2lpciAmIERFX1BJUEVBX1ZCTEFOSykKPiAr CWlmIChkZV9paXIgJiBERV9QSVBFQV9WQkxBTkspIHsKPiAgCQlkcm1faGFuZGxlX3ZibGFuayhk ZXYsIDApOwo+ICsJCWludGVsX2FkYXB0aXZlX2JhY2tsaWdodChkZXYsIDApOwo+ICsJfQo+ICAK PiAtCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTkspCj4gKwlpZiAoZGVfaWlyICYgREVfUElQ RUJfVkJMQU5LKSB7Cj4gIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKPiArCQlpbnRlbF9h ZGFwdGl2ZV9iYWNrbGlnaHQoZGV2LCAxKTsKPiArCX0KPiAgCj4gIAkvKiBjaGVjayBldmVudCBm cm9tIFBDSCAqLwo+ICAJaWYgKGRlX2lpciAmIERFX1BDSF9FVkVOVCkgewo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAo+IGluZGV4IDU1MjI2NGMuLjJkYjg3NGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKPiBAQCAtMzU4Nyw2ICszNTg3LDI4IEBACj4gICNkZWZpbmUgIFBXTV9QSVBFX0IJ CSgxIDw8IDI5KQo+ICAjZGVmaW5lIEJMQ19QV01fQ1BVX0NUTAkJMHg0ODI1NAo+ICAKPiArI2Rl ZmluZSBCTE1fSElTVF9DVEwJCQkweDQ4MjYwCj4gKyNkZWZpbmUgIEVOSF9ISVNUX0VOQUJMRQkJ KDE8PDMxKQo+ICsjZGVmaW5lICBFTkhfTU9ESUZfVEJMX0VOQUJMRQkJKDE8PDMwKQo+ICsjZGVm aW5lICBFTkhfUElQRV9BX1NFTEVDVAkJKDA8PDI5KQo+ICsjZGVmaW5lICBFTkhfUElQRV9CX1NF TEVDVAkJKDE8PDI5KQo+ICsjZGVmaW5lICBFTkhfUElQRShwaXBlKSBfUElQRShwaXBlLCBFTkhf UElQRV9BX1NFTEVDVCwgRU5IX1BJUEVfQl9TRUxFQ1QpCj4gKyNkZWZpbmUgIEhJU1RfTU9ERV9Z VVYJCQkoMDw8MjQpCj4gKyNkZWZpbmUgIEhJU1RfTU9ERV9IU1YJCQkoMTw8MjQpCj4gKyNkZWZp bmUgIEVOSF9NT0RFX0RJUkVDVAkJKDA8PDEzKQo+ICsjZGVmaW5lICBFTkhfTU9ERV9BRERJVElW RQkJKDE8PDEzKQo+ICsjZGVmaW5lICBFTkhfTU9ERV9NVUxUSVBMSUNBVElWRQkoMjw8MTMpCj4g KyNkZWZpbmUgIEJJTl9SRUdJU1RFUl9TRVQJCSgxPDwxMSkKPiArI2RlZmluZSAgRU5IX05VTV9C SU5TCQkJMzIKPiArCj4gKyNkZWZpbmUgQkxNX0hJU1RfRU5ICQkJMHg0ODI2NAo+ICsKPiArI2Rl ZmluZSBCTE1fSElTVF9HVUFSRF9CQU5ECQkweDQ4MjY4Cj4gKyNkZWZpbmUgIEJMTV9ISVNUX0lO VFJfRU5BQkxFCQkoMTw8MzEpCj4gKyNkZWZpbmUgIEJMTV9ISVNUX0VWRU5UX1NUQVRVUwkJKDE8 PDMwKQo+ICsjZGVmaW5lICBCTE1fSElTVF9JTlRSX0RFTEFZX01BU0sJKDB4RkY8PDIyKQo+ICsj ZGVmaW5lICBCTE1fSElTVF9JTlRSX0RFTEFZX1NISUZUCTIyCj4gKwo+ICAjZGVmaW5lIEJMQ19Q V01fUENIX0NUTDEJMHhjODI1MAo+ICAjZGVmaW5lICBQV01fUENIX0VOQUJMRQkJKDEgPDwgMzEp Cj4gICNkZWZpbmUgIFBXTV9QT0xBUklUWV9BQ1RJVkVfTE9XCSgxIDw8IDI5KQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hZGFwdGl2ZV9iYWNrbGlnaHQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2FkYXB0aXZlX2JhY2tsaWdodC5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40MjM0OTYyCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2FkYXB0aXZlX2JhY2tsaWdodC5jCj4gQEAg LTAsMCArMSwyNjYgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTIgVGhlIENocm9taXVtIE9T IEF1dGhvcnMuCj4gKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUKPiArICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+ICsgKiB3aXRob3V0IGxpbWl0YXRp b24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCj4gKyAq IGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8KPiArICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCj4gKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKPiArICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKPiArICog b2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwo+ICsgKiBPUiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gKyAq IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P Ti1JTkZSSU5HRU1FTlQuCj4gKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKPiArICogQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCj4gKyAq IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFCj4gKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKwo+ICsjaW5jbHVkZSAiZHJtUC5oIgo+ ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsjaW5jbHVkZSAi aTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVnLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9k cnYuaCIKPiArI2luY2x1ZGUgImludGVsX2ZpeGVkcG9pbnQuaCIKPiArCj4gKy8qCj4gKyAqIFRo aXMgZnVuY3Rpb24gdGFrZXMgYSBoaXN0b2dyYW0gb2YgYnVja2V0cyBhcyBpbnB1dCBhbmQgZGV0 ZXJtaW5lcyBhbgo+ICsgKiBhY2NlcHRhYmxlIHRhcmdldCBiYWNrbGlnaHQgbGV2ZWwuCj4gKyAq Lwo+ICtzdGF0aWMgaW50IGhpc3RvZ3JhbV9maW5kX2NvcnJlY3Rpb25fbGV2ZWwoaW50ICpsZXZl bHMpCj4gK3sKPiArCWludCBpLCBzdW0gPSAwOwo+ICsJaW50IHJhdGlvLCBkaXN0b3J0aW9uLCBw cmV2X2Rpc3RvcnRpb24gPSAwLCBvZmYsIGZpbmFsX3JhdGlvLCB0YXJnZXQ7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IEVOSF9OVU1fQklOUzsgaSsrKQo+ICsJCXN1bSArPSBsZXZlbHNbaV07Cj4g Kwo+ICsJLyogQWxsb3cgMC4zMy8yNTYgZGlzdG9ydGlvbiBwZXIgcGl4ZWwsIG9uIGF2ZXJhZ2Ug Ki8KPiArCXRhcmdldCA9IHN1bSAvIDM7Cj4gKwo+ICsJLyogU3BlY2lhbCBjYXNlIHdoZXJlIHdl IG9ubHkgaGF2ZSBsZXNzIHRoYW4gMTAwIHBpeGVscwo+ICsJICogb3V0c2lkZSBvZiB0aGUgZGFy a2VzdCBiaW4uCj4gKwkgKi8KPiArCWlmIChzdW0gLSBsZXZlbHNbMF0gPD0gMTAwKQo+ICsJCXJl dHVybiA3MDsKPiArCj4gKwlmb3IgKHJhdGlvID0gRU5IX05VTV9CSU5TIC0gMTsgcmF0aW8gPj0g MCA7IHJhdGlvLS0pIHsKPiArCQlkaXN0b3J0aW9uID0gMDsKPiArCQlmb3IgKGkgPSByYXRpbzsg aSA8IEVOSF9OVU1fQklOUzsgaSsrKSB7Cj4gKwkJCWludCBwaXhlbF9kaXN0b3J0aW9uID0gKGkg LSByYXRpbykqODsKPiArCQkJaW50IG51bV9waXhlbHMgPSBsZXZlbHNbaV07Cj4gKwkJCWRpc3Rv cnRpb24gKz0gbnVtX3BpeGVscyAqIHBpeGVsX2Rpc3RvcnRpb247Cj4gKwkJfQo+ICsJCWlmIChk aXN0b3J0aW9uID4gdGFyZ2V0KQo+ICsJCQlicmVhazsKPiArCQllbHNlCj4gKwkJCXByZXZfZGlz dG9ydGlvbiA9IGRpc3RvcnRpb247Cj4gKwl9Cj4gKwo+ICsJcmF0aW8rKzsKPiArCj4gKwkvKiBJ ZiB3ZSdyZSBub3QgZXhhY3RseSBhdCB0aGUgYm9yZGVyIGJldHdlZW4gdHdvIGJ1Y2tldHMsIGV4 dHJhcG9sYXRlCj4gKwkgKiB0byBnZXQgMyBleHRyYSBiaXRzIG9mIGFjY3VyYWN5Lgo+ICsJICov Cj4gKwlpZiAoZGlzdG9ydGlvbiAtIHByZXZfZGlzdG9ydGlvbikKPiArCQlvZmYgPSA4ICogKHRh cmdldCAtIHByZXZfZGlzdG9ydGlvbikgLwo+ICsJCSAgICAgIChkaXN0b3J0aW9uIC0gcHJldl9k aXN0b3J0aW9uKTsKPiArCWVsc2UKPiArCQlvZmYgPSAwOwo+ICsKPiArCWZpbmFsX3JhdGlvID0g cmF0aW8gKiAyNTUgLyAzMSArIG9mZjsKPiArCj4gKwlpZiAoZmluYWxfcmF0aW8gPiAyNTUpCj4g KwkJZmluYWxfcmF0aW8gPSAyNTU7Cj4gKwo+ICsJLyogTmV2ZXIgYWltIGZvciBsZXNzIHRoYW4g NTAlIG9mIHRoZSB0b3RhbCBiYWNrbGlnaHQgKi8KPiArCWlmIChmaW5hbF9yYXRpbyA8IDEyOCkK PiArCQlmaW5hbF9yYXRpbyA9IDEyODsKPiArCj4gKwlyZXR1cm4gZmluYWxfcmF0aW87Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGhpc3RvZ3JhbV9nZXRfbGV2ZWxzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIGludCBwaXBlLCBpbnQgKmxldmVscykKPiArewo+ICsJZHJtX2k5MTVfcHJpdmF0ZV90 ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgRU5IX05VTV9CSU5TOyBpKyspIHsKPiArCQlJOTE1X1dSSVRFKEJMTV9ISVNUX0NU TCwgRU5IX0hJU1RfRU5BQkxFIHwKPiArCQkJCQkgRU5IX01PRElGX1RCTF9FTkFCTEUgfAo+ICsJ CQkJCSBFTkhfUElQRShwaXBlKSB8Cj4gKwkJCQkJIEhJU1RfTU9ERV9ZVVYgfAo+ICsJCQkJCSBF TkhfTU9ERV9BRERJVElWRSB8Cj4gKwkJCQkJIGkpOwo+ICsJCWxldmVsc1tpXSA9IEk5MTVfUkVB RChCTE1fSElTVF9FTkgpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoaXN0b2dyYW1f c2V0X2xldmVscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwgaW50ICpsZXZlbHMp Cj4gK3sKPiArCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEVOSF9OVU1fQklOUzsgaSsrKSB7 Cj4gKwkJSTkxNV9XUklURShCTE1fSElTVF9DVEwsIEVOSF9ISVNUX0VOQUJMRSB8Cj4gKwkJCQkJ IEVOSF9NT0RJRl9UQkxfRU5BQkxFIHwKPiArCQkJCQkgRU5IX1BJUEUocGlwZSkgfAo+ICsJCQkJ CSBISVNUX01PREVfWVVWIHwKPiArCQkJCQkgRU5IX01PREVfQURESVRJVkUgfAo+ICsJCQkJCSBC SU5fUkVHSVNURVJfU0VUIHwKPiArCQkJCQkgaSk7Cj4gKwkJSTkxNV9XUklURShCTE1fSElTVF9F TkgsIGxldmVsc1tpXSk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24g Y29tcHV0ZXMgdGhlIGJhY2tsaWdodCBjb3JyZWN0aW9uIGxldmVsIGZvciBhbiBhY2NlcHRhYmxl Cj4gKyAqIGRpc3RvcnRpb24gYW5kIGZpbGxzIHVwIHRoZSBjb3JyZWN0aW9uIGJpbnMgYWRlcXVh dGVseS4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2FkYXB0aXZlX2JhY2tsaWdodF9jb21wdXRl X2NvcnJlY3Rpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50ICpsZXZlbHMpCj4gK3sKPiAr CWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJaW50 IGNvcnJlY3Rpb25fbGV2ZWw7Cj4gKwlpbnQgaSwgbXVsdGlwbGllciwgb25lX292ZXJfZ2FtbWE7 Cj4gKwo+ICsJLyogRmluZCB0aGUgY29ycmVjdGlvbiBsZXZlbCBmb3IgYW4gYWNjZXB0YWJsZSBk aXN0b3J0aW9uICovCj4gKwljb3JyZWN0aW9uX2xldmVsID0gaGlzdG9ncmFtX2ZpbmRfY29ycmVj dGlvbl9sZXZlbChsZXZlbHMpOwo+ICsKPiArCS8qIElmIHdlJ3JlIG5vdCB5ZXQgYXQgb3VyIGNv cnJlY3Rpb24gdGFyZ2V0LCB3ZSBuZWVkIHRvIGRlY2lkZSBieSBob3cKPiArCSAqIG11Y2ggdG8g bW92ZS4KPiArCSAqLwo+ICsJaWYgKGRldl9wcml2LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9sZXZl bCAhPSBjb3JyZWN0aW9uX2xldmVsKSB7Cj4gKwkJaW50IGRlbHRhLCBkaXJlY3Rpb247Cj4gKwo+ ICsJCWRpcmVjdGlvbiA9IChjb3JyZWN0aW9uX2xldmVsID4KPiArCQkJICAgICBkZXZfcHJpdi0+ YmFja2xpZ2h0X2NvcnJlY3Rpb25fbGV2ZWwpOwo+ICsKPiArCQlpZiAoZGlyZWN0aW9uID09IGRl dl9wcml2LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9kaXJlY3Rpb24pIHsKPiArCQkJZGV2X3ByaXYt PmJhY2tsaWdodF9jb3JyZWN0aW9uX2NvdW50Kys7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZGV2X3By aXYtPmJhY2tsaWdodF9jb3JyZWN0aW9uX2NvdW50ID0gMDsKPiArCQkJZGV2X3ByaXYtPmJhY2ts aWdodF9jb3JyZWN0aW9uX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKPiArCQl9Cj4gKwo+ICsJCWRl bHRhID0gYWJzKGNvcnJlY3Rpb25fbGV2ZWwgLQo+ICsJCQkgICAgZGV2X3ByaXYtPmJhY2tsaWdo dF9jb3JyZWN0aW9uX2xldmVsKS80Owo+ICsKPiArCQlpZiAoZGVsdGEgPCAxKQo+ICsJCQlkZWx0 YSA9IDE7Cj4gKwo+ICsJCS8qIEZvciBpbmNyZWFzaW5nIHRoZSBicmlnaHRuZXNzLCB3ZSBkbyBp dCBpbnN0YW50bHkuCj4gKwkJICogRm9yIGxvd2VyaW5nIHRoZSBicmlnaHRuZXNzLCB3ZSByZXF1 aXJlIGF0IGxlYXN0IDEwIGZyYW1lcwo+ICsJCSAqIGJlbG93IHRoZSBjdXJyZW50IHZhbHVlLiBU aGlzIGF2b2lkcyBwaW5nLXBvbmdpbmcgb2YgdGhlCj4gKwkJICogYmFja2xpZ2h0IGxldmVsLgo+ ICsJCSAqCj4gKwkJICogV2UgYWxzbyBuZXZlciBpbmNyZWFzZSB0aGUgYmFja2xpZ2h0IGJ5IG1v cmUgdGhhbiA2JSBwZXIKPiArCQkgKiBmcmFtZSwgYW5kIG5ldmVyIGxvd2VyIGl0IGJ5IG1vcmUg dGhhbiAzJSBwZXIgZnJhbWUsIGJlY2F1c2UKPiArCQkgKiB0aGUgYmFja2xpZ2h0IG5lZWRzIHRp bWUgdG8gYWRqdXN0IGFuZCB0aGUgTENEIGNvcnJlY3Rpb24KPiArCQkgKiB3b3VsZCBiZSAiYWhl YWQiIG90aGVyd2lzZS4KPiArCQkgKi8KPiArCQlpZiAoY29ycmVjdGlvbl9sZXZlbCA+IGRldl9w cml2LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9sZXZlbCkgewo+ICsJCQlpZiAoZGVsdGEgPiAxNSkK PiArCQkJCWRlbHRhID0gMTU7Cj4gKwkJCWRldl9wcml2LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9s ZXZlbCArPSBkZWx0YTsKPiArCQl9IGVsc2UgaWYgKChkZXZfcHJpdi0+YmFja2xpZ2h0X2NvcnJl Y3Rpb25fY291bnQgPiAxMCkgJiYKPiArCQkgICAoY29ycmVjdGlvbl9sZXZlbCA8IGRldl9wcml2 LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9sZXZlbCkpIHsKPiArCQkJaWYgKGRlbHRhID4gNykKPiAr CQkJCWRlbHRhID0gNzsKPiArCQkJZGV2X3ByaXYtPmJhY2tsaWdodF9jb3JyZWN0aW9uX2xldmVs IC09IGRlbHRhOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBXZSBuZWVkIHRvIGludmVydCB0aGUg Z2FtbWEgY29ycmVjdGlvbiBvZiB0aGUgTENEIHZhbHVlcywKPiArCSAqIGJ1dCBub3Qgb2YgdGhl IGJhY2tsaWdodCB3aGljaCBpcyBsaW5lYXIuCj4gKwkgKi8KPiArCW9uZV9vdmVyX2dhbW1hID0g aW50ZWxfZml4ZWRfZGl2KEZJWEVEX09ORSwKPiArCQkJCWRldl9wcml2LT5hZGFwdGl2ZV9iYWNr bGlnaHRfcGFuZWxfZ2FtbWEpOwo+ICsJbXVsdGlwbGllciA9IGludGVsX2ZpeGVkX3BvdyhkZXZf cHJpdi0+YmFja2xpZ2h0X2NvcnJlY3Rpb25fbGV2ZWwgKiAyNTYsCj4gKwkJCQkgICAgIG9uZV9v dmVyX2dhbW1hKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgRU5IX05VTV9CSU5TOyBpKyspIHsK PiArCQlpbnQgYmFzZV92YWx1ZSA9IGkgKiA4ICogNDsKPiArCQlsZXZlbHNbaV0gPSBiYXNlX3Zh bHVlIC0gYmFzZV92YWx1ZSAqIG11bHRpcGxpZXIgLyA2NTUzNjsKPiArCX0KPiArfQo+ICsKPiAr LyoKPiArICogQSBxdWljayBub3RlIGFib3V0IHRoZSBhZGFwdGl2ZSBiYWNrbGlnaHQgaW1wbGVt ZW50YXRpb246Cj4gKyAqIElmIHdlIGxldCBpdCBydW4gYXMgZGVzaWduZWQsIGl0IHdpbGwgZ2Vu ZXJhdGUgYSBsb3Qgb2YgaW50ZXJydXB0cyB3aGljaAo+ICsgKiB0ZW5kcyB0byB3YWtlIHRoZSBD UFUgdXAgYW5kIHdhc3RlIHBvd2VyLiBUaGlzIGlzIGEgYmFkIGlkZWEgZm9yIGEgcG93ZXIKPiAr ICogc2F2aW5nIGZlYXR1cmUuIEluc3RlYWQsIHdlIGNvdXBsZSBpdCB0byB0aGUgdmJsYW5rIGlu dGVycnVwdCBzaW5jZSB0aGF0Cj4gKyAqIG1lYW5zIHdlIGRyZXcgc29tZXRoaW5nLiBUaGlzIG1l YW5zIHRoYXQgd2UgZG8gbm90IHJlYWN0IHRvIG5vbi12c3luY2VkIEdMCj4gKyAqIHVwZGF0ZXMs IG9yIHVwZGF0ZXMgdG8gdGhlIGZyb250IGJ1ZmZlciwgYW5kIGFsc28gYWRkcyBhIGxpdHRsZSBi aXQgb2YKPiArICogZXh0cmEgbGF0ZW5jeS4gQnV0IGl0IGlzIGFuIGFjY2VwdGFibGUgdHJhZGVv ZmYgdG8gbWFrZS4KPiArICovCj4gK3ZvaWQgaW50ZWxfYWRhcHRpdmVfYmFja2xpZ2h0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlX3ZibGFua19ldmVudCkKPiArewo+ICsJZHJtX2k5 MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgbGV2ZWxz W0VOSF9OVU1fQklOU107Cj4gKwlpbnQgcGlwZTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3I7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPiArCj4gKwlpZiAo IWRldl9wcml2LT5hZGFwdGl2ZV9iYWNrbGlnaHRfZW5hYmxlZCkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJLyogRmluZCB0aGUgY29ubmVjdG9yICovCj4gKwlpZiAoZGV2X3ByaXYtPmludF9sdmRzX2Nv bm5lY3RvcikKPiArCQljb25uZWN0b3IgPSBkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yOwo+ ICsJZWxzZSBpZiAoZGV2X3ByaXYtPmludF9lZHBfY29ubmVjdG9yKQo+ICsJCWNvbm5lY3RvciA9 IGRldl9wcml2LT5pbnRfZWRwX2Nvbm5lY3RvcjsKPiArCWVsc2UKPiArCQlyZXR1cm47Cj4gKwo+ ICsJaWYgKCFjb25uZWN0b3IpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghY29ubmVjdG9yLT5l bmNvZGVyKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0 YykKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogRmluZCB0aGUgcGlwZSBmb3IgdGhlIHBhbmVsLiAq Lwo+ICsJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRj KTsKPiArCXBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICsKPiArCS8qIFRoZSBjYWxsYmFjayBo YXBwZW5zIGZvciBib3RoIHBpcGUgQSAmIEIuIE5vdyB0aGF0IHdlIGtub3cgd2hpY2gKPiArCSAq IHBpcGUgd2UncmUgZG9pbmcgYWRhcHRpdmUgYmFja2xpZ2h0IG9uLCBjaGVjayB0aGF0IGl0J3Mg dGhlIHJpZ2h0Cj4gKwkgKiBvbmUuIEJhaWwgaWYgaXQgaXNuJ3QuCj4gKwkgKi8KPiArCWlmIChw aXBlICE9IHBpcGVfdmJsYW5rX2V2ZW50KQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBSZXR1cm4g aWYgbm8gZXZlbnQuICovCj4gKwlpZiAoSTkxNV9SRUFEKEJMTV9ISVNUX0dVQVJEX0JBTkQpICYg QkxNX0hJU1RfRVZFTlRfU1RBVFVTID09IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIE1ha2Ug c3VyZSB3ZSBhY2sgdGhlIHByZXZpb3VzIGV2ZW50LiBFdmVuIHRob3VnaCB3ZSBkbyBub3QgZ2V0 IHRoZQo+ICsJICogSVJRcyAoc2VlIGFib3ZlIGV4cGxhbmF0aW9uKSwgd2UgbXVzdCBzdGlsbCBh Y2sgdGhlIGV2ZW50cyBvdGhlcndpc2UKPiArCSAqIHRoZSBoaXN0b2dyYW0gZGF0YSBkb2Vzbid0 IGdldCB1cGRhdGVkIGFueSBtb3JlLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEJMTV9ISVNUX0dV QVJEX0JBTkQsIEJMTV9ISVNUX0lOVFJfRU5BQkxFIHwKPiArCQkJCQlCTE1fSElTVF9FVkVOVF9T VEFUVVMgfAo+ICsJCQkJCSgxIDw8IEJMTV9ISVNUX0lOVFJfREVMQVlfU0hJRlQpKTsKPiArCj4g KwloaXN0b2dyYW1fZ2V0X2xldmVscyhkZXYsIHBpcGUsIGxldmVscyk7Cj4gKwo+ICsJYWRhcHRp dmVfYmFja2xpZ2h0X2NvbXB1dGVfY29ycmVjdGlvbihkZXYsIGxldmVscyk7Cj4gKwo+ICsJaGlz dG9ncmFtX3NldF9sZXZlbHMoZGV2LCBwaXBlLCBsZXZlbHMpOwo+ICsKPiArCWludGVsX3BhbmVs X3NldF9iYWNrbGlnaHQoZGV2LCBkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsKTsKPiArfQo+ICsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZml4ZWRwb2ludC5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZml4ZWRwb2ludC5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mZmY1ZjBiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZpeGVkcG9pbnQuaAo+IEBAIC0wLDAgKzEsMTQwIEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDEyIFRoZSBDaHJvbWl1bSBPUyBBdXRob3JzLgo+ICsg KiBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlCj4gKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcKPiArICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAo+ICsgKiBkaXN0cmlidXRlLCBz dWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCj4g KyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0bwo+ICsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlCj4gKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCj4gKyAqIG9mIHRoZSBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiArICogT1IgSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5U Lgo+ICsgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SCj4gKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAo+ICsgKiBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQo+ICsg KiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICovCj4gKwo+ICsvKgo+ICsgKiBUaGUgYmFja2xpZ2h0IGlzIGNvcnJlY3RlZCBp biBsaW5lYXIgc3BhY2UuIEhvd2V2ZXIgdGhlIExDRCBjb3JyZWN0aW9uIGlzCj4gKyAqIGNvcnJl Y3RlZCBpbiBnYW1hIHNwYWNlLiBTbyB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3Rp b24gdmFsdWUgZm9yCj4gKyAqIHRoZSBMQ0QsIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgaW52ZXJz ZSBnYW1tYS4gVG8gZG8gc28sIHdlIGNhcnJ5IHRoaXMKPiArICogc21hbGwgZml4ZWQgcG9pbnQg bW9kdWxlIHdoaWNoIGFsbG93cyB1cyB0byB1c2UgcG93KCkgdG8gY29tcHV0ZSBpbnZlcnNlCj4g KyAqIGdhbW1hLgo+ICsgKgo+ICsgKiBUaGUgZml4ZWQgcG9pbnQgZm9ybWF0IHVzZWQgaGVyZSBp cyAxNi4xNi4KPiArICovCj4gKwo+ICsvKiBpbnRlbF9maXhlZF9leHBfdGJsW3gqMzJdID0gZXhw KHgpICogNjU1MzYgKi8KPiArc3RhdGljIGNvbnN0IGludCBpbnRlbF9maXhlZF9leHBfdGJsWzMz XSA9IHsKPiArMHgwMDAxMDAwMCwgMHgwMDAxMDgyMCwgMHgwMDAxMTA4MywgMHgwMDAxMTkyOSwg MHgwMDAxMjIxNiwgMHgwMDAxMmI0YiwKPiArMHgwMDAxMzRjYywgMHgwMDAxM2U5OSwgMHgwMDAx NDhiNiwgMHgwMDAxNTMyNSwgMHgwMDAxNWRlOSwgMHgwMDAxNjkwNSwKPiArMHgwMDAxNzQ3YSwg MHgwMDAxODA0ZCwgMHgwMDAxOGM4MCwgMHgwMDAxOTkxNiwgMHgwMDAxYTYxMywgMHgwMDAxYjM3 OCwKPiArMHgwMDAxYzE0YiwgMHgwMDAxY2Y4ZSwgMHgwMDAxZGU0NSwgMHgwMDAxZWQ3NCwgMHgw MDAxZmQxZSwgMHgwMDAyMGQ0NywKPiArMHgwMDAyMWRmNCwgMHgwMDAyMmYyOCwgMHgwMDAyNDBl OCwgMHgwMDAyNTMzOCwgMHgwMDAyNjYxZCwgMHgwMDAyNzk5YiwKPiArMHgwMDAyOGRiOCwgMHgw MDAyYTI3OCwgMHgwMDAyYjdlMQo+ICt9Owo+ICsKPiArLyogaW50ZWxfZml4ZWRfbG9nX3RibFt4 KjMyXSA9IGxvZyh4KSAqIDY1NTM2ICovCj4gK3N0YXRpYyBjb25zdCBpbnQgaW50ZWxfZml4ZWRf bG9nX3RibFszM10gPSB7Cj4gKzB4ODAwMDAwMDAsIDB4ZmZmYzg4YzYsIDB4ZmZmZDNhMzgsIDB4 ZmZmZGEyMDQsIDB4ZmZmZGViYWEsIDB4ZmZmZTI0Y2EsCj4gKzB4ZmZmZTUzNzYsIDB4ZmZmZTdh ZWQsIDB4ZmZmZTlkMWMsIDB4ZmZmZWJiNDMsIDB4ZmZmZWQ2M2MsIDB4ZmZmZWVlYTIsCj4gKzB4 ZmZmZjA0ZTgsIDB4ZmZmZjE5NjYsIDB4ZmZmZjJjNWYsIDB4ZmZmZjNlMDgsIDB4ZmZmZjRlOGUs IDB4ZmZmZjVlMTMsCj4gKzB4ZmZmZjZjYjUsIDB4ZmZmZjdhOGMsIDB4ZmZmZjg3YWUsIDB4ZmZm Zjk0MmIsIDB4ZmZmZmEwMTQsIDB4ZmZmZmFiNzUsCj4gKzB4ZmZmZmI2NWEsIDB4ZmZmZmMwY2Us IDB4ZmZmZmNhZDgsIDB4ZmZmZmQ0ODEsIDB4ZmZmZmRkZDEsIDB4ZmZmZmU2Y2QsCj4gKzB4ZmZm ZmVmN2EsIDB4ZmZmZmY3ZGYsIDB4ZmZmZmZmZmYKPiArfTsKPiArCj4gKy8qIGUgKiA2NTUzNiAq Lwo+ICsjZGVmaW5lIEZJWEVEX0UgKGludGVsX2ZpeGVkX2V4cF90YmxbMzJdKQo+ICsvKiAxICog NjU1MzYgKi8KPiArI2RlZmluZSBGSVhFRF9PTkUgNjU1MzYKPiArCj4gK3N0YXRpYyBpbnQgaW50 ZWxfZml4ZWRfbXVsKGludCBhLCBpbnQgYikKPiArewo+ICsJcmV0dXJuIChpbnQpICgoaW50NjRf dClhICogKGludDY0X3QpYiAvIDY1NTM2TEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGludGVs X2ZpeGVkX2RpdihpbnQgYSwgaW50IGIpCj4gK3sKPiArCXJldHVybiAoaW50KSAoKGludDY0X3Qp YSAqIDY1NTM2TEwgLyAoaW50NjRfdCliKTsKPiArfQo+ICsKPiArLyoKPiArICogQXBwcm94aW1h dGUgZml4ZWQgcG9pbnQgbG9nIGZ1bmN0aW9uLgo+ICsgKiBPbmx5IHdvcmtzIGZvciBpbnB1dHMg aW4gWzAsMVsKPiArICovCj4gK3N0YXRpYyBpbnQgaW50ZWxfZml4ZWRfbG9nKGludCB2YWwpCj4g K3sKPiArCWludCBpbmRleCA9IHZhbCAqIDMyIC8gRklYRURfT05FOwo+ICsJaW50IHJlbWFpbmRl ciA9ICh2YWwgJiAweDdmZikgPDwgNTsKPiArCWludCB2MSA9IGludGVsX2ZpeGVkX2xvZ190Ymxb aW5kZXhdOwo+ICsJaW50IHYyID0gaW50ZWxfZml4ZWRfbG9nX3RibFtpbmRleCsxXTsKPiArCWlu dCBmaW5hbCA9IHYxICsgaW50ZWxfZml4ZWRfbXVsKHYyIC0gdjEsIHJlbWFpbmRlcik7Cj4gKwly ZXR1cm4gZmluYWw7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEFwcHJveGltYXRlIGZpeGVkIHBvaW50 IGV4cCBmdW5jdGlvbi4KPiArICovCj4gK3N0YXRpYyBpbnQgaW50ZWxfZml4ZWRfZXhwKGludCB2 YWwpCj4gK3sKPiArCWludCBjb3VudCA9IDA7Cj4gKwlpbnQgaW5kZXgsIHJlbWFpbmRlcjsKPiAr CWludCBpbnRfcGFydCA9IEZJWEVEX09ORSwgZnJhY19wYXJ0Owo+ICsJaW50IGksIHYsIHYxLCB2 MjsKPiArCj4gKwl3aGlsZSAodmFsIDwgMCkgewo+ICsJCXZhbCArPSBGSVhFRF9PTkU7Cj4gKwkJ Y291bnQtLTsKPiArCX0KPiArCj4gKwl3aGlsZSAodmFsID4gRklYRURfT05FKSB7Cj4gKwkJdmFs IC09IEZJWEVEX09ORTsKPiArCQljb3VudCsrOwo+ICsJfQo+ICsKPiArCWluZGV4ID0gdmFsICog MzIgLyBGSVhFRF9PTkU7Cj4gKwlyZW1haW5kZXIgPSAodmFsICYgMHg3ZmYpIDw8IDU7Cj4gKwo+ ICsJdjEgPSBpbnRlbF9maXhlZF9leHBfdGJsW2luZGV4XTsKPiArCXYyID0gaW50ZWxfZml4ZWRf ZXhwX3RibFtpbmRleCsxXTsKPiArCWZyYWNfcGFydCA9IHYxICsgaW50ZWxfZml4ZWRfbXVsKHYy IC0gdjEsIHJlbWFpbmRlcik7Cj4gKwo+ICsJaWYgKGNvdW50IDwgMCkgewo+ICsJCWZvciAoaSA9 IDA7IGkgPCAtY291bnQ7IGkrKykKPiArCQkJaW50X3BhcnQgPSBpbnRlbF9maXhlZF9tdWwoaW50 X3BhcnQsIEZJWEVEX0UpOwo+ICsKPiArCQl2ID0gaW50ZWxfZml4ZWRfZGl2KGZyYWNfcGFydCwg aW50X3BhcnQpOwo+ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK PiArCQkJaW50X3BhcnQgPSBpbnRlbF9maXhlZF9tdWwoaW50X3BhcnQsIEZJWEVEX0UpOwo+ICsK PiArCQl2ID0gaW50ZWxfZml4ZWRfbXVsKGZyYWNfcGFydCwgaW50X3BhcnQpOwo+ICsJfQo+ICsJ cmV0dXJuICh2ID49IDApID8gdiA6IDA7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEFwcHJveGltYXRl IGZpeGVkIHBvaW50IHBvdyBmdW5jdGlvbi4KPiArICogT25seSB3b3JrcyBmb3IgeCBpbiBbMCwx Wwo+ICsgKi8KPiArc3RhdGljIGludCBpbnRlbF9maXhlZF9wb3coaW50IHgsIGludCB5KQo+ICt7 Cj4gKwlpbnQgZSwgcCwgcjsKPiArCWUgPSBpbnRlbF9maXhlZF9sb2coeCk7Cj4gKwlwID0gaW50 ZWxfZml4ZWRfbXVsKGUsIHkpOwo+ICsJciA9IGludGVsX2ZpeGVkX2V4cChwKTsKPiArCXJldHVy biByOwo+ICt9Cj4gKwo+ICsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKPiBpbmRleCAz ZjkyNDliLi5hZTk1MTYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BhbmVsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCj4gQEAg LTI1MSw2ICsyNTEsOCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wYW5lbF9hY3R1YWxseV9zZXRfYmFj a2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBsZXZlbAo+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXUzMiB0bXA7Cj4g IAo+ICsJbGV2ZWwgPSBsZXZlbCAqIGRldl9wcml2LT5iYWNrbGlnaHRfY29ycmVjdGlvbl9sZXZl bCA+PiA4Owo+ICsKPiAgCURSTV9ERUJVR19EUklWRVIoInNldCBiYWNrbGlnaHQgUFdNID0gJWRc biIsIGxldmVsKTsKPiAgCj4gIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQo+IEBAIC0zMDYsNiAr MzA4LDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX3BhbmVsX2luaXRfYmFja2xpZ2h0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gIAo+ICAJZGV2X3ByaXYtPmJhY2tsaWdodF9sZXZlbCA9IGludGVs X3BhbmVsX2dldF9iYWNrbGlnaHQoZGV2KTsKPiAgCWRldl9wcml2LT5iYWNrbGlnaHRfZW5hYmxl ZCA9IGRldl9wcml2LT5iYWNrbGlnaHRfbGV2ZWwgIT0gMDsKPiArCWRldl9wcml2LT5hZGFwdGl2 ZV9iYWNrbGlnaHRfZW5hYmxlZCA9IDA7Cj4gKwkvKiAyLjIgYXMgMTYuMTYgZml4ZWQgcG9pbnQg Ki8KPiArCWRldl9wcml2LT5hZGFwdGl2ZV9iYWNrbGlnaHRfcGFuZWxfZ2FtbWEgPSAxNDQxNzk7 Cj4gKwlkZXZfcHJpdi0+YmFja2xpZ2h0X2NvcnJlY3Rpb25fbGV2ZWwgPSAyNTY7Cj4gIH0KPiAg Cj4gIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0v aTkxNV9kcm0uaCBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKPiBpbmRleCBkYTkyOWJiLi43MGM5 Y2ZjIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKPiArKysgYi9pbmNsdWRl L2RybS9pOTE1X2RybS5oCj4gQEAgLTMwOSw2ICszMDksOCBAQCB0eXBlZGVmIHN0cnVjdCBkcm1f aTkxNV9nZXRwYXJhbSB7Cj4gICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9URVhfTFJVX0xPR19HUkFO VUxBUklUWSAgICAgICAgICAgICAyCj4gICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9BTExPV19CQVRD SEJVRkZFUiAgICAgICAgICAgICAgICAgICAzCj4gICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9OVU1f VVNFRF9GRU5DRVMgICAgICAgICAgICAgICAgICAgICA0Cj4gKyNkZWZpbmUgSTkxNV9TRVRQQVJB TV9BREFQVElWRV9CQUNLTElHSFRfRU5BQkxFICAgICAgICAgICA1Cj4gKyNkZWZpbmUgSTkxNV9T RVRQQVJBTV9QQU5FTF9HQU1NQSAgICAgICAgICAgICAgICAgICAgICAgICA2Cj4gIAo+ICB0eXBl ZGVmIHN0cnVjdCBkcm1faTkxNV9zZXRwYXJhbSB7Cj4gIAlpbnQgcGFyYW07Cj4gLS0gCj4gMS43 LjUuMy4zNjcuZ2E5OTMwCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=