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: Mass Storage Gadget Device Falls from SuperSpeed to High Speed From: Felipe Balbi Message-Id: <87a7h8g6yj.fsf@linux.intel.com> Date: Tue, 02 Apr 2019 11:13:56 +0300 To: Rob Weber Cc: linux-usb@vger.kernel.org, mathias.nyman@intel.com List-ID: SGkgUm9iLAoKUm9iIFdlYmVyIDxyb2JAZ25hcmJveC5jb20+IHdyaXRlczoKPiBPbiBUdWUsIEFw ciAwMiwgMjAxOSBhdCAwODo0NjoxNkFNICswMzAwLCBGZWxpcGUgQmFsYmkgd3JvdGU6Cj4+IEZl bGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQGxpbnV4LmludGVsLmNvbT4gd3JpdGVzOgo+PiA+Pj4g bW9kcGh5IGlzIHRoZSBVU0IgUEhZIGludGVncmF0ZWQgaW4geW91ciBTb0MuIFRoZXJlJ3Mgbm8g Y29udHJvbCBmb3IKPj4gPj4+IHRoYXQgZnJvbSBPUyBzaWRlLCBvbmx5IEJJT1MgdW5mb3J0dW5h dGVseS4gVGhlcmUgaXMsIGhvd2V2ZXIsIG9uZSB0aGluZwo+PiA+Pj4gd2UgY2FuIHRyeS4gRFdD MyBoYXMgc2V2ZXJhbCBxdWlyayBmbGFncyBmb3Iga25vd24gcXVpcmt5IFBIWXM7IHBlcmhhcHMK Pj4gPj4+IENIVCBuZWVkcyBvbmUgb2YgdGhvc2UuIENhbiB5b3UgdHJ5IHdpdGggdGhpcyBwYXRj aCBhbmQgbGV0IG1lIGtub3cKPj4gPj4+IHdoZXRoZXIgaXQgaGVscHM/Cj4+ID4+Cj4+ID4+IFN1 cmUgdGhpbmcsIEkgd2lsbCB0cnkgdG9tb3Jyb3cuIENvdWxkIHlvdSBwb3NzaWJseSBleHBsYWlu IHdoYXQgYSBxdWlyawo+PiA+PiBpcyBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWw/IEkgc2Vl IHRoaXMgYWxsIG92ZXIgdGhlIHNvdXJjZSB0cmVlIGJ1dAo+PiA+PiBuZXZlciBrbmV3IGhvdyBp dCB3YXMgdXNlZC4gRG9lcyB0aGUgZHdjMyBhbHNvIGtub3cgYWJvdXQgInF1aXJrcyIgYW5kCj4+ ID4+IHRoZXNlIHBhcnRpY3VsYXIgZmxhZ3M/IG9yIGFyZSB0aGVzZSBmbGFncyBqdXN0IHNwZWNp ZmljIHRvIHRoZSBrZXJuZWwKPj4gPj4gYW5kIGl0cyBmdW5jdGlvbmFsaXR5Pwo+PiA+Pgo+PiA+ Pj4gbW9kaWZpZWQgICBkcml2ZXJzL3VzYi9kd2MzL2R3YzMtcGNpLmMKPj4gPj4+IEBAIC0xMDUs NiArMTA1LDggQEAgc3RhdGljIGludCBkd2MzX2J5dF9lbmFibGVfdWxwaV9yZWZjbG9jayhzdHJ1 Y3QgcGNpX2RldiAqcGNpKQo+PiA+Pj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvcGVydHlfZW50 cnkgZHdjM19wY2lfaW50ZWxfcHJvcGVydGllc1tdID0gewo+PiA+Pj4gIAlQUk9QRVJUWV9FTlRS WV9TVFJJTkcoImRyX21vZGUiLCAicGVyaXBoZXJhbCIpLAo+PiA+Pj4gIAlQUk9QRVJUWV9FTlRS WV9CT09MKCJsaW51eCxzeXNkZXZfaXNfcGFyZW50IiksCj4+ID4+PiArCVBST1BFUlRZX0VOVFJZ X0JPT0woInNucHMsZGlzX3UzX3N1c3BoeV9xdWlyayIpLAo+PiA+Pj4gKwlQUk9QRVJUWV9FTlRS WV9CT09MKCJzbnBzLGRpc191Ml9zdXNwaHlfcXVpcmsiKSwKPj4gPj4+ICAJe30KPj4gPj4+ICB9 Owo+PiA+Pj4gIAo+PiA+Pj4gVGhlc2UgdHdvIHF1aXJrcyB3aWxsIFBIWSBzdXNwZW5kLiBUaGVy ZSBhcmUgb3RoZXIgcmVsZXZhbnQgcXVpcmsgZmxhZ3MKPj4gPiAgICAgICAgICAgICAgICAgICAg IF5eXl5eXl5eCj4+ID4gICAgICAgICAgICAgICAgICAgICB3aWxsIERJU0FCTEUgcGh5IHN1c3Bl bmQgOi0pCj4+ID4KPj4gPj4gV2hhdCBkbyB5b3UgbWVhbiBieSBQSFkgc3VzcGVuZD8gV2lsbCBp dCBkaXNhYmxlIFUyL1UzIGZvciB0aGUgZHdjMz8gSQo+PiA+Cj4+ID4gTm8sIG5vLiBEV0MzIGNh biBzdGlsbCBlbnRlciBVMS9VMi9VMywgYnV0IHRoZSBQSFkgd2lsbCBub3QgZW50ZXIgdGhlCj4+ ID4gbWF0Y2hpbmcgUDEvUDIvUDMgc3RhdGUuCj4+ID4KPj4gPj4gc2VlIGl0IG1vZGlmaWVkIHRo ZSBEV0MzX0dVU0IyUEhZQ0ZHX1NVU1BIWSBiaXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KPj4gPj4g cmVnaXN0ZXIsIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBkd2MzIGRhdGFib29rIHRv IGRpZyBkZWVwZXIKPj4gPj4gaW50byB0aGlzLgo+PiA+Cj4+ID4gVGhlIHNlY29uZCBxdWlyayBm bGFnIChzbnBzLGRpc191Ml9zdXNwaHlfcXVpcmspIHdpbGwgdGVsbCBkd2MzIHRvICpOT1QqCj4+ ID4gcmVxdWVzdCBVU0IyIFBIWSB0byBlbnRlciBsb3cgcG93ZXIgc3RhdGUuIFdoaWxlIHRoZSBm aXJzdCBmbGFnCj4+ID4gKHNucHMsZGlzX3UzX3N1c3BoeV9xdWlyaykgd2lsbCB0ZWxsIGR3YzMg dG8gKk5PVCogcmVxdWVzdCBVU0IzIFBIWSB0bwo+PiA+IGVudGVyIGxvdyBwb3dlciBzdGF0ZS4K Pj4gPgo+PiA+IEluIHJlYWxpdHksIHRoZXkgYXJlIGEgc2luZ2xlIGJsb2NrIG9mIEhXIGJ1dCB0 aGV5IF9jYW5fIGJlIGRpZmZlcmVudAo+PiA+IGFuZCBldmVuIGlmIHRoZXkgYXJlIGEgc2luZ2xl IGJsb2NrLCB0aGV5IF9jYW5fIGhhdmUgc2VwYXJhdGUgY2xvY2sKPj4gPiBkb21haW5zIGFuZCB3 ZSBfbWF5XyBiZSBhYmxlIHRvIGNvbnRyb2wgdGhlbSBzZXBhcmF0ZWx5LiBJIGhhdmVuJ3QgcmVh ZAo+PiA+IGRvY3VtZW50YXRpb24gZm9yIG1vZHBoeSBiZWNhdXNlIHRoZSBPUyBkb2Vzbid0IHRv dWNoIHRoYXQuIElmCj4+ID4gbmVjZXNzYXJ5LCBJIGNhbiB0cnkgdG8gZmluZCBvdXQgbW9yZSBk ZXRhaWxzIGFib3V0IGl0LCBidXQgSSB3aWxsCj4+ID4gcHJvYmFibHkgdGFrZSBzb21lIHRpbWUg dG8gZmluZCB0aGUgY29ycmVjdCBkb2N1bWVudGF0aW9uLgo+PiA+Cj4+ID4+PiB3aGljaCB3ZSBj YW4gdHJ5IGluIGNhc2UgdGhlc2UgdHdvIGRvbid0IGhlbHAuIEknZCBsaWtlIHRvIGZpZ3VyZSBv dXQKPj4gPj4+IGV4YWN0bHkgd2hpY2ggcXVpcmsgZmxhZyBoZWxwcyAoaWYgYW55KS4gQWZ0ZXIg dGhhdCwgd2Ugd291bGQgbmVlZCB0bwo+PiA+Pj4gY2hlY2sgaWYgYSBzaW1pbGFyIHByb2JsZW0g aGFwcGVucyBvbiBhbnkgQ0hUIHN5c3RlbSBvciBqdXN0IHlvdXIKPj4gPj4+IGRlc2lnbi4KPj4g Pj4+IAo+PiA+Pj4gSWYgaXQgaGFwcGVucyBvbiBhbnkgb3RoZXIgc3lzdGVtLCB0aGVuIEkgY2Fu IG1ha2Ugc3VyZSB3ZSBhZGQgYSBxdWlyawo+PiA+Pj4gZmxhZyB0byBhbGwgQ0hUcy4KPj4gPj4K Pj4gPj4gU291bmRzIGdvb2QhCj4+ID4+Cj4+ID4+IFRoYW5rcyBmb3IgdGFraW5nIHRoZSB0aW1l IHRvIGFuc3dlciBteSBxdWVzdGlvbnMhIEl0J3MgZGVmaW5pdGVseQo+PiA+PiBoZWxwZnVsIGZv ciBteSB1bmRlcnN0YW5kaW5nIG9mIFVTQi4gSSdtIGxlYXJuaW5nIHF1aXRlIGEgYml0IG9mCj4+ ID4+IG5ldyBpbmZvcm1hdGlvbiB3aXRoIGVhY2ggZW1haWwgYW5kIGl0J3MgcHJldHR5IGF3ZXNv bWUuCj4+ID4KPj4gPiBObyBwcm9ibGVtcyBhdCBhbGwsIGhhcHB5IHRvIGhlbHAuCj4+IAo+PiBB bnkgdXBkYXRlcyBoZXJlPyBIb3BlZnVsbHkgdGhlIHF1aXJrIGZsYWdzIGFib3ZlIGhlbHBlZC4K Pgo+IFRoYW5rcyBmb3IgZm9sbG93aW5nIHVwLiBNeSB0ZWFtIGFuZCBJIHdlcmUgZG9pbmcgYSBi dW5jaCBvZiB0ZXN0aW5nCgpubyBwcm9ibGVtLgoKPiB0b2RheSBhcyB3ZWxsIGFzIHRoaXMgcGFz dCB3ZWVrZW5kLiBXZSBhcmUgc3RpbGwgc2VlaW5nIG1peGVkIHJlc3VsdHMKPiB3aXRoIHRoZSBz dWdnZXN0aW9uIHlvdSBwcm92aWRlZCB0byB1cyBlYXJsaWVyLiBJIHVuZm9ydHVuYXRlbHkgZG8g bm90Cj4gaGF2ZSBhbnkgbG9ncywgdHJhY2VzLCBvciBhbmFseXplciBjYXB0dXJlcyB0byBiYWNr IHRoaXMgdXAgeWV0LCBidXQgSQo+IGhvcGUgdG8gZ2F0aGVyIG1vcmUgY29uY3JldGUgZGF0YSB0 b21vcnJvdy4KCmNvb2wsIHRoYW5rcwoKPiBUaGVyZSB3ZXJlIHR3byBtYWluIGlzc3VlcyB3ZSBv YnNlcnZlZCB3aXRoIHRoZSBxdWlyayBmbGFncyBhYm92ZToKPgo+ICogSG9zdCBtb2RlIG5vIGxv bmdlciB3b3JrZWQgd2l0aCB0aGVzZSBxdWlya3MgYXBwbGllZC4gUGxlYXNlIGtlZXAgaW4KCklu dGVyZXN0aW5nLiBUaGlzIGlzIHJhdGhlciB1bmV4cGVjdGVkLgoKPiAgIG1pbmQgdGhhdCB3ZSBi YWNrcG9ydGVkIHBhcnQgb2YgYSBwYXRjaHNldCBbMV0gdG8gc3VwcG9ydCBzd2l0Y2hpbmcKPiAg IHRoZSBpbnRlcm5hbCBTUyBtdXggZnJvbSB0aGUgeEhDSSBjb250cm9sbGVyIHRvIHRoZSB4RENJ IGNvbnRyb2xsZXIuCj4gICBBdCBhIHF1aWNrIGdsYW5jZSwgZG8geW91IHNlZSBhbnl0aGluZyBp biB0aGlzIHBhdGNoc2V0IHRoYXQgeW91IHRoaW5rCj4gICBtaWdodCBjYXVzZSBhIHByb2JsZW0g d2l0aCB0aGUgcm9sZSBzd2l0Y2ggZHJpdmVyIGNvbW11bmljYXRpbmcgd2l0aAo+ICAgdGhlIHhI Q0kgY29udHJvbGxlciB3aGVuIHRoZSBxdWlya3MgYXJlIGFwcGxpZWQ/Cgpub3BlLCB0aGF0IHNo b3VsZG4ndCBjYXVzZSB0aGUgYmVoYXZpb3IgeW91J3JlIHNlZWluZy4KCj4gKiBXZSBzdGlsbCBz YXcgdGhlIGRyb3AgZnJvbSBTUyB0byBIUyBvbiBhIFdpbmRvd3MgbGFwdG9wLiBMaW51eCBhbmQg TWFjCj4gICBzZWVtZWQgdG8gYmUgZmluZSwgYnV0IHRoZXJlJ3MgZGVmaW5pdGVseSBhIGNoYW5j ZSB3ZSBkaWQgbm90IHRlc3QKPiAgIHdpdGggZW5vdWdoIHNhbXBsZXMgdG8gY29uZmlkZW50bHkg c2F5IHRoaXMgcXVpcmsgaXMgc3RhYmxlIHdpdGggdGhvc2UKPiAgIGhvc3RzLgoKb2theSwgc28g c3RpbGwgbm90IGdvb2QgZW5vdWdoLiBMZXQncyB0cnkgdG8gcHJldmVudCB0aGUgZGV2aWNlIHNp ZGUKZnJvbSBldmVyIGluaXRpYXRpbmcgVTEvVTIgZW50cnkgYW5kIGZyb20gZXZlciBhY2NlcHRp bmcgTEdPX1UxIGFuZApMR09fVTIgZnJvbSB0aGUgaG9zdC4gSGVyZSdzIGEgKGhhY2spIHBhdGNo IGZvciB0aGF0Cgptb2RpZmllZCAgIGRyaXZlcnMvdXNiL2R3YzMvZXAwLmMKQEAgLTM4Miw3ICsz ODIsNyBAQCBzdGF0aWMgaW50IGR3YzNfZXAwX2hhbmRsZV91MShzdHJ1Y3QgZHdjMyAqZHdjLCBl bnVtIHVzYl9kZXZpY2Vfc3RhdGUgc3RhdGUsCiAKIAlyZWcgPSBkd2MzX3JlYWRsKGR3Yy0+cmVn cywgRFdDM19EQ1RMKTsKIAlpZiAoc2V0KQotCQlyZWcgfD0gRFdDM19EQ1RMX0lOSVRVMUVOQTsK KwkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZQogCQlyZWcgJj0gfkRXQzNfRENUTF9JTklUVTFFTkE7 CiAJZHdjM193cml0ZWwoZHdjLT5yZWdzLCBEV0MzX0RDVEwsIHJlZyk7CkBAIC00MDQsNyArNDA0 LDcgQEAgc3RhdGljIGludCBkd2MzX2VwMF9oYW5kbGVfdTIoc3RydWN0IGR3YzMgKmR3YywgZW51 bSB1c2JfZGV2aWNlX3N0YXRlIHN0YXRlLAogCiAJcmVnID0gZHdjM19yZWFkbChkd2MtPnJlZ3Ms IERXQzNfRENUTCk7CiAJaWYgKHNldCkKLQkJcmVnIHw9IERXQzNfRENUTF9JTklUVTJFTkE7CisJ CXJldHVybiAtRUlOVkFMOwogCWVsc2UKIAkJcmVnICY9IH5EV0MzX0RDVExfSU5JVFUyRU5BOwog CWR3YzNfd3JpdGVsKGR3Yy0+cmVncywgRFdDM19EQ1RMLCByZWcpOwpAQCAtNjI1LDkgKzYyNSw5 IEBAIHN0YXRpYyBpbnQgZHdjM19lcDBfc2V0X2NvbmZpZyhzdHJ1Y3QgZHdjMyAqZHdjLCBzdHJ1 Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQogCQkJICogRW5hYmxlIHRyYW5zaXRpb24gdG8gVTEv VTIgc3RhdGUgd2hlbgogCQkJICogbm90aGluZyBpcyBwZW5kaW5nIGZyb20gYXBwbGljYXRpb24u CiAJCQkgKi8KLQkJCXJlZyA9IGR3YzNfcmVhZGwoZHdjLT5yZWdzLCBEV0MzX0RDVEwpOwotCQkJ cmVnIHw9IChEV0MzX0RDVExfQUNDRVBUVTFFTkEgfCBEV0MzX0RDVExfQUNDRVBUVTJFTkEpOwot CQkJZHdjM193cml0ZWwoZHdjLT5yZWdzLCBEV0MzX0RDVEwsIHJlZyk7CisJCQkvKiByZWcgPSBk d2MzX3JlYWRsKGR3Yy0+cmVncywgRFdDM19EQ1RMKTsgKi8KKwkJCS8qIHJlZyB8PSAoRFdDM19E Q1RMX0FDQ0VQVFUxRU5BIHwgRFdDM19EQ1RMX0FDQ0VQVFUyRU5BKTsgKi8KKwkJCS8qIGR3YzNf d3JpdGVsKGR3Yy0+cmVncywgRFdDM19EQ1RMLCByZWcpOyAqLwogCQl9CiAJCWJyZWFrOwoKCkkg ZG9uJ3QgdGhpbmsgaXQgd2lsbCBhcHBseSBjbGVhbmx5IHRvIHlvdXIga2VybmVsLCBsZXQgbWUg a25vdyBpZiB5b3UKbmVlZCBoZWxwIHBvcnRpbmcgaXQuCiAKPiBTbyB0b21vcnJvdyBJIGhvcGUg dG8gZ2F0aGVyIG1vcmUgY29uY3JldGUgZGF0YSB0byBiYWNrIHVwIHRoZXNlCj4gZmluZGluZ3Mu IE91ciBVU0IgcHJvdG9jb2wgYW5hbHl6ZXIgaXMgYWxzbyBvdXQtb2Ytb3JkZXIgYXQgdGhlIG1v bWVudCwKPiBzbyB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBnZXQgYW5hbHl6ZXIgZGF0YSBmb3Ig YSBkYXkgb3IgdHdvIGVpdGhlci4KPgo+IEFyZSB0aGVyZSBzb21lIG90aGVyIHF1aXJrcyB5b3Ug d291bGQgbGlrZSB1cyB0byB0cnkgb3V0PwoKU2VlIGFib3ZlLCBub3QgYSBxdWlyayBmbGFnLCBi dXQganVzdCBhIGNvbXBsZXRlIHJlbW92YWwgb2YgVTEvVTIgZW50cnkKZnJvbSB0aGUgZGV2aWNl IHNpZGUuCgo+IE92ZXIgdGhlIHdlZWtlbmQsIG9uZSBvZiBvdXIgdGVhbSBtZW1iZXJzIHdhcyBo YWNraW5nIGluIHRoZSBkd2MzIGRyaXZlcgo+IHRvIHRyeSBhbmQgZGlzYWJsZSBMUE0gYXQgdmFy aW91cyBwb2ludHMgaW4gdGhlIGNoYWluIG9mIGV2ZW50cy4gSSd2ZQo+IGF0dGFjaGVkIGEgcGF0 Y2ggdGhhdCB3ZSBiZWxpZXZlIGlzIHByZXR0eSBzdGFibGUuIFdlIGhhdmUgbmV2ZXIgc2VlbiBp dAo+IGRyb3AgZnJvbSBTUyB0byBIUy4gVVNCIHR5cGUgQSB0byB0eXBlIEMgY29ubmVjdGlvbnMg ZnJvbSBhbnkgaG9zdCB0bwo+IG91ciBkZXZpY2Ugc2VlbSBwcmV0dHkgc3RhYmxlLiBJJ3ZlIGF0 dGFjaGVkIGFuIGFyY2hpdmUgY2FsbGVkCj4gImduYXJib3gtc3VjY2Vzcy1hLXRvLWMudGFyLnh6 IiBUaGF0IGNvbnRhaW5zIHRoZSB0cmFjZSBldmVudHMgZm9yIGEKPiBzdWNjZXNzZnVsIHJ1biB3 aGVyZSB3ZSBjb25uZWN0IHRoZSBkZXZpY2UgdG8gYSBXaW5kb3dzIGhvc3QgYW5kIGl0Cj4gZW51 bWVyYXRlcyBhdCBTdXBlclNwZWVkLgoKT2theSwgY29vbC4gSSdsbCBnbyBvdmVyIHlvdXIgdGFy YmFsbHMgYWZ0ZXIgdGhpcyBlbWFpbC4KCj4gVGhpcyBwYXRjaCBpc24ndCBlbnRpcmVseSBzdGFi bGUgYXMgSSBoYXZlbid0IGJlZW4gYWJsZSB0byBnZXQgYQo+IHJlbGlhYmxlIFVTQiBDLXRvLUMg Y29ubmVjdGlvbiBvbiBhbnkgaG9zdCB5ZXQuIEkgZG8gbm90IGhhdmUgYW55IGxvZ3MKPiBvciB0 cmFjZXMgZm9yIHRoaXMgcGFydGljdWxhciBjYXNlIGFuZCBJIGhvcGUgdG8gZ2V0IHRoZW0gdG8g eW91IHNvb24uCj4KPiBEbyB5b3UgcmVtZW1iZXIgdGhlICJmYWlsZWQgdG8gZW5hYmxlIGVwMG91 dCIgZXJyb3IgSSBicmllZmx5Cj4gbWVudGlvbmVkIGVhcmxpZXI/IEkgd2FzIGFibGUgdG8gY2Fw dHVyZSBzb21lIHRyYWNlIGV2ZW50cyB3aGlsZSB0aGlzCj4gb2NjdXJzLiBUaGlzIGlzc3VlIG9j Y2Fpc29uYWxseSBvY2N1cnMgd2hlbiBtb2Rwcm9iaW5nIGdfbWFzc19zdG9yYWdlLgo+IFRoZSBl eGFjdCBzdGVwcyBhcmUgYXMgZm9sbG93czoKPgo+IDEuIHN3aXRjaCBmcm9tIGhvc3QgbW9kZSB0 byBkZXZpY2UgbW9kZSAoZWNobyBkZXZpY2UgPgo+IC9zeXMvY2xhc3MvdXNiX3JvbGUvLi4uL3Jv bGUpCj4gMi4gbW9kcHJvYmUgZ19tYXNzX3N0b3JhZ2UgLi4uCj4gMy4gVHJ5IGFuZCByZXN0IGRl dmljZSBtb2RlIHdpdGggYSBob3N0IGNvbXB1dGVyLCBidXQgeW91J2xsIG9ic2VydmUKPiB0aGF0 IGRldmljZSBtb2RlIGlzIG5vdCB3b3JraW5nLgo+IDQuIG1vZHByb2JlIC1yIGdfbWFzc19zdG9y YWdlIHRvIHJlbW92ZSB0aGUgZ2FkZ2V0IGRyaXZlci4KPiA1LiBzd2l0Y2ggYmFjayB0byBob3N0 IG1vZGUgKGVjaG8gaG9zdCA+IC9zeXMvY2xhc3MvdXNiX3JvbGUvLi4uL3JvbGUpCj4gNi4gc3dp dGNoIGJhY2sgdG8gZGV2aWNlIG1vZGUKPiA3LiBtb2Rwcm9iZSBnX21hc3Nfc3RvcmFnZSAuLi4K PiA4LiBPYnNlcnZlIHRoZSBlcnJvcgoKSG1tLCBvZGQuIFdoZW4gd2UgcmVtb3ZlIGEgZ2FkZ2V0 IGRyaXZlciwgZXZlcnkgZW5kcG9pbnQgKGluY2x1ZGluZyBlcDApCnNob3VsZCBiZSBkaXNhYmxl ZC4KCj4gSSd2ZSBhdHRhY2hlZCB0aGUgdHJhY2VzIGFuZCBkbWVzZyBvdXRwdXQgaW4gYW4gYXJj aGl2ZSB0aXRsZWQKPiAiZ25hcmJveC1lcDBvdXQtZmFpbHVyZS50YXIueHoiLiBQbGVhc2UgbGV0 IG1lIGtub3cgaWYgeW91IG5lZWQgbW9yZQo+IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGlj dWxhciBpc3N1ZS4KCkknbGwgZ28gb3ZlciB0aGUgdHJhY2VzLCB0aGlzIGNvdWxkIGJlIHNvbWV0 aGluZyB0aGF0IGhhcyBiZWVuIGZpeGVkIGluCnRoZSBwYXN0LgoKPiBMYXN0bHksIEkgc3RhcnRl ZCBkaWdnaW5nIHRocm91Z2ggdGhlIGVycmF0YSBhdmFpbGFibGUgZm9yIG91ciBTb0MKPiBzZXJp ZXMgWzJdIGFuZCB0aGVyZSBhcmUgYSBmZXcgdGhhdCBzdGFuZCBvdXQgdG8gbWUsIGluY2x1ZGlu ZyBDSFQ0MCwKPiBDSFQ0NywgQ0hUNDgsIGFuZCBDSFQ1MC4gQ0hUNDcgaXMgdGhlIG1vc3QgY29u Y2VybmluZyBiZWNhdXNlIEkgcmVjYWxsCj4gc2VlaW5nIGFuICJVbmtub3duIiBMRlBTIHN0YXR1 cyBjb21pbmcgZnJvbSB0aGUgZGV2aWNlIGFzIGl0IGlzIHRyeWluZwoKUmlnaHQsIEkgc2F3IHRo YXQgb25lIHRvby4KCj4gdG8gbGVhdmUgVTIuIEkgYXNrZWQgdGhlIHN1cHBvcnQgc3BlY2lhbGlz dHMgb24gb3VyIElQUyB0aWNrZXQgYWJvdXQKPiB0aGVzZSBlcnJhdGEgYW5kIEknbSBob3Bpbmcg dG8gaGVhciBiYWNrIGZyb20gdGhlbSB3aXRoaW4gdGhlIGRheS4gRG8KPiBhbnkgb2YgdGhlc2Ug ZXJyYXRhIHN0YW5kIG91dCB0byB5b3UgYXMgcG9zc2libGUgY3VscHJpdHM/CgpJJ3ZlIHJlYWQg dGhlbSBidXQgdGhleSdyZSByZWxhdGVkIHRvIHRoZSBob3N0IHBvcnQsIG5vdCB0aGUgcGVyaXBo ZXJhbApwb3J0LiBUaGUgcHJvYmxlbSB5b3UncmUgZmFjaW5nIGlzIG9uIHRoZSBwZXJpcGhlcmFs IHNpZGUuIEknZCBzYXkKdGhleSdyZSB1bnJlbGF0ZWQuCgo+IFRoYW5rcyBmb3IgdGFraW5nIGEg bG9vayBhdCBhbGwgb2YgdGhpcyBhZ2FpbiEKCk5vIHByb2JsZW0gYXQgYWxsLiBIYXBweSB0byBo ZWxwCg==