From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v3 2/5] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 07 Nov 2018 17:41:52 -0500 Message-ID: References: <20181107012116.17332-1-lyude@redhat.com> <20181107012116.17332-3-lyude@redhat.com> <20181107205930.GY21967@phenom.ffwll.local> <9c305aef6e30926b45e41ebdc5ae1c40b6089bd7.camel@redhat.com> <20181107215939.GA21967@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181107215939.GA21967-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Daniel Vetter Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE4LTExLTA3IGF0IDIyOjU5ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFdlZCwgTm92IDA3LCAyMDE4IGF0IDA0OjM5OjU3UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBPbiBXZWQsIDIwMTgtMTEtMDcgYXQgMTY6MjMgLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiA+IE9uIFdlZCwgMjAxOC0xMS0wNyBhdCAyMTo1OSArMDEwMCwgRGFuaWVsIFZldHRl ciB3cm90ZToKPiA+ID4gPiBPbiBUdWUsIE5vdiAwNiwgMjAxOCBhdCAwODoyMToxNFBNIC0wNTAw LCBMeXVkZSBQYXVsIHdyb3RlOgo+ID4gPiA+ID4gVGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRp bmcgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIGluCj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 LmM6Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IAkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3Bp Lm51bV9zbG90cyB0byB1cGRhdGUKPiA+ID4gPiA+IAkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZgo+ID4gPiA+ID4gdGhlIHBhcmVudAo+ ID4gPiA+ID4gCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUg Zml4ZWQgYnkKPiA+ID4gPiA+IHRyYWNraW5nCj4gPiA+ID4gPiAJICogcGVyLXBvcnQgc2xvdCBh bGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gPiA+IGluc3RlYWQg b2YKPiA+ID4gPiA+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBt YW55IHNsb3RzIHRvCj4gPiA+ID4gPiByZWxlYXNlLgo+ID4gPiA+ID4gCSAqLwo+ID4gPiA+ID4g Cj4gPiA+ID4gPiBUaGF0J3Mgbm90IHRoZSBvbmx5IHJlYXNvbiB3ZSBzaG91bGQgZml4IHRoaXM6 IGZvcmNpbmcgdGhlIGRyaXZlciB0bwo+ID4gPiA+ID4gdHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlv bnMgdGhyb3VnaG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlzCj4gPiA+ID4gPiBlcnJvciBw cm9uZSwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IGV4dHJhIGNhcmUgaGFzIHRvIGJlIHRha2VuIHdp dGgKPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gb3JkZXIgdGhhdCBkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cygpIGFuZAo+ID4gPiA+ID4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSBhcmUgY2FsbGVkIGluIGluIG9yZGVyIHRvIGVuc3VyZQo+ID4gPiA+ID4gaWRlbXBvdGVu Y3kuIEN1cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVy cywKPiA+ID4gPiA+IGk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVsdGlw bGUgLT5iZXN0X2VuY29kZXIoKQo+ID4gPiA+ID4gY2hlY2tzCj4gPiA+ID4gPiB3aXRoIGk5MTUn cyBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIG5vdCBiZSBpZGVtcG90ZW50IGFuZCB3b3Vs ZAo+ID4gPiA+ID4gb3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21ldGhpbmcgSSBsZWFybmVk IHRyeWluZyB0byBpbXBsZW1lbnQKPiA+ID4gPiA+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNU Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBTbzogc2ltcGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBhbmQg dGVhY2gKPiA+ID4gPiA+IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ IGFuZCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIHRvIHRyYWNrIHRoZSBWQ1BJ IGFsbG9jYXRpb25zCj4gPiA+ID4gPiBmb3IKPiA+ID4gPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxv d3MgdXMgdG8gZW5zdXJlIGlkZW1wb3RlbmN5IHdpdGhvdXQgaGF2aW5nIHRvCj4gPiA+ID4gPiBy ZWx5Cj4gPiA+ID4gPiBvbiB0aGUgZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRy aXZlciBkb2Vzbid0IG5lZWQgdG8gZG8KPiA+ID4gPiA+IGFueQo+ID4gPiA+ID4ga2luZCBvZiBW Q1BJIHNsb3QgdHJhY2tpbmcgYW55bW9yZSBpZiBpdCBkb2Vzbid0IG5lZWQgaXQgZm9yIGl0J3MK PiA+ID4gPiA+IG93bgo+ID4gPiA+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiA+ID4gPiAKPiA+ID4g PiA+IEFkZGl0aW9uYWxseTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNr KCkgaGVscGVyIHdoaWNoCj4gPiA+ID4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRyaXZlcnMg dG8gcGVyZm9ybSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZQo+ID4gPiA+ID4gbmV3Cj4gPiA+ID4g PiBWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCj4gPiA+ID4gPiAKPiA+ID4g PiA+IEFsc286IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgbWFrZSBpdCBtb3JlIG9idmlv dXMgdGhhdCB0aGVzZQo+ID4gPiA+ID4gL211c3QvIGJlIGNhbGxlZCBieSAvYWxsLyBhdG9taWMg ZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gQ2hhbmdlcyBzaW5j ZSB2MjoKPiA+ID4gPiA+ICAtIFVzZSBrbWVtZHVwKCkgZm9yIGR1cGxpY2F0aW5nIE1TVCBzdGF0 ZSAtIGRhbnZldAo+ID4gPiA+ID4gIC0gTW92ZSBwb3J0IHZhbGlkYXRpb24gb3V0IG9mIGR1cGxp Y2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAo+ID4gPiA+ID4gIC0gSGFuZGxlIGxvb3Bpbmcg dGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3RhdGVzIGluCj4gPiA+ID4gPiAgICBkcm1fZHBfbXN0X2F0 b21pY19jaGVjaygpIHNvIHRoZSBkcml2ZXIgZG9lc24ndCBoYXZlIHRvIGRvIGl0Cj4gPiA+ID4g PiAgLSBGaXggZG9jdW1lbnRhdGlvbiBpbiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygp Cj4gPiA+ID4gPiAgLSBNb3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5kaXZpZHVhbCB0 b3BvbG9neSBzdGF0ZSBpbnRvCj4gPiA+ID4gPiBpdCdzCj4gPiA+ID4gPiAgICBvd24gZnVuY3Rp b24sIHJlZHVjZXMgaW5kZW50aW5nCj4gPiA+ID4gPiAgLSBEb24ndCBjb25zaWRlciAic3RhbGUi IE1TVCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiA+ID4gPiA+ICAgIHJl cXVpcmVtZW50cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvcmlnaW5hbGx5IHdlIHJlbGllZCBv biB0aGUKPiA+ID4gPiA+ICAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBh bnkgc3RhbGUgcG9ydHMgZnJvbSB0aGUgbmV3Cj4gPiA+ID4gPiAgICBzdGF0ZSwgd2hpY2ggd291 bGQgcHJldmVudCB1cyBmcm9tIGluY29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gPiA+ID4g PiAgICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGFsb25nc2lkZSBsZWdpdGltYXRlIG5ldyBwYXls b2Fkcy4KPiA+ID4gPiA+ICAtIEFkZCBmdW5jdGlvbiByZWZlcmVuY2VzIGluIGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLQo+ID4gPiA+ID4gZGFudmV0Cj4gPiA+ID4gPiAgLSBB bm5vdGF0ZSBhdG9taWMgVkNQSSBhbmQgYXRvbWljIGNoZWNrIGZ1bmN0aW9ucyB3aXRoIF9fbXVz dF9jaGVjawo+ID4gPiA+ID4gICAgLSBkYW52ZXQKPiA+ID4gPiA+IAo+ID4gPiA+ID4gQ2hhbmdl cyBzaW5jZSB2MToKPiA+ID4gPiA+ICAtIERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9t aWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBvYmplY3RzCj4gPiA+ID4gPiBob29rLAo+ID4gPiA+ID4g ICAganVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxsIHRoZW1zZWx2ZXMKPiA+ID4g PiA+IAo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNv bT4KPiA+ID4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+ ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xv Z3kuYyB8IDIyMiArKysrKysrKysrKysrKysrKysrKysrLQo+ID4gPiA+ID4gLS0tCj4gPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICB8ICAgNCArCj4gPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgICB8ICAzMSArKy0tCj4gPiA+ ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICB8ICAyMyArKy0KPiA+ ID4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDIyNSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMo LSkKPiA+ID4gPiA+IAo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3Rf dG9wb2xvZ3kuYwo+ID4gPiA+ID4gaW5kZXggOGMzY2ZhYzQzN2Y0Li43NDgyM2FmYjI2MmUgMTAw NjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5j Cj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4g PiA+ID4gPiBAQCAtMjYxNCwyMSArMjYxNCwzNCBAQCBzdGF0aWMgaW50IGRybV9kcF9pbml0X3Zj cGkoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAvKioKPiA+ID4gPiA+IC0gKiBkcm1fZHBfYXRv bWljX2ZpbmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlCj4g PiA+ID4gPiBzdGF0ZQo+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3Rz KCkgLSBGaW5kIGFuZCBhZGQgVkNQSSBzbG90cyB0byB0aGUKPiA+ID4gPiA+IHN0YXRlCj4gPiA+ ID4gPiAgICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlCj4gPiA+ID4gPiAgICogQG1ncjog TVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gPiA+ID4gPiAgICogQHBvcnQ6IHBv cnQgdG8gZmluZCB2Y3BpIHNsb3RzIGZvcgo+ID4gPiA+ID4gICAqIEBwYm46IGJhbmR3aWR0aCBy ZXF1aXJlZCBmb3IgdGhlIG1vZGUgaW4gUEJOCj4gPiA+ID4gPiAgICoKPiA+ID4gPiA+IC0gKiBS RVRVUk5TOgo+ID4gPiA+ID4gLSAqIFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNz aWduZWQgZm9yIHRoaXMgcG9ydCBvciBlcnJvcgo+ID4gPiA+ID4gKyAqIEFsbG9jYXRlcyBWQ1BJ IHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcgYW55IHByZXZpb3VzIFZDUEkKPiA+ID4gPiA+IGFs bG9jYXRpb25zCj4gPiA+ID4gPiBpdAo+ID4gPiA+ID4gKyAqIG1heSBoYXZlIGhhZC4gQW55IGF0 b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbAo+ID4gPiA+ID4gdGhpcwo+ ID4gPiA+ID4gZnVuY3Rpb24KPiA+ID4gPiA+ICsgKiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVs cGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrIHRvCj4gPiA+ID4gPiBjaGFuZ2UKPiA+ ID4gPiA+IHRoZQo+ID4gPiA+ID4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZvciB0aGUg bmV3IHN0YXRlLiBUaGUgYWxsb2NhdGlvbnMgYXJlCj4gPiA+ID4gPiBub3QKPiA+ID4gPiA+IGNo ZWNrZWQKPiA+ID4gPiA+ICsgKiBhZ2FpbnN0IHRoZSBiYW5kd2lkdGggcmVzdHJhaW50cyBvZiBA bWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMKPiA+ID4gPiA+ICsgKiBkcm1fZHBfbXN0X2F0b21p Y19jaGVjaygpLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogU2VlIGFsc286Cj4gPiA+ID4g PiArICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ID4gKyAqIGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFJldHVy bnM6Cj4gPiA+ID4gPiArICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25l ZCBmb3IgdGhpcyBwb3J0LCBvciBhCj4gPiA+ID4gPiBuZWdhdGl2ZQo+ID4gPiA+ID4gZXJyb3IK PiA+ID4gPiA+ICsgKiBjb2RlIGlmIHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ID4gPiA+ ICAgKi8KPiA+ID4gPiA+ICBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0 X3BvcnQgKnBvcnQsIGludAo+ID4gPiA+ID4gcGJuKQo+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ICAJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gPiA+ ID4gLQlpbnQgcmVxX3Nsb3RzOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2Nh dGlvbiAqcG9zLCAqdmNwaSA9IE5VTEw7Cj4gPiA+ID4gPiArCWludCBwcmV2X3Nsb3RzLCByZXFf c2xvdHMsIHJldDsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsCj4gPiA+ID4gPiBtZ3IpOwo+ID4g PiA+ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gPiA+IEBAIC0yNjM3LDIw ICsyNjUwLDQxIEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QKPiA+ ID4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gIAlwb3J0ID0gZHJtX2Rw X2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gPiA+ICAJaWYgKHBvcnQg PT0gTlVMTCkKPiA+ID4gPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gLQlyZXFfc2xv dHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4gPiA+ID4gLQlEUk1fREVC VUdfS01TKCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gPiA+ID4gPiAtCQkJcmVx X3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ ID4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiA+ ID4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiAtCQlyZXR1cm4gLUVOT1NQ QzsKPiA+ID4gPiA+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBv cnQsIGlmIGFueSAqLwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9s b2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4gKwkJaWYgKHBvcy0+cG9ydCA9PSBw b3J0KSB7Cj4gPiA+ID4gPiArCQkJdmNwaSA9IHBvczsKPiA+ID4gPiA+ICsJCQlwcmV2X3Nsb3Rz ID0gdmNwaS0+dmNwaTsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCX0KPiA+ID4g PiA+ICAJfQo+ID4gPiA+ID4gKwlpZiAoIXZjcGkpCj4gPiA+ID4gPiArCQlwcmV2X3Nsb3RzID0g MDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwg bWdyLT5wYm5fZGl2KTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2 YWlsX3Nsb3RzIC09IHJlcV9zbG90czsKPiA+ID4gPiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBz bG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLQo+ID4gPiA+ID4gPmF2YWlsX3Nsb3RzKTsK PiA+ID4gPiA+ICsJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc10gW01TVCBQT1JUOiVw XSB2Y3BpICVkIC0+Cj4gPiA+ID4gPiAlZFxuIiwKPiA+ID4gPiA+ICsJCSAgICAgIHBvcnQtPmNv bm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLQo+bmFtZSwgCj4gPiA+ID4gPiBwb3J0 LAo+ID4gPiA+ID4gKwkJICAgICAgcHJldl9zbG90cywgcmVxX3Nsb3RzKTsKPiA+ID4gPiA+ICAK PiA+ID4gPiA+ICsJLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3RhdGUgKi8KPiA+ ID4gPiA+ICsJaWYgKCF2Y3BpKSB7Cj4gPiA+ID4gPiArCQl2Y3BpID0ga3phbGxvYyhzaXplb2Yo KnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJCWlmICghdmNwaSkgewo+ID4gPiA+ID4g KwkJCXJldCA9IC1FTk9NRU07Cj4gPiA+ID4gPiArCQkJZ290byBvdXQ7Cj4gPiA+ID4gPiArCQl9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQl2Y3BpLT5wb3J0ID0gcG9ydDsKPiA+ID4gPiA+ICsJ CWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiA+ ICsJfQo+ID4gPiA+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwlyZXQgPSByZXFfc2xvdHM7Cj4gPiA+ID4gPiArb3V0Ogo+ID4gPiA+ID4gIAlkcm1f ZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiAtCXJldHVybiByZXFfc2xvdHM7Cj4gPiA+ID4g PiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJt X2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gQEAgLTI2 NTgsMzIgKzI2OTIsNTAgQEAKPiA+ID4gPiA+IEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMpOwo+ID4gPiA+ID4gICAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpCj4gPiA+ID4gPiBzbG90cwo+ID4gPiA+ ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ID4gICAqIEBtZ3I6IE1T VCB0b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gPiA+ID4gLSAqIEBzbG90czogbnVt YmVyIG9mIHZjcGkgc2xvdHMgdG8gcmVsZWFzZQo+ID4gPiA+ID4gKyAqIEBwb3J0OiBUaGUgcG9y dCB0byByZWxlYXNlIHRoZSBWQ1BJIHNsb3RzIGZyb20KPiA+ID4gPiA+ICAgKgo+ID4gPiA+ID4g LSAqIFJFVFVSTlM6Cj4gPiA+ID4gPiAtICogMCBpZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRv ICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLQo+ID4gPiA+IGF2YWlsX3Nsb3RzIAo+ID4gPiA+ ID4gb3IKPiA+ID4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCj4gPiA+ID4gPiArICogUmVs ZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHRvIGEgcG9ydCBp bgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBhdG9taWMKPiA+ID4gPiA+ICsgKiBzdGF0ZS4gQW55 IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzCj4gPiA+ID4g PiBmdW5jdGlvbgo+ID4gPiA+ID4gaW4KPiA+ID4gPiA+ICsgKiB0aGVpciAmZHJtX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgd2hlbgo+ID4gPiA+ID4gdGhl Cj4gPiA+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUgVkNQSSBhbGxvY2F0 ZWQgKGUuZy4gYmVjYXVzZSBpdCdzCj4gPiA+ID4gPiBDUlRDCj4gPiA+ID4gPiB3YXMKPiA+ID4g PiA+ICsgKiByZW1vdmVkKS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIEl0IGlzIE9LIHRv IGNhbGwgdGhpcyBldmVuIGlmIEBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKPiA+ID4g PiA+IHN5c3RlbSwKPiA+ID4gPiA+IGluCj4gPiA+ID4gPiArICogd2hpY2ggY2FzZSBpdCB3aWxs IGp1c3QgYW1vdW50IHRvIGEgbm8tb3AuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBTZWUg YWxzbzoKPiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ ID4gPiArICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKQo+ID4gPiA+ID4gKyAqCj4gPiA+ID4g PiArICogUmV0dXJuczoKPiA+ID4gPiA+ICsgKiAwIGlmIGFsbCBzbG90cyBmb3IgdGhpcyBwb3J0 IHdlcmUgYWRkZWQgYmFjayB0bwo+ID4gPiA+ID4gKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiA+ID4gPiA+ICAgKi8KPiA+ ID4gPiA+ICBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUKPiA+ID4gPiA+ICpzdGF0ZSwKPiA+ID4gPiA+ICAJCQkJICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiAtCQkJCSAg ICAgaW50IHNsb3RzKQo+ID4gPiA+ID4gKwkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQpCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9h bGxvY2F0aW9uICp0bXAsICpwb3M7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCXRvcG9sb2d5X3N0 YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4g bWdyKTsKPiA+ID4gPiA+ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gPiA+ID4gPiAg CQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAt CS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4g PiA+ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5v dCBleGlzdCBpZgo+ID4gPiA+ID4gdGhlIHBhcmVudAo+ID4gPiA+ID4gLQkgKiBicmFuY2ggZGV2 aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5Cj4gPiA+ID4gPiB0cmFj a2luZwo+ID4gPiA+ID4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gaW5zdGVhZCBvZgo+ID4gPiA+ID4gLQkgKiBkZXBl bmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvCj4gPiA+ID4g PiByZWxlYXNlLgo+ID4gPiA+ID4gLQkgKi8KPiA+ID4gPiA+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2 YWlsX3Nsb3RzICs9IHNsb3RzOwo+ID4gPiA+ID4gLQlEUk1fREVCVUdfS01TKCJ2Y3BpIHNsb3Rz IHJlbGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gPiA+IC0JCQlzbG90cywgdG9wb2xvZ3lf c3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHBvcywgdG1wLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzLAo+ID4gPiA+ID4gbmV4dCkgewo+ID4g PiA+ID4gKwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7Cj4gPiA+ID4gPiArCQkJbGlzdF9kZWwo JnBvcy0+bmV4dCk7Cj4gPiA+ID4gPiArCQkJRFJNX0RFQlVHX0tNUygiW01TVCBQT1JUOiVwXSB2 Y3BpICVkIC0+IDBcbiIsCj4gPiA+ID4gPiArCQkJCSAgICAgIHBvcnQsIHBvcy0+dmNwaSk7Cj4g PiA+ID4gPiAgCj4gPiA+ID4gPiArCQkJa2ZyZWUocG9zKTsKPiA+ID4gPiA+ICsJCQlyZXR1cm4g MDsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkv KiBJZiBubyBhbGxvY2F0aW9uIHdhcyBmb3VuZCwgYWxsIHRoYXQgbWVhbnMgaXMgdGhhdCB0aGUg cG9ydAo+ID4gPiA+ID4gd2FzCj4gPiA+ID4gPiArCSAqIGRlc3Ryb3llZCBzaW5jZSB0aGUgbGFz dCBhdG9taWMgY29tbWl0LiBUaGF0J3MgT0shCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+IAo+ID4g PiA+IFRoaXMgY2FzZSBoZXJlIGhhcyBtZSBhIGJpdCB3b3JyaWVkLiBJIHRob3VnaHQgd2l0aCB5 b3VyIGNoYW5nZXMgd2UnbGwKPiA+ID4gPiBhbHdheXMgaGF2ZSB0aGUgcG9ydCBwb2ludGVyIHN0 aWxsIGFyb3VuZCwgdG8gYmUgYWJsZSB0byBjbGVhbiB0aGluZ3MKPiA+ID4gPiB1cAo+ID4gPiA+ IHByb3Blcmx5LiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSB0aGVuIHdlJ2QgcG90ZW50aWFsbHkg bGVhayB0aGUgdmNwaQo+ID4gPiA+IGFsbG9jYXRpb24gZm9yIGFuIHVucGx1Z2dlZCBwb3J0Lgo+ ID4gPiA+IAo+ID4gPiA+IE90b2ggaWYgdGhlIGRyaXZlciByZWxlYXNlcyB0aGUgYWxsb2NhdGlv biBmb3IgYSBwb3J0IHR3aWNlIGl0J3MKPiA+ID4gPiBwcm9iYWJseQo+ID4gPiA+IG1peGVkIHVw IGl0J3Mgb3duIGJvb2sta2VlcGluZy4gV2Ugc2hvdWxkIFdBUk4gYWJvdXQgdGhhdCBjYXNlLgo+ ID4gPiA+IAo+ID4gPiA+IFRoaXMgaXMga2luZGEgZmFsbG91dCBmcm9tIHlvdXIgY2hhbmdlIHRv IG5vdCBwcnVuZSBhbGxvY2F0aW9ucyBvbgo+ID4gPiA+IGR1cGxpY2F0ZSwgYW5kIEkgdGhpbmsg d2lsbCBmdXJ0aGVyIGNsZWFuIHVwIGhvdyB0aGlzIGlzIGhhbmRsZWQuCj4gPiA+ID4gCj4gPiA+ ID4gU28gd2l0aCB0aGUgY29tbWVudCByZW1vdmVkIGFuZCByZXBsYWNlZCBieSBhIFdBUk5JTkco MSwibm8gdmNwaQo+ID4gPiA+IGFsbG9jYXRpb24gZm91bmQgZm9yIHBvcnQgJXBcbiIsIHBvcnQp IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgdGhpcwo+ID4gPiA+IHNob3VsZAo+ID4gPiA+IGJlIHNv bGlkLgo+ID4gPiAKPiA+ID4gSG07IHRoYXQgY29tbWVudCBpcyBsZWZ0b3ZlciBmcm9tIHRoZSBm YWxsb3V0IG9mIG1vdmluZyB0aGUgcG9ydAo+ID4gPiB2ZXJpZmljYXRpb24KPiA+ID4gbG9naWMg b3V0IG9mIHRoZSBzdGF0ZSBkdXBsaWNhdGUgZnVuY3Rpb25zLCBidXQgSSBkb24ndCB0aGluayB0 aGlzIHdvdWxkCj4gPiA+IG5lc3NlY2FyaWx5IGJlIGEgYm9va2tlZXBpbmcgZXJyb3IuIElmIHdl J3JlIGdvaW5nIHRvIHN1cHBvcnQgZmFsbGJhY2sKPiA+ID4gbGluayByZXRyYWluaW5nLCB3ZSds bCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5IGRyaXZlcidzCj4gPiA+IGRybV9jb25uZWN0 b3ItPmF0b21pY19jaGVjaygpIGZ1bmN0aW9uIGlzIGlkZW1wb3RlbnQgc28gdGhhdCBpZiB0aGUK PiA+ID4gYXRvbWljIGhlbHBlcnMgaGF2ZSB0byBwdWxsIGluIG1vcmUgQ1JUQ3MgdG8gcGVyZm9y bSBtb2Rlc2V0cyBvbiB0aGVuCj4gPiA+IHVzZXJzcGFjZSBvcmlnaW5hbGx5IGFkZGVkLCB0aGUg c2Vjb25kIGNoZWNrIG9uIHRoZSBEUk0gY29ubmVjdG9yCj4gPiA+IGRvZXNuJ3QgY2F1c2UgYW55 IGlzc3Vlcy4gUmVtZW1iZXI6IGlmIHdlJ3JlIHRyeWluZyB0byByZXRyYWluIGFuIE1TVAo+ID4g PiB0b3BvbG9neSBhdCBhIGxvd2VyIGxpbmsgcmF0ZSB0aGVuIGJlZm9yZSwgdGhhdCBtZWFucyBj aGFuZ2luZyB0aGUgUEJOCj4gPiA+IGRpdmlzb3Igd2hpY2ggaW4gdHVybiBtZWFucyB0aGF0IHRo ZSBvbmx5IHZhbGlkIGFjdGlvbnMgdGhhdCBjYW4gYmUKPiA+ID4gdGFrZW4gYXJlIHJlY2FsY3Vs YXRpbmcgZXZlcnkgYWN0aXZlIFZDUEkgYWxsb2NhdGlvbiBhdCBvbmNlIGluIG9yZGVyIHRvCj4g PiA+IHByZXZlbnQgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCBvciBkaXNhYmxpbmcgYWxsIG9mIHRo ZSBkaXNwbGF5cyAoc2luY2UKPiA+ID4gZ29pbmcgZnJvbSA+MCBWQ1BJIHRvIDAgVkNQSSBzaG91 bGQgYWx3YXlzIGJlIHNhZmUpLgo+ID4gPiAKPiA+ID4gV2UgL2NvdWxkLyBqdXN0IGxlYXZlIHRo aXMgdXAgdG8gdGhlIGRyaXZlciB0byBkbyB0aGUgYm9va2tlZXBpbmcgb24KPiA+ID4gdGhpcywg YnV0IHRoYXQgc2VlbXMgcmF0aGVyIHJlZHVuZGFudC4gV2UgY291bGQgYWRkIGV4dHJhIGJvb2tr ZWVwaW5nIGluCj4gPiA+IHRoZSBhdG9taWMgY2hlY2sgdGhvdWdoIHNvIHRoYXQgaW5zdGVhZCBv ZiBqdXN0IGRlbGV0aW5nIHRoZSBzdHJ1Y3RzIGZvcgo+ID4gPiBlYWNoIFZDUEkgYWxsb2NhdGlv biB3aGVuIHRoZXkgZ28gdG8gMCwgd2UgaW5zdGVhZCBqdXN0IHNldCB0aGVtIHRvIDAKPiA+ID4g dGhlbiBmcmVlIHRoZW0gc29tZXdoZXJlIGVsc2UuCj4gPiAKPiA+IGpmeWk7IEkgdGhpbmsgaXQg d291bGQgZ28gc29tZXRoaW5nIGxpa2UgdGhpczoKPiA+IAo+ID4gZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoKToKPiA+IAo+ID4gZm9yIGVhY2ggdmNwaToKPiA+ICAgaWYgdmNwaS5w b3J0ID09IHBvcnQ6Cj4gPiAgICAgdmNwaS52Y3BpID0gMAo+ID4gICAgIHJldHVybiAwOwo+ID4g Cj4gPiBkcm1fZXJyb3IoIk5vIHByZXZpb3VzIFZDUEkgYWxsb2NhdGlvbiBmb3VuZCEgSGVscCEh IVxuIik7Cj4gPiByZXR1cm4gLUVJTlZBTDsKPiA+IAo+ID4gVGhlbiB3ZSdkIG5lZWQgdG8gYWRk IHNvbWV0aGluZyB0byBwcnVuZSB0aGUgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUKPiA+IHN0YXRl LAo+ID4gd2hpY2ggdGhlIGRyaXZlciB3b3VsZCBjYWxsIGFmdGVyIGFsbCBhdG9taWMgY2hlY2tz L21vZGUgdmFsaWRhdGlvbnMgaGF2ZQo+ID4gYmVlbgo+ID4gcGVyZm9ybWVkLCBpbmNsdWRpbmcg ZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKQo+ID4gCj4gPiBkcm1fZHBfbXN0X2F0b21pY19jaGVj a19maW5pc2goKToKPiA+ICAgZm9yIGVhY2ggdmNwaToKPiA+ICAgICBpZiB2Y3BpLnZjcGkgPT0g MDoKPiA+ICAgICAgIGRlbCB2Y3BpCj4gPiAKPiA+IFRoZW4sIHRoYXQgd2F5IHdlJ3ZlIG1hZGUg c3VyZSB0aGF0IG11bHRpcGxlIFZDUEkgZnJlZXMgaW4gdGhlIHNhbWUgY2hlY2sKPiA+IGFyZQo+ ID4gT0ssIGJ1dCBmcmVlaW5nIFZDUEkgdGhhdCBuZXZlciBleGlzdGVkIGFjdHVhbGx5IHRocm93 cyBlcnJvcnMKPiAKPiBOb3Qgc3VyZSB0aGF0J3MgbmVlZGVkIGF0IGFsbC4gVGhlIHdheSBsaW5r IHRyYWluaW5nIHdvcmtzIGlzIHdlIGp1c3QgYXNrCj4gdXNlcnNwYWNlIHRvIGRvIHRoZSBoZWF2 eSBsaWZ0aW5nIGZvciB1cywgYnkgaXNzdWluZyBhIG5ldyBtb2Rlc2V0LiBJZgo+IHRoYXQgbWVh bnMgbW9kZSBwcnVuaW5nLCB3ZSBhbHNvIGFzayB1c2Vyc3BhY2UgdG8gZG8gdGhlIGhlYXZ5IGxp ZnRpbmcgZm9yCj4gdXMsIGFnYWluIGJ5IGlzc3VpbmcgYSBuZXcgbW9kZXNldC4gS2VybmVsIG5l dmVyIG5lZWRzIHRvIHJldHJhaW4gaWYgdGhhdAo+IG1lYW5zIHJlY29tcHV0aW5nIHN0YXRlIHN0 dWZmIG9yIHBydW5pbmcgbW9kZXMgb3Igb3RoZXIgZnVuIHByb2JsZW1zLiBJdAo+IGRvZXNuJ3Qg ZXZlbiBuZWVkIHRvIHJldHJhaW4gaWYgdGhhdCBtZWFucyBzaHV0dGluZyBkb3duIGEgYnVuY2gg b2YgbGlua3MsCj4gaXQgY2FuIGp1c3QgcHVudCB0aGF0IHRvIHVzZXJzcGFjZSBhbmQgbGV0IGl0 IHJldHJhaW4gYXQgYSBjb252ZW5pZW50Cj4gdGltZS4KPiAKPiBPZiBjb3Vyc2UgdGhhdCByZXRy YWluIG1pZ2h0IHRoZW4gcmVzdWx0IGluIGEgbW9kZXNldCwgd2hpY2ggbWlnaHQgZmFpbCBpZgo+ IHRoZSBjb25uZWN0b3IgaXMgZW50aXJlbHkgZ29uZSBieSB0aGVuLgo+IAo+IE90b2ggSSBtaWdo dCBqdXN0IGJlIHRhbGtpbmcgbm9uc2Vuc2UgcmlnaHQgbm93LCBpdCdzIGEgYml0IGxhdGUgOi0p CgpoZWhlLWl0J3MgZmluZS4gRWl0aGVyIHdheSwgSSdsbCB0cnkgdG8gZXhwbGFpbiBpdCBhIGxp dHRsZSBiZXR0ZXIgdG8gbWFrZQp0aGlzIGVhc2llciB0byB1bmRlcnN0YW5kIGZvciB0b21tb3Jy b3cuCgpTbzogdGhlIFZDUEkgYWxsb2NhdGlvbnMgYXJlIGFsbCBjYWxjdWxhdGVkIGJhc2VkIG9u IHRoZSB0b3BvbG9neSdzIFBCTgpkaXZpc29yLCB3aGljaCBpdHNlbGYgaXMgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgbGluayByYXRlIGFuZCBiYW5kd2lkdGguIEZvcgphIHRvcG9sb2d5IHJ1bm5p bmcgYXQgNS40IEdCaXQvcyB4IDQgbGFuZXMsIHRoZSBwYm5fZGl2aXNvciB3b3VsZCBiZSA0MC4g Rm9yCjIuN0dCaXQvcyB4IDQgbGFuZXMsIGl0IHdvdWxkIGJlIDIwLiBUaGUgaGlnaGVyIHRoZSBQ Qk4gZGl2aXNvciwgdGhlIG1vcmUgVkNQSQp0b2tlbnMgYXJlIG5lZWRlZCBmb3IgZWFjaCBhY3Rp dmUgZGlzcGxheSwgYW5kIHZpY2UgdmVyc2EuCgpTbzogbGV0J3Mgc2F5IHdlIGhhdmUgYSB0b3Bv bG9neSBsaWtlIHRoaXM6CgpEUC0xIEAgNS40IEdCaXQvcyB3LyBwYm5fZGl2ID09IDQwOgogfC0g RFAtNDogMTkyMHgxMDgwIEAgNjBIeiBicHA9MjQsIFZDUEkgPSAxNAogfC0gRFAtNTogMTkyMHgx MDgwIEAgNjBIeiBicHA9MjQsIFZDUEkgPSAxNAoKQXMgYSBub3RlOiBiZWNhdXNlIERQLTQgYW5k IERQLTUgc2hhcmUgdGhlIHNhbWUgRFAgbGluayBzaW5jZSB0aGV5J3JlIG9uCnRoZSBzYW1lIHRv cG9sb2d5LCBJJ20gYXNzdW1pbmcgdGhhdCBMSU5LX1NUQVRVU19CQUQgaXMgc2V0IGF0IG9uY2Ug Zm9yCmFsbCBvZiB0aGVtLgoKSWYgRFAtNCBhbmQgRFAtNSdzIGNvbm5lY3Rpb24gc3RhdHVzIHN1 ZGRlbmx5IHdlbnQgTElOS19TVEFUVVNfQkFELCB3ZSdkCm5lZWQgdG8gcmVjYWxjdWxhdGUgZXZl cnl0aGluZyB0byBmaXQgaW4gMi43IEdCaXQvcyB3aXRoIGEgcGJuX2RpdiBvZgoyMC4gVGhpcyBp cyB0aGUgaW1wb3J0YW50IHBhcnQ6IHJlbWVtYmVyIHRoYXQgc2luY2UgZXZlcnl0aGluZydzIHNo YXJpbmcKdGhlIHNhbWUgbGluaywgdGhhdCBtZWFucyB0aGV5J3JlIGFsc28gc2hhcmluZyB0aGUg c2FtZSBQQk4gZGl2aXNvci4KV2hpY2ggbWVhbnMgdGhhdCBpZiB1c2Vyc3BhY2Ugd2VyZSB0byB0 cnkgdG8gZml4IHRoaXMgYnkgY2hhbmdpbmcgb25lCmRpc3BsYXkgYXQgYSB0aW1lLCBzYXk6CgpE UC0xIEAgMi43IEdCaXQvcyB3LyBwYm5fZGl2ID09IDIwOiAoSW52YWxpZCBzdGF0ZSkKIHwtIERQ LTQ6IDE5MjB4MTA4MCBAIDYwSHogYnBwPTI0LCBWQ1BJPTI4CiB8LSBEUC01OiAxOTIweDEwODAg QCA2MEh6IGJwcD0yNCwgVkNQST0xNAoKVGhpcyB3b3VsZG4ndCB3b3JrIGF0IGFsbDogdGhlIDE0 IFZDUEkgc2xvdHMgdGhhdCBEUC01IGhhcyBub3cKY29ycmVzcG9uZCB0byBoYWxmIHRoZSBhbW91 bnQgb2YgcmVhbC13b3JsZCBiYW5kd2lkdGggdGhlbiB0aGV5IGRpZApwcmV2aW91c2x5LiBUaGlz IHdvdWxkIGJlIGJyb2tlbiwgYW5kIGFkZGl0aW9uYWxseSB0aGUgTVNUIHNwZWMgbWFuZGF0ZXMK dGhhdCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgYWxsIHBheWxvYWRzIG5lZWQgdG8gYmUgcmVjYWxj dWxhdGVkIG9uIGxpbmsKcmF0ZSBjaGFuZ2VzIGJlZm9yZSBwcm9ncmFtbWluZyBuZXcgcGF5bG9h ZHMuLiBTbywgdGhhdCBtZWFucyB3ZSdyZSBvbmx5CmxlZnQgd2l0aCBhIGZldyB3YXlzIHRvIGZp eCB0aGlzLiBDaGFuZ2UgRFAtNCBhbmQgRFAtNSBhdCB0aGUgc2FtZSB0aW1lOgoKRFAtMSBAIDIu NyBHQml0L3Mgdy8gcGJuX2RpdiA9PSAyMDogKExpbmsgZ29vZCwgdmFsaWQgc3RhdGUpCiB8LSBE UC00OiAxOTIweDEwODAgQCA2MEh6IGJwcD0yNCwgVkNQST0yOAogfC0gRFAtNTogMTkyMHgxMDgw IEAgNjBIeiBicHA9MjQsIFZDUEk9MjgKCk9yIGRpc2FibGUgZWFjaCBjb25uZWN0b3IuIFRoaXMg Y2FuIGJlIGRvbmUgYWxsIGF0IG9uY2UsIG9yIG9uZSBhdCBhCnRpbWUgc2luY2Ugd2UncmUgbm90 IHByb2dyYW1taW5nIG5ldyBwYXlsb2FkczoKCkRQLTEgQCA1LjQgR0JpdC9zIHcvIHBibl9kaXYg PT0gNDA6IChMaW5rIGJhZCwgdmFsaWQgc3RhdGUpCiB8LSBEUC00OiAxOTIweDEwODAgQCA2MEh6 IGJwcD0yNCwgVkNQSSA9IDE0CiB8LSBEUC01OiA8ZGlzYWJsZWQ+CgpEUC0xIEAgMi43IEdCaXQv cyB3LyBwYm5fZGl2ID09IDIwOiAoTGluayBnb29kLCB2YWxpZCBzdGF0ZSkKIHwtIERQLTQ6IDxk aXNhYmxlZD4KIHwtIERQLTU6IDxkaXNhYmxlZD4KCldoYXQgdGhpcyBtZWFucyBmb3IgYXRvbWlj IHVzZXJzcGFjZSBpcyB0aGF0IHdoaWxlIGl0IGlzIGEgYml0CmNvbXBsaWNhdGVkLCB3ZSBkbyBh Y3R1YWxseSBuZWVkIHRvIGFkZCByZXN0cmljdGlvbnMgb24gd2hhdCBtb2Rlc2V0cyBpdAp0cmll cyB0byBkbyBvbiB0b3BvbG9naWVzIHRoYXQgbmVlZCBmYWxsYmFjayByZXRyYWluaW5nIHRvIHBy ZXZlbnQgaXQKZnJvbSBzZXR0aW5nIGFuIGludmFsaWQgc3RhdGUgbGlrZSB0aGUgb25lIHNob3du IGFib3ZlLiBQYXJ0IG9mIHRoaXMKbWVhbnMgdGhhdCBpZiB1c2Vyc3BhY2UgdHJpZXMgdG8gZG8g YSBtb2Rlc2V0IG9uIG9uZSBjb25uZWN0b3Igb24gYQp0b3BvbG9neSwgd2UgaGF2ZSB0byBmb3Jj ZSBhIG1vZGVzZXQgb24gYWxsIG9mIHRoZSBvdGhlciBjb25uZWN0b3JzIG9uCnRoZSB0b3BvbG9n eSB0byBlbnN1cmUgdGhhdCB0aGV5IHN0aWxsIGZpdCB3aXRoaW4gdGhlIFZDUEkgcmVzdHJpY3Rp b25zCmFmdGVyIGhhdmluZyB0aGVpciBhbGxvY2F0aW9ucyByZWNhbGN1bGF0ZWQuIC9USElTLyBp cyB3aGVyZSBoYXZpbmcKZXZlcnl0aGluZyB0aGF0IHRoZSBhdG9taWMgTVNUIGhlbHBlcnMgZG8g YmUgaWRlbXBvdGVudCBjb21lcyBpbiBoYW5keQphcyBpdCB3b3VsZCBzb2x2ZSBhIHNpdHVhdGlv biBsaWtlIHRoaXM6CgooYXNzdW1pbmcgdGhlIGN1cnJlbnQgc2V0dXAgaXMgaWRlbnRpY2FsIHRv IHRoZSBkaWFncmFtcyBJIGxpc3RlZCBhYm92ZSkKCkF0b21pYyBzdGF0ZSBjb250YWluaW5nOgog LSBtZ3Igdy8gcGJuX2RpdiA9PSA0MCAobGluayBAIDUuNCBHQml0L3MpCiAtIERQLTQ6IDE5MjB4 MTA4MCBAIDYwSHogYnBwPTI0LCBWQ1BJPTE0CiAgIC0gTElOS19TVEFUVVMgYmFkIC0+IGdvb2Qg KHJlcXVpcmVzIG1vZGVzZXQgdG8gYXBwbHkgbmV3IFZDUEkgb2YgMjgpCgpEUC00IGVuY29kZXIu YXRvbWljX2NoZWNrKCkgLT4gT0sKRFAtNC5hdG9taWNfY2hlY2soKSAtPiBPSwoKbWdyLmF0b21p Y19jaGVjaygpIC0+IG5vbm8gd2FpdCBhIHNlY29uZCB1c2Vyc3BhY2UhIQogLSBEUC00IGNhbid0 IGJlIGNoYW5nZWQgd2l0aG91dCBjaGFuZ2luZyBEUC01LCBzbzoKICAgc3RhdGUuYWRkX2Nvbm5l Y3RvcihEUC01KQogICBEUC01Lm1vZGVfY2hhbmdlZCA9IHRydWUKICAgbmVlZF9yZWNoZWNrID0g dHJ1ZQoKc3RhdGUucmVjaGVjaygpOgogIyBSZXJ1biBjaGVja3Mgbm93CiBEUC00IGVuY29kZXIu YXRvbWljX2NoZWNrKCkgLT4gT0sKIERQLTQuYXRvbWljX2NoZWNrKCkgLT4gT0sKIERQLTUgZW5j b2Rlci5hdG9taWNfY2hlY2soKSAtPiBPSwogRFAtNS5hdG9taWNfY2hlY2soKSAtPiBPSwogbWdy LmF0b21pY19jaGVjaygpIC0+IE9LCgpBcyB5b3UgY2FuIHNlZTogRFAtNCBuZWVkZWQgdG8gZ2V0 IGNoZWNrZWQgYSBzZWNvbmQgdGltZSwgd2hpY2ggbWVhbnMKaXQncyBWQ1BJIHdvdWxkIGJlIGZy ZWVkIHR3aWNlIGluIHRoZSBzYW1lIHN0YXRlLCBidXQgbm90aGluZyB3b3VsZAphY3R1YWxseSBi ZSBsZWFraW5nISBUaGF0J3MgcHJldHR5IG11Y2ggdGhlIHdob2xlIHVzZWNhc2UgZm9yIHNvbWV0 aGluZwpsaWtlIHRoaXMsIHNvIHRoYXQgZHJpdmVycyBkb24ndCBoYXZlIHRvIHRyYWNrIHdoZXJl IHRoZXkgYXJlIGluIHRoZWlyCmF0b21pYyBjaGVjaygpIHNpbmNlIHRoYXQncyBhIGxvdCBtb3Jl IGVycm9yIHByb25lIHRvIGhhdmUgcmV3cml0dGVuCm9uY2UgZm9yIGVhY2ggTVNUIGRyaXZlci4K Cj4gCj4gQ2hlZXJzLCBEYW5pZWwKPiAKPiAKPiA+ID4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ID4g PiAgfQo+ID4gPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlf c2xvdHMpOwo+ID4gPiA+ID4gQEAgLTMxMTIsMTUgKzMxNjQsMzQgQEAgc3RhdGljIHZvaWQKPiA+ ID4gPiA+IGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdAo+ID4gPiA+ID4gd29y a19zdHJ1Y3QgKndvcmspCj4gPiA+ID4gPiAgc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0 ZSAqCj4gPiA+ID4gPiAgZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2 YXRlX29iaiAqb2JqKQo+ID4gPiA+ID4gIHsKPiA+ID4gPiA+IC0Jc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKnN0YXRlOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqc3RhdGUsICpvbGRfc3RhdGUgPQo+ID4gPiA+ID4gKwkJdG9fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlf YWxsb2NhdGlvbiAqcG9zLCAqdmNwaTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0Jc3RhdGUgPSBr bWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ ICsJc3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwp Owo+ID4gPiA+ID4gIAlpZiAoIXN0YXRlKQo+ID4gPiA+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiA+ ID4gPiAgCj4gPiA+ID4gPiAgCV9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGlj YXRlX3N0YXRlKG9iaiwgJnN0YXRlLQo+ID4gPiA+ID4gPmJhc2UpOwo+ID4gPiA+ID4gIAo+ID4g PiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlzLCBuZXh0KSB7 Cj4gPiA+ID4gPiArCQl2Y3BpID0ga21lbWR1cChwb3MsIHNpemVvZigqdmNwaSksIEdGUF9LRVJO RUwpOwo+ID4gPiA+ID4gKwkJaWYgKCF2Y3BpKQo+ID4gPiA+ID4gKwkJCWdvdG8gZmFpbF9hbGxv YzsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmc3RhdGUt PnZjcGlzKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gIAlyZXR1cm4gJnN0 YXRlLT5iYXNlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2ZhaWxfYWxsb2M6Cj4gPiA+ID4gPiAr CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0ZS0+dmNwaXMsIG5leHQp Cj4gPiA+ID4gPiArCQlrZnJlZShwb3MpOwo+ID4gPiA+ID4gKwlrZnJlZShzdGF0ZSk7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAK PiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqLAo+ID4gPiA+ID4gQEAgLTMxMjgsMTQgKzMxOTksOTkgQEAgc3Rh dGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX3By aXZhdGVfb2JqICpvYmosCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0KPiA+ID4gPiA+ICAJCXRvX2RwX21zdF90b3Bv bG9neV9zdGF0ZShzdGF0ZSk7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0 aW9uICpwb3MsICp0bXA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShwb3MsIHRtcCwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpCj4gPiA+ID4gPiArCQlr ZnJlZShwb3MpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlrZnJlZShtc3Rfc3RhdGUpOwo+ID4g PiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9w cml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ID4gPiA+ICtzdGF0aWMg aW5saW5lIGludAo+ID4gPiA+ID4gK2RybV9kcF9tc3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5X3N0 YXRlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gPiA+ICpt Z3IsCj4gPiA+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3QKPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUKPiA+ID4gPiA+ICptc3Rfc3RhdGUpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4g KwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiA+ID4gPiA+ICsJc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ID4gPiA+ICsJaW50IGF2YWlsX3Nsb3RzID0gNjMs IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y3BpLCAm bXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4gKwkJLyogUG9ydHMgdGhhdCBubyBs b25nZXIgZXhpc3Qgc2hvdWxkbid0IGJlIGNvdW50ZWQKPiA+ID4gPiA+IHRvd2FyZHMgdGhlCj4g PiA+ID4gPiArCQkgKiBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciB0aGUgc3RhdGUsIHNvIHNr aXAgdGhlbQo+ID4gPiA+ID4gKwkJICovCj4gPiA+ID4gCj4gPiA+ID4gU2NlbmFyaW86Cj4gPiA+ ID4gLSAyIG1zdCBzaW5rcyBvbiBhIHNpbmdsZSBob3N0IHNpZGUgcG9ydC4KPiA+ID4gPiAtIDFz dCBjb25uZWN0b3IgaXMgYWN0aXZlLCAybmQgY29ubmVjdG9yIGlzIG9mZi4KPiA+ID4gPiAtIDFz dCBjb25uZWN0b3IgaXMgaG90LXVucGx1Z2dlZCwgYnV0IHVzZXJzcGFjZSBoYXNuJ3QgcmVhbGl6 ZWQgdGhpcwo+ID4gPiA+IHlldCwKPiA+ID4gPiAgIHNvIG5vdCB5ZXQgY29tZSBhcm91bmQgdG8g ZG8gdGhlIGRpc2FibGluZyBtb2Rlc2V0Lgo+ID4gPiA+IC0gQXQgdGhlIHNhbWUgdGltZSB1c2Vy c3BhY2UgZGVjaWRlcyB0byBlbmFibGUgdGhlIDJuZCBvdXRwdXQsIHdoaWNoCj4gPiA+ID4gICBm b3JjZXMgYSBtb2Rlc2V0IGFuZCBwdWxscyB0aGUgdG9wb2xvZ3kgc3RhdGUgaW4uCj4gPiA+ID4g LSBUaGlzIGZ1bmN0aW9uIGhlcmUgZGVjaWRlcyB0byBvbmx5IGxvb2sgYXQgdGhlIHZjcGkgYWxs b2NhdGlvbiBmb3IKPiA+ID4gPiB0aGUKPiA+ID4gPiAgIDJuZCBjb25uZWN0b3IgYmVjYXVzZSB0 aGUgZmlyc3Qgb25lIGlzIGdvbmUgYWxyZWFkeS4KPiA+ID4gPiAtIFVuZm9ydHVuYXRlbHkgbGln aHRpbmcgdXAgYm90aCBjb25uZWN0b3JzIGF0IHRoZSBzYW1lIHRpbWUgaXNuJ3QKPiA+ID4gPiAg IHBvc3NpYmxlLCBiZWNhdXNlIHRvbyBtYW55IHZjcGkuIEJ1dCBzaW5jZSB1c2Vyc3BhY2UgZGlk bid0IGFzayBmb3IKPiA+ID4gPiBhCj4gPiA+ID4gICBtb2Rlc2V0IG9uIHRoZSBub3cgdW5wbHVn Z2VkIGZpcnN0IGNvbm5lY3Rvci4KPiA+ID4gPiAtPiBNb2Rlc2V0IGdvZXMgYm9vbSBiZWNhdXNl IHdlIGVuYWJsZSB0b28gbWFueSB2Y3BpLgo+ID4gPiA+IAo+ID4gPiA+IEJ1dCB3aXRoIHRoZSBj aGFuZ2UgaW4gaG93IHdlIHJlbGVhc2UgdmNwaSBhbGxvY2F0aW9ucyB0aGVyZSdzIG5vIG5lZWQK PiA+ID4gPiB0bwo+ID4gPiA+IGlnbm9yZSBkaXNjb25uZWN0ZWQgc3R1ZmYgaGVyZSwgYW5kIHdl IHNob3VsZCBiZSBhYmxlIHRvIGNoZWNrIHZjcGkKPiA+ID4gPiBsaW1pdHMKPiA+ID4gPiBieSBq dXN0IGNoZWNraW5nIGFsbCBvZiB0aGVtLgo+ID4gPiA+IAo+ID4gPiA+IEkgZGlkbid0IHNlZSBh bnl0aGluZyBlbHNlIHNlcmlvdXMsIHNvIHdpdGggdGhlIGFib3ZlIHR3byB0aGluZ3MKPiA+ID4g PiByZXNvbHZlZAo+ID4gPiA+IHRoaXMgaGFzIG15IFJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+ID4gPiA+IAo+ID4gPiA+IE9uZSBiaWtlc2hlZCBi ZWxvdywgYmVjYXVzZSBJIG5lZWQgdG8gcHJvdmUgSSBzY3JvbGxlZCB0byB0aGUgZW5kIDotKQo+ ID4gPiA+IAo+ID4gPiA+ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVm KG1nciwgdmNwaS0+cG9ydCk7Cj4gPiA+ID4gPiArCQlpZiAoIXBvcnQpIHsKPiA+ID4gPiA+ICsJ CQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIGlzIHN0YWxlLAo+ID4gPiA+ID4gc2tp cHBpbmcKPiA+ID4gPiA+IGNoZWNrc1xuIiwKPiA+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsK PiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVxdWlyZXMgJWQgdmNwaQo+ ID4gPiA+ID4gc2xvdHNcbiIsCj4gPiA+ID4gPiArCQkJCSB2Y3BpLT5wb3J0LCB2Y3BpLT52Y3Bp KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4g PiA+ID4gPiArCQlpZiAoYXZhaWxfc2xvdHMgPCAwKSB7Cj4gPiA+ID4gPiArCQkJRFJNX0RFQlVH X0FUT01JQygiW01TVCBQT1JUOiVwXSBub3QgZW5vdWdoCj4gPiA+ID4gPiB2Y3BpIHNsb3RzCj4g PiA+ID4gPiBpbiBtc3Rfc3RhdGUgJXAgKGF2YWlsPSVkKVxuIiwKPiA+ID4gPiA+ICsJCQkJCSB2 Y3BpLT5wb3J0LCBtc3Rfc3RhdGUsCj4gPiA+ID4gPiArCQkJCQkgYXZhaWxfc2xvdHMgKyB2Y3Bp LT52Y3BpKTsKPiA+ID4gPiA+ICsJCQlyZXQgPSAtRU5PU1BDOwo+ID4gPiA+ID4gKwkJCWdvdG8g cG9ydF9mYWlsOwo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJZHJtX2Rw X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCURSTV9ERUJVR19BVE9N SUMoIltNU1QgTUdSOiVwXSBtc3Rfc3RhdGUgJXAgdmNwaSBhdmFpbD0lZAo+ID4gPiA+ID4gdXNl ZD0lZFxuIiwKPiA+ID4gPiA+ICsJCQkgbWdyLCBtc3Rfc3RhdGUsIGF2YWlsX3Nsb3RzLAo+ID4g PiA+ID4gKwkJCSA2MyAtIGF2YWlsX3Nsb3RzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0 dXJuIDA7Cj4gPiA+ID4gPiArcG9ydF9mYWlsOgo+ID4gPiA+ID4gKwlkcm1fZHBfcHV0X3BvcnQo cG9ydCk7Cj4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrIC0gQ2hl Y2sgdGhhdCB0aGUgbmV3IHN0YXRlIG9mIGFuIE1TVAo+ID4gPiA+ID4gdG9wb2xvZ3kKPiA+ID4g PiA+IGluIGFuCj4gPiA+ID4gPiArICogYXRvbWljIHVwZGF0ZSBpcyB2YWxpZAo+ID4gPiA+ID4g KyAqIEBzdGF0ZTogUG9pbnRlciB0byB0aGUgbmV3ICZzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZQo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQ2hlY2tzIHRoZSBnaXZlbiB0b3Bv bG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0byBlbnN1cmUKPiA+ID4gPiA+IHRoYXQK PiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ICsgKiB2YWxpZC4gVGhpcyBpbmNsdWRlcyBjaGVja2lu ZyB3aGV0aGVyIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aAo+ID4gPiA+ID4gdG8KPiA+ID4gPiA+ IHN1cHBvcnQKPiA+ID4gPiA+ICsgKiB0aGUgbmV3IFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlIGF0 b21pYyB1cGRhdGUuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBBbnkgYXRvbWljIGRyaXZl cnMgc3VwcG9ydGluZyBEUCBNU1QgbXVzdCBtYWtlIHN1cmUgdG8gY2FsbCB0aGlzCj4gPiA+ID4g PiBhZnRlcgo+ID4gPiA+ID4gKyAqIGNoZWNraW5nIHRoZSByZXN0IG9mIHRoZWlyIHN0YXRlIGlu IHRoZWlyCj4gPiA+ID4gPiArICogJmRybV9tb2RlX2NvbmZpZ19mdW5jcy5hdG9taWNfY2hlY2so KSBjYWxsYmFjay4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFNlZSBhbHNvOgo+ID4gPiA+ ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ICsgKiBkcm1f ZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsg KiBSZXR1cm5zOgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogMCBpZiB0aGUgbmV3IHN0YXRl IGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ID4gPiA+ICsgKi8K PiA+ID4gPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ID4gPiArCWludCBpLCByZXQgPSAwOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBt c3Rfc3RhdGUsIGkpIHsKPiA+ID4gPiA+ICsJCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNr X3RvcG9sb2d5X3N0YXRlKG1nciwKPiA+ID4gPiA+IG1zdF9zdGF0ZSk7Cj4gPiA+ID4gPiArCQlp ZiAocmV0KQo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1C T0woZHJtX2RwX21zdF9hdG9taWNfY2hlY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2NvbnN0 IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+ID4gZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZV9mdW5jcyA9Cj4gPiA+ID4gPiB7Cj4gPiA+ID4gPiAgCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUsCj4gPiA+ID4gPiAgCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZSwKPiA+ID4gPiA+ICB9 Owo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5j cyk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgLyoqCj4gPiA+ID4gPiAgICogZHJtX2F0b21pY19n ZXRfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlCj4gPiA+ID4gPiBA QCAtMzIxMywxMyArMzM2OSwxMSBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChz dHJ1Y3QKPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiAg CQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJbXN0X3N0YXRlLT5tZ3Ig PSBtZ3I7Cj4gPiA+ID4gPiAtCj4gPiA+ID4gPiAtCS8qIG1heC4gdGltZSBzbG90cyAtIG9uZSBz bG90IGZvciBNVFAgaGVhZGVyICovCj4gPiA+ID4gPiAtCW1zdF9zdGF0ZS0+YXZhaWxfc2xvdHMg PSA2MzsKPiA+ID4gPiA+ICsJSU5JVF9MSVNUX0hFQUQoJm1zdF9zdGF0ZS0+dmNwaXMpOwo+ID4g PiA+ID4gIAo+ID4gPiA+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFz ZSwKPiA+ID4gPiA+ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gPiA+ID4gPiAtCQkJCSAg ICAmbXN0X3N0YXRlX2Z1bmNzKTsKPiA+ID4gPiA+ICsJCQkJICAgICZkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlX2Z1bmNzKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ ID4gPiAgfQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiA+ID4gPiA+IGluZGV4IGJiZjhjYTIxYTdhMi4uODc0OWNmNjFhNmFjIDEwMDY0NAo+ID4g PiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+IEBA IC0xMjU1Myw2ICsxMjU1MywxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1 Y3QKPiA+ID4gPiA+IGRybV9kZXZpY2UKPiA+ID4gPiA+ICpkZXYsCj4gPiA+ID4gPiAgCQkJCSAg ICAgICAiW21vZGVzZXRdIiA6ICJbZmFzdHNldF0iKTsKPiA+ID4gPiA+ICAJfQo+ID4gPiA+ID4g IAo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdGF0ZSk7Cj4gPiA+ ID4gPiArCWlmIChyZXQpCj4gPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+IAo+ID4gPiA+ IENvbXBsZXRlIGJpa2VzaGVkLCBzbyBmZWVsIGZyZWUgdG8gaWdub3JlOiBJJ2Qgc3R1ZmYgdGhp cyBpbnRvCj4gPiA+ID4gaW50ZWxfbW9kZXNldF9jaGVja3MoKS4gRmVlbCBmcmVlIHRvIGlnbm9y ZS4KPiA+ID4gPiAKPiA+ID4gPiBDaGVlcnMsIERhbmllbAo+ID4gPiA+IAo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gIAlpZiAoYW55X21zKSB7Cj4gPiA+ID4gPiAgCQlyZXQgPSBpbnRlbF9tb2Rlc2V0 X2NoZWNrcyhzdGF0ZSk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+IGluZGV4IDhiNzFkNjRlYmQ5ZC4uYWFmOTA0 NzM4Yjc4IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHBfbXN0LmMKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21z dC5jCj4gPiA+ID4gPiBAQCAtMTE0LDI4ICsxMTQsMzEgQEAgc3RhdGljIGludCBpbnRlbF9kcF9t c3RfYXRvbWljX2NoZWNrKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7 Cj4gPiA+ID4gPiAgCXN0cnVjdCBkcm1fY3J0YyAqb2xkX2NydGM7Cj4gPiA+ID4gPiAgCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ID4gPiA+IC0JaW50IHNsb3RzLCByZXQg PSAwOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3Ig PQo+ID4gPiA+ID4gKwkJdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ID4gPiAr CXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0KPiA+ID4gPiA+ICsJCSZpbnRl bF9jb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfbWdyOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0ID0gaW50ZWxfY29ubmVjdG9yLT5wb3J0Owo+ID4gPiA+ID4gKwlpbnQg cmV0ID0gMDsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJb2xkX2Nvbm5fc3RhdGUgPSBkcm1fYXRv bWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4gY29ubmVjdG9yKTsK PiA+ID4gPiA+ICAJb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+ID4gPiA+ICAJ aWYgKCFvbGRfY3J0YykKPiA+ID4gPiA+ICAJCXJldHVybiByZXQ7Cj4gPiA+ID4gPiAgCj4gPiA+ ID4gPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwg b2xkX2NydGMpOwo+ID4gPiA+ID4gLQlzbG90cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19z dGF0ZSktPmRwX21fbi50dTsKPiA+ID4gPiA+IC0JaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19t b2Rlc2V0KGNydGNfc3RhdGUpICYmIHNsb3RzID4gMCkgewo+ID4gPiA+ID4gLQkJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiAtCQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKm9sZF9lbmNvZGVyOwo+ID4gPiA+ID4gKwkvKiBGcmVlIFZDUEksIHNpbmNlIGNvbXB1dGVf Y29uZmlnKCkgd29uJ3QgYmUgcnVuICovCj4gPiA+ID4gPiArCWlmICghbmV3X2Nvbm5fc3RhdGUt PmNydGMpIHsKPiA+ID4gPiA+ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0 Y19zdGF0ZShzdGF0ZSwKPiA+ID4gPiA+IG9sZF9jcnRjKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ IC0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5fc3RhdGUtPmJlc3RfZW5jb2RlcjsKPiA+ID4gPiA+ IC0JCW1nciA9ICZlbmNfdG9fbXN0KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21ncjsK PiA+ID4gPiA+IC0KPiA+ID4gPiA+IC0JCXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKHN0YXRlLCBtZ3IsCj4gPiA+ID4gPiBzbG90cyk7Cj4gPiA+ID4gPiAtCQlpZiAocmV0 KQo+ID4gPiA+ID4gLQkJCURSTV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaQo+ ID4gPiA+ID4gc2xvdHM6JWRcbiIsCj4gPiA+ID4gPiBzbG90cywgcmV0KTsKPiA+ID4gPiA+IC0J CWVsc2UKPiA+ID4gPiA+IC0JCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9t X24udHUgPQo+ID4gPiA+ID4gMDsKPiA+ID4gPiA+ICsJCXJldCA9IGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsCj4gPiA+ID4gPiBwb3J0KTsKPiA+ID4gPiA+ICsJ CWlmIChyZXQpIHsKPiA+ID4gPiA+ICsJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5n IHZjcGkgc2xvdHM6Cj4gPiA+ID4gPiAlZFxuIiwKPiA+ID4gPiA+ICsJCQkJICAgICAgcmV0KTsK PiA+ID4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwkJdG9f aW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ID4gPiA+ICAJ fQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ICAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBl ci5oCj4gPiA+ID4gPiBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gPiA+ IGluZGV4IDNmYWNlYjY2ZjVjYi4uMDhiNjc5NDhiOGY5IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEv aW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4gQEAgLTQwNiw5ICs0MDYsMTUgQEAgc3Ry dWN0IGRybV9kcF9wYXlsb2FkIHsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAjZGVmaW5lIHRvX2Rw X21zdF90b3BvbG9neV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0Cj4gPiA+ID4gPiBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLCBiYXNlKQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gK3N0 cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uIHsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydDsKPiA+ID4gPiA+ICsJaW50IHZjcGk7Cj4gPiA+ID4gPiArCXN0cnVjdCBs aXN0X2hlYWQgbmV4dDsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIHsKPiA+ID4gPiA+ICAJc3RydWN0IGRybV9wcml2 YXRlX3N0YXRlIGJhc2U7Cj4gPiA+ID4gPiAtCWludCBhdmFpbF9zbG90czsKPiA+ID4gPiA+ICsJ c3RydWN0IGxpc3RfaGVhZCB2Y3BpczsKPiA+ID4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiAgfTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IEBAIC02 MTksMTQgKzYyNSwxNyBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1c3BlbmQoc3Ry dWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ID4gPiA+ICBp bnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfcmVzdW1lKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21ncgo+ID4gPiA+ID4gKm1ncik7Cj4gPiA+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUKPiA+ID4gPiA+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gIAkJCQkJCQkJICAgIHN0 Cj4gPiA+ID4gPiBydWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsK PiA+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gLQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ID4gLQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQsIGludAo+ID4gPiA+ID4gcGJuKTsKPiA+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiA+ICpzdGF0 ZSwKPiA+ID4gPiA+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiAtCQkJCSAgICAgaW50IHNsb3RzKTsKPiA+ID4gPiA+ICtp bnQgX19tdXN0X2NoZWNrCj4gPiA+ID4gPiArZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gKwkJCSAgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ID4gKwkJCSAgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ID4gPiA+ID4gK2ludCBfX211c3Rf Y2hlY2sKPiA+ID4gPiA+ICtkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiA+ICsJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpOwo+ID4gPiA+ID4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gKm1nciwKPiA+ID4gPiA+ICAJ CQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGJvb2wKPiA+ID4gPiA+IHBvd2VyX3Vw KTsKPiA+ID4gPiA+ICtpbnQgX19tdXN0X2NoZWNrIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlCj4gPiA+ID4gPiAqc3RhdGUpOwo+ID4gPiA+ID4gIAo+ID4g PiA+ID4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MKPiA+ID4g PiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3M7Cj4gPiA+ID4gPiAgCj4gPiA+ID4g PiAtLSAKPiA+ID4gPiA+IDIuMTkuMQo+ID4gPiA+ID4gCj4gPiAtLSAKPiA+IENoZWVycywKPiA+ IAlMeXVkZSBQYXVsCj4gPiAKLS0gCkNoZWVycywKCUx5dWRlIFBhdWwKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5v dXZlYXVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vbm91dmVhdQo=