From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: Re: [PATCH v6 12/15] drm/i915/perf: Add OA unit support for Gen 8+ Date: Tue, 25 Apr 2017 18:47:49 +0100 Message-ID: References: <20170424103513.GA626@nuc-i3427.alporthouse.com> <20170424184900.20483-1-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-it0-x244.google.com (mail-it0-x244.google.com [IPv6:2607:f8b0:4001:c0b::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id D4ADB6E5BB for ; Tue, 25 Apr 2017 17:48:21 +0000 (UTC) Received: by mail-it0-x244.google.com with SMTP id x188so21749934itb.3 for ; Tue, 25 Apr 2017 10:48:21 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin Cc: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gMjUgQXByaWwgMjAxNyBhdCAxODoxMCwgTGlvbmVsIExhbmR3ZXJsaW4KPGxpb25lbC5nLmxh bmR3ZXJsaW5AaW50ZWwuY29tPiB3cm90ZToKPiBPbiAyNS8wNC8xNyAwOTo0MiwgTWF0dGhldyBB dWxkIHdyb3RlOgo+Pgo+PiBPbiAyNCBBcHJpbCAyMDE3IGF0IDE5OjQ5LCBMaW9uZWwgTGFuZHdl cmxpbgo+PiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+IHdyb3RlOgo+Pj4KPj4+IEZy b206IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5vcmc+Cj4+Pgo+Pj4gRW5hYmxlcyBh Y2Nlc3MgdG8gT0EgdW5pdCBtZXRyaWNzIGZvciBCRFcsIENIViwgU0tMIGFuZCBCWFQgd2hpY2gg YWxsCj4+PiBzaGFyZSAobW9yZS1vci1sZXNzKSB0aGUgc2FtZSBPQSB1bml0IGRlc2lnbi4KPj4+ Cj4+PiBPZiBwYXJ0aWN1bGFyIG5vdGUgaW4gY29tcGFyaXNvbiB0byBIYXN3ZWxsOiBzb21lIE9B IHVuaXQgSFcgY29uZmlnCj4+PiBzdGF0ZSBoYXMgYmVjb21lIHBlci1jb250ZXh0IHN0YXRlIGFu ZCBhcyBhIGNvbnNlcXVlbmNlIGl0IGlzIHNvbWV3aGF0Cj4+PiBtb3JlIGNvbXBsaWNhdGVkIHRv IG1hbmFnZSBzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzIGZyb20gdGhlIGNwdSB3aGlsZQo+Pj4g dGhlcmUncyBubyBndWFyYW50ZWUgb2Ygd2hhdCBjb250ZXh0IChpZiBhbnkpIGlzIGN1cnJlbnRs eSBhY3RpdmVseQo+Pj4gcnVubmluZyBvbiB0aGUgZ3B1Lgo+Pj4KPj4+IFRoZSBwZXJpb2RpYyBz YW1wbGluZyBmcmVxdWVuY3kgd2hpY2ggY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCj4+ PiBzeXN0ZW0td2lkZSBhbmFseXNpcyAoYXMgb3Bwb3NlZCB0byBjb21tYW5kIHN0cmVhbSBzeW5j aHJvbmlzZWQKPj4+IE1JX1JFUE9SVF9QRVJGX0NPVU5UIGNvbW1hbmRzKSBpcyBwZXJoYXBzIHRo ZSBtb3N0IHN1cnByaXNpbmcgc3RhdGUgdG8KPj4+IGhhdmUgYmVjb21lIHBlci1jb250ZXh0IHNh dmUgYW5kIHJlc3RvcmVkICh3aGlsZSB0aGUgT0FCVUZGRVIKPj4+IGRlc3RpbmF0aW9uIGlzIHN0 aWxsIGEgc2hhcmVkLCBzeXN0ZW0td2lkZSByZXNvdXJjZSkuCj4+Pgo+Pj4gVGhpcyBzdXBwb3J0 IGZvciBnZW44KyB0YWtlcyBjYXJlIHRvIGNvbnNpZGVyIGEgbnVtYmVyIG9mIHRpbWluZwo+Pj4g Y2hhbGxlbmdlcyBpbnZvbHZlZCBpbiBzeW5jaHJvbm91c2x5IHVwZGF0aW5nIHBlci1jb250ZXh0 IHN0YXRlCj4+PiBwcmltYXJpbHkgYnkgcHJvZ3JhbW1pbmcgYWxsIGNvbmZpZyBzdGF0ZSBmcm9t IHRoZSBjcHUgYW5kIHVwZGF0aW5nIGFsbAo+Pj4gY3VycmVudCBhbmQgc2F2ZWQgY29udGV4dHMg c3luY2hyb25vdXNseSB3aGlsZSB0aGUgT0EgdW5pdCBpcyBzdGlsbAo+Pj4gZGlzYWJsZWQuCj4+ Pgo+Pj4gVGhlIGRyaXZlciBpbnRlbnRpb25hbGx5IGF2b2lkcyBkZXBlbmRpbmcgb24gY29tbWFu ZCBzdHJlYW1lcgo+Pj4gcHJvZ3JhbW1pbmcgdG8gdXBkYXRlIE9BIHN0YXRlIGNvbnNpZGVyaW5n IHRoZSBsYWNrIG9mIHN5bmNocm9uaXphdGlvbgo+Pj4gYmV0d2VlbiB0aGUgYXV0b21hdGljIGxv YWRpbmcgb2YgT0FDVFhDT05UUk9MIHN0YXRlICh0aGF0IGluY2x1ZGVzIHRoZQo+Pj4gcGVyaW9k aWMgc2FtcGxpbmcgc3RhdGUgYW5kIGVuYWJsZSBzdGF0ZSkgb24gY29udGV4dCByZXN0b3JlIGFu ZCB0aGUKPj4+IHBhcnNpbmcgb2YgYW55IGdlbmVyYWwgcHVycG9zZSBCQiB0aGUgZHJpdmVyIGNh biBjb250cm9sLiBJLmUuIHRoaXMKPj4+IGltcGxlbWVudGF0aW9uIGlzIGNhcmVmdWwgdG8gYXZv aWQgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29udGV4dCByZXN0b3JlCj4+PiB0ZW1wb3JhcmlseSBl bmFibGluZyBhbnkgb3V0LW9mLWRhdGUgcGVyaW9kaWMgc2FtcGxpbmcgc3RhdGUuIEluCj4+PiBh ZGRpdGlvbiB0byB0aGUgcmlzayBvZiB0cmFuc2llbnRseS1vdXQtb2YtZGF0ZSBzdGF0ZSBiZWlu ZyBsb2FkZWQKPj4+IGF1dG9tYXRpY2FsbHk7IHRoZXJlIGFyZSBhbHNvIGludGVybmFsIEhXIGxh dGVuY2llcyBpbnZvbHZlZCBpbiB0aGUKPj4+IGxvYWRpbmcgb2YgTVVYIGNvbmZpZ3VyYXRpb25z IHdoaWNoIHdvdWxkIGJlIGRpZmZpY3VsdCB0byBhY2NvdW50IGZvcgo+Pj4gZnJvbSB0aGUgY29t bWFuZCBzdHJlYW1lciAoYW5kIHdlIG9ubHkgd2FudCB0byBlbmFibGUgdGhlIHVuaXQgd2hlbiBv bmNlCj4+PiB0aGUgTVVYIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUpLgo+Pj4KPj4+IFNpbmNl IHRoZSBHZW44KyBPQSB1bml0IGRlc2lnbiBubyBsb25nZXIgc3VwcG9ydHMgY2xvY2sgZ2F0aW5n IHRoZSB1bml0Cj4+PiBvZmYgZm9yIGEgc2luZ2xlIGdpdmVuIGNvbnRleHQgKHdoaWNoIGVmZmVj dGl2ZWx5IHN0b3BwZWQgYW55IHByb2dyZXNzCj4+PiBvZiBjb3VudGVycyB3aGlsZSBhbnkgb3Ro ZXIgY29udGV4dCB3YXMgcnVubmluZykgYW5kIGluc3RlYWQgc3VwcG9ydHMKPj4+IHRhZ2dpbmcg T0EgcmVwb3J0cyB3aXRoIGEgY29udGV4dCBJRCBmb3IgZmlsdGVyaW5nIG9uIHRoZSBDUFUsIGl0 IG1lYW5zCj4+PiB3ZSBjYW4gbm8gbG9uZ2VyIGhpZGUgdGhlIHN5c3RlbS13aWRlIHByb2dyZXNz IG9mIGNvdW50ZXJzIGZyb20gYQo+Pj4gbm9uLXByaXZpbGVnZWQgYXBwbGljYXRpb24gb25seSBp bnRlcmVzdGVkIGluIG1ldHJpY3MgZm9yIGl0cyBvd24KPj4+IGNvbnRleHQuIEFsdGhvdWdoIHdl IGNvdWxkIHRoZW9yZXRpY2FsbHkgdHJ5IGFuZCBzdWJ0cmFjdCB0aGUgcHJvZ3Jlc3MKPj4+IG9m IG90aGVyIGNvbnRleHRzIGJlZm9yZSBmb3J3YXJkaW5nIHJlcG9ydHMgdmlhIHJlYWQoKSB3ZSBh cmVuJ3QgaW4gYQo+Pj4gcG9zaXRpb24gdG8gZmlsdGVyIHJlcG9ydHMgY2FwdHVyZWQgdmlhIE1J X1JFUE9SVF9QRVJGX0NPVU5UIGNvbW1hbmRzLgo+Pj4gQXMgYSByZXN1bHQsIGZvciBHZW44Kywg d2UgYWx3YXlzIHJlcXVpcmUgdGhlCj4+PiBkZXYuaTkxNS5wZXJmX3N0cmVhbV9wYXJhbm9pZCB0 byBiZSB1bnNldCBmb3IgYW55IGFjY2VzcyB0byBPQSBtZXRyaWNzCj4+PiBpZiBub3Qgcm9vdC4K Pj4+Cj4+PiB2NTogRHJhaW4gc3VibWl0dGVkIHJlcXVlc3RzIHdoZW4gZW5hYmxpbmcgbWV0cmlj IHNldCB0byBlbnN1cmUgbm8KPj4+ICAgICAgbGl0ZS1yZXN0b3JlIGVyYXNlcyB0aGUgY29udGV4 dCBpbWFnZSB3ZSBqdXN0IHVwZGF0ZWQgKExpb25lbCkKPj4+Cj4+PiB2NjogSW4gYWRkaXRpb24g dG8gZHJhaW4sIHN3aXRjaCB0byBrZXJuZWwgY29udGV4dCAmIHVwZGF0ZSBhbGwKPj4+ICAgICAg Y29udGV4dCBpbiBwbGFjZSAoQ2hyaXMpCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJy YWdnIDxyb2JlcnRAc2l4YnluaW5lLm9yZz4KPj4+IFNpZ25lZC1vZmYtYnk6IExpb25lbCBMYW5k d2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KPj4+IFJldmlld2VkLWJ5OiBN YXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+IFxvLwo+Pj4gLS0tCj4+PiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggIHwgIDQ1ICstCj4+PiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGVyZi5jIHwgOTU3Cj4+PiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgfCAg MjIgKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyB8ICAgMiArCj4+PiAg IGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgIHwgIDE5ICstCj4+PiAgIDUgZmlsZXMg Y2hhbmdlZCwgOTUyIGluc2VydGlvbnMoKyksIDkzIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+IGluZGV4IGZmYTFmYzVlZGRmZC4uNjc2YjEyMjcwNjdj IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gQEAgLTIwNjQsOSArMjA2NCwx NyBAQCBzdHJ1Y3QgaTkxNV9vYV9vcHMgewo+Pj4gICAgICAgICAgdm9pZCAoKmluaXRfb2FfYnVm ZmVyKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+Pj4KPj4+ICAgICAgICAg IC8qKgo+Pj4gLSAgICAgICAgKiBAZW5hYmxlX21ldHJpY19zZXQ6IEFwcGxpZXMgYW55IE1VWCBj b25maWd1cmF0aW9uIHRvIHNldCB1cAo+Pj4gdGhlCj4+PiAtICAgICAgICAqIEJvb2xlYW4gYW5k IEN1c3RvbSAoQi9DKSBjb3VudGVycyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBjb3VudGVyCj4+PiAt ICAgICAgICAqIHJlcG9ydHMgYmVpbmcgc2FtcGxlZC4gTWF5IGFwcGx5IHN5c3RlbSBjb25zdHJh aW50cyBzdWNoIGFzCj4+PiArICAgICAgICAqIEBzZWxlY3RfbWV0cmljX3NldDogVGhlIGF1dG8g Z2VuZXJhdGVkIGNvZGUgdGhhdCBjaGVja3MKPj4+IHdoZXRoZXIgYQo+Pj4gKyAgICAgICAgKiBy ZXF1ZXN0ZWQgT0EgY29uZmlnIGlzIGFwcGxpY2FibGUgdG8gdGhlIHN5c3RlbSBhbmQgaWYgc28g c2V0cwo+Pj4gdXAKPj4+ICsgICAgICAgICogdGhlIG11eCwgb2EgYW5kIGZsZXggZXUgcmVnaXN0 ZXIgY29uZmlnIHBvaW50ZXJzIGFjY29yZGluZyB0bwo+Pj4gdGhlCj4+PiArICAgICAgICAqIGN1 cnJlbnQgZGV2X3ByaXYtPnBlcmYub2EubWV0cmljc19zZXQuCj4+PiArICAgICAgICAqLwo+Pj4g KyAgICAgICBpbnQgKCpzZWxlY3RfbWV0cmljX3NldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKPj4+ICsKPj4+ICsgICAgICAgLyoqCj4+PiArICAgICAgICAqIEBlbmFibGVf bWV0cmljX3NldDogU2VsZWN0cyBhbmQgYXBwbGllcyBhbnkgTVVYIGNvbmZpZ3VyYXRpb24KPj4+ IHRvIHNldAo+Pj4gKyAgICAgICAgKiB1cCB0aGUgQm9vbGVhbiBhbmQgQ3VzdG9tIChCL0MpIGNv dW50ZXJzIHRoYXQgYXJlIHBhcnQgb2YgdGhlCj4+PiArICAgICAgICAqIGNvdW50ZXIgcmVwb3J0 cyBiZWluZyBzYW1wbGVkLiBNYXkgYXBwbHkgc3lzdGVtIGNvbnN0cmFpbnRzCj4+PiBzdWNoIGFz Cj4+PiAgICAgICAgICAgKiBkaXNhYmxpbmcgRVUgY2xvY2sgZ2F0aW5nIGFzIHJlcXVpcmVkLgo+ Pj4gICAgICAgICAgICovCj4+PiAgICAgICAgICBpbnQgKCplbmFibGVfbWV0cmljX3NldCkoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4+IEBAIC0yMDk3LDIwICsyMTA1LDEz IEBAIHN0cnVjdCBpOTE1X29hX29wcyB7Cj4+PiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Km9mZnNldCk7Cj4+Pgo+Pj4gICAgICAgICAgLyoqCj4+PiAtICAgICAgICAqIEBvYV9idWZmZXJf Y2hlY2s6IENoZWNrIGZvciBPQSBidWZmZXIgZGF0YSArIHVwZGF0ZSB0YWlsCj4+PiAtICAgICAg ICAqCj4+PiAtICAgICAgICAqIFRoaXMgaXMgZWl0aGVyIGNhbGxlZCB2aWEgZm9wcyBvciB0aGUg cG9sbCBjaGVjayBocnRpbWVyCj4+PiAoYXRvbWljCj4+PiAtICAgICAgICAqIGN0eCkgd2l0aG91 dCBhbnkgbG9ja3MgdGFrZW4uCj4+PiArICAgICAgICAqIEBvYV9od190YWlsX3JlYWQ6IHJlYWQg dGhlIE9BIHRhaWwgcG9pbnRlciByZWdpc3Rlcgo+Pj4gICAgICAgICAgICoKPj4+IC0gICAgICAg ICogSXQncyBzYWZlIHRvIHJlYWQgT0EgY29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3Vt aW5nIHRoYXQKPj4+IHRoaXMKPj4+IC0gICAgICAgICogaXMgb25seSBjYWxsZWQgd2hpbGUgdGhl IHN0cmVhbSBpcyBlbmFibGVkLCB3aGlsZSB0aGUgZ2xvYmFsCj4+PiBPQQo+Pj4gLSAgICAgICAg KiBjb25maWd1cmF0aW9uIGNhbid0IGJlIG1vZGlmaWVkLgo+Pj4gLSAgICAgICAgKgo+Pj4gLSAg ICAgICAgKiBFZmZpY2llbmN5IGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gYXZvaWRpbmcgc29tZSBm YWxzZQo+Pj4gcG9zaXRpdmVzCj4+PiAtICAgICAgICAqIGhlcmUsIHdoaWNoIHdpbGwgYmUgaGFu ZGxlZCBncmFjZWZ1bGx5IC0gbGlrZWx5IHJlc3VsdGluZyBpbgo+Pj4gYW4KPj4+IC0gICAgICAg ICogJUVBR0FJTiBlcnJvciBmb3IgdXNlcnNwYWNlLgo+Pj4gKyAgICAgICAgKiBJbiBwYXJ0aWN1 bGFyIHRoaXMgZW5hYmxlcyB1cyB0byBzaGFyZSBhbGwgdGhlIGZpZGRseSBjb2RlIGZvcgo+Pj4g KyAgICAgICAgKiBoYW5kbGluZyB0aGUgT0EgdW5pdCB0YWlsIHBvaW50ZXIgcmFjZSB0aGF0IGFm ZmVjdHMgbXVsdGlwbGUKPj4+ICsgICAgICAgICogZ2VuZXJhdGlvbnMuCj4+PiAgICAgICAgICAg Ki8KPj4+IC0gICAgICAgYm9vbCAoKm9hX2J1ZmZlcl9jaGVjaykoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKPj4+ICsgICAgICAgdTMyICgqb2FfaHdfdGFpbF9yZWFkKShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+Pj4gICB9Owo+Pj4KPj4+ICAgc3RydWN0 IGludGVsX2NkY2xrX3N0YXRlIHsKPj4+IEBAIC0yNDcyLDYgKzI0NzMsNyBAQCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSB7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhZGRyOwo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgbGFzdF9jdHhfaWQ7Cj4+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9ybWF0Owo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGZvcm1hdF9zaXplOwo+Pj4KPj4+IEBAIC0yNTQxLDYgKzI1NDMs MTQgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+Pj4gICAgICAgICAgICAgICAgICAgICAg ICAgIH0gb2FfYnVmZmVyOwo+Pj4KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZ2Vu N19sYXRjaGVkX29hc3RhdHVzMTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHUzMiBjdHhf b2FjdHhjdHJsX29mZnNldDsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHUzMiBjdHhfZmxl eGV1MF9vZmZzZXQ7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgUlBU X0lEL3JlYXNvbiBmaWVsZCBmb3IgR2VuOCsgaW5jbHVkZXMgYQo+Pj4gYml0Cj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgKiB0byBkZXRlcm1pbmUgaWYgdGhlIENUWCBJRCBpbiB0aGUgcmVw b3J0IGlzCj4+PiB2YWxpZAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IHRoZSBz cGVjaWZpYyBiaXQgZGlmZmVycyBiZXR3ZWVuIEdlbiA4IGFuZAo+Pj4gOQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgICAgICAgICB1MzIgZ2VuOF92 YWxpZF9jdHhfYml0Owo+Pj4KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaTkx NV9vYV9vcHMgb3BzOwo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBp OTE1X29hX2Zvcm1hdCAqb2FfZm9ybWF0czsKPj4+IEBAIC0yODUxLDYgKzI4NjEsOCBAQCBpbnRl bF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICAgI2Rl ZmluZSBJU19LQkxfVUxYKGRldl9wcml2KSAgIChJTlRFTF9ERVZJRChkZXZfcHJpdikgPT0gMHg1 OTBFIHx8IFwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTF9ERVZJ RChkZXZfcHJpdikgPT0gMHg1OTE1IHx8IFwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJTlRFTF9ERVZJRChkZXZfcHJpdikgPT0gMHg1OTFFKQo+Pj4gKyNkZWZpbmUgSVNf U0tMX0dUMihkZXZfcHJpdikgICAoSVNfU0tZTEFLRShkZXZfcHJpdikgJiYgXAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVEVMX0RFVklEKGRldl9wcml2KSAmIDB4MDBG MCkgPT0KPj4+IDB4MDAxMCkKPj4+ICAgI2RlZmluZSBJU19TS0xfR1QzKGRldl9wcml2KSAgIChJ U19TS1lMQUtFKGRldl9wcml2KSAmJiBcCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKElOVEVMX0RFVklEKGRldl9wcml2KSAmIDB4MDBGMCkgPT0KPj4+IDB4MDAyMCkKPj4+ ICAgI2RlZmluZSBJU19TS0xfR1Q0KGRldl9wcml2KSAgIChJU19TS1lMQUtFKGRldl9wcml2KSAm JiBcCj4+PiBAQCAtMzYxNSw2ICszNjI3LDkgQEAgaTkxNV9nZW1fY29udGV4dF9sb29rdXBfdGlt ZWxpbmUoc3RydWN0Cj4+PiBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+Pgo+Pj4gICBpbnQgaTkx NV9wZXJmX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPj4+ICt2 b2lkIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlZ19zdGF0 ZSk7Cj4+Pgo+Pj4gICAvKiBpOTE1X2dlbV9ldmljdC5jICovCj4+PiAgIGludCBfX211c3RfY2hl Y2sgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UKPj4+ ICp2bSwKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+Pj4gaW5kZXggMzI3N2E1MmNl OThlLi5mMjY4OGRlZTVhMDMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPj4+ IEBAIC0xOTYsNiArMTk2LDEyIEBACj4+Pgo+Pj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4+ ICAgI2luY2x1ZGUgImk5MTVfb2FfaHN3LmgiCj4+PiArI2luY2x1ZGUgImk5MTVfb2FfYmR3Lmgi Cj4+PiArI2luY2x1ZGUgImk5MTVfb2FfY2h2LmgiCj4+PiArI2luY2x1ZGUgImk5MTVfb2Ffc2ts Z3QyLmgiCj4+PiArI2luY2x1ZGUgImk5MTVfb2Ffc2tsZ3QzLmgiCj4+PiArI2luY2x1ZGUgImk5 MTVfb2Ffc2tsZ3Q0LmgiCj4+PiArI2luY2x1ZGUgImk5MTVfb2FfYnh0LmgiCj4+Pgo+Pj4gICAv KiBIVyByZXF1aXJlcyB0aGlzIHRvIGJlIGEgcG93ZXIgb2YgdHdvLCBiZXR3ZWVuIDEyOGsgYW5k IDE2TSwgdGhvdWdoCj4+PiBkcml2ZXIKPj4+ICAgICogaXMgY3VycmVudGx5IGdlbmVyYWxseSBk ZXNpZ25lZCBhc3N1bWluZyB0aGUgbGFyZ2VzdCAxNk0gc2l6ZSBpcwo+Pj4gdXNlZCBzdWNoCj4+ PiBAQCAtMjE1LDcgKzIyMSw3IEBACj4+PiAgICAqCj4+PiAgICAqIEFsdGhvdWdoIHRoaXMgY2Fu IGJlIG9ic2VydmVkIGV4cGxpY2l0bHkgd2hpbGUgY29weWluZyByZXBvcnRzIHRvCj4+PiB1c2Vy c3BhY2UKPj4+ICAgICogYnkgY2hlY2tpbmcgZm9yIGEgemVyb2VkIHJlcG9ydC1pZCBmaWVsZCBp biB0YWlsIHJlcG9ydHMsIHdlIHdhbnQgdG8KPj4+IGFjY291bnQKPj4+IC0gKiBmb3IgdGhpcyBl YXJsaWVyLCBhcyBwYXJ0IG9mIHRoZSBfb2FfYnVmZmVyX2NoZWNrIHRvIGF2b2lkIGxvdHMgb2YK Pj4+IHJlZHVuZGFudAo+Pj4gKyAqIGZvciB0aGlzIGVhcmxpZXIsIGFzIHBhcnQgb2YgdGhlIG9h X2J1ZmZlcl9jaGVjayB0byBhdm9pZCBsb3RzIG9mCj4+PiByZWR1bmRhbnQKPj4+ICAgICogcmVh ZCgpIGF0dGVtcHRzLgo+Pj4gICAgKgo+Pj4gICAgKiBJbiBlZmZlY3Qgd2UgZGVmaW5lIGEgdGFp bCBwb2ludGVyIGZvciByZWFkaW5nIHRoYXQgbGFncyB0aGUgcmVhbAo+Pj4gdGFpbAo+Pj4gQEAg LTIzNyw3ICsyNDMsNyBAQAo+Pj4gICAgKiBpbmRpY2F0ZXMgdGhhdCBhbiB1cGRhdGVkIHRhaWwg cG9pbnRlciBpcyBuZWVkZWQuCj4+PiAgICAqCj4+PiAgICAqIE1vc3Qgb2YgdGhlIGltcGxlbWVu dGF0aW9uIGRldGFpbHMgZm9yIHRoaXMgd29ya2Fyb3VuZCBhcmUgaW4KPj4+IC0gKiBnZW43X29h X2J1ZmZlcl9jaGVja191bmxvY2tlZCgpIGFuZCBnZW43X2FwcGFuZF9vYV9yZXBvcnRzKCkKPj4+ ICsgKiBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoKSBhbmQgX2FwcGVuZF9vYV9yZXBvcnRzKCkK Pj4+ICAgICoKPj4+ICAgICogTm90ZSBmb3IgcG9zdGVyaXR5OiBwcmV2aW91c2x5IHRoZSBkcml2 ZXIgdXNlZCB0byBkZWZpbmUgYW4KPj4+IGVmZmVjdGl2ZSB0YWlsCj4+PiAgICAqIHBvaW50ZXIg dGhhdCBsYWdnZWQgdGhlIHJlYWwgcG9pbnRlciBieSBhICd0YWlsIG1hcmdpbicgbWVhc3VyZWQg aW4KPj4+IGJ5dGVzCj4+PiBAQCAtMjcyLDYgKzI3OCwxMyBAQCBzdGF0aWMgdTMyIGk5MTVfcGVy Zl9zdHJlYW1fcGFyYW5vaWQgPSB0cnVlOwo+Pj4KPj4+ICAgI2RlZmluZSBJTlZBTElEX0NUWF9J RCAweGZmZmZmZmZmCj4+Pgo+Pj4gKy8qIE9uIEdlbjgrIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcmVk IE9BIHJlcG9ydHMgaW5jbHVkZSBhICdyZWFzb24nCj4+PiBmaWVsZC4uLiAqLwo+Pj4gKyNkZWZp bmUgT0FSRVBPUlRfUkVBU09OX01BU0sgICAgICAgICAgIDB4M2YKPj4+ICsjZGVmaW5lIE9BUkVQ T1JUX1JFQVNPTl9TSElGVCAgICAgICAgICAxOQo+Pj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09O X1RJTUVSICAgICAgICAgICgxPDwwKQo+Pj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX0NUWF9T V0lUQ0ggICAgICgxPDwzKQo+Pj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX0NMS19SQVRJTyAg ICAgICgxPDw1KQo+Pj4gKwo+Pj4KPj4+ICAgLyogRm9yIHN5c2N0bCBwcm9jX2RvaW50dmVjX21p bm1heCBvZiBpOTE1X29hX21heF9zYW1wbGVfcmF0ZQo+Pj4gICAgKgo+Pj4gQEAgLTMwMyw2ICsz MTYsMTMgQEAgc3RhdGljIHN0cnVjdCBpOTE1X29hX2Zvcm1hdAo+Pj4gaHN3X29hX2Zvcm1hdHNb STkxNV9PQV9GT1JNQVRfTUFYXSA9IHsKPj4+ICAgICAgICAgIFtJOTE1X09BX0ZPUk1BVF9DNF9C OF0gICAgICA9IHsgNywgNjQgfSwKPj4+ICAgfTsKPj4+Cj4+PiArc3RhdGljIHN0cnVjdCBpOTE1 X29hX2Zvcm1hdCBnZW44X3BsdXNfb2FfZm9ybWF0c1tJOTE1X09BX0ZPUk1BVF9NQVhdID0KPj4+ IHsKPj4+ICsgICAgICAgW0k5MTVfT0FfRk9STUFUX0ExMl0gICAgICAgICAgICAgICAgPSB7IDAs IDY0IH0sCj4+PiArICAgICAgIFtJOTE1X09BX0ZPUk1BVF9BMTJfQjhfQzhdICAgICAgICAgID0g eyAyLCAxMjggfSwKPj4+ICsgICAgICAgW0k5MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUzMl9COF9D OF0gPSB7IDUsIDI1NiB9LAo+Pj4gKyAgICAgICBbSTkxNV9PQV9GT1JNQVRfQzRfQjhdICAgICAg ICAgICAgICA9IHsgNywgNjQgfSwKPj4+ICt9Owo+Pj4gKwo+Pj4gICAjZGVmaW5lIFNBTVBMRV9P QV9SRVBPUlQgICAgICAoMTw8MCkKPj4+Cj4+PiAgIC8qKgo+Pj4gQEAgLTMzMiw4ICszNTIsMjAg QEAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsKPj4+ICAgICAgICAgIGludCBvYV9wZXJp b2RfZXhwb25lbnQ7Cj4+PiAgIH07Cj4+Pgo+Pj4gK3N0YXRpYyB1MzIgZ2VuOF9vYV9od190YWls X3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3sKPj4+ICsgICAg ICAgcmV0dXJuIEk5MTVfUkVBRChHRU44X09BVEFJTFBUUikgJiBHRU44X09BVEFJTFBUUl9NQVNL Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdTMyIGdlbjdfb2FfaHdfdGFpbF9yZWFkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICt7Cj4+PiArICAgICAgIHUzMiBvYXN0 YXR1czEgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRVUzEpOwo+Pj4gKwo+Pj4gKyAgICAgICByZXR1 cm4gb2FzdGF0dXMxICYgR0VON19PQVNUQVRVUzFfVEFJTF9NQVNLOwo+Pj4gK30KPj4+ICsKPj4+ ICAgLyoqCj4+PiAtICogZ2VuN19vYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQgLSBjaGVjayBmb3Ig ZGF0YSBhbmQgdXBkYXRlIHRhaWwgcHRyCj4+PiBzdGF0ZQo+Pj4gKyAqIG9hX2J1ZmZlcl9jaGVj a191bmxvY2tlZCAtIGNoZWNrIGZvciBkYXRhIGFuZCB1cGRhdGUgdGFpbCBwdHIgc3RhdGUKPj4+ ICAgICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+Pj4gICAgKgo+Pj4gICAgKiBU aGlzIGlzIGVpdGhlciBjYWxsZWQgdmlhIGZvcHMgKGZvciBibG9ja2luZyByZWFkcyBpbiB1c2Vy IGN0eCkgb3IKPj4+IHRoZSBwb2xsCj4+PiBAQCAtMzU2LDEyICszODgsMTEgQEAgc3RydWN0IHBl cmZfb3Blbl9wcm9wZXJ0aWVzIHsKPj4+ICAgICoKPj4+ICAgICogUmV0dXJuczogJXRydWUgaWYg dGhlIE9BIGJ1ZmZlciBjb250YWlucyBkYXRhLCBlbHNlICVmYWxzZQo+Pj4gICAgKi8KPj4+IC1z dGF0aWMgYm9vbCBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZQo+Pj4gKmRldl9wcml2KQo+Pj4gK3N0YXRpYyBib29sIG9hX2J1ZmZlcl9jaGVja191 bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAgIHsKPj4+ICAg ICAgICAgIGludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3Jt YXRfc2l6ZTsKPj4+ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+PiAgICAgICAgICB1 bnNpZ25lZCBpbnQgYWdlZF9pZHg7Cj4+PiAtICAgICAgIHUzMiBvYXN0YXR1czE7Cj4+PiAgICAg ICAgICB1MzIgaGVhZCwgaHdfdGFpbCwgYWdlZF90YWlsLCBhZ2luZ190YWlsOwo+Pj4gICAgICAg ICAgdTY0IG5vdzsKPj4+Cj4+PiBAQCAtMzgxLDggKzQxMiw3IEBAIHN0YXRpYyBib29sIGdlbjdf b2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0cnVjdAo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4+PiAgICAgICAgICBhZ2VkX3RhaWwgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIudGFpbHNbYWdlZF9pZHhdLm9mZnNldDsKPj4+ICAgICAgICAgIGFnaW5nX3RhaWwgPQo+Pj4g ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnRhaWxzWyFhZ2VkX2lkeF0ub2Zmc2V0Owo+Pj4K Pj4+IC0gICAgICAgb2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKPj4+IC0g ICAgICAgaHdfdGFpbCA9IG9hc3RhdHVzMSAmIEdFTjdfT0FTVEFUVVMxX1RBSUxfTUFTSzsKPj4+ ICsgICAgICAgaHdfdGFpbCA9IGRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9od190YWlsX3JlYWQo ZGV2X3ByaXYpOwo+Pj4KPj4+ICAgICAgICAgIC8qIFRoZSB0YWlsIHBvaW50ZXIgaW5jcmVhc2Vz IGluIDY0IGJ5dGUgaW5jcmVtZW50cywKPj4+ICAgICAgICAgICAqIG5vdCBpbiByZXBvcnRfc2l6 ZSBzdGVwcy4uLgo+Pj4gQEAgLTQwNCw2ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCBnZW43X29hX2J1 ZmZlcl9jaGVja191bmxvY2tlZChzdHJ1Y3QKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+Pj4gICAgICAgICAgaWYgKGFnaW5nX3RhaWwgIT0gSU5WQUxJRF9UQUlMX1BUUiAmJgo+Pj4g ICAgICAgICAgICAgICgobm93IC0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFnaW5nX3Rp bWVzdGFtcCkgPgo+Pj4gICAgICAgICAgICAgICBPQV9UQUlMX01BUkdJTl9OU0VDKSkgewo+Pj4g Kwo+Pj4gICAgICAgICAgICAgICAgICBhZ2VkX2lkeCBePSAxOwo+Pj4gICAgICAgICAgICAgICAg ICBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWdlZF90YWlsX2lkeCA9IGFnZWRfaWR4Owo+ Pj4KPj4+IEBAIC01NTMsNiArNTg0LDI4NyBAQCBzdGF0aWMgaW50IGFwcGVuZF9vYV9zYW1wbGUo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0KPj4+ICpzdHJlYW0sCj4+PiAgICAqCj4+PiAgICAqIFJl dHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+Pj4g ICAgKi8KPj4+ICtzdGF0aWMgaW50IGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIF9fdXNlciAqYnVmLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBjb3VudCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKm9mZnNldCkKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4+PiArICAgICAgIGludCByZXBvcnRfc2l6ZSA9 IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKPj4+ICsgICAgICAgdTgg Km9hX2J1Zl9iYXNlID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZhZGRyOwo+Pj4gKyAg ICAgICB1MzIgZ3R0X29mZnNldCA9Cj4+PiBpOTE1X2dndHRfb2Zmc2V0KGRldl9wcml2LT5wZXJm Lm9hLm9hX2J1ZmZlci52bWEpOwo+Pj4gKyAgICAgICB1MzIgbWFzayA9IChPQV9CVUZGRVJfU0la RSAtIDEpOwo+Pj4gKyAgICAgICBzaXplX3Qgc3RhcnRfb2Zmc2V0ID0gKm9mZnNldDsKPj4+ICsg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ICsgICAgICAgdW5zaWduZWQgaW50IGFnZWRf dGFpbF9pZHg7Cj4+PiArICAgICAgIHUzMiBoZWFkLCB0YWlsOwo+Pj4gKyAgICAgICB1MzIgdGFr ZW47Cj4+PiArICAgICAgIGludCByZXQgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgICBpZiAoV0FSTl9P Tighc3RyZWFtLT5lbmFibGVkKSkKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKPj4+ ICsKPj4+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5wZXJmLm9hLm9hX2J1 ZmZlci5wdHJfbG9jaywgZmxhZ3MpOwo+Pj4gKwo+Pj4gKyAgICAgICBoZWFkID0gZGV2X3ByaXYt PnBlcmYub2Eub2FfYnVmZmVyLmhlYWQ7Cj4+PiArICAgICAgIGFnZWRfdGFpbF9pZHggPSBkZXZf cHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWdlZF90YWlsX2lkeDsKPj4+ICsgICAgICAgdGFpbCA9 IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci50YWlsc1thZ2VkX3RhaWxfaWR4XS5vZmZzZXQ7 Cj4+PiArCj4+PiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5wZXJm Lm9hLm9hX2J1ZmZlci5wdHJfbG9jaywKPj4+IGZsYWdzKTsKPj4+ICsKPj4+ICsgICAgICAgLyog QW4gaW52YWxpZCB0YWlsIHBvaW50ZXIgaGVyZSBtZWFucyB3ZSdyZSBzdGlsbCB3YWl0aW5nIGZv ciB0aGUKPj4+IHBvbGwKPj4+ICsgICAgICAgICogaHJ0aW1lciBjYWxsYmFjayB0byBnaXZlIHVz IGEgcG9pbnRlcgo+Pj4gKyAgICAgICAgKi8KPj4+ICsgICAgICAgaWYgKHRhaWwgPT0gSU5WQUxJ RF9UQUlMX1BUUikKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVBR0FJTjsKPj4+ICsKPj4+ ICsgICAgICAgLyogTkI6IG9hX2J1ZmZlci5oZWFkL3RhaWwgaW5jbHVkZSB0aGUgZ3R0X29mZnNl dCB3aGljaCB3ZSBkb24ndAo+Pj4gd2FudAo+Pj4gKyAgICAgICAgKiB3aGlsZSBpbmRleGluZyBy ZWxhdGl2ZSB0byBvYV9idWZfYmFzZS4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIGhlYWQg LT0gZ3R0X29mZnNldDsKPj4+ICsgICAgICAgdGFpbCAtPSBndHRfb2Zmc2V0Owo+Pj4gKwo+Pj4g KyAgICAgICAvKiBBbiBvdXQgb2YgYm91bmRzIG9yIG1pc2FsaWduZWQgaGVhZCBvciB0YWlsIHBv aW50ZXIgaW1wbGllcyBhCj4+PiBkcml2ZXIKPj4+ICsgICAgICAgICogYnVnIHNpbmNlIHdlIHZh bGlkYXRlICsgYWxpZ24gdGhlIHRhaWwgcG9pbnRlcnMgd2UgcmVhZCBmcm9tCj4+PiB0aGUKPj4+ ICsgICAgICAgICogaGFyZHdhcmUgYW5kIHdlIGFyZSBpbiBmdWxsIGNvbnRyb2wgb2YgdGhlIGhl YWQgcG9pbnRlciB3aGljaAo+Pj4gc2hvdWxkCj4+PiArICAgICAgICAqIG9ubHkgYmUgaW5jcmVt ZW50ZWQgYnkgbXVsdGlwbGVzIG9mIHRoZSByZXBvcnQgc2l6ZSAobm90YWJseQo+Pj4gYWxzbwo+ Pj4gKyAgICAgICAgKiBhbGwgYSBwb3dlciBvZiB0d28pLgo+Pj4gKyAgICAgICAgKi8KPj4+ICsg ICAgICAgaWYgKFdBUk5fT05DRShoZWFkID4gT0FfQlVGRkVSX1NJWkUgfHwgaGVhZCAlIHJlcG9y dF9zaXplIHx8Cj4+PiArICAgICAgICAgICAgICAgICAgICAgdGFpbCA+IE9BX0JVRkZFUl9TSVpF IHx8IHRhaWwgJSByZXBvcnRfc2l6ZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAiSW5jb25z aXN0ZW50IE9BIGJ1ZmZlciBwb2ludGVyczogaGVhZCA9ICV1LCB0YWlsID0KPj4+ICV1XG4iLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIGhlYWQsIHRhaWwpKQo+Pj4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUlPOwo+Pj4gKwo+Pj4gKwo+Pj4gKyAgICAgICBmb3IgKC8qIG5vbmUgKi87Cj4+ PiArICAgICAgICAgICAgKHRha2VuID0gT0FfVEFLRU4odGFpbCwgaGVhZCkpOwo+Pj4gKyAgICAg ICAgICAgIGhlYWQgPSAoaGVhZCArIHJlcG9ydF9zaXplKSAmIG1hc2spIHsKPj4+ICsgICAgICAg ICAgICAgICB1OCAqcmVwb3J0ID0gb2FfYnVmX2Jhc2UgKyBoZWFkOwo+Pj4gKyAgICAgICAgICAg ICAgIHUzMiAqcmVwb3J0MzIgPSAodm9pZCAqKXJlcG9ydDsKPj4+ICsgICAgICAgICAgICAgICB1 MzIgY3R4X2lkOwo+Pj4gKyAgICAgICAgICAgICAgIHUzMiByZWFzb247Cj4+PiArCj4+PiArICAg ICAgICAgICAgICAgLyogQWxsIHRoZSByZXBvcnQgc2l6ZXMgZmFjdG9yIG5lYXRseSBpbnRvIHRo ZSBidWZmZXIKPj4+ICsgICAgICAgICAgICAgICAgKiBzaXplIHNvIHdlIG5ldmVyIGV4cGVjdCB0 byBzZWUgYSByZXBvcnQgc3BsaXQKPj4+ICsgICAgICAgICAgICAgICAgKiBiZXR3ZWVuIHRoZSBi ZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgYnVmZmVyLgo+Pj4gKyAgICAgICAgICAgICAgICAqCj4+ PiArICAgICAgICAgICAgICAgICogR2l2ZW4gdGhlIGluaXRpYWwgYWxpZ25tZW50IGNoZWNrIGEg bWlzYWxpZ25tZW50Cj4+PiArICAgICAgICAgICAgICAgICogaGVyZSB3b3VsZCBpbXBseSBhIGRy aXZlciBidWcgdGhhdCB3b3VsZCByZXN1bHQKPj4+ICsgICAgICAgICAgICAgICAgKiBpbiBhbiBv dmVycnVuLgo+Pj4gKyAgICAgICAgICAgICAgICAqLwo+Pj4gKyAgICAgICAgICAgICAgIGlmIChX QVJOX09OKChPQV9CVUZGRVJfU0laRSAtIGhlYWQpIDwgcmVwb3J0X3NpemUpKSB7Cj4+PiArICAg ICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoIlNwdXJpb3VzIE9BIGhlYWQgcHRyOiBub24t aW50ZWdyYWwKPj4+IHJlcG9ydCBvZmZzZXRcbiIpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAg IC8qIFRoZSByZWFzb24gZmllbGQgaW5jbHVkZXMgZmxhZ3MgaWRlbnRpZnlpbmcgd2hhdAo+Pj4g KyAgICAgICAgICAgICAgICAqIHRyaWdnZXJlZCB0aGlzIHNwZWNpZmljIHJlcG9ydCAobW9zdGx5 IHRpbWVyCj4+PiArICAgICAgICAgICAgICAgICogdHJpZ2dlcmVkIG9yIGUuZy4gZHVlIHRvIGEg Y29udGV4dCBzd2l0Y2gpLgo+Pj4gKyAgICAgICAgICAgICAgICAqCj4+PiArICAgICAgICAgICAg ICAgICogVGhpcyBmaWVsZCBpcyBuZXZlciBleHBlY3RlZCB0byBiZSB6ZXJvIHNvIHdlIGNhbgo+ Pj4gKyAgICAgICAgICAgICAgICAqIGNoZWNrIHRoYXQgdGhlIHJlcG9ydCBpc24ndCBpbnZhbGlk IGJlZm9yZSBjb3B5aW5nCj4+PiArICAgICAgICAgICAgICAgICogaXQgdG8gdXNlcnNwYWNlLi4u Cj4+PiArICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgcmVhc29uID0gKChy ZXBvcnQzMlswXSA+PiBPQVJFUE9SVF9SRUFTT05fU0hJRlQpICYKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgT0FSRVBPUlRfUkVBU09OX01BU0spOwo+Pj4gKyAgICAgICAgICAgICAgIGlm IChyZWFzb24gPT0gMCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYKPj4+IChfX3Jh dGVsaW1pdCgmZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlvdXNfcmVwb3J0X3JzKSkKPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX05PVEUoIlNraXBwaW5nIHNwdXJpb3VzLCBp bnZhbGlkIE9BCj4+PiByZXBvcnRcbiIpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIC8q IFhYWDogSnVzdCBrZWVwIHRoZSBsb3dlciAyMSBiaXRzIGZvciBub3cgc2luY2UgSSdtIG5vdAo+ Pj4gKyAgICAgICAgICAgICAgICAqIGVudGlyZWx5IHN1cmUgaWYgdGhlIEhXIHRvdWNoZXMgYW55 IG9mIHRoZSBoaWdoZXIgYml0cwo+Pj4gaW4KPj4+ICsgICAgICAgICAgICAgICAgKiB0aGlzIGZp ZWxkCj4+PiArICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgY3R4X2lkID0g cmVwb3J0MzJbMl0gJiAweDFmZmZmZjsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAvKiBTcXVh c2ggd2hhdGV2ZXIgaXMgaW4gdGhlIENUWF9JRCBmaWVsZCBpZiBpdCdzIG1hcmtlZAo+Pj4gYXMK Pj4+ICsgICAgICAgICAgICAgICAgKiBpbnZhbGlkIHRvIGJlIHN1cmUgd2UgYXZvaWQgZmFsc2Ut cG9zaXRpdmUsCj4+PiBzaW5nbGUtY29udGV4dAo+Pj4gKyAgICAgICAgICAgICAgICAqIGZpbHRl cmluZyBiZWxvdy4uLgo+Pj4gKyAgICAgICAgICAgICAgICAqCj4+PiArICAgICAgICAgICAgICAg ICogTm90ZTogdGhhdCB3ZSBkb24ndCBjbGVhciB0aGUgdmFsaWRfY3R4X2JpdCBzbwo+Pj4gdXNl cnNwYWNlIGNhbgo+Pj4gKyAgICAgICAgICAgICAgICAqIHVuZGVyc3RhbmQgdGhhdCB0aGUgSUQg aGFzIGJlZW4gc3F1YXNoZWQgYnkgdGhlCj4+PiBrZXJuZWwuCj4+PiArICAgICAgICAgICAgICAg ICovCj4+PiArICAgICAgICAgICAgICAgaWYgKCEocmVwb3J0MzJbMF0gJgo+Pj4gZGV2X3ByaXYt PnBlcmYub2EuZ2VuOF92YWxpZF9jdHhfYml0KSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGN0eF9pZCA9IHJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhfSUQ7Cj4+PiArCj4+PiArICAgICAg ICAgICAgICAgLyogTkI6IEZvciBHZW4gOCB0aGUgT0EgdW5pdCBubyBsb25nZXIgc3VwcG9ydHMg Y2xvY2sKPj4+IGdhdGluZwo+Pj4gKyAgICAgICAgICAgICAgICAqIG9mZiBmb3IgYSBzcGVjaWZp YyBjb250ZXh0IGFuZCB0aGUga2VybmVsIGNhbid0Cj4+PiBzZWN1cmVseQo+Pj4gKyAgICAgICAg ICAgICAgICAqIHN0b3AgdGhlIGNvdW50ZXJzIGZyb20gdXBkYXRpbmcgYXMgc3lzdGVtLXdpZGUg Lwo+Pj4gZ2xvYmFsCj4+PiArICAgICAgICAgICAgICAgICogdmFsdWVzLgo+Pj4gKyAgICAgICAg ICAgICAgICAqCj4+PiArICAgICAgICAgICAgICAgICogQXV0b21hdGljIHJlcG9ydHMgbm93IGlu Y2x1ZGUgYSBjb250ZXh0IElEIHNvIHJlcG9ydHMKPj4+IGNhbiBiZQo+Pj4gKyAgICAgICAgICAg ICAgICAqIGZpbHRlcmVkIG9uIHRoZSBjcHUgYnV0IGl0J3Mgbm90IHdvcnRoIHRyeWluZyB0bwo+ Pj4gKyAgICAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgc3VidHJhY3QvaGlkZSBjb3VudGVy IHByb2dyZXNzIGZvciBvdGhlcgo+Pj4gKyAgICAgICAgICAgICAgICAqIGNvbnRleHRzIHdoaWxl IGZpbHRlcmluZyBzaW5jZSB3ZSBjYW4ndCBzdG9wIHVzZXJzcGFjZQo+Pj4gKyAgICAgICAgICAg ICAgICAqIGlzc3VpbmcgTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgd2hpY2ggd291bGQK Pj4+IHN0aWxsCj4+PiArICAgICAgICAgICAgICAgICogcHJvdmlkZSBhIHNpZGUtYmFuZCB2aWV3 IG9mIHRoZSByZWFsIHZhbHVlcy4KPj4+ICsgICAgICAgICAgICAgICAgKgo+Pj4gKyAgICAgICAg ICAgICAgICAqIFRvIGFsbG93IHVzZXJzcGFjZSAoc3VjaCBhcwo+Pj4gTWVzYS9HTF9JTlRFTF9w ZXJmb3JtYW5jZV9xdWVyeSkKPj4+ICsgICAgICAgICAgICAgICAgKiB0byBub3JtYWxpemUgY291 bnRlcnMgZm9yIGEgc2luZ2xlIGZpbHRlcmVkIGNvbnRleHQKPj4+IHRoZW4gaXQKPj4+ICsgICAg ICAgICAgICAgICAgKiBuZWVkcyBiZSBmb3J3YXJkZWQgYm9va2VuZCBjb250ZXh0LXN3aXRjaCBy ZXBvcnRzIHNvCj4+PiB0aGF0IGl0Cj4+PiArICAgICAgICAgICAgICAgICogY2FuIHRyYWNrIHN3 aXRjaGVzIGluIGJldHdlZW4gTUlfUkVQT1JUX1BFUkZfQ09VTlQKPj4+IGNvbW1hbmRzCj4+PiAr ICAgICAgICAgICAgICAgICogYW5kIGNhbiBpdHNlbGYgc3VidHJhY3QvaWdub3JlIHRoZSBwcm9n cmVzcyBvZgo+Pj4gY291bnRlcnMKPj4+ICsgICAgICAgICAgICAgICAgKiBhc3NvY2lhdGVkIHdp dGggb3RoZXIgY29udGV4dHMuIE5vdGUgdGhhdCB0aGUgaGFyZHdhcmUKPj4+ICsgICAgICAgICAg ICAgICAgKiBhdXRvbWF0aWNhbGx5IHRyaWdnZXJzIHJlcG9ydHMgd2hlbiBzd2l0Y2hpbmcgdG8g YSBuZXcKPj4+ICsgICAgICAgICAgICAgICAgKiBjb250ZXh0IHdoaWNoIGFyZSB0YWdnZWQgd2l0 aCB0aGUgSUQgb2YgdGhlIG5ld2x5Cj4+PiBhY3RpdmUKPj4+ICsgICAgICAgICAgICAgICAgKiBj b250ZXh0LiBUbyBhdm9pZCB0aGUgY29tcGxleGl0eSAoYW5kIGxpa2VseQo+Pj4gZnJhZ2lsaXR5 KSBvZgo+Pj4gKyAgICAgICAgICAgICAgICAqIHJlYWRpbmcgYWhlYWQgd2hpbGUgcGFyc2luZyBy ZXBvcnRzIHRvIHRyeSBhbmQKPj4+IG1pbmltaXplCj4+PiArICAgICAgICAgICAgICAgICogZm9y d2FyZGluZyByZWR1bmRhbnQgY29udGV4dCBzd2l0Y2ggcmVwb3J0cyAoaS5lLgo+Pj4gYmV0d2Vl bgo+Pj4gKyAgICAgICAgICAgICAgICAqIG90aGVyLCB1bnJlbGF0ZWQgY29udGV4dHMpIHdlIHNp bXBseSBlbGVjdCB0byBmb3J3YXJkCj4+PiB0aGVtCj4+PiArICAgICAgICAgICAgICAgICogYWxs Lgo+Pj4gKyAgICAgICAgICAgICAgICAqCj4+PiArICAgICAgICAgICAgICAgICogV2UgZG9uJ3Qg cmVseSBzb2xlbHkgb24gdGhlIHJlYXNvbiBmaWVsZCB0byBpZGVudGlmeQo+Pj4gY29udGV4dAo+ Pj4gKyAgICAgICAgICAgICAgICAqIHN3aXRjaGVzIHNpbmNlIGl0J3Mgbm90LXVuY29tbW9uIGZv ciBwZXJpb2RpYyBzYW1wbGVzCj4+PiB0bwo+Pj4gKyAgICAgICAgICAgICAgICAqIGlkZW50aWZ5 IGEgc3dpdGNoIGJlZm9yZSBhbnkgJ2NvbnRleHQgc3dpdGNoJyByZXBvcnQuCj4+PiArICAgICAg ICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgaWYgKCFkZXZfcHJpdi0+cGVyZi5vYS5l eGNsdXNpdmVfc3RyZWFtLT5jdHggfHwKPj4+ICsgICAgICAgICAgICAgICAgICAgZGV2X3ByaXYt PnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID09IGN0eF9pZCB8fAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lkID09Cj4+PiArICAg ICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQpIHx8Cj4+ PiArICAgICAgICAgICAgICAgICAgIHJlYXNvbiAmIE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENI KSB7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGlsZSBmaWx0ZXJpbmcg Zm9yIGEgc2luZ2xlIGNvbnRleHQgd2UgYXZvaWQKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAqIGxlYWtpbmcgdGhlIElEcyBvZiBvdGhlciBjb250ZXh0cy4KPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAqLwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldl9wcml2LT5w ZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCAmJgo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCAhPSBjdHhfaWQpCj4+PiB7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydDMyWzJdID0gSU5WQUxJ RF9DVFhfSUQ7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4+PiArCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICByZXQgPSBhcHBlbmRfb2Ffc2FtcGxlKHN0cmVhbSwgYnVmLCBjb3Vu dCwKPj4+IG9mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVwb3J0KTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKwo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lk ID0gY3R4X2lkOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICAg ICAvKiBUaGUgYWJvdmUgcmVhc29uIGZpZWxkIHNhbml0eSBjaGVjayBpcyBiYXNlZCBvbgo+Pj4g KyAgICAgICAgICAgICAgICAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIE9BIGJ1ZmZlciBpcyBp bml0aWFsbHkKPj4+ICsgICAgICAgICAgICAgICAgKiB6ZXJvZWQgYW5kIHdlIHJlc2V0IHRoZSBm aWVsZCBhZnRlciBjb3B5aW5nIHNvIHRoZQo+Pj4gKyAgICAgICAgICAgICAgICAqIGNoZWNrIGlz IHN0aWxsIG1lYW5pbmdmdWwgb25jZSBvbGQgcmVwb3J0cyBzdGFydAo+Pj4gKyAgICAgICAgICAg ICAgICAqIGJlaW5nIG92ZXJ3cml0dGVuLgo+Pj4gKyAgICAgICAgICAgICAgICAqLwo+Pj4gKyAg ICAgICAgICAgICAgIHJlcG9ydDMyWzBdID0gMDsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAg ICAgICBpZiAoc3RhcnRfb2Zmc2V0ICE9ICpvZmZzZXQpIHsKPj4+ICsgICAgICAgICAgICAgICBz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnB0cl9sb2NrLAo+ Pj4gZmxhZ3MpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIC8qIFdlIHJlbW92ZWQgdGhlIGd0 dF9vZmZzZXQgZm9yIHRoZSBjb3B5IGxvb3AgYWJvdmUsCj4+PiBpbmRleGluZwo+Pj4gKyAgICAg ICAgICAgICAgICAqIHJlbGF0aXZlIHRvIG9hX2J1Zl9iYXNlIHNvIHB1dCBiYWNrIGhlcmUuLi4K Pj4+ICsgICAgICAgICAgICAgICAgKi8KPj4+ICsgICAgICAgICAgICAgICBoZWFkICs9IGd0dF9v ZmZzZXQ7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU44X09BSEVBRFBU UiwgaGVhZCAmIEdFTjhfT0FIRUFEUFRSX01BU0spOwo+Pj4gKyAgICAgICAgICAgICAgIGRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5oZWFkID0gaGVhZDsKPj4+ICsKPj4+ICsKPj4+IHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jaywg ZmxhZ3MpOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIHJldHVybiByZXQ7Cj4+PiAr fQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIGdlbjhfb2FfcmVhZCAtIGNvcHkgc3RhdHVzIHJlY29y ZHMgdGhlbiBidWZmZXJlZCBPQSByZXBvcnRzCj4+PiArICogQHN0cmVhbTogQW4gaTkxNS1wZXJm IHN0cmVhbSBvcGVuZWQgZm9yIE9BIG1ldHJpY3MKPj4+ICsgKiBAYnVmOiBkZXN0aW5hdGlvbiBi dWZmZXIgZ2l2ZW4gYnkgdXNlcnNwYWNlCj4+PiArICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIGJ5 dGVzIHVzZXJzcGFjZSB3YW50cyB0byByZWFkCj4+PiArICogQG9mZnNldDogKGlub3V0KTogdGhl IGN1cnJlbnQgcG9zaXRpb24gZm9yIHdyaXRpbmcgaW50byBAYnVmCj4+PiArICoKPj4+ICsgKiBD aGVja3MgT0EgdW5pdCBzdGF0dXMgcmVnaXN0ZXJzIGFuZCBpZiBuZWNlc3NhcnkgYXBwZW5kcwo+ Pj4gY29ycmVzcG9uZGluZwo+Pj4gKyAqIHN0YXR1cyByZWNvcmRzIGZvciB1c2Vyc3BhY2UgKHN1 Y2ggYXMgZm9yIGEgYnVmZmVyIGZ1bGwgY29uZGl0aW9uKQo+Pj4gYW5kIHRoZW4KPj4+ICsgKiBp bml0aWF0ZSBhcHBlbmRpbmcgYW55IGJ1ZmZlcmVkIE9BIHJlcG9ydHMuCj4+PiArICoKPj4+ICsg KiBVcGRhdGVzIEBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vz c2Z1bGx5IGNvcGllZAo+Pj4gaW50bwo+Pj4gKyAqIHRoZSB1c2Vyc3BhY2UgYnVmZmVyLgo+Pj4g KyAqCj4+PiArICogTkI6IHNvbWUgZGF0YSBtYXkgYmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCB0byB0 aGUgdXNlcnNwYWNlIGJ1ZmZlcgo+Pj4gKyAqIGV2ZW4gaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQs IGFuZCB0aGlzIGlzIHJlZmxlY3RlZCBpbiB0aGUKPj4+ICsgKiB1cGRhdGVkIEBvZmZzZXQuCj4+ PiArICoKPj4+ICsgKiBSZXR1cm5zOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlCj4+PiArICovCj4+PiArc3RhdGljIGludCBnZW44X29hX3JlYWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX191 c2VyICpidWYsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9mZnNldCkKPj4+ICt7Cj4+PiArICAgICAg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4+ PiArICAgICAgIHUzMiBvYXN0YXR1czsKPj4+ICsgICAgICAgaW50IHJldDsKPj4+ICsKPj4+ICsg ICAgICAgaWYgKFdBUk5fT04oIWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkcikpCj4+ PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Cj4+PiArCj4+PiArICAgICAgIG9hc3RhdHVz ID0gSTkxNV9SRUFEKEdFTjhfT0FTVEFUVVMpOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBXZSB0cmVh dCBPQUJVRkZFUl9PVkVSRkxPVyBhcyBhIHNpZ25pZmljYW50IGVycm9yOgo+Pj4gKyAgICAgICAg Kgo+Pj4gKyAgICAgICAgKiBBbHRob3VnaCB0aGVvcmV0aWNhbGx5IHdlIGNvdWxkIGhhbmRsZSB0 aGlzIG1vcmUgZ3JhY2VmdWxseQo+Pj4gKyAgICAgICAgKiBzb21ldGltZXMsIHNvbWUgR2VucyBk b24ndCBjb3JyZWN0bHkgc3VwcHJlc3MgY2VydGFpbgo+Pj4gKyAgICAgICAgKiBhdXRvbWF0aWNh bGx5IHRyaWdnZXJlZCByZXBvcnRzIGluIHRoaXMgY29uZGl0aW9uIGFuZCBzbyB3ZQo+Pj4gKyAg ICAgICAgKiBoYXZlIHRvIGFzc3VtZSB0aGF0IG9sZCByZXBvcnRzIGFyZSBub3cgYmVpbmcgdHJh bXBsZWQKPj4+ICsgICAgICAgICogb3Zlci4KPj4+ICsgICAgICAgICoKPj4+ICsgICAgICAgICog Q29uc2lkZXJpbmcgaG93IHdlIGRvbid0IGN1cnJlbnRseSBnaXZlIHVzZXJzcGFjZSBjb250cm9s Cj4+PiArICAgICAgICAqIG92ZXIgdGhlIE9BIGJ1ZmZlciBzaXplIGFuZCBhbHdheXMgY29uZmln dXJlIGEgbGFyZ2UgMTZNQgo+Pj4gKyAgICAgICAgKiBidWZmZXIsIHRoZW4gYSBidWZmZXIgb3Zl cmZsb3cgZG9lcyBhbnl3YXkgbGlrZWx5IGluZGljYXRlCj4+PiArICAgICAgICAqIHRoYXQgc29t ZXRoaW5nIGhhcyBnb25lIHF1aXRlIGJhZGx5IHdyb25nLgo+Pj4gKyAgICAgICAgKi8KPj4+ICsg ICAgICAgaWYgKG9hc3RhdHVzICYgR0VOOF9PQVNUQVRVU19PQUJVRkZFUl9PVkVSRkxPVykgewo+ Pj4gKyAgICAgICAgICAgICAgIHJldCA9IGFwcGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNv dW50LCBvZmZzZXQsCj4+PiArCj4+PiBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9CVUZGRVJfTE9T VCk7Cj4+PiArICAgICAgICAgICAgICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgRFJNX0RFQlVHKCJPQSBi dWZmZXIgb3ZlcmZsb3cgKGV4cG9uZW50ID0gJWQpOiBmb3JjZQo+Pj4gcmVzdGFydFxuIiwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kX2V4cG9u ZW50KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICBkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2Ff ZGlzYWJsZShkZXZfcHJpdik7Cj4+PiArICAgICAgICAgICAgICAgZGV2X3ByaXYtPnBlcmYub2Eu b3BzLm9hX2VuYWJsZShkZXZfcHJpdik7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgLyogTm90 ZTogLm9hX2VuYWJsZSgpIGlzIGV4cGVjdGVkIHRvIHJlLWluaXQgdGhlIG9hYnVmZmVyCj4+PiAr ICAgICAgICAgICAgICAgICogYW5kIHJlc2V0IEdFTjhfT0FTVEFUVVMgZm9yIHVzCj4+PiArICAg ICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgb2FzdGF0dXMgPSBJOTE1X1JFQUQo R0VOOF9PQVNUQVRVUyk7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgaWYgKG9hc3Rh dHVzICYgR0VOOF9PQVNUQVRVU19SRVBPUlRfTE9TVCkgewo+Pj4gKyAgICAgICAgICAgICAgIHJl dCA9IGFwcGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCj4+PiArCj4+ PiBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9SRVBPUlRfTE9TVCk7Cj4+PiArICAgICAgICAgICAg ICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiAr ICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU44X09BU1RBVFVTLAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgb2FzdGF0dXMgJiB+R0VOOF9PQVNUQVRVU19SRVBPUlRfTE9TVCk7Cj4+ PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIGdlbjhfYXBwZW5kX29hX3JlcG9y dHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQpOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ ICsgKiBDb3BpZXMgYWxsIGJ1ZmZlcmVkIE9BIHJlcG9ydHMgaW50byB1c2Vyc3BhY2UgcmVhZCgp IGJ1ZmZlci4KPj4+ICsgKiBAc3RyZWFtOiBBbiBpOTE1LXBlcmYgc3RyZWFtIG9wZW5lZCBmb3Ig T0EgbWV0cmljcwo+Pj4gKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBieSB1c2Vy c3BhY2UKPj4+ICsgKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlcnNwYWNlIHdhbnRz IHRvIHJlYWQKPj4+ICsgKiBAb2Zmc2V0OiAoaW5vdXQpOiB0aGUgY3VycmVudCBwb3NpdGlvbiBm b3Igd3JpdGluZyBpbnRvIEBidWYKPj4+ICsgKgo+Pj4gKyAqIE5vdGFibHkgYW55IGVycm9yIGNv bmRpdGlvbiByZXN1bHRpbmcgaW4gYSBzaG9ydCByZWFkICgtJUVOT1NQQyBvcgo+Pj4gKyAqIC0l RUZBVUxUKSB3aWxsIGJlIHJldHVybmVkIGV2ZW4gdGhvdWdoIG9uZSBvciBtb3JlIHJlY29yZHMg bWF5Cj4+PiArICogaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjb3BpZWQuIEluIHRoaXMgY2FzZSBp dCdzIHVwIHRvIHRoZSBjYWxsZXIKPj4+ICsgKiB0byBkZWNpZGUgaWYgdGhlIGVycm9yIHNob3Vs ZCBiZSBzcXVhc2hlZCBiZWZvcmUgcmV0dXJuaW5nIHRvCj4+PiArICogdXNlcnNwYWNlLgo+Pj4g KyAqCj4+PiArICogTm90ZTogcmVwb3J0cyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgaGVhZCwgYW5k IGFwcGVuZGVkIHRvIHRoZQo+Pj4gKyAqIHRhaWwsIHNvIHRoZSB0YWlsIGNoYXNlcyB0aGUgaGVh ZD8uLi4gSWYgeW91IHRoaW5rIHRoYXQncyBtYWQKPj4+ICsgKiBhbmQgYmFjay10by1mcm9udCB5 b3UncmUgbm90IGFsb25lLCBidXQgdGhpcyBmb2xsb3dzIHRoZQo+Pj4gKyAqIEdlbiBQUk0gbmFt aW5nIGNvbnZlbnRpb24uCj4+PiArICoKPj4+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5l Z2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPj4+ICsgKi8KPj4+ICAgc3RhdGljIGludCBn ZW43X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX191c2VyICpidWYsCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwKPj4+IEBA IC03MzMsNyArMTA0NSw4IEBAIHN0YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtCj4+PiAqc3RyZWFtLAo+Pj4gICAgICAgICAgICAgICAgICBpZiAocmV0KQo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+Pgo+Pj4gLSAgICAgICAgICAg ICAgIERSTV9ERUJVRygiT0EgYnVmZmVyIG92ZXJmbG93OiBmb3JjZSByZXN0YXJ0XG4iKTsKPj4+ ICsgICAgICAgICAgICAgICBEUk1fREVCVUcoIk9BIGJ1ZmZlciBvdmVyZmxvdyAoZXhwb25lbnQg PSAlZCk6IGZvcmNlCj4+PiByZXN0YXJ0XG4iLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQpOwo+Pj4KPj4+ICAgICAgICAgICAg ICAgICAgZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2Rpc2FibGUoZGV2X3ByaXYpOwo+Pj4gICAg ICAgICAgICAgICAgICBkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZW5hYmxlKGRldl9wcml2KTsK Pj4+IEBAIC03NzYsNyArMTA4OSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV93YWl0X3VubG9ja2Vk KHN0cnVjdAo+Pj4gaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+Pj4gICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTzsKPj4+Cj4+PiAgICAgICAgICByZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1 cHRpYmxlKGRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3EsCj4+PiAtCj4+PiBkZXZfcHJpdi0+cGVy Zi5vYS5vcHMub2FfYnVmZmVyX2NoZWNrKGRldl9wcml2KSk7Cj4+PiArCj4+PiBvYV9idWZmZXJf Y2hlY2tfdW5sb2NrZWQoZGV2X3ByaXYpKTsKPj4+ICAgfQo+Pj4KPj4+ICAgLyoqCj4+PiBAQCAt ODMzLDMzICsxMTQ2LDM3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtCj4+PiAqc3RyZWFtLAo+Pj4gICBzdGF0aWMgaW50IG9hX2dldF9yZW5kZXJfY3R4 X2lkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4+PiAgIHsKPj4+ICAgICAgICAg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4+ PiAtICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGRldl9wcml2LT5lbmdp bmVbUkNTXTsKPj4+IC0gICAgICAgaW50IHJldDsKPj4+Cj4+PiAtICAgICAgIHJldCA9IGk5MTVf bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtKTsKPj4+IC0gICAgICAgaWYg KHJldCkKPj4+IC0gICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgICBpZiAoaTkx NS5lbmFibGVfZXhlY2xpc3RzKQo+Pj4gKyAgICAgICAgICAgICAgIGRldl9wcml2LT5wZXJmLm9h LnNwZWNpZmljX2N0eF9pZCA9IHN0cmVhbS0+Y3R4LT5od19pZDsKPj4+ICsgICAgICAgZWxzZSB7 Cj4+PiArICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZGV2 X3ByaXYtPmVuZ2luZVtSQ1NdOwo+Pj4gKyAgICAgICAgICAgICAgIGludCByZXQ7Cj4+Pgo+Pj4g LSAgICAgICAvKiBBcyB0aGUgSUQgaXMgdGhlIGd0dCBvZmZzZXQgb2YgdGhlIGNvbnRleHQncyB2 bWEgd2UgcGluCj4+PiAtICAgICAgICAqIHRoZSB2bWEgdG8gZW5zdXJlIHRoZSBJRCByZW1haW5z IGZpeGVkLgo+Pj4gLSAgICAgICAgKgo+Pj4gLSAgICAgICAgKiBOQjogaW1wbGllZCBSQ1MgZW5n aW5lLi4uCj4+PiAtICAgICAgICAqLwo+Pj4gLSAgICAgICByZXQgPSBlbmdpbmUtPmNvbnRleHRf cGluKGVuZ2luZSwgc3RyZWFtLT5jdHgpOwo+Pj4gLSAgICAgICBpZiAocmV0KQo+Pj4gLSAgICAg ICAgICAgICAgIGdvdG8gdW5sb2NrOwo+Pj4gKyAgICAgICAgICAgICAgIHJldCA9IGk5MTVfbXV0 ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtKTsKPj4+ICsgICAgICAgICAgICAg ICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+Cj4+ PiAtICAgICAgIC8qIEV4cGxpY2l0bHkgdHJhY2sgdGhlIElEIChpbnN0ZWFkIG9mIGNhbGxpbmcg aTkxNV9nZ3R0X29mZnNldCgpCj4+PiAtICAgICAgICAqIG9uIHRoZSBmbHkpIGNvbnNpZGVyaW5n IHRoZSBkaWZmZXJlbmNlIHdpdGggZ2VuOCsgYW5kCj4+PiAtICAgICAgICAqIGV4ZWNsaXN0cwo+ Pj4gLSAgICAgICAgKi8KPj4+IC0gICAgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4 X2lkID0KPj4+IC0gICAgICAgICAgICAgICBpOTE1X2dndHRfb2Zmc2V0KHN0cmVhbS0+Y3R4LT5l bmdpbmVbZW5naW5lLT5pZF0uc3RhdGUpOwo+Pj4gKyAgICAgICAgICAgICAgIC8qIEFzIHRoZSBJ RCBpcyB0aGUgZ3R0IG9mZnNldCBvZiB0aGUgY29udGV4dCdzIHZtYSB3ZQo+Pj4gcGluCj4+PiAr ICAgICAgICAgICAgICAgICogdGhlIHZtYSB0byBlbnN1cmUgdGhlIElEIHJlbWFpbnMgZml4ZWQu Cj4+PiArICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgcmV0ID0gZW5naW5l LT5jb250ZXh0X3BpbihlbmdpbmUsIHN0cmVhbS0+Y3R4KTsKPj4+ICsgICAgICAgICAgICAgICBp ZiAocmV0KSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmRldl9w cml2LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4KPj4+IC11bmxvY2s6Cj4+PiAtICAgICAg IG11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKyAgICAgICAg ICAgICAgIC8qIEV4cGxpY2l0bHkgdHJhY2sgdGhlIElEIChpbnN0ZWFkIG9mIGNhbGxpbmcKPj4+ ICsgICAgICAgICAgICAgICAgKiBpOTE1X2dndHRfb2Zmc2V0KCkgb24gdGhlIGZseSkgY29uc2lk ZXJpbmcgdGhlCj4+PiBkaWZmZXJlbmNlCj4+PiArICAgICAgICAgICAgICAgICogd2l0aCBnZW44 KyBhbmQgZXhlY2xpc3RzCj4+PiArICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAg ICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0KPj4+ICsKPj4+IGk5MTVfZ2d0 dF9vZmZzZXQoc3RyZWFtLT5jdHgtPmVuZ2luZVtlbmdpbmUtPmlkXS5zdGF0ZSk7Cj4+Pgo+Pj4g LSAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZGV2 X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAg IHJldHVybiAwOwo+Pj4gICB9Cj4+Pgo+Pj4gICAvKioKPj4+IEBAIC04NzQsMTIgKzExOTEsMTYg QEAgc3RhdGljIHZvaWQgb2FfcHV0X3JlbmRlcl9jdHhfaWQoc3RydWN0Cj4+PiBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pCj4+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+Pj4gICAgICAgICAgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lID0gZGV2X3ByaXYtPmVuZ2luZVtSQ1NdOwo+Pj4KPj4+IC0gICAgICAgbXV0 ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKyAgICAgICBpZiAoaTkx NS5lbmFibGVfZXhlY2xpc3RzKSB7Cj4+PiArICAgICAgICAgICAgICAgZGV2X3ByaXYtPnBlcmYu b2Euc3BlY2lmaWNfY3R4X2lkID0gSU5WQUxJRF9DVFhfSUQ7Cj4+PiArICAgICAgIH0gZWxzZSB7 Cj4+PiArICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+Pj4KPj4+IC0gICAgICAgZGV2X3ByaXYtPnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0g SU5WQUxJRF9DVFhfSUQ7Cj4+PiAtICAgICAgIGVuZ2luZS0+Y29udGV4dF91bnBpbihlbmdpbmUs IHN0cmVhbS0+Y3R4KTsKPj4+ICsgICAgICAgICAgICAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVj aWZpY19jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKPj4+ICsgICAgICAgICAgICAgICBlbmdpbmUt PmNvbnRleHRfdW5waW4oZW5naW5lLCBzdHJlYW0tPmN0eCk7Cj4+Pgo+Pj4gLSAgICAgICBtdXRl eF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ICsgICAgICAgICAgICAg ICBtdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ICsgICAgICAg fQo+Pj4gICB9Cj4+Pgo+Pj4gICBzdGF0aWMgdm9pZAo+Pj4gQEAgLTk2OSw2ICsxMjkwLDYxIEBA IHN0YXRpYyB2b2lkIGdlbjdfaW5pdF9vYV9idWZmZXIoc3RydWN0Cj4+PiBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPj4+ICAgICAgICAgIGRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiA9IGZh bHNlOwo+Pj4gICB9Cj4+Pgo+Pj4gK3N0YXRpYyB2b2lkIGdlbjhfaW5pdF9vYV9idWZmZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3sKPj4+ICsgICAgICAgdTMyIGd0 dF9vZmZzZXQgPQo+Pj4gaTkxNV9nZ3R0X29mZnNldChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIudm1hKTsKPj4+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ICsKPj4+ICsgICAg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9j aywgZmxhZ3MpOwo+Pj4gKwo+Pj4gKyAgICAgICBJOTE1X1dSSVRFKEdFTjhfT0FTVEFUVVMsIDAp Owo+Pj4gKyAgICAgICBJOTE1X1dSSVRFKEdFTjhfT0FIRUFEUFRSLCBndHRfb2Zmc2V0KTsKPj4+ ICsgICAgICAgZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmhlYWQgPSBndHRfb2Zmc2V0Owo+ Pj4gKwo+Pj4gKyAgICAgICBJOTE1X1dSSVRFKEdFTjhfT0FCVUZGRVJfVURXLCAwKTsKPj4+ICsK Pj4+ICsgICAgICAgLyogUFJNIHNheXM6Cj4+PiArICAgICAgICAqCj4+PiArICAgICAgICAqICAi VGhpcyBNTUlPIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgT0FUQUlMUFRSCj4+PiArICAgICAgICAq ICByZWdpc3RlciBhbmQgYWZ0ZXIgdGhlIE9BSEVBRFBUUiByZWdpc3Rlci4gVGhpcyBpcwo+Pj4g KyAgICAgICAgKiAgdG8gZW5hYmxlIHByb3BlciBmdW5jdGlvbmFsaXR5IG9mIHRoZSBvdmVyZmxv dwo+Pj4gKyAgICAgICAgKiAgYml0LiIKPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIEk5MTVf V1JJVEUoR0VOOF9PQUJVRkZFUiwgZ3R0X29mZnNldCB8Cj4+PiArICAgICAgICAgICAgICAgICAg T0FCVUZGRVJfU0laRV8xNk0gfCBPQV9NRU1fU0VMRUNUX0dHVFQpOwo+Pj4gKyAgICAgICBJOTE1 X1dSSVRFKEdFTjhfT0FUQUlMUFRSLCBndHRfb2Zmc2V0ICYgR0VOOF9PQVRBSUxQVFJfTUFTSyk7 Cj4+PiArCj4+PiArICAgICAgIC8qIE1hcmsgdGhhdCB3ZSBuZWVkIHVwZGF0ZWQgdGFpbCBwb2lu dGVycyB0byByZWFkIGZyb20uLi4gKi8KPj4+ICsgICAgICAgZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLnRhaWxzWzBdLm9mZnNldCA9IElOVkFMSURfVEFJTF9QVFI7Cj4+PiArICAgICAgIGRl dl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci50YWlsc1sxXS5vZmZzZXQgPSBJTlZBTElEX1RBSUxf UFRSOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBSZXNldCBzdGF0ZSB1c2VkIHRvIHJlY29nbmlzZSBj b250ZXh0IHN3aXRjaGVzLCBhZmZlY3RpbmcKPj4+IHdoaWNoCj4+PiArICAgICAgICAqIHJlcG9y dHMgd2Ugd2lsbCBmb3J3YXJkIHRvIHVzZXJzcGFjZSB3aGlsZSBmaWx0ZXJpbmcgZm9yIGEKPj4+ IHNpbmdsZQo+Pj4gKyAgICAgICAgKiBjb250ZXh0Lgo+Pj4gKyAgICAgICAgKi8KPj4+ICsgICAg ICAgZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmxhc3RfY3R4X2lkID0gSU5WQUxJRF9DVFhf SUQ7Cj4+PiArCj4+PiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jaywKPj4+IGZsYWdzKTsKPj4+ICsKPj4+ICsgICAgICAg LyogTkI6IGFsdGhvdWdoIHRoZSBPQSBidWZmZXIgd2lsbCBpbml0aWFsbHkgYmUgYWxsb2NhdGVk Cj4+PiArICAgICAgICAqIHplcm9lZCB2aWEgc2htZnMgKGFuZCBzbyB0aGlzIG1lbXNldCBpcyBy ZWR1bmRhbnQgd2hlbgo+Pj4gKyAgICAgICAgKiBmaXJzdCBhbGxvY2F0aW5nKSwgd2UgbWF5IHJl LWluaXQgdGhlIE9BIGJ1ZmZlciwgZWl0aGVyCj4+PiArICAgICAgICAqIHdoZW4gcmUtZW5hYmxp bmcgYSBzdHJlYW0gb3IgaW4gZXJyb3IvcmVzZXQgcGF0aHMuCj4+PiArICAgICAgICAqCj4+PiAr ICAgICAgICAqIFRoZSByZWFzb24gd2UgY2xlYXIgdGhlIGJ1ZmZlciBmb3IgZWFjaCByZS1pbml0 IGlzIGZvciB0aGUKPj4+ICsgICAgICAgICogc2FuaXR5IGNoZWNrIGluIGdlbjhfYXBwZW5kX29h X3JlcG9ydHMoKSB0aGF0IGxvb2tzIGF0IHRoZQo+Pj4gKyAgICAgICAgKiByZWFzb24gZmllbGQg dG8gbWFrZSBzdXJlIGl0J3Mgbm9uLXplcm8gd2hpY2ggcmVsaWVzIG9uCj4+PiArICAgICAgICAq IHRoZSBhc3N1bXB0aW9uIHRoYXQgbmV3IHJlcG9ydHMgYXJlIGJlaW5nIHdyaXR0ZW4gdG8gemVy b2VkCj4+PiArICAgICAgICAqIG1lbW9yeS4uLgo+Pj4gKyAgICAgICAgKi8KPj4+ICsgICAgICAg bWVtc2V0KGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkciwgMCwgT0FfQlVGRkVSX1NJ WkUpOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBNYXliZSBtYWtlIC0+cG9sbGluIHBlci1zdHJlYW0g c3RhdGUgaWYgd2Ugc3VwcG9ydCBtdWx0aXBsZQo+Pj4gKyAgICAgICAgKiBjb25jdXJyZW50IHN0 cmVhbXMgaW4gdGhlIGZ1dHVyZS4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIGRldl9wcml2 LT5wZXJmLm9hLnBvbGxpbiA9IGZhbHNlOwo+Pj4gK30KPj4+ICsKPj4+ICAgc3RhdGljIGludCBh bGxvY19vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gICB7 Cj4+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYm87Cj4+PiBAQCAtMTEx Myw2ICsxNDg5LDI4MCBAQCBzdGF0aWMgdm9pZCBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0KHN0cnVj dAo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB+R1RfTk9BX0VOQUJMRSkpOwo+Pj4gICB9Cj4+Pgo+Pj4gKy8q Cj4+PiArICogRnJvbSBCcm9hZHdlbGwgUFJNLCAzRC1NZWRpYS1HUEdQVSAtPiBSZWdpc3RlciBT dGF0ZSBDb250ZXh0Cj4+PiArICoKPj4+ICsgKiBNTUlPIHJlYWRzIG9yIHdyaXRlcyB0byBhbnkg b2YgdGhlIHJlZ2lzdGVycyBsaXN0ZWQgaW4gdGhlCj4+PiArICog4oCcUmVnaXN0ZXIgU3RhdGUg Q29udGV4dCBpbWFnZeKAnSBzdWJzZWN0aW9ucyB0aHJvdWdoIEhPU1QvSUEKPj4+ICsgKiBNTUlP IGludGVyZmFjZSBmb3IgZGVidWcgcHVycG9zZXMgbXVzdCBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93 Ogo+Pj4gKyAqCj4+PiArICogLSBTVyBzaG91bGQgc2V0IHRoZSBGb3JjZSBXYWtldXAgYml0IHRv IHByZXZlbnQgR1QgZnJvbSBlbnRlcmluZyBDNi4KPj4+ICsgKiAtIFdyaXRlIDB4MjA1MFszMTow XSA9IDB4MDAwMTAwMDEgKGRpc2FibGUgc2VxdWVuY2UpLgo+Pj4gKyAqIC0gRGlzYWJsZSBJRExF IG1lc3NhZ2luZyBpbiBDUyAoV3JpdGUgMHgyMDUwWzMxOjBdID0gMHgwMDAxMDAwMSkuCj4+PiAr ICogLSBCRFc6ICBQb2xsL1dhaXQgZm9yIHJlZ2lzdGVyIGJpdHMgb2YgMHgyMkFDWzY6MF0gdHVy biB0byAweDMwCj4+PiB2YWx1ZS4KPj4+ICsgKiAtIFNLTCs6IFBvbGwvV2FpdCBmb3IgcmVnaXN0 ZXIgYml0cyBvZiAweDIyQTRbNjowXSB0dXJuIHRvIDB4MzAKPj4+IHZhbHVlLgo+Pj4gKyAqIC0g UmVhZC9Xcml0ZSB0byBkZXNpcmVkIE1NSU8gcmVnaXN0ZXJzLgo+Pj4gKyAqIC0gRW5hYmxlIElE TEUgbWVzc2FnaW5nIGluIENTIChXcml0ZSAweDIwNTBbMzE6MF0gPSAweDAwMDEwMDAwKS4KPj4+ ICsgKiAtIEZvcmNlIFdha2V1cCBiaXQgc2hvdWxkIGJlIHJlc2V0IHRvIGVuYWJsZSBDNiBlbnRy eS4KPj4+ICsgKgo+Pj4gKyAqIFhYWDogZG9uJ3QgbmVzdCBvciBvdmVybGFwIGNhbGxzIHRvIHRo aXMgQVBJLCBpdCBoYXMgbm8gcmVmCj4+PiArICogY291bnRpbmcgdG8gdHJhY2sgaG93IG1hbnkg ZW50aXRpZXMgcmVxdWlyZSB0aGUgUkNTIHRvIGJlCj4+PiArICogYmxvY2tlZCBmcm9tIGJlaW5n IGlkbGUuCj4+PiArICovCj4+PiArc3RhdGljIGludCBnZW44X2JlZ2luX2N0eF9tbWlvKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICt7Cj4+PiArICAgICAgIGk5MTVfcmVn X3QgZnNtX3JlZyA9IElOVEVMX0dFTihkZXZfcHJpdikgPiA4ID8KPj4+ICsgICAgICAgICAgICAg ICBHRU45X1JDU19GRV9GU00yIDogR0VONl9SQ1NfUFdSX0ZTTTsKPj4+ICsgICAgICAgaW50IHJl dCA9IDA7Cj4+PiArCj4+PiArICAgICAgIC8qIFRoZXJlJ3Mgb25seSBubyBhY3RpdmUgY29udGV4 dCB3aGlsZSBpZGxlIGluIGV4ZWNsaXN0IG1vZGUKPj4+ICsgICAgICAgICogKHRob3VnaCB3ZSBz aG91bGRuJ3QgYmUgdXNpbmcgdGhpcyBpbiBhbnkgb3RoZXIgY2FzZSkKPj4+ICsgICAgICAgICov Cj4+PiArICAgICAgIGlmIChXQVJOX09OKCFpOTE1LmVuYWJsZV9leGVjbGlzdHMpKQo+Pj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgICBpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7Cj4+PiArCj4+PiAr ICAgICAgIEk5MTVfV1JJVEUoR0VONl9SQ19TTEVFUF9QU01JX0NPTlRST0wsCj4+PiArICAgICAg ICAgICAgICAgICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjZfUFNNSV9TTEVFUF9NU0dfRElTQUJM RSkpOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBOb3RlOiB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBh IGdvb2QgaGFuZGxlIG9uIHRoZSBtYXhpbXVtCj4+PiArICAgICAgICAqIGxhdGVuY3kgZm9yIHRo aXMgd2FrZSB1cCBzbyB3aGlsZSB3ZSBvbmx5IG5lZWQgdG8gaG9sZCByY3MKPj4+ICsgICAgICAg ICogYnVzeSBmcm9tIHByb2Nlc3MgY29udGV4dCB3ZSBhdCBsZWFzdCBrZWVwIHRoZSB3YWl0aW5n Cj4+PiArICAgICAgICAqIGludGVycnVwdGlibGUuLi4KPj4+ICsgICAgICAgICovCj4+PiArICAg ICAgIHJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LCBmc21fcmVnLCAweDNm LCAweDMwLCA1MCk7Cj4+PiArICAgICAgIGlmIChyZXQgPT0gLUVUSU1FRE9VVCkKPj4+ICsgICAg ICAgICAgICAgICBEUk1fRVJST1IoIlRpbWVvdXQgd2FpdGluZyB0byBiZSBhYmxlIHRvIGJlZ2lu IHBlci1jdHgKPj4+IG1taW9cbiIpOwo+Pj4gKwo+Pj4gKyAgICAgICBpZiAocmV0KQo+Pj4gKyAg ICAgICAgICAgICAgIGludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdB S0VfUkVOREVSKTsKPj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIHZvaWQgZ2VuOF9lbmRfY3R4X21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+Pj4gK3sKPj4+ICsgICAgICAgaWYgKFdBUk5fT04oIWk5MTUuZW5hYmxlX2V4 ZWNsaXN0cykpCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+Pj4gKwo+Pj4gKyAgICAgICBJ OTE1X1dSSVRFKEdFTjZfUkNfU0xFRVBfUFNNSV9DT05UUk9MLAo+Pj4gKyAgICAgICAgICAgICAg ICAgIF9NQVNLRURfQklUX0RJU0FCTEUoR0VONl9QU01JX1NMRUVQX01TR19ESVNBQkxFKSk7Cj4+ PiArICAgICAgIGludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0Vf UkVOREVSKTsKPj4+ICt9Cj4+PiArCj4+PiArLyogTkI6IEl0IG11c3QgYWx3YXlzIHJlbWFpbiBw b2ludGVyIHNhZmUgdG8gcnVuIHRoaXMgZXZlbiBpZiB0aGUgT0EKPj4+IHVuaXQKPj4+ICsgKiBo YXMgYmVlbiBkaXNhYmxlZC4KPj4+ICsgKgo+Pj4gKyAqIEl0J3MgZmluZSB0byBwdXQgb3V0LW9m LWRhdGUgdmFsdWVzIGludG8gdGhlc2UgcGVyLWNvbnRleHQgcmVnaXN0ZXJzCj4+PiArICogaW4g dGhlIGNhc2UgdGhhdCB0aGUgT0EgdW5pdCBoYXMgYmVlbiBkaXNhYmxlZC4KPj4+ICsgKi8KPj4+ ICtzdGF0aWMgdm9pZCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1MzIgKnJlZ19zdGF0ZSkKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+aTkxNTsKPj4+ICsgICAgICAgY29uc3Qgc3RydWN0 IGk5MTVfb2FfcmVnICpmbGV4X3JlZ3MgPQo+Pj4gZGV2X3ByaXYtPnBlcmYub2EuZmxleF9yZWdz Owo+Pj4gKyAgICAgICBpbnQgbl9mbGV4X3JlZ3MgPSBkZXZfcHJpdi0+cGVyZi5vYS5mbGV4X3Jl Z3NfbGVuOwo+Pj4gKyAgICAgICB1MzIgY3R4X29hY3R4Y3RybCA9IGRldl9wcml2LT5wZXJmLm9h LmN0eF9vYWN0eGN0cmxfb2Zmc2V0Owo+Pj4gKyAgICAgICB1MzIgY3R4X2ZsZXhldTAgPSBkZXZf cHJpdi0+cGVyZi5vYS5jdHhfZmxleGV1MF9vZmZzZXQ7Cj4+PiArICAgICAgIC8qIFRoZSBNTUlP IG9mZnNldHMgZm9yIEZsZXggRVUgcmVnaXN0ZXJzIGFyZW4ndCBjb250aWd1b3VzICovCj4+PiAr ICAgICAgIHUzMiBmbGV4X21taW9bXSA9IHsKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEwwKSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEwxKSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEwyKSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEwzKSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEw0KSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEw1KSwKPj4+ICsgICAgICAgICAgICAgICBpOTE1X21taW9f cmVnX29mZnNldChFVV9QRVJGX0NOVEw2KSwKPj4+ICsgICAgICAgfTsKPj4+ICsgICAgICAgaW50 IGk7Cj4+PiArCj4+PiArICAgICAgIHJlZ19zdGF0ZVtjdHhfb2FjdHhjdHJsXSA9Cj4+PiBpOTE1 X21taW9fcmVnX29mZnNldChHRU44X09BQ1RYQ09OVFJPTCk7Cj4+PiArICAgICAgIHJlZ19zdGF0 ZVtjdHhfb2FjdHhjdHJsKzFdID0gKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZF9leHBvbmVudAo+ Pj4gPDwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VOOF9PQV9U SU1FUl9QRVJJT0RfU0hJRlQpIHwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kaWMgPwo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHRU44X09BX1RJTUVSX0VOQUJMRSA6IDApIHwKPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU44X09BX0NPVU5URVJfUkVTVU1FOwo+ Pj4gKwo+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGV4X21taW8pOyBp KyspIHsKPj4+ICsgICAgICAgICAgICAgICB1MzIgc3RhdGVfb2Zmc2V0ID0gY3R4X2ZsZXhldTAg KyBpICogMjsKPj4+ICsgICAgICAgICAgICAgICB1MzIgbW1pbyA9IGZsZXhfbW1pb1tpXTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgICAvKiBUaGlzIGFyYml0cmFyeSBkZWZhdWx0IHdpbGwgc2Vs ZWN0IHRoZSAnRVUgRlBVMAo+Pj4gUGlwZWxpbmUKPj4+ICsgICAgICAgICAgICAgICAgKiBBY3Rp dmUnIGV2ZW50LiBJbiB0aGUgZnV0dXJlIGl0J3MgYW50aWNpcGF0ZWQgdGhhdAo+Pj4gdGhlcmUK Pj4+ICsgICAgICAgICAgICAgICAgKiB3aWxsIGJlIGFuIGV4cGxpY2l0ICdObyBFdmVudCcgd2Ug Y2FuIHNlbGVjdCwgYnV0IG5vdAo+Pj4geWV0Li4uCj4+PiArICAgICAgICAgICAgICAgICovCj4+ PiArICAgICAgICAgICAgICAgdTMyIHZhbHVlID0gMDsKPj4+ICsgICAgICAgICAgICAgICBpbnQg ajsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbl9mbGV4X3JlZ3M7 IGorKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGk5MTVfbW1pb19yZWdfb2Zm c2V0KGZsZXhfcmVnc1tqXS5hZGRyKSA9PQo+Pj4gbW1pbykgewo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZsZXhfcmVnc1tqXS52YWx1ZTsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg ICB9Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIHJlZ19z dGF0ZVtzdGF0ZV9vZmZzZXRdID0gbW1pbzsKPj4+ICsgICAgICAgICAgICAgICByZWdfc3RhdGVb c3RhdGVfb2Zmc2V0KzFdID0gdmFsdWU7Cj4+PiArICAgICAgIH0KPj4+ICt9Cj4+PiArCj4+PiAr LyogTWFuYWdlcyB1cGRhdGluZyB0aGUgcGVyLWNvbnRleHQgYXNwZWN0cyBvZiB0aGUgT0Egc3Ry ZWFtCj4+PiArICogY29uZmlndXJhdGlvbiBhY3Jvc3MgYWxsIGNvbnRleHRzLgo+Pj4gKyAqCj4+ PiArICogVGhlIGF3a3dhcmQgY29uc2lkZXJhdGlvbiBoZXJlIGlzIHRoYXQgT0FDVFhDT05UUk9M IGNvbnRyb2xzIHRoZQo+Pj4gKyAqIGV4cG9uZW50IGZvciBwZXJpb2RpYyBzYW1wbGluZyB3aGlj aCBpcyBwcmltYXJpbHkgdXNlZCBmb3Igc3lzdGVtCj4+PiArICogd2lkZSBwcm9maWxpbmcgd2hl cmUgd2UnZCBsaWtlIGEgY29uc2lzdGVudCBzYW1wbGluZyBwZXJpb2QgZXZlbiBpbgo+Pj4gKyAq IHRoZSBmYWNlIG9mIGNvbnRleHQgc3dpdGNoZXMuCj4+PiArICoKPj4+ICsgKiBPdXIgYXBwcm9h Y2ggb2YgdXBkYXRpbmcgdGhlIHJlZ2lzdGVyIHN0YXRlIGNvbnRleHQgKGFzIG9wcG9zZWQgdG8K Pj4+ICsgKiBzYXkgdXNpbmcgYSB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlcikgZW5zdXJlcyB0aGF0 IHRoZSBoYXJkd2FyZQo+Pj4gKyAqIHdvbid0IGF1dG9tYXRpY2FsbHkgcmVsb2FkIGFuIG91dC1v Zi1kYXRlIHRpbWVyIGV4cG9uZW50IGV2ZW4KPj4+ICsgKiB0cmFuc2llbnRseSBiZWZvcmUgYSBX QSBCQiBjb3VsZCBiZSBwYXJzZWQuCj4+PiArICoKPj4+ICsgKiBUaGlzIGZ1bmN0aW9uIG5lZWRz IHRvOgo+Pj4gKyAqIC0gRW5zdXJlIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0J3MgcGVy LWNvbnRleHQgT0Egc3RhdGUgaXMKPj4+ICsgKiAgIHVwZGF0ZWQKPj4+ICsgKiAtIEVuc3VyZSB0 aGF0IGFsbCBleGlzdGluZyBjb250ZXh0cyB3aWxsIGhhdmUgdGhlIGNvcnJlY3QgcGVyLWNvbnRl eHQKPj4+ICsgKiAgIE9BIHN0YXRlIGlmIHRoZXkgYXJlIHNjaGVkdWxlZCBmb3IgdXNlLgo+Pj4g KyAqIC0gRW5zdXJlIGFueSBuZXcgY29udGV4dHMgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIHRo ZSBjb3JyZWN0Cj4+PiArICogICBwZXItY29udGV4dCBPQSBzdGF0ZS4KPj4+ICsgKgo+Pj4gKyAq IE5vdGU6IGl0J3Mgb25seSB0aGUgUkNTL1JlbmRlciBjb250ZXh0IHRoYXQgaGFzIGFueSBPQSBz dGF0ZS4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW50IGdlbjhfY29uZmlndXJlX2FsbF9jb250ZXh0 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+Pj4gKmRldl9wcml2KQo+Pj4gK3sKPj4+ICsgICAg ICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPj4+ICsgICAgICAgaW50IHJldDsKPj4+ ICsKPj4+ICsgICAgICAgcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9w cml2LT5kcm0pOwo+Pj4gKyAgICAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4+PiArCj4+PiArICAgICAgIC8qIFN3aXRjaCBhd2F5IGZyb20gYW55IHVzZXIgY29u dGV4dC4gICovCj4+PiArICAgICAgIHJldCA9IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxfY29u dGV4dChkZXZfcHJpdik7Cj4+PiArICAgICAgIGlmIChyZXQpCj4+Cj4+ICAgbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4KPgo+IER1aCEgVGhhbmtzIQo+Cj4+Cj4+ PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICsgICAgICAgLyogVGhlIE9B IHJlZ2lzdGVyIGNvbmZpZyBpcyBzZXR1cCB0aHJvdWdoIHRoZSBjb250ZXh0IGltYWdlLgo+Pj4g VGhpcyBpbWFnZQo+Pj4gKyAgICAgICAgKiBtaWdodCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBHUFUg b24gY29udGV4dCBzd2l0Y2ggKGluCj4+PiBwYXJ0aWN1bGFyIG9uCj4+PiArICAgICAgICAqIGxp dGUtcmVzdG9yZSkuIFRoaXMgbWVhbnMgd2UgY2FuJ3Qgc2FmZWx5IHVwZGF0ZSBhIGNvbnRleHQn cwo+Pj4gaW1hZ2UsCj4+PiArICAgICAgICAqIGlmIHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQv c3VibWl0dGVkIHRvIHJ1biBvbiB0aGUgR1BVLgo+Pj4gKyAgICAgICAgKgo+Pj4gKyAgICAgICAg KiBXZSBjb3VsZCBlbWl0IHRoZSBPQSByZWdpc3RlciBjb25maWcgdGhyb3VnaCB0aGUgYmF0Y2gg YnVmZmVyCj4+PiBidXQKPj4+ICsgICAgICAgICogdGhpcyBtaWdodCBsZWF2ZSBzbWFsbCBpbnRl cnZhbCBvZiB0aW1lIHdoZXJlIHRoZSBPQSB1bml0IGlzCj4+PiArICAgICAgICAqIGNvbmZpZ3Vy ZWQgYXQgYW4gaW52YWxpZCBzYW1wbGluZyBwZXJpb2QuCj4+PiArICAgICAgICAqCj4+PiArICAg ICAgICAqIFNvIGZhciB0aGUgYmVzdCB3YXkgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSBzZWVt cyB0byBiZQo+Pj4gZHJhaW5pbmcKPj4+ICsgICAgICAgICogdGhlIEdQVSBmcm9tIGFueSBzdWJt aXR0ZWQgd29yay4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIHJldCA9IGk5MTVfZ2VtX3dh aXRfZm9yX2lkbGUoZGV2X3ByaXYsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEk5MTVfV0FJVF9MT0NLRUQpOwo+Pj4gKyAgICAgICBpZiAocmV0KSB7 Cj4+PiArICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+ICsgICAgICAgfQo+Pj4g Kwo+Pj4gKyAgICAgICAvKiBVcGRhdGUgYWxsIGNvbnRleHRzIG5vdyB0aGF0IHdlJ3ZlIHN0YWxs ZWQgdGhlIHN1Ym1pc3Npb24uICovCj4+PiArICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoY3R4 LCAmZGV2X3ByaXYtPmNvbnRleHRfbGlzdCwgbGluaykgewo+Pj4gKyAgICAgICAgICAgICAgIGlm ICghY3R4LT5lbmdpbmVbUkNTXS5pbml0aWFsaXNlZCkKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIGdlbjhfdXBkYXRlX3JlZ19z dGF0ZV91bmxvY2tlZChjdHgsCj4+PiArCj4+PiBjdHgtPmVuZ2luZVtSQ1NdLmxyY19yZWdfc3Rh dGUpOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIG11dGV4X3VubG9jaygmZGV2X3By aXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKwo+Pj4gKyAgICAgICAvKiBOb3cgdXBkYXRlIHRo ZSBjdXJyZW50IGNvbnRleHQuCj4+PiArICAgICAgICAqCj4+PiArICAgICAgICAqIE5vdGU6IFVz aW5nIE1NSU8gdG8gdXBkYXRlIHBlci1jb250ZXh0IHJlZ2lzdGVycyByZXF1aXJlcwo+Pj4gKyAg ICAgICAgKiBzb21lIGV4dHJhIGNhcmUuLi4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIHJl dCA9IGdlbjhfYmVnaW5fY3R4X21taW8oZGV2X3ByaXYpOwo+Pj4gKyAgICAgICBpZiAocmV0KSB7 Cj4+PiArICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gYnJpbmcgUkNTIG91dCBv ZiBpZGxlIHRvIHVwZGF0ZQo+Pj4gY3VycmVudCBjdHggT0Egc3RhdGVcbiIpOwo+Pj4gKyAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiArICAgICAgIH0KPj4KPj4gU28gZG8gd2Ugc3RpbGwg bmVlZCB0aGUgbW1pbyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dCwgZ2l2ZW4gdGhhdCB3ZQo+PiBu b3cgaWRsZSBldmVyeXRoaW5nIGFuZCB0aGVuIHVwZGF0ZSB0aGUgcmVnIHN0YXRlPwo+Cj4KPiBJ IHdvdWxkIHNheSB5ZXMsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZ3VhcmFudGVlIHRoYXQg YW5vdGhlciBjb250ZXh0IGlzCj4gZ29pbmcgdG8gYmUgc2NoZWR1bGVkIGFmdGVyIHRoYXQuCj4g WWV0IHdlIHdhbnQgdGhlIGNvbmZpZyB0byBiZSBhcHBsaWVkIGJlZm9yZSB3ZSByZXR1cm4uCgpP a2F5LCBmZWVsIGZyZWUgdG8ga2VlcCBteSByLWIgdGhlbi4KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==