From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4/6] usb: gadget: add functions to signal udc driver to delay status stage From: Alan Stern Message-Id: Date: Fri, 2 Nov 2018 15:46:09 -0400 (EDT) To: Laurent Pinchart Cc: Felipe Balbi , Paul Elder , Bin Liu , kieran.bingham@ideasonboard.com, gregkh@linuxfoundation.org, USB list , Kernel development list , rogerq@ti.com List-ID: T24gRnJpLCAyIE5vdiAyMDE4LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgoKPiBIaSBBbGFuLAoK SGksIExhdXJlbnQuCgo+IFRoZSBjb21wb3NpdGUgbGF5ZXIgb25seSBoYW5kbGVzIFVTQl9HQURH RVRfREVMQVlFRF9TVEFUVVMgZm9yIAo+IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04gKGluIHNl dF9jb25maWcoKSkgYW5kIGZvciBVU0JfUkVRX1NFVF9JTlRFUkZBQ0UgKGluIAo+IGNvbXBvc2l0 ZV9zZXR1cCgpKS4gSXQgaW5jcmVtZW50cyBjZGV2LT5kZWxheWVkX3N0YXR1cyBpbW1lZGlhdGVs eS4gVGhlbiwgaW4gCj4gdXNiX2NvbXBvc2l0ZV9zZXR1cF9jb250aW51ZSgpLCBpZiBjZGV2LT5k ZWxheWVkX3N0YXR1cyBpcyBub3QgemVybywgaXQgcXVldWVzIAo+IGEgWkxQLCBhbmQgd2FybnMg b3RoZXJ3aXNlLgo+IAo+IFRoaXMgbWVjaGFuaXNtIGRlbGF5cyB0aGUgZGF0YSBzdGFnZSwgbm90 IHRoZSBzdGF0dXMgc3RhZ2UgKG9yLCB0byBiZSBwcmVjaXNlLCAKPiBpdCBkZWxheXMgdGhlIHN0 YXR1cyBzdGFnZSBpbnNvZmFyIGFzIHRoZSBzdGF0dXMgc3RhZ2UgY29tZXMgYWZ0ZXIgdGhlIGRh dGEgCj4gc3RhZ2UpLCBhbmQgb25seSBzdXBwb3J0cyBjb250cm9sIE9VVCByZXF1ZXN0cyB3aXRo IDAgYnl0ZXMgb2YgZGF0YSAod2hpY2ggaXMgCj4gdGhlIGNhc2Ugb2YgYm90aCBVU0JfUkVRX1NF VF9JTlRFUkZBQ0UgYW5kIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04pLiBGb3IgYWxsIAo+IG90 aGVyIHJlcXVlc3RzLCB0aGUgY29tcG9zaXRlIGxheWVyIHBhc3NlcyBVU0JfR0FER0VUX0RFTEFZ RURfU1RBVFVTIHRvIHRoZSAKPiBVREMuCj4gCj4gVGhlIHRocmVlIFVEQ3MgdGhhdCBpbXBsZW1l bnQgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUyBzdXBwb3J0IHNldCBhIAo+IGRlbGF5ZWRfc3Rh dHVzIGZsYWcgaW4gYW4gaW50ZXJuYWwgc3RydWN0dXJlLiBJIGhhdmVuJ3QgaW5zcGVjdGVkIGlu IGRldGFpbHMgCj4gd2hhdCB0aGV5IGRvIG5leHQgYXMgSSdtIG5vdCBmYW1pbGlhciB3aXRoIGFs bCBvZiB0aGVtLCBidXQgdGhlIGR3YzMgZHJpdmVyIAo+IGp1c3Qgc2tpcHMgdGhlIGhhbmRsaW5n IG9mIHRoZSBzdGF0dXMgcGhhc2UgaW4gZHdjM19lcDBfeGZlcm5vdHJlYWR5KCkgYW5kIAo+IGRl bGF5cyBpdCB0byBfX2R3YzNfZ2FkZ2V0X2VwMF9xdWV1ZSgpLiBUaGlzIG9ubHkgd29ya3MgZm9y IDAtbGVuZ3RoIHJlcXVlc3RzLCAKPiB3aXRoIG5vIGRhdGEgcGhhc2UuCj4gCj4gRXZlbiB3aGVu IGxpbWl0ZWQgdG8gMC1sZW5ndGggY29udHJvbCBPVVQgcmVxdWVzdHMsIHRoaXMgbWVjaGFuaXNt IGlzIHJhY3kuIAo+IFRoZSBzZXR1cCBoYW5kbGVyLCB3aGVuIGl0IHdhbnRzIHRvIGRlbGF5IHRo ZSBzdGF0dXMgcGhhc2UsIHdpbGwgcXVldWUgCj4gYXN5bmNocm9ub3VzIHdvcmsgdGhhdCB3aWxs LCB3aGVuIGl0IGNvbXBsZXRlcywgY2FsbCAKPiB1c2JfY29tcG9zaXRlX3NldHVwX2NvbnRpbnVl KCkgdG8gcHJvY2VlZCB3aXRoIHRoZSBzdGF0dXMgcGhhc2UuIFF1ZXVpbmcgdGhlIAo+IHdvcmsg aGFzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBzZXR1cCBoYW5kbGVyIHJldHVybnMsIGFuZCB0aGUg Y2Rldi0KPiA+ZGVsYXllZF9zdGF0dXMgaXMgb25seSBpbmNyZW1lbnRlZCBhZnRlciB0aGUgc2V0 dXAgaGFuZGxlciByZXR1cm5zLCBpbiAKPiBjb21wb3NpdGVfc2V0dXAoKS4gVGhlcmUgaXMgdGh1 cyBhIHRpbWUgd2luZG93IGR1cmluZyB3aGljaCB0aGUgYXN5bmNocm9ub3VzIAo+IHdvcmsgY2Fu IGNhbGwgdXNiX2NvbXBvc2l0ZV9zZXR1cF9jb250aW51ZSgpIGJlZm9yZSBjZGV2LT5kZWxheWVk X3N0YXR1cyBoYXMgCj4gYmVlbiBpbmNyZW1lbnRlZC4gV2UgaGF2ZSBtYW5hZ2VkIHRvIGhpdCB0 aGlzIGluIHByYWN0aWNlLCB3aXRoIGEgc3VycHJpc2luZ2x5IAo+IGhpZ2ggcmF0ZSBzZWVpbmcg aG93IHNtYWxsIHRoZSB3aW5kb3cgaXMuCgpJIHNlZS4gIFRoYW5rcyBmb3IgdGhlIGRldGFpbGVk IGV4cGxhbmF0aW9uLgoKPiBOb3cgdGhhdCBJJ3ZlIHdyaXR0ZW4gYWxsIHRoaXMsIEkgcmVhbGl6 ZSB0aGF0IGNkZXYtPmRlbGF5ZWRfc3RhdHVzIGlzIGd1YXJkZWQgCj4gYnkgY2Rldi0+bG9jay4g SSB0aHVzIHdvbmRlciB3aGV0aGVyIG91ciBhbmFseXNpcyB3YXMgY29ycmVjdCwgb3IgaWYgd2Ug d2VyZSAKPiBoaXR0aW5nIGEgZGlmZmVyZW50IGJ1ZyA6LVMgUGF1bCwgY291bGQgeW91IHRlc3Qg dGhpcyBhZ2FpbiA/IFBsZWFzZSBub3RlLCAKPiBob3dldmVyLCB0aGF0IHRoZSByYWNlIGRlc2Ny aWJlZCBoZXJlIGlzIG5vdCByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggc2VyaWVzLCAKPiBleGNlcHQg aW4gaG93IGl0IGluZmx1ZW5jZXMgdGhlIEFQSSBkZXNpZ24gdG8gYXZvaWQgcmFjZSBjb25kaXRp b25zLgoKUGVyaGFwcyB0aGUgYXN5bmMgd29yayByb3V0aW5lIGRvZXNuJ3QgYWNxdWlyZSBjZGV2 LT5sb2NrLgoKPiA+IEFzc3VtaW5nIHlvdSBhcmUgY29ycmVjdCwgd291bGRuJ3QgaXQgbWFrZSBz ZW5zZSB0byBmaXggb3IgZWxpbWluYXRlCj4gPiB0aGUgcmFjZSBieSBjaGFuZ2luZyBjb21wb3Np dGUuYz8KPiAKPiBJIHdhcyBhYm91dCB0byB3cml0ZSB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gbG9j ayBhY2Nlc3MgdG8gY2Rldi0KPiA+ZGVsYXllZF9zdGF0dXMsIGFuZCBmb3VuZCBvdXQgdGhhdCB3 ZSBhbHJlYWR5IHVzZSBjZGV2LT5sb2NrIHRvIGRvIHNvLiBNb3JlIAo+IGludmVzdGlnYXRpb25z IGFyZSBuZWVkZWQuCj4gCj4gUGxlYXNlIG5vdGUsIGhvd2V2ZXIsIHRoYXQgVVNCX0dBREdFVF9E RUxBWUVEX1NUQVRVUyBpcyBsaW1pdGVkIHRvIDAtbGVuZ3RoIAo+IGNvbnRyb2wgT1VUIHJlcXVl c3RzLCBzbyB0aGUgcHJvYmxlbSB0aGF0IGxlZCB0byB0aGlzIHBhdGNoIHNlcmllcyBzdGlsbCAK PiBleGlzdHMsIGV2ZW4gaWYgdGhlIHJhY2UgY29uZGl0aW9uIEkgdGhvdWdodCB3YXMgdGhlcmUg ZG9lc24ndCBleGlzdC4KClllcywgaXQgaXMgdG9vIGxpbWl0ZWQuCgoKPiA+ID4gR2l2ZW4gdGhh dCB3ZSBuZWVkIHRvIGRlbGF5IHRoZSBzdGF0dXMgc3RhZ2UgYW5kIG5vdCB0aGUgZGF0YSBzdGFn ZSwgd2UKPiA+ID4gY2FuJ3QgZXhwbGljaXRseSByZXF1ZXN0IHRoZSBzdGF0dXMgc3RhZ2UgdGhy b3VnaCBhIHVzYiByZXF1ZXN0IHF1ZXVlLgo+ID4gCj4gPiBXaHkgbm90PyAgVGhlIHN0YXR1cyBz dGFnZSBmb3IgYSBjb250cm9sLU9VVCB0cmFuc2ZlciBpcyBzaW1wbHkgYQo+ID4gemVyby1sZW5n dGggSU4gdHJhbnNhY3Rpb24uICBJdCdzIGVhc3kgdG8gcXVldWUgYSByZXF1ZXN0IGZvciBzdWNo IGEKPiA+IHRyYW5zYWN0aW9uLiAgSXMgdGhlIGlzc3VlIHRoYXQgdGhlcmUncyBubyB3YXkgdG8g c3BlY2lmeSB0aGUgZGlyZWN0aW9uCj4gPiBvZiB0aGUgcmVxdWVzdCAoaGVuY2Ugbm8gZGlyZWN0 IHdheSB0byB0ZWxsIHdoZXRoZXIgYSB6ZXJvLWxlbmd0aAo+ID4gcmVxdWVzdCBpcyBmb3IgdGhl IGRhdGEgc3RhZ2Ugb3IgdGhlIHN0YXR1cyBzdGFnZSk/Cj4gCj4gT0ssIEkgc3VwcG9zZSB3ZSBj b3VsZCBxdWV1ZSBhIHJlcXVlc3QgZm9yIHRoaXMsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgaGF2 ZSAKPiB0byBxdWV1ZSB0d28gcmVxdWVzdHMgZm9yIGNvbnRyb2wgT1VUIHRyYW5zZmVycyAob25l IGZvciB0aGUgZGF0YSBzdGFnZSBhbmQgCj4gb25lIGZvciB0aGUgc3RhdHVzIHN0YWdlKS4gSSdt IGhvd2V2ZXIgbm90IGNvbnZpbmNlZCB0aGF0IHdvdWxkIGJlIHRoZSBiZXN0IAo+IEFQSSB0byBo YW5kbGUgdGhlIHN0YXR1cyBzdGFnZSwgYXMgdGhlIGZ1bmN0aW9uIGRyaXZlciB3b3VsZCBuZWVk IHRvIHF1ZXVlIGEgCj4gcmVxdWVzdCBhbmQgdGhlIFVEQyB3b3VsZCB0aGVuIG5lZWQgdG8gY2hl Y2sgd2hldGhlciB0aGF0IHJlcXVlc3QgY29ycmVzcG9uZHMgCj4gdG8gYSBzdGF0dXMgc3RhZ2Ug YW5kIHByb2Nlc3MgaXQgYWNjb3JkaW5nbHkuIEEgbmV3IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0 aGlzIAo+IHdvdWxkIGJlIGVhc2llciBmb3IgYm90aCB0aGUgZnVuY3Rpb24gZHJpdmVyIGFuZCB0 aGUgVURDIGluIG15IG9waW5pb24uIAo+IFRoZXJlJ3MgYWxzbyB0aGUgZmFjdCB0aGF0IHJlcXVl c3RzIGNhbiBzcGVjaWZ5IGEgY29tcGxldGlvbiBoYW5kbGVyLCBidXQgb25seSAKPiB0aGUgZGF0 YSBzdGFnZSByZXF1ZXN0IHdvdWxkIHNlZSBpdHMgY29tcGxldGlvbiBoYW5kbGVyIGNhbGxlZCAo dW5sZXNzIHdlIAo+IHJlcXVpcmUgVURDcyB0byBjYWxsIGNvbXBsZXRpb24gcmVxdWVzdHMgYXQg dGhlIGNvbXBsZXRpb24gb2YgdGhlIHN0YXR1cyAKPiBzdGFnZSwgYnV0IEknbSBub3Qgc3VyZSB0 aGF0IGFsbCBVRENzIGNhbiByZXBvcnQgdGhlIGV2ZW50IHRvIHRoZSBkcml2ZXIsIGFuZCAKPiB0 aGF0IHdvdWxkIGxpa2VseSBiZSB1c2VsZXNzIGFzIG5vYm9keSBuZWVkcyB0aGF0IGZlYXR1cmUp Lgo+IAo+ID4gQWRtaXR0ZWRseSwgaXQgbWlnaHQgYmUgbmljZSB0byBwcm92aWRlIGEgbGlicmFy eSByb3V0aW5lIGluIHRoZSBVREMKPiA+IGNvcmUgdG8gcXVldWUgc3VjaCByZXF1ZXN0cywgc2lu Y2UgaXQgaW52b2x2ZXMgYSBidW5jaCBvZiB1bmludGVyZXN0aW5nCj4gPiBib2lsZXJwbGF0ZSBv cGVyYXRpb25zLgo+ID4gCj4gPiA+IFdvdWxkIGEgbmV3IGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwg d29yayBmb3IgeW91IGZvciB0aGF0IHB1cnBvc2UgPwo+ID4gCj4gPiBJdCB3b3VsZCBiZSBva2F5 LCBidXQgSSBxdWVzdGlvbiB3aGV0aGVyIG9uZSBpcyByZWFsbHkgbmVlZGVkLgo+IAo+IEkgdGhp bmsgdGhlIEFQSSB3b3VsZCBiZSBjbGVhbmVyLCBidXQgaXQgbWlnaHQganVzdCBiZSBhIG1hdHRl ciBvZiB0YXN0ZS4KCkkgaGF2ZSB0byBhZ3JlZSB0aGF0IGEgc2VwYXJhdGUgZnVuY3Rpb24gd291 bGQgYmUgY2xlYW5lci4gIFdoZXRoZXIKdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcGFydCBvZiB0 aGUgZ2FkZ2V0IEFQSSBvciBqdXN0IGEgY29yZSBsaWJyYXJ5CnJvdXRpbmUgaXMgc29tZXRoaW5n IHdlIG5lZWQgdG8gZGVjaWRlLgoKCj4gPiAoQnV0IGl0IGRvZXMgaW52b2x2ZSBhCj4gPiByYWNl IGluIGNhc2VzIHdoZXJlIHRoZSBob3N0IGdldHMgdGlyZWQgb2Ygd2FpdGluZyBhbmQgaXNzdWVz IGFub3RoZXIKPiA+IFNFVFVQIHBhY2tldCBiZWZvcmUgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGZp cnN0IHRyYW5zZmVyIGlzIGZpbmlzaGVkLikKPiAKPiBJIHdvbmRlciBob3cgbWFueSBVRENzIGhh bmRsZSB0aGF0IHJhY2UgY29ycmVjdGx5IHRvZGF5IDotKQoKUHJvYmFibHkgbm9uZSBvZiB0aGVt LiAgSSBjYW4gdGhpbmsgb2YgdHdvIHdheXMgb2YgZG9pbmcgaXQ6CgoJSGF2ZSB0aGUgVURDIGRy aXZlciBhc3NvY2lhdGUgYSBuZXcgaW50ZWdlciB0YWcgd2l0aCBlYWNoCglTRVRVUCBwYWNrZXQs IGFuZCBoYXZlIGZ1bmN0aW9uIGRyaXZlcnMgaW5jbHVkZSB0aGUKCWNvcnJlc3BvbmRpbmcgdGFn IHdoZW4gdGhleSBxdWV1ZSBhIHJlcXVlc3Qgb24gZXAwLiAgVGhlbiB0aGUKCVVEQyBkcml2ZXIg Y291bGQgcmVmdXNlIHJlcXVlc3RzIHdob3NlIHRhZyB3YXMgb3V0IG9mIGRhdGUuCgoJQ3JlYXRl IGFuIG5ldyBBUEkgcm91dGluZSBmb3IgZnVuY3Rpb24gZHJpdmVycyB0byBjYWxsIGluCgl0aGVp ciBzZXR1cCBoYW5kbGVyLiAgVGhpcyByb3V0aW5lIHdvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQK CW9mIHRoZSBuZXcgU0VUVVAgcGFja2V0LCBhc3N1cmluZyB0aGUgVURDIGRyaXZlciB0aGF0IG5v IG1vcmUKCXJlcXVlc3RzIHdvdWxkIGJlIHF1ZXVlZCBpbiByZXNwb25zZSB0byBlYXJsaWVyIFNF VFVQcy4gIFVudGlsCgl0aGUgcm91dGluZSB3YXMgY2FsbGVkLCB0aGUgVURDIHdvdWxkIHJlZnVz ZSBhbGwgcmVxdWVzdHMgZm9yCgllcDAuICBGdW5jdGlvbiBkcml2ZXJzIHdvdWxkIGJlIHJlc3Bv bnNpYmxlIGZvciB0aGVpciBvd24KCWludGVybmFsIHN5bmNocm9uaXphdGlvbi4KCkJvdGggb2Yg dGhlc2Ugd291bGQgaW52b2x2ZSBub250cml2aWFsIEFQSSBjaGFuZ2VzLCBhbHRob3VnaCB0aGUg Zmlyc3QKY291bGQgYmUgcmVsYXRpdmVseSB1bmludmFzaXZlLiAgSSBkb3VidCBlaXRoZXIgb2Yg dGhlbSBpcyB3b3J0aHdoaWxlCmF0IHRoaXMgcG9pbnQuCgpUaGVyZSdzIGEgc2ltaWxhciByYWNl IGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gIFdoYXQgaGFwcGVucyBpZiB0aGUKY29udHJvbGxlciBy ZWNlaXZlcyBhIG5ldyBTRVRVUCBwYWNrZXQgYW5kIGNvbmN1cnJlbnRseSB0aGUgZHJpdmVyIGlz CnNldHRpbmcgdXAgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGZvciBhIHJlc3BvbnNlIHRvIGFu IGVhcmxpZXIKU0VUVVA/ICBJIGRvbid0IGtub3cgaG93IHJlYWwgY29udHJvbGxlcnMgaGFuZGxl IHRoaXMuCgoKPiA+ID4gSSB3b25kZXIgaWYgdGhlcmUncyByZWFsbHkgYSB1c2UgY2FzZSBmb3Ig ZGVsYXlpbmcgdGhlIGRhdGEgc3RhZ2Ugb2YKPiA+ID4gY29udHJvbCBPVVQgcmVxdWVzdHMsIGFz IGl0IHNlZW1zIHRvIG1lIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlCj4gPiA+IGFzeW5jaHJvbm91 cyB2YWxpZGF0aW9uIG9mIHRoZSBzZXR1cCBhbmQgZGF0YSBzdGFnZXMgdG9nZXRoZXIsIGluIHdo aWNoCj4gPiA+IGNhc2Ugd2Ugd291bGQgYWx3YXlzIHByb2NlZWQgdG8gdGhlIGRhdGEgc3RhZ2Us IGFuZCBvbmx5IHBvdGVudGlhbGx5Cj4gPiA+IGRlbGF5IHRoZSBzdGF0dXMgc3RhZ2UuIEhvd2V2 ZXIsIGlmIHdlIHN3aXRjaCB0byBhbiBleHBsaWNpdCBBUEkgd2hlcmUKPiA+ID4gdGhlIHRyYW5z aXRpb24gZnJvbSB0aGUgc2V0dXAgdG8gdGhlIGRhdGEgc3RhZ2UgaXMgdHJpZ2dlcmVkIGJ5IHF1 ZXVlaW5nCj4gPiA+IGEgcmVxdWVzdCwgYW5kIGdpdmVuIHRoYXQgc3VjaCBhIHRyYW5zaXRpb24g bWF5IG5lZWQgdG8gYmUgZGVsYXllZCBmb3IKPiA+ID4gdGhlIGNvbnRyb2wgSU4gY2FzZSwgZGVs YXlpbmcgdGhlIGRhdGEgc3RhZ2UgZm9yIGNvbnRyb2wgT1VUIHdvdWxkCj4gPiA+IGVzc2VudGlh bGx5IGNvbWUgZm9yIGZyZWUuCj4gCj4gV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgdGhpcyA/IFNo b3VsZCB3ZSBhbGxvdyBmdW5jdGlvbiBkcml2ZXJzIHRvIGRlbGF5IHRoZSAKPiBkYXRhIHN0YWdl IG9mIGNvbnRyb2wgT1VUIHJlcXVlc3RzID8KCllvdSBtZWFuLCBzaG91bGQgd2UgYWxsb3cgZnVu Y3Rpb24gZHJpdmVycyB0byBxdWV1ZSB0aGUgZGF0YS1zdGFnZQpyZXF1ZXN0IGFmdGVyIHRoZSBz ZXR1cCBoYW5kbGVyIGhhcyByZXR1cm5lZD8gIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24Kd2h5IG5v dC4gIEFmdGVyIGFsbCwgc29tZSBkcml2ZXJzIG1heSByZXF1aXJlIHRoaXMuICBMaWtld2lzZSBm b3IgdGhlIApkYXRhIHN0YWdlIG9mIGEgY29udHJvbC1JTi4KCkFub3RoZXIgdGhpbmcgd2Ugc2hv dWxkIGRvIGlzIGdpdmUgZnVuY3Rpb24gZHJpdmVycyBhIHdheSB0byBzZW5kIGEKU1RBTEwgcmVz cG9uc2UgZm9yIHRoZSBzdGF0dXMgc3RhZ2UuICBDdXJyZW50bHkgdGhlcmUncyBubyB3YXkgdG8g ZG8KaXQsIGlmIGEgZGF0YSBzdGFnZSBpcyBwcmVzZW50LgoKCj4gRnJvbSBhbiBBUEkgcG9pbnQg b2YgdmlldywgdG93YXJkcyBmdW5jdGlvbiBkcml2ZXJzLCBJIHJlYWxseSB3YW50IGFuIGV4cGxp Y2l0IAo+IGZ1bmN0aW9uIHRvIHByb2NlZWQgd2l0aCB0aGUgc3RhdHVzIHN0YWdlLiBUaGF0IGNv dWxkIGludGVybmFsbHkgcXVldWUgYSBaTFAgCj4gcmVxdWVzdCBvciBjYWxsIGFub3RoZXIgQVBJ LCBidXQgaW4gYW55IGNhc2UgSSBkb24ndCB3YW50IHRoZSBzdGF0dXMgc3RhZ2UgWkxQIAo+IHJl cXVlc3QgdG8gYmUgdmlzaWJsZSB0byB0aGUgZnVuY3Rpb24gZHJpdmVycy4gRG8geW91IGFncmVl IHdpdGggdGhpcyA/CgpJdCdzIG9rYXkgd2l0aCBtZS4KCj4gVG8gc2ltcGxpZnkgZnVuY3Rpb24g ZHJpdmVycywgZG8geW91IHRoaW5rIHRoZSBhYm92ZSBwcm9wb3NhbCBvZiBhZGRpbmcgYSBmbGFn IAo+IHRvIHRoZSAoZGF0YSBzdGFnZSkgcmVxdWVzdCB0byByZXF1ZXN0IGFuIGF1dG9tYXRpYyB0 cmFuc2l0aW9uIHRvIHRoZSBzdGF0dXMgCj4gc3RhZ2UgaXMgYSBnb29kIGlkZWEgPyBXZSBjb3Vs ZCBldmVuIHBvc3NpYmx5IGludmVydCB0aGUgbG9naWMgYW5kIHRyYW5zaXRpb24gCj4gdG8gdGhl IHN0YXR1cyBzdGFnZSB3aGVuIHRoZSBmbGFnIGlzIG5vdCBzZXQuIEVzc2VudGlhbGx5IHRoaXMg d291bGQgY2FsbCB0aGUgCj4gc3RhdHVzIHN0YWdlIHJlcXVlc3QgZnVuY3Rpb24gcmlnaHQgYWZ0 ZXIgdGhlIGRhdGEgc3RhZ2UgcmVxdWVzdCBjb21wbGV0aW9uIAo+IGhhbmRsZXIgcmV0dXJucywg aW5zdGVhZCBvZiBmb3JjaW5nIGFsbCBmdW5jdGlvbiBkcml2ZXJzIHRvIGRvIHNvIGV4cGxpY2l0 bHkgCj4gYXQgdGhlIGVuZCBvZiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgoKVGhhdCBtYWtlcyBz ZW5zZS4gIEZ1bmN0aW9uIGRyaXZlcnMgdGhlbiB3b3VsZG4ndCBoYXZlIHRvIGJlIGF3YXJlIG9m CnRoZSBuZXcgQVBJLiAgV2UnZCBvbmx5IG5lZWQgdG8gY29udmVydCB0aGUgVURDIGRyaXZlcnMg KHBsdXMgdGhlIHVzZXJzCm9mIFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMpLgoKU2hvdWxkIGNv bnRyb2wtSU4gdHJhbnNmZXJzIHVzZSB0aGUgZmxhZyBhbHNvPyAgSSBjYW4ndCBpbWFnaW5lIHdo eQphbnlvbmUgd291bGQgd2FudCB0byBkZWxheSBvciBvdGhlcndpc2UgYWx0ZXIgYSBjb250cm9s LUlOIHN0YXR1cwpzdGFnZS4KCkFsYW4gU3Rlcm4K