From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH 8/9] drm/xen-front: Implement GEM operations Date: Tue, 6 Mar 2018 09:43:16 +0200 Message-ID: References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-9-git-send-email-andr2000@gmail.com> <20180305093225.GK22212@phenom.ffwll.local> <20180306072616.GQ22212@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1et7Fr-00019v-Bd for xen-devel@lists.xenproject.org; Tue, 06 Mar 2018 07:43:23 +0000 Received: by mail-lf0-x243.google.com with SMTP id r80so26982604lfe.13 for ; Mon, 05 Mar 2018 23:43:19 -0800 (PST) In-Reply-To: <20180306072616.GQ22212@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org T24gMDMvMDYvMjAxOCAwOToyNiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBNb24sIE1h ciAwNSwgMjAxOCBhdCAwMzo0NjowN1BNICswMjAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3 cm90ZToKPj4gT24gMDMvMDUvMjAxOCAxMTozMiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+ IE9uIFdlZCwgRmViIDIxLCAyMDE4IGF0IDEwOjAzOjQxQU0gKzAyMDAsIE9sZWtzYW5kciBBbmRy dXNoY2hlbmtvIHdyb3RlOgo+Pj4+IEZyb206IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVr c2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+Pgo+Pj4+IEltcGxlbWVudCBHRU0gaGFu ZGxpbmcgZGVwZW5kaW5nIG9uIGRyaXZlciBtb2RlIG9mIG9wZXJhdGlvbjoKPj4+PiBkZXBlbmRp bmcgb24gdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBhcmEtdmlydHVhbGl6ZWQgZW52aXJvbm1l bnQsIG5hbWVseQo+Pj4+IHJlcXVpcmVtZW50cyBkaWN0YXRlZCBieSB0aGUgYWNjb21wYW55aW5n IERSTS8odilHUFUgZHJpdmVycyBydW5uaW5nIGluIGJvdGgKPj4+PiBob3N0IGFuZCBndWVzdCBl bnZpcm9ubWVudHMsIG51bWJlciBvZiBvcGVyYXRpbmcgbW9kZXMgb2YgcGFyYS12aXJ0dWFsaXpl ZAo+Pj4+IGRpc3BsYXkgZHJpdmVyIGFyZSBzdXBwb3J0ZWQ6Cj4+Pj4gICAgLSBkaXNwbGF5IGJ1 ZmZlcnMgY2FuIGJlIGFsbG9jYXRlZCBieSBlaXRoZXIgZnJvbnRlbmQgZHJpdmVyIG9yIGJhY2tl bmQKPj4+PiAgICAtIGRpc3BsYXkgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkIHRvIGJlIGNvbnRp Z3VvdXMgaW4gbWVtb3J5IG9yIG5vdAo+Pj4+Cj4+Pj4gTm90ZSEgRnJvbnRlbmQgZHJpdmVyIGl0 c2VsZiBoYXMgbm8gZGVwZW5kZW5jeSBvbiBjb250aWd1b3VzIG1lbW9yeSBmb3IKPj4+PiBpdHMg b3BlcmF0aW9uLgo+Pj4+Cj4+Pj4gMS4gQnVmZmVycyBhbGxvY2F0ZWQgYnkgdGhlIGZyb250ZW5k IGRyaXZlci4KPj4+Pgo+Pj4+IFRoZSBiZWxvdyBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIGNvbmZp Z3VyZWQgYXQgY29tcGlsZS10aW1lIHZpYQo+Pj4+IGZyb250ZW5kIGRyaXZlcidzIGtlcm5lbCBj b25maWd1cmF0aW9uLgo+Pj4+Cj4+Pj4gMS4xLiBGcm9udCBkcml2ZXIgY29uZmlndXJlZCB0byB1 c2UgR0VNIENNQSBoZWxwZXJzCj4+Pj4gICAgICAgIFRoaXMgdXNlLWNhc2UgaXMgdXNlZnVsIHdo ZW4gdXNlZCB3aXRoIGFjY29tcGFueWluZyBEUk0vdkdQVSBkcml2ZXIgaW4KPj4+PiAgICAgICAg Z3Vlc3QgZG9tYWluIHdoaWNoIHdhcyBkZXNpZ25lZCB0byBvbmx5IHdvcmsgd2l0aCBjb250aWd1 b3VzIGJ1ZmZlcnMsCj4+Pj4gICAgICAgIGUuZy4gRFJNIGRyaXZlciBiYXNlZCBvbiBHRU0gQ01B IGhlbHBlcnM6IHN1Y2ggZHJpdmVycyBjYW4gb25seSBpbXBvcnQKPj4+PiAgICAgICAgY29udGln dW91cyBQUklNRSBidWZmZXJzLCB0aHVzIHJlcXVpcmluZyBmcm9udGVuZCBkcml2ZXIgdG8gcHJv dmlkZQo+Pj4+ICAgICAgICBzdWNoLiBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhpcyBtb2RlIG9m IG9wZXJhdGlvbiBwYXJhLXZpcnR1YWxpemVkCj4+Pj4gICAgICAgIGZyb250ZW5kIGRyaXZlciBj YW4gYmUgY29uZmlndXJlZCB0byB1c2UgR0VNIENNQSBoZWxwZXJzLgo+Pj4+Cj4+Pj4gMS4yLiBG cm9udCBkcml2ZXIgZG9lc24ndCB1c2UgR0VNIENNQQo+Pj4+ICAgICAgICBJZiBhY2NvbXBhbnlp bmcgZHJpdmVycyBjYW4gY29wZSB3aXRoIG5vbi1jb250aWd1b3VzIG1lbW9yeSB0aGVuLCB0bwo+ Pj4+ICAgICAgICBsb3dlciBwcmVzc3VyZSBvbiBDTUEgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWws IGRyaXZlciBjYW4gYWxsb2NhdGUKPj4+PiAgICAgICAgYnVmZmVycyBmcm9tIHN5c3RlbSBtZW1v cnkuCj4+Pj4KPj4+PiBOb3RlISBJZiB1c2VkIHdpdGggYWNjb21wYW55aW5nIERSTS8odilHUFUg ZHJpdmVycyB0aGlzIG1vZGUgb2Ygb3BlcmF0aW9uCj4+Pj4gbWF5IHJlcXVpcmUgSU9NTVUgc3Vw cG9ydCBvbiB0aGUgcGxhdGZvcm0sIHNvIGFjY29tcGFueWluZyBEUk0vdkdQVQo+Pj4+IGhhcmR3 YXJlIGNhbiBzdGlsbCByZWFjaCBkaXNwbGF5IGJ1ZmZlciBtZW1vcnkgd2hpbGUgaW1wb3J0aW5n IFBSSU1FCj4+Pj4gYnVmZmVycyBmcm9tIHRoZSBmcm9udGVuZCBkcml2ZXIuCj4+Pj4KPj4+PiAy LiBCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgYmFja2VuZAo+Pj4+Cj4+Pj4gVGhpcyBtb2RlIG9m IG9wZXJhdGlvbiBpcyBydW4tdGltZSBjb25maWd1cmVkIHZpYSBndWVzdCBkb21haW4gY29uZmln dXJhdGlvbgo+Pj4+IHRocm91Z2ggWGVuU3RvcmUgZW50cmllcy4KPj4+Pgo+Pj4+IEZvciBzeXN0 ZW1zIHdoaWNoIGRvIG5vdCBwcm92aWRlIElPTU1VIHN1cHBvcnQsIGJ1dCBoYXZpbmcgc3BlY2lm aWMKPj4+PiByZXF1aXJlbWVudHMgZm9yIGRpc3BsYXkgYnVmZmVycyBpdCBpcyBwb3NzaWJsZSB0 byBhbGxvY2F0ZSBzdWNoIGJ1ZmZlcnMKPj4+PiBhdCBiYWNrZW5kIHNpZGUgYW5kIHNoYXJlIHRo b3NlIHdpdGggdGhlIGZyb250ZW5kLgo+Pj4+IEZvciBleGFtcGxlLCBpZiBob3N0IGRvbWFpbiBp cyAxOjEgbWFwcGVkIGFuZCBoYXMgRFJNL0dQVSBoYXJkd2FyZSBleHBlY3RpbmcKPj4+PiBwaHlz aWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGlzIGFsbG93cyBpbXBsZW1lbnRpbmcgemVyby1j b3B5aW5nCj4+Pj4gdXNlLWNhc2VzLgo+Pj4+Cj4+Pj4gTm90ZSEgQ29uZmlndXJhdGlvbiBvcHRp b25zIDEuMSAoY29udGlndW91cyBkaXNwbGF5IGJ1ZmZlcnMpIGFuZCAyIChiYWNrZW5kCj4+Pj4g YWxsb2NhdGVkIGJ1ZmZlcnMpIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoZSBzYW1lIHRpbWUuCj4+ Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRy X2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4+PiBTb21lIHN1Z2dlc3Rpb25zIGJlbG93IGZvciBz b21lIGxhcmdlciBjbGVhbnVwIHdvcmsuCj4+PiAtRGFuaWVsCj4+Pgo+Pj4+IC0tLQo+Pj4+ICAg IGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgMTMgKwo+Pj4+ ICAgIGRyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDYgKwo+ Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oICAgICAgICAgfCAgNzQg KysrKysrCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jICAg ICB8ICA4MCArKysrKystCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2Rydi5oICAgICB8ICAgMSArCj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jICAgICB8IDM2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4gICAg ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5oICAgICB8ICA0NiArKysrCj4+ Pj4gICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbV9jbWEuYyB8ICA5MyAr KysrKysrCj4+Pj4gICAgOCBmaWxlcyBjaGFuZ2VkLCA2NjcgaW5zZXJ0aW9ucygrKSwgNiBkZWxl dGlvbnMoLSkKPj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2dlbS5jCj4+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jCj4+Pj4KPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3hl bi9LY29uZmlnCj4+Pj4gaW5kZXggNGNjYTE2MDc4MmFiLi40ZjRhYmM5MWYzYjYgMTAwNjQ0Cj4+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnCj4+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hlbi9LY29uZmlnCj4+Pj4gQEAgLTE1LDMgKzE1LDE2IEBAIGNvbmZpZyBEUk1fWEVO X0ZST05URU5ECj4+Pj4gICAgCWhlbHAKPj4+PiAgICAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYg eW91IHdhbnQgdG8gZW5hYmxlIGEgcGFyYS12aXJ0dWFsaXplZAo+Pj4+ICAgIAkgIGZyb250ZW5k IERSTS9LTVMgZHJpdmVyIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KPj4+PiArCj4+Pj4gK2NvbmZpZyBE Uk1fWEVOX0ZST05URU5EX0NNQQo+Pj4+ICsJYm9vbCAiVXNlIERSTSBDTUEgdG8gYWxsb2NhdGUg ZHVtYiBidWZmZXJzIgo+Pj4+ICsJZGVwZW5kcyBvbiBEUk1fWEVOX0ZST05URU5ECj4+Pj4gKwlz ZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCj4+Pj4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVS Cj4+Pj4gKwloZWxwCj4+Pj4gKwkgIFVzZSBEUk0gQ01BIGhlbHBlcnMgdG8gYWxsb2NhdGUgZGlz cGxheSBidWZmZXJzLgo+Pj4+ICsJICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIHVzZS1jYXNlcyB3 aGVuIGd1ZXN0IGRyaXZlciBuZWVkcyB0bwo+Pj4+ICsJICBzaGFyZSBvciBleHBvcnQgYnVmZmVy cyB0byBvdGhlciBkcml2ZXJzIHdoaWNoIG9ubHkgZXhwZWN0Cj4+Pj4gKwkgIGNvbnRpZ3VvdXMg YnVmZmVycy4KPj4+PiArCSAgTm90ZTogaW4gdGhpcyBtb2RlIGRyaXZlciBjYW5ub3QgdXNlIGJ1 ZmZlcnMgYWxsb2NhdGVkCj4+Pj4gKwkgIGJ5IHRoZSBiYWNrZW5kLgo+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtl ZmlsZQo+Pj4+IGluZGV4IDRmY2IwZGExYTljNS4uMTIzNzZlYzc4ZmJjIDEwMDY0NAo+Pj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUKPj4+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0veGVuL01ha2VmaWxlCj4+Pj4gQEAgLTgsNCArOCwxMCBAQCBkcm1feGVuX2Zyb250LW9ianMg Oj0geGVuX2RybV9mcm9udC5vIFwKPj4+PiAgICAJCSAgICAgIHhlbl9kcm1fZnJvbnRfc2hidWYu byBcCj4+Pj4gICAgCQkgICAgICB4ZW5fZHJtX2Zyb250X2NmZy5vCj4+Pj4gK2lmZXEgKCQoQ09O RklHX0RSTV9YRU5fRlJPTlRFTkRfQ01BKSx5KQo+Pj4+ICsJZHJtX3hlbl9mcm9udC1vYmpzICs9 IHhlbl9kcm1fZnJvbnRfZ2VtX2NtYS5vCj4+Pj4gK2Vsc2UKPj4+PiArCWRybV94ZW5fZnJvbnQt b2JqcyArPSB4ZW5fZHJtX2Zyb250X2dlbS5vCj4+Pj4gK2VuZGlmCj4+Pj4gKwo+Pj4+ICAgIG9i ai0kKENPTkZJR19EUk1fWEVOX0ZST05URU5EKSArPSBkcm1feGVuX2Zyb250Lm8KPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmggYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaAo+Pj4+IGluZGV4IDllZDViZmIyNDhkMC4uYzZmNTJj ODkyNDM0IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dC5oCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKPj4+PiBA QCAtMzQsNiArMzQsODAgQEAKPj4+PiAgICBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmU7Cj4+Pj4gKy8qCj4+Pj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+Pj4gKyAqIFBhcmEt dmlydHVhbGl6ZWQgRFJNL0tNUyBmcm9udGVuZCBkcml2ZXIKPj4+PiArICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKPj4+PiArICogVGhpcyBmcm9udGVuZCBkcml2ZXIgaW1wbGVtZW50cyBYZW4gcGFy YS12aXJ0dWFsaXplZCBkaXNwbGF5Cj4+Pj4gKyAqIGFjY29yZGluZyB0byB0aGUgZGlzcGxheSBw cm90b2NvbCBkZXNjcmliZWQgYXQKPj4+PiArICogaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL2Rp c3BsaWYuaAo+Pj4+ICsgKgo+Pj4+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+Pj4+ICsgKiBE cml2ZXIgbW9kZXMgb2Ygb3BlcmF0aW9uIGluIHRlcm1zIG9mIGRpc3BsYXkgYnVmZmVycyB1c2Vk Cj4+Pj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+Pj4gKyAqIERlcGVuZGluZyBvbiB0aGUg cmVxdWlyZW1lbnRzIGZvciB0aGUgcGFyYS12aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbmFtZWx5 Cj4+Pj4gKyAqIHJlcXVpcmVtZW50cyBkaWN0YXRlZCBieSB0aGUgYWNjb21wYW55aW5nIERSTS8o dilHUFUgZHJpdmVycyBydW5uaW5nIGluIGJvdGgKPj4+PiArICogaG9zdCBhbmQgZ3Vlc3QgZW52 aXJvbm1lbnRzLCBudW1iZXIgb2Ygb3BlcmF0aW5nIG1vZGVzIG9mIHBhcmEtdmlydHVhbGl6ZWQK Pj4+PiArICogZGlzcGxheSBkcml2ZXIgYXJlIHN1cHBvcnRlZDoKPj4+PiArICogIC0gZGlzcGxh eSBidWZmZXJzIGNhbiBiZSBhbGxvY2F0ZWQgYnkgZWl0aGVyIGZyb250ZW5kIGRyaXZlciBvciBi YWNrZW5kCj4+Pj4gKyAqICAtIGRpc3BsYXkgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkIHRvIGJl IGNvbnRpZ3VvdXMgaW4gbWVtb3J5IG9yIG5vdAo+Pj4+ICsgKgo+Pj4+ICsgKiBOb3RlISBGcm9u dGVuZCBkcml2ZXIgaXRzZWxmIGhhcyBubyBkZXBlbmRlbmN5IG9uIGNvbnRpZ3VvdXMgbWVtb3J5 IGZvcgo+Pj4+ICsgKiAgICAgICBpdHMgb3BlcmF0aW9uLgo+Pj4+ICsgKgo+Pj4+ICsgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgo+Pj4+ICsgKiAxLiBCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgZnJv bnRlbmQgZHJpdmVyLgo+Pj4+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+Pj4+ICsgKgo+Pj4+ ICsgKiBUaGUgYmVsb3cgbW9kZXMgb2Ygb3BlcmF0aW9uIGFyZSBjb25maWd1cmVkIGF0IGNvbXBp bGUtdGltZSB2aWEKPj4+PiArICogZnJvbnRlbmQgZHJpdmVyJ3Mga2VybmVsIGNvbmZpZ3VyYXRp b24uCj4+Pj4gKyAqCj4+Pj4gKyAqIDEuMS4gRnJvbnQgZHJpdmVyIGNvbmZpZ3VyZWQgdG8gdXNl IEdFTSBDTUEgaGVscGVycwo+Pj4+ICsgKiAgICAgIFRoaXMgdXNlLWNhc2UgaXMgdXNlZnVsIHdo ZW4gdXNlZCB3aXRoIGFjY29tcGFueWluZyBEUk0vdkdQVSBkcml2ZXIgaW4KPj4+PiArICogICAg ICBndWVzdCBkb21haW4gd2hpY2ggd2FzIGRlc2lnbmVkIHRvIG9ubHkgd29yayB3aXRoIGNvbnRp Z3VvdXMgYnVmZmVycywKPj4+PiArICogICAgICBlLmcuIERSTSBkcml2ZXIgYmFzZWQgb24gR0VN IENNQSBoZWxwZXJzOiBzdWNoIGRyaXZlcnMgY2FuIG9ubHkgaW1wb3J0Cj4+Pj4gKyAqICAgICAg Y29udGlndW91cyBQUklNRSBidWZmZXJzLCB0aHVzIHJlcXVpcmluZyBmcm9udGVuZCBkcml2ZXIg dG8gcHJvdmlkZQo+Pj4+ICsgKiAgICAgIHN1Y2guIEluIG9yZGVyIHRvIGltcGxlbWVudCB0aGlz IG1vZGUgb2Ygb3BlcmF0aW9uIHBhcmEtdmlydHVhbGl6ZWQKPj4+PiArICogICAgICBmcm9udGVu ZCBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEdFTSBDTUEgaGVscGVycy4KPj4+PiAr ICoKPj4+PiArICogMS4yLiBGcm9udCBkcml2ZXIgZG9lc24ndCB1c2UgR0VNIENNQQo+Pj4+ICsg KiAgICAgIElmIGFjY29tcGFueWluZyBkcml2ZXJzIGNhbiBjb3BlIHdpdGggbm9uLWNvbnRpZ3Vv dXMgbWVtb3J5IHRoZW4sIHRvCj4+Pj4gKyAqICAgICAgbG93ZXIgcHJlc3N1cmUgb24gQ01BIHN1 YnN5c3RlbSBvZiB0aGUga2VybmVsLCBkcml2ZXIgY2FuIGFsbG9jYXRlCj4+Pj4gKyAqICAgICAg YnVmZmVycyBmcm9tIHN5c3RlbSBtZW1vcnkuCj4+Pj4gKyAqCj4+Pj4gKyAqIE5vdGUhIElmIHVz ZWQgd2l0aCBhY2NvbXBhbnlpbmcgRFJNLyh2KUdQVSBkcml2ZXJzIHRoaXMgbW9kZSBvZiBvcGVy YXRpb24KPj4+PiArICogICBtYXkgcmVxdWlyZSBJT01NVSBzdXBwb3J0IG9uIHRoZSBwbGF0Zm9y bSwgc28gYWNjb21wYW55aW5nIERSTS92R1BVCj4+Pj4gKyAqICAgaGFyZHdhcmUgY2FuIHN0aWxs IHJlYWNoIGRpc3BsYXkgYnVmZmVyIG1lbW9yeSB3aGlsZSBpbXBvcnRpbmcgUFJJTUUKPj4+PiAr ICogICBidWZmZXJzIGZyb20gdGhlIGZyb250ZW5kIGRyaXZlci4KPj4+PiArICoKPj4+PiArICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKPj4+PiArICogMi4gQnVmZmVycyBhbGxvY2F0ZWQgYnkgdGhl IGJhY2tlbmQKPj4+PiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPj4+PiArICoKPj4+PiArICog VGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBydW4tdGltZSBjb25maWd1cmVkIHZpYSBndWVzdCBk b21haW4gY29uZmlndXJhdGlvbgo+Pj4+ICsgKiB0aHJvdWdoIFhlblN0b3JlIGVudHJpZXMuCj4+ Pj4gKyAqCj4+Pj4gKyAqIEZvciBzeXN0ZW1zIHdoaWNoIGRvIG5vdCBwcm92aWRlIElPTU1VIHN1 cHBvcnQsIGJ1dCBoYXZpbmcgc3BlY2lmaWMKPj4+PiArICogcmVxdWlyZW1lbnRzIGZvciBkaXNw bGF5IGJ1ZmZlcnMgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgc3VjaCBidWZmZXJzCj4+Pj4g KyAqIGF0IGJhY2tlbmQgc2lkZSBhbmQgc2hhcmUgdGhvc2Ugd2l0aCB0aGUgZnJvbnRlbmQuCj4+ Pj4gKyAqIEZvciBleGFtcGxlLCBpZiBob3N0IGRvbWFpbiBpcyAxOjEgbWFwcGVkIGFuZCBoYXMg RFJNL0dQVSBoYXJkd2FyZSBleHBlY3RpbmcKPj4+PiArICogcGh5c2ljYWxseSBjb250aWd1b3Vz IG1lbW9yeSwgdGhpcyBhbGxvd3MgaW1wbGVtZW50aW5nIHplcm8tY29weWluZwo+Pj4+ICsgKiB1 c2UtY2FzZXMuCj4+Pj4gKyAqCj4+Pj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+Pj4gKyAq IERyaXZlciBsaW1pdGF0aW9ucwo+Pj4+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+Pj4+ICsg KiAxLiBDb25maWd1cmF0aW9uIG9wdGlvbnMgMS4xIChjb250aWd1b3VzIGRpc3BsYXkgYnVmZmVy cykgYW5kIDIgKGJhY2tlbmQKPj4+PiArICogICAgYWxsb2NhdGVkIGJ1ZmZlcnMpIGFyZSBub3Qg c3VwcG9ydGVkIGF0IHRoZSBzYW1lIHRpbWUuCj4+Pj4gKyAqCj4+Pj4gKyAqIDIuIE9ubHkgcHJp bWFyeSBwbGFuZSB3aXRob3V0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBpcyBzdXBwb3J0ZWQuCj4+ Pj4gKyAqCj4+Pj4gKyAqIDMuIE9ubHkgb25lIHZpZGVvIG1vZGUgc3VwcG9ydGVkIHdoaWNoIGlz IGNvbmZpZ3VyZWQgdmlhIFhlblN0b3JlLgo+Pj4+ICsgKgo+Pj4+ICsgKiA0LiBBbGwgQ1JUQ3Mg b3BlcmF0ZSBhdCBmaXhlZCBmcmVxdWVuY3kgb2YgNjBIei4KPj4+PiArICoKPj4+PiArICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KPj4+IFNpbmNlIHlvdSd2ZSB0eXBlZCB0aGlzIGFsbCB1cCwgcGxz IGNvbnZlcnQgaXQgdG8ga2VybmVsLWRvYyBhbmQgcHVsbCBpdAo+Pj4gaW50byBhIHhlbi1mcm9u dC5yc3QgZHJpdmVyIHNlY3Rpb24gaW4gRG9jdW1lbnRhdGlvbi9ncHUvIFRoZXJlJ3MgYSBmZXcK Pj4+IGV4YW1wbGVzIGZvciBpOTE1IGFuZCB2YzQgYWxyZWFkeS4KPj4gRG8geW91IG1lYW4gdG8g bW92ZSBvciB0byBrZWVwIGluIHRoZSBkcml2ZXIgYW5kIGFkZCBpbiB0aGUKPj4gRG9jdW1lbnRh dGlvbj8gSSB3b3VsZCBwcmVmZXIgdG8gbW92ZSB0byBoYXZlIHRoZSBkZXNjcmlwdGlvbgo+PiBh dCBzaW5nbGUgcGxhY2UuCj4gS2VlcCBpdCB3aGVyZSBpdCBpcywgYnV0IHJlZm9ybWF0IGFzIGEg Y29ycmVjdCBrZXJuZWxkb2MgKGl0J3MgUlNUIGZvcm1hdCkKPiBhbmQgcHVsbCBpdCBpbiBhcyBh IERPQzogc2VjdGlvbi4gU2VlCj4KPiBodHRwczovL2RyaS5mcmVlZGVza3RvcC5vcmcvZG9jcy9k cm0vZG9jLWd1aWRlL2tlcm5lbC1kb2MuaHRtbAo+Cj4gYW5kIHRoZSBvdGhlciBzZWN0aW9ucyBp biB0aGF0IGNoYXB0ZXIuClRoYW5rIHlvdSwgYWxyZWFkeSB0cmllZCBwbGF5aW5nIHdpdGggdGhh dCBhbmQgSSBzZWUKdGhhdCBpdCBpcyB3YXkgZWFzaWVyIHRvIG1vdmUgdGhlIGRlc2NyaXB0aW9u IHRvIGFuIHJzdCBmaWxlCnRoYW4ga2VlcGluZyBpdCBpbiB0aGUgaGVhZGVyOiBmb3Igc3VjaCBh IGRlc2NyaXB0aW9uIHRoYXQKSSBoYXZlIGluIHRoZSBoZWFkZXIgaXQgaXMgbm90IGVhc3kgdG8g Zm9ybWF0IHRleHQgcHJvcGVybHkuCkZvciBleGFtcGxlLCBpZiBJIGhhZCB0aG9zZSBzbWFsbCBz ZWN0aW9ucyBpbiBkaWZmZXJlbnQgZmlsZXMsCnRoZW4gcHJvYmFibHkgdGhhdCBoYXZlIHdvcmtl ZCBmaW5lLgpTbywgSSB3aWxsIG1vdmUgdG8geGVuLWZyb250LnJzdCB1bmRlciBEb2N1bWVudGF0 aW9uL2dwdQo+Pj4+ICsKPj4+PiAgICBzdHJ1Y3QgeGVuX2RybV9mcm9udF9vcHMgewo+Pj4+ICAg IAlpbnQgKCptb2RlX3NldCkoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBl bGluZSwKPj4+PiAgICAJCQl1aW50MzJfdCB4LCB1aW50MzJfdCB5LCB1aW50MzJfdCB3aWR0aCwg dWludDMyX3QgaGVpZ2h0LAo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2 LmMKPj4+PiBpbmRleCBlODg2MmQyNmJhMjcuLjM1ZTdlOWNkYTlkMSAxMDA2NDQKPj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMKPj4+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMKPj4+PiBAQCAtMjMsMTIgKzIzLDU4 IEBACj4+Pj4gICAgI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPj4+PiAgICAjaW5jbHVkZSAi eGVuX2RybV9mcm9udF9jZmcuaCIKPj4+PiAgICAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYu aCIKPj4+PiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZ2VtLmgiCj4+Pj4gICAgI2luY2x1ZGUg Inhlbl9kcm1fZnJvbnRfa21zLmgiCj4+Pj4gICAgc3RhdGljIGludCBkdW1iX2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbHAsCj4+Pj4gICAgCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4+Pj4gICAgewo+Pj4+IC0JcmV0dXJuIC1F SU5WQUw7Cj4+Pj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBk ZXYtPmRldl9wcml2YXRlOwo+Pj4+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4+Pj4g KwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCXJldCA9IGRybV9pbmZvLT5nZW1fb3BzLT5kdW1iX2Ny ZWF0ZShmaWxwLCBkZXYsIGFyZ3MpOwo+Pj4+ICsJaWYgKHJldCkKPj4+PiArCQlnb3RvIGZhaWw7 Cj4+Pj4gKwo+Pj4+ICsJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbHAsIGFyZ3MtPmhh bmRsZSk7Cj4+Pj4gKwlpZiAoIW9iaikgewo+Pj4+ICsJCXJldCA9IC1FTk9FTlQ7Cj4+Pj4gKwkJ Z290byBmYWlsX2Rlc3Ryb3k7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKPj4+PiArCj4+Pj4gKwkvKgo+Pj4+ICsJICogSW4g Y2FzZSBvZiBDT05GSUdfRFJNX1hFTl9GUk9OVEVORF9DTUEgZ2VtX29iaiBpcyBjb25zdHJ1Y3Rl ZAo+Pj4+ICsJICogdmlhIERSTSBDTUEgaGVscGVycyBhbmQgZG9lc24ndCBoYXZlIC0+cGFnZXMg YWxsb2NhdGVkCj4+Pj4gKwkgKiAoeGVuZHJtX2dlbV9nZXRfcGFnZXMgd2lsbCByZXR1cm4gTlVM TCksIGJ1dCBpbnN0ZWFkIGNhbiBwcm92aWRlCj4+Pj4gKwkgKiBzZyB0YWJsZQo+Pj4+ICsJICov Cj4+PiBNeSByZWNvbW1lbmRhdGlvbiBpcyB0byB1c2UgYW4gc2cgdGFibGUgZm9yIGV2ZXJ5dGhp bmcgaWYgeW91IGRlYWwgd2l0aAo+Pj4gbWl4ZWQgb2JqZWN0cyAoQ01BLCBzcGVjaWFsIGJsb2Nr cyAxOjEgbWFwcGVkIGZyb20gaG9zdCwgbm9ybWFsIHBhZ2VzKS4KPj4+IFRoYXQgYXZvaWRzIHRo ZSBjb25zdGFudCBnZXRfcGFnZXMgdnMuIGdldF9zZ3QgZGlmZmVyZW5jZXMuIEZvciBleGFtcGxl cwo+Pj4gc2VlIGhvdyBlLmcuIGk5MTUgaGFuZGxlcyB0aGUgdmFyaW91cyBnZW0gb2JqZWN0IGJh Y2tlbmRzLgo+PiBJbmRlZWQsIEkgdHJpZWQgdG8gZG8gdGhhdCB0aGlzIHdheSBiZWZvcmUsIGUu Zy4gaGF2ZSBhbGwgc2d0IGJhc2VkLgo+PiBCdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGF5IFhlbiBz aGFyZWQgYnVmZmVyIGNvZGUgaW4gdGhlIGRyaXZlciB3b3Jrcwo+PiB3aXRoIHBhZ2VzIChYZW4g QVBJIGlzIHBhZ2UgYmFzZWQgdGhlcmUpLCBzbyBzZ3QgdGhlbiB3aWxsIGFueXdheSBuZWVkCj4+ IHRvIGJlIGNvbnZlcnRlZCBpbnRvIHBhZ2UgYXJyYXkuCj4+IEZvciB0aGF0IHJlYXNvbiBJIHBy ZWZlciB0byB3b3JrIHdpdGggcGFnZXMgZnJvbSB0aGUgYmVnaW5uaW5nLCBub3Qgc2d0Lgo+PiBB cyB0byBjb25zdGFudCBnZXRfcGFnZXMgZXRjLiAtIHRoaXMgaXMgdGhlIG9ubHkgZXhwZWN0ZWQg cGxhY2UgaW4gdGhlCj4+IGRyaXZlciBmb3IgdGhhdCwgc28gdGhlIF9mcm9tX3NndC9fZnJvbV9w YWdlcyBBUEkgaXMgb25seSB1c2VkIGhlcmUuCj4gWWVhaCB3YXMganVzdCBhIHN1Z2dlc3Rpb24g dG8gc2ltcGxpZnkgdGhlIGNvZGUuIEJ1dCBpZiB5b3UgaGF2ZSB0byBkZWFsCj4gd2l0aCBib3Ro LCB0aGVyZSdzIG5vdCBtdWNoIHBvaW50LgpBZ3JlZWQKPj4+PiArCWlmIChkcm1faW5mby0+Z2Vt X29wcy0+Z2V0X3BhZ2VzKG9iaikpCj4+Pj4gKwkJcmV0ID0gZHJtX2luZm8tPmZyb250X29wcy0+ ZGJ1Zl9jcmVhdGVfZnJvbV9wYWdlcygKPj4+PiArCQkJCWRybV9pbmZvLT5mcm9udF9pbmZvLAo+ Pj4+ICsJCQkJeGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZShvYmopLAo+Pj4+ICsJCQkJYXJn cy0+d2lkdGgsIGFyZ3MtPmhlaWdodCwgYXJncy0+YnBwLAo+Pj4+ICsJCQkJYXJncy0+c2l6ZSwK Pj4+PiArCQkJCWRybV9pbmZvLT5nZW1fb3BzLT5nZXRfcGFnZXMob2JqKSk7Cj4+Pj4gKwllbHNl Cj4+Pj4gKwkJcmV0ID0gZHJtX2luZm8tPmZyb250X29wcy0+ZGJ1Zl9jcmVhdGVfZnJvbV9zZ3Qo Cj4+Pj4gKwkJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPj4+PiArCQkJCXhlbl9kcm1fZnJvbnRf ZGJ1Zl90b19jb29raWUob2JqKSwKPj4+PiArCQkJCWFyZ3MtPndpZHRoLCBhcmdzLT5oZWlnaHQs IGFyZ3MtPmJwcCwKPj4+PiArCQkJCWFyZ3MtPnNpemUsCj4+Pj4gKwkJCQlkcm1faW5mby0+Z2Vt X29wcy0+cHJpbWVfZ2V0X3NnX3RhYmxlKG9iaikpOwo+Pj4+ICsJaWYgKHJldCkKPj4+PiArCQln b3RvIGZhaWxfZGVzdHJveTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gMDsKPj4+PiArCj4+Pj4gK2Zh aWxfZGVzdHJveToKPj4+PiArCWRybV9nZW1fZHVtYl9kZXN0cm95KGZpbHAsIGRldiwgYXJncy0+ aGFuZGxlKTsKPj4+PiArZmFpbDoKPj4+PiArCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBk dW1iIGJ1ZmZlcjogJWRcbiIsIHJldCk7Cj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICAgIH0KPj4+ PiAgICBzdGF0aWMgdm9pZCBmcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikK Pj4+PiBAQCAtMzcsNiArODMsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX29iamVjdChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaikKPj4+PiAgICAJZHJtX2luZm8tPmZyb250X29wcy0+ZGJ1Zl9kZXN0 cm95KGRybV9pbmZvLT5mcm9udF9pbmZvLAo+Pj4+ICAgIAkJCXhlbl9kcm1fZnJvbnRfZGJ1Zl90 b19jb29raWUob2JqKSk7Cj4+Pj4gKwlkcm1faW5mby0+Z2VtX29wcy0+ZnJlZV9vYmplY3RfdW5s b2NrZWQob2JqKTsKPj4+PiAgICB9Cj4+Pj4gICAgc3RhdGljIHZvaWQgb25fZnJhbWVfZG9uZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+Pj4+IEBAIC02MCwzMiArMTA3LDUyIEBAIHN0 YXRpYyB2b2lkIGxhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pj4+ICAgIHN0YXRp YyBpbnQgZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQo+Pj4+ICAgIHsKPj4+PiAtCXJldHVybiAtRUlOVkFMOwo+Pj4+ICsJc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4+Pj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2Owo+Pj4+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4+PiArCj4+Pj4g KwlyZXR1cm4gZHJtX2luZm8tPmdlbV9vcHMtPm1tYXAoZmlscCwgdm1hKTsKPj4+IFVoLCBzbyAx IG1pZGxheWVyIGZvciB0aGUga21zIHN0dWZmIGFuZCBhbm90aGVyIG1pZGxheWVyIGZvciB0aGUg Z2VtCj4+PiBzdHVmZi4gVGhhdCdzIHdheSB0b28gbXVjaCBpbmRpcmVjdGlvbi4KPj4gSWYgYnkg S01TIHlvdSBtZWFuIGZyb250X29wcyB0aGVuIC0xOiBJIHdpbGwgcmVtb3ZlIGZyb250X29wcy4K Pj4gQXMgdG8gZ2VtX29wcywgcGxlYXNlIHNlZSBiZWxvdwo+Pj4+ICAgIH0KPj4+PiAgICBzdGF0 aWMgc3RydWN0IHNnX3RhYmxlICpwcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4+Pj4gICAgewo+Pj4+IC0JcmV0dXJuIE5VTEw7Cj4+Pj4gKwlzdHJ1Y3QgeGVu X2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm87Cj4+Pj4gKwo+Pj4+ICsJZHJtX2luZm8gPSBv YmotPmRldi0+ZGV2X3ByaXZhdGU7Cj4+Pj4gKwlyZXR1cm4gZHJtX2luZm8tPmdlbV9vcHMtPnBy aW1lX2dldF9zZ190YWJsZShvYmopOwo+Pj4+ICAgIH0KPj4+PiAgICBzdGF0aWMgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpwcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPj4+PiAgICAJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNn X3RhYmxlICpzZ3QpCj4+Pj4gICAgewo+Pj4+IC0JcmV0dXJuIE5VTEw7Cj4+Pj4gKwlzdHJ1Y3Qg eGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm87Cj4+Pj4gKwo+Pj4+ICsJZHJtX2luZm8g PSBkZXYtPmRldl9wcml2YXRlOwo+Pj4+ICsJcmV0dXJuIGRybV9pbmZvLT5nZW1fb3BzLT5wcmlt ZV9pbXBvcnRfc2dfdGFibGUoZGV2LCBhdHRhY2gsIHNndCk7Cj4+Pj4gICAgfQo+Pj4+ICAgIHN0 YXRpYyB2b2lkICpwcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+Pj4+ICAg IHsKPj4+PiAtCXJldHVybiBOVUxMOwo+Pj4+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2lu Zm8gKmRybV9pbmZvOwo+Pj4+ICsKPj4+PiArCWRybV9pbmZvID0gb2JqLT5kZXYtPmRldl9wcml2 YXRlOwo+Pj4+ICsJcmV0dXJuIGRybV9pbmZvLT5nZW1fb3BzLT5wcmltZV92bWFwKG9iaik7Cj4+ Pj4gICAgfQo+Pj4+ICAgIHN0YXRpYyB2b2lkIHByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4+Pj4gICAgewo+Pj4+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvOwo+Pj4+ICsKPj4+PiArCWRybV9pbmZvID0gb2JqLT5k ZXYtPmRldl9wcml2YXRlOwo+Pj4+ICsJZHJtX2luZm8tPmdlbV9vcHMtPnByaW1lX3Z1bm1hcChv YmosIHZhZGRyKTsKPj4+PiAgICB9Cj4+Pj4gICAgc3RhdGljIGludCBwcmltZV9tbWFwKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4+PiAg ICB7Cj4+Pj4gLQlyZXR1cm4gLUVJTlZBTDsKPj4+PiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ry bV9pbmZvICpkcm1faW5mbzsKPj4+PiArCj4+Pj4gKwlkcm1faW5mbyA9IG9iai0+ZGV2LT5kZXZf cHJpdmF0ZTsKPj4+PiArCXJldHVybiBkcm1faW5mby0+Z2VtX29wcy0+cHJpbWVfbW1hcChvYmos IHZtYSk7Cj4+Pj4gICAgfQo+Pj4+ICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHhlbmRybV9mb3BzID0gewo+Pj4+IEBAIC0xNDcsNiArMjE0LDcgQEAgaW50IHhlbl9kcm1f ZnJvbnRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+Pj4gICAgCWRy bV9pbmZvLT5mcm9udF9vcHMgPSBmcm9udF9vcHM7Cj4+Pj4gICAgCWRybV9pbmZvLT5mcm9udF9v cHMtPm9uX2ZyYW1lX2RvbmUgPSBvbl9mcmFtZV9kb25lOwo+Pj4+ICsJZHJtX2luZm8tPmdlbV9v cHMgPSB4ZW5fZHJtX2Zyb250X2dlbV9nZXRfb3BzKCk7Cj4+Pj4gICAgCWRybV9pbmZvLT5mcm9u dF9pbmZvID0gY2ZnLT5mcm9udF9pbmZvOwo+Pj4+ICAgIAlkZXYgPSBkcm1fZGV2X2FsbG9jKCZ4 ZW5fZHJtX2RyaXZlciwgJnBkZXYtPmRldik7Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9kcnYuaAo+Pj4+IGluZGV4IDU2MzMxOGIxOWYzNC4uMzQyMjhlYjg2MjU1IDEwMDY0 NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaAo+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaAo+Pj4+IEBAIC00 Myw2ICs0Myw3IEBAIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSB7Cj4+Pj4gICAg c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gewo+Pj4+ICAgIAlzdHJ1Y3QgeGVuX2RybV9m cm9udF9pbmZvICpmcm9udF9pbmZvOwo+Pj4+ICAgIAlzdHJ1Y3QgeGVuX2RybV9mcm9udF9vcHMg KmZyb250X29wczsKPj4+PiArCWNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X2dlbV9vcHMgKmdl bV9vcHM7Cj4+Pj4gICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owo+Pj4+ICAgIAlzdHJ1 Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZzsKPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2dlbS5jCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAw MDAwMDAuLjM2N2UwOGY2YTllZgo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMKPj4+PiBAQCAtMCwwICsxLDM2MCBAQAo+ Pj4+ICsvKgo+Pj4+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4+Pj4gKyAqCj4+ Pj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKPj4+PiArICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+Pj4+ICsgKiAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCj4+Pj4gKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4+ PiArICoKPj4+PiArICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4+PiArICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+Pj4+ICsgKiAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK Pj4+PiArICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ Pj4+ICsgKgo+Pj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5j Lgo+Pj4+ICsgKgo+Pj4+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVr c2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+PiArICovCj4+Pj4gKwo+Pj4+ICsjaW5j bHVkZSAieGVuX2RybV9mcm9udF9nZW0uaCIKPj4+PiArCj4+Pj4gKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+Pj4+ICsjaW5jbHVk ZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPj4+PiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4+ Pj4gKwo+Pj4+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+Pj4+ICsjaW5jbHVkZSA8bGlu dXgvc2NhdHRlcmxpc3QuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4+Pj4g Kwo+Pj4+ICsjaW5jbHVkZSA8eGVuL2JhbGxvb24uaD4KPj4+PiArCj4+Pj4gKyNpbmNsdWRlICJ4 ZW5fZHJtX2Zyb250LmgiCj4+Pj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgo+Pj4+ ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+Pj4+ICsKPj4+PiArc3RydWN0IHhl bl9nZW1fb2JqZWN0IHsKPj4+PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwo+Pj4+ICsK Pj4+PiArCXNpemVfdCBudW1fcGFnZXM7Cj4+Pj4gKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+Pj4+ ICsKPj4+PiArCS8qIHNldCBmb3IgYnVmZmVycyBhbGxvY2F0ZWQgYnkgdGhlIGJhY2tlbmQgKi8K Pj4+PiArCWJvb2wgYmVfYWxsb2M7Cj4+Pj4gKwo+Pj4+ICsJLyogdGhpcyBpcyBmb3IgaW1wb3J0 ZWQgUFJJTUUgYnVmZmVyICovCj4+Pj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndF9pbXBvcnRlZDsK Pj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhlbl9nZW1fb2JqZWN0 ICp0b194ZW5fZ2VtX29iaigKPj4+PiArCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmop Cj4+Pj4gK3sKPj4+PiArCXJldHVybiBjb250YWluZXJfb2YoZ2VtX29iaiwgc3RydWN0IHhlbl9n ZW1fb2JqZWN0LCBiYXNlKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBnZW1fYWxs b2NfcGFnZXNfYXJyYXkoc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqLAo+Pj4+ICsJCXNp emVfdCBidWZfc2l6ZSkKPj4+PiArewo+Pj4+ICsJeGVuX29iai0+bnVtX3BhZ2VzID0gRElWX1JP VU5EX1VQKGJ1Zl9zaXplLCBQQUdFX1NJWkUpOwo+Pj4+ICsJeGVuX29iai0+cGFnZXMgPSBrdm1h bGxvY19hcnJheSh4ZW5fb2JqLT5udW1fcGFnZXMsCj4+Pj4gKwkJCXNpemVvZihzdHJ1Y3QgcGFn ZSAqKSwgR0ZQX0tFUk5FTCk7Cj4+Pj4gKwlyZXR1cm4geGVuX29iai0+cGFnZXMgPT0gTlVMTCA/ IC1FTk9NRU0gOiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBnZW1fZnJlZV9w YWdlc19hcnJheShzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmopCj4+Pj4gK3sKPj4+PiAr CWt2ZnJlZSh4ZW5fb2JqLT5wYWdlcyk7Cj4+Pj4gKwl4ZW5fb2JqLT5wYWdlcyA9IE5VTEw7Cj4+ Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKmdlbV9jcmVh dGVfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+Pj4gKwlzaXplX3Qgc2l6ZSkKPj4+PiAr ewo+Pj4+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+Pj4+ICsJaW50IHJldDsK Pj4+PiArCj4+Pj4gKwl4ZW5fb2JqID0ga3phbGxvYyhzaXplb2YoKnhlbl9vYmopLCBHRlBfS0VS TkVMKTsKPj4+PiArCWlmICgheGVuX29iaikKPj4+PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPj4+PiArCj4+Pj4gKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJnhlbl9vYmot PmJhc2UsIHNpemUpOwo+Pj4+ICsJaWYgKHJldCA8IDApIHsKPj4+PiArCQlrZnJlZSh4ZW5fb2Jq KTsKPj4+PiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXJl dHVybiB4ZW5fb2JqOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHhlbl9nZW1f b2JqZWN0ICpnZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQo+ Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBk ZXYtPmRldl9wcml2YXRlOwo+Pj4+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+ Pj4+ICsJaW50IHJldDsKPj4+PiArCj4+Pj4gKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9T SVpFKTsKPj4+PiArCXhlbl9vYmogPSBnZW1fY3JlYXRlX29iaihkZXYsIHNpemUpOwo+Pj4+ICsJ aWYgKElTX0VSUl9PUl9OVUxMKHhlbl9vYmopKQo+Pj4+ICsJCXJldHVybiB4ZW5fb2JqOwo+Pj4+ ICsKPj4+PiArCWlmIChkcm1faW5mby0+Y2ZnLT5iZV9hbGxvYykgewo+Pj4+ICsJCS8qCj4+Pj4g KwkJICogYmFja2VuZCB3aWxsIGFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIGJ1ZmZlciwgc28KPj4+ PiArCQkgKiBvbmx5IGFsbG9jYXRlIGFycmF5IG9mIHBvaW50ZXJzIHRvIHBhZ2VzCj4+Pj4gKwkJ ICovCj4+Pj4gKwkJeGVuX29iai0+YmVfYWxsb2MgPSB0cnVlOwo+Pj4+ICsJCXJldCA9IGdlbV9h bGxvY19wYWdlc19hcnJheSh4ZW5fb2JqLCBzaXplKTsKPj4+PiArCQlpZiAocmV0IDwgMCkgewo+ Pj4+ICsJCQlnZW1fZnJlZV9wYWdlc19hcnJheSh4ZW5fb2JqKTsKPj4+PiArCQkJZ290byBmYWls Owo+Pj4+ICsJCX0KPj4+PiArCj4+Pj4gKwkJcmV0ID0gYWxsb2NfeGVuYmFsbG9vbmVkX3BhZ2Vz KHhlbl9vYmotPm51bV9wYWdlcywKPj4+PiArCQkJCXhlbl9vYmotPnBhZ2VzKTsKPj4+PiArCQlp ZiAocmV0IDwgMCkgewo+Pj4+ICsJCQlEUk1fRVJST1IoIkNhbm5vdCBhbGxvY2F0ZSAlenUgYmFs bG9vbmVkIHBhZ2VzOiAlZFxuIiwKPj4+PiArCQkJCQl4ZW5fb2JqLT5udW1fcGFnZXMsIHJldCk7 Cj4+Pj4gKwkJCWdvdG8gZmFpbDsKPj4+PiArCQl9Cj4+Pj4gKwo+Pj4+ICsJCXJldHVybiB4ZW5f b2JqOwo+Pj4+ICsJfQo+Pj4+ICsJLyoKPj4+PiArCSAqIG5lZWQgdG8gYWxsb2NhdGUgYmFja2lu ZyBwYWdlcyBub3csIHNvIHdlIGNhbiBzaGFyZSB0aG9zZQo+Pj4+ICsJICogd2l0aCB0aGUgYmFj a2VuZAo+Pj4+ICsJICovCj4+Pj4gKwl4ZW5fb2JqLT5udW1fcGFnZXMgPSBESVZfUk9VTkRfVVAo c2l6ZSwgUEFHRV9TSVpFKTsKPj4+PiArCXhlbl9vYmotPnBhZ2VzID0gZHJtX2dlbV9nZXRfcGFn ZXMoJnhlbl9vYmotPmJhc2UpOwo+Pj4+ICsJaWYgKElTX0VSUl9PUl9OVUxMKHhlbl9vYmotPnBh Z2VzKSkgewo+Pj4+ICsJCXJldCA9IFBUUl9FUlIoeGVuX29iai0+cGFnZXMpOwo+Pj4+ICsJCXhl bl9vYmotPnBhZ2VzID0gTlVMTDsKPj4+PiArCQlnb3RvIGZhaWw7Cj4+Pj4gKwl9Cj4+Pj4gKwo+ Pj4+ICsJcmV0dXJuIHhlbl9vYmo7Cj4+Pj4gKwo+Pj4+ICtmYWlsOgo+Pj4+ICsJRFJNX0VSUk9S KCJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIHdpdGggc2l6ZSAlenVcbiIsIHNpemUpOwo+Pj4+ ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHN0cnVj dCB4ZW5fZ2VtX29iamVjdCAqZ2VtX2NyZWF0ZV93aXRoX2hhbmRsZShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbHAsCj4+Pj4gKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHVpbnQz Ml90ICpoYW5kbGUpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29i ajsKPj4+PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPj4+PiArCWludCByZXQ7 Cj4+Pj4gKwo+Pj4+ICsJeGVuX29iaiA9IGdlbV9jcmVhdGUoZGV2LCBzaXplKTsKPj4+PiArCWlm IChJU19FUlJfT1JfTlVMTCh4ZW5fb2JqKSkKPj4+PiArCQlyZXR1cm4geGVuX29iajsKPj4+PiAr Cj4+Pj4gKwlnZW1fb2JqID0gJnhlbl9vYmotPmJhc2U7Cj4+Pj4gKwlyZXQgPSBkcm1fZ2VtX2hh bmRsZV9jcmVhdGUoZmlscCwgZ2VtX29iaiwgaGFuZGxlKTsKPj4+PiArCS8qIGhhbmRsZSBob2xk cyB0aGUgcmVmZXJlbmNlICovCj4+Pj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxv Y2tlZChnZW1fb2JqKTsKPj4+PiArCWlmIChyZXQgPCAwKQo+Pj4+ICsJCXJldHVybiBFUlJfUFRS KHJldCk7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIHhlbl9vYmo7Cj4+Pj4gK30KPj4+PiArCj4+Pj4g K3N0YXRpYyBpbnQgZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPj4+PiArCQlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFy Z3MpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iajsKPj4+PiAr Cj4+Pj4gKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJw cCwgOCk7Cj4+Pj4gKwlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4+ Pj4gKwo+Pj4+ICsJeGVuX29iaiA9IGdlbV9jcmVhdGVfd2l0aF9oYW5kbGUoZmlscCwgZGV2LCBh cmdzLT5zaXplLCAmYXJncy0+aGFuZGxlKTsKPj4+PiArCWlmIChJU19FUlJfT1JfTlVMTCh4ZW5f b2JqKSkKPj4+PiArCQlyZXR1cm4geGVuX29iaiA9PSBOVUxMID8gLUVOT01FTSA6IFBUUl9FUlIo eGVuX29iaik7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0 YXRpYyB2b2lkIGdlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmop Cj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaiA9IHRvX3hlbl9n ZW1fb2JqKGdlbV9vYmopOwo+Pj4+ICsKPj4+PiArCWlmICh4ZW5fb2JqLT5iYXNlLmltcG9ydF9h dHRhY2gpIHsKPj4+PiArCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3koJnhlbl9vYmotPmJhc2UsIHhl bl9vYmotPnNndF9pbXBvcnRlZCk7Cj4+Pj4gKwkJZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoeGVuX29i aik7Cj4+Pj4gKwl9IGVsc2Ugewo+Pj4+ICsJCWlmICh4ZW5fb2JqLT5wYWdlcykgewo+Pj4+ICsJ CQlpZiAoeGVuX29iai0+YmVfYWxsb2MpIHsKPj4+PiArCQkJCWZyZWVfeGVuYmFsbG9vbmVkX3Bh Z2VzKHhlbl9vYmotPm51bV9wYWdlcywKPj4+PiArCQkJCQkJeGVuX29iai0+cGFnZXMpOwo+Pj4+ ICsJCQkJZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoeGVuX29iaik7Cj4+Pj4gKwkJCX0gZWxzZQo+Pj4+ ICsJCQkJZHJtX2dlbV9wdXRfcGFnZXMoJnhlbl9vYmotPmJhc2UsCj4+Pj4gKwkJCQkJCXhlbl9v YmotPnBhZ2VzLCB0cnVlLCBmYWxzZSk7Cj4+Pj4gKwkJfQo+Pj4+ICsJfQo+Pj4+ICsJZHJtX2dl bV9vYmplY3RfcmVsZWFzZShnZW1fb2JqKTsKPj4+PiArCWtmcmVlKHhlbl9vYmopOwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHBhZ2UgKipnZW1fZ2V0X3BhZ2VzKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ2VtX29iaikKPj4+PiArewo+Pj4+ICsJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4+Pj4gKwo+Pj4+ICsJcmV0 dXJuIHhlbl9vYmotPnBhZ2VzOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHNn X3RhYmxlICpnZW1fZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikK Pj4+PiArewo+Pj4+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dl bV9vYmooZ2VtX29iaik7Cj4+Pj4gKwo+Pj4+ICsJaWYgKCF4ZW5fb2JqLT5wYWdlcykKPj4+PiAr CQlyZXR1cm4gTlVMTDsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3Nn KHhlbl9vYmotPnBhZ2VzLCB4ZW5fb2JqLT5udW1fcGFnZXMpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ ICtzdGF0aWMgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4+Pj4gKwkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPj4+PiArewo+Pj4+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4+PiArCXN0cnVj dCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iajsKPj4+PiArCXNpemVfdCBzaXplOwo+Pj4+ICsJaW50 IHJldDsKPj4+PiArCj4+Pj4gKwlzaXplID0gYXR0YWNoLT5kbWFidWYtPnNpemU7Cj4+Pj4gKwl4 ZW5fb2JqID0gZ2VtX2NyZWF0ZV9vYmooZGV2LCBzaXplKTsKPj4+PiArCWlmIChJU19FUlJfT1Jf TlVMTCh4ZW5fb2JqKSkKPj4+PiArCQlyZXR1cm4gRVJSX0NBU1QoeGVuX29iaik7Cj4+Pj4gKwo+ Pj4+ICsJcmV0ID0gZ2VtX2FsbG9jX3BhZ2VzX2FycmF5KHhlbl9vYmosIHNpemUpOwo+Pj4+ICsJ aWYgKHJldCA8IDApCj4+Pj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+PiArCj4+Pj4gKwl4 ZW5fb2JqLT5zZ3RfaW1wb3J0ZWQgPSBzZ3Q7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gZHJtX3ByaW1l X3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoc2d0LCB4ZW5fb2JqLT5wYWdlcywKPj4+PiArCQkJTlVM TCwgeGVuX29iai0+bnVtX3BhZ2VzKTsKPj4+PiArCWlmIChyZXQgPCAwKQo+Pj4+ICsJCXJldHVy biBFUlJfUFRSKHJldCk7Cj4+Pj4gKwo+Pj4+ICsJLyoKPj4+PiArCSAqIE4uQi4gQWx0aG91Z2gg d2UgaGF2ZSBhbiBBUEkgdG8gY3JlYXRlIGRpc3BsYXkgYnVmZmVyIGZyb20gc2d0Cj4+Pj4gKwkg KiB3ZSB1c2UgcGFnZXMgQVBJLCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdGhvc2UgZm9yIEdFTSBo YW5kbGluZywKPj4+PiArCSAqIGUuZy4gZm9yIG1hcHBpbmcgZXRjLgo+Pj4+ICsJICovCj4+Pj4g KwlyZXQgPSBkcm1faW5mby0+ZnJvbnRfb3BzLT5kYnVmX2NyZWF0ZV9mcm9tX3BhZ2VzKAo+Pj4+ ICsJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPj4+PiArCQkJeGVuX2RybV9mcm9udF9kYnVmX3Rv X2Nvb2tpZSgmeGVuX29iai0+YmFzZSksCj4+Pj4gKwkJCTAsIDAsIDAsIHNpemUsIHhlbl9vYmot PnBhZ2VzKTsKPj4+PiArCWlmIChyZXQgPCAwKQo+Pj4+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4+Pj4gKwo+Pj4+ICsJRFJNX0RFQlVHKCJJbXBvcnRlZCBidWZmZXIgb2Ygc2l6ZSAlenUgd2l0 aCBuZW50cyAldVxuIiwKPj4+PiArCQlzaXplLCBzZ3QtPm5lbnRzKTsKPj4+PiArCj4+Pj4gKwly ZXR1cm4gJnhlbl9vYmotPmJhc2U7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgZ2Vt X21tYXBfb2JqKHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaiwKPj4+PiArCQlzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4+PiArewo+Pj4+ICsJdW5zaWduZWQgbG9uZyBhZGRyID0g dm1hLT52bV9zdGFydDsKPj4+PiArCWludCBpOwo+Pj4+ICsKPj4+PiArCS8qCj4+Pj4gKwkgKiBj bGVhciB0aGUgVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcCgpLCBh bmQgc2V0IHRoZQo+Pj4+ICsJICogdm1fcGdvZmYgKHVzZWQgYXMgYSBmYWtlIGJ1ZmZlciBvZmZz ZXQgYnkgRFJNKSB0byAwIGFzIHdlIHdhbnQgdG8gbWFwCj4+Pj4gKwkgKiB0aGUgd2hvbGUgYnVm ZmVyLgo+Pj4+ICsJICovCj4+Pj4gKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7Cj4+Pj4g Kwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOwo+Pj4+ICsJdm1hLT52bV9wZ29mZiA9IDA7 Cj4+Pj4gKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3Bh Z2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cj4+Pj4gKwo+Pj4+ICsJLyoKPj4+PiArCSAqIHZtX29w ZXJhdGlvbnNfc3RydWN0LmZhdWx0IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgaWYgQ1BVIGFjY2Vz cwo+Pj4+ICsJICogdG8gVk0gaXMgaGVyZS4gRm9yIEdQVXMgdGhpcyBpc24ndCB0aGUgY2FzZSwg YmVjYXVzZSBDUFUKPj4+PiArCSAqIGRvZXNuJ3QgdG91Y2ggdGhlIG1lbW9yeS4gSW5zZXJ0IHBh Z2VzIG5vdywgc28gYm90aCBDUFUgYW5kIEdQVSBhcmUKPj4+PiArCSAqIGhhcHB5Lgo+Pj4+ICsJ ICogRklYTUU6IGFzIHdlIGluc2VydCBhbGwgdGhlIHBhZ2VzIG5vdyB0aGVuIG5vIC5mYXVsdCBo YW5kbGVyIG11c3QKPj4+PiArCSAqIGJlIGNhbGxlZCwgc28gZG9uJ3QgcHJvdmlkZSBvbmUKPj4+ PiArCSAqLwo+Pj4+ICsJZm9yIChpID0gMDsgaSA8IHhlbl9vYmotPm51bV9wYWdlczsgaSsrKSB7 Cj4+Pj4gKwkJaW50IHJldDsKPj4+PiArCj4+Pj4gKwkJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1h LCBhZGRyLCB4ZW5fb2JqLT5wYWdlc1tpXSk7Cj4+Pj4gKwkJaWYgKHJldCA8IDApIHsKPj4+PiAr CQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5zZXJ0IHBhZ2VzIGludG8gdm1hOiAlZFxuIiwgcmV0 KTsKPj4+PiArCQkJcmV0dXJuIHJldDsKPj4+PiArCQl9Cj4+Pj4gKwo+Pj4+ICsJCWFkZHIgKz0g UEFHRV9TSVpFOwo+Pj4+ICsJfQo+Pj4+ICsJcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4g K3N0YXRpYyBpbnQgZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmo7 Cj4+Pj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmo7Cj4+Pj4gKwlpbnQgcmV0Owo+ Pj4+ICsKPj4+PiArCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwo+Pj4+ICsJaWYgKHJl dCA8IDApCj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+PiArCj4+Pj4gKwlnZW1fb2JqID0gdm1hLT52 bV9wcml2YXRlX2RhdGE7Cj4+Pj4gKwl4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7 Cj4+Pj4gKwlyZXR1cm4gZ2VtX21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gK3N0YXRpYyB2b2lkICpnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbV9vYmopCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaiA9 IHRvX3hlbl9nZW1fb2JqKGdlbV9vYmopOwo+Pj4+ICsKPj4+PiArCWlmICgheGVuX29iai0+cGFn ZXMpCj4+Pj4gKwkJcmV0dXJuIE5VTEw7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIHZtYXAoeGVuX29i ai0+cGFnZXMsIHhlbl9vYmotPm51bV9wYWdlcywKPj4+PiArCQkJVk1fTUFQLCBwZ3Byb3Rfd3Jp dGVjb21iaW5lKFBBR0VfS0VSTkVMKSk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lk IGdlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLCB2b2lkICp2 YWRkcikKPj4+PiArewo+Pj4+ICsJdnVubWFwKHZhZGRyKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiAr c3RhdGljIGludCBnZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmos Cj4+Pj4gKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4+PiArewo+Pj4+ICsJc3RydWN0 IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+Pj4+ICsJaW50IHJldDsKPj4+PiArCj4+Pj4gKwly ZXQgPSBkcm1fZ2VtX21tYXBfb2JqKGdlbV9vYmosIGdlbV9vYmotPnNpemUsIHZtYSk7Cj4+Pj4g KwlpZiAocmV0IDwgMCkKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiArCXhlbl9vYmog PSB0b194ZW5fZ2VtX29iaihnZW1fb2JqKTsKPj4+PiArCXJldHVybiBnZW1fbW1hcF9vYmooeGVu X29iaiwgdm1hKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5f ZHJtX2Zyb250X2dlbV9vcHMgeGVuX2RybV9nZW1fb3BzID0gewo+Pj4+ICsJLmZyZWVfb2JqZWN0 X3VubG9ja2VkICA9IGdlbV9mcmVlX29iamVjdCwKPj4+PiArCS5wcmltZV9nZXRfc2dfdGFibGUg ICAgPSBnZW1fZ2V0X3NnX3RhYmxlLAo+Pj4+ICsJLnByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGdl bV9pbXBvcnRfc2dfdGFibGUsCj4+Pj4gKwo+Pj4+ICsJLnByaW1lX3ZtYXAgICAgICAgICAgICA9 IGdlbV9wcmltZV92bWFwLAo+Pj4+ICsJLnByaW1lX3Z1bm1hcCAgICAgICAgICA9IGdlbV9wcmlt ZV92dW5tYXAsCj4+Pj4gKwkucHJpbWVfbW1hcCAgICAgICAgICAgID0gZ2VtX3ByaW1lX21tYXAs Cj4+Pj4gKwo+Pj4+ICsJLmR1bWJfY3JlYXRlICAgICAgICAgICA9IGdlbV9kdW1iX2NyZWF0ZSwK Pj4+PiArCj4+Pj4gKwkubW1hcCAgICAgICAgICAgICAgICAgID0gZ2VtX21tYXAsCj4+Pj4gKwo+ Pj4+ICsJLmdldF9wYWdlcyAgICAgICAgICAgICA9IGdlbV9nZXRfcGFnZXMsCj4+Pj4gK307Cj4+ Pj4gKwo+Pj4+ICtjb25zdCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9nZW1fb3BzICp4ZW5fZHJtX2Zy b250X2dlbV9nZXRfb3BzKHZvaWQpCj4+Pj4gK3sKPj4+PiArCXJldHVybiAmeGVuX2RybV9nZW1f b3BzOwo+Pj4+ICt9Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+ Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kMWUxNzEx Y2MzZmMKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2dlbS5oCj4+Pj4gQEAgLTAsMCArMSw0NiBAQAo+Pj4+ICsvKgo+Pj4+ICsg KiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4+Pj4gKyAqCj4+Pj4gKyAqICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPj4+PiArICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+Pj4+ICsgKiAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4+Pj4gKyAq ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4+PiArICoKPj4+PiArICog ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPj4+PiArICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+Pj4+ICsgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4+PiArICogICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+Pj4+ICsgKgo+Pj4+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+Pj4+ICsgKgo+Pj4+ ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNo ZW5rb0BlcGFtLmNvbT4KPj4+PiArICovCj4+Pj4gKwo+Pj4+ICsjaWZuZGVmIF9fWEVOX0RSTV9G Uk9OVF9HRU1fSAo+Pj4+ICsjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1fSAo+Pj4+ICsKPj4+ PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgeGVuX2RybV9mcm9u dF9nZW1fb3BzIHsKPj4+PiArCXZvaWQgKCpmcmVlX29iamVjdF91bmxvY2tlZCkoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopOwo+Pj4+ICsKPj4+PiArCXN0cnVjdCBzZ190YWJsZSAqKCpwcmlt ZV9nZXRfc2dfdGFibGUpKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPj4+PiArCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKCpwcmltZV9pbXBvcnRfc2dfdGFibGUpKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4+Pj4gKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPj4+ PiArCQkJc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+Pj4+ICsJdm9pZCAqKCpwcmltZV92bWFwKShz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4+Pj4gKwl2b2lkICgqcHJpbWVfdnVubWFwKShz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+Pj4+ICsJaW50ICgqcHJp bWVfbW1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4+Pj4gKwkJCXN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKTsKPj4+PiArCj4+Pj4gKwlpbnQgKCpkdW1iX2NyZWF0ZSkoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+Pj4gKwkJCXN0 cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7Cj4+Pj4gKwo+Pj4+ICsJaW50ICgqbW1h cCkoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPj4+PiAr Cj4+Pj4gKwlzdHJ1Y3QgcGFnZSAqKigqZ2V0X3BhZ2VzKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtjb25zdCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9n ZW1fb3BzICp4ZW5fZHJtX2Zyb250X2dlbV9nZXRfb3BzKHZvaWQpOwo+Pj4+ICsKPj4+PiArI2Vu ZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9HRU1fSCAqLwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jIGIvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2dlbV9jbWEuYwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4g aW5kZXggMDAwMDAwMDAwMDAwLi41ZmZjYmZhNjUyZDUKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbV9jbWEuYwo+Pj4+IEBA IC0wLDAgKzEsOTMgQEAKPj4+PiArLyoKPj4+PiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRl dmljZQo+Pj4+ICsgKgo+Pj4+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+Pj4gKyAqICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKPj4+PiArICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+Pj4+ICsgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCj4+Pj4gKyAqCj4+Pj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+Pj4gKyAqICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK Pj4+PiArICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCj4+Pj4gKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPj4+PiArICoKPj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg RVBBTSBTeXN0ZW1zIEluYy4KPj4+PiArICoKPj4+PiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5k cnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4+Pj4gKyAqLwo+ Pj4+ICsKPj4+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+Pj4gKyNpbmNsdWRlIDxkcm0vZHJt X2dlbS5oPgo+Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4+Pj4gKyNp bmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4+Pj4gKwo+Pj4+ICsjaW5jbHVkZSAi eGVuX2RybV9mcm9udC5oIgo+Pj4+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIKPj4+ PiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZ2VtLmgiCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4+Pj4gKwkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qg c2dfdGFibGUgKnNndCkKPj4+PiArewo+Pj4+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2lu Zm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4+PiArCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtX29iajsKPj4+PiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7 Cj4+Pj4gKwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCWdlbV9vYmogPSBkcm1fZ2VtX2NtYV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoZGV2LCBhdHRhY2gsIHNndCk7Cj4+Pj4gKwlpZiAoSVNfRVJSX09S X05VTEwoZ2VtX29iaikpCj4+Pj4gKwkJcmV0dXJuIGdlbV9vYmo7Cj4+Pj4gKwo+Pj4+ICsJY21h X29iaiA9IHRvX2RybV9nZW1fY21hX29iaihnZW1fb2JqKTsKPj4+PiArCj4+Pj4gKwlyZXQgPSBk cm1faW5mby0+ZnJvbnRfb3BzLT5kYnVmX2NyZWF0ZV9mcm9tX3NndCgKPj4+PiArCQkJZHJtX2lu Zm8tPmZyb250X2luZm8sCj4+Pj4gKwkJCXhlbl9kcm1fZnJvbnRfZGJ1Zl90b19jb29raWUoZ2Vt X29iaiksCj4+Pj4gKwkJCTAsIDAsIDAsIGdlbV9vYmotPnNpemUsCj4+Pj4gKwkJCWRybV9nZW1f Y21hX3ByaW1lX2dldF9zZ190YWJsZShnZW1fb2JqKSk7Cj4+Pj4gKwlpZiAocmV0IDwgMCkKPj4+ PiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+Pj4+ICsKPj4+PiArCURSTV9ERUJVRygiSW1wb3J0 ZWQgQ01BIGJ1ZmZlciBvZiBzaXplICV6dVxuIiwgZ2VtX29iai0+c2l6ZSk7Cj4+Pj4gKwo+Pj4+ ICsJcmV0dXJuIGdlbV9vYmo7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgZ2VtX2R1 bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwK Pj4+PiArCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPj4+PiArewo+Pj4+ICsJ c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPj4+PiArCj4+Pj4gKwlpZiAoZHJtX2luZm8tPmNmZy0+YmVfYWxsb2MpIHsKPj4+PiArCQkv KiBUaGlzIHVzZS1jYXNlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGFuZCBwcm9iYWJseSB3b24ndCBi ZSAqLwo+Pj4+ICsJCURSTV9FUlJPUigiQmFja2VuZCBhbGxvY2F0ZWQgYnVmZmVycyBhbmQgQ01B IGhlbHBlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIHNhbWUgdGltZVxuIik7Cj4+Pj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIGRybV9nZW1fY21h X2R1bWJfY3JlYXRlKGZpbHAsIGRldiwgYXJncyk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgcGFnZSAqKmdlbV9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1f b2JqKQo+Pj4+ICt7Cj4+Pj4gKwlyZXR1cm4gTlVMTDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X2dlbV9vcHMgeGVuX2RybV9mcm9udF9nZW1f Y21hX29wcyA9IHsKPj4+PiArCS5mcmVlX29iamVjdF91bmxvY2tlZCAgPSBkcm1fZ2VtX2NtYV9m cmVlX29iamVjdCwKPj4+PiArCS5wcmltZV9nZXRfc2dfdGFibGUgICAgPSBkcm1fZ2VtX2NtYV9w cmltZV9nZXRfc2dfdGFibGUsCj4+Pj4gKwkucHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZ2VtX2lt cG9ydF9zZ190YWJsZSwKPj4+PiArCj4+Pj4gKwkucHJpbWVfdm1hcCAgICAgICAgICAgID0gZHJt X2dlbV9jbWFfcHJpbWVfdm1hcCwKPj4+PiArCS5wcmltZV92dW5tYXAgICAgICAgICAgPSBkcm1f Z2VtX2NtYV9wcmltZV92dW5tYXAsCj4+Pj4gKwkucHJpbWVfbW1hcCAgICAgICAgICAgID0gZHJt X2dlbV9jbWFfcHJpbWVfbW1hcCwKPj4+PiArCj4+Pj4gKwkuZHVtYl9jcmVhdGUgICAgICAgICAg ID0gZ2VtX2R1bWJfY3JlYXRlLAo+Pj4+ICsKPj4+PiArCS5tbWFwICAgICAgICAgICAgICAgICAg PSBkcm1fZ2VtX2NtYV9tbWFwLAo+Pj4+ICsKPj4+PiArCS5nZXRfcGFnZXMgICAgICAgICAgICAg PSBnZW1fZ2V0X3BhZ2VzLAo+Pj4+ICt9Owo+Pj4gQWdhaW4gcXVpdGUgYSBtaWRsYXllciB5b3Ug aGF2ZSBoZXJlLiBQbGVhc2UgaW5saW5lIHRoaXMgdG8gYXZvaWQKPj4+IGNvbmZ1c2lvbiBmb3Ig b3RoZXIgcGVvcGxlIChzaW5jZSBpdCBsb29rcyBsaWtlIHlvdSBvbmx5IGhhdmUgMQo+Pj4gaW1w bGVtZW50YXRpb24pLgo+PiBUaGVyZSBhcmUgMiBpbXBsZW1lbnRhdGlvbnMgZGVwZW5kaW5nIG9u IGRyaXZlciBjb21waWxlIHRpbWUgb3B0aW9uczoKPj4geW91IGNhbiBoYXZlIHRoZSBHRU0gb3Bl cmF0aW9ucyBpbXBsZW1lbnRlZCB3aXRoIERSTSBDTUEgaGVscGVycwo+PiBvciBkcml2ZXIncyBj b29rZWQgR0VNcy4gRm9yIHRoaXMgcmVhc29uIHRoaXMgbWlkbGF5ZXIgZXhpc3RzLCBlLmcuCj4+ IHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29tZXRoaW5nIGxpa2UKPj4gI2lmZGVmIERSTV9Y RU5fRlJPTlRFTkRfQ01BCj4+IGRybV9nZW1fY21hXy4uLigpCj4+ICNlbHNlCj4+IHhlbl9kcm1f ZnJvbnRfZ2VtXy4uLigpCj4+ICNlbmRpZgo+PiBTbywgSSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBv cHMgcmF0aGVyIHRoZW4gaGF2aW5nIGlmZGVmcwo+IE9rLCBtYWtlcyBzZW5zZSwgYnV0IHBsZWFz ZSByZXZpZXcgd2hldGhlciB5b3UgcmVhbGx5IG5lZWQgYWxsIG9mIHRoZW0sCj4gc2luY2UgZm9y IGEgbG90IG9mIHRoZW0gKGFsbCBleGNlcHQgZ2V0X3BhZ2VzIHJlYWxseSkgd2UgYWxyZWFkeSBo YXZlCj4gdmZ1bmNzLiBBbmQgaWYgeW91IG9ubHkgc3dpdGNoIGF0IGNvbXBpbGUgdGltZSBJIHRo aW5rIGl0J3MgY2xlYW5lciB0bwo+IHNpbXBseSBoYXZlIDIgdmZ1bmMgdGFibGVzIGZvciB0aG9z ZSAoZS5nLiBzdHJ1Y3QgZHJtX2RyaXZlcikuIFRoYXQgYXZvaWRzCj4gdGhlIGluZGlyZWN0aW9u LgpPaywgbWFrZXMgc2Vuc2UuClNvIHRoZW4gSSdsbCBvbmx5IGhhdmUgb25lICNpZmRlZiB3aGls ZSBkZWZpbmluZyBzdHJ1Y3QgZHJtX2RyaXZlci4KQW5kIHdpbGwgdGFrZSBjYXJlIG9mIGdldF9w YWdlcyBzZXBhcmF0ZWx5Cj4gQ2hlZXJzLCBEYW5pZWwKPj4+PiArCj4+Pj4gK2NvbnN0IHN0cnVj dCB4ZW5fZHJtX2Zyb250X2dlbV9vcHMgKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9vcHModm9pZCkK Pj4+PiArewo+Pj4+ICsJcmV0dXJuICZ4ZW5fZHJtX2Zyb250X2dlbV9jbWFfb3BzOwo+Pj4+ICt9 Cj4+Pj4gLS0gCj4+Pj4gMi43LjQKPj4+Pgo+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4+Pj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+Pj4+IGRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4+ IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKVGhhbmsgeW91LApPbGVrc2FuZHIK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=