From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [PATCH v2 10/12] dt-bindings: connector: add properties for typec power delivery From: Andrzej Hajda Message-ID: <133b5194-26ff-071a-d3d1-2bfca1375cae@samsung.com> Date: Mon, 5 Mar 2018 10:59:16 +0100 MIME-Version: 1.0 In-Reply-To: Content-Transfer-Encoding: 8bit Content-Language: en-US Content-Type: text/plain; charset="utf-8" References: <1519645759-12701-1-git-send-email-jun.li@nxp.com> <1519645759-12701-11-git-send-email-jun.li@nxp.com> <20522804-65ab-5d48-716a-c199e4c095fc@samsung.com> To: Jun Li , "gregkh@linuxfoundation.org" , "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" Cc: "mark.rutland@arm.com" , "yueyao@google.com" , Peter Chen , "garsilva@embeddedor.com" , "o_leveque@orange.fr" , "shufan_lee@richtek.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: On 05.03.2018 08:00, Jun Li wrote: > >> -----Original Message----- >> From: Andrzej Hajda [mailto:a.hajda@samsung.com] >> Sent: 2018年2月27日 16:41 >> To: Jun Li ; gregkh@linuxfoundation.org; >> robh+dt@kernel.org; heikki.krogerus@linux.intel.com; linux@roeck-us.net >> Cc: mark.rutland@arm.com; yueyao@google.com; Peter Chen >> ; garsilva@embeddedor.com; o_leveque@orange.fr; >> shufan_lee@richtek.com; linux-usb@vger.kernel.org; >> devicetree@vger.kernel.org; dl-linux-imx >> Subject: Re: [PATCH v2 10/12] dt-bindings: connector: add properties for >> typec power delivery >> >> On 26.02.2018 12:49, Li Jun wrote: >>> In case of usb-c-connector with power delivery support, add bingdings >>> supported by current typec driver, so user can pass all those >>> properties via dt. >>> >>> Signed-off-by: Li Jun >>> --- >>> Changes for v2: >>> - Added typec properties are based on general usb connector bindings[1] >>> proposed by Andrzej Hajda. >>> - Use the standard unit suffixes as defined in property-units.txt. >>> >>> [1] >>> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpat >> chwork.kernel.org%2Fpatch%2F10231447%2F&data=02%7C01%7Cjun.li%40 >> nxp.co >> m%7Cccf14a36ca6445ee5f1108d57dbde3c7%7C686ea1d3bc2b4c6fa92cd99 >> c5c30163 >> 5%7C0%7C0%7C636553176880292197&sdata=2Pi0AtiwAqHQE3rGl%2Bo49K >> 7yZZcp%2B >>> 5bvJAknRBMGTrk%3D&reserved=0 >>> >>> .../bindings/connector/usb-connector.txt | 43 >> ++++++++++++++++++++++ >>> 1 file changed, 43 insertions(+) >>> >>> diff --git >>> a/Documentation/devicetree/bindings/connector/usb-connector.txt >>> b/Documentation/devicetree/bindings/connector/usb-connector.txt >>> index e1463f1..242f6df 100644 >>> --- a/Documentation/devicetree/bindings/connector/usb-connector.txt >>> +++ b/Documentation/devicetree/bindings/connector/usb-connector.txt >>> @@ -15,6 +15,30 @@ Optional properties: >>> - type: size of the connector, should be specified in case of USB-A, USB-B >>> non-fullsize connectors: "mini", "micro". >>> >>> +Required properties for usb-c-connector with power delivery support: >>> +- port-type: should be one of "source", "sink" or "dual". >>> +- default-role: preferred power role if port-type is "dual"(drp), >>> +should be >>> + "sink" or "source". >> Since port carries data and power, it would be better to explicitly mention it >> in names of properties which can be ambiguous. >> Maybe instead of 'port-type' you can use 'power-role', for example. > Port-type is align with the name of typec coding and ABI, 'power-role' > is more like for the current role rather than the port's ability. I am not sure what are you exactly mean by "coding and ABI", but I guess it is just about Power-Delivery part of USB-C. And if you want to put this property into USB node without mark it is related to PD part of USB connector, you risk confusion with possible USB data related properties. Simple question, what if somebody wants to add property describing USB data capabilities (DFP, UFP, DRD), how should it be named? > >> Other thing is that default-role is required only in case of DRP, so maybe >> better would be to squash it in power-role, for example: >>     power-role: should be on of "source", "sink", "dual-source", "dual-sink", >> in case of dual roles suffix determines preferred role. > I don't know how much this squash can benefit, "dual-source/sink" is not > directly showing its meaning by name. Some benefit is simpler binding, no conditionally-required property. Another question is that USB TypeC specification describes 7 different "behavioral models" [1]: - Source-only - Source (Default) – strong preference toward being a Source but subsequently capable of becoming a Sink using USB PD swap mechanisms. - Sink-only - Sink (Default) – strong preference toward being a Sink but subsequently capable of becoming a Source using USB PD swap mechanisms. - DRP: Toggling (Source/Sink) - DRP: Sourcing Device - DRP: Sinking Host How it maps to your proposed props? [1]: USB Type-C specification release 1.3, chapter 4.5.1.4. Regards Andrzej > >> >>> +- src-pdos: An array of u32 with each entry providing supported power >>> + source data object(PDO), the detailed bit definitions of PDO can be >>> +found >>> + in "Universal Serial Bus Power Delivery Specification" chapter >>> +6.4.1.2 >>> + Source_Capabilities Message, the order of each entry(PDO) should >>> +follow >>> + the PD spec chapter 6.4.1. Required for power source and power dual >> role. >>> +- snk-pdos: An array of u32 with each entry providing supported power >>> + sink data object(PDO), the detailed bit definitions of PDO can be >>> +found in >>> + "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.3 >>> +Sink >>> + Capabilities Message, the order of each entry(PDO) should follow >>> +the PD >>> + spec chapter 6.4.1. Required for power sink and power dual role. >> We should avoid magic numbers, magic numbers are bad :) If we really need >> to use PDOs here, I think we can re-use PDO_* macros [1] - DTC should be >> able to parse it, maybe some lifting will be necessary. >> >> [1]: >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Felix >> ir.bootlin.com%2Flinux%2Fv4.16-rc3%2Fsource%2Finclude%2Flinux%2Fusb% >> 2Fpd.h%23L161&data=02%7C01%7Cjun.li%40nxp.com%7Cccf14a36ca6445e >> e5f1108d57dbde3c7%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0% >> 7C636553176880292197&sdata=72HA33wgRyd2PMoPnZOlMatI2CuadplkYN >> DDGKFSUB0%3D&reserved=0 >>> +- max-snk-microvolt: The max voltage the sink can support in micro >>> +volts, >>> + required for power sink and power dual role. >>> +- max-snk-microamp: The max current the sink can support in micro >>> +amps, >>> + required for power sink and power dual role. >>> +- max-snk-microwatt-hours: The max power the sink can support in >>> +micro >>> + Watt-hours, required for power sink and power dual role. >>> +- op-snk-microwatt-hours: Sink required operating power in micro >>> +Watt-hours, >>> + if source offered power is less then it, Capability Mismatch is >>> +set, >>> + required for power sink and power dual role. >> What is the relation between above properties and PDOs specified earlier? >> Are you sure all these props are required? >> > Sorry, with latest tcpm code, those props are not required, will remove them. > > Jun Li >> And general remark regarding all above properties. For me, most of them >> are specific not to the port but to devices responsible for power >> management: chargers, pmics,.... >> In many cases these properties are redundant with devices capabilities. >> On the other side I guess in many cases it may be convenient to put them >> here, so I am not sure what is better :) >> >> Regards >> Andrzej >> >>> + >>> Required nodes: >>> - any data bus to the connector should be modeled using the OF graph >> bindings >>> specified in bindings/graph.txt, unless the bus is between parent >>> node and @@ -73,3 +97,22 @@ ccic: s2mm005@33 { >>> }; >>> }; >>> }; >>> + >>> +3. USB-C connector attached to a typec port controller(ptn5110), >>> +which has power delivery support and enables drp. >>> + >>> +typec: ptn5110@50 { >>> + ... >>> + usb_con: connector { >>> + compatible = "usb-c-connector"; >>> + label = "USB-C"; >>> + port-type = "dual"; >>> + default-role = "sink"; >>> + src-pdos = <0x380190c8>; >>> + snk-pdos = <0x380190c8 0x3802d0c8>; >>> + max-snk-microvolt = <9000>; >>> + max-snk-microamp = <2000>; >>> + max-snk-microwatt-hours = <18000>; >>> + op-snk-microwatt-hours = <9000>; >>> + }; >>> +}; 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: [v2,10/12] dt-bindings: connector: add properties for typec power delivery From: Andrzej Hajda Message-Id: <133b5194-26ff-071a-d3d1-2bfca1375cae@samsung.com> Date: Mon, 5 Mar 2018 10:59:16 +0100 To: Jun Li , "gregkh@linuxfoundation.org" , "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" Cc: "mark.rutland@arm.com" , "yueyao@google.com" , Peter Chen , "garsilva@embeddedor.com" , "o_leveque@orange.fr" , "shufan_lee@richtek.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: T24gMDUuMDMuMjAxOCAwODowMCwgSnVuIExpIHdyb3RlOgo+Cj4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tCj4+IEZyb206IEFuZHJ6ZWogSGFqZGEgW21haWx0bzphLmhhamRhQHNhbXN1bmcu Y29tXQo+PiBTZW50OiAyMDE45bm0MuaciDI35pelIDE2OjQxCj4+IFRvOiBKdW4gTGkgPGp1bi5s aUBueHAuY29tPjsgZ3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc7Cj4+IHJvYmgrZHRAa2VybmVs Lm9yZzsgaGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbTsgbGludXhAcm9lY2stdXMubmV0 Cj4+IENjOiBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgeXVleWFvQGdvb2dsZS5jb207IFBldGVyIENo ZW4KPj4gPHBldGVyLmNoZW5AbnhwLmNvbT47IGdhcnNpbHZhQGVtYmVkZGVkb3IuY29tOyBvX2xl dmVxdWVAb3JhbmdlLmZyOwo+PiBzaHVmYW5fbGVlQHJpY2h0ZWsuY29tOyBsaW51eC11c2JAdmdl ci5rZXJuZWwub3JnOwo+PiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgZGwtbGludXgtaW14 IDxsaW51eC1pbXhAbnhwLmNvbT4KPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAxMC8xMl0gZHQt YmluZGluZ3M6IGNvbm5lY3RvcjogYWRkIHByb3BlcnRpZXMgZm9yCj4+IHR5cGVjIHBvd2VyIGRl bGl2ZXJ5Cj4+Cj4+IE9uIDI2LjAyLjIwMTggMTI6NDksIExpIEp1biB3cm90ZToKPj4+IEluIGNh c2Ugb2YgdXNiLWMtY29ubmVjdG9yIHdpdGggcG93ZXIgZGVsaXZlcnkgc3VwcG9ydCwgYWRkIGJp bmdkaW5ncwo+Pj4gc3VwcG9ydGVkIGJ5IGN1cnJlbnQgdHlwZWMgZHJpdmVyLCBzbyB1c2VyIGNh biBwYXNzIGFsbCB0aG9zZQo+Pj4gcHJvcGVydGllcyB2aWEgZHQuCj4+Pgo+Pj4gU2lnbmVkLW9m Zi1ieTogTGkgSnVuIDxqdW4ubGlAbnhwLmNvbT4KPj4+IC0tLQo+Pj4gQ2hhbmdlcyBmb3IgdjI6 Cj4+PiAtIEFkZGVkIHR5cGVjIHByb3BlcnRpZXMgYXJlIGJhc2VkIG9uIGdlbmVyYWwgdXNiIGNv bm5lY3RvciBiaW5kaW5nc1sxXQo+Pj4gICBwcm9wb3NlZCBieSBBbmRyemVqIEhhamRhLgo+Pj4g LSBVc2UgdGhlIHN0YW5kYXJkIHVuaXQgc3VmZml4ZXMgYXMgZGVmaW5lZCBpbiBwcm9wZXJ0eS11 bml0cy50eHQuCj4+Pgo+Pj4gWzFdCj4+Pgo+PiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJv dGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGcGF0Cj4+IGNod29yay5rZXJu ZWwub3JnJTJGcGF0Y2glMkYxMDIzMTQ0NyUyRiZkYXRhPTAyJTdDMDElN0NqdW4ubGklNDAKPj4g bnhwLmNvCj4+IG0lN0NjY2YxNGEzNmNhNjQ0NWVlNWYxMTA4ZDU3ZGJkZTNjNyU3QzY4NmVhMWQz YmMyYjRjNmZhOTJjZDk5Cj4+IGM1YzMwMTYzCj4+IDUlN0MwJTdDMCU3QzYzNjU1MzE3Njg4MDI5 MjE5NyZzZGF0YT0yUGkwQXRpd0FxSFFFM3JHbCUyQm80OUsKPj4gN3laWmNwJTJCCj4+PiA1YnZK QWtuUkJNR1RyayUzRCZyZXNlcnZlZD0wCj4+Pgo+Pj4gIC4uLi9iaW5kaW5ncy9jb25uZWN0b3Iv dXNiLWNvbm5lY3Rvci50eHQgICAgICAgICAgIHwgNDMKPj4gKysrKysrKysrKysrKysrKysrKysr Kwo+Pj4gIDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCj4+Pgo+Pj4gZGlmZiAtLWdp dAo+Pj4gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY29ubmVjdG9yL3VzYi1j b25uZWN0b3IudHh0Cj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jb25u ZWN0b3IvdXNiLWNvbm5lY3Rvci50eHQKPj4+IGluZGV4IGUxNDYzZjEuLjI0MmY2ZGYgMTAwNjQ0 Cj4+PiAtLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY29ubmVjdG9yL3Vz Yi1jb25uZWN0b3IudHh0Cj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGlu Z3MvY29ubmVjdG9yL3VzYi1jb25uZWN0b3IudHh0Cj4+PiBAQCAtMTUsNiArMTUsMzAgQEAgT3B0 aW9uYWwgcHJvcGVydGllczoKPj4+ICAtIHR5cGU6IHNpemUgb2YgdGhlIGNvbm5lY3Rvciwgc2hv dWxkIGJlIHNwZWNpZmllZCBpbiBjYXNlIG9mIFVTQi1BLCBVU0ItQgo+Pj4gICAgbm9uLWZ1bGxz aXplIGNvbm5lY3RvcnM6ICJtaW5pIiwgIm1pY3JvIi4KPj4+Cj4+PiArUmVxdWlyZWQgcHJvcGVy dGllcyBmb3IgdXNiLWMtY29ubmVjdG9yIHdpdGggcG93ZXIgZGVsaXZlcnkgc3VwcG9ydDoKPj4+ ICstIHBvcnQtdHlwZTogc2hvdWxkIGJlIG9uZSBvZiAic291cmNlIiwgInNpbmsiIG9yICJkdWFs Ii4KPj4+ICstIGRlZmF1bHQtcm9sZTogcHJlZmVycmVkIHBvd2VyIHJvbGUgaWYgcG9ydC10eXBl IGlzICJkdWFsIihkcnApLAo+Pj4gK3Nob3VsZCBiZQo+Pj4gKyAgInNpbmsiIG9yICJzb3VyY2Ui Lgo+PiBTaW5jZSBwb3J0IGNhcnJpZXMgZGF0YSBhbmQgcG93ZXIsIGl0IHdvdWxkIGJlIGJldHRl ciB0byBleHBsaWNpdGx5IG1lbnRpb24gaXQKPj4gaW4gbmFtZXMgb2YgcHJvcGVydGllcyB3aGlj aCBjYW4gYmUgYW1iaWd1b3VzLgo+PiBNYXliZSBpbnN0ZWFkIG9mICdwb3J0LXR5cGUnIHlvdSBj YW4gdXNlICdwb3dlci1yb2xlJywgZm9yIGV4YW1wbGUuCj4gUG9ydC10eXBlIGlzIGFsaWduIHdp dGggdGhlIG5hbWUgb2YgdHlwZWMgY29kaW5nIGFuZCBBQkksICdwb3dlci1yb2xlJwo+IGlzIG1v cmUgbGlrZSBmb3IgdGhlIGN1cnJlbnQgcm9sZSByYXRoZXIgdGhhbiB0aGUgcG9ydCdzIGFiaWxp dHkuCgpJIGFtIG5vdCBzdXJlIHdoYXQgYXJlIHlvdSBleGFjdGx5IG1lYW4gYnkgImNvZGluZyBh bmQgQUJJIiwgYnV0IEkgZ3Vlc3MKaXQgaXMganVzdCBhYm91dCBQb3dlci1EZWxpdmVyeSBwYXJ0 IG9mIFVTQi1DLiBBbmQgaWYgeW91IHdhbnQgdG8gcHV0CnRoaXMgcHJvcGVydHkgaW50byBVU0Ig bm9kZSB3aXRob3V0IG1hcmsgaXQgaXMgcmVsYXRlZCB0byBQRCBwYXJ0IG9mIFVTQgpjb25uZWN0 b3IsIHlvdSByaXNrIGNvbmZ1c2lvbiB3aXRoIHBvc3NpYmxlIFVTQiBkYXRhIHJlbGF0ZWQgcHJv cGVydGllcy4KU2ltcGxlIHF1ZXN0aW9uLCB3aGF0IGlmIHNvbWVib2R5IHdhbnRzIHRvIGFkZCBw cm9wZXJ0eSBkZXNjcmliaW5nIFVTQgpkYXRhIGNhcGFiaWxpdGllcyAoREZQLCBVRlAsIERSRCks IGhvdyBzaG91bGQgaXQgYmUgbmFtZWQ/Cgo+Cj4+IE90aGVyIHRoaW5nIGlzIHRoYXQgZGVmYXVs dC1yb2xlIGlzIHJlcXVpcmVkIG9ubHkgaW4gY2FzZSBvZiBEUlAsIHNvIG1heWJlCj4+IGJldHRl ciB3b3VsZCBiZSB0byBzcXVhc2ggaXQgaW4gcG93ZXItcm9sZSwgZm9yIGV4YW1wbGU6Cj4+IMKg wqDCoCBwb3dlci1yb2xlOiBzaG91bGQgYmUgb24gb2YgInNvdXJjZSIsICJzaW5rIiwgImR1YWwt c291cmNlIiwgImR1YWwtc2luayIsCj4+IGluIGNhc2Ugb2YgZHVhbCByb2xlcyBzdWZmaXggZGV0 ZXJtaW5lcyBwcmVmZXJyZWQgcm9sZS4KPiBJIGRvbid0IGtub3cgaG93IG11Y2ggdGhpcyBzcXVh c2ggY2FuIGJlbmVmaXQsICJkdWFsLXNvdXJjZS9zaW5rIiBpcyBub3QKPiBkaXJlY3RseSBzaG93 aW5nIGl0cyBtZWFuaW5nIGJ5IG5hbWUuCgpTb21lIGJlbmVmaXQgaXMgc2ltcGxlciBiaW5kaW5n LCBubyBjb25kaXRpb25hbGx5LXJlcXVpcmVkIHByb3BlcnR5LgoKQW5vdGhlciBxdWVzdGlvbiBp cyB0aGF0IFVTQiBUeXBlQyBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyA3IGRpZmZlcmVudAoiYmVo YXZpb3JhbCBtb2RlbHMiIFsxXToKLSBTb3VyY2Utb25seQotIFNvdXJjZSAoRGVmYXVsdCkg4oCT IHN0cm9uZyBwcmVmZXJlbmNlIHRvd2FyZCBiZWluZyBhIFNvdXJjZSBidXQKc3Vic2VxdWVudGx5 CmNhcGFibGUgb2YgYmVjb21pbmcgYSBTaW5rIHVzaW5nIFVTQiBQRCBzd2FwIG1lY2hhbmlzbXMu Ci0gU2luay1vbmx5Ci0gU2luayAoRGVmYXVsdCkg4oCTIHN0cm9uZyBwcmVmZXJlbmNlIHRvd2Fy ZCBiZWluZyBhIFNpbmsgYnV0CnN1YnNlcXVlbnRseSBjYXBhYmxlIG9mCmJlY29taW5nIGEgU291 cmNlIHVzaW5nIFVTQiBQRCBzd2FwIG1lY2hhbmlzbXMuCi0gRFJQOiBUb2dnbGluZyAoU291cmNl L1NpbmspCi0gRFJQOiBTb3VyY2luZyBEZXZpY2UKLSBEUlA6IFNpbmtpbmcgSG9zdAoKSG93IGl0 IG1hcHMgdG8geW91ciBwcm9wb3NlZCBwcm9wcz8KClsxXTogVVNCIFR5cGUtQyBzcGVjaWZpY2F0 aW9uIHJlbGVhc2UgMS4zLCBjaGFwdGVyIDQuNS4xLjQuCgpSZWdhcmRzCkFuZHJ6ZWoKCj4KPj4K Pj4+ICstIHNyYy1wZG9zOiBBbiBhcnJheSBvZiB1MzIgd2l0aCBlYWNoIGVudHJ5IHByb3ZpZGlu ZyBzdXBwb3J0ZWQgcG93ZXIKPj4+ICsgIHNvdXJjZSBkYXRhIG9iamVjdChQRE8pLCB0aGUgZGV0 YWlsZWQgYml0IGRlZmluaXRpb25zIG9mIFBETyBjYW4gYmUKPj4+ICtmb3VuZAo+Pj4gKyAgaW4g IlVuaXZlcnNhbCBTZXJpYWwgQnVzIFBvd2VyIERlbGl2ZXJ5IFNwZWNpZmljYXRpb24iIGNoYXB0 ZXIKPj4+ICs2LjQuMS4yCj4+PiArICBTb3VyY2VfQ2FwYWJpbGl0aWVzIE1lc3NhZ2UsIHRoZSBv cmRlciBvZiBlYWNoIGVudHJ5KFBETykgc2hvdWxkCj4+PiArZm9sbG93Cj4+PiArICB0aGUgUEQg c3BlYyBjaGFwdGVyIDYuNC4xLiBSZXF1aXJlZCBmb3IgcG93ZXIgc291cmNlIGFuZCBwb3dlciBk dWFsCj4+IHJvbGUuCj4+PiArLSBzbmstcGRvczogQW4gYXJyYXkgb2YgdTMyIHdpdGggZWFjaCBl bnRyeSBwcm92aWRpbmcgc3VwcG9ydGVkIHBvd2VyCj4+PiArICBzaW5rIGRhdGEgb2JqZWN0KFBE TyksIHRoZSBkZXRhaWxlZCBiaXQgZGVmaW5pdGlvbnMgb2YgUERPIGNhbiBiZQo+Pj4gK2ZvdW5k IGluCj4+PiArICAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgUG93ZXIgRGVsaXZlcnkgU3BlY2lmaWNh dGlvbiIgY2hhcHRlciA2LjQuMS4zCj4+PiArU2luawo+Pj4gKyAgQ2FwYWJpbGl0aWVzIE1lc3Nh Z2UsIHRoZSBvcmRlciBvZiBlYWNoIGVudHJ5KFBETykgc2hvdWxkIGZvbGxvdwo+Pj4gK3RoZSBQ RAo+Pj4gKyAgc3BlYyBjaGFwdGVyIDYuNC4xLiBSZXF1aXJlZCBmb3IgcG93ZXIgc2luayBhbmQg cG93ZXIgZHVhbCByb2xlLgo+PiBXZSBzaG91bGQgYXZvaWQgbWFnaWMgbnVtYmVycywgbWFnaWMg bnVtYmVycyBhcmUgYmFkIDopIElmIHdlIHJlYWxseSBuZWVkCj4+IHRvIHVzZSBQRE9zIGhlcmUs IEkgdGhpbmsgd2UgY2FuIHJlLXVzZSBQRE9fKiBtYWNyb3MgWzFdIC0gRFRDIHNob3VsZCBiZQo+ PiBhYmxlIHRvIHBhcnNlIGl0LCBtYXliZSBzb21lIGxpZnRpbmcgd2lsbCBiZSBuZWNlc3Nhcnku Cj4+Cj4+IFsxXToKPj4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9v ay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmVsaXgKPj4gaXIuYm9vdGxpbi5jb20lMkZsaW51eCUy RnY0LjE2LXJjMyUyRnNvdXJjZSUyRmluY2x1ZGUlMkZsaW51eCUyRnVzYiUKPj4gMkZwZC5oJTIz TDE2MSZkYXRhPTAyJTdDMDElN0NqdW4ubGklNDBueHAuY29tJTdDY2NmMTRhMzZjYTY0NDVlCj4+ IGU1ZjExMDhkNTdkYmRlM2M3JTdDNjg2ZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0Mw JTdDMCUKPj4gN0M2MzY1NTMxNzY4ODAyOTIxOTcmc2RhdGE9NzJIQTMzd2dSeWQyUE1vUG5aT2xN YXRJMkN1YWRwbGtZTgo+PiBEREdLRlNVQjAlM0QmcmVzZXJ2ZWQ9MAo+Pj4gKy0gbWF4LXNuay1t aWNyb3ZvbHQ6IFRoZSBtYXggdm9sdGFnZSB0aGUgc2luayBjYW4gc3VwcG9ydCBpbiBtaWNybwo+ Pj4gK3ZvbHRzLAo+Pj4gKyAgcmVxdWlyZWQgZm9yIHBvd2VyIHNpbmsgYW5kIHBvd2VyIGR1YWwg cm9sZS4KPj4+ICstIG1heC1zbmstbWljcm9hbXA6IFRoZSBtYXggY3VycmVudCB0aGUgc2luayBj YW4gc3VwcG9ydCBpbiBtaWNybwo+Pj4gK2FtcHMsCj4+PiArICByZXF1aXJlZCBmb3IgcG93ZXIg c2luayBhbmQgcG93ZXIgZHVhbCByb2xlLgo+Pj4gKy0gbWF4LXNuay1taWNyb3dhdHQtaG91cnM6 IFRoZSBtYXggcG93ZXIgdGhlIHNpbmsgY2FuIHN1cHBvcnQgaW4KPj4+ICttaWNybwo+Pj4gKyAg V2F0dC1ob3VycywgcmVxdWlyZWQgZm9yIHBvd2VyIHNpbmsgYW5kIHBvd2VyIGR1YWwgcm9sZS4K Pj4+ICstIG9wLXNuay1taWNyb3dhdHQtaG91cnM6IFNpbmsgcmVxdWlyZWQgb3BlcmF0aW5nIHBv d2VyIGluIG1pY3JvCj4+PiArV2F0dC1ob3VycywKPj4+ICsgIGlmIHNvdXJjZSBvZmZlcmVkIHBv d2VyIGlzIGxlc3MgdGhlbiBpdCwgQ2FwYWJpbGl0eSBNaXNtYXRjaCBpcwo+Pj4gK3NldCwKPj4+ ICsgIHJlcXVpcmVkIGZvciBwb3dlciBzaW5rIGFuZCBwb3dlciBkdWFsIHJvbGUuCj4+IFdoYXQg aXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gYWJvdmUgcHJvcGVydGllcyBhbmQgUERPcyBzcGVjaWZp ZWQgZWFybGllcj8KPj4gQXJlIHlvdSBzdXJlIGFsbCB0aGVzZSBwcm9wcyBhcmUgcmVxdWlyZWQ/ Cj4+Cj4gU29ycnksIHdpdGggbGF0ZXN0IHRjcG0gY29kZSwgdGhvc2UgcHJvcHMgYXJlIG5vdCBy ZXF1aXJlZCwgd2lsbCByZW1vdmUgdGhlbS4KPgo+IEp1biBMaQo+PiBBbmQgZ2VuZXJhbCByZW1h cmsgcmVnYXJkaW5nIGFsbCBhYm92ZSBwcm9wZXJ0aWVzLiBGb3IgbWUsIG1vc3Qgb2YgdGhlbQo+ PiBhcmUgc3BlY2lmaWMgbm90IHRvIHRoZSBwb3J0IGJ1dCB0byBkZXZpY2VzIHJlc3BvbnNpYmxl IGZvciBwb3dlcgo+PiBtYW5hZ2VtZW50OiBjaGFyZ2VycywgcG1pY3MsLi4uLgo+PiBJbiBtYW55 IGNhc2VzIHRoZXNlIHByb3BlcnRpZXMgYXJlIHJlZHVuZGFudCB3aXRoIGRldmljZXMgY2FwYWJp bGl0aWVzLgo+PiBPbiB0aGUgb3RoZXIgc2lkZSBJIGd1ZXNzIGluIG1hbnkgY2FzZXMgaXQgbWF5 IGJlIGNvbnZlbmllbnQgdG8gcHV0IHRoZW0KPj4gaGVyZSwgc28gSSBhbSBub3Qgc3VyZSB3aGF0 IGlzIGJldHRlciA6KQo+Pgo+PiBSZWdhcmRzCj4+IEFuZHJ6ZWoKPj4KPj4+ICsKPj4+ICBSZXF1 aXJlZCBub2RlczoKPj4+ICAtIGFueSBkYXRhIGJ1cyB0byB0aGUgY29ubmVjdG9yIHNob3VsZCBi ZSBtb2RlbGVkIHVzaW5nIHRoZSBPRiBncmFwaAo+PiBiaW5kaW5ncwo+Pj4gICAgc3BlY2lmaWVk IGluIGJpbmRpbmdzL2dyYXBoLnR4dCwgdW5sZXNzIHRoZSBidXMgaXMgYmV0d2VlbiBwYXJlbnQK Pj4+IG5vZGUgYW5kIEBAIC03MywzICs5NywyMiBAQCBjY2ljOiBzMm1tMDA1QDMzIHsKPj4+ICAJ CX07Cj4+PiAgCX07Cj4+PiAgfTsKPj4+ICsKPj4+ICszLiBVU0ItQyBjb25uZWN0b3IgYXR0YWNo ZWQgdG8gYSB0eXBlYyBwb3J0IGNvbnRyb2xsZXIocHRuNTExMCksCj4+PiArd2hpY2ggaGFzIHBv d2VyIGRlbGl2ZXJ5IHN1cHBvcnQgYW5kIGVuYWJsZXMgZHJwLgo+Pj4gKwo+Pj4gK3R5cGVjOiBw dG41MTEwQDUwIHsKPj4+ICsJLi4uCj4+PiArCXVzYl9jb246IGNvbm5lY3RvciB7Cj4+PiArCQlj b21wYXRpYmxlID0gInVzYi1jLWNvbm5lY3RvciI7Cj4+PiArCQlsYWJlbCA9ICJVU0ItQyI7Cj4+ PiArCQlwb3J0LXR5cGUgPSAiZHVhbCI7Cj4+PiArCQlkZWZhdWx0LXJvbGUgPSAic2luayI7Cj4+ PiArCQlzcmMtcGRvcyA9IDwweDM4MDE5MGM4PjsKPj4+ICsJCXNuay1wZG9zID0gPDB4MzgwMTkw YzggMHgzODAyZDBjOD47Cj4+PiArCQltYXgtc25rLW1pY3Jvdm9sdCA9IDw5MDAwPjsKPj4+ICsJ CW1heC1zbmstbWljcm9hbXAgPSA8MjAwMD47Cj4+PiArCQltYXgtc25rLW1pY3Jvd2F0dC1ob3Vy cyA9IDwxODAwMD47Cj4+PiArCQlvcC1zbmstbWljcm93YXR0LWhvdXJzID0gPDkwMDA+Owo+Pj4g Kwl9Owo+Pj4gK307Ci0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUg bGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8g bWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8v dmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK