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/5] usb: typec: ucsi: Preliminary support for alternate modes From: Heikki Krogerus Message-Id: <20190208134807.GC16987@kuha.fi.intel.com> Date: Fri, 8 Feb 2019 15:48:07 +0200 To: Michael Hsu Cc: Greg Kroah-Hartman , Ajay Gupta , "linux-usb@vger.kernel.org" List-ID: SGkgTWljaGFlbCwKCk9uIFRodSwgRmViIDA3LCAyMDE5IGF0IDEwOjAxOjE1UE0gKzAwMDAsIE1p Y2hhZWwgSHN1IHdyb3RlOgo+IEhpIEhlaWtraSwKPiAKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tCj4gPiBGcm9tOiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5p bnRlbC5jb20+Cj4gPiBTZW50OiBUaHVyc2RheSwgRmVicnVhcnkgNywgMjAxOSA1OjE2IEFNCj4g PiBUbzogTWljaGFlbCBIc3UgPG1oc3VAbnZpZGlhLmNvbT4KPiA+IENjOiBHcmVnIEtyb2FoLUhh cnRtYW4gPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPjsgQWpheSBHdXB0YQo+ID4gPGFqYXln QG52aWRpYS5jb20+OyBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCj4gPiBTdWJqZWN0OiBSZTog W1BBVENIIDQvNV0gdXNiOiB0eXBlYzogdWNzaTogUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgYWx0 ZXJuYXRlCj4gPiBtb2Rlcwo+ID4gCj4gPiBIaSBNaWNoYWVsLAo+ID4gCj4gPiBPbiBXZWQsIEZl YiAwNiwgMjAxOSBhdCAxMDozNjoyMlBNICswMDAwLCBNaWNoYWVsIEhzdSB3cm90ZToKPiA+ID4g WW91ciBleGlzdGluZyBwYXRjaCBtYXRjaGVzIHRoZSBTVklEIGFuZCB0aGVuIHJlcXVpcmVzIG9u ZS1mb3Itb25lCj4gPiA+IG9yZGVyaW5nIGluIGNhc2UgZWl0aGVyIGFsdCBtb2RlIHRhYmxlIGhh cyBtdWx0aXBsZSBtb2RlIGVudHJpZXMgZm9yIGEKPiA+IHBhcnRpY3VsYXIgU1ZJRC4KPiA+IAo+ ID4gQW5kIHdlJ2xsIGZpeCB0aGF0LCBidXQgdGhhdCBkb2VzIG5vdCBzb2x2ZSB0aGUgaXNzdWUg dGhhdCBJJ20gdGFsa2luZyBhYm91dC4gVGhlcmUKPiA+IGFyZSB0d28gc2VwYXJhdGUgaXNzdWVz IGhlcmUuIFRoYXQgcHJvYmxlbSBpcyBhIGJ1ZyBpbiB0aGUgZHJpdmVyLCBidXQgdGhlIG1ham9y Cj4gPiBwcm9ibGVtIHN0aWxsIGlzIHRoYXQgeW91IGhhdmUgc2VwYXJhdGUgYWx0ZXJuYXRlIG1v ZGVzIGZvciB0aGUgdHdvIERQIHBpbgo+ID4gYXNzaWdubWVudHMsIGFuZCBmaXhpbmcgdGhlIGlu ZGV4IGhhbmRsaW5nIGRvZXMgbm90IGhlbHAgd2l0aCB0aGF0Lgo+ID4gCj4gPiBBY2NvcmRpbmcg dG8gdGhlIERQIGFsdCBtb2RlIHN0YW5kYXJkIHlvdSBkbyBub3QgaGF2ZSBhIHNlcGFyYXRlIG1v ZGUgZm9yCj4gPiBldmVyeSBzdXBwb3J0ZWQgROG5lCBwaW4gYXNzaWdubWVudC4gV2hlbiB5b3Ug Y2hhbmdlIHRoZSBEUCBhbHQgbW9kZSBwaW4KPiA+IGFzc2lnbm1lbnQsIHRoZSBjdXJyZW50IG1v ZGUgaXMgbm90IGV4aXRlZCBhbmQgYSBuZXcgb25lIGVudGVyZWQuCj4gPiBZb3Ugc3RheSBpbiB0 aGUgRGlzcGxheVBvcnQgbW9kZSwgYW5kIHNpbXBseSByZS1jb25maWd1cmUgdXNpbmcgdGhlIERp c3BsYXlQb3J0Cj4gPiBDb25maWd1cmUgY29tbWFuZC4gSW4geW91ciBpbXBsZW1lbnRhdGlvbiBo b3dldmVyLCB0aGUgbW9kZSBpcyBleGlzdGVkLAo+ID4gYW5kIGEgbmV3IG9uZSBlbnRlcmVkLiBT byB5b3VyIGltcGxlbWVudGF0aW9uIGlzIG5vdCBtYWRlIGFjY29yZGluZyB0byB0aGUKPiA+IERp c3BsYXlQb3J0IEFsdCBNb2RlIHN0YW5kYXJkLgo+ID4gCj4gPiBJIGd1ZXNzIEkgaGF2ZSBiZWVu IGFibGUgdG8gZXhwbGFpbiBqdXN0IGhvdyBiaWcgb2YgYSBwcm9ibGVtIHRoYXQgaXMsIGFuZCBh bHNvCj4gPiBob3cgZXhhY3RseSB3ZSB3aWxsIGhhdmUgdG8gaGFuZGxlIGl0Li4uIExldCdzIGxv b2sgYXQgdGhpcyBmcm9tIHVzZXIgc3BhY2UKPiA+IHBlcnNwZWN0aXZlLgo+ID4gCj4gPiBUaGUg dXNlciBzcGFjZSBzaG91bGQgbm90IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIG1ldGhvZCB1c2Vk IHRvIGludGVyZmFjZQo+ID4gd2l0aCB0aGUgVVNCIFR5cGUtQyBjb25uZWN0b3JzIG9uIHRoZSBz eXN0ZW0uIFRoZSBrZXJuZWwgbmVlZHMgdG8gaGlkZSB0aGF0Cj4gPiBhbmQgc3VwcGx5IHVuaWZp ZWQgaW50ZXJmYWNlIHRvIHRoZSB1c2VyIHNwYWNlIHdoaWNoIGxvb2tzIGFuZCBiZWhhdmVzIHRo ZQo+ID4gc2FtZSwgX2Fsd2F5c18uCj4gPiAKPiA+IEluIGNhc2Ugb2YgdGhlIERQIGFsdCBtb2Rl LCB0aGUgdXNlciBzcGFjZSBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBlY3QgdGhlCj4gPiBiZWhh dmlvdXIgdG8gZm9sbG93IHRoZSBEUCBhbHQgbW9kZSBzcGVjLCBzbyB3aGVuIHRoZSB1c2VyIHNw YWNlIHNlbGVjdHMKPiA+IGFub3RoZXIgcGluIGFzc2lnbm1lbnQgZm9yIHRoZSBEUCBhbHQgbW9k ZSBhZGFwdGVyLCBpdCBzaG91bGQgYmUgYSBwYXNzLWZhaWwKPiA+IG9wZXJhdGlvbiB3aXRob3V0 IGFueSBzaWRlIGVmZmVjdHMsIGp1c3QgbGlrZSBleHBsYWluZWQgaW4gdGhlIFZETSBmbG93cyBp biB0aGUKPiA+IERQIGFsdCBtb2RlIHNwZWMuCj4gPiAKPiA+IEJ1dCBub3cgd2l0aCB5b3VyIFBQ TSwgdGhlcmUgaXMgYSBtYWpvciBzaWRlIGVmZmVjdC4gRXZlcnkgdGltZSB0aGUgdXNlciBzcGFj ZQo+ID4gc2VsZWN0cyBhIG5ldyBEUCBwaW4gYXNzaWdubWVudCwgdGhlIGN1cnJlbnQgbW9kZSBp cyBhY3R1YWxseSBleGl0ZWQgYW5kIGEgbmV3Cj4gPiBtb2RlIGVudGVyZWQuIFRoYXQgaXMgbm90 IHN0YW5kYXJkIGJlaGF2aW91ci4gVGhlIHVzZXIgc3BhY2Ugd2lsbCBub3QganVzdAo+ID4gaWdu b3JlIHRoZSBtb2RlIGJlaW5nIGV4aXRlZC4KPiAKPiBOb3QgZXhhY3RseSB0cnVlLi4uIElmIHlv dSBsb29rIG9uIGEgVVNCIFBEIGFuYWx5emVyIGF0IHRoZSB0eXBlIGMgY29ubmVjdG9yJ3MKPiBD QyBsaW5lcywgeW91IHdvdWxkICpub3QqIHNlZSBhbmQgIkV4aXQgTW9kZSIgVkRNcyAtIGp1c3Qg IkRQIENvbmZpZ3VyZSIgVkRNcy4KClNvIHlvdXIgUFBNIGRvZXMgbm90IGFjdHVhbGx5IHJlZmxl Y3QgdGhlIGJlaGF2aW91ciBvZiB0aGUgaGFyZHdhcmUKYW5kIGZpcm13YXJlLiBZb3UgYXJlIG5v dCBhY3R1YWxseSBjaGFuZ2luZyB0aGUgbW9kZSB3aGVuIHlvdSBjaGFuZ2UKdGhlIHBpbiBhc3Np Z25tZW50LCB5ZXQgeW91IHN0aWxsIHdhbnQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gdGhpbmsK aXQgaGFzIHRvIGNoYW5nZSB0aGUgbW9kZSBldmVyeSB0aW1lIGl0IGNoYW5nZXMgdGhlIHBpbiBh c3NpZ25tZW50LgoKVGhhdCBtZWFucyB0aGUgdHdvIG1vZGVzIHlvdSBoYXZlIGFyZSBmb3IgY29t cGxldGVseSBjdXN0b21pc2VkCnNvZnR3YXJlIChmaXJtd2FyZSkgcmVwcmVzZW50YXRpb24gb2Yg dGhlIERpc3BsYXlQb3J0IGFsdCBtb2RlIHN1cHBvcnQKdGhhdCBkb2VzIG5vdCBmb2xsb3cgdGhl IHN0YW5kYXJkLCBhbmQgYXMgd2UgY2FuIG5vdyBzZWUsIHJlZmxlY3QgZXZlbgp0aGUgYWN0dWFs IGJlaGF2aW91ci4KCklmIHlvdXIgY29ubmVjdG9yIGNvdWxkIGFjdCBhcyB0aGUgc2luaywgaG93 IG1hbnkgRFAgYWx0IG1vZGVzIHdvdWxkCnJldHVybiB0byB0aGUgcGFydG5lciBhcyBhIHJlc3Bv bnNlIHRvIERpc2NvdmVyIE1vZGVzIHdpdGggRFAgU1ZJRD8KWW91IHdvdWxkIHJldHVybiBvbmx5 IG9uZSByZWdhcmRsZXNzIG9mIGhvdyBtYW55IHBpbiBhc3NpZ25tZW50cyB5b3UKc3VwcG9ydCwg cmlnaHQ/IFRoYXQncyB3aGF0IHlvdSBuZWVkIHRvIHJldHVybiB0byB0aGUgT1MgYXMgd2VsbCwK YXMgc291cmNlIG9yIHNpbmsuCgo+IFRoZSAiYWN0aXZlIiBzeXNmcyBub2RlIHdpdGggdGhlIHZh bHVlIG9mICJ5ZXMiIHdvdWxkIGNoYW5nZSBwYXRocyAoc2luY2UKPiBhbm90aGVyIFVDU0kgQ0FN IGluZGV4IGlzIGFjdGl2ZSksIGJ1dCB0aGF0J3MgYmVjYXVzZSB0aGVyZSB3YXMgYSBVQ1NJCj4g Y29ubmVjdG9yIHN0YXR1cyBjaGFuZ2UuCj4gCj4gPiBJdCBoYXMgdG8gcmVhY3QgdG8gaXQsIG1v c3QgbGlrZWx5IGJ5IGFzc3VtaW5nIHRoZXJlIHdhcyBhIGZhdGFsIGVycm9yIHNvbWV3aGVyZS4K PiA+IFNvIGluIHByYWN0aWNlIHRoZSB1c2VyIHNwYWNlIGlzIG5vdyBmb3JjZWQgdG8gaGFuZGxl IHlvdXIgY29ubmVjdG9yIGFzIGEKPiA+IHNwZWNpYWwgY2FzZS4KPiAKPiBUaGUgZXhwZWN0ZWQg dXNlciBiZWhhdmlvciBpcyB0byByZWFkIGV2ZXJ5IHN5c2ZzIG5vZGUgb2YgdGhlIGZvcm0uLi4K PiAgICAvc3lzL2NsYXNzL3R5cGVjLy4uLi9zdmlkCj4gICAgL3N5cy9jbGFzcy90eXBlYy8uLi4v dmRvCj4gQW5kIGlmIGl0IGRlY2lkZXMgdGhhdCdzIHRoZSBhbHQgbW9kZSBpdCB3YW50cyB0byBh Y3RpdmF0ZSwgaXQgd3JpdGVzIDEgdG8KPiAgICAvc3lzL2NsYXNzL3R5cGVjLy4uLi9hY3RpdmUK PiBBbmQgb3B0aW9uYWxseSwgcmVhZHMgYWJvdmUgc3lzZnMgZmlsZSB0byBjb25maXJtIHRoYXQg aXQgZGlkIGluZGVlZCBjaGFuZ2UgdG8KPiAneWVzJy4KPiBJdCB3b3VsZCB0cmVhdCBpdCBhcyBh biBmYWlsdXJlIHRvIGVudGVyIGFsdCBtb2RlIGlmIGl0IHdhcyByZWFkIGFzIHN0aWxsCj4gJ25v Jy4KCkRvIHlvdSB1bmRlcnN0YW5kIHRoYXQgdGhvc2Ugc3RlcHMgeW91IGNhbiB0YWtlIF9vbmx5 XyBvbiB5b3VyCmhhcmR3YXJlIGluIG9yZGVyIHRvIGNoYW5nZSB0aGUgRFAgcGluIGFzc2lnbm1l bnQ/IFRoZXkgd29yayBvbmx5IHdpdGgKeW91ciBQUE0uIFRoZSBhcHByb2FjaCBpcyBjb21wbGV0 ZWx5IGN1c3RvbS4KClRoZSBvdGhlciBVQ1NJIFBQTXMgaGFuZGxlIHRoaXMgcGFydCBjb3JyZWN0 bHkuIFRoZXJlIGlzIGFsd2F5cyBvbmx5Cm9uZSBEaXNwbGF5UG9ydCBhbHQgbW9kZSBmb3IgdGhl IGNvbm5lY3RvciwgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBEUApwaW4gYXNzaWdubWVudCB0aGUg Y29ubmVjdG9yIHN1cHBvcnQuIFlvdXIgUFBNIGlzIHRoZSBvbmx5IGV4Y2VwdGlvbi4KCj4gVGhl IHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hpY2ggeW91IGFyZSB0YWxraW5nIGFib3V0IGlzIGlmIHRo ZSB1c2VyIHVzZXMgdGhlCj4gZGlzcGxheXBvcnQgcGluIGFzc2lnbm1lbnQgc3lzZnMgbm9kZSB0 byBzd2l0Y2ggZnJvbSBwaW4gQyB0byBwaW4gRC4KCk5vdGUgdGhhdCB0aGUgc3lzZnMgYXR0cmli dXRlIGZpbGUgZm9yIHRoZSBEUCBwaW4gYXNzaWdubWVudCBpcyB0aGUKX3N0YW5kYXJkXyBpbnRl cmZhY2UuIFRoYXQgc3lzZnMgZmlsZSBpcyB0aGUgaW50ZXJmYWNlIHRoZSB1c2VyIHNwYWNlCndp bGwgdXNlIGZvciBjaGFuZ2luZyB0aGUgRGlzcGxheVBvcnQgcGluIGFzc2lnbm1lbnQuCgo+IFRo ZW4sIGEgcmV2aW91c2x5IGFjdGl2ZSBtb2RlIHdvdWxkIHR1cm4gdG8gJ25vJyBhbmQgYW5vdGhl ciBhY3RpdmUKPiBzeXNmcyBub2RlIHdvdWxkIGNoYW5nZSB0byAneWVzJy4KPiAKPiBCdXQsIHVz ZXItbW9kZSBhcHBsaWNhdGlvbiBoYXMgdG8gYmUgYWJsZSB0byBleHBlY3QgdGhpcyBhbnl3YXlz LiAgIChUaGlzID0KPiBzb21lIGFjdGl2ZSBzeXNmcyBub2RlIGNoYW5naW5nIGV2ZW4gdGhvdWdo IHRoZSBhcHBsaWNhdGlvbiBkaWQgbm90IGNhdXNlIGl0LikKPiBGb3IgZXhhbXBsZSwgYSBUeXBl Qy10by1EUCBkb25nbGUgaXMgYXR0YWNoZWQuICBUaGlzIGRvbmdsZSBpcyBhbHNvIGEgaHViIHNv IGEKPiBkb3duc3RyZWFtIFVTQiBzdXBlcnNwZWVkIGRldmljZSBjYW4gYmUgY29ubmVjdGVkIHRv IGl0LiAgV2hlbiB0aGVyZSBpcyBubwo+IGRvd25zdHJlYW0gVVNCIGRldmljZSBhdHRhY2hlZCwg RGlzcGxheVBvcnQgUGluIEMgKDQgbGFuZXMgb2YgdmlkZW8pIGFyZQo+IHN1cHBvcnRlZC4gIEJ1 dCwgdXNlciBwbHVncyBpbiBhIFVTQiBkZXZpY2UgdG8gdGhlIGRvbmdsZSAtIHRoZW4gdGhlIGRv bmdsZQo+IHdpbGwgc3dpdGNoIGZyb20gcGluIEMgdG8gcGluIEQgYXV0b21hdGljYWxseSB0byBh bGxvdyB0aGUgVVNCIHN1cGVyc3BlZWQKPiBsYW5lcyB0byBiZSBjb25uZWN0ZWQuICBJbiB0aGlz IGNhc2UsIEknZCBleHBlY3QgeW91ciBkaXNwbGF5cG9ydCBBQkkgdG8KPiByZWZsZWN0IHRoZSBh dXRvbWF0aWMgcGluIGFzc2lnbm1lbnQgY2hhbmdlIGZyb20gQyB0byBEIGNhdXNlZCBub3QgYnkg YW55Cj4gc3lzZnMgYWN0aXZpdHksIGJ1dCBzaW1wbHkgcGx1Z2dpbmcgaW4gVVNCIGRldmljZSB0 byB0aGUgdHlwZWMgYWx0IG1vZGUKPiBhZGFwdGVyLiAgSW4gb3VyIHBhcnRpY3VsYXIgY2FzZSwg aW4gYWRkaXRpb24gdG8gdGhlICJwaW4iIHN5c2ZzIG5vZGUgY2hhbmdpbmcKPiBmcm9tICJbQ10g RCBFIiB0byAiQyBbRF0gRSIsIHRoZSAiYWN0aXZlIiBzeXNmcyBub2RlIHdpdGggdGhlICJ5ZXMi IHZhbHVlCj4gd291bGQgY2hhbmdlIGZyb20gb25lIHBhdGggdG8gYW5vdGhlci4gIFNvLCBhcHBs aWNhdGlvbnMgbXVzdCBleHBlY3QgdmFsdWVzIG9mCj4gc3lzZnMgbm9kZXMgdW5kZXIgL3N5cy9j bGFzcy90eXBlYyB0byBjaGFuZ2UgYnkgaXRzZWxmLgoKV2UgYXJlIG5vdCB0YWxraW5nIGFib3V0 IGp1c3Qgc29tZSBzeXNmcyBmaWxlcyBoZXJlLiBFdmVyeSBhbHRlcm5hdGUKbW9kZSB3aWxsIGhh dmUgYSBrZXJuZWwgb2JqZWN0IHJlcHJlc2VudGluZyB0aGVtLiBXaGVuIGEgY2hhbmdlCmhhcHBl bnMgb24gdGhvc2Ugb2JqZWN0cywgZm9yIGV4YW1wbGUgaWYgYSBtb2RlIGlzIGVudGVyZWQgb3Ig ZXhpdGVkCihyZWdhcmRsZXNzIG9mIHdhcyBpdCBhcyBhIHJlc3VsdCBvZiB1c2VyIGFjdGlvbiBv ciBub3QpLCBvciB0aGUgRFAKcGluIGFzc2lnbm1lbnQgZ2V0cyBjaGFuZ2VkLCB0aGUga2VybmVs IGdlbmVyYXRlcyBldmVudHMgZm9yIHRob3NlCm9iamVjdHMuIFRob3NlIGV2ZW50cyBhcmUgdGhl IHByaW1hcnkgc291cmNlIG9mIGluaXRpYWwgaW5mb3JtYXRpb24gaW4KdXNlciBzcGFjZS4KClRo ZSBwcm9ibGVtIGlzIHRoYXQgY2hhbmdpbmcgdGhlIERQIHBpbiBhc3NpZ25tZW50IGhhcyBkaWZm ZXJlbnQKbWVhbmluZyB0aGFuIGV4aXRpbmcgYW5kIGVudGVyaW5nIHRoZSBtb2Rlcy4gQWdhaW4s IGNoYW5naW5nIHRoZSBEUApwaW4gYXNzaWdubWVudCBkb2VzIG5vdCBjYXVzZSB0aGUgbW9kZSB0 byBiZSBleGl0ZWQgYW5kIGFub3RoZXIgdG8gYmUKZW50ZXJlZC4gVGhhdCBpcyBob3cgdGhlIHN0 YW5kYXJkIGRlZmluZXMgaXQgKGFuZCB0aGF0IGlzIHRoZSByZWFzb24Kd2h5IHdlIGhhdmUgdGhl IHNlcGFyYXRlIHN5c2ZzIGF0dHJpYnV0ZSBmaWxlIGZvciB0aGUgRFAgcGluCmFzc2lnbm1lbnQg aW4gdGhlIGZpcnN0IHBsYWNlKSwgYW5kIHRoYXQncyBob3cgdGhlIHVzZXIgc3BhY2Ugd2lsbApl eHBlY3QgdGhlIGludGVyZmFjZSB0byBiZWhhdmUuCgpXaXRoIHlvdXIgUFBNIGhvd2V2ZXIgdGhl IHBpbiBhc3NpZ25tZW50IGlzIGNvbXBsZXRlbHkgY291cGxlZCB3aXRoCnRoZSBjb25uZWN0b3Ig bW9kZS4gSWYgdGhlIHBpbiBhc3NpZ25tZW50IGlzIGNoYW5nZWQsIHRoZSBtb2RlIGdldHMKY2hh bmdlZCwgYW5kIGlmIHRoZSBtb2RlIGlzIGNoYW5nZWQsIHRoZSBwaW4gYXNzaWdubWVudCBnZXRz IGNoYW5nZWQuClRoYXQgaXMgc2ltcGx5IG5vdCB0aGUgc3RhbmRhcmQgYmVoYXZpb3VyLgoKPiA+ IFRvIHByb3RlY3QgdGhlIHVzZXIgc3BhY2UgZnJvbSB0aGF0LCBhbmQgdG8ga2VlcCB0aGUgaW50 ZXJmYWNlIHdlIHByb3ZpZGUgdG8gaXQKPiA+IGNvbnNpc3RlbnQgYW5kIHByZWRpY3RhYmxlLCB3 ZSB3b3VsZCBoYXZlIHRvIGhhbmRsZSB5b3VyIFBQTSBjb21wbGV0ZWx5Cj4gPiBzZXBhcmF0ZWx5 LiBUaGUgdXNlciBzcGFjZSB3aWxsIHNlZSBvbmx5IG9uZSBjb25uZWN0b3IgRFAgYWx0IG1vZGUg bm8gbWF0dGVyCj4gPiB3aGF0LiBFdmVuIGlmIHlvdSBhcmUgdW5hYmxlIGNoYW5nZSB0aGUgUFBN LCB0aGUgZHJpdmVyIHdpbGwgc3RpbGwgaGF2ZSB0bwo+ID4gZXhwb3NlIHRoZSB0d28gY29ubmVj dG9yIERQIGFsdGVybmF0ZSBtb2RlcyBhcyBvbmUgY29ubmVjdG9yIGFsdGVybmF0ZQo+ID4gbW9k ZSB0byB0aGUgdXNlciBzcGFjZS4KPiAKPiBJZiB0aGlzIGlzIGFjY2VwdGFibGUgdG8geW91LAoK SXQgcmVhbGx5IGlzbid0LCBidXQgaXQgd2lsbCBiZSBzb21ldGhpbmcgdGhhdCB3ZSBoYXZlIHRv IGRvIHVubGVzcwp5b3UgZ3V5cyBjYW4gZml4IHlvdXIgZmlybXdhcmUuIFRoaXMgd2lsbCBiZSBh IGxhcmdlIHF1aXJrIHRoYXQgd2UKd291bGQgaGF2ZSB0byBpbXBsZW1lbnQgYW5kIHRoZW4gbWFp bnRhaW4sIGp1c3QgdG8gd29ya2Fyb3VuZCB5ZXQKYW5vdGhlciBmaXJtd2FyZSBpc3N1ZS4KCktl cm5lbCBpcyBhbHJlYWR5IGZ1bGwgb2Ygd29ya2Fyb3VuZHMgbGlrZSB0aGF0LCBzbyBJJ20gYmVn Z2luZyB5b3UsCnBsZWFzZSBnZXQgdGhlIGZpcm13YXJlIGZpeGVkLiBTdXJlbHkgeW91IG5vdyBz ZWUgdGhhdCBpdCBkb2VzIG5vdApleGFjdGx5IGNvbXBseSB3aXRoIHRoZSBEUCBhbHQgbW9kZSBz dGFuZGFyZC4KCldoeSB3b3VsZCB5b3UgbmVlZCB0aGUgdHdvIERQIGFsdCBtb2RlcyBmb3IgdGhl IGNvbm5lY3Rvcj8KCgpCciwK